diff --git a/Controllers/FocusTasksController.cs b/Controllers/FocusTasksController.cs new file mode 100644 index 0000000..1f297fc --- /dev/null +++ b/Controllers/FocusTasksController.cs @@ -0,0 +1,140 @@ +using FocusApp.Data; +using FocusApp.Models; +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; + +namespace FocusApp.Controllers; + +[ApiController] +[Route("api/[controller]")] +public class FocusTasksController : ControllerBase +{ + private readonly FocusContext _context; + private readonly ILogger _logger; + + public FocusTasksController(FocusContext context, ILogger logger) + { + _context = context; + _logger = logger; + } + + [HttpGet] + public async Task>> GetTasks() + { + var tasks = await _context.FocusTasks + .OrderByDescending(t => t.Order) + .ToListAsync(); + return Ok(tasks); + } + + [HttpPost] + public async Task> CreateTask([FromBody] CreateTaskDto dto) + { + if (string.IsNullOrWhiteSpace(dto.Title)) + return BadRequest("Title is required"); + + var maxOrder = await _context.FocusTasks.MaxAsync(t => (int?)t.Order) ?? 0; + + var task = new FocusTask + { + Title = dto.Title, + Description = dto.Description, + Order = maxOrder + 1, + CreatedAt = DateTime.UtcNow, + UpdatedAt = DateTime.UtcNow + }; + + _context.FocusTasks.Add(task); + await _context.SaveChangesAsync(); + + return CreatedAtAction(nameof(GetTasks), new { id = task.Id }, task); + } + + [HttpPut("{id}")] + public async Task UpdateTask(int id, [FromBody] UpdateTaskDto dto) + { + var task = await _context.FocusTasks.FindAsync(id); + if (task == null) + return NotFound(); + + if (!string.IsNullOrWhiteSpace(dto.Title)) + task.Title = dto.Title; + + if (dto.Description != null) + task.Description = dto.Description; + + if (dto.Order.HasValue) + task.Order = dto.Order.Value; + + task.UpdatedAt = DateTime.UtcNow; + + _context.FocusTasks.Update(task); + await _context.SaveChangesAsync(); + + return Ok(task); + } + + [HttpPut("reorder")] + public async Task ReorderTasks([FromBody] ReorderDto dto) + { + if (dto.Orders == null || dto.Orders.Count == 0) + return BadRequest("Orders are required"); + + // Finde maximale Order-Nummer + int maxOrder = dto.Orders.Max(o => o.Order); + + foreach (var order in dto.Orders) + { + var task = await _context.FocusTasks.FindAsync(order.Id); + if (task != null) + { + // Invertiere die Order: hchste wird niedrigste und umgekehrt + task.Order = maxOrder - order.Order; + task.UpdatedAt = DateTime.UtcNow; + _context.FocusTasks.Update(task); + } + } + + await _context.SaveChangesAsync(); + + // Rckgabe: absteigend sortiert (neue oben) + return Ok(await _context.FocusTasks.OrderByDescending(t => t.Order).ToListAsync()); + } + + [HttpDelete("{id}")] + public async Task DeleteTask(int id) + { + var task = await _context.FocusTasks.FindAsync(id); + if (task == null) + return NotFound(); + + _context.FocusTasks.Remove(task); + await _context.SaveChangesAsync(); + + return NoContent(); + } +} + +public class CreateTaskDto +{ + public string Title { get; set; } = string.Empty; + public string? Description { get; set; } +} + +public class UpdateTaskDto +{ + public string? Title { get; set; } + public string? Description { get; set; } + public int? Order { get; set; } +} + +public class ReorderDto +{ + public List Orders { get; set; } = new(); +} + +public class OrderItem +{ + public int Id { get; set; } + public int Order { get; set; } +} diff --git a/Data/FocusContext.cs b/Data/FocusContext.cs new file mode 100644 index 0000000..978d6dc --- /dev/null +++ b/Data/FocusContext.cs @@ -0,0 +1,28 @@ +using FocusApp.Models; +using Microsoft.EntityFrameworkCore; + +namespace FocusApp.Data; + +public class FocusContext : DbContext +{ + public DbSet FocusTasks { get; set; } + + public FocusContext(DbContextOptions options) : base(options) + { + } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + base.OnModelCreating(modelBuilder); + + modelBuilder.Entity(entity => + { + entity.HasKey(e => e.Id); + entity.Property(e => e.Title).IsRequired().HasMaxLength(255); + entity.Property(e => e.Description).HasMaxLength(2000); + entity.Property(e => e.Order).IsRequired(); + entity.Property(e => e.CreatedAt).IsRequired(); + entity.Property(e => e.UpdatedAt).IsRequired(); + }); + } +} diff --git a/Directory.Build.props b/Directory.Build.props new file mode 100644 index 0000000..2ea5c4b --- /dev/null +++ b/Directory.Build.props @@ -0,0 +1,24 @@ + + + + $(DefaultItemExcludes);client\node_modules\** + true + + + + + + + + + + + + + + + + + + + diff --git a/FocusApp.csproj b/FocusApp.csproj new file mode 100644 index 0000000..bd3e8be --- /dev/null +++ b/FocusApp.csproj @@ -0,0 +1,38 @@ + + + + net8.0 + enable + enable + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/FocusApp.sln b/FocusApp.sln new file mode 100644 index 0000000..d1432b0 --- /dev/null +++ b/FocusApp.sln @@ -0,0 +1,39 @@ +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.0.31903.59 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FocusApp", "FocusApp.csproj", "{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{12345678-1234-1234-1234-123456789012}" + ProjectSection(SolutionItems) = preProject + .gitignore = .gitignore + deploy.ps1 = deploy.ps1 + Directory.Build.props = Directory.Build.props + README.md = README.md + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "client", "client", "{23456789-2345-2345-2345-234567890123}" + ProjectSection(SolutionItems) = preProject + client\package.json = client\package.json + client\tsconfig.json = client\tsconfig.json + client\vite.config.ts = client\vite.config.ts + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {BA9C148F-90B2-4778-8D97-6A66BFBD0CDE} + EndGlobalSection +EndGlobal diff --git a/Models/FocusTask.cs b/Models/FocusTask.cs new file mode 100644 index 0000000..ca6f12c --- /dev/null +++ b/Models/FocusTask.cs @@ -0,0 +1,16 @@ +namespace FocusApp.Models; + +public class FocusTask +{ + public int Id { get; set; } + + public string Title { get; set; } = string.Empty; + + public string? Description { get; set; } + + public int Order { get; set; } + + public DateTime CreatedAt { get; set; } = DateTime.UtcNow; + + public DateTime UpdatedAt { get; set; } = DateTime.UtcNow; +} diff --git a/Program.cs b/Program.cs new file mode 100644 index 0000000..404b512 --- /dev/null +++ b/Program.cs @@ -0,0 +1,97 @@ +using FocusApp.Data; +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.FileProviders; + +var builder = WebApplication.CreateBuilder(args); + +// Add services +builder.Services.AddDbContext(options => + options.UseMySql( + builder.Configuration.GetConnectionString("DefaultConnection"), + ServerVersion.AutoDetect(builder.Configuration.GetConnectionString("DefaultConnection")) + ) +); + +builder.Services.AddCors(options => +{ + options.AddPolicy("AllowReact", policy => + { + policy.AllowAnyOrigin() + .AllowAnyMethod() + .AllowAnyHeader(); + }); +}); + +builder.Services.AddControllers(); +builder.Services.AddEndpointsApiExplorer(); +builder.Services.AddSwaggerGen(); + +builder.WebHost.UseUrls("http://0.0.0.0:5000"); + +var app = builder.Build(); + +// Ensure database is created +using (var scope = app.Services.CreateScope()) +{ + var db = scope.ServiceProvider.GetRequiredService(); + db.Database.EnsureCreated(); +} + +if (app.Environment.IsDevelopment()) +{ + app.UseSwagger(); + app.UseSwaggerUI(); +} + +app.UseCors("AllowReact"); + +// STATIC FILES VOR UseRouting! +var clientPath = Path.Combine(app.Environment.ContentRootPath, "client", "build"); +Console.WriteLine($"Looking for frontend at: {clientPath}"); +Console.WriteLine($"Directory exists: {Directory.Exists(clientPath)}"); + +if (Directory.Exists(clientPath)) +{ + Console.WriteLine("Serving React frontend from client/build/"); + + app.UseDefaultFiles(new DefaultFilesOptions + { + FileProvider = new PhysicalFileProvider(clientPath) + }); + + app.UseStaticFiles(new StaticFileOptions + { + FileProvider = new PhysicalFileProvider(clientPath), + RequestPath = "" + }); +} +else +{ + Console.WriteLine("client/build/ not found! Run: cd client && npm run build"); +} + +app.UseAuthorization(); +app.MapControllers(); + +// FALLBACK fr SPA (alle nicht-API Routes >> index.html) +app.MapFallback(async context => +{ + var indexPath = Path.Combine(clientPath, "index.html"); + if (File.Exists(indexPath)) + { + context.Response.ContentType = "text/html"; + await context.Response.SendFileAsync(indexPath); + } + else + { + context.Response.StatusCode = 404; + await context.Response.WriteAsync("Frontend not built. Run: cd client && npm run build"); + } +}); + +Console.WriteLine("FocusApp started!"); +Console.WriteLine("Backend API: http://localhost:5000"); +Console.WriteLine("Swagger: http://localhost:5000/swagger"); +Console.WriteLine("Frontend: http://localhost:5000"); + +app.Run(); diff --git a/Properties/launchSettings.json b/Properties/launchSettings.json new file mode 100644 index 0000000..34e02e9 --- /dev/null +++ b/Properties/launchSettings.json @@ -0,0 +1,12 @@ +{ + "profiles": { + "FocusApp": { + "commandName": "Project", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + }, + "applicationUrl": "https://localhost:62966;http://localhost:62967" + } + } +} \ No newline at end of file diff --git a/README.md b/README.md index 27822a3..0884017 100644 --- a/README.md +++ b/README.md @@ -1 +1,430 @@ -# focusApp +# FocusApp - Todo Application + +Eine moderne, minimalistische Todo-Anwendung mit Drag & Drop, gebaut mit React und ASP.NET Core. + +## 🚀 Features + +- ✅ **Todo-Verwaltung** - Erstellen, Bearbeiten, Löschen von Aufgaben +- 🎯 **Drag & Drop** - Intuitive Neuordnung der Aufgaben +- 🎨 **Dark/Light Mode** - Automatische Theme-Erkennung +- 📱 **Responsive Design** - Optimiert für Desktop und Mobile +- 💾 **Persistente Speicherung** - Daten bleiben nach Neustart erhalten +- 🔄 **RESTful API** - Saubere Backend-Architektur + +## 📋 Voraussetzungen + +- **.NET 9.0 SDK** oder höher +- **Node.js 18+** und **npm** (für React-Entwicklung) +- **Linux Server** (Ubuntu/Debian empfohlen) für Deployment + +## 🛠️ Installation & Setup + +### 1. Projekt klonen/kopieren + +```bash +# Projektverzeichnis erstellen +sudo mkdir -p /opt/tools/FocusApp +sudo chown $USER:$USER /opt/tools/FocusApp +``` + +### 2. .NET Runtime installieren + +```bash +# .NET 9.0 Runtime herunterladen +cd /tmp +wget https://download.visualstudio.microsoft.com/download/pr/...dotnet-runtime-9.0.0-linux-x64.tar.gz + +# Entpacken nach /opt/dotnet +sudo mkdir -p /opt/dotnet +sudo tar -xzf dotnet-runtime-9.0.0-linux-x64.tar.gz -C /opt/dotnet + +# PATH setzen +echo 'export PATH=$PATH:/opt/dotnet' >> ~/.bashrc +source ~/.bashrc +``` + +### 3. React Frontend bauen + +```bash +cd /pfad/zu/deinem/projekt/FocusApp/ClientApp + +# Dependencies installieren +npm install + +# Production Build erstellen +npm run build +``` + +**Wichtig:** Der Build landet in `ClientApp/build/` und wird automatisch vom Backend ausgeliefert. + +### 4. ASP.NET Backend veröffentlichen + +```bash +cd /pfad/zu/deinem/projekt/FocusApp + +# Release Build erstellen +dotnet publish -c Release -o /opt/tools/FocusApp +``` + +## ⚙️ Konfiguration + +### appsettings.Production.json + +Erstelle `/opt/tools/FocusApp/appsettings.Production.json`: + +```json +{ + "Logging": { + "LogLevel": { + "Default": "Warning", + "Microsoft": "Warning", + "Microsoft.AspNetCore": "Warning", + "Microsoft.Hosting.Lifetime": "Information" + } + }, + "AllowedHosts": "*" +} +``` + +**Log Levels:** +- `Error` - Nur Fehler +- `Warning` - Warnungen + Fehler (empfohlen) +- `Information` - Mehr Details +- `None` - Kein Logging + +## 🔧 Systemd Service Setup + +### Service-Datei erstellen + +```bash +sudo vim /etc/systemd/system/focusapp.service +``` + +**Inhalt:** + +```ini +[Unit] +Description=FocusApp Todo Application +After=network.target + +[Service] +Type=simple +WorkingDirectory=/opt/tools/FocusApp +ExecStart=/opt/dotnet/dotnet /opt/tools/FocusApp/FocusApp.dll +Restart=always +RestartSec=10 +User=stefan +Environment=ASPNETCORE_ENVIRONMENT=Production +Environment=DOTNET_ROOT=/opt/dotnet +Environment=ASPNETCORE_URLS=http://0.0.0.0:5000 +SyslogIdentifier=focusapp +StandardOutput=journal +StandardError=journal + +[Install] +WantedBy=multi-user.target +``` + +**Wichtig:** +- `Type=simple` verwenden (nicht `notify`) +- `User` anpassen auf deinen Linux-User +- Port `5000` ist der Standard, kann angepasst werden + +### Service aktivieren + +```bash +# Service neu laden +sudo systemctl daemon-reload + +# Service starten +sudo systemctl start focusapp.service + +# Service beim Boot aktivieren +sudo systemctl enable focusapp.service + +# Status prüfen +sudo systemctl status focusapp.service +``` + +## 📡 API Endpoints + +### Todos abrufen +```http +GET /api/todos +``` + +**Response:** +```json +[ + { + "id": 1, + "title": "Erste Aufgabe", + "description": "Beschreibung", + "createdAt": "2026-01-29T22:00:00Z", + "order": 0 + } +] +``` + +### Todo erstellen +```http +POST /api/todos +Content-Type: application/json + +{ + "title": "Neue Aufgabe", + "description": "Optional" +} +``` + +### Todo aktualisieren +```http +PUT /api/todos/{id} +Content-Type: application/json + +{ + "id": 1, + "title": "Geändert", + "description": "Neue Beschreibung" +} +``` + +### Todo löschen +```http +DELETE /api/todos/{id} +``` + +### Reihenfolge aktualisieren +```http +POST /api/todos/reorder +Content-Type: application/json + +[1, 3, 2, 4] +``` + +## 🎯 Entwicklung + +### Backend starten (Development) + +```bash +cd FocusApp +dotnet run +``` + +API läuft auf: `http://localhost:5000` + +### Frontend starten (Development) + +```bash +cd FocusApp/ClientApp +npm start +``` + +React Dev Server läuft auf: `http://localhost:3000` + +**Proxy:** API-Calls werden automatisch an `http://localhost:5000` weitergeleitet (siehe `package.json`). + +### Datenbank + +Todos werden in einer **SQLite-Datenbank** gespeichert: +- Datei: `/opt/tools/FocusApp/todos.db` +- Automatische Erstellung beim ersten Start +- Entity Framework Core mit Code-First Migrations + +## 🐛 Troubleshooting + +### Service startet nicht + +```bash +# Logs ansehen +sudo journalctl -u focusapp.service -n 50 --no-pager + +# Manuell testen +cd /opt/tools/FocusApp +/opt/dotnet/dotnet FocusApp.dll +``` + +### Service hängt bei "starting" + +**Problem:** `Type=notify` statt `Type=simple` in Service-Datei. + +**Lösung:** Service-Datei editieren, `Type=simple` verwenden, dann: +```bash +sudo systemctl daemon-reload +sudo systemctl restart focusapp.service +``` + +### Port bereits belegt + +```bash +# Port-Verwendung prüfen +sudo netstat -tlnp | grep 5000 + +# Anderen Port in Service-Datei setzen +Environment=ASPNETCORE_URLS=http://0.0.0.0:5001 +``` + +### Datenbank-Fehler + +```bash +# Datenbank löschen und neu erstellen lassen +rm /opt/tools/FocusApp/todos.db +sudo systemctl restart focusapp.service +``` + +## 📦 Projektstruktur + +``` +FocusApp/ +├── ClientApp/ # React Frontend +│ ├── public/ +│ ├── src/ +│ │ ├── components/ # React Komponenten +│ │ ├── App.js # Haupt-App +│ │ ├── App.css # Styles +│ │ └── index.js # Entry Point +│ ├── package.json +│ └── build/ # Production Build (nach npm run build) +├── Controllers/ +│ └── TodosController.cs # API Controller +├── Models/ +│ ├── TodoItem.cs # Todo Model +│ └── TodoContext.cs # EF Core DbContext +├── Program.cs # ASP.NET Startup +├── FocusApp.csproj # Projekt-Datei +├── appsettings.json # Basis-Config +├── appsettings.Production.json # Production-Config +└── todos.db # SQLite Datenbank (runtime) +``` + +## 🔐 Sicherheit + +### Firewall-Regeln + +```bash +# Nur lokalen Zugriff erlauben (Standard) +sudo ufw deny 5000 + +# Für Netzwerkzugriff: +sudo ufw allow 5000/tcp +``` + +### Reverse Proxy (nginx) + +Für Production empfohlen: + +```nginx +server { + listen 80; + server_name focus.example.com; + + location / { + proxy_pass http://localhost:5000; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection keep-alive; + proxy_set_header Host $host; + proxy_cache_bypass $http_upgrade; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } +} +``` + +## 📊 Monitoring + +### Service-Status prüfen + +```bash +# Aktiver Status +sudo systemctl status focusapp.service + +# Letzte Logs +sudo journalctl -u focusapp.service -n 50 + +# Live-Logs folgen +sudo journalctl -u focusapp.service -f +``` + +### Ressourcen-Nutzung + +```bash +# Prozess finden +ps aux | grep FocusApp + +# Speicher/CPU-Nutzung +top -p $(pgrep -f FocusApp.dll) +``` + +## 🚀 Updates & Deployment + +### 1. Code aktualisieren + +```bash +# Frontend neu bauen +cd ClientApp +npm run build + +# Backend neu veröffentlichen +cd .. +dotnet publish -c Release -o /opt/tools/FocusApp +``` + +### 2. Service neu starten + +```bash +sudo systemctl restart focusapp.service +sudo systemctl status focusapp.service +``` + +### 3. Datenbank-Migration (bei Schema-Änderungen) + +```bash +cd FocusApp + +# Migration erstellen +dotnet ef migrations add MigrationName + +# Migration anwenden +dotnet ef database update + +# Oder automatisch beim Start (bereits konfiguriert in Program.cs) +``` + +## 📝 Nützliche Befehle + +```bash +# Service-Befehle +sudo systemctl start focusapp.service # Starten +sudo systemctl stop focusapp.service # Stoppen +sudo systemctl restart focusapp.service # Neustarten +sudo systemctl status focusapp.service # Status +sudo systemctl enable focusapp.service # Auto-Start aktivieren +sudo systemctl disable focusapp.service # Auto-Start deaktivieren + +# Logs +sudo journalctl -u focusapp.service # Alle Logs +sudo journalctl -u focusapp.service -f # Live-Logs +sudo journalctl -u focusapp.service --since "1 hour ago" # Letzte Stunde + +# Datenbank +sqlite3 /opt/tools/FocusApp/todos.db # DB öffnen +.tables # Tabellen anzeigen +SELECT * FROM TodoItems; # Alle Todos +.quit # Beenden +``` + +## 🎨 Design System + +Die App verwendet ein eigenes Design System mit: +- CSS Custom Properties für theming +- Responsive Design (Mobile-First) +- Accessibility-Features (ARIA, Keyboard-Navigation) +- Dark/Light Mode Support + + +--- + +**Version:** 1.0.0 +**Letzte Aktualisierung:** 29. Januar 2026 +**Status:** ✅ Production Ready diff --git a/appsettings.Development.json b/appsettings.Development.json new file mode 100644 index 0000000..34f00ef --- /dev/null +++ b/appsettings.Development.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Debug", + "Microsoft.AspNetCore": "Information" + } + } +} diff --git a/appsettings.json b/appsettings.json new file mode 100644 index 0000000..21fc09d --- /dev/null +++ b/appsettings.json @@ -0,0 +1,14 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Warning", + "Microsoft": "Warning", + "Microsoft.AspNetCore": "Warning", + "Microsoft.Hosting.Lifetime": "Warning" + } + }, + "AllowedHosts": "*", + "ConnectionStrings": { + "DefaultConnection": "Server=maria-db-server.domain.local;Port=3306;Database=focusapp;User=focusapp;Password=[change-password]" + } +} diff --git a/client/.env b/client/.env new file mode 100644 index 0000000..1c630e6 --- /dev/null +++ b/client/.env @@ -0,0 +1 @@ +REACT_APP_API_URL=http://localhost:5000 diff --git a/client/build/android-chrome-192x192.png b/client/build/android-chrome-192x192.png new file mode 100644 index 0000000..9409fdc Binary files /dev/null and b/client/build/android-chrome-192x192.png differ diff --git a/client/build/android-chrome-512x512.png b/client/build/android-chrome-512x512.png new file mode 100644 index 0000000..1050b9c Binary files /dev/null and b/client/build/android-chrome-512x512.png differ diff --git a/client/build/apple-touch-icon.png b/client/build/apple-touch-icon.png new file mode 100644 index 0000000..2b8f712 Binary files /dev/null and b/client/build/apple-touch-icon.png differ diff --git a/client/build/assets/index-C7wD1ms3.js b/client/build/assets/index-C7wD1ms3.js new file mode 100644 index 0000000..4308a18 --- /dev/null +++ b/client/build/assets/index-C7wD1ms3.js @@ -0,0 +1,112 @@ +(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))n(i);new MutationObserver(i=>{for(const o of i)if(o.type==="childList")for(const a of o.addedNodes)a.tagName==="LINK"&&a.rel==="modulepreload"&&n(a)}).observe(document,{childList:!0,subtree:!0});function r(i){const o={};return i.integrity&&(o.integrity=i.integrity),i.referrerPolicy&&(o.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?o.credentials="include":i.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function n(i){if(i.ep)return;i.ep=!0;const o=r(i);fetch(i.href,o)}})();function zu(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var Nf={exports:{}},ra={},Tf={exports:{}},$={};/** + * @license React + * react.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var vi=Symbol.for("react.element"),Nm=Symbol.for("react.portal"),Tm=Symbol.for("react.fragment"),km=Symbol.for("react.strict_mode"),Am=Symbol.for("react.profiler"),Lm=Symbol.for("react.provider"),Bm=Symbol.for("react.context"),Mm=Symbol.for("react.forward_ref"),Fm=Symbol.for("react.suspense"),zm=Symbol.for("react.memo"),Um=Symbol.for("react.lazy"),gc=Symbol.iterator;function jm(e){return e===null||typeof e!="object"?null:(e=gc&&e[gc]||e["@@iterator"],typeof e=="function"?e:null)}var kf={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},Af=Object.assign,Lf={};function un(e,t,r){this.props=e,this.context=t,this.refs=Lf,this.updater=r||kf}un.prototype.isReactComponent={};un.prototype.setState=function(e,t){if(typeof e!="object"&&typeof e!="function"&&e!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")};un.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function Bf(){}Bf.prototype=un.prototype;function Uu(e,t,r){this.props=e,this.context=t,this.refs=Lf,this.updater=r||kf}var ju=Uu.prototype=new Bf;ju.constructor=Uu;Af(ju,un.prototype);ju.isPureReactComponent=!0;var mc=Array.isArray,Mf=Object.prototype.hasOwnProperty,_u={current:null},Ff={key:!0,ref:!0,__self:!0,__source:!0};function zf(e,t,r){var n,i={},o=null,a=null;if(t!=null)for(n in t.ref!==void 0&&(a=t.ref),t.key!==void 0&&(o=""+t.key),t)Mf.call(t,n)&&!Ff.hasOwnProperty(n)&&(i[n]=t[n]);var l=arguments.length-2;if(l===1)i.children=r;else if(1>>1,j=R[_];if(0>>1;_i(Oe,L))tti(It,Oe)?(R[_]=It,R[tt]=L,_=tt):(R[_]=Oe,R[ye]=L,_=ye);else if(tti(It,L))R[_]=It,R[tt]=L,_=tt;else break e}}return B}function i(R,B){var L=R.sortIndex-B.sortIndex;return L!==0?L:R.id-B.id}if(typeof performance=="object"&&typeof performance.now=="function"){var o=performance;e.unstable_now=function(){return o.now()}}else{var a=Date,l=a.now();e.unstable_now=function(){return a.now()-l}}var u=[],s=[],d=1,c=null,f=3,p=!1,v=!1,y=!1,w=typeof setTimeout=="function"?setTimeout:null,m=typeof clearTimeout=="function"?clearTimeout:null,g=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function h(R){for(var B=r(s);B!==null;){if(B.callback===null)n(s);else if(B.startTime<=R)n(s),B.sortIndex=B.expirationTime,t(u,B);else break;B=r(s)}}function S(R){if(y=!1,h(R),!v)if(r(u)!==null)v=!0,K(x);else{var B=r(s);B!==null&&He(S,B.startTime-R)}}function x(R,B){v=!1,y&&(y=!1,m(I),I=-1),p=!0;var L=f;try{for(h(B),c=r(u);c!==null&&(!(c.expirationTime>B)||R&&!z());){var _=c.callback;if(typeof _=="function"){c.callback=null,f=c.priorityLevel;var j=_(c.expirationTime<=B);B=e.unstable_now(),typeof j=="function"?c.callback=j:c===r(u)&&n(u),h(B)}else n(u);c=r(u)}if(c!==null)var Be=!0;else{var ye=r(s);ye!==null&&He(S,ye.startTime-B),Be=!1}return Be}finally{c=null,f=L,p=!1}}var b=!1,C=null,I=-1,k=5,T=-1;function z(){return!(e.unstable_now()-TR||125_?(R.sortIndex=L,t(s,R),r(u)===null&&R===r(s)&&(y?(m(I),I=-1):y=!0,He(S,L-_))):(R.sortIndex=j,t(u,R),v||p||(v=!0,K(x))),R},e.unstable_shouldYield=z,e.unstable_wrapCallback=function(R){var B=f;return function(){var L=f;f=B;try{return R.apply(this,arguments)}finally{f=L}}}})(Wf);$f.exports=Wf;var Xm=$f.exports;/** + * @license React + * react-dom.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var Jm=O,Xe=Xm;function D(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,r=1;r"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Bl=Object.prototype.hasOwnProperty,Zm=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,yc={},wc={};function eh(e){return Bl.call(wc,e)?!0:Bl.call(yc,e)?!1:Zm.test(e)?wc[e]=!0:(yc[e]=!0,!1)}function th(e,t,r,n){if(r!==null&&r.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return n?!1:r!==null?!r.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function rh(e,t,r,n){if(t===null||typeof t>"u"||th(e,t,r,n))return!0;if(n)return!1;if(r!==null)switch(r.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function Le(e,t,r,n,i,o,a){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=n,this.attributeNamespace=i,this.mustUseProperty=r,this.propertyName=e,this.type=t,this.sanitizeURL=o,this.removeEmptyString=a}var be={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){be[e]=new Le(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];be[t]=new Le(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){be[e]=new Le(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){be[e]=new Le(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){be[e]=new Le(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){be[e]=new Le(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){be[e]=new Le(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){be[e]=new Le(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){be[e]=new Le(e,5,!1,e.toLowerCase(),null,!1,!1)});var Wu=/[\-:]([a-z])/g;function Hu(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(Wu,Hu);be[t]=new Le(t,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(Wu,Hu);be[t]=new Le(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(Wu,Hu);be[t]=new Le(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){be[e]=new Le(e,1,!1,e.toLowerCase(),null,!1,!1)});be.xlinkHref=new Le("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){be[e]=new Le(e,1,!1,e.toLowerCase(),null,!0,!0)});function Gu(e,t,r,n){var i=be.hasOwnProperty(t)?be[t]:null;(i!==null?i.type!==0:n||!(2l||i[a]!==o[l]){var u=` +`+i[a].replace(" at new "," at ");return e.displayName&&u.includes("")&&(u=u.replace("",e.displayName)),u}while(1<=a&&0<=l);break}}}finally{Ya=!1,Error.prepareStackTrace=r}return(e=e?e.displayName||e.name:"")?Nn(e):""}function nh(e){switch(e.tag){case 5:return Nn(e.type);case 16:return Nn("Lazy");case 13:return Nn("Suspense");case 19:return Nn("SuspenseList");case 0:case 2:case 15:return e=Xa(e.type,!1),e;case 11:return e=Xa(e.type.render,!1),e;case 1:return e=Xa(e.type,!0),e;default:return""}}function Ul(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case Ar:return"Fragment";case kr:return"Portal";case Ml:return"Profiler";case Vu:return"StrictMode";case Fl:return"Suspense";case zl:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case Vf:return(e.displayName||"Context")+".Consumer";case Gf:return(e._context.displayName||"Context")+".Provider";case qu:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case Ku:return t=e.displayName||null,t!==null?t:Ul(e.type)||"Memo";case Ut:t=e._payload,e=e._init;try{return Ul(e(t))}catch{}}return null}function ih(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=t.render,e=e.displayName||e.name||"",t.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return Ul(t);case 8:return t===Vu?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t}return null}function rr(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function Kf(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function oh(e){var t=Kf(e)?"checked":"value",r=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),n=""+e[t];if(!e.hasOwnProperty(t)&&typeof r<"u"&&typeof r.get=="function"&&typeof r.set=="function"){var i=r.get,o=r.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return i.call(this)},set:function(a){n=""+a,o.call(this,a)}}),Object.defineProperty(e,t,{enumerable:r.enumerable}),{getValue:function(){return n},setValue:function(a){n=""+a},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function Ui(e){e._valueTracker||(e._valueTracker=oh(e))}function Qf(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var r=t.getValue(),n="";return e&&(n=Kf(e)?e.checked?"true":"false":e.value),e=n,e!==r?(t.setValue(e),!0):!1}function xo(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function jl(e,t){var r=t.checked;return oe({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:r??e._wrapperState.initialChecked})}function Ec(e,t){var r=t.defaultValue==null?"":t.defaultValue,n=t.checked!=null?t.checked:t.defaultChecked;r=rr(t.value!=null?t.value:r),e._wrapperState={initialChecked:n,initialValue:r,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function Yf(e,t){t=t.checked,t!=null&&Gu(e,"checked",t,!1)}function _l(e,t){Yf(e,t);var r=rr(t.value),n=t.type;if(r!=null)n==="number"?(r===0&&e.value===""||e.value!=r)&&(e.value=""+r):e.value!==""+r&&(e.value=""+r);else if(n==="submit"||n==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?$l(e,t.type,r):t.hasOwnProperty("defaultValue")&&$l(e,t.type,rr(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function xc(e,t,r){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var n=t.type;if(!(n!=="submit"&&n!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,r||t===e.value||(e.value=t),e.defaultValue=t}r=e.name,r!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,r!==""&&(e.name=r)}function $l(e,t,r){(t!=="number"||xo(e.ownerDocument)!==e)&&(r==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+r&&(e.defaultValue=""+r))}var Tn=Array.isArray;function Hr(e,t,r,n){if(e=e.options,t){t={};for(var i=0;i"+t.valueOf().toString()+"",t=ji.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function Vn(e,t){if(t){var r=e.firstChild;if(r&&r===e.lastChild&&r.nodeType===3){r.nodeValue=t;return}}e.textContent=t}var Ln={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},ah=["Webkit","ms","Moz","O"];Object.keys(Ln).forEach(function(e){ah.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),Ln[t]=Ln[e]})});function ep(e,t,r){return t==null||typeof t=="boolean"||t===""?"":r||typeof t!="number"||t===0||Ln.hasOwnProperty(e)&&Ln[e]?(""+t).trim():t+"px"}function tp(e,t){e=e.style;for(var r in t)if(t.hasOwnProperty(r)){var n=r.indexOf("--")===0,i=ep(r,t[r],n);r==="float"&&(r="cssFloat"),n?e.setProperty(r,i):e[r]=i}}var lh=oe({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function Gl(e,t){if(t){if(lh[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(D(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(D(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(D(61))}if(t.style!=null&&typeof t.style!="object")throw Error(D(62))}}function Vl(e,t){if(e.indexOf("-")===-1)return typeof t.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var ql=null;function Qu(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var Kl=null,Gr=null,Vr=null;function Dc(e){if(e=hi(e)){if(typeof Kl!="function")throw Error(D(280));var t=e.stateNode;t&&(t=la(t),Kl(e.stateNode,e.type,t))}}function rp(e){Gr?Vr?Vr.push(e):Vr=[e]:Gr=e}function np(){if(Gr){var e=Gr,t=Vr;if(Vr=Gr=null,Dc(e),t)for(e=0;e>>=0,e===0?32:31-(yh(e)/wh|0)|0}var _i=64,$i=4194304;function kn(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function Po(e,t){var r=e.pendingLanes;if(r===0)return 0;var n=0,i=e.suspendedLanes,o=e.pingedLanes,a=r&268435455;if(a!==0){var l=a&~i;l!==0?n=kn(l):(o&=a,o!==0&&(n=kn(o)))}else a=r&~i,a!==0?n=kn(a):o!==0&&(n=kn(o));if(n===0)return 0;if(t!==0&&t!==n&&!(t&i)&&(i=n&-n,o=t&-t,i>=o||i===16&&(o&4194240)!==0))return t;if(n&4&&(n|=r&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=n;0r;r++)t.push(e);return t}function gi(e,t,r){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-mt(t),e[t]=r}function bh(e,t){var r=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var n=e.eventTimes;for(e=e.expirationTimes;0=Mn),Lc=" ",Bc=!1;function bp(e,t){switch(e){case"keyup":return Xh.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Cp(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var Lr=!1;function Zh(e,t){switch(e){case"compositionend":return Cp(t);case"keypress":return t.which!==32?null:(Bc=!0,Lc);case"textInput":return e=t.data,e===Lc&&Bc?null:e;default:return null}}function ey(e,t){if(Lr)return e==="compositionend"||!ns&&bp(e,t)?(e=Ep(),uo=es=Wt=null,Lr=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:r,offset:t-e};e=n}e:{for(;r;){if(r.nextSibling){r=r.nextSibling;break e}r=r.parentNode}r=void 0}r=Uc(r)}}function Rp(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?Rp(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function Op(){for(var e=window,t=xo();t instanceof e.HTMLIFrameElement;){try{var r=typeof t.contentWindow.location.href=="string"}catch{r=!1}if(r)e=t.contentWindow;else break;t=xo(e.document)}return t}function is(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}function sy(e){var t=Op(),r=e.focusedElem,n=e.selectionRange;if(t!==r&&r&&r.ownerDocument&&Rp(r.ownerDocument.documentElement,r)){if(n!==null&&is(r)){if(t=n.start,e=n.end,e===void 0&&(e=t),"selectionStart"in r)r.selectionStart=t,r.selectionEnd=Math.min(e,r.value.length);else if(e=(t=r.ownerDocument||document)&&t.defaultView||window,e.getSelection){e=e.getSelection();var i=r.textContent.length,o=Math.min(n.start,i);n=n.end===void 0?o:Math.min(n.end,i),!e.extend&&o>n&&(i=n,n=o,o=i),i=jc(r,o);var a=jc(r,n);i&&a&&(e.rangeCount!==1||e.anchorNode!==i.node||e.anchorOffset!==i.offset||e.focusNode!==a.node||e.focusOffset!==a.offset)&&(t=t.createRange(),t.setStart(i.node,i.offset),e.removeAllRanges(),o>n?(e.addRange(t),e.extend(a.node,a.offset)):(t.setEnd(a.node,a.offset),e.addRange(t)))}}for(t=[],e=r;e=e.parentNode;)e.nodeType===1&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof r.focus=="function"&&r.focus(),r=0;r=document.documentMode,Br=null,eu=null,zn=null,tu=!1;function _c(e,t,r){var n=r.window===r?r.document:r.nodeType===9?r:r.ownerDocument;tu||Br==null||Br!==xo(n)||(n=Br,"selectionStart"in n&&is(n)?n={start:n.selectionStart,end:n.selectionEnd}:(n=(n.ownerDocument&&n.ownerDocument.defaultView||window).getSelection(),n={anchorNode:n.anchorNode,anchorOffset:n.anchorOffset,focusNode:n.focusNode,focusOffset:n.focusOffset}),zn&&Jn(zn,n)||(zn=n,n=Oo(eu,"onSelect"),0zr||(e.current=lu[zr],lu[zr]=null,zr--)}function X(e,t){zr++,lu[zr]=e.current,e.current=t}var nr={},Re=ar(nr),Ue=ar(!1),Sr=nr;function Xr(e,t){var r=e.type.contextTypes;if(!r)return nr;var n=e.stateNode;if(n&&n.__reactInternalMemoizedUnmaskedChildContext===t)return n.__reactInternalMemoizedMaskedChildContext;var i={},o;for(o in r)i[o]=t[o];return n&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=i),i}function je(e){return e=e.childContextTypes,e!=null}function To(){Z(Ue),Z(Re)}function Kc(e,t,r){if(Re.current!==nr)throw Error(D(168));X(Re,t),X(Ue,r)}function zp(e,t,r){var n=e.stateNode;if(t=t.childContextTypes,typeof n.getChildContext!="function")return r;n=n.getChildContext();for(var i in n)if(!(i in t))throw Error(D(108,ih(e)||"Unknown",i));return oe({},r,n)}function ko(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||nr,Sr=Re.current,X(Re,e),X(Ue,Ue.current),!0}function Qc(e,t,r){var n=e.stateNode;if(!n)throw Error(D(169));r?(e=zp(e,t,Sr),n.__reactInternalMemoizedMergedChildContext=e,Z(Ue),Z(Re),X(Re,e)):Z(Ue),X(Ue,r)}var Ot=null,ua=!1,dl=!1;function Up(e){Ot===null?Ot=[e]:Ot.push(e)}function Ey(e){ua=!0,Up(e)}function lr(){if(!dl&&Ot!==null){dl=!0;var e=0,t=V;try{var r=Ot;for(V=1;e>=a,i-=a,Nt=1<<32-mt(t)+i|r<I?(k=C,C=null):k=C.sibling;var T=f(m,C,h[I],S);if(T===null){C===null&&(C=k);break}e&&C&&T.alternate===null&&t(m,C),g=o(T,g,I),b===null?x=T:b.sibling=T,b=T,C=k}if(I===h.length)return r(m,C),te&&cr(m,I),x;if(C===null){for(;II?(k=C,C=null):k=C.sibling;var z=f(m,C,T.value,S);if(z===null){C===null&&(C=k);break}e&&C&&z.alternate===null&&t(m,C),g=o(z,g,I),b===null?x=z:b.sibling=z,b=z,C=k}if(T.done)return r(m,C),te&&cr(m,I),x;if(C===null){for(;!T.done;I++,T=h.next())T=c(m,T.value,S),T!==null&&(g=o(T,g,I),b===null?x=T:b.sibling=T,b=T);return te&&cr(m,I),x}for(C=n(m,C);!T.done;I++,T=h.next())T=p(C,m,I,T.value,S),T!==null&&(e&&T.alternate!==null&&C.delete(T.key===null?I:T.key),g=o(T,g,I),b===null?x=T:b.sibling=T,b=T);return e&&C.forEach(function(re){return t(m,re)}),te&&cr(m,I),x}function w(m,g,h,S){if(typeof h=="object"&&h!==null&&h.type===Ar&&h.key===null&&(h=h.props.children),typeof h=="object"&&h!==null){switch(h.$$typeof){case zi:e:{for(var x=h.key,b=g;b!==null;){if(b.key===x){if(x=h.type,x===Ar){if(b.tag===7){r(m,b.sibling),g=i(b,h.props.children),g.return=m,m=g;break e}}else if(b.elementType===x||typeof x=="object"&&x!==null&&x.$$typeof===Ut&&Jc(x)===b.type){r(m,b.sibling),g=i(b,h.props),g.ref=En(m,b,h),g.return=m,m=g;break e}r(m,b);break}else t(m,b);b=b.sibling}h.type===Ar?(g=yr(h.props.children,m.mode,S,h.key),g.return=m,m=g):(S=ho(h.type,h.key,h.props,null,m.mode,S),S.ref=En(m,g,h),S.return=m,m=S)}return a(m);case kr:e:{for(b=h.key;g!==null;){if(g.key===b)if(g.tag===4&&g.stateNode.containerInfo===h.containerInfo&&g.stateNode.implementation===h.implementation){r(m,g.sibling),g=i(g,h.children||[]),g.return=m,m=g;break e}else{r(m,g);break}else t(m,g);g=g.sibling}g=wl(h,m.mode,S),g.return=m,m=g}return a(m);case Ut:return b=h._init,w(m,g,b(h._payload),S)}if(Tn(h))return v(m,g,h,S);if(mn(h))return y(m,g,h,S);Qi(m,h)}return typeof h=="string"&&h!==""||typeof h=="number"?(h=""+h,g!==null&&g.tag===6?(r(m,g.sibling),g=i(g,h),g.return=m,m=g):(r(m,g),g=yl(h,m.mode,S),g.return=m,m=g),a(m)):r(m,g)}return w}var Zr=Wp(!0),Hp=Wp(!1),Bo=ar(null),Mo=null,_r=null,us=null;function ss(){us=_r=Mo=null}function cs(e){var t=Bo.current;Z(Bo),e._currentValue=t}function cu(e,t,r){for(;e!==null;){var n=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,n!==null&&(n.childLanes|=t)):n!==null&&(n.childLanes&t)!==t&&(n.childLanes|=t),e===r)break;e=e.return}}function Kr(e,t){Mo=e,us=_r=null,e=e.dependencies,e!==null&&e.firstContext!==null&&(e.lanes&t&&(ze=!0),e.firstContext=null)}function st(e){var t=e._currentValue;if(us!==e)if(e={context:e,memoizedValue:t,next:null},_r===null){if(Mo===null)throw Error(D(308));_r=e,Mo.dependencies={lanes:0,firstContext:e}}else _r=_r.next=e;return t}var vr=null;function ds(e){vr===null?vr=[e]:vr.push(e)}function Gp(e,t,r,n){var i=t.interleaved;return i===null?(r.next=r,ds(t)):(r.next=i.next,i.next=r),t.interleaved=r,Bt(e,n)}function Bt(e,t){e.lanes|=t;var r=e.alternate;for(r!==null&&(r.lanes|=t),r=e,e=e.return;e!==null;)e.childLanes|=t,r=e.alternate,r!==null&&(r.childLanes|=t),r=e,e=e.return;return r.tag===3?r.stateNode:null}var jt=!1;function fs(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function Vp(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function kt(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function Qt(e,t,r){var n=e.updateQueue;if(n===null)return null;if(n=n.shared,H&2){var i=n.pending;return i===null?t.next=t:(t.next=i.next,i.next=t),n.pending=t,Bt(e,r)}return i=n.interleaved,i===null?(t.next=t,ds(n)):(t.next=i.next,i.next=t),n.interleaved=t,Bt(e,r)}function co(e,t,r){if(t=t.updateQueue,t!==null&&(t=t.shared,(r&4194240)!==0)){var n=t.lanes;n&=e.pendingLanes,r|=n,t.lanes=r,Xu(e,r)}}function Zc(e,t){var r=e.updateQueue,n=e.alternate;if(n!==null&&(n=n.updateQueue,r===n)){var i=null,o=null;if(r=r.firstBaseUpdate,r!==null){do{var a={eventTime:r.eventTime,lane:r.lane,tag:r.tag,payload:r.payload,callback:r.callback,next:null};o===null?i=o=a:o=o.next=a,r=r.next}while(r!==null);o===null?i=o=t:o=o.next=t}else i=o=t;r={baseState:n.baseState,firstBaseUpdate:i,lastBaseUpdate:o,shared:n.shared,effects:n.effects},e.updateQueue=r;return}e=r.lastBaseUpdate,e===null?r.firstBaseUpdate=t:e.next=t,r.lastBaseUpdate=t}function Fo(e,t,r,n){var i=e.updateQueue;jt=!1;var o=i.firstBaseUpdate,a=i.lastBaseUpdate,l=i.shared.pending;if(l!==null){i.shared.pending=null;var u=l,s=u.next;u.next=null,a===null?o=s:a.next=s,a=u;var d=e.alternate;d!==null&&(d=d.updateQueue,l=d.lastBaseUpdate,l!==a&&(l===null?d.firstBaseUpdate=s:l.next=s,d.lastBaseUpdate=u))}if(o!==null){var c=i.baseState;a=0,d=s=u=null,l=o;do{var f=l.lane,p=l.eventTime;if((n&f)===f){d!==null&&(d=d.next={eventTime:p,lane:0,tag:l.tag,payload:l.payload,callback:l.callback,next:null});e:{var v=e,y=l;switch(f=t,p=r,y.tag){case 1:if(v=y.payload,typeof v=="function"){c=v.call(p,c,f);break e}c=v;break e;case 3:v.flags=v.flags&-65537|128;case 0:if(v=y.payload,f=typeof v=="function"?v.call(p,c,f):v,f==null)break e;c=oe({},c,f);break e;case 2:jt=!0}}l.callback!==null&&l.lane!==0&&(e.flags|=64,f=i.effects,f===null?i.effects=[l]:f.push(l))}else p={eventTime:p,lane:f,tag:l.tag,payload:l.payload,callback:l.callback,next:null},d===null?(s=d=p,u=c):d=d.next=p,a|=f;if(l=l.next,l===null){if(l=i.shared.pending,l===null)break;f=l,l=f.next,f.next=null,i.lastBaseUpdate=f,i.shared.pending=null}}while(!0);if(d===null&&(u=c),i.baseState=u,i.firstBaseUpdate=s,i.lastBaseUpdate=d,t=i.shared.interleaved,t!==null){i=t;do a|=i.lane,i=i.next;while(i!==t)}else o===null&&(i.shared.lanes=0);br|=a,e.lanes=a,e.memoizedState=c}}function ed(e,t,r){if(e=t.effects,t.effects=null,e!==null)for(t=0;tr?r:4,e(!0);var n=pl.transition;pl.transition={};try{e(!1),t()}finally{V=r,pl.transition=n}}function sv(){return ct().memoizedState}function Dy(e,t,r){var n=Xt(e);if(r={lane:n,action:r,hasEagerState:!1,eagerState:null,next:null},cv(e))dv(t,r);else if(r=Gp(e,t,r,n),r!==null){var i=ke();ht(r,e,n,i),fv(r,t,n)}}function Py(e,t,r){var n=Xt(e),i={lane:n,action:r,hasEagerState:!1,eagerState:null,next:null};if(cv(e))dv(t,i);else{var o=e.alternate;if(e.lanes===0&&(o===null||o.lanes===0)&&(o=t.lastRenderedReducer,o!==null))try{var a=t.lastRenderedState,l=o(a,r);if(i.hasEagerState=!0,i.eagerState=l,yt(l,a)){var u=t.interleaved;u===null?(i.next=i,ds(t)):(i.next=u.next,u.next=i),t.interleaved=i;return}}catch{}finally{}r=Gp(e,t,i,n),r!==null&&(i=ke(),ht(r,e,n,i),fv(r,t,n))}}function cv(e){var t=e.alternate;return e===ie||t!==null&&t===ie}function dv(e,t){Un=Uo=!0;var r=e.pending;r===null?t.next=t:(t.next=r.next,r.next=t),e.pending=t}function fv(e,t,r){if(r&4194240){var n=t.lanes;n&=e.pendingLanes,r|=n,t.lanes=r,Xu(e,r)}}var jo={readContext:st,useCallback:Ce,useContext:Ce,useEffect:Ce,useImperativeHandle:Ce,useInsertionEffect:Ce,useLayoutEffect:Ce,useMemo:Ce,useReducer:Ce,useRef:Ce,useState:Ce,useDebugValue:Ce,useDeferredValue:Ce,useTransition:Ce,useMutableSource:Ce,useSyncExternalStore:Ce,useId:Ce,unstable_isNewReconciler:!1},Iy={readContext:st,useCallback:function(e,t){return bt().memoizedState=[e,t===void 0?null:t],e},useContext:st,useEffect:rd,useImperativeHandle:function(e,t,r){return r=r!=null?r.concat([e]):null,po(4194308,4,iv.bind(null,t,e),r)},useLayoutEffect:function(e,t){return po(4194308,4,e,t)},useInsertionEffect:function(e,t){return po(4,2,e,t)},useMemo:function(e,t){var r=bt();return t=t===void 0?null:t,e=e(),r.memoizedState=[e,t],e},useReducer:function(e,t,r){var n=bt();return t=r!==void 0?r(t):t,n.memoizedState=n.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},n.queue=e,e=e.dispatch=Dy.bind(null,ie,e),[n.memoizedState,e]},useRef:function(e){var t=bt();return e={current:e},t.memoizedState=e},useState:td,useDebugValue:Ss,useDeferredValue:function(e){return bt().memoizedState=e},useTransition:function(){var e=td(!1),t=e[0];return e=Cy.bind(null,e[1]),bt().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,r){var n=ie,i=bt();if(te){if(r===void 0)throw Error(D(407));r=r()}else{if(r=t(),pe===null)throw Error(D(349));xr&30||Yp(n,t,r)}i.memoizedState=r;var o={value:r,getSnapshot:t};return i.queue=o,rd(Jp.bind(null,n,o,e),[e]),n.flags|=2048,ai(9,Xp.bind(null,n,o,r,t),void 0,null),r},useId:function(){var e=bt(),t=pe.identifierPrefix;if(te){var r=Tt,n=Nt;r=(n&~(1<<32-mt(n)-1)).toString(32)+r,t=":"+t+"R"+r,r=ii++,0<\/script>",e=e.removeChild(e.firstChild)):typeof n.is=="string"?e=a.createElement(r,{is:n.is}):(e=a.createElement(r),r==="select"&&(a=e,n.multiple?a.multiple=!0:n.size&&(a.size=n.size))):e=a.createElementNS(e,r),e[Ct]=t,e[ti]=n,xv(e,t,!1,!1),t.stateNode=e;e:{switch(a=Vl(r,n),r){case"dialog":J("cancel",e),J("close",e),i=n;break;case"iframe":case"object":case"embed":J("load",e),i=n;break;case"video":case"audio":for(i=0;irn&&(t.flags|=128,n=!0,xn(o,!1),t.lanes=4194304)}else{if(!n)if(e=zo(a),e!==null){if(t.flags|=128,n=!0,r=e.updateQueue,r!==null&&(t.updateQueue=r,t.flags|=4),xn(o,!0),o.tail===null&&o.tailMode==="hidden"&&!a.alternate&&!te)return De(t),null}else 2*le()-o.renderingStartTime>rn&&r!==1073741824&&(t.flags|=128,n=!0,xn(o,!1),t.lanes=4194304);o.isBackwards?(a.sibling=t.child,t.child=a):(r=o.last,r!==null?r.sibling=a:t.child=a,o.last=a)}return o.tail!==null?(t=o.tail,o.rendering=t,o.tail=t.sibling,o.renderingStartTime=le(),t.sibling=null,r=ne.current,X(ne,n?r&1|2:r&1),t):(De(t),null);case 22:case 23:return Ps(),n=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==n&&(t.flags|=8192),n&&t.mode&1?Ge&1073741824&&(De(t),t.subtreeFlags&6&&(t.flags|=8192)):De(t),null;case 24:return null;case 25:return null}throw Error(D(156,t.tag))}function By(e,t){switch(as(t),t.tag){case 1:return je(t.type)&&To(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return en(),Z(Ue),Z(Re),gs(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 5:return vs(t),null;case 13:if(Z(ne),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(D(340));Jr()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return Z(ne),null;case 4:return en(),null;case 10:return cs(t.type._context),null;case 22:case 23:return Ps(),null;case 24:return null;default:return null}}var Xi=!1,Pe=!1,My=typeof WeakSet=="function"?WeakSet:Set,N=null;function $r(e,t){var r=e.ref;if(r!==null)if(typeof r=="function")try{r(null)}catch(n){ae(e,t,n)}else r.current=null}function wu(e,t,r){try{r()}catch(n){ae(e,t,n)}}var pd=!1;function Fy(e,t){if(ru=Io,e=Op(),is(e)){if("selectionStart"in e)var r={start:e.selectionStart,end:e.selectionEnd};else e:{r=(r=e.ownerDocument)&&r.defaultView||window;var n=r.getSelection&&r.getSelection();if(n&&n.rangeCount!==0){r=n.anchorNode;var i=n.anchorOffset,o=n.focusNode;n=n.focusOffset;try{r.nodeType,o.nodeType}catch{r=null;break e}var a=0,l=-1,u=-1,s=0,d=0,c=e,f=null;t:for(;;){for(var p;c!==r||i!==0&&c.nodeType!==3||(l=a+i),c!==o||n!==0&&c.nodeType!==3||(u=a+n),c.nodeType===3&&(a+=c.nodeValue.length),(p=c.firstChild)!==null;)f=c,c=p;for(;;){if(c===e)break t;if(f===r&&++s===i&&(l=a),f===o&&++d===n&&(u=a),(p=c.nextSibling)!==null)break;c=f,f=c.parentNode}c=p}r=l===-1||u===-1?null:{start:l,end:u}}else r=null}r=r||{start:0,end:0}}else r=null;for(nu={focusedElem:e,selectionRange:r},Io=!1,N=t;N!==null;)if(t=N,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,N=e;else for(;N!==null;){t=N;try{var v=t.alternate;if(t.flags&1024)switch(t.tag){case 0:case 11:case 15:break;case 1:if(v!==null){var y=v.memoizedProps,w=v.memoizedState,m=t.stateNode,g=m.getSnapshotBeforeUpdate(t.elementType===t.type?y:ft(t.type,y),w);m.__reactInternalSnapshotBeforeUpdate=g}break;case 3:var h=t.stateNode.containerInfo;h.nodeType===1?h.textContent="":h.nodeType===9&&h.documentElement&&h.removeChild(h.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(D(163))}}catch(S){ae(t,t.return,S)}if(e=t.sibling,e!==null){e.return=t.return,N=e;break}N=t.return}return v=pd,pd=!1,v}function jn(e,t,r){var n=t.updateQueue;if(n=n!==null?n.lastEffect:null,n!==null){var i=n=n.next;do{if((i.tag&e)===e){var o=i.destroy;i.destroy=void 0,o!==void 0&&wu(t,r,o)}i=i.next}while(i!==n)}}function da(e,t){if(t=t.updateQueue,t=t!==null?t.lastEffect:null,t!==null){var r=t=t.next;do{if((r.tag&e)===e){var n=r.create;r.destroy=n()}r=r.next}while(r!==t)}}function Su(e){var t=e.ref;if(t!==null){var r=e.stateNode;switch(e.tag){case 5:e=r;break;default:e=r}typeof t=="function"?t(e):t.current=e}}function Dv(e){var t=e.alternate;t!==null&&(e.alternate=null,Dv(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[Ct],delete t[ti],delete t[au],delete t[wy],delete t[Sy])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function Pv(e){return e.tag===5||e.tag===3||e.tag===4}function vd(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||Pv(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function Eu(e,t,r){var n=e.tag;if(n===5||n===6)e=e.stateNode,t?r.nodeType===8?r.parentNode.insertBefore(e,t):r.insertBefore(e,t):(r.nodeType===8?(t=r.parentNode,t.insertBefore(e,r)):(t=r,t.appendChild(e)),r=r._reactRootContainer,r!=null||t.onclick!==null||(t.onclick=No));else if(n!==4&&(e=e.child,e!==null))for(Eu(e,t,r),e=e.sibling;e!==null;)Eu(e,t,r),e=e.sibling}function xu(e,t,r){var n=e.tag;if(n===5||n===6)e=e.stateNode,t?r.insertBefore(e,t):r.appendChild(e);else if(n!==4&&(e=e.child,e!==null))for(xu(e,t,r),e=e.sibling;e!==null;)xu(e,t,r),e=e.sibling}var Se=null,pt=!1;function zt(e,t,r){for(r=r.child;r!==null;)Iv(e,t,r),r=r.sibling}function Iv(e,t,r){if(Dt&&typeof Dt.onCommitFiberUnmount=="function")try{Dt.onCommitFiberUnmount(na,r)}catch{}switch(r.tag){case 5:Pe||$r(r,t);case 6:var n=Se,i=pt;Se=null,zt(e,t,r),Se=n,pt=i,Se!==null&&(pt?(e=Se,r=r.stateNode,e.nodeType===8?e.parentNode.removeChild(r):e.removeChild(r)):Se.removeChild(r.stateNode));break;case 18:Se!==null&&(pt?(e=Se,r=r.stateNode,e.nodeType===8?cl(e.parentNode,r):e.nodeType===1&&cl(e,r),Yn(e)):cl(Se,r.stateNode));break;case 4:n=Se,i=pt,Se=r.stateNode.containerInfo,pt=!0,zt(e,t,r),Se=n,pt=i;break;case 0:case 11:case 14:case 15:if(!Pe&&(n=r.updateQueue,n!==null&&(n=n.lastEffect,n!==null))){i=n=n.next;do{var o=i,a=o.destroy;o=o.tag,a!==void 0&&(o&2||o&4)&&wu(r,t,a),i=i.next}while(i!==n)}zt(e,t,r);break;case 1:if(!Pe&&($r(r,t),n=r.stateNode,typeof n.componentWillUnmount=="function"))try{n.props=r.memoizedProps,n.state=r.memoizedState,n.componentWillUnmount()}catch(l){ae(r,t,l)}zt(e,t,r);break;case 21:zt(e,t,r);break;case 22:r.mode&1?(Pe=(n=Pe)||r.memoizedState!==null,zt(e,t,r),Pe=n):zt(e,t,r);break;default:zt(e,t,r)}}function gd(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var r=e.stateNode;r===null&&(r=e.stateNode=new My),t.forEach(function(n){var i=Vy.bind(null,e,n);r.has(n)||(r.add(n),n.then(i,i))})}}function dt(e,t){var r=t.deletions;if(r!==null)for(var n=0;ni&&(i=a),n&=~o}if(n=i,n=le()-n,n=(120>n?120:480>n?480:1080>n?1080:1920>n?1920:3e3>n?3e3:4320>n?4320:1960*Uy(n/1960))-n,10e?16:e,Ht===null)var n=!1;else{if(e=Ht,Ht=null,Wo=0,H&6)throw Error(D(331));var i=H;for(H|=4,N=e.current;N!==null;){var o=N,a=o.child;if(N.flags&16){var l=o.deletions;if(l!==null){for(var u=0;ule()-Cs?hr(e,0):bs|=r),_e(e,t)}function Bv(e,t){t===0&&(e.mode&1?(t=$i,$i<<=1,!($i&130023424)&&($i=4194304)):t=1);var r=ke();e=Bt(e,t),e!==null&&(gi(e,t,r),_e(e,r))}function Gy(e){var t=e.memoizedState,r=0;t!==null&&(r=t.retryLane),Bv(e,r)}function Vy(e,t){var r=0;switch(e.tag){case 13:var n=e.stateNode,i=e.memoizedState;i!==null&&(r=i.retryLane);break;case 19:n=e.stateNode;break;default:throw Error(D(314))}n!==null&&n.delete(t),Bv(e,r)}var Mv;Mv=function(e,t,r){if(e!==null)if(e.memoizedProps!==t.pendingProps||Ue.current)ze=!0;else{if(!(e.lanes&r)&&!(t.flags&128))return ze=!1,Ay(e,t,r);ze=!!(e.flags&131072)}else ze=!1,te&&t.flags&1048576&&jp(t,Lo,t.index);switch(t.lanes=0,t.tag){case 2:var n=t.type;vo(e,t),e=t.pendingProps;var i=Xr(t,Re.current);Kr(t,r),i=hs(null,t,n,e,i,r);var o=ys();return t.flags|=1,typeof i=="object"&&i!==null&&typeof i.render=="function"&&i.$$typeof===void 0?(t.tag=1,t.memoizedState=null,t.updateQueue=null,je(n)?(o=!0,ko(t)):o=!1,t.memoizedState=i.state!==null&&i.state!==void 0?i.state:null,fs(t),i.updater=ca,t.stateNode=i,i._reactInternals=t,fu(t,n,e,r),t=gu(null,t,n,!0,o,r)):(t.tag=0,te&&o&&os(t),Te(null,t,i,r),t=t.child),t;case 16:n=t.elementType;e:{switch(vo(e,t),e=t.pendingProps,i=n._init,n=i(n._payload),t.type=n,i=t.tag=Ky(n),e=ft(n,e),i){case 0:t=vu(null,t,n,e,r);break e;case 1:t=cd(null,t,n,e,r);break e;case 11:t=ud(null,t,n,e,r);break e;case 14:t=sd(null,t,n,ft(n.type,e),r);break e}throw Error(D(306,n,""))}return t;case 0:return n=t.type,i=t.pendingProps,i=t.elementType===n?i:ft(n,i),vu(e,t,n,i,r);case 1:return n=t.type,i=t.pendingProps,i=t.elementType===n?i:ft(n,i),cd(e,t,n,i,r);case 3:e:{if(wv(t),e===null)throw Error(D(387));n=t.pendingProps,o=t.memoizedState,i=o.element,Vp(e,t),Fo(t,n,null,r);var a=t.memoizedState;if(n=a.element,o.isDehydrated)if(o={element:n,isDehydrated:!1,cache:a.cache,pendingSuspenseBoundaries:a.pendingSuspenseBoundaries,transitions:a.transitions},t.updateQueue.baseState=o,t.memoizedState=o,t.flags&256){i=tn(Error(D(423)),t),t=dd(e,t,n,r,i);break e}else if(n!==i){i=tn(Error(D(424)),t),t=dd(e,t,n,r,i);break e}else for(Ve=Kt(t.stateNode.containerInfo.firstChild),Ke=t,te=!0,vt=null,r=Hp(t,null,n,r),t.child=r;r;)r.flags=r.flags&-3|4096,r=r.sibling;else{if(Jr(),n===i){t=Mt(e,t,r);break e}Te(e,t,n,r)}t=t.child}return t;case 5:return qp(t),e===null&&su(t),n=t.type,i=t.pendingProps,o=e!==null?e.memoizedProps:null,a=i.children,iu(n,i)?a=null:o!==null&&iu(n,o)&&(t.flags|=32),yv(e,t),Te(e,t,a,r),t.child;case 6:return e===null&&su(t),null;case 13:return Sv(e,t,r);case 4:return ps(t,t.stateNode.containerInfo),n=t.pendingProps,e===null?t.child=Zr(t,null,n,r):Te(e,t,n,r),t.child;case 11:return n=t.type,i=t.pendingProps,i=t.elementType===n?i:ft(n,i),ud(e,t,n,i,r);case 7:return Te(e,t,t.pendingProps,r),t.child;case 8:return Te(e,t,t.pendingProps.children,r),t.child;case 12:return Te(e,t,t.pendingProps.children,r),t.child;case 10:e:{if(n=t.type._context,i=t.pendingProps,o=t.memoizedProps,a=i.value,X(Bo,n._currentValue),n._currentValue=a,o!==null)if(yt(o.value,a)){if(o.children===i.children&&!Ue.current){t=Mt(e,t,r);break e}}else for(o=t.child,o!==null&&(o.return=t);o!==null;){var l=o.dependencies;if(l!==null){a=o.child;for(var u=l.firstContext;u!==null;){if(u.context===n){if(o.tag===1){u=kt(-1,r&-r),u.tag=2;var s=o.updateQueue;if(s!==null){s=s.shared;var d=s.pending;d===null?u.next=u:(u.next=d.next,d.next=u),s.pending=u}}o.lanes|=r,u=o.alternate,u!==null&&(u.lanes|=r),cu(o.return,r,t),l.lanes|=r;break}u=u.next}}else if(o.tag===10)a=o.type===t.type?null:o.child;else if(o.tag===18){if(a=o.return,a===null)throw Error(D(341));a.lanes|=r,l=a.alternate,l!==null&&(l.lanes|=r),cu(a,r,t),a=o.sibling}else a=o.child;if(a!==null)a.return=o;else for(a=o;a!==null;){if(a===t){a=null;break}if(o=a.sibling,o!==null){o.return=a.return,a=o;break}a=a.return}o=a}Te(e,t,i.children,r),t=t.child}return t;case 9:return i=t.type,n=t.pendingProps.children,Kr(t,r),i=st(i),n=n(i),t.flags|=1,Te(e,t,n,r),t.child;case 14:return n=t.type,i=ft(n,t.pendingProps),i=ft(n.type,i),sd(e,t,n,i,r);case 15:return mv(e,t,t.type,t.pendingProps,r);case 17:return n=t.type,i=t.pendingProps,i=t.elementType===n?i:ft(n,i),vo(e,t),t.tag=1,je(n)?(e=!0,ko(t)):e=!1,Kr(t,r),pv(t,n,i),fu(t,n,i,r),gu(null,t,n,!0,e,r);case 19:return Ev(e,t,r);case 22:return hv(e,t,r)}throw Error(D(156,t.tag))};function Fv(e,t){return cp(e,t)}function qy(e,t,r,n){this.tag=e,this.key=r,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=n,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function ot(e,t,r,n){return new qy(e,t,r,n)}function Rs(e){return e=e.prototype,!(!e||!e.isReactComponent)}function Ky(e){if(typeof e=="function")return Rs(e)?1:0;if(e!=null){if(e=e.$$typeof,e===qu)return 11;if(e===Ku)return 14}return 2}function Jt(e,t){var r=e.alternate;return r===null?(r=ot(e.tag,t,e.key,e.mode),r.elementType=e.elementType,r.type=e.type,r.stateNode=e.stateNode,r.alternate=e,e.alternate=r):(r.pendingProps=t,r.type=e.type,r.flags=0,r.subtreeFlags=0,r.deletions=null),r.flags=e.flags&14680064,r.childLanes=e.childLanes,r.lanes=e.lanes,r.child=e.child,r.memoizedProps=e.memoizedProps,r.memoizedState=e.memoizedState,r.updateQueue=e.updateQueue,t=e.dependencies,r.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},r.sibling=e.sibling,r.index=e.index,r.ref=e.ref,r}function ho(e,t,r,n,i,o){var a=2;if(n=e,typeof e=="function")Rs(e)&&(a=1);else if(typeof e=="string")a=5;else e:switch(e){case Ar:return yr(r.children,i,o,t);case Vu:a=8,i|=8;break;case Ml:return e=ot(12,r,t,i|2),e.elementType=Ml,e.lanes=o,e;case Fl:return e=ot(13,r,t,i),e.elementType=Fl,e.lanes=o,e;case zl:return e=ot(19,r,t,i),e.elementType=zl,e.lanes=o,e;case qf:return pa(r,i,o,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case Gf:a=10;break e;case Vf:a=9;break e;case qu:a=11;break e;case Ku:a=14;break e;case Ut:a=16,n=null;break e}throw Error(D(130,e==null?e:typeof e,""))}return t=ot(a,r,t,i),t.elementType=e,t.type=n,t.lanes=o,t}function yr(e,t,r,n){return e=ot(7,e,n,t),e.lanes=r,e}function pa(e,t,r,n){return e=ot(22,e,n,t),e.elementType=qf,e.lanes=r,e.stateNode={isHidden:!1},e}function yl(e,t,r){return e=ot(6,e,null,t),e.lanes=r,e}function wl(e,t,r){return t=ot(4,e.children!==null?e.children:[],e.key,t),t.lanes=r,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function Qy(e,t,r,n,i){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=Za(0),this.expirationTimes=Za(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Za(0),this.identifierPrefix=n,this.onRecoverableError=i,this.mutableSourceEagerHydrationData=null}function Os(e,t,r,n,i,o,a,l,u){return e=new Qy(e,t,r,l,u),t===1?(t=1,o===!0&&(t|=8)):t=0,o=ot(3,null,null,t),e.current=o,o.stateNode=e,o.memoizedState={element:n,isDehydrated:r,cache:null,transitions:null,pendingSuspenseBoundaries:null},fs(o),e}function Yy(e,t,r){var n=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(_v)}catch(e){console.error(e)}}_v(),_f.exports=Je;var As=_f.exports;const t0=zu(As);var bd=As;Ll.createRoot=bd.createRoot,Ll.hydrateRoot=bd.hydrateRoot;function Iu(e,t){return Iu=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,n){return r.__proto__=n,r},Iu(e,t)}function $v(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,Iu(e,t)}function M(){return M=Object.assign?Object.assign.bind():function(e){for(var t=1;t"u"&&(r=t,t=void 0),typeof r<"u"){if(typeof r!="function")throw new Error(Me(1));return r(Wv)(e,t)}if(typeof e!="function")throw new Error(Me(2));var i=e,o=t,a=[],l=a,u=!1;function s(){l===a&&(l=a.slice())}function d(){if(u)throw new Error(Me(3));return o}function c(y){if(typeof y!="function")throw new Error(Me(4));if(u)throw new Error(Me(5));var w=!0;return s(),l.push(y),function(){if(w){if(u)throw new Error(Me(6));w=!1,s();var g=l.indexOf(y);l.splice(g,1),a=null}}}function f(y){if(!o0(y))throw new Error(Me(7));if(typeof y.type>"u")throw new Error(Me(8));if(u)throw new Error(Me(9));try{u=!0,o=i(o,y)}finally{u=!1}for(var w=a=l,m=0;m=0;n--){var i=t[n](e);if(i)return i}return function(o,a){throw new Error("Invalid value of type "+typeof e+" for "+r+" argument when connecting component "+a.wrappedComponentName+".")}}function cw(e,t){return e===t}function dw(e){var t=e===void 0?{}:e,r=t.connectHOC,n=r===void 0?G0:r,i=t.mapStateToPropsFactories,o=i===void 0?Z0:i,a=t.mapDispatchToPropsFactories,l=a===void 0?Y0:a,u=t.mergePropsFactories,s=u===void 0?iw:u,d=t.selectorFactory,c=d===void 0?uw:d;return function(p,v,y,w){w===void 0&&(w={});var m=w,g=m.pure,h=g===void 0?!0:g,S=m.areStatesEqual,x=S===void 0?cw:S,b=m.areOwnPropsEqual,C=b===void 0?Sl:b,I=m.areStatePropsEqual,k=I===void 0?Sl:I,T=m.areMergedPropsEqual,z=T===void 0?Sl:T,re=Vo(m,sw),ee=El(p,o,"mapStateToProps"),G=El(v,l,"mapDispatchToProps"),he=El(y,s,"mergeProps");return n(c,M({methodName:"connect",getDisplayName:function(He){return"Connect("+He+")"},shouldHandleStateChanges:!!p,initMapStateToProps:ee,initMapDispatchToProps:G,initMergeProps:he,pure:h,areStatesEqual:x,areOwnPropsEqual:C,areStatePropsEqual:k,areMergedPropsEqual:z},re))}}const ag=dw();u0(As.unstable_batchedUpdates);function fw(e,t){if(e.length!==t.length)return!1;for(var r=0;r");return n.callbacks},n.setCallbacks=function(l){n.callbacks=l},n}var r=t.prototype;return r.componentDidMount=function(){this.unbind=at(window,[{eventName:"error",fn:this.onWindowError}])},r.componentDidCatch=function(i){if(i instanceof Qo){this.setState({});return}throw i},r.componentWillUnmount=function(){this.unbind()},r.render=function(){return this.props.children(this.setCallbacks)},t}(Y.Component),bw=` + Press space bar to start a drag. + When dragging you can use the arrow keys to move the item around and escape to cancel. + Some screen readers may require you to be in focus mode or to use your pass through key +`,Yo=function(t){return t+1},Cw=function(t){return` + You have lifted an item in position `+Yo(t.source.index)+` +`},dg=function(t,r){var n=t.droppableId===r.droppableId,i=Yo(t.index),o=Yo(r.index);return n?` + You have moved the item from position `+i+` + to position `+o+` + `:` + You have moved the item from position `+i+` + in list `+t.droppableId+` + to list `+r.droppableId+` + in position `+o+` + `},fg=function(t,r,n){var i=r.droppableId===n.droppableId;return i?` + The item `+t+` + has been combined with `+n.draggableId:` + The item `+t+` + in list `+r.droppableId+` + has been combined with `+n.draggableId+` + in list `+n.droppableId+` + `},Dw=function(t){var r=t.destination;if(r)return dg(t.source,r);var n=t.combine;return n?fg(t.draggableId,t.source,n):"You are over an area that cannot be dropped on"},_d=function(t){return` + The item has returned to its starting position + of `+Yo(t.index)+` +`},Pw=function(t){if(t.reason==="CANCEL")return` + Movement cancelled. + `+_d(t.source)+` + `;var r=t.destination,n=t.combine;return r?` + You have dropped the item. + `+dg(t.source,r)+` + `:n?` + You have dropped the item. + `+fg(t.draggableId,t.source,n)+` + `:` + The item has been dropped while not over a drop area. + `+_d(t.source)+` + `},yo={dragHandleUsageInstructions:bw,onDragStart:Cw,onDragUpdate:Dw,onDragEnd:Pw},ge={x:0,y:0},Ee=function(t,r){return{x:t.x+r.x,y:t.y+r.y}},qe=function(t,r){return{x:t.x-r.x,y:t.y-r.y}},er=function(t,r){return t.x===r.x&&t.y===r.y},dn=function(t){return{x:t.x!==0?-t.x:0,y:t.y!==0?-t.y:0}},Dr=function(t,r,n){var i;return n===void 0&&(n=0),i={},i[t]=r,i[t==="x"?"y":"x"]=n,i},ci=function(t,r){return Math.sqrt(Math.pow(r.x-t.x,2)+Math.pow(r.y-t.y,2))},$d=function(t,r){return Math.min.apply(Math,r.map(function(n){return ci(t,n)}))},pg=function(t){return function(r){return{x:t(r.x),y:t(r.y)}}},Iw=function(e,t){var r=gt({top:Math.max(t.top,e.top),right:Math.min(t.right,e.right),bottom:Math.min(t.bottom,e.bottom),left:Math.max(t.left,e.left)});return r.width<=0||r.height<=0?null:r},Ri=function(t,r){return{top:t.top+r.y,left:t.left+r.x,bottom:t.bottom+r.y,right:t.right+r.x}},Wd=function(t){return[{x:t.left,y:t.top},{x:t.right,y:t.top},{x:t.left,y:t.bottom},{x:t.right,y:t.bottom}]},Rw={top:0,right:0,bottom:0,left:0},Ow=function(t,r){return r?Ri(t,r.scroll.diff.displacement):t},Nw=function(t,r,n){if(n&&n.increasedBy){var i;return M({},t,(i={},i[r.end]=t[r.end]+n.increasedBy[r.line],i))}return t},Tw=function(t,r){return r&&r.shouldClipSubject?Iw(r.pageMarginBox,t):gt(t)},nn=function(e){var t=e.page,r=e.withPlaceholder,n=e.axis,i=e.frame,o=Ow(t.marginBox,i),a=Nw(o,n,r),l=Tw(a,i);return{page:t,withPlaceholder:r,active:l}},Ws=function(e,t){e.frame||P();var r=e.frame,n=qe(t,r.scroll.initial),i=dn(n),o=M({},r,{scroll:{initial:r.scroll.initial,current:t,diff:{value:n,displacement:i},max:r.scroll.max}}),a=nn({page:e.subject.page,withPlaceholder:e.subject.withPlaceholder,axis:e.axis,frame:o}),l=M({},e,{frame:o,subject:a});return l};function Xo(e){return Object.values?Object.values(e):Object.keys(e).map(function(t){return e[t]})}function Hs(e,t){if(e.findIndex)return e.findIndex(t);for(var r=0;re.bottom,s=n.lefte.right,d=u&&s;if(d)return!0;var c=u&&a||s&&o;return c}},Bw=function(e){var t=ut(e.top,e.bottom),r=ut(e.left,e.right);return function(n){var i=t(n.top)&&t(n.bottom)&&r(n.left)&&r(n.right);return i}},Vs={direction:"vertical",line:"y",crossAxisLine:"x",start:"top",end:"bottom",size:"height",crossAxisStart:"left",crossAxisEnd:"right",crossAxisSize:"width"},wg={direction:"horizontal",line:"x",crossAxisLine:"y",start:"left",end:"right",size:"width",crossAxisStart:"top",crossAxisEnd:"bottom",crossAxisSize:"height"},Mw=function(e){return function(t){var r=ut(t.top,t.bottom),n=ut(t.left,t.right);return function(i){return e===Vs?r(i.top)&&r(i.bottom):n(i.left)&&n(i.right)}}},Fw=function(t,r){var n=r.frame?r.frame.scroll.diff.displacement:ge;return Ri(t,n)},zw=function(t,r,n){return r.subject.active?n(r.subject.active)(t):!1},Uw=function(t,r,n){return n(r)(t)},qs=function(t){var r=t.target,n=t.destination,i=t.viewport,o=t.withDroppableDisplacement,a=t.isVisibleThroughFrameFn,l=o?Fw(r,n):r;return zw(l,n,a)&&Uw(l,i,a)},jw=function(t){return qs(M({},t,{isVisibleThroughFrameFn:yg}))},Sg=function(t){return qs(M({},t,{isVisibleThroughFrameFn:Bw}))},_w=function(t){return qs(M({},t,{isVisibleThroughFrameFn:Mw(t.destination.axis)}))},$w=function(t,r,n){if(typeof n=="boolean")return n;if(!r)return!0;var i=r.invisible,o=r.visible;if(i[t])return!1;var a=o[t];return a?a.shouldAnimate:!0};function Ww(e,t){var r=e.page.marginBox,n={top:t.point.y,right:0,bottom:0,left:t.point.x};return gt(_s(r,n))}function fi(e){var t=e.afterDragging,r=e.destination,n=e.displacedBy,i=e.viewport,o=e.forceShouldAnimate,a=e.last;return t.reduce(function(u,s){var d=Ww(s,n),c=s.descriptor.id;u.all.push(c);var f=jw({target:d,destination:r,viewport:i,withDroppableDisplacement:!0});if(!f)return u.invisible[s.descriptor.id]=!0,u;var p=$w(c,a,o),v={draggableId:c,shouldAnimate:p};return u.visible[c]=v,u},{all:[],visible:{},invisible:{}})}function Hw(e,t){if(!e.length)return 0;var r=e[e.length-1].descriptor.index;return t.inHomeList?r:r+1}function Hd(e){var t=e.insideDestination,r=e.inHomeList,n=e.displacedBy,i=e.destination,o=Hw(t,{inHomeList:r});return{displaced:di,displacedBy:n,at:{type:"REORDER",destination:{droppableId:i.descriptor.id,index:o}}}}function Jo(e){var t=e.draggable,r=e.insideDestination,n=e.destination,i=e.viewport,o=e.displacedBy,a=e.last,l=e.index,u=e.forceShouldAnimate,s=pn(t,n);if(l==null)return Hd({insideDestination:r,inHomeList:s,displacedBy:o,destination:n});var d=ur(r,function(y){return y.descriptor.index===l});if(!d)return Hd({insideDestination:r,inHomeList:s,displacedBy:o,destination:n});var c=ka(t,r),f=r.indexOf(d),p=c.slice(f),v=fi({afterDragging:p,destination:n,displacedBy:o,last:a,viewport:i.frame,forceShouldAnimate:u});return{displaced:v,displacedBy:o,at:{type:"REORDER",destination:{droppableId:n.descriptor.id,index:l}}}}function ir(e,t){return!!t.effected[e]}var Gw=function(e){var t=e.isMovingForward,r=e.destination,n=e.draggables,i=e.combine,o=e.afterCritical;if(!r.isCombineEnabled)return null;var a=i.draggableId,l=n[a],u=l.descriptor.index,s=ir(a,o);return s?t?u:u-1:t?u+1:u},Vw=function(e){var t=e.isMovingForward,r=e.isInHomeList,n=e.insideDestination,i=e.location;if(!n.length)return null;var o=i.index,a=t?o+1:o-1,l=n[0].descriptor.index,u=n[n.length-1].descriptor.index,s=r?u:u+1;return as?null:a},qw=function(e){var t=e.isMovingForward,r=e.isInHomeList,n=e.draggable,i=e.draggables,o=e.destination,a=e.insideDestination,l=e.previousImpact,u=e.viewport,s=e.afterCritical,d=l.at;if(d||P(),d.type==="REORDER"){var c=Vw({isMovingForward:t,isInHomeList:r,location:d.destination,insideDestination:a});return c==null?null:Jo({draggable:n,insideDestination:a,destination:o,viewport:u,last:l.displaced,displacedBy:l.displacedBy,index:c})}var f=Gw({isMovingForward:t,destination:o,displaced:l.displaced,draggables:i,combine:d.combine,afterCritical:s});return f==null?null:Jo({draggable:n,insideDestination:a,destination:o,viewport:u,last:l.displaced,displacedBy:l.displacedBy,index:f})},Kw=function(e){var t=e.displaced,r=e.afterCritical,n=e.combineWith,i=e.displacedBy,o=!!(t.visible[n]||t.invisible[n]);return ir(n,r)?o?ge:dn(i.point):o?i.point:ge},Qw=function(e){var t=e.afterCritical,r=e.impact,n=e.draggables,i=Ta(r);i||P();var o=i.draggableId,a=n[o].page.borderBox.center,l=Kw({displaced:r.displaced,afterCritical:t,combineWith:o,displacedBy:r.displacedBy});return Ee(a,l)},Eg=function(t,r){return r.margin[t.start]+r.borderBox[t.size]/2},Yw=function(t,r){return r.margin[t.end]+r.borderBox[t.size]/2},Ks=function(t,r,n){return r[t.crossAxisStart]+n.margin[t.crossAxisStart]+n.borderBox[t.crossAxisSize]/2},Gd=function(t){var r=t.axis,n=t.moveRelativeTo,i=t.isMoving;return Dr(r.line,n.marginBox[r.end]+Eg(r,i),Ks(r,n.marginBox,i))},Vd=function(t){var r=t.axis,n=t.moveRelativeTo,i=t.isMoving;return Dr(r.line,n.marginBox[r.start]-Yw(r,i),Ks(r,n.marginBox,i))},Xw=function(t){var r=t.axis,n=t.moveInto,i=t.isMoving;return Dr(r.line,n.contentBox[r.start]+Eg(r,i),Ks(r,n.contentBox,i))},Jw=function(e){var t=e.impact,r=e.draggable,n=e.draggables,i=e.droppable,o=e.afterCritical,a=fn(i.descriptor.id,n),l=r.page,u=i.axis;if(!a.length)return Xw({axis:u,moveInto:i.page,isMoving:l});var s=t.displaced,d=t.displacedBy,c=s.all[0];if(c){var f=n[c];if(ir(c,o))return Vd({axis:u,moveRelativeTo:f.page,isMoving:l});var p=qo(f.page,d.point);return Vd({axis:u,moveRelativeTo:p,isMoving:l})}var v=a[a.length-1];if(v.descriptor.id===r.descriptor.id)return l.borderBox.center;if(ir(v.descriptor.id,o)){var y=qo(v.page,dn(o.displacedBy.point));return Gd({axis:u,moveRelativeTo:y,isMoving:l})}return Gd({axis:u,moveRelativeTo:v.page,isMoving:l})},Ru=function(e,t){var r=e.frame;return r?Ee(t,r.scroll.diff.displacement):t},Zw=function(t){var r=t.impact,n=t.draggable,i=t.droppable,o=t.draggables,a=t.afterCritical,l=n.page.borderBox.center,u=r.at;return!i||!u?l:u.type==="REORDER"?Jw({impact:r,draggable:n,draggables:o,droppable:i,afterCritical:a}):Qw({impact:r,draggables:o,afterCritical:a})},Aa=function(e){var t=Zw(e),r=e.droppable,n=r?Ru(r,t):t;return n},xg=function(e,t){var r=qe(t,e.scroll.initial),n=dn(r),i=gt({top:t.y,bottom:t.y+e.frame.height,left:t.x,right:t.x+e.frame.width}),o={frame:i,scroll:{initial:e.scroll.initial,max:e.scroll.max,current:t,diff:{value:r,displacement:n}}};return o};function qd(e,t){return e.map(function(r){return t[r]})}function eS(e,t){for(var r=0;r1?d.sort(function(c,f){return Ne(c)[l.start]-Ne(f)[l.start]})[0]:s.sort(function(c,f){var p=$d(r,Wd(Ne(c))),v=$d(r,Wd(Ne(f)));return p!==v?p-v:Ne(c)[l.start]-Ne(f)[l.start]})[0]},Kd=function(t,r){var n=t.page.borderBox.center;return ir(t.descriptor.id,r)?qe(n,r.displacedBy.point):n},oS=function(t,r){var n=t.page.borderBox;return ir(t.descriptor.id,r)?Ri(n,dn(r.displacedBy.point)):n},aS=function(e){var t=e.pageBorderBoxCenter,r=e.viewport,n=e.destination,i=e.insideDestination,o=e.afterCritical,a=i.filter(function(l){return Sg({target:oS(l,o),destination:n,viewport:r.frame,withDroppableDisplacement:!0})}).sort(function(l,u){var s=ci(t,Ru(n,Kd(l,o))),d=ci(t,Ru(n,Kd(u,o)));return st.left&&e.topt.top}function vS(e){var t=e.pageBorderBox,r=e.draggable,n=e.candidates,i=r.page.borderBox.center,o=n.map(function(a){var l=a.axis,u=Dr(a.axis.line,t.center[l.line],a.page.borderBox.center[l.crossAxisLine]);return{id:a.descriptor.id,distance:ci(i,u)}}).sort(function(a,l){return l.distance-a.distance});return o[0]?o[0].id:null}function gS(e){var t=e.pageBorderBox,r=e.draggable,n=e.droppables,i=Na(n).filter(function(o){if(!o.isEnabled)return!1;var a=o.subject.active;if(!a||!pS(t,a))return!1;if(Pg(a)(t.center))return!0;var l=o.axis,u=a.center[l.crossAxisLine],s=t[l.crossAxisStart],d=t[l.crossAxisEnd],c=ut(a[l.crossAxisStart],a[l.crossAxisEnd]),f=c(s),p=c(d);return!f&&!p?!0:f?su});return i.length?i.length===1?i[0].descriptor.id:vS({pageBorderBox:t,draggable:r,candidates:i}):null}var Ig=function(t,r){return gt(Ri(t,r))},mS=function(e,t){var r=e.frame;return r?Ig(t,r.scroll.diff.value):t};function Rg(e){var t=e.displaced,r=e.id;return!!(t.visible[r]||t.invisible[r])}function hS(e){var t=e.draggable,r=e.closest,n=e.inHomeList;return r?n&&r.descriptor.index>t.descriptor.index?r.descriptor.index-1:r.descriptor.index:null}var yS=function(e){var t=e.pageBorderBoxWithDroppableScroll,r=e.draggable,n=e.destination,i=e.insideDestination,o=e.last,a=e.viewport,l=e.afterCritical,u=n.axis,s=Oi(n.axis,r.displaceBy),d=s.value,c=t[u.start],f=t[u.end],p=ka(r,i),v=ur(p,function(w){var m=w.descriptor.id,g=w.page.borderBox.center[u.line],h=ir(m,l),S=Rg({displaced:o,id:m});return h?S?f<=g:cm[l.start]+h&&cm[l.start]-s+h&&dm[l.start]+s+h&&cm[l.start]+h&&d=Xd)return Fg;var o=i/Xd,a=Tu+QS*o,l=n==="CANCEL"?a*YS:a;return Number(l.toFixed(2))},JS=function(e){var t=e.impact,r=e.draggable,n=e.dimensions,i=e.viewport,o=e.afterCritical,a=n.draggables,l=n.droppables,u=Qe(t),s=u?l[u]:null,d=l[r.descriptor.droppableId],c=Tg({impact:t,draggable:r,draggables:a,afterCritical:o,droppable:s||d,viewport:i}),f=qe(c,r.client.borderBox.center);return f},ZS=function(e){var t=e.draggables,r=e.reason,n=e.lastImpact,i=e.home,o=e.viewport,a=e.onLiftImpact;if(!n.at||r!=="DROP"){var l=Ng({draggables:t,impact:a,destination:i,viewport:o,forceShouldAnimate:!0});return{impact:l,didDropInsideDroppable:!1}}if(n.at.type==="REORDER")return{impact:n,didDropInsideDroppable:!0};var u=M({},n,{displaced:di});return{impact:u,didDropInsideDroppable:!0}},eE=function(e){var t=e.getState,r=e.dispatch;return function(n){return function(i){if(i.type!=="DROP"){n(i);return}var o=t(),a=i.payload.reason;if(o.phase==="COLLECTING"){r(VS({reason:a}));return}if(o.phase!=="IDLE"){var l=o.phase==="DROP_PENDING"&&o.isWaiting;l&&P(),o.phase==="DRAGGING"||o.phase==="DROP_PENDING"||P();var u=o.critical,s=o.dimensions,d=s.draggables[o.critical.draggable.id],c=ZS({reason:a,lastImpact:o.impact,afterCritical:o.afterCritical,onLiftImpact:o.onLiftImpact,home:o.dimensions.droppables[o.critical.droppable.id],viewport:o.viewport,draggables:o.dimensions.draggables}),f=c.impact,p=c.didDropInsideDroppable,v=p?Gs(f):null,y=p?Ta(f):null,w={index:u.draggable.index,droppableId:u.droppable.id},m={draggableId:d.descriptor.id,type:d.descriptor.type,source:w,reason:a,mode:o.movementMode,destination:v,combine:y},g=JS({impact:f,draggable:d,dimensions:s,viewport:o.viewport,afterCritical:o.afterCritical}),h={critical:o.critical,afterCritical:o.afterCritical,result:m,impact:f},S=!er(o.current.client.offset,g)||!!m.combine;if(!S){r(Js({completed:h}));return}var x=XS({current:o.current.client.offset,destination:g,reason:a}),b={newHomeClientOffset:g,dropDuration:x,completed:h};r(GS(b))}}}},zg=function(){return{x:window.pageXOffset,y:window.pageYOffset}};function tE(e){return{eventName:"scroll",options:{passive:!0,capture:!1},fn:function(r){r.target!==window&&r.target!==window.document||e()}}}function rE(e){var t=e.onWindowScroll;function r(){t(zg())}var n=si(r),i=tE(n),o=Zt;function a(){return o!==Zt}function l(){a()&&P(),o=at(window,[i])}function u(){a()||P(),n.cancel(),o(),o=Zt}return{start:l,stop:u,isActive:a}}var nE=function(t){return t.type==="DROP_COMPLETE"||t.type==="DROP_ANIMATE"||t.type==="FLUSH"},iE=function(e){var t=rE({onWindowScroll:function(n){e.dispatch(US({newScroll:n}))}});return function(r){return function(n){!t.isActive()&&n.type==="INITIAL_PUBLISH"&&t.start(),t.isActive()&&nE(n)&&t.stop(),r(n)}}},oE=function(e){var t=!1,r=!1,n=setTimeout(function(){r=!0}),i=function(a){t||r||(t=!0,e(a),clearTimeout(n))};return i.wasCalled=function(){return t},i},aE=function(){var e=[],t=function(o){var a=Hs(e,function(s){return s.timerId===o});a===-1&&P();var l=e.splice(a,1),u=l[0];u.callback()},r=function(o){var a=setTimeout(function(){return t(a)}),l={timerId:a,callback:o};e.push(l)},n=function(){if(e.length){var o=[].concat(e);e.length=0,o.forEach(function(a){clearTimeout(a.timerId),a.callback()})}};return{add:r,flush:n}},lE=function(t,r){return t==null&&r==null?!0:t==null||r==null?!1:t.droppableId===r.droppableId&&t.index===r.index},uE=function(t,r){return t==null&&r==null?!0:t==null||r==null?!1:t.draggableId===r.draggableId&&t.droppableId===r.droppableId},sE=function(t,r){if(t===r)return!0;var n=t.draggable.id===r.draggable.id&&t.draggable.droppableId===r.draggable.droppableId&&t.draggable.type===r.draggable.type&&t.draggable.index===r.draggable.index,i=t.droppable.id===r.droppable.id&&t.droppable.type===r.droppable.type;return n&&i},Cn=function(t,r){r()},eo=function(t,r){return{draggableId:t.draggable.id,type:t.droppable.type,source:{droppableId:t.droppable.id,index:t.draggable.index},mode:r}},Dl=function(t,r,n,i){if(!t){n(i(r));return}var o=oE(n),a={announce:o};t(r,a),o.wasCalled()||n(i(r))},cE=function(e,t){var r=aE(),n=null,i=function(f,p){n&&P(),Cn("onBeforeCapture",function(){var v=e().onBeforeCapture;if(v){var y={draggableId:f,mode:p};v(y)}})},o=function(f,p){n&&P(),Cn("onBeforeDragStart",function(){var v=e().onBeforeDragStart;v&&v(eo(f,p))})},a=function(f,p){n&&P();var v=eo(f,p);n={mode:p,lastCritical:f,lastLocation:v.source,lastCombine:null},r.add(function(){Cn("onDragStart",function(){return Dl(e().onDragStart,v,t,yo.onDragStart)})})},l=function(f,p){var v=Gs(p),y=Ta(p);n||P();var w=!sE(f,n.lastCritical);w&&(n.lastCritical=f);var m=!lE(n.lastLocation,v);m&&(n.lastLocation=v);var g=!uE(n.lastCombine,y);if(g&&(n.lastCombine=y),!(!w&&!m&&!g)){var h=M({},eo(f,n.mode),{combine:y,destination:v});r.add(function(){Cn("onDragUpdate",function(){return Dl(e().onDragUpdate,h,t,yo.onDragUpdate)})})}},u=function(){n||P(),r.flush()},s=function(f){n||P(),n=null,Cn("onDragEnd",function(){return Dl(e().onDragEnd,f,t,yo.onDragEnd)})},d=function(){if(n){var f=M({},eo(n.lastCritical,n.mode),{combine:null,destination:null,reason:"CANCEL"});s(f)}};return{beforeCapture:i,beforeStart:o,start:a,update:l,flush:u,drop:s,abort:d}},dE=function(e,t){var r=cE(e,t);return function(n){return function(i){return function(o){if(o.type==="BEFORE_INITIAL_CAPTURE"){r.beforeCapture(o.payload.draggableId,o.payload.movementMode);return}if(o.type==="INITIAL_PUBLISH"){var a=o.payload.critical;r.beforeStart(a,o.payload.movementMode),i(o),r.start(a,o.payload.movementMode);return}if(o.type==="DROP_COMPLETE"){var l=o.payload.completed.result;r.flush(),i(o),r.drop(l);return}if(i(o),o.type==="FLUSH"){r.abort();return}var u=n.getState();u.phase==="DRAGGING"&&r.update(u.critical,u.impact)}}}},fE=function(e){return function(t){return function(r){if(r.type!=="DROP_ANIMATION_FINISHED"){t(r);return}var n=e.getState();n.phase!=="DROP_ANIMATING"&&P(),e.dispatch(Js({completed:n.completed}))}}},pE=function(e){var t=null,r=null;function n(){r&&(cancelAnimationFrame(r),r=null),t&&(t(),t=null)}return function(i){return function(o){if((o.type==="FLUSH"||o.type==="DROP_COMPLETE"||o.type==="DROP_ANIMATION_FINISHED")&&n(),i(o),o.type==="DROP_ANIMATE"){var a={eventName:"scroll",options:{capture:!0,passive:!1,once:!0},fn:function(){var u=e.getState();u.phase==="DROP_ANIMATING"&&e.dispatch(Mg())}};r=requestAnimationFrame(function(){r=null,t=at(window,[a])})}}}},vE=function(e){return function(){return function(t){return function(r){(r.type==="DROP_COMPLETE"||r.type==="FLUSH"||r.type==="DROP_ANIMATE")&&e.stopPublishing(),t(r)}}}},gE=function(e){var t=!1;return function(){return function(r){return function(n){if(n.type==="INITIAL_PUBLISH"){t=!0,e.tryRecordFocus(n.payload.critical.draggable.id),r(n),e.tryRestoreFocusRecorded();return}if(r(n),!!t){if(n.type==="FLUSH"){t=!1,e.tryRestoreFocusRecorded();return}if(n.type==="DROP_COMPLETE"){t=!1;var i=n.payload.completed.result;i.combine&&e.tryShiftRecord(i.draggableId,i.combine.draggableId),e.tryRestoreFocusRecorded()}}}}}},mE=function(t){return t.type==="DROP_COMPLETE"||t.type==="DROP_ANIMATE"||t.type==="FLUSH"},hE=function(e){return function(t){return function(r){return function(n){if(mE(n)){e.stop(),r(n);return}if(n.type==="INITIAL_PUBLISH"){r(n);var i=t.getState();i.phase!=="DRAGGING"&&P(),e.start(i);return}r(n),e.scroll(t.getState())}}}},yE=function(e){return function(t){return function(r){if(t(r),r.type==="PUBLISH_WHILE_DRAGGING"){var n=e.getState();n.phase==="DROP_PENDING"&&(n.isWaiting||e.dispatch(Bg({reason:n.reason})))}}}},wE=Hv,SE=function(e){var t=e.dimensionMarshal,r=e.focusMarshal,n=e.styleMarshal,i=e.getResponders,o=e.announce,a=e.autoScroller;return Wv(NS,wE(a0(KS(n),vE(t),qS(t),eE,fE,pE,yE,hE(a),iE,gE(r),dE(i,o))))},Pl=function(){return{additions:{},removals:{},modified:{}}};function EE(e){var t=e.registry,r=e.callbacks,n=Pl(),i=null,o=function(){i||(r.collectionStarting(),i=requestAnimationFrame(function(){i=null;var d=n,c=d.additions,f=d.removals,p=d.modified,v=Object.keys(c).map(function(m){return t.draggable.getById(m).getDimension(ge)}).sort(function(m,g){return m.descriptor.index-g.descriptor.index}),y=Object.keys(p).map(function(m){var g=t.droppable.getById(m),h=g.callbacks.getScrollWhileDragging();return{droppableId:m,scroll:h}}),w={additions:v,removals:Object.keys(f),modified:y};n=Pl(),r.publish(w)}))},a=function(d){var c=d.descriptor.id;n.additions[c]=d,n.modified[d.descriptor.droppableId]=!0,n.removals[c]&&delete n.removals[c],o()},l=function(d){var c=d.descriptor;n.removals[c.id]=!0,n.modified[c.droppableId]=!0,n.additions[c.id]&&delete n.additions[c.id],o()},u=function(){i&&(cancelAnimationFrame(i),i=null,n=Pl())};return{add:a,remove:l,stop:u}}var Ug=function(e){var t=e.scrollHeight,r=e.scrollWidth,n=e.height,i=e.width,o=qe({x:r,y:t},{x:i,y:n}),a={x:Math.max(0,o.x),y:Math.max(0,o.y)};return a},jg=function(){var e=document.documentElement;return e||P(),e},_g=function(){var e=jg(),t=Ug({scrollHeight:e.scrollHeight,scrollWidth:e.scrollWidth,width:e.clientWidth,height:e.clientHeight});return t},xE=function(){var e=zg(),t=_g(),r=e.y,n=e.x,i=jg(),o=i.clientWidth,a=i.clientHeight,l=n+o,u=r+a,s=gt({top:r,left:n,right:l,bottom:u}),d={frame:s,scroll:{initial:e,current:e,max:t,diff:{value:ge,displacement:ge}}};return d},bE=function(e){var t=e.critical,r=e.scrollOptions,n=e.registry,i=xE(),o=i.scroll.current,a=t.droppable,l=n.droppable.getAllByType(a.type).map(function(c){return c.callbacks.getDimensionAndWatchScroll(o,r)}),u=n.draggable.getAllByType(t.draggable.type).map(function(c){return c.getDimension(o)}),s={draggables:mg(u),droppables:gg(l)},d={dimensions:s,critical:t,viewport:i};return d};function Jd(e,t,r){if(r.descriptor.id===t.id||r.descriptor.type!==t.type)return!1;var n=e.droppable.getById(r.descriptor.droppableId);return n.descriptor.mode==="virtual"}var CE=function(e,t){var r=null,n=EE({callbacks:{publish:t.publishWhileDragging,collectionStarting:t.collectionStarting},registry:e}),i=function(p,v){e.droppable.exists(p)||P(),r&&t.updateDroppableIsEnabled({id:p,isEnabled:v})},o=function(p,v){r&&(e.droppable.exists(p)||P(),t.updateDroppableIsCombineEnabled({id:p,isCombineEnabled:v}))},a=function(p,v){r&&(e.droppable.exists(p)||P(),t.updateDroppableScroll({id:p,newScroll:v}))},l=function(p,v){r&&e.droppable.getById(p).callbacks.scroll(v)},u=function(){if(r){n.stop();var p=r.critical.droppable;e.droppable.getAllByType(p.type).forEach(function(v){return v.callbacks.dragStopped()}),r.unsubscribe(),r=null}},s=function(p){r||P();var v=r.critical.draggable;p.type==="ADDITION"&&Jd(e,v,p.value)&&n.add(p.value),p.type==="REMOVAL"&&Jd(e,v,p.value)&&n.remove(p.value)},d=function(p){r&&P();var v=e.draggable.getById(p.draggableId),y=e.droppable.getById(v.descriptor.droppableId),w={draggable:v.descriptor,droppable:y.descriptor},m=e.subscribe(s);return r={critical:w,unsubscribe:m},bE({critical:w,registry:e,scrollOptions:p.scrollOptions})},c={updateDroppableIsEnabled:i,updateDroppableIsCombineEnabled:o,scrollDroppable:l,updateDroppableScroll:a,startPublishing:d,stopPublishing:u};return c},$g=function(e,t){return e.phase==="IDLE"?!0:e.phase!=="DROP_ANIMATING"||e.completed.result.draggableId===t?!1:e.completed.result.reason==="DROP"},DE=function(e){window.scrollBy(e.x,e.y)},PE=ve(function(e){return Na(e).filter(function(t){return!(!t.isEnabled||!t.frame)})}),IE=function(t,r){var n=ur(PE(r),function(i){return i.frame||P(),Pg(i.frame.pageMarginBox)(t)});return n},RE=function(e){var t=e.center,r=e.destination,n=e.droppables;if(r){var i=n[r];return i.frame?i:null}var o=IE(t,n);return o},tr={startFromPercentage:.25,maxScrollAtPercentage:.05,maxPixelScroll:28,ease:function(t){return Math.pow(t,2)},durationDampening:{stopDampeningAt:1200,accelerateAt:360}},OE=function(e,t){var r=e[t.size]*tr.startFromPercentage,n=e[t.size]*tr.maxScrollAtPercentage,i={startScrollingFrom:r,maxScrollValueAt:n};return i},Wg=function(e){var t=e.startOfRange,r=e.endOfRange,n=e.current,i=r-t;if(i===0)return 0;var o=n-t,a=o/i;return a},tc=1,NE=function(e,t){if(e>t.startScrollingFrom)return 0;if(e<=t.maxScrollValueAt)return tr.maxPixelScroll;if(e===t.startScrollingFrom)return tc;var r=Wg({startOfRange:t.maxScrollValueAt,endOfRange:t.startScrollingFrom,current:e}),n=1-r,i=tr.maxPixelScroll*tr.ease(n);return Math.ceil(i)},Zd=tr.durationDampening.accelerateAt,ef=tr.durationDampening.stopDampeningAt,TE=function(e,t){var r=t,n=ef,i=Date.now(),o=i-r;if(o>=ef)return e;if(ot.height,o=r.width>t.width;return!o&&!i?n:o&&i?null:{x:o?0:n.x,y:i?0:n.y}},AE=pg(function(e){return e===0?0:e}),Hg=function(e){var t=e.dragStartTime,r=e.container,n=e.subject,i=e.center,o=e.shouldUseTimeDampening,a={top:i.y-r.top,right:r.right-i.x,bottom:r.bottom-i.y,left:i.x-r.left},l=rf({container:r,distanceToEdges:a,dragStartTime:t,axis:Vs,shouldUseTimeDampening:o}),u=rf({container:r,distanceToEdges:a,dragStartTime:t,axis:wg,shouldUseTimeDampening:o}),s=AE({x:u,y:l});if(er(s,ge))return null;var d=kE({container:r,subject:n,proposedScroll:s});return d?er(d,ge)?null:d:null},LE=pg(function(e){return e===0?0:e>0?1:-1}),rc=function(){var e=function(r,n){return r<0?r:r>n?r-n:0};return function(t){var r=t.current,n=t.max,i=t.change,o=Ee(r,i),a={x:e(o.x,n.x),y:e(o.y,n.y)};return er(a,ge)?null:a}}(),Gg=function(t){var r=t.max,n=t.current,i=t.change,o={x:Math.max(n.x,r.x),y:Math.max(n.y,r.y)},a=LE(i),l=rc({max:o,current:n,change:a});return!l||a.x!==0&&l.x===0||a.y!==0&&l.y===0},nc=function(t,r){return Gg({current:t.scroll.current,max:t.scroll.max,change:r})},BE=function(t,r){if(!nc(t,r))return null;var n=t.scroll.max,i=t.scroll.current;return rc({current:i,max:n,change:r})},ic=function(t,r){var n=t.frame;return n?Gg({current:n.scroll.current,max:n.scroll.max,change:r}):!1},ME=function(t,r){var n=t.frame;return!n||!ic(t,r)?null:rc({current:n.scroll.current,max:n.scroll.max,change:r})},FE=function(e){var t=e.viewport,r=e.subject,n=e.center,i=e.dragStartTime,o=e.shouldUseTimeDampening,a=Hg({dragStartTime:i,container:t.frame,subject:r,center:n,shouldUseTimeDampening:o});return a&&nc(t,a)?a:null},zE=function(e){var t=e.droppable,r=e.subject,n=e.center,i=e.dragStartTime,o=e.shouldUseTimeDampening,a=t.frame;if(!a)return null;var l=Hg({dragStartTime:i,container:a.pageMarginBox,subject:r,center:n,shouldUseTimeDampening:o});return l&&ic(t,l)?l:null},nf=function(e){var t=e.state,r=e.dragStartTime,n=e.shouldUseTimeDampening,i=e.scrollWindow,o=e.scrollDroppable,a=t.current.page.borderBoxCenter,l=t.dimensions.draggables[t.critical.draggable.id],u=l.page.marginBox;if(t.isWindowScrollAllowed){var s=t.viewport,d=FE({dragStartTime:r,viewport:s,subject:u,center:a,shouldUseTimeDampening:n});if(d){i(d);return}}var c=RE({center:a,destination:Qe(t.impact),droppables:t.dimensions.droppables});if(c){var f=zE({dragStartTime:r,droppable:c,subject:u,center:a,shouldUseTimeDampening:n});f&&o(c.descriptor.id,f)}},UE=function(e){var t=e.scrollWindow,r=e.scrollDroppable,n=si(t),i=si(r),o=null,a=function(d){o||P();var c=o,f=c.shouldUseTimeDampening,p=c.dragStartTime;nf({state:d,scrollWindow:n,scrollDroppable:i,dragStartTime:p,shouldUseTimeDampening:f})},l=function(d){o&&P();var c=Date.now(),f=!1,p=function(){f=!0};nf({state:d,dragStartTime:0,shouldUseTimeDampening:!1,scrollWindow:p,scrollDroppable:p}),o={dragStartTime:c,shouldUseTimeDampening:f},f&&a(d)},u=function(){o&&(n.cancel(),i.cancel(),o=null)};return{start:l,stop:u,scroll:a}},jE=function(e){var t=e.move,r=e.scrollDroppable,n=e.scrollWindow,i=function(s,d){var c=Ee(s.current.client.selection,d);t({client:c})},o=function(s,d){if(!ic(s,d))return d;var c=ME(s,d);if(!c)return r(s.descriptor.id,d),null;var f=qe(d,c);r(s.descriptor.id,f);var p=qe(d,f);return p},a=function(s,d,c){if(!s||!nc(d,c))return c;var f=BE(d,c);if(!f)return n(c),null;var p=qe(c,f);n(p);var v=qe(c,p);return v},l=function(s){var d=s.scrollJumpRequest;if(d){var c=Qe(s.impact);c||P();var f=o(s.dimensions.droppables[c],d);if(f){var p=s.viewport,v=a(s.isWindowScrollAllowed,p,f);v&&i(s,v)}}};return l},_E=function(e){var t=e.scrollDroppable,r=e.scrollWindow,n=e.move,i=UE({scrollWindow:r,scrollDroppable:t}),o=jE({move:n,scrollWindow:r,scrollDroppable:t}),a=function(s){if(s.phase==="DRAGGING"){if(s.movementMode==="FLUID"){i.scroll(s);return}s.scrollJumpRequest&&o(s)}},l={scroll:a,start:i.start,stop:i.stop};return l},on="data-rbd",an=function(){var e=on+"-drag-handle";return{base:e,draggableId:e+"-draggable-id",contextId:e+"-context-id"}}(),ku=function(){var e=on+"-draggable";return{base:e,contextId:e+"-context-id",id:e+"-id"}}(),$E=function(){var e=on+"-droppable";return{base:e,contextId:e+"-context-id",id:e+"-id"}}(),of={contextId:on+"-scroll-container-context-id"},WE=function(t){return function(r){return"["+r+'="'+t+'"]'}},Dn=function(t,r){return t.map(function(n){var i=n.styles[r];return i?n.selector+" { "+i+" }":""}).join(" ")},HE="pointer-events: none;",GE=function(e){var t=WE(e),r=function(){var l=` + cursor: -webkit-grab; + cursor: grab; + `;return{selector:t(an.contextId),styles:{always:` + -webkit-touch-callout: none; + -webkit-tap-highlight-color: rgba(0,0,0,0); + touch-action: manipulation; + `,resting:l,dragging:HE,dropAnimating:l}}}(),n=function(){var l=` + transition: `+Hn.outOfTheWay+`; + `;return{selector:t(ku.contextId),styles:{dragging:l,dropAnimating:l,userCancel:l}}}(),i={selector:t($E.contextId),styles:{always:"overflow-anchor: none;"}},o={selector:"body",styles:{dragging:` + cursor: grabbing; + cursor: -webkit-grabbing; + user-select: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + overflow-anchor: none; + `}},a=[n,r,i,o];return{always:Dn(a,"always"),resting:Dn(a,"resting"),dragging:Dn(a,"dragging"),dropAnimating:Dn(a,"dropAnimating"),userCancel:Dn(a,"userCancel")}},Ye=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u"?O.useLayoutEffect:O.useEffect,Il=function(){var t=document.querySelector("head");return t||P(),t},af=function(t){var r=document.createElement("style");return t&&r.setAttribute("nonce",t),r.type="text/css",r};function VE(e,t){var r=W(function(){return GE(e)},[e]),n=O.useRef(null),i=O.useRef(null),o=A(ve(function(c){var f=i.current;f||P(),f.textContent=c}),[]),a=A(function(c){var f=n.current;f||P(),f.textContent=c},[]);Ye(function(){!n.current&&!i.current||P();var c=af(t),f=af(t);return n.current=c,i.current=f,c.setAttribute(on+"-always",e),f.setAttribute(on+"-dynamic",e),Il().appendChild(c),Il().appendChild(f),a(r.always),o(r.resting),function(){var p=function(y){var w=y.current;w||P(),Il().removeChild(w),y.current=null};p(n),p(i)}},[t,a,o,r.always,r.resting,e]);var l=A(function(){return o(r.dragging)},[o,r.dragging]),u=A(function(c){if(c==="DROP"){o(r.dropAnimating);return}o(r.userCancel)},[o,r.dropAnimating,r.userCancel]),s=A(function(){i.current&&o(r.resting)},[o,r.resting]),d=W(function(){return{dragging:l,dropping:u,resting:s}},[l,u,s]);return d}var Vg=function(e){return e&&e.ownerDocument?e.ownerDocument.defaultView:window};function La(e){return e instanceof Vg(e).HTMLElement}function qE(e,t){var r="["+an.contextId+'="'+e+'"]',n=vg(document.querySelectorAll(r));if(!n.length)return null;var i=ur(n,function(o){return o.getAttribute(an.draggableId)===t});return!i||!La(i)?null:i}function KE(e){var t=O.useRef({}),r=O.useRef(null),n=O.useRef(null),i=O.useRef(!1),o=A(function(f,p){var v={id:f,focus:p};return t.current[f]=v,function(){var w=t.current,m=w[f];m!==v&&delete w[f]}},[]),a=A(function(f){var p=qE(e,f);p&&p!==document.activeElement&&p.focus()},[e]),l=A(function(f,p){r.current===f&&(r.current=p)},[]),u=A(function(){n.current||i.current&&(n.current=requestAnimationFrame(function(){n.current=null;var f=r.current;f&&a(f)}))},[a]),s=A(function(f){r.current=null;var p=document.activeElement;p&&p.getAttribute(an.draggableId)===f&&(r.current=f)},[]);Ye(function(){return i.current=!0,function(){i.current=!1;var f=n.current;f&&cancelAnimationFrame(f)}},[]);var d=W(function(){return{register:o,tryRecordFocus:s,tryRestoreFocusRecorded:u,tryShiftRecord:l}},[o,s,u,l]);return d}function QE(){var e={draggables:{},droppables:{}},t=[];function r(c){return t.push(c),function(){var p=t.indexOf(c);p!==-1&&t.splice(p,1)}}function n(c){t.length&&t.forEach(function(f){return f(c)})}function i(c){return e.draggables[c]||null}function o(c){var f=i(c);return f||P(),f}var a={register:function(f){e.draggables[f.descriptor.id]=f,n({type:"ADDITION",value:f})},update:function(f,p){var v=e.draggables[p.descriptor.id];v&&v.uniqueId===f.uniqueId&&(delete e.draggables[p.descriptor.id],e.draggables[f.descriptor.id]=f)},unregister:function(f){var p=f.descriptor.id,v=i(p);v&&f.uniqueId===v.uniqueId&&(delete e.draggables[p],n({type:"REMOVAL",value:f}))},getById:o,findById:i,exists:function(f){return!!i(f)},getAllByType:function(f){return Xo(e.draggables).filter(function(p){return p.descriptor.type===f})}};function l(c){return e.droppables[c]||null}function u(c){var f=l(c);return f||P(),f}var s={register:function(f){e.droppables[f.descriptor.id]=f},unregister:function(f){var p=l(f.descriptor.id);p&&f.uniqueId===p.uniqueId&&delete e.droppables[f.descriptor.id]},getById:u,findById:l,exists:function(f){return!!l(f)},getAllByType:function(f){return Xo(e.droppables).filter(function(p){return p.descriptor.type===f})}};function d(){e.draggables={},e.droppables={},t.length=0}return{draggable:a,droppable:s,subscribe:r,clean:d}}function YE(){var e=W(QE,[]);return O.useEffect(function(){return function(){requestAnimationFrame(e.clean)}},[e]),e}var oc=Y.createContext(null),Zo=function(){var e=document.body;return e||P(),e},XE={position:"absolute",width:"1px",height:"1px",margin:"-1px",border:"0",padding:"0",overflow:"hidden",clip:"rect(0 0 0 0)","clip-path":"inset(100%)"},JE=function(t){return"rbd-announcement-"+t};function ZE(e){var t=W(function(){return JE(e)},[e]),r=O.useRef(null);O.useEffect(function(){var o=document.createElement("div");return r.current=o,o.id=t,o.setAttribute("aria-live","assertive"),o.setAttribute("aria-atomic","true"),M(o.style,XE),Zo().appendChild(o),function(){setTimeout(function(){var u=Zo();u.contains(o)&&u.removeChild(o),o===r.current&&(r.current=null)})}},[t]);var n=A(function(i){var o=r.current;if(o){o.textContent=i;return}},[]);return n}var ex=0,tx={separator:"::"};function ac(e,t){return t===void 0&&(t=tx),W(function(){return""+e+t.separator+ex++},[t.separator,e])}function rx(e){var t=e.contextId,r=e.uniqueId;return"rbd-hidden-text-"+t+"-"+r}function nx(e){var t=e.contextId,r=e.text,n=ac("hidden-text",{separator:"-"}),i=W(function(){return rx({contextId:t,uniqueId:n})},[n,t]);return O.useEffect(function(){var a=document.createElement("div");return a.id=i,a.textContent=r,a.style.display="none",Zo().appendChild(a),function(){var u=Zo();u.contains(a)&&u.removeChild(a)}},[i,r]),i}var Ba=Y.createContext(null);function qg(e){var t=O.useRef(e);return O.useEffect(function(){t.current=e}),t}function ix(){var e=null;function t(){return!!e}function r(a){return a===e}function n(a){e&&P();var l={abandon:a};return e=l,l}function i(){e||P(),e=null}function o(){e&&(e.abandon(),i())}return{isClaimed:t,isActive:r,claim:n,release:i,tryAbandon:o}}var ox=9,ax=13,lc=27,Kg=32,lx=33,ux=34,sx=35,cx=36,dx=37,fx=38,px=39,vx=40,to,gx=(to={},to[ax]=!0,to[ox]=!0,to),Qg=function(e){gx[e.keyCode]&&e.preventDefault()},Ma=function(){var e="visibilitychange";if(typeof document>"u")return e;var t=[e,"ms"+e,"webkit"+e,"moz"+e,"o"+e],r=ur(t,function(n){return"on"+n in document});return r||e}(),Yg=0,lf=5;function mx(e,t){return Math.abs(t.x-e.x)>=lf||Math.abs(t.y-e.y)>=lf}var uf={type:"IDLE"};function hx(e){var t=e.cancel,r=e.completed,n=e.getPhase,i=e.setPhase;return[{eventName:"mousemove",fn:function(a){var l=a.button,u=a.clientX,s=a.clientY;if(l===Yg){var d={x:u,y:s},c=n();if(c.type==="DRAGGING"){a.preventDefault(),c.actions.move(d);return}c.type!=="PENDING"&&P();var f=c.point;if(mx(f,d)){a.preventDefault();var p=c.actions.fluidLift(d);i({type:"DRAGGING",actions:p})}}}},{eventName:"mouseup",fn:function(a){var l=n();if(l.type!=="DRAGGING"){t();return}a.preventDefault(),l.actions.drop({shouldBlockNextClick:!0}),r()}},{eventName:"mousedown",fn:function(a){n().type==="DRAGGING"&&a.preventDefault(),t()}},{eventName:"keydown",fn:function(a){var l=n();if(l.type==="PENDING"){t();return}if(a.keyCode===lc){a.preventDefault(),t();return}Qg(a)}},{eventName:"resize",fn:t},{eventName:"scroll",options:{passive:!0,capture:!1},fn:function(){n().type==="PENDING"&&t()}},{eventName:"webkitmouseforcedown",fn:function(a){var l=n();if(l.type==="IDLE"&&P(),l.actions.shouldRespectForcePress()){t();return}a.preventDefault()}},{eventName:Ma,fn:t}]}function yx(e){var t=O.useRef(uf),r=O.useRef(Zt),n=W(function(){return{eventName:"mousedown",fn:function(c){if(!c.defaultPrevented&&c.button===Yg&&!(c.ctrlKey||c.metaKey||c.shiftKey||c.altKey)){var f=e.findClosestDraggableId(c);if(f){var p=e.tryGetLock(f,a,{sourceEvent:c});if(p){c.preventDefault();var v={x:c.clientX,y:c.clientY};r.current(),s(p,v)}}}}}},[e]),i=W(function(){return{eventName:"webkitmouseforcewillbegin",fn:function(c){if(!c.defaultPrevented){var f=e.findClosestDraggableId(c);if(f){var p=e.findOptionsForDraggable(f);p&&(p.shouldRespectForcePress||e.canGetLock(f)&&c.preventDefault())}}}}},[e]),o=A(function(){var c={passive:!1,capture:!0};r.current=at(window,[i,n],c)},[i,n]),a=A(function(){var d=t.current;d.type!=="IDLE"&&(t.current=uf,r.current(),o())},[o]),l=A(function(){var d=t.current;a(),d.type==="DRAGGING"&&d.actions.cancel({shouldBlockNextClick:!0}),d.type==="PENDING"&&d.actions.abort()},[a]),u=A(function(){var c={capture:!0,passive:!1},f=hx({cancel:l,completed:a,getPhase:function(){return t.current},setPhase:function(v){t.current=v}});r.current=at(window,f,c)},[l,a]),s=A(function(c,f){t.current.type!=="IDLE"&&P(),t.current={type:"PENDING",point:f,actions:c},u()},[u]);Ye(function(){return o(),function(){r.current()}},[o])}var Tr;function wx(){}var Sx=(Tr={},Tr[ux]=!0,Tr[lx]=!0,Tr[cx]=!0,Tr[sx]=!0,Tr);function Ex(e,t){function r(){t(),e.cancel()}function n(){t(),e.drop()}return[{eventName:"keydown",fn:function(o){if(o.keyCode===lc){o.preventDefault(),r();return}if(o.keyCode===Kg){o.preventDefault(),n();return}if(o.keyCode===vx){o.preventDefault(),e.moveDown();return}if(o.keyCode===fx){o.preventDefault(),e.moveUp();return}if(o.keyCode===px){o.preventDefault(),e.moveRight();return}if(o.keyCode===dx){o.preventDefault(),e.moveLeft();return}if(Sx[o.keyCode]){o.preventDefault();return}Qg(o)}},{eventName:"mousedown",fn:r},{eventName:"mouseup",fn:r},{eventName:"click",fn:r},{eventName:"touchstart",fn:r},{eventName:"resize",fn:r},{eventName:"wheel",fn:r,options:{passive:!0}},{eventName:Ma,fn:r}]}function xx(e){var t=O.useRef(wx),r=W(function(){return{eventName:"keydown",fn:function(o){if(o.defaultPrevented||o.keyCode!==Kg)return;var a=e.findClosestDraggableId(o);if(!a)return;var l=e.tryGetLock(a,d,{sourceEvent:o});if(!l)return;o.preventDefault();var u=!0,s=l.snapLift();t.current();function d(){u||P(),u=!1,t.current(),n()}t.current=at(window,Ex(s,d),{capture:!0,passive:!1})}}},[e]),n=A(function(){var o={passive:!1,capture:!0};t.current=at(window,[r],o)},[r]);Ye(function(){return n(),function(){t.current()}},[n])}var Rl={type:"IDLE"},bx=120,Cx=.15;function Dx(e){var t=e.cancel,r=e.getPhase;return[{eventName:"orientationchange",fn:t},{eventName:"resize",fn:t},{eventName:"contextmenu",fn:function(i){i.preventDefault()}},{eventName:"keydown",fn:function(i){if(r().type!=="DRAGGING"){t();return}i.keyCode===lc&&i.preventDefault(),t()}},{eventName:Ma,fn:t}]}function Px(e){var t=e.cancel,r=e.completed,n=e.getPhase;return[{eventName:"touchmove",options:{capture:!1},fn:function(o){var a=n();if(a.type!=="DRAGGING"){t();return}a.hasMoved=!0;var l=o.touches[0],u=l.clientX,s=l.clientY,d={x:u,y:s};o.preventDefault(),a.actions.move(d)}},{eventName:"touchend",fn:function(o){var a=n();if(a.type!=="DRAGGING"){t();return}o.preventDefault(),a.actions.drop({shouldBlockNextClick:!0}),r()}},{eventName:"touchcancel",fn:function(o){if(n().type!=="DRAGGING"){t();return}o.preventDefault(),t()}},{eventName:"touchforcechange",fn:function(o){var a=n();a.type==="IDLE"&&P();var l=o.touches[0];if(l){var u=l.force>=Cx;if(u){var s=a.actions.shouldRespectForcePress();if(a.type==="PENDING"){s&&t();return}if(s){if(a.hasMoved){o.preventDefault();return}t();return}o.preventDefault()}}}},{eventName:Ma,fn:t}]}function Ix(e){var t=O.useRef(Rl),r=O.useRef(Zt),n=A(function(){return t.current},[]),i=A(function(p){t.current=p},[]),o=W(function(){return{eventName:"touchstart",fn:function(p){if(!p.defaultPrevented){var v=e.findClosestDraggableId(p);if(v){var y=e.tryGetLock(v,l,{sourceEvent:p});if(y){var w=p.touches[0],m=w.clientX,g=w.clientY,h={x:m,y:g};r.current(),c(y,h)}}}}}},[e]),a=A(function(){var p={capture:!0,passive:!1};r.current=at(window,[o],p)},[o]),l=A(function(){var f=t.current;f.type!=="IDLE"&&(f.type==="PENDING"&&clearTimeout(f.longPressTimerId),i(Rl),r.current(),a())},[a,i]),u=A(function(){var f=t.current;l(),f.type==="DRAGGING"&&f.actions.cancel({shouldBlockNextClick:!0}),f.type==="PENDING"&&f.actions.abort()},[l]),s=A(function(){var p={capture:!0,passive:!1},v={cancel:u,completed:l,getPhase:n},y=at(window,Px(v),p),w=at(window,Dx(v),p);r.current=function(){y(),w()}},[u,n,l]),d=A(function(){var p=n();p.type!=="PENDING"&&P();var v=p.actions.fluidLift(p.point);i({type:"DRAGGING",actions:v,hasMoved:!1})},[n,i]),c=A(function(p,v){n().type!=="IDLE"&&P();var y=setTimeout(d,bx);i({type:"PENDING",point:v,actions:p,longPressTimerId:y}),s()},[s,n,i,d]);Ye(function(){return a(),function(){r.current();var v=n();v.type==="PENDING"&&(clearTimeout(v.longPressTimerId),i(Rl))}},[n,a,i]),Ye(function(){var p=at(window,[{eventName:"touchmove",fn:function(){},options:{capture:!1,passive:!1}}]);return p},[])}var Rx={input:!0,button:!0,textarea:!0,select:!0,option:!0,optgroup:!0,video:!0,audio:!0};function Xg(e,t){if(t==null)return!1;var r=!!Rx[t.tagName.toLowerCase()];if(r)return!0;var n=t.getAttribute("contenteditable");return n==="true"||n===""?!0:t===e?!1:Xg(e,t.parentElement)}function Ox(e,t){var r=t.target;return La(r)?Xg(e,r):!1}var Nx=function(e){return gt(e.getBoundingClientRect()).center};function Tx(e){return e instanceof Vg(e).Element}var kx=function(){var e="matches";if(typeof document>"u")return e;var t=[e,"msMatchesSelector","webkitMatchesSelector"],r=ur(t,function(n){return n in Element.prototype});return r||e}();function Jg(e,t){return e==null?null:e[kx](t)?e:Jg(e.parentElement,t)}function Ax(e,t){return e.closest?e.closest(t):Jg(e,t)}function Lx(e){return"["+an.contextId+'="'+e+'"]'}function Bx(e,t){var r=t.target;if(!Tx(r))return null;var n=Lx(e),i=Ax(r,n);return!i||!La(i)?null:i}function Mx(e,t){var r=Bx(e,t);return r?r.getAttribute(an.draggableId):null}function Fx(e,t){var r="["+ku.contextId+'="'+e+'"]',n=vg(document.querySelectorAll(r)),i=ur(n,function(o){return o.getAttribute(ku.id)===t});return!i||!La(i)?null:i}function zx(e){e.preventDefault()}function ro(e){var t=e.expected,r=e.phase,n=e.isLockActive;return e.shouldWarn,!(!n()||t!==r)}function Zg(e){var t=e.lockAPI,r=e.store,n=e.registry,i=e.draggableId;if(t.isClaimed())return!1;var o=n.draggable.findById(i);return!(!o||!o.options.isEnabled||!$g(r.getState(),i))}function Ux(e){var t=e.lockAPI,r=e.contextId,n=e.store,i=e.registry,o=e.draggableId,a=e.forceSensorStop,l=e.sourceEvent,u=Zg({lockAPI:t,store:n,registry:i,draggableId:o});if(!u)return null;var s=i.draggable.getById(o),d=Fx(r,s.descriptor.id);if(!d||l&&!s.options.canDragInteractiveElements&&Ox(d,l))return null;var c=t.claim(a||Zt),f="PRE_DRAG";function p(){return s.options.shouldRespectForcePress}function v(){return t.isActive(c)}function y(b,C){ro({expected:b,phase:f,isLockActive:v,shouldWarn:!0})&&n.dispatch(C())}var w=y.bind(null,"DRAGGING");function m(b){function C(){t.release(),f="COMPLETED"}f!=="PRE_DRAG"&&(C(),f!=="PRE_DRAG"&&P()),n.dispatch(kS(b.liftActionArgs)),f="DRAGGING";function I(k,T){if(T===void 0&&(T={shouldBlockNextClick:!1}),b.cleanup(),T.shouldBlockNextClick){var z=at(window,[{eventName:"click",fn:zx,options:{once:!0,passive:!1,capture:!0}}]);setTimeout(z)}C(),n.dispatch(Bg({reason:k}))}return M({isActive:function(){return ro({expected:"DRAGGING",phase:f,isLockActive:v,shouldWarn:!1})},shouldRespectForcePress:p,drop:function(T){return I("DROP",T)},cancel:function(T){return I("CANCEL",T)}},b.actions)}function g(b){var C=si(function(k){w(function(){return Lg({client:k})})}),I=m({liftActionArgs:{id:o,clientSelection:b,movementMode:"FLUID"},cleanup:function(){return C.cancel()},actions:{move:C}});return M({},I,{move:C})}function h(){var b={moveUp:function(){return w(_S)},moveRight:function(){return w(WS)},moveDown:function(){return w($S)},moveLeft:function(){return w(HS)}};return m({liftActionArgs:{id:o,clientSelection:Nx(d),movementMode:"SNAP"},cleanup:Zt,actions:b})}function S(){var b=ro({expected:"PRE_DRAG",phase:f,isLockActive:v,shouldWarn:!0});b&&t.release()}var x={isActive:function(){return ro({expected:"PRE_DRAG",phase:f,isLockActive:v,shouldWarn:!1})},shouldRespectForcePress:p,fluidLift:g,snapLift:h,abort:S};return x}var jx=[yx,xx,Ix];function _x(e){var t=e.contextId,r=e.store,n=e.registry,i=e.customSensors,o=e.enableDefaultSensors,a=[].concat(o?jx:[],i||[]),l=O.useState(function(){return ix()})[0],u=A(function(g,h){g.isDragging&&!h.isDragging&&l.tryAbandon()},[l]);Ye(function(){var g=r.getState(),h=r.subscribe(function(){var S=r.getState();u(g,S),g=S});return h},[l,r,u]),Ye(function(){return l.tryAbandon},[l.tryAbandon]);for(var s=A(function(m){return Zg({lockAPI:l,registry:n,store:r,draggableId:m})},[l,n,r]),d=A(function(m,g,h){return Ux({lockAPI:l,registry:n,contextId:t,store:r,draggableId:m,forceSensorStop:g,sourceEvent:h&&h.sourceEvent?h.sourceEvent:null})},[t,l,n,r]),c=A(function(m){return Mx(t,m)},[t]),f=A(function(m){var g=n.draggable.findById(m);return g?g.options:null},[n.draggable]),p=A(function(){l.isClaimed()&&(l.tryAbandon(),r.getState().phase!=="IDLE"&&r.dispatch(Xs()))},[l,r]),v=A(l.isClaimed,[l]),y=W(function(){return{canGetLock:s,tryGetLock:d,findClosestDraggableId:c,findOptionsForDraggable:f,tryReleaseLock:p,isLockClaimed:v}},[s,d,c,f,p,v]),w=0;wt=>{const r=B1.call(t);return e[r]||(e[r]=r.slice(8,-1).toLowerCase())})(Object.create(null)),St=e=>(e=e.toLowerCase(),t=>za(t)===e),Ua=e=>t=>typeof t===e,{isArray:vn}=Array,ln=Ua("undefined");function Ni(e){return e!==null&&!ln(e)&&e.constructor!==null&&!ln(e.constructor)&&$e(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}const um=St("ArrayBuffer");function M1(e){let t;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?t=ArrayBuffer.isView(e):t=e&&e.buffer&&um(e.buffer),t}const F1=Ua("string"),$e=Ua("function"),sm=Ua("number"),Ti=e=>e!==null&&typeof e=="object",z1=e=>e===!0||e===!1,wo=e=>{if(za(e)!=="object")return!1;const t=sc(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(lm in e)&&!(Fa in e)},U1=e=>{if(!Ti(e)||Ni(e))return!1;try{return Object.keys(e).length===0&&Object.getPrototypeOf(e)===Object.prototype}catch{return!1}},j1=St("Date"),_1=St("File"),$1=St("Blob"),W1=St("FileList"),H1=e=>Ti(e)&&$e(e.pipe),G1=e=>{let t;return e&&(typeof FormData=="function"&&e instanceof FormData||$e(e.append)&&((t=za(e))==="formdata"||t==="object"&&$e(e.toString)&&e.toString()==="[object FormData]"))},V1=St("URLSearchParams"),[q1,K1,Q1,Y1]=["ReadableStream","Request","Response","Headers"].map(St),X1=e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function ki(e,t,{allOwnKeys:r=!1}={}){if(e===null||typeof e>"u")return;let n,i;if(typeof e!="object"&&(e=[e]),vn(e))for(n=0,i=e.length;n0;)if(i=r[n],t===i.toLowerCase())return i;return null}const mr=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global,dm=e=>!ln(e)&&e!==mr;function Lu(){const{caseless:e,skipUndefined:t}=dm(this)&&this||{},r={},n=(i,o)=>{const a=e&&cm(r,o)||o;wo(r[a])&&wo(i)?r[a]=Lu(r[a],i):wo(i)?r[a]=Lu({},i):vn(i)?r[a]=i.slice():(!t||!ln(i))&&(r[a]=i)};for(let i=0,o=arguments.length;i(ki(t,(i,o)=>{r&&$e(i)?Object.defineProperty(e,o,{value:am(i,r),writable:!0,enumerable:!0,configurable:!0}):Object.defineProperty(e,o,{value:i,writable:!0,enumerable:!0,configurable:!0})},{allOwnKeys:n}),e),Z1=e=>(e.charCodeAt(0)===65279&&(e=e.slice(1)),e),eb=(e,t,r,n)=>{e.prototype=Object.create(t.prototype,n),Object.defineProperty(e.prototype,"constructor",{value:e,writable:!0,enumerable:!1,configurable:!0}),Object.defineProperty(e,"super",{value:t.prototype}),r&&Object.assign(e.prototype,r)},tb=(e,t,r,n)=>{let i,o,a;const l={};if(t=t||{},e==null)return t;do{for(i=Object.getOwnPropertyNames(e),o=i.length;o-- >0;)a=i[o],(!n||n(a,e,t))&&!l[a]&&(t[a]=e[a],l[a]=!0);e=r!==!1&&sc(e)}while(e&&(!r||r(e,t))&&e!==Object.prototype);return t},rb=(e,t,r)=>{e=String(e),(r===void 0||r>e.length)&&(r=e.length),r-=t.length;const n=e.indexOf(t,r);return n!==-1&&n===r},nb=e=>{if(!e)return null;if(vn(e))return e;let t=e.length;if(!sm(t))return null;const r=new Array(t);for(;t-- >0;)r[t]=e[t];return r},ib=(e=>t=>e&&t instanceof e)(typeof Uint8Array<"u"&&sc(Uint8Array)),ob=(e,t)=>{const n=(e&&e[Fa]).call(e);let i;for(;(i=n.next())&&!i.done;){const o=i.value;t.call(e,o[0],o[1])}},ab=(e,t)=>{let r;const n=[];for(;(r=e.exec(t))!==null;)n.push(r);return n},lb=St("HTMLFormElement"),ub=e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(r,n,i){return n.toUpperCase()+i}),vf=(({hasOwnProperty:e})=>(t,r)=>e.call(t,r))(Object.prototype),sb=St("RegExp"),fm=(e,t)=>{const r=Object.getOwnPropertyDescriptors(e),n={};ki(r,(i,o)=>{let a;(a=t(i,o,e))!==!1&&(n[o]=a||i)}),Object.defineProperties(e,n)},cb=e=>{fm(e,(t,r)=>{if($e(e)&&["arguments","caller","callee"].indexOf(r)!==-1)return!1;const n=e[r];if($e(n)){if(t.enumerable=!1,"writable"in t){t.writable=!1;return}t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+r+"'")})}})},db=(e,t)=>{const r={},n=i=>{i.forEach(o=>{r[o]=!0})};return vn(e)?n(e):n(String(e).split(t)),r},fb=()=>{},pb=(e,t)=>e!=null&&Number.isFinite(e=+e)?e:t;function vb(e){return!!(e&&$e(e.append)&&e[lm]==="FormData"&&e[Fa])}const gb=e=>{const t=new Array(10),r=(n,i)=>{if(Ti(n)){if(t.indexOf(n)>=0)return;if(Ni(n))return n;if(!("toJSON"in n)){t[i]=n;const o=vn(n)?[]:{};return ki(n,(a,l)=>{const u=r(a,i+1);!ln(u)&&(o[l]=u)}),t[i]=void 0,o}}return n};return r(e,0)},mb=St("AsyncFunction"),hb=e=>e&&(Ti(e)||$e(e))&&$e(e.then)&&$e(e.catch),pm=((e,t)=>e?setImmediate:t?((r,n)=>(mr.addEventListener("message",({source:i,data:o})=>{i===mr&&o===r&&n.length&&n.shift()()},!1),i=>{n.push(i),mr.postMessage(r,"*")}))(`axios@${Math.random()}`,[]):r=>setTimeout(r))(typeof setImmediate=="function",$e(mr.postMessage)),yb=typeof queueMicrotask<"u"?queueMicrotask.bind(mr):typeof process<"u"&&process.nextTick||pm,wb=e=>e!=null&&$e(e[Fa]),E={isArray:vn,isArrayBuffer:um,isBuffer:Ni,isFormData:G1,isArrayBufferView:M1,isString:F1,isNumber:sm,isBoolean:z1,isObject:Ti,isPlainObject:wo,isEmptyObject:U1,isReadableStream:q1,isRequest:K1,isResponse:Q1,isHeaders:Y1,isUndefined:ln,isDate:j1,isFile:_1,isBlob:$1,isRegExp:sb,isFunction:$e,isStream:H1,isURLSearchParams:V1,isTypedArray:ib,isFileList:W1,forEach:ki,merge:Lu,extend:J1,trim:X1,stripBOM:Z1,inherits:eb,toFlatObject:tb,kindOf:za,kindOfTest:St,endsWith:rb,toArray:nb,forEachEntry:ob,matchAll:ab,isHTMLForm:lb,hasOwnProperty:vf,hasOwnProp:vf,reduceDescriptors:fm,freezeMethods:cb,toObjectSet:db,toCamelCase:ub,noop:fb,toFiniteNumber:pb,findKey:cm,global:mr,isContextDefined:dm,isSpecCompliantForm:vb,toJSONObject:gb,isAsyncFn:mb,isThenable:hb,setImmediate:pm,asap:yb,isIterable:wb};let F=class vm extends Error{static from(t,r,n,i,o,a){const l=new vm(t.message,r||t.code,n,i,o);return l.cause=t,l.name=t.name,a&&Object.assign(l,a),l}constructor(t,r,n,i,o){super(t),this.name="AxiosError",this.isAxiosError=!0,r&&(this.code=r),n&&(this.config=n),i&&(this.request=i),o&&(this.response=o,this.status=o.status)}toJSON(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:E.toJSONObject(this.config),code:this.code,status:this.status}}};F.ERR_BAD_OPTION_VALUE="ERR_BAD_OPTION_VALUE";F.ERR_BAD_OPTION="ERR_BAD_OPTION";F.ECONNABORTED="ECONNABORTED";F.ETIMEDOUT="ETIMEDOUT";F.ERR_NETWORK="ERR_NETWORK";F.ERR_FR_TOO_MANY_REDIRECTS="ERR_FR_TOO_MANY_REDIRECTS";F.ERR_DEPRECATED="ERR_DEPRECATED";F.ERR_BAD_RESPONSE="ERR_BAD_RESPONSE";F.ERR_BAD_REQUEST="ERR_BAD_REQUEST";F.ERR_CANCELED="ERR_CANCELED";F.ERR_NOT_SUPPORT="ERR_NOT_SUPPORT";F.ERR_INVALID_URL="ERR_INVALID_URL";const Sb=null;function Bu(e){return E.isPlainObject(e)||E.isArray(e)}function gm(e){return E.endsWith(e,"[]")?e.slice(0,-2):e}function gf(e,t,r){return e?e.concat(t).map(function(i,o){return i=gm(i),!r&&o?"["+i+"]":i}).join(r?".":""):t}function Eb(e){return E.isArray(e)&&!e.some(Bu)}const xb=E.toFlatObject(E,{},null,function(t){return/^is[A-Z]/.test(t)});function ja(e,t,r){if(!E.isObject(e))throw new TypeError("target must be an object");t=t||new FormData,r=E.toFlatObject(r,{metaTokens:!0,dots:!1,indexes:!1},!1,function(y,w){return!E.isUndefined(w[y])});const n=r.metaTokens,i=r.visitor||d,o=r.dots,a=r.indexes,u=(r.Blob||typeof Blob<"u"&&Blob)&&E.isSpecCompliantForm(t);if(!E.isFunction(i))throw new TypeError("visitor must be a function");function s(v){if(v===null)return"";if(E.isDate(v))return v.toISOString();if(E.isBoolean(v))return v.toString();if(!u&&E.isBlob(v))throw new F("Blob is not supported. Use a Buffer instead.");return E.isArrayBuffer(v)||E.isTypedArray(v)?u&&typeof Blob=="function"?new Blob([v]):Buffer.from(v):v}function d(v,y,w){let m=v;if(v&&!w&&typeof v=="object"){if(E.endsWith(y,"{}"))y=n?y:y.slice(0,-2),v=JSON.stringify(v);else if(E.isArray(v)&&Eb(v)||(E.isFileList(v)||E.endsWith(y,"[]"))&&(m=E.toArray(v)))return y=gm(y),m.forEach(function(h,S){!(E.isUndefined(h)||h===null)&&t.append(a===!0?gf([y],S,o):a===null?y:y+"[]",s(h))}),!1}return Bu(v)?!0:(t.append(gf(w,y,o),s(v)),!1)}const c=[],f=Object.assign(xb,{defaultVisitor:d,convertValue:s,isVisitable:Bu});function p(v,y){if(!E.isUndefined(v)){if(c.indexOf(v)!==-1)throw Error("Circular reference detected in "+y.join("."));c.push(v),E.forEach(v,function(m,g){(!(E.isUndefined(m)||m===null)&&i.call(t,m,E.isString(g)?g.trim():g,y,f))===!0&&p(m,y?y.concat(g):[g])}),c.pop()}}if(!E.isObject(e))throw new TypeError("data must be an object");return p(e),t}function mf(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,function(n){return t[n]})}function cc(e,t){this._pairs=[],e&&ja(e,this,t)}const mm=cc.prototype;mm.append=function(t,r){this._pairs.push([t,r])};mm.toString=function(t){const r=t?function(n){return t.call(this,n,mf)}:mf;return this._pairs.map(function(i){return r(i[0])+"="+r(i[1])},"").join("&")};function bb(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+")}function hm(e,t,r){if(!t)return e;const n=r&&r.encode||bb,i=E.isFunction(r)?{serialize:r}:r,o=i&&i.serialize;let a;if(o?a=o(t,i):a=E.isURLSearchParams(t)?t.toString():new cc(t,i).toString(n),a){const l=e.indexOf("#");l!==-1&&(e=e.slice(0,l)),e+=(e.indexOf("?")===-1?"?":"&")+a}return e}class hf{constructor(){this.handlers=[]}use(t,r,n){return this.handlers.push({fulfilled:t,rejected:r,synchronous:n?n.synchronous:!1,runWhen:n?n.runWhen:null}),this.handlers.length-1}eject(t){this.handlers[t]&&(this.handlers[t]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(t){E.forEach(this.handlers,function(n){n!==null&&t(n)})}}const ym={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},Cb=typeof URLSearchParams<"u"?URLSearchParams:cc,Db=typeof FormData<"u"?FormData:null,Pb=typeof Blob<"u"?Blob:null,Ib={isBrowser:!0,classes:{URLSearchParams:Cb,FormData:Db,Blob:Pb},protocols:["http","https","file","blob","url","data"]},dc=typeof window<"u"&&typeof document<"u",Mu=typeof navigator=="object"&&navigator||void 0,Rb=dc&&(!Mu||["ReactNative","NativeScript","NS"].indexOf(Mu.product)<0),Ob=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function",Nb=dc&&window.location.href||"http://localhost",Tb=Object.freeze(Object.defineProperty({__proto__:null,hasBrowserEnv:dc,hasStandardBrowserEnv:Rb,hasStandardBrowserWebWorkerEnv:Ob,navigator:Mu,origin:Nb},Symbol.toStringTag,{value:"Module"})),Ie={...Tb,...Ib};function kb(e,t){return ja(e,new Ie.classes.URLSearchParams,{visitor:function(r,n,i,o){return Ie.isNode&&E.isBuffer(r)?(this.append(n,r.toString("base64")),!1):o.defaultVisitor.apply(this,arguments)},...t})}function Ab(e){return E.matchAll(/\w+|\[(\w*)]/g,e).map(t=>t[0]==="[]"?"":t[1]||t[0])}function Lb(e){const t={},r=Object.keys(e);let n;const i=r.length;let o;for(n=0;n=r.length;return a=!a&&E.isArray(i)?i.length:a,u?(E.hasOwnProp(i,a)?i[a]=[i[a],n]:i[a]=n,!l):((!i[a]||!E.isObject(i[a]))&&(i[a]=[]),t(r,n,i[a],o)&&E.isArray(i[a])&&(i[a]=Lb(i[a])),!l)}if(E.isFormData(e)&&E.isFunction(e.entries)){const r={};return E.forEachEntry(e,(n,i)=>{t(Ab(n),i,r,0)}),r}return null}function Bb(e,t,r){if(E.isString(e))try{return(t||JSON.parse)(e),E.trim(e)}catch(n){if(n.name!=="SyntaxError")throw n}return(r||JSON.stringify)(e)}const Ai={transitional:ym,adapter:["xhr","http","fetch"],transformRequest:[function(t,r){const n=r.getContentType()||"",i=n.indexOf("application/json")>-1,o=E.isObject(t);if(o&&E.isHTMLForm(t)&&(t=new FormData(t)),E.isFormData(t))return i?JSON.stringify(wm(t)):t;if(E.isArrayBuffer(t)||E.isBuffer(t)||E.isStream(t)||E.isFile(t)||E.isBlob(t)||E.isReadableStream(t))return t;if(E.isArrayBufferView(t))return t.buffer;if(E.isURLSearchParams(t))return r.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),t.toString();let l;if(o){if(n.indexOf("application/x-www-form-urlencoded")>-1)return kb(t,this.formSerializer).toString();if((l=E.isFileList(t))||n.indexOf("multipart/form-data")>-1){const u=this.env&&this.env.FormData;return ja(l?{"files[]":t}:t,u&&new u,this.formSerializer)}}return o||i?(r.setContentType("application/json",!1),Bb(t)):t}],transformResponse:[function(t){const r=this.transitional||Ai.transitional,n=r&&r.forcedJSONParsing,i=this.responseType==="json";if(E.isResponse(t)||E.isReadableStream(t))return t;if(t&&E.isString(t)&&(n&&!this.responseType||i)){const a=!(r&&r.silentJSONParsing)&&i;try{return JSON.parse(t,this.parseReviver)}catch(l){if(a)throw l.name==="SyntaxError"?F.from(l,F.ERR_BAD_RESPONSE,this,null,this.response):l}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:Ie.classes.FormData,Blob:Ie.classes.Blob},validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};E.forEach(["delete","get","head","post","put","patch"],e=>{Ai.headers[e]={}});const Mb=E.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),Fb=e=>{const t={};let r,n,i;return e&&e.split(` +`).forEach(function(a){i=a.indexOf(":"),r=a.substring(0,i).trim().toLowerCase(),n=a.substring(i+1).trim(),!(!r||t[r]&&Mb[r])&&(r==="set-cookie"?t[r]?t[r].push(n):t[r]=[n]:t[r]=t[r]?t[r]+", "+n:n)}),t},yf=Symbol("internals");function In(e){return e&&String(e).trim().toLowerCase()}function So(e){return e===!1||e==null?e:E.isArray(e)?e.map(So):String(e)}function zb(e){const t=Object.create(null),r=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let n;for(;n=r.exec(e);)t[n[1]]=n[2];return t}const Ub=e=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim());function Tl(e,t,r,n,i){if(E.isFunction(n))return n.call(this,t,r);if(i&&(t=r),!!E.isString(t)){if(E.isString(n))return t.indexOf(n)!==-1;if(E.isRegExp(n))return n.test(t)}}function jb(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(t,r,n)=>r.toUpperCase()+n)}function _b(e,t){const r=E.toCamelCase(" "+t);["get","set","has"].forEach(n=>{Object.defineProperty(e,n+r,{value:function(i,o,a){return this[n].call(this,t,i,o,a)},configurable:!0})})}let We=class{constructor(t){t&&this.set(t)}set(t,r,n){const i=this;function o(l,u,s){const d=In(u);if(!d)throw new Error("header name must be a non-empty string");const c=E.findKey(i,d);(!c||i[c]===void 0||s===!0||s===void 0&&i[c]!==!1)&&(i[c||u]=So(l))}const a=(l,u)=>E.forEach(l,(s,d)=>o(s,d,u));if(E.isPlainObject(t)||t instanceof this.constructor)a(t,r);else if(E.isString(t)&&(t=t.trim())&&!Ub(t))a(Fb(t),r);else if(E.isObject(t)&&E.isIterable(t)){let l={},u,s;for(const d of t){if(!E.isArray(d))throw TypeError("Object iterator must return a key-value pair");l[s=d[0]]=(u=l[s])?E.isArray(u)?[...u,d[1]]:[u,d[1]]:d[1]}a(l,r)}else t!=null&&o(r,t,n);return this}get(t,r){if(t=In(t),t){const n=E.findKey(this,t);if(n){const i=this[n];if(!r)return i;if(r===!0)return zb(i);if(E.isFunction(r))return r.call(this,i,n);if(E.isRegExp(r))return r.exec(i);throw new TypeError("parser must be boolean|regexp|function")}}}has(t,r){if(t=In(t),t){const n=E.findKey(this,t);return!!(n&&this[n]!==void 0&&(!r||Tl(this,this[n],n,r)))}return!1}delete(t,r){const n=this;let i=!1;function o(a){if(a=In(a),a){const l=E.findKey(n,a);l&&(!r||Tl(n,n[l],l,r))&&(delete n[l],i=!0)}}return E.isArray(t)?t.forEach(o):o(t),i}clear(t){const r=Object.keys(this);let n=r.length,i=!1;for(;n--;){const o=r[n];(!t||Tl(this,this[o],o,t,!0))&&(delete this[o],i=!0)}return i}normalize(t){const r=this,n={};return E.forEach(this,(i,o)=>{const a=E.findKey(n,o);if(a){r[a]=So(i),delete r[o];return}const l=t?jb(o):String(o).trim();l!==o&&delete r[o],r[l]=So(i),n[l]=!0}),this}concat(...t){return this.constructor.concat(this,...t)}toJSON(t){const r=Object.create(null);return E.forEach(this,(n,i)=>{n!=null&&n!==!1&&(r[i]=t&&E.isArray(n)?n.join(", "):n)}),r}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([t,r])=>t+": "+r).join(` +`)}getSetCookie(){return this.get("set-cookie")||[]}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(t){return t instanceof this?t:new this(t)}static concat(t,...r){const n=new this(t);return r.forEach(i=>n.set(i)),n}static accessor(t){const n=(this[yf]=this[yf]={accessors:{}}).accessors,i=this.prototype;function o(a){const l=In(a);n[l]||(_b(i,a),n[l]=!0)}return E.isArray(t)?t.forEach(o):o(t),this}};We.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);E.reduceDescriptors(We.prototype,({value:e},t)=>{let r=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(n){this[r]=n}}});E.freezeMethods(We);function kl(e,t){const r=this||Ai,n=t||r,i=We.from(n.headers);let o=n.data;return E.forEach(e,function(l){o=l.call(r,o,i.normalize(),t?t.status:void 0)}),i.normalize(),o}function Sm(e){return!!(e&&e.__CANCEL__)}let Li=class extends F{constructor(t,r,n){super(t??"canceled",F.ERR_CANCELED,r,n),this.name="CanceledError",this.__CANCEL__=!0}};function Em(e,t,r){const n=r.config.validateStatus;!r.status||!n||n(r.status)?e(r):t(new F("Request failed with status code "+r.status,[F.ERR_BAD_REQUEST,F.ERR_BAD_RESPONSE][Math.floor(r.status/100)-4],r.config,r.request,r))}function $b(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}function Wb(e,t){e=e||10;const r=new Array(e),n=new Array(e);let i=0,o=0,a;return t=t!==void 0?t:1e3,function(u){const s=Date.now(),d=n[o];a||(a=s),r[i]=u,n[i]=s;let c=o,f=0;for(;c!==i;)f+=r[c++],c=c%e;if(i=(i+1)%e,i===o&&(o=(o+1)%e),s-a{r=d,i=null,o&&(clearTimeout(o),o=null),e(...s)};return[(...s)=>{const d=Date.now(),c=d-r;c>=n?a(s,d):(i=s,o||(o=setTimeout(()=>{o=null,a(i)},n-c)))},()=>i&&a(i)]}const ta=(e,t,r=3)=>{let n=0;const i=Wb(50,250);return Hb(o=>{const a=o.loaded,l=o.lengthComputable?o.total:void 0,u=a-n,s=i(u),d=a<=l;n=a;const c={loaded:a,total:l,progress:l?a/l:void 0,bytes:u,rate:s||void 0,estimated:s&&l&&d?(l-a)/s:void 0,event:o,lengthComputable:l!=null,[t?"download":"upload"]:!0};e(c)},r)},wf=(e,t)=>{const r=e!=null;return[n=>t[0]({lengthComputable:r,total:e,loaded:n}),t[1]]},Sf=e=>(...t)=>E.asap(()=>e(...t)),Gb=Ie.hasStandardBrowserEnv?((e,t)=>r=>(r=new URL(r,Ie.origin),e.protocol===r.protocol&&e.host===r.host&&(t||e.port===r.port)))(new URL(Ie.origin),Ie.navigator&&/(msie|trident)/i.test(Ie.navigator.userAgent)):()=>!0,Vb=Ie.hasStandardBrowserEnv?{write(e,t,r,n,i,o,a){if(typeof document>"u")return;const l=[`${e}=${encodeURIComponent(t)}`];E.isNumber(r)&&l.push(`expires=${new Date(r).toUTCString()}`),E.isString(n)&&l.push(`path=${n}`),E.isString(i)&&l.push(`domain=${i}`),o===!0&&l.push("secure"),E.isString(a)&&l.push(`SameSite=${a}`),document.cookie=l.join("; ")},read(e){if(typeof document>"u")return null;const t=document.cookie.match(new RegExp("(?:^|; )"+e+"=([^;]*)"));return t?decodeURIComponent(t[1]):null},remove(e){this.write(e,"",Date.now()-864e5,"/")}}:{write(){},read(){return null},remove(){}};function qb(e){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)}function Kb(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e}function xm(e,t,r){let n=!qb(t);return e&&(n||r==!1)?Kb(e,t):t}const Ef=e=>e instanceof We?{...e}:e;function Pr(e,t){t=t||{};const r={};function n(s,d,c,f){return E.isPlainObject(s)&&E.isPlainObject(d)?E.merge.call({caseless:f},s,d):E.isPlainObject(d)?E.merge({},d):E.isArray(d)?d.slice():d}function i(s,d,c,f){if(E.isUndefined(d)){if(!E.isUndefined(s))return n(void 0,s,c,f)}else return n(s,d,c,f)}function o(s,d){if(!E.isUndefined(d))return n(void 0,d)}function a(s,d){if(E.isUndefined(d)){if(!E.isUndefined(s))return n(void 0,s)}else return n(void 0,d)}function l(s,d,c){if(c in t)return n(s,d);if(c in e)return n(void 0,s)}const u={url:o,method:o,data:o,baseURL:a,transformRequest:a,transformResponse:a,paramsSerializer:a,timeout:a,timeoutMessage:a,withCredentials:a,withXSRFToken:a,adapter:a,responseType:a,xsrfCookieName:a,xsrfHeaderName:a,onUploadProgress:a,onDownloadProgress:a,decompress:a,maxContentLength:a,maxBodyLength:a,beforeRedirect:a,transport:a,httpAgent:a,httpsAgent:a,cancelToken:a,socketPath:a,responseEncoding:a,validateStatus:l,headers:(s,d,c)=>i(Ef(s),Ef(d),c,!0)};return E.forEach(Object.keys({...e,...t}),function(d){const c=u[d]||i,f=c(e[d],t[d],d);E.isUndefined(f)&&c!==l||(r[d]=f)}),r}const bm=e=>{const t=Pr({},e);let{data:r,withXSRFToken:n,xsrfHeaderName:i,xsrfCookieName:o,headers:a,auth:l}=t;if(t.headers=a=We.from(a),t.url=hm(xm(t.baseURL,t.url,t.allowAbsoluteUrls),e.params,e.paramsSerializer),l&&a.set("Authorization","Basic "+btoa((l.username||"")+":"+(l.password?unescape(encodeURIComponent(l.password)):""))),E.isFormData(r)){if(Ie.hasStandardBrowserEnv||Ie.hasStandardBrowserWebWorkerEnv)a.setContentType(void 0);else if(E.isFunction(r.getHeaders)){const u=r.getHeaders(),s=["content-type","content-length"];Object.entries(u).forEach(([d,c])=>{s.includes(d.toLowerCase())&&a.set(d,c)})}}if(Ie.hasStandardBrowserEnv&&(n&&E.isFunction(n)&&(n=n(t)),n||n!==!1&&Gb(t.url))){const u=i&&o&&Vb.read(o);u&&a.set(i,u)}return t},Qb=typeof XMLHttpRequest<"u",Yb=Qb&&function(e){return new Promise(function(r,n){const i=bm(e);let o=i.data;const a=We.from(i.headers).normalize();let{responseType:l,onUploadProgress:u,onDownloadProgress:s}=i,d,c,f,p,v;function y(){p&&p(),v&&v(),i.cancelToken&&i.cancelToken.unsubscribe(d),i.signal&&i.signal.removeEventListener("abort",d)}let w=new XMLHttpRequest;w.open(i.method.toUpperCase(),i.url,!0),w.timeout=i.timeout;function m(){if(!w)return;const h=We.from("getAllResponseHeaders"in w&&w.getAllResponseHeaders()),x={data:!l||l==="text"||l==="json"?w.responseText:w.response,status:w.status,statusText:w.statusText,headers:h,config:e,request:w};Em(function(C){r(C),y()},function(C){n(C),y()},x),w=null}"onloadend"in w?w.onloadend=m:w.onreadystatechange=function(){!w||w.readyState!==4||w.status===0&&!(w.responseURL&&w.responseURL.indexOf("file:")===0)||setTimeout(m)},w.onabort=function(){w&&(n(new F("Request aborted",F.ECONNABORTED,e,w)),w=null)},w.onerror=function(S){const x=S&&S.message?S.message:"Network Error",b=new F(x,F.ERR_NETWORK,e,w);b.event=S||null,n(b),w=null},w.ontimeout=function(){let S=i.timeout?"timeout of "+i.timeout+"ms exceeded":"timeout exceeded";const x=i.transitional||ym;i.timeoutErrorMessage&&(S=i.timeoutErrorMessage),n(new F(S,x.clarifyTimeoutError?F.ETIMEDOUT:F.ECONNABORTED,e,w)),w=null},o===void 0&&a.setContentType(null),"setRequestHeader"in w&&E.forEach(a.toJSON(),function(S,x){w.setRequestHeader(x,S)}),E.isUndefined(i.withCredentials)||(w.withCredentials=!!i.withCredentials),l&&l!=="json"&&(w.responseType=i.responseType),s&&([f,v]=ta(s,!0),w.addEventListener("progress",f)),u&&w.upload&&([c,p]=ta(u),w.upload.addEventListener("progress",c),w.upload.addEventListener("loadend",p)),(i.cancelToken||i.signal)&&(d=h=>{w&&(n(!h||h.type?new Li(null,e,w):h),w.abort(),w=null)},i.cancelToken&&i.cancelToken.subscribe(d),i.signal&&(i.signal.aborted?d():i.signal.addEventListener("abort",d)));const g=$b(i.url);if(g&&Ie.protocols.indexOf(g)===-1){n(new F("Unsupported protocol "+g+":",F.ERR_BAD_REQUEST,e));return}w.send(o||null)})},Xb=(e,t)=>{const{length:r}=e=e?e.filter(Boolean):[];if(t||r){let n=new AbortController,i;const o=function(s){if(!i){i=!0,l();const d=s instanceof Error?s:this.reason;n.abort(d instanceof F?d:new Li(d instanceof Error?d.message:d))}};let a=t&&setTimeout(()=>{a=null,o(new F(`timeout of ${t}ms exceeded`,F.ETIMEDOUT))},t);const l=()=>{e&&(a&&clearTimeout(a),a=null,e.forEach(s=>{s.unsubscribe?s.unsubscribe(o):s.removeEventListener("abort",o)}),e=null)};e.forEach(s=>s.addEventListener("abort",o));const{signal:u}=n;return u.unsubscribe=()=>E.asap(l),u}},Jb=function*(e,t){let r=e.byteLength;if(r{const i=Zb(e,t);let o=0,a,l=u=>{a||(a=!0,n&&n(u))};return new ReadableStream({async pull(u){try{const{done:s,value:d}=await i.next();if(s){l(),u.close();return}let c=d.byteLength;if(r){let f=o+=c;r(f)}u.enqueue(new Uint8Array(d))}catch(s){throw l(s),s}},cancel(u){return l(u),i.return()}},{highWaterMark:2})},bf=64*1024,{isFunction:io}=E,tC=(({Request:e,Response:t})=>({Request:e,Response:t}))(E.global),{ReadableStream:Cf,TextEncoder:Df}=E.global,Pf=(e,...t)=>{try{return!!e(...t)}catch{return!1}},rC=e=>{e=E.merge.call({skipUndefined:!0},tC,e);const{fetch:t,Request:r,Response:n}=e,i=t?io(t):typeof fetch=="function",o=io(r),a=io(n);if(!i)return!1;const l=i&&io(Cf),u=i&&(typeof Df=="function"?(v=>y=>v.encode(y))(new Df):async v=>new Uint8Array(await new r(v).arrayBuffer())),s=o&&l&&Pf(()=>{let v=!1;const y=new r(Ie.origin,{body:new Cf,method:"POST",get duplex(){return v=!0,"half"}}).headers.has("Content-Type");return v&&!y}),d=a&&l&&Pf(()=>E.isReadableStream(new n("").body)),c={stream:d&&(v=>v.body)};i&&["text","arrayBuffer","blob","formData","stream"].forEach(v=>{!c[v]&&(c[v]=(y,w)=>{let m=y&&y[v];if(m)return m.call(y);throw new F(`Response type '${v}' is not supported`,F.ERR_NOT_SUPPORT,w)})});const f=async v=>{if(v==null)return 0;if(E.isBlob(v))return v.size;if(E.isSpecCompliantForm(v))return(await new r(Ie.origin,{method:"POST",body:v}).arrayBuffer()).byteLength;if(E.isArrayBufferView(v)||E.isArrayBuffer(v))return v.byteLength;if(E.isURLSearchParams(v)&&(v=v+""),E.isString(v))return(await u(v)).byteLength},p=async(v,y)=>{const w=E.toFiniteNumber(v.getContentLength());return w??f(y)};return async v=>{let{url:y,method:w,data:m,signal:g,cancelToken:h,timeout:S,onDownloadProgress:x,onUploadProgress:b,responseType:C,headers:I,withCredentials:k="same-origin",fetchOptions:T}=bm(v),z=t||fetch;C=C?(C+"").toLowerCase():"text";let re=Xb([g,h&&h.toAbortSignal()],S),ee=null;const G=re&&re.unsubscribe&&(()=>{re.unsubscribe()});let he;try{if(b&&s&&w!=="get"&&w!=="head"&&(he=await p(I,m))!==0){let _=new r(y,{method:"POST",body:m,duplex:"half"}),j;if(E.isFormData(m)&&(j=_.headers.get("content-type"))&&I.setContentType(j),_.body){const[Be,ye]=wf(he,ta(Sf(b)));m=xf(_.body,bf,Be,ye)}}E.isString(k)||(k=k?"include":"omit");const K=o&&"credentials"in r.prototype,He={...T,signal:re,method:w.toUpperCase(),headers:I.normalize().toJSON(),body:m,duplex:"half",credentials:K?k:void 0};ee=o&&new r(y,He);let R=await(o?z(ee,T):z(y,He));const B=d&&(C==="stream"||C==="response");if(d&&(x||B&&G)){const _={};["status","statusText","headers"].forEach(Oe=>{_[Oe]=R[Oe]});const j=E.toFiniteNumber(R.headers.get("content-length")),[Be,ye]=x&&wf(j,ta(Sf(x),!0))||[];R=new n(xf(R.body,bf,Be,()=>{ye&&ye(),G&&G()}),_)}C=C||"text";let L=await c[E.findKey(c,C)||"text"](R,v);return!B&&G&&G(),await new Promise((_,j)=>{Em(_,j,{data:L,headers:We.from(R.headers),status:R.status,statusText:R.statusText,config:v,request:ee})})}catch(K){throw G&&G(),K&&K.name==="TypeError"&&/Load failed|fetch/i.test(K.message)?Object.assign(new F("Network Error",F.ERR_NETWORK,v,ee),{cause:K.cause||K}):F.from(K,K&&K.code,v,ee)}}},nC=new Map,Cm=e=>{let t=e&&e.env||{};const{fetch:r,Request:n,Response:i}=t,o=[n,i,r];let a=o.length,l=a,u,s,d=nC;for(;l--;)u=o[l],s=d.get(u),s===void 0&&d.set(u,s=l?new Map:rC(t)),d=s;return s};Cm();const fc={http:Sb,xhr:Yb,fetch:{get:Cm}};E.forEach(fc,(e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch{}Object.defineProperty(e,"adapterName",{value:t})}});const If=e=>`- ${e}`,iC=e=>E.isFunction(e)||e===null||e===!1;function oC(e,t){e=E.isArray(e)?e:[e];const{length:r}=e;let n,i;const o={};for(let a=0;a`adapter ${u} `+(s===!1?"is not supported by the environment":"is not available in the build"));let l=r?a.length>1?`since : +`+a.map(If).join(` +`):" "+If(a[0]):"as no adapter specified";throw new F("There is no suitable adapter to dispatch the request "+l,"ERR_NOT_SUPPORT")}return i}const Dm={getAdapter:oC,adapters:fc};function Al(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new Li(null,e)}function Rf(e){return Al(e),e.headers=We.from(e.headers),e.data=kl.call(e,e.transformRequest),["post","put","patch"].indexOf(e.method)!==-1&&e.headers.setContentType("application/x-www-form-urlencoded",!1),Dm.getAdapter(e.adapter||Ai.adapter,e)(e).then(function(n){return Al(e),n.data=kl.call(e,e.transformResponse,n),n.headers=We.from(n.headers),n},function(n){return Sm(n)||(Al(e),n&&n.response&&(n.response.data=kl.call(e,e.transformResponse,n.response),n.response.headers=We.from(n.response.headers))),Promise.reject(n)})}const Pm="1.13.4",_a={};["object","boolean","number","function","string","symbol"].forEach((e,t)=>{_a[e]=function(n){return typeof n===e||"a"+(t<1?"n ":" ")+e}});const Of={};_a.transitional=function(t,r,n){function i(o,a){return"[Axios v"+Pm+"] Transitional option '"+o+"'"+a+(n?". "+n:"")}return(o,a,l)=>{if(t===!1)throw new F(i(a," has been removed"+(r?" in "+r:"")),F.ERR_DEPRECATED);return r&&!Of[a]&&(Of[a]=!0,console.warn(i(a," has been deprecated since v"+r+" and will be removed in the near future"))),t?t(o,a,l):!0}};_a.spelling=function(t){return(r,n)=>(console.warn(`${n} is likely a misspelling of ${t}`),!0)};function aC(e,t,r){if(typeof e!="object")throw new F("options must be an object",F.ERR_BAD_OPTION_VALUE);const n=Object.keys(e);let i=n.length;for(;i-- >0;){const o=n[i],a=t[o];if(a){const l=e[o],u=l===void 0||a(l,o,e);if(u!==!0)throw new F("option "+o+" must be "+u,F.ERR_BAD_OPTION_VALUE);continue}if(r!==!0)throw new F("Unknown option "+o,F.ERR_BAD_OPTION)}}const Eo={assertOptions:aC,validators:_a},xt=Eo.validators;let wr=class{constructor(t){this.defaults=t||{},this.interceptors={request:new hf,response:new hf}}async request(t,r){try{return await this._request(t,r)}catch(n){if(n instanceof Error){let i={};Error.captureStackTrace?Error.captureStackTrace(i):i=new Error;const o=i.stack?i.stack.replace(/^.+\n/,""):"";try{n.stack?o&&!String(n.stack).endsWith(o.replace(/^.+\n.+\n/,""))&&(n.stack+=` +`+o):n.stack=o}catch{}}throw n}}_request(t,r){typeof t=="string"?(r=r||{},r.url=t):r=t||{},r=Pr(this.defaults,r);const{transitional:n,paramsSerializer:i,headers:o}=r;n!==void 0&&Eo.assertOptions(n,{silentJSONParsing:xt.transitional(xt.boolean),forcedJSONParsing:xt.transitional(xt.boolean),clarifyTimeoutError:xt.transitional(xt.boolean)},!1),i!=null&&(E.isFunction(i)?r.paramsSerializer={serialize:i}:Eo.assertOptions(i,{encode:xt.function,serialize:xt.function},!0)),r.allowAbsoluteUrls!==void 0||(this.defaults.allowAbsoluteUrls!==void 0?r.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:r.allowAbsoluteUrls=!0),Eo.assertOptions(r,{baseUrl:xt.spelling("baseURL"),withXsrfToken:xt.spelling("withXSRFToken")},!0),r.method=(r.method||this.defaults.method||"get").toLowerCase();let a=o&&E.merge(o.common,o[r.method]);o&&E.forEach(["delete","get","head","post","put","patch","common"],v=>{delete o[v]}),r.headers=We.concat(a,o);const l=[];let u=!0;this.interceptors.request.forEach(function(y){typeof y.runWhen=="function"&&y.runWhen(r)===!1||(u=u&&y.synchronous,l.unshift(y.fulfilled,y.rejected))});const s=[];this.interceptors.response.forEach(function(y){s.push(y.fulfilled,y.rejected)});let d,c=0,f;if(!u){const v=[Rf.bind(this),void 0];for(v.unshift(...l),v.push(...s),f=v.length,d=Promise.resolve(r);c{if(!n._listeners)return;let o=n._listeners.length;for(;o-- >0;)n._listeners[o](i);n._listeners=null}),this.promise.then=i=>{let o;const a=new Promise(l=>{n.subscribe(l),o=l}).then(i);return a.cancel=function(){n.unsubscribe(o)},a},t(function(o,a,l){n.reason||(n.reason=new Li(o,a,l),r(n.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(t){if(this.reason){t(this.reason);return}this._listeners?this._listeners.push(t):this._listeners=[t]}unsubscribe(t){if(!this._listeners)return;const r=this._listeners.indexOf(t);r!==-1&&this._listeners.splice(r,1)}toAbortSignal(){const t=new AbortController,r=n=>{t.abort(n)};return this.subscribe(r),t.signal.unsubscribe=()=>this.unsubscribe(r),t.signal}static source(){let t;return{token:new Im(function(i){t=i}),cancel:t}}};function uC(e){return function(r){return e.apply(null,r)}}function sC(e){return E.isObject(e)&&e.isAxiosError===!0}const Fu={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511,WebServerIsDown:521,ConnectionTimedOut:522,OriginIsUnreachable:523,TimeoutOccurred:524,SslHandshakeFailed:525,InvalidSslCertificate:526};Object.entries(Fu).forEach(([e,t])=>{Fu[t]=e});function Rm(e){const t=new wr(e),r=am(wr.prototype.request,t);return E.extend(r,wr.prototype,t,{allOwnKeys:!0}),E.extend(r,t,null,{allOwnKeys:!0}),r.create=function(i){return Rm(Pr(e,i))},r}const ue=Rm(Ai);ue.Axios=wr;ue.CanceledError=Li;ue.CancelToken=lC;ue.isCancel=Sm;ue.VERSION=Pm;ue.toFormData=ja;ue.AxiosError=F;ue.Cancel=ue.CanceledError;ue.all=function(t){return Promise.all(t)};ue.spread=uC;ue.isAxiosError=sC;ue.mergeConfig=Pr;ue.AxiosHeaders=We;ue.formToJSON=e=>wm(E.isHTMLForm(e)?new FormData(e):e);ue.getAdapter=Dm.getAdapter;ue.HttpStatusCode=Fu;ue.default=ue;const{Axios:hC,AxiosError:yC,CanceledError:wC,isCancel:SC,CancelToken:EC,VERSION:xC,all:bC,Cancel:CC,isAxiosError:DC,spread:PC,toFormData:IC,AxiosHeaders:RC,HttpStatusCode:OC,formToJSON:NC,getAdapter:TC,mergeConfig:kC}=ue,cC="/api/focustasks",Rn=ue.create({baseURL:cC,headers:{"Content-Type":"application/json"}}),On={getTasks:async()=>{const{data:e}=await Rn.get("");return e},createTask:async e=>{const{data:t}=await Rn.post("",e);return t},updateTask:async(e,t)=>{const{data:r}=await Rn.put(`/${e}`,t);return r},deleteTask:async e=>{await Rn.delete(`/${e}`)},reorderTasks:async e=>{const{data:t}=await Rn.put("/reorder",{orders:e});return t}},dC=({task:e,onUpdate:t,onDelete:r})=>{const[n,i]=O.useState(!1),[o,a]=O.useState(e.title),[l,u]=O.useState(e.description||""),s=()=>{o.trim()&&(t(o,l),i(!1))},d=()=>{a(e.title),u(e.description||""),i(!1)};return n?U.jsx("div",{className:"task-card editing",children:U.jsxs("div",{className:"edit-form",children:[U.jsx("input",{type:"text",value:o,onChange:c=>a(c.target.value),className:"edit-input",autoFocus:!0}),U.jsx("textarea",{value:l,onChange:c=>u(c.target.value),className:"edit-textarea",rows:3}),U.jsxs("div",{className:"edit-actions",children:[U.jsx("button",{className:"btn-save",onClick:s,children:"✓ Speichern"}),U.jsx("button",{className:"btn-cancel",onClick:d,children:"✗ Abbrechen"})]})]})}):U.jsxs("div",{className:"task-card",children:[U.jsx("div",{className:"task-handle",children:"⋮⋮"}),U.jsxs("div",{className:"task-content",children:[U.jsx("h3",{className:"task-title",children:e.title}),e.description&&U.jsx("p",{className:"task-description",children:e.description}),U.jsx("div",{className:"task-meta",children:U.jsx("span",{className:"task-date",children:new Date(e.updatedAt).toLocaleDateString("de-DE",{year:"numeric",month:"short",day:"numeric"})})})]}),U.jsxs("div",{className:"task-actions",children:[U.jsx("button",{className:"btn-edit",onClick:()=>i(!0),title:"Bearbeiten",children:"✎"}),U.jsx("button",{className:"btn-delete",onClick:r,title:"Löschen",children:"✕"})]})]})},fC=({onAdd:e})=>{const[t,r]=O.useState(""),[n,i]=O.useState(""),[o,a]=O.useState(!1),l=u=>{u.preventDefault(),t.trim()&&(e(t,n),r(""),i(""),a(!1))};return U.jsxs("form",{className:"task-form",onSubmit:l,children:[U.jsx("input",{type:"text",placeholder:"Neuen Fokus-Task hinzufügen...",value:t,onChange:u=>r(u.target.value),onFocus:()=>a(!0),className:"task-input"}),o&&U.jsxs("div",{className:"form-expanded",children:[U.jsx("textarea",{placeholder:"Optionale Notiz (z.B. Gedanken, Checkliste, Status)",value:n,onChange:u=>i(u.target.value),className:"description-input",rows:3}),U.jsxs("div",{className:"form-actions",children:[U.jsx("button",{type:"submit",className:"btn btn-primary",children:"➕ Hinzufügen"}),U.jsx("button",{type:"button",className:"btn btn-secondary",onClick:()=>{a(!1),i("")},children:"Abbrechen"})]})]})]})},pC=()=>{const[e,t]=O.useState([]),[r,n]=O.useState(!0),[i,o]=O.useState(null);O.useEffect(()=>{a()},[]);const a=async()=>{try{n(!0);const c=await On.getTasks();t(c),o(null)}catch(c){o("Failed to load tasks"),console.error(c)}finally{n(!1)}},l=async(c,f)=>{try{const p=await On.createTask({title:c,description:f});t([p,...e])}catch(p){o("Failed to create task"),console.error(p)}},u=async(c,f,p)=>{try{const v=await On.updateTask(c,{title:f,description:p});t(e.map(y=>y.id===c?v:y))}catch(v){o("Failed to update task"),console.error(v)}},s=async c=>{try{await On.deleteTask(c),t(e.filter(f=>f.id!==c))}catch(f){o("Failed to delete task"),console.error(f)}},d=async c=>{const{source:f,destination:p}=c;if(!p||f.index===p.index)return;const v=Array.from(e),[y]=v.splice(f.index,1);v.splice(p.index,0,y),t(v);try{const w=v.map((m,g)=>({id:m.id,order:g+1}));await On.reorderTasks(w)}catch(w){o("Failed to reorder tasks"),console.error(w),a()}};return U.jsx("div",{className:"app",children:U.jsxs("div",{className:"container",children:[U.jsxs("header",{className:"header",children:[U.jsx("h1",{children:"🎯 Focus Tasks"}),U.jsx("p",{children:"Deine aktiven Schwerpunkte für die nächsten 2-3 Wochen"})]}),i&&U.jsx("div",{className:"error-message",children:i}),U.jsx(fC,{onAdd:l}),r?U.jsx("div",{className:"loading",children:"Lade Tasks..."}):e.length===0?U.jsx("div",{className:"empty-state",children:U.jsx("p",{children:"Keine Tasks vorhanden. Füge einen neuen Task hinzu!"})}):U.jsx(Vx,{onDragEnd:d,children:U.jsx(om,{droppableId:"tasks",children:(c,f)=>U.jsxs("div",{className:`tasks-list ${f.isDraggingOver?"dragging":""}`,...c.droppableProps,ref:c.innerRef,children:[e.map((p,v)=>U.jsx(O1,{draggableId:p.id.toString(),index:v,children:(y,w)=>U.jsx("div",{ref:y.innerRef,...y.draggableProps,...y.dragHandleProps,className:w.isDragging?"dragging":"",children:U.jsx(dC,{task:p,onUpdate:(m,g)=>u(p.id,m,g),onDelete:()=>s(p.id)})})},p.id)),c.placeholder]})})})]})})};Ll.createRoot(document.getElementById("root")).render(U.jsx(Y.StrictMode,{children:U.jsx(pC,{})})); diff --git a/client/build/assets/index-DjQQ8_vC.css b/client/build/assets/index-DjQQ8_vC.css new file mode 100644 index 0000000..82b91ca --- /dev/null +++ b/client/build/assets/index-DjQQ8_vC.css @@ -0,0 +1 @@ +:root{--color-white: rgba(255, 255, 255, 1);--color-black: rgba(0, 0, 0, 1);--color-cream-50: rgba(252, 252, 249, 1);--color-cream-100: rgba(255, 255, 253, 1);--color-gray-200: rgba(245, 245, 245, 1);--color-gray-300: rgba(167, 169, 169, 1);--color-gray-400: rgba(119, 124, 124, 1);--color-slate-500: rgba(98, 108, 113, 1);--color-brown-600: rgba(94, 82, 64, 1);--color-charcoal-700: rgba(31, 33, 33, 1);--color-charcoal-800: rgba(38, 40, 40, 1);--color-slate-900: rgba(19, 52, 59, 1);--color-teal-300: rgba(50, 184, 198, 1);--color-teal-400: rgba(45, 166, 178, 1);--color-teal-500: rgba(33, 128, 141, 1);--color-teal-600: rgba(29, 116, 128, 1);--color-teal-700: rgba(26, 104, 115, 1);--color-teal-800: rgba(41, 150, 161, 1);--color-red-400: rgba(255, 84, 89, 1);--color-red-500: rgba(192, 21, 47, 1);--color-orange-400: rgba(230, 129, 97, 1);--color-orange-500: rgba(168, 75, 47, 1);--color-brown-600-rgb: 94, 82, 64;--color-teal-500-rgb: 33, 128, 141;--color-slate-900-rgb: 19, 52, 59;--color-slate-500-rgb: 98, 108, 113;--color-red-500-rgb: 192, 21, 47;--color-red-400-rgb: 255, 84, 89;--color-orange-500-rgb: 168, 75, 47;--color-orange-400-rgb: 230, 129, 97;--color-bg-1: rgba(59, 130, 246, .08);--color-bg-2: rgba(245, 158, 11, .08);--color-bg-3: rgba(34, 197, 94, .08);--color-bg-4: rgba(239, 68, 68, .08);--color-bg-5: rgba(147, 51, 234, .08);--color-bg-6: rgba(249, 115, 22, .08);--color-bg-7: rgba(236, 72, 153, .08);--color-bg-8: rgba(6, 182, 212, .08);--color-background: var(--color-cream-50);--color-surface: var(--color-cream-100);--color-text: var(--color-slate-900);--color-text-secondary: var(--color-slate-500);--color-primary: var(--color-teal-500);--color-primary-hover: var(--color-teal-600);--color-primary-active: var(--color-teal-700);--color-secondary: rgba(var(--color-brown-600-rgb), .12);--color-secondary-hover: rgba(var(--color-brown-600-rgb), .2);--color-secondary-active: rgba(var(--color-brown-600-rgb), .25);--color-border: rgba(var(--color-brown-600-rgb), .2);--color-btn-primary-text: var(--color-cream-50);--color-card-border: rgba(var(--color-brown-600-rgb), .12);--color-card-border-inner: rgba(var(--color-brown-600-rgb), .12);--color-error: var(--color-red-500);--color-success: var(--color-teal-500);--color-warning: var(--color-orange-500);--color-info: var(--color-slate-500);--color-focus-ring: rgba(var(--color-teal-500-rgb), .4);--color-select-caret: rgba(var(--color-slate-900-rgb), .8);--focus-ring: 0 0 0 3px var(--color-focus-ring);--focus-outline: 2px solid var(--color-primary);--status-bg-opacity: .15;--status-border-opacity: .25;--select-caret-light: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23134252' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");--select-caret-dark: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23f5f5f5' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");--color-success-rgb: 33, 128, 141;--color-error-rgb: 192, 21, 47;--color-warning-rgb: 168, 75, 47;--color-info-rgb: 98, 108, 113;--font-family-base: "FKGroteskNeue", "Geist", "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;--font-family-mono: "Berkeley Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;--font-size-xs: 11px;--font-size-sm: 12px;--font-size-base: 14px;--font-size-md: 14px;--font-size-lg: 16px;--font-size-xl: 18px;--font-size-2xl: 20px;--font-size-3xl: 24px;--font-size-4xl: 30px;--font-weight-normal: 400;--font-weight-medium: 500;--font-weight-semibold: 550;--font-weight-bold: 600;--line-height-tight: 1.2;--line-height-normal: 1.5;--letter-spacing-tight: -.01em;--space-0: 0;--space-1: 1px;--space-2: 2px;--space-4: 4px;--space-6: 6px;--space-8: 8px;--space-10: 10px;--space-12: 12px;--space-16: 16px;--space-20: 20px;--space-24: 24px;--space-32: 32px;--radius-sm: 6px;--radius-base: 8px;--radius-md: 10px;--radius-lg: 12px;--radius-full: 9999px;--shadow-xs: 0 1px 2px rgba(0, 0, 0, .02);--shadow-sm: 0 1px 3px rgba(0, 0, 0, .04), 0 1px 2px rgba(0, 0, 0, .02);--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, .04), 0 2px 4px -1px rgba(0, 0, 0, .02);--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, .04), 0 4px 6px -2px rgba(0, 0, 0, .02);--shadow-inset-sm: inset 0 1px 0 rgba(255, 255, 255, .15), inset 0 -1px 0 rgba(0, 0, 0, .03);--duration-fast: .15s;--duration-normal: .25s;--ease-standard: cubic-bezier(.16, 1, .3, 1);--container-sm: 640px;--container-md: 768px;--container-lg: 1024px;--container-xl: 1280px}@media (prefers-color-scheme: dark){:root{--color-gray-400-rgb: 119, 124, 124;--color-teal-300-rgb: 50, 184, 198;--color-gray-300-rgb: 167, 169, 169;--color-gray-200-rgb: 245, 245, 245;--color-bg-1: rgba(29, 78, 216, .15);--color-bg-2: rgba(180, 83, 9, .15);--color-bg-3: rgba(21, 128, 61, .15);--color-bg-4: rgba(185, 28, 28, .15);--color-bg-5: rgba(107, 33, 168, .15);--color-bg-6: rgba(194, 65, 12, .15);--color-bg-7: rgba(190, 24, 93, .15);--color-bg-8: rgba(8, 145, 178, .15);--color-background: var(--color-charcoal-700);--color-surface: var(--color-charcoal-800);--color-text: var(--color-gray-200);--color-text-secondary: rgba(var(--color-gray-300-rgb), .7);--color-primary: var(--color-teal-300);--color-primary-hover: var(--color-teal-400);--color-primary-active: var(--color-teal-800);--color-secondary: rgba(var(--color-gray-400-rgb), .15);--color-secondary-hover: rgba(var(--color-gray-400-rgb), .25);--color-secondary-active: rgba(var(--color-gray-400-rgb), .3);--color-border: rgba(var(--color-gray-400-rgb), .3);--color-error: var(--color-red-400);--color-success: var(--color-teal-300);--color-warning: var(--color-orange-400);--color-info: var(--color-gray-300);--color-focus-ring: rgba(var(--color-teal-300-rgb), .4);--color-btn-primary-text: var(--color-slate-900);--color-card-border: rgba(var(--color-gray-400-rgb), .2);--color-card-border-inner: rgba(var(--color-gray-400-rgb), .15);--shadow-inset-sm: inset 0 1px 0 rgba(255, 255, 255, .1), inset 0 -1px 0 rgba(0, 0, 0, .15);--button-border-secondary: rgba(var(--color-gray-400-rgb), .2);--color-border-secondary: rgba(var(--color-gray-400-rgb), .2);--color-select-caret: rgba(var(--color-gray-200-rgb), .8);--focus-ring: 0 0 0 3px var(--color-focus-ring);--focus-outline: 2px solid var(--color-primary);--status-bg-opacity: .15;--status-border-opacity: .25;--select-caret-light: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23134252' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");--select-caret-dark: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23f5f5f5' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");--color-success-rgb: var(--color-teal-300-rgb);--color-error-rgb: var(--color-red-400-rgb);--color-warning-rgb: var(--color-orange-400-rgb);--color-info-rgb: var(--color-gray-300-rgb)}}[data-color-scheme=dark]{--color-gray-400-rgb: 119, 124, 124;--color-teal-300-rgb: 50, 184, 198;--color-gray-300-rgb: 167, 169, 169;--color-gray-200-rgb: 245, 245, 245;--color-bg-1: rgba(29, 78, 216, .15);--color-bg-2: rgba(180, 83, 9, .15);--color-bg-3: rgba(21, 128, 61, .15);--color-bg-4: rgba(185, 28, 28, .15);--color-bg-5: rgba(107, 33, 168, .15);--color-bg-6: rgba(194, 65, 12, .15);--color-bg-7: rgba(190, 24, 93, .15);--color-bg-8: rgba(8, 145, 178, .15);--color-background: var(--color-charcoal-700);--color-surface: var(--color-charcoal-800);--color-text: var(--color-gray-200);--color-text-secondary: rgba(var(--color-gray-300-rgb), .7);--color-primary: var(--color-teal-300);--color-primary-hover: var(--color-teal-400);--color-primary-active: var(--color-teal-800);--color-secondary: rgba(var(--color-gray-400-rgb), .15);--color-secondary-hover: rgba(var(--color-gray-400-rgb), .25);--color-secondary-active: rgba(var(--color-gray-400-rgb), .3);--color-border: rgba(var(--color-gray-400-rgb), .3);--color-error: var(--color-red-400);--color-success: var(--color-teal-300);--color-warning: var(--color-orange-400);--color-info: var(--color-gray-300);--color-focus-ring: rgba(var(--color-teal-300-rgb), .4);--color-btn-primary-text: var(--color-slate-900);--color-card-border: rgba(var(--color-gray-400-rgb), .15);--color-card-border-inner: rgba(var(--color-gray-400-rgb), .15);--shadow-inset-sm: inset 0 1px 0 rgba(255, 255, 255, .1), inset 0 -1px 0 rgba(0, 0, 0, .15);--color-border-secondary: rgba(var(--color-gray-400-rgb), .2);--color-select-caret: rgba(var(--color-gray-200-rgb), .8);--focus-ring: 0 0 0 3px var(--color-focus-ring);--focus-outline: 2px solid var(--color-primary);--status-bg-opacity: .15;--status-border-opacity: .25;--select-caret-light: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23134252' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");--select-caret-dark: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23f5f5f5' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");--color-success-rgb: var(--color-teal-300-rgb);--color-error-rgb: var(--color-red-400-rgb);--color-warning-rgb: var(--color-orange-400-rgb);--color-info-rgb: var(--color-gray-300-rgb)}@font-face{font-family:FKGroteskNeue;src:url(https://r2cdn.perplexity.ai/fonts/FKGroteskNeue.woff2) format("woff2")}.task-card{background:var(--color-surface);border-radius:var(--radius-lg);padding:var(--space-16);margin-bottom:var(--space-12);display:flex;gap:var(--space-12);align-items:flex-start;box-shadow:var(--shadow-sm);border:1px solid var(--color-card-border);transition:all var(--duration-normal) var(--ease-standard);animation:fadeIn var(--duration-normal) var(--ease-standard)}@keyframes fadeIn{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}.task-card:hover{box-shadow:var(--shadow-md);transform:translateY(-2px)}.task-card.dragging{background:var(--color-secondary);opacity:.7}.task-card.editing{background:var(--color-surface);border:2px solid var(--color-primary)}.task-handle{color:var(--color-border);font-size:var(--font-size-xl);cursor:grab;-webkit-user-select:none;user-select:none;padding-top:var(--space-2);flex-shrink:0}.task-handle:active{cursor:grabbing}.task-content{flex:1;min-width:0}.task-title{margin:0 0 var(--space-6) 0;font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);color:var(--color-text);word-break:break-word;line-height:var(--line-height-tight)}.task-description{margin:0 0 var(--space-10) 0;font-size:var(--font-size-base);color:var(--color-text-secondary);line-height:var(--line-height-normal);word-break:break-word;white-space:pre-wrap}.task-meta{display:flex;gap:var(--space-12);align-items:center}.task-date{font-size:var(--font-size-sm);color:var(--color-text-secondary)}.task-actions{display:flex;gap:var(--space-6);flex-shrink:0;opacity:0;transition:opacity var(--duration-fast) var(--ease-standard)}.task-card:hover .task-actions{opacity:1}.btn-edit,.btn-delete{width:32px;height:32px;border:none;border-radius:var(--radius-base);cursor:pointer;font-size:var(--font-size-md);transition:all var(--duration-fast) var(--ease-standard);display:flex;align-items:center;justify-content:center;background:transparent}.btn-edit{color:var(--color-primary);background:rgba(var(--color-teal-500-rgb),.12)}.btn-edit:hover{background:rgba(var(--color-teal-500-rgb),.2)}.btn-edit:focus-visible{outline:var(--focus-outline);outline-offset:2px}.btn-delete{color:var(--color-error);background:rgba(var(--color-error-rgb),.12)}.btn-delete:hover{background:rgba(var(--color-error-rgb),.2)}.btn-delete:focus-visible{outline:var(--focus-outline);outline-offset:2px}.edit-form{display:flex;flex-direction:column;gap:var(--space-10);width:100%}.edit-input,.edit-textarea{padding:var(--space-10) var(--space-12);border:2px solid var(--color-primary);border-radius:var(--radius-base);font-family:var(--font-family-base);font-size:var(--font-size-base);color:var(--color-text);background-color:var(--color-surface);outline:none;transition:box-shadow var(--duration-fast) var(--ease-standard)}.edit-input:focus,.edit-textarea:focus{box-shadow:var(--focus-ring);outline:var(--focus-outline)}.edit-textarea{min-height:80px;resize:vertical}.edit-actions{display:flex;gap:var(--space-8)}.btn-save,.btn-cancel{flex:1;padding:var(--space-8) var(--space-12);border:none;border-radius:var(--radius-base);font-weight:var(--font-weight-semibold);cursor:pointer;transition:all var(--duration-fast) var(--ease-standard);font-size:var(--font-size-base)}.btn-save{background:var(--color-success);color:var(--color-btn-primary-text)}.btn-save:hover{background:rgba(var(--color-success-rgb),.85)}.btn-save:focus-visible{outline:var(--focus-outline);outline-offset:2px}.btn-cancel{background:var(--color-secondary);color:var(--color-text)}.btn-cancel:hover{background:var(--color-secondary-hover)}.btn-cancel:focus-visible{outline:var(--focus-outline);outline-offset:2px}@media (max-width: 480px){.task-card{padding:var(--space-12);gap:var(--space-8);margin-bottom:var(--space-8)}.task-handle{font-size:var(--font-size-lg)}.task-title{font-size:var(--font-size-md);margin:0 0 var(--space-4) 0}.task-description{font-size:var(--font-size-sm);margin:0 0 var(--space-8) 0}.task-meta{flex-wrap:wrap;gap:var(--space-8)}.task-date{font-size:var(--font-size-xs)}.task-actions{opacity:1;gap:var(--space-4)}.btn-edit,.btn-delete{width:28px;height:28px;font-size:var(--font-size-sm)}.edit-form{gap:var(--space-8)}.edit-input,.edit-textarea{padding:var(--space-8) var(--space-10);font-size:var(--font-size-sm)}.edit-actions{gap:var(--space-6)}.btn-save,.btn-cancel{padding:var(--space-8) var(--space-10);font-size:var(--font-size-sm)}}:root{--color-white: rgba(255, 255, 255, 1);--color-black: rgba(0, 0, 0, 1);--color-cream-50: rgba(252, 252, 249, 1);--color-cream-100: rgba(255, 255, 253, 1);--color-gray-200: rgba(245, 245, 245, 1);--color-gray-300: rgba(167, 169, 169, 1);--color-gray-400: rgba(119, 124, 124, 1);--color-slate-500: rgba(98, 108, 113, 1);--color-brown-600: rgba(94, 82, 64, 1);--color-charcoal-700: rgba(31, 33, 33, 1);--color-charcoal-800: rgba(38, 40, 40, 1);--color-slate-900: rgba(19, 52, 59, 1);--color-teal-300: rgba(50, 184, 198, 1);--color-teal-400: rgba(45, 166, 178, 1);--color-teal-500: rgba(33, 128, 141, 1);--color-teal-600: rgba(29, 116, 128, 1);--color-teal-700: rgba(26, 104, 115, 1);--color-teal-800: rgba(41, 150, 161, 1);--color-red-400: rgba(255, 84, 89, 1);--color-red-500: rgba(192, 21, 47, 1);--color-orange-400: rgba(230, 129, 97, 1);--color-orange-500: rgba(168, 75, 47, 1);--color-brown-600-rgb: 94, 82, 64;--color-teal-500-rgb: 33, 128, 141;--color-slate-900-rgb: 19, 52, 59;--color-slate-500-rgb: 98, 108, 113;--color-red-500-rgb: 192, 21, 47;--color-red-400-rgb: 255, 84, 89;--color-orange-500-rgb: 168, 75, 47;--color-orange-400-rgb: 230, 129, 97;--color-bg-1: rgba(59, 130, 246, .08);--color-bg-2: rgba(245, 158, 11, .08);--color-bg-3: rgba(34, 197, 94, .08);--color-bg-4: rgba(239, 68, 68, .08);--color-bg-5: rgba(147, 51, 234, .08);--color-bg-6: rgba(249, 115, 22, .08);--color-bg-7: rgba(236, 72, 153, .08);--color-bg-8: rgba(6, 182, 212, .08);--color-background: var(--color-cream-50);--color-surface: var(--color-cream-100);--color-text: var(--color-slate-900);--color-text-secondary: var(--color-slate-500);--color-primary: var(--color-teal-500);--color-primary-hover: var(--color-teal-600);--color-primary-active: var(--color-teal-700);--color-secondary: rgba(var(--color-brown-600-rgb), .12);--color-secondary-hover: rgba(var(--color-brown-600-rgb), .2);--color-secondary-active: rgba(var(--color-brown-600-rgb), .25);--color-border: rgba(var(--color-brown-600-rgb), .2);--color-btn-primary-text: var(--color-cream-50);--color-card-border: rgba(var(--color-brown-600-rgb), .12);--color-card-border-inner: rgba(var(--color-brown-600-rgb), .12);--color-error: var(--color-red-500);--color-success: var(--color-teal-500);--color-warning: var(--color-orange-500);--color-info: var(--color-slate-500);--color-focus-ring: rgba(var(--color-teal-500-rgb), .4);--color-select-caret: rgba(var(--color-slate-900-rgb), .8);--focus-ring: 0 0 0 3px var(--color-focus-ring);--focus-outline: 2px solid var(--color-primary);--status-bg-opacity: .15;--status-border-opacity: .25;--select-caret-light: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23134252' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");--select-caret-dark: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23f5f5f5' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");--color-success-rgb: 33, 128, 141;--color-error-rgb: 192, 21, 47;--color-warning-rgb: 168, 75, 47;--color-info-rgb: 98, 108, 113;--font-family-base: "FKGroteskNeue", "Geist", "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;--font-family-mono: "Berkeley Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;--font-size-xs: 11px;--font-size-sm: 12px;--font-size-base: 14px;--font-size-md: 14px;--font-size-lg: 16px;--font-size-xl: 18px;--font-size-2xl: 20px;--font-size-3xl: 24px;--font-size-4xl: 30px;--font-weight-normal: 400;--font-weight-medium: 500;--font-weight-semibold: 550;--font-weight-bold: 600;--line-height-tight: 1.2;--line-height-normal: 1.5;--letter-spacing-tight: -.01em;--space-0: 0;--space-1: 1px;--space-2: 2px;--space-4: 4px;--space-6: 6px;--space-8: 8px;--space-10: 10px;--space-12: 12px;--space-16: 16px;--space-20: 20px;--space-24: 24px;--space-32: 32px;--radius-sm: 6px;--radius-base: 8px;--radius-md: 10px;--radius-lg: 12px;--radius-full: 9999px;--shadow-xs: 0 1px 2px rgba(0, 0, 0, .02);--shadow-sm: 0 1px 3px rgba(0, 0, 0, .04), 0 1px 2px rgba(0, 0, 0, .02);--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, .04), 0 2px 4px -1px rgba(0, 0, 0, .02);--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, .04), 0 4px 6px -2px rgba(0, 0, 0, .02);--shadow-inset-sm: inset 0 1px 0 rgba(255, 255, 255, .15), inset 0 -1px 0 rgba(0, 0, 0, .03);--duration-fast: .15s;--duration-normal: .25s;--ease-standard: cubic-bezier(.16, 1, .3, 1);--container-sm: 640px;--container-md: 768px;--container-lg: 1024px;--container-xl: 1280px}@media (prefers-color-scheme: dark){:root{--color-gray-400-rgb: 119, 124, 124;--color-teal-300-rgb: 50, 184, 198;--color-gray-300-rgb: 167, 169, 169;--color-gray-200-rgb: 245, 245, 245;--color-bg-1: rgba(29, 78, 216, .15);--color-bg-2: rgba(180, 83, 9, .15);--color-bg-3: rgba(21, 128, 61, .15);--color-bg-4: rgba(185, 28, 28, .15);--color-bg-5: rgba(107, 33, 168, .15);--color-bg-6: rgba(194, 65, 12, .15);--color-bg-7: rgba(190, 24, 93, .15);--color-bg-8: rgba(8, 145, 178, .15);--color-background: var(--color-charcoal-700);--color-surface: var(--color-charcoal-800);--color-text: var(--color-gray-200);--color-text-secondary: rgba(var(--color-gray-300-rgb), .7);--color-primary: var(--color-teal-300);--color-primary-hover: var(--color-teal-400);--color-primary-active: var(--color-teal-800);--color-secondary: rgba(var(--color-gray-400-rgb), .15);--color-secondary-hover: rgba(var(--color-gray-400-rgb), .25);--color-secondary-active: rgba(var(--color-gray-400-rgb), .3);--color-border: rgba(var(--color-gray-400-rgb), .3);--color-error: var(--color-red-400);--color-success: var(--color-teal-300);--color-warning: var(--color-orange-400);--color-info: var(--color-gray-300);--color-focus-ring: rgba(var(--color-teal-300-rgb), .4);--color-btn-primary-text: var(--color-slate-900);--color-card-border: rgba(var(--color-gray-400-rgb), .2);--color-card-border-inner: rgba(var(--color-gray-400-rgb), .15);--shadow-inset-sm: inset 0 1px 0 rgba(255, 255, 255, .1), inset 0 -1px 0 rgba(0, 0, 0, .15);--button-border-secondary: rgba(var(--color-gray-400-rgb), .2);--color-border-secondary: rgba(var(--color-gray-400-rgb), .2);--color-select-caret: rgba(var(--color-gray-200-rgb), .8);--focus-ring: 0 0 0 3px var(--color-focus-ring);--focus-outline: 2px solid var(--color-primary);--status-bg-opacity: .15;--status-border-opacity: .25;--select-caret-light: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23134252' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");--select-caret-dark: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23f5f5f5' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");--color-success-rgb: var(--color-teal-300-rgb);--color-error-rgb: var(--color-red-400-rgb);--color-warning-rgb: var(--color-orange-400-rgb);--color-info-rgb: var(--color-gray-300-rgb)}}[data-color-scheme=dark]{--color-gray-400-rgb: 119, 124, 124;--color-teal-300-rgb: 50, 184, 198;--color-gray-300-rgb: 167, 169, 169;--color-gray-200-rgb: 245, 245, 245;--color-bg-1: rgba(29, 78, 216, .15);--color-bg-2: rgba(180, 83, 9, .15);--color-bg-3: rgba(21, 128, 61, .15);--color-bg-4: rgba(185, 28, 28, .15);--color-bg-5: rgba(107, 33, 168, .15);--color-bg-6: rgba(194, 65, 12, .15);--color-bg-7: rgba(190, 24, 93, .15);--color-bg-8: rgba(8, 145, 178, .15);--color-background: var(--color-charcoal-700);--color-surface: var(--color-charcoal-800);--color-text: var(--color-gray-200);--color-text-secondary: rgba(var(--color-gray-300-rgb), .7);--color-primary: var(--color-teal-300);--color-primary-hover: var(--color-teal-400);--color-primary-active: var(--color-teal-800);--color-secondary: rgba(var(--color-gray-400-rgb), .15);--color-secondary-hover: rgba(var(--color-gray-400-rgb), .25);--color-secondary-active: rgba(var(--color-gray-400-rgb), .3);--color-border: rgba(var(--color-gray-400-rgb), .3);--color-error: var(--color-red-400);--color-success: var(--color-teal-300);--color-warning: var(--color-orange-400);--color-info: var(--color-gray-300);--color-focus-ring: rgba(var(--color-teal-300-rgb), .4);--color-btn-primary-text: var(--color-slate-900);--color-card-border: rgba(var(--color-gray-400-rgb), .15);--color-card-border-inner: rgba(var(--color-gray-400-rgb), .15);--shadow-inset-sm: inset 0 1px 0 rgba(255, 255, 255, .1), inset 0 -1px 0 rgba(0, 0, 0, .15);--color-border-secondary: rgba(var(--color-gray-400-rgb), .2);--color-select-caret: rgba(var(--color-gray-200-rgb), .8);--focus-ring: 0 0 0 3px var(--color-focus-ring);--focus-outline: 2px solid var(--color-primary);--status-bg-opacity: .15;--status-border-opacity: .25;--select-caret-light: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23134252' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");--select-caret-dark: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23f5f5f5' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");--color-success-rgb: var(--color-teal-300-rgb);--color-error-rgb: var(--color-red-400-rgb);--color-warning-rgb: var(--color-orange-400-rgb);--color-info-rgb: var(--color-gray-300-rgb)}[data-color-scheme=light]{--color-brown-600-rgb: 94, 82, 64;--color-teal-500-rgb: 33, 128, 141;--color-slate-900-rgb: 19, 52, 59;--color-background: var(--color-cream-50);--color-surface: var(--color-cream-100);--color-text: var(--color-slate-900);--color-text-secondary: var(--color-slate-500);--color-primary: var(--color-teal-500);--color-primary-hover: var(--color-teal-600);--color-primary-active: var(--color-teal-700);--color-secondary: rgba(var(--color-brown-600-rgb), .12);--color-secondary-hover: rgba(var(--color-brown-600-rgb), .2);--color-secondary-active: rgba(var(--color-brown-600-rgb), .25);--color-border: rgba(var(--color-brown-600-rgb), .2);--color-btn-primary-text: var(--color-cream-50);--color-card-border: rgba(var(--color-brown-600-rgb), .12);--color-card-border-inner: rgba(var(--color-brown-600-rgb), .12);--color-error: var(--color-red-500);--color-success: var(--color-teal-500);--color-warning: var(--color-orange-500);--color-info: var(--color-slate-500);--color-focus-ring: rgba(var(--color-teal-500-rgb), .4);--color-success-rgb: var(--color-teal-500-rgb);--color-error-rgb: var(--color-red-500-rgb);--color-warning-rgb: var(--color-orange-500-rgb);--color-info-rgb: var(--color-slate-500-rgb)}html{font-size:var(--font-size-base);font-family:var(--font-family-base);line-height:var(--line-height-normal);color:var(--color-text);background-color:var(--color-background);-webkit-font-smoothing:antialiased;box-sizing:border-box}body{margin:0;padding:0}*,*:before,*:after{box-sizing:inherit}h1,h2,h3,h4,h5,h6{margin:0;font-weight:var(--font-weight-semibold);line-height:var(--line-height-tight);color:var(--color-text);letter-spacing:var(--letter-spacing-tight)}h1{font-size:var(--font-size-4xl)}h2{font-size:var(--font-size-3xl)}h3{font-size:var(--font-size-2xl)}h4{font-size:var(--font-size-xl)}h5{font-size:var(--font-size-lg)}h6{font-size:var(--font-size-md)}p{margin:0 0 var(--space-16) 0}a{color:var(--color-primary);text-decoration:none;transition:color var(--duration-fast) var(--ease-standard)}a:hover{color:var(--color-primary-hover)}code,pre{font-family:var(--font-family-mono);font-size:calc(var(--font-size-base) * .95);background-color:var(--color-secondary);border-radius:var(--radius-sm)}code{padding:var(--space-1) var(--space-4)}pre{padding:var(--space-16);margin:var(--space-16) 0;overflow:auto;border:1px solid var(--color-border)}pre code{background:none;padding:0}.btn{display:inline-flex;align-items:center;justify-content:center;padding:var(--space-8) var(--space-16);border-radius:var(--radius-base);font-size:var(--font-size-base);font-weight:500;line-height:1.5;cursor:pointer;transition:all var(--duration-normal) var(--ease-standard);border:none;text-decoration:none;position:relative}.btn--primary{background:var(--color-primary);color:var(--color-btn-primary-text)}.btn--primary:hover{background:var(--color-primary-hover)}.btn--primary:active{background:var(--color-primary-active)}.btn--secondary{background:var(--color-secondary);color:var(--color-text)}.btn--secondary:hover{background:var(--color-secondary-hover)}.btn--secondary:active{background:var(--color-secondary-active)}.btn--outline{background:transparent;border:1px solid var(--color-border);color:var(--color-text)}.btn--outline:hover{background:var(--color-secondary)}.btn--sm{padding:var(--space-4) var(--space-12);font-size:var(--font-size-sm);border-radius:var(--radius-sm)}.btn--lg{padding:var(--space-10) var(--space-20);font-size:var(--font-size-lg);border-radius:var(--radius-md)}.btn--full-width{width:100%}.btn:disabled{opacity:.5;cursor:not-allowed}.form-control{display:block;width:100%;padding:var(--space-8) var(--space-12);font-size:var(--font-size-md);line-height:1.5;color:var(--color-text);background-color:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-base);transition:border-color var(--duration-fast) var(--ease-standard),box-shadow var(--duration-fast) var(--ease-standard)}textarea.form-control{font-family:var(--font-family-base);font-size:var(--font-size-base)}select.form-control{padding:var(--space-8) var(--space-12);-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:var(--select-caret-light);background-repeat:no-repeat;background-position:right var(--space-12) center;background-size:16px;padding-right:var(--space-32)}@media (prefers-color-scheme: dark){select.form-control{background-image:var(--select-caret-dark)}}[data-color-scheme=dark] select.form-control{background-image:var(--select-caret-dark)}[data-color-scheme=light] select.form-control{background-image:var(--select-caret-light)}.form-control:focus{border-color:var(--color-primary);outline:var(--focus-outline)}.form-label{display:block;margin-bottom:var(--space-8);font-weight:var(--font-weight-medium);font-size:var(--font-size-sm)}.form-group{margin-bottom:var(--space-16)}.card{background-color:var(--color-surface);border-radius:var(--radius-lg);border:1px solid var(--color-card-border);box-shadow:var(--shadow-sm);overflow:hidden;transition:box-shadow var(--duration-normal) var(--ease-standard)}.card:hover{box-shadow:var(--shadow-md)}.card__body{padding:var(--space-16)}.card__header,.card__footer{padding:var(--space-16);border-bottom:1px solid var(--color-card-border-inner)}.status{display:inline-flex;align-items:center;padding:var(--space-6) var(--space-12);border-radius:var(--radius-full);font-weight:var(--font-weight-medium);font-size:var(--font-size-sm)}.status--success{background-color:rgba(var(--color-success-rgb, 33, 128, 141),var(--status-bg-opacity));color:var(--color-success);border:1px solid rgba(var(--color-success-rgb, 33, 128, 141),var(--status-border-opacity))}.status--error{background-color:rgba(var(--color-error-rgb, 192, 21, 47),var(--status-bg-opacity));color:var(--color-error);border:1px solid rgba(var(--color-error-rgb, 192, 21, 47),var(--status-border-opacity))}.status--warning{background-color:rgba(var(--color-warning-rgb, 168, 75, 47),var(--status-bg-opacity));color:var(--color-warning);border:1px solid rgba(var(--color-warning-rgb, 168, 75, 47),var(--status-border-opacity))}.status--info{background-color:rgba(var(--color-info-rgb, 98, 108, 113),var(--status-bg-opacity));color:var(--color-info);border:1px solid rgba(var(--color-info-rgb, 98, 108, 113),var(--status-border-opacity))}.container{width:100%;margin-right:auto;margin-left:auto;padding-right:var(--space-16);padding-left:var(--space-16)}@media (min-width: 640px){.container{max-width:var(--container-sm)}}@media (min-width: 768px){.container{max-width:var(--container-md)}}@media (min-width: 1024px){.container{max-width:var(--container-lg)}}@media (min-width: 1280px){.container{max-width:var(--container-xl)}}.flex{display:flex}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-4{gap:var(--space-4)}.gap-8{gap:var(--space-8)}.gap-16{gap:var(--space-16)}.m-0{margin:0}.mt-8{margin-top:var(--space-8)}.mb-8{margin-bottom:var(--space-8)}.mx-8{margin-left:var(--space-8);margin-right:var(--space-8)}.my-8{margin-top:var(--space-8);margin-bottom:var(--space-8)}.p-0{padding:0}.py-8{padding-top:var(--space-8);padding-bottom:var(--space-8)}.px-8{padding-left:var(--space-8);padding-right:var(--space-8)}.py-16{padding-top:var(--space-16);padding-bottom:var(--space-16)}.px-16{padding-left:var(--space-16);padding-right:var(--space-16)}.block{display:block}.hidden{display:none}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}:focus-visible{outline:var(--focus-outline);outline-offset:2px}[data-color-scheme=dark] .btn--outline{border:1px solid var(--color-border-secondary)}@font-face{font-family:FKGroteskNeue;src:url(https://r2cdn.perplexity.ai/fonts/FKGroteskNeue.woff2) format("woff2")}.task-form{background:var(--color-surface);border-radius:var(--radius-lg);padding:var(--space-16);margin-bottom:var(--space-32);box-shadow:var(--shadow-md);border:1px solid var(--color-card-border);animation:slideUp .4s var(--ease-standard)}@keyframes slideUp{0%{opacity:0;transform:translateY(var(--space-10))}to{opacity:1;transform:translateY(0)}}.task-input{width:100%;padding:var(--space-12);border:1px solid var(--color-border);border-radius:var(--radius-base);font-size:var(--font-size-md);font-family:var(--font-family-base);color:var(--color-text);background-color:var(--color-surface);transition:all var(--duration-normal) var(--ease-standard);outline:none}.task-input:focus{border-color:var(--color-primary);outline:var(--focus-outline);outline-offset:0}.task-input:focus-visible{box-shadow:var(--focus-ring)}.form-expanded{margin-top:var(--space-16);animation:slideDown var(--duration-normal) var(--ease-standard)}@keyframes slideDown{0%{opacity:0;max-height:0}to{opacity:1;max-height:300px}}.description-input{width:100%;padding:var(--space-12);border:1px solid var(--color-border);border-radius:var(--radius-base);font-size:var(--font-size-base);font-family:var(--font-family-base);color:var(--color-text);background-color:var(--color-surface);resize:vertical;min-height:80px;transition:all var(--duration-normal) var(--ease-standard);outline:none}.description-input:focus{border-color:var(--color-primary);outline:var(--focus-outline);outline-offset:0}.description-input:focus-visible{box-shadow:var(--focus-ring)}.form-actions{display:flex;gap:var(--space-10);margin-top:var(--space-12)}.btn{flex:1;display:inline-flex;align-items:center;justify-content:center;padding:var(--space-8) var(--space-16);border:none;border-radius:var(--radius-base);font-size:var(--font-size-base);font-weight:var(--font-weight-medium);font-family:var(--font-family-base);line-height:var(--line-height-normal);cursor:pointer;transition:all var(--duration-normal) var(--ease-standard);position:relative}.btn:focus-visible{outline:none;box-shadow:var(--focus-ring)}.btn-primary{background:var(--color-primary);color:var(--color-btn-primary-text)}.btn-primary:hover{background:var(--color-primary-hover);transform:translateY(-1px);box-shadow:var(--shadow-md)}.btn-primary:active{background:var(--color-primary-active);transform:translateY(0);box-shadow:var(--shadow-sm)}.btn-secondary{background:var(--color-secondary);color:var(--color-text)}.btn-secondary:hover{background:var(--color-secondary-hover)}.btn-secondary:active{background:var(--color-secondary-active)}@media (max-width: 480px){.task-form{padding:var(--space-12);margin-bottom:var(--space-20);border-radius:var(--radius-md)}.task-input{padding:var(--space-10);font-size:var(--font-size-base)}.description-input{padding:var(--space-10);font-size:var(--font-size-sm);min-height:60px}.form-expanded{margin-top:var(--space-12)}.form-actions{flex-direction:column;gap:var(--space-8);margin-top:var(--space-10)}.btn{width:100%;padding:var(--space-10) var(--space-12);font-size:var(--font-size-sm)}}.app{min-height:100vh;background:linear-gradient(135deg,#667eea,#764ba2);padding:20px}.container{max-width:800px;margin:0 auto}.header{text-align:center;color:#fff;margin-bottom:40px;animation:slideDown .6s ease-out}.header h1{font-size:2.5rem;margin-bottom:10px;font-weight:700}.header p{font-size:1.1rem;opacity:.9}@keyframes slideDown{0%{opacity:0;transform:translateY(-20px)}to{opacity:1;transform:translateY(0)}}.error-message{background-color:#ef5350;color:#fff;padding:15px 20px;border-radius:8px;margin-bottom:20px;animation:pulse .3s ease-out}.loading{text-align:center;color:#fff;font-size:1.2rem;padding:40px 20px}.empty-state{text-align:center;color:#fff;padding:60px 20px;font-size:1.1rem}.tasks-list{transition:background-color .2s ease}.tasks-list.dragging{background-color:#ffffff0d;border-radius:12px;padding:10px}@keyframes pulse{0%{opacity:0}to{opacity:1}}@media (max-width: 768px){.header h1{font-size:1.8rem}.header p{font-size:1rem}}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}code{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace} diff --git a/client/build/favicon-16x16.png b/client/build/favicon-16x16.png new file mode 100644 index 0000000..377acc5 Binary files /dev/null and b/client/build/favicon-16x16.png differ diff --git a/client/build/favicon-32x32.png b/client/build/favicon-32x32.png new file mode 100644 index 0000000..9279cf1 Binary files /dev/null and b/client/build/favicon-32x32.png differ diff --git a/client/build/favicon.ico b/client/build/favicon.ico new file mode 100644 index 0000000..3e6e8ee Binary files /dev/null and b/client/build/favicon.ico differ diff --git a/client/build/index.html b/client/build/index.html new file mode 100644 index 0000000..e639b21 --- /dev/null +++ b/client/build/index.html @@ -0,0 +1,32 @@ + + + + + + + Focus Tasks + + + + + +
+ + diff --git a/client/index.html b/client/index.html new file mode 100644 index 0000000..61b51e8 --- /dev/null +++ b/client/index.html @@ -0,0 +1,31 @@ + + + + + + + Focus Tasks + + + +
+ + + diff --git a/client/package-lock.json b/client/package-lock.json new file mode 100644 index 0000000..f511968 --- /dev/null +++ b/client/package-lock.json @@ -0,0 +1,2210 @@ +{ + "name": "focus-app-client", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "focus-app-client", + "version": "0.1.0", + "dependencies": { + "axios": "^1.6.0", + "react": "^18.2.0", + "react-beautiful-dnd": "^13.1.1", + "react-dom": "^18.2.0" + }, + "devDependencies": { + "@types/node": "^20.0.0", + "@types/react": "^18.2.0", + "@types/react-beautiful-dnd": "^13.1.5", + "@types/react-dom": "^18.2.0", + "@vitejs/plugin-react": "^4.2.0", + "typescript": "^5.0.0", + "vite": "^5.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.28.6.tgz", + "integrity": "sha512-JYgintcMjRiCvS8mMECzaEn+m3PfoQiyqukOMCCVQtoJGYJw8j/8LBJEiqkHLkfwCcs74E3pbAUFNg7d9VNJ+Q==", + "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.28.6", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.6.tgz", + "integrity": "sha512-2lfu57JtzctfIrcGMz992hyLlByuzgIk58+hhGCxjKZ3rWI82NnVLjXcaTqkI2NvlcvOskZaiZ5kjUALo3Lpxg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.6.tgz", + "integrity": "sha512-H3mcG6ZDLTlYfaSNi0iOKkigqMFvkTKlGUYlD8GW7nNOYRrevuA46iTypPyv+06V3fEmvvazfntkBU34L0azAw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.28.6", + "@babel/generator": "^7.28.6", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6", + "@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.28.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.6.tgz", + "integrity": "sha512-lOoVRwADj8hjf7al89tvQ2a1lf53Z+7tiXMgpZJL3maQPDxh0DgLMN62B2MKUOFcoodBHLMbDM6WAbKgNy5Suw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6", + "@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-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.28.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz", + "integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.6.tgz", + "integrity": "sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.6" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", + "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", + "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.6.tgz", + "integrity": "sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==", + "license": "MIT", + "engines": { + "node": ">=6.9.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.28.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.6.tgz", + "integrity": "sha512-fgWX62k02qtjqdSNTAGxmKYY/7FSL9WAS1o2Hu5+I5m9T0yxZzr4cnrfXQ/MX0rIifthCSs6FKTlzYbJcPtMNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.28.6", + "@babel/generator": "^7.28.6", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.6", + "@babel/template": "^7.28.6", + "@babel/types": "^7.28.6", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.6.tgz", + "integrity": "sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg==", + "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/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "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/@rolldown/pluginutils": { + "version": "1.0.0-beta.27", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz", + "integrity": "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.57.0.tgz", + "integrity": "sha512-tPgXB6cDTndIe1ah7u6amCI1T0SsnlOuKgg10Xh3uizJk4e5M1JGaUMk7J4ciuAUcFpbOiNhm2XIjP9ON0dUqA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.57.0.tgz", + "integrity": "sha512-sa4LyseLLXr1onr97StkU1Nb7fWcg6niokTwEVNOO7awaKaoRObQ54+V/hrF/BP1noMEaaAW6Fg2d/CfLiq3Mg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.57.0.tgz", + "integrity": "sha512-/NNIj9A7yLjKdmkx5dC2XQ9DmjIECpGpwHoGmA5E1AhU0fuICSqSWScPhN1yLCkEdkCwJIDu2xIeLPs60MNIVg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.57.0.tgz", + "integrity": "sha512-xoh8abqgPrPYPr7pTYipqnUi1V3em56JzE/HgDgitTqZBZ3yKCWI+7KUkceM6tNweyUKYru1UMi7FC060RyKwA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.57.0.tgz", + "integrity": "sha512-PCkMh7fNahWSbA0OTUQ2OpYHpjZZr0hPr8lId8twD7a7SeWrvT3xJVyza+dQwXSSq4yEQTMoXgNOfMCsn8584g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.57.0.tgz", + "integrity": "sha512-1j3stGx+qbhXql4OCDZhnK7b01s6rBKNybfsX+TNrEe9JNq4DLi1yGiR1xW+nL+FNVvI4D02PUnl6gJ/2y6WJA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.57.0.tgz", + "integrity": "sha512-eyrr5W08Ms9uM0mLcKfM/Uzx7hjhz2bcjv8P2uynfj0yU8GGPdz8iYrBPhiLOZqahoAMB8ZiolRZPbbU2MAi6Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.57.0.tgz", + "integrity": "sha512-Xds90ITXJCNyX9pDhqf85MKWUI4lqjiPAipJ8OLp8xqI2Ehk+TCVhF9rvOoN8xTbcafow3QOThkNnrM33uCFQA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.57.0.tgz", + "integrity": "sha512-Xws2KA4CLvZmXjy46SQaXSejuKPhwVdaNinldoYfqruZBaJHqVo6hnRa8SDo9z7PBW5x84SH64+izmldCgbezw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.57.0.tgz", + "integrity": "sha512-hrKXKbX5FdaRJj7lTMusmvKbhMJSGWJ+w++4KmjiDhpTgNlhYobMvKfDoIWecy4O60K6yA4SnztGuNTQF+Lplw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.57.0.tgz", + "integrity": "sha512-6A+nccfSDGKsPm00d3xKcrsBcbqzCTAukjwWK6rbuAnB2bHaL3r9720HBVZ/no7+FhZLz/U3GwwZZEh6tOSI8Q==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.57.0.tgz", + "integrity": "sha512-4P1VyYUe6XAJtQH1Hh99THxr0GKMMwIXsRNOceLrJnaHTDgk1FTcTimDgneRJPvB3LqDQxUmroBclQ1S0cIJwQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.57.0.tgz", + "integrity": "sha512-8Vv6pLuIZCMcgXre6c3nOPhE0gjz1+nZP6T+hwWjr7sVH8k0jRkH+XnfjjOTglyMBdSKBPPz54/y1gToSKwrSQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.57.0.tgz", + "integrity": "sha512-r1te1M0Sm2TBVD/RxBPC6RZVwNqUTwJTA7w+C/IW5v9Ssu6xmxWEi+iJQlpBhtUiT1raJ5b48pI8tBvEjEFnFA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.57.0.tgz", + "integrity": "sha512-say0uMU/RaPm3CDQLxUUTF2oNWL8ysvHkAjcCzV2znxBr23kFfaxocS9qJm+NdkRhF8wtdEEAJuYcLPhSPbjuQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.57.0.tgz", + "integrity": "sha512-/MU7/HizQGsnBREtRpcSbSV1zfkoxSTR7wLsRmBPQ8FwUj5sykrP1MyJTvsxP5KBq9SyE6kH8UQQQwa0ASeoQQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.57.0.tgz", + "integrity": "sha512-Q9eh+gUGILIHEaJf66aF6a414jQbDnn29zeu0eX3dHMuysnhTvsUvZTCAyZ6tJhUjnvzBKE4FtuaYxutxRZpOg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.57.0.tgz", + "integrity": "sha512-OR5p5yG5OKSxHReWmwvM0P+VTPMwoBS45PXTMYaskKQqybkS3Kmugq1W+YbNWArF8/s7jQScgzXUhArzEQ7x0A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.57.0.tgz", + "integrity": "sha512-XeatKzo4lHDsVEbm1XDHZlhYZZSQYym6dg2X/Ko0kSFgio+KXLsxwJQprnR48GvdIKDOpqWqssC3iBCjoMcMpw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.57.0.tgz", + "integrity": "sha512-Lu71y78F5qOfYmubYLHPcJm74GZLU6UJ4THkf/a1K7Tz2ycwC2VUbsqbJAXaR6Bx70SRdlVrt2+n5l7F0agTUw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.57.0.tgz", + "integrity": "sha512-v5xwKDWcu7qhAEcsUubiav7r+48Uk/ENWdr82MBZZRIm7zThSxCIVDfb3ZeRRq9yqk+oIzMdDo6fCcA5DHfMyA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.57.0.tgz", + "integrity": "sha512-XnaaaSMGSI6Wk8F4KK3QP7GfuuhjGchElsVerCplUuxRIzdvZ7hRBpLR0omCmw+kI2RFJB80nenhOoGXlJ5TfQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.57.0.tgz", + "integrity": "sha512-3K1lP+3BXY4t4VihLw5MEg6IZD3ojSYzqzBG571W3kNQe4G4CcFpSUQVgurYgib5d+YaCjeFow8QivWp8vuSvA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.57.0.tgz", + "integrity": "sha512-MDk610P/vJGc5L5ImE4k5s+GZT3en0KoK1MKPXCRgzmksAMk79j4h3k1IerxTNqwDLxsGxStEZVBqG0gIqZqoA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.57.0.tgz", + "integrity": "sha512-Zv7v6q6aV+VslnpwzqKAmrk5JdVkLUzok2208ZXGipjb+msxBr/fJPZyeEXiFgH7k62Ak0SLIfxQRZQvTuf7rQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.2" + } + }, + "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/hoist-non-react-statics": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.7.tgz", + "integrity": "sha512-PQTyIulDkIDro8P+IHbKCsw7U2xxBYflVzW/FgWdCAePD9xGSidgA76/GeJ6lBKoblyhf9pBY763gbrN+1dI8g==", + "license": "MIT", + "dependencies": { + "hoist-non-react-statics": "^3.3.0" + }, + "peerDependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/node": { + "version": "20.19.30", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.30.tgz", + "integrity": "sha512-WJtwWJu7UdlvzEAUm484QNg5eAoq5QR08KDNx7g45Usrs2NtOPiX8ugDqmKdXkyL03rBqU5dYNYVQetEpBHq2g==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@types/prop-types": { + "version": "15.7.15", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz", + "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==", + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "18.3.27", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.27.tgz", + "integrity": "sha512-cisd7gxkzjBKU2GgdYrTdtQx1SORymWyaAFhaxQPK9bYO9ot3Y5OikQRvY0VYQtvwjeQnizCINJAenh/V7MK2w==", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.2.2" + } + }, + "node_modules/@types/react-beautiful-dnd": { + "version": "13.1.8", + "resolved": "https://registry.npmjs.org/@types/react-beautiful-dnd/-/react-beautiful-dnd-13.1.8.tgz", + "integrity": "sha512-E3TyFsro9pQuK4r8S/OL6G99eq7p8v29sX0PM7oT8Z+PJfZvSQTx4zTQbUJ+QZXioAF0e7TGBEcA1XhYhCweyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/react-dom": { + "version": "18.3.7", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.7.tgz", + "integrity": "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^18.0.0" + } + }, + "node_modules/@types/react-redux": { + "version": "7.1.34", + "resolved": "https://registry.npmjs.org/@types/react-redux/-/react-redux-7.1.34.tgz", + "integrity": "sha512-GdFaVjEbYv4Fthm2ZLvj1VSCedV7TqE5y1kNwnjSdBOTXuRSgowux6J8TAct15T3CKBr63UMk+2CO7ilRhyrAQ==", + "license": "MIT", + "dependencies": { + "@types/hoist-non-react-statics": "^3.3.0", + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0", + "redux": "^4.0.0" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.7.0.tgz", + "integrity": "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.28.0", + "@babel/plugin-transform-react-jsx-self": "^7.27.1", + "@babel/plugin-transform-react-jsx-source": "^7.27.1", + "@rolldown/pluginutils": "1.0.0-beta.27", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.17.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/axios": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.4.tgz", + "integrity": "sha512-1wVkUaAO6WyaYtCkcYCOx12ZgpGf9Zif+qXa4n+oYzK558YryKqiL6UWwd5DqiH3VRW0GYhTZQ/vlgJrCoNQlg==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.4", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/baseline-browser-mapping": { + "version": "2.9.19", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.19.tgz", + "integrity": "sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, + "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", + "peer": true, + "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/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001766", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001766.tgz", + "integrity": "sha512-4C0lfJ0/YPjJQHagaE9x2Elb69CIqEPZeG0anQt9SIvIoOH4a4uaRl73IavyO+0qZh6MDLH//DrXThEYKHkmYA==", + "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/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "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-box-model": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/css-box-model/-/css-box-model-1.2.1.tgz", + "integrity": "sha512-a7Vr4Q/kd/aw96bnJG332W9V9LkJO69JRcaCYDUqjp6/z0w6VcZjgAcTbgFxEPfBgdnAwlh3iwu+hLopa+flJw==", + "license": "MIT", + "dependencies": { + "tiny-invariant": "^1.0.6" + } + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "license": "MIT" + }, + "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/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.282", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.282.tgz", + "integrity": "sha512-FCPkJtpst28UmFzd903iU7PdeVTfY0KAeJy+Lk0GLZRwgwYHn/irRcaCbQQOmr5Vytc/7rcavsYLvTM8RiHYhQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "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/follow-redirects": { + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "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/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "license": "BSD-3-Clause", + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/hoist-non-react-statics/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" + }, + "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==", + "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/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "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/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/memoize-one": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", + "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==", + "license": "MIT" + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "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-releases": { + "version": "2.0.27", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "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/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "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/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/prop-types/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" + }, + "node_modules/raf-schd": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/raf-schd/-/raf-schd-4.0.3.tgz", + "integrity": "sha512-tQkJl2GRWh83ui2DiPTJz9wEiMN20syf+5oKfB03yYP7ioZcJwsIK8FjrtLwH1m7C7e+Tt2yYBlrOpdT+dyeIQ==", + "license": "MIT" + }, + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-beautiful-dnd": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/react-beautiful-dnd/-/react-beautiful-dnd-13.1.1.tgz", + "integrity": "sha512-0Lvs4tq2VcrEjEgDXHjT98r+63drkKEgqyxdA7qD3mvKwga6a5SscbdLPO2IExotU1jW8L0Ksdl0Cj2AF67nPQ==", + "deprecated": "react-beautiful-dnd is now deprecated. Context and options: https://github.com/atlassian/react-beautiful-dnd/issues/2672", + "license": "Apache-2.0", + "dependencies": { + "@babel/runtime": "^7.9.2", + "css-box-model": "^1.2.0", + "memoize-one": "^5.1.1", + "raf-schd": "^4.0.2", + "react-redux": "^7.2.0", + "redux": "^4.0.4", + "use-memo-one": "^1.1.1" + }, + "peerDependencies": { + "react": "^16.8.5 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.5 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "license": "MIT", + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "license": "MIT" + }, + "node_modules/react-redux": { + "version": "7.2.9", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.9.tgz", + "integrity": "sha512-Gx4L3uM182jEEayZfRbI/G11ZpYdNAnBs70lFVMNdHJI76XYtR+7m0MN+eAs7UHBPhWXcnFPaS+9owSCJQHNpQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.15.4", + "@types/react-redux": "^7.1.20", + "hoist-non-react-statics": "^3.3.2", + "loose-envify": "^1.4.0", + "prop-types": "^15.7.2", + "react-is": "^17.0.2" + }, + "peerDependencies": { + "react": "^16.8.3 || ^17 || ^18" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + } + } + }, + "node_modules/react-refresh": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", + "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/redux": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz", + "integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.9.2" + } + }, + "node_modules/rollup": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.57.0.tgz", + "integrity": "sha512-e5lPJi/aui4TO1LpAXIRLySmwXSE8k3b9zoGfd42p67wzxog4WHjiZF3M2uheQih4DGyc25QEV4yRBbpueNiUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.57.0", + "@rollup/rollup-android-arm64": "4.57.0", + "@rollup/rollup-darwin-arm64": "4.57.0", + "@rollup/rollup-darwin-x64": "4.57.0", + "@rollup/rollup-freebsd-arm64": "4.57.0", + "@rollup/rollup-freebsd-x64": "4.57.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.57.0", + "@rollup/rollup-linux-arm-musleabihf": "4.57.0", + "@rollup/rollup-linux-arm64-gnu": "4.57.0", + "@rollup/rollup-linux-arm64-musl": "4.57.0", + "@rollup/rollup-linux-loong64-gnu": "4.57.0", + "@rollup/rollup-linux-loong64-musl": "4.57.0", + "@rollup/rollup-linux-ppc64-gnu": "4.57.0", + "@rollup/rollup-linux-ppc64-musl": "4.57.0", + "@rollup/rollup-linux-riscv64-gnu": "4.57.0", + "@rollup/rollup-linux-riscv64-musl": "4.57.0", + "@rollup/rollup-linux-s390x-gnu": "4.57.0", + "@rollup/rollup-linux-x64-gnu": "4.57.0", + "@rollup/rollup-linux-x64-musl": "4.57.0", + "@rollup/rollup-openbsd-x64": "4.57.0", + "@rollup/rollup-openharmony-arm64": "4.57.0", + "@rollup/rollup-win32-arm64-msvc": "4.57.0", + "@rollup/rollup-win32-ia32-msvc": "4.57.0", + "@rollup/rollup-win32-x64-gnu": "4.57.0", + "@rollup/rollup-win32-x64-msvc": "4.57.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "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/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/tiny-invariant": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", + "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", + "license": "MIT" + }, + "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": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "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/use-memo-one": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/use-memo-one/-/use-memo-one-1.1.3.tgz", + "integrity": "sha512-g66/K7ZQGYrI6dy8GLpVcMsBp4s17xNkYJVSMvTEevGy3nDxHOfE6z8BVE22+5G5x7t3+bhzrlTDB7ObrEE0cQ==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/vite": { + "version": "5.4.21", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.21.tgz", + "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "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" + } + } +} diff --git a/client/package.json b/client/package.json new file mode 100644 index 0000000..d9f3584 --- /dev/null +++ b/client/package.json @@ -0,0 +1,26 @@ +{ + "name": "focus-app-client", + "version": "0.1.0", + "private": true, + "dependencies": { + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-beautiful-dnd": "^13.1.1", + "axios": "^1.6.0" + }, + "devDependencies": { + "@types/react": "^18.2.0", + "@types/react-dom": "^18.2.0", + "@types/react-beautiful-dnd": "^13.1.5", + "@types/node": "^20.0.0", + "typescript": "^5.0.0", + "vite": "^5.0.0", + "@vitejs/plugin-react": "^4.2.0" + }, + "scripts": { + "dev": "vite", + "build": "tsc && vite build", + "preview": "vite preview" + }, + "proxy": "http://localhost:5000" +} diff --git a/client/public/android-chrome-192x192.png b/client/public/android-chrome-192x192.png new file mode 100644 index 0000000..9409fdc Binary files /dev/null and b/client/public/android-chrome-192x192.png differ diff --git a/client/public/android-chrome-512x512.png b/client/public/android-chrome-512x512.png new file mode 100644 index 0000000..1050b9c Binary files /dev/null and b/client/public/android-chrome-512x512.png differ diff --git a/client/public/apple-touch-icon.png b/client/public/apple-touch-icon.png new file mode 100644 index 0000000..2b8f712 Binary files /dev/null and b/client/public/apple-touch-icon.png differ diff --git a/client/public/favicon-16x16.png b/client/public/favicon-16x16.png new file mode 100644 index 0000000..377acc5 Binary files /dev/null and b/client/public/favicon-16x16.png differ diff --git a/client/public/favicon-32x32.png b/client/public/favicon-32x32.png new file mode 100644 index 0000000..9279cf1 Binary files /dev/null and b/client/public/favicon-32x32.png differ diff --git a/client/public/favicon.ico b/client/public/favicon.ico new file mode 100644 index 0000000..3e6e8ee Binary files /dev/null and b/client/public/favicon.ico differ diff --git a/client/src/App.css b/client/src/App.css new file mode 100644 index 0000000..73457ed --- /dev/null +++ b/client/src/App.css @@ -0,0 +1,91 @@ +.app { + min-height: 100vh; + background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); + padding: 20px; +} + +.container { + max-width: 800px; + margin: 0 auto; +} + +.header { + text-align: center; + color: white; + margin-bottom: 40px; + animation: slideDown 0.6s ease-out; +} + +.header h1 { + font-size: 2.5rem; + margin-bottom: 10px; + font-weight: 700; +} + +.header p { + font-size: 1.1rem; + opacity: 0.9; +} + +@keyframes slideDown { + from { + opacity: 0; + transform: translateY(-20px); + } + to { + opacity: 1; + transform: translateY(0); + } +} + +.error-message { + background-color: #ef5350; + color: white; + padding: 15px 20px; + border-radius: 8px; + margin-bottom: 20px; + animation: pulse 0.3s ease-out; +} + +.loading { + text-align: center; + color: white; + font-size: 1.2rem; + padding: 40px 20px; +} + +.empty-state { + text-align: center; + color: white; + padding: 60px 20px; + font-size: 1.1rem; +} + +.tasks-list { + transition: background-color 0.2s ease; +} + +.tasks-list.dragging { + background-color: rgba(255, 255, 255, 0.05); + border-radius: 12px; + padding: 10px; +} + +@keyframes pulse { + from { + opacity: 0; + } + to { + opacity: 1; + } +} + +@media (max-width: 768px) { + .header h1 { + font-size: 1.8rem; + } + + .header p { + font-size: 1rem; + } +} diff --git a/client/src/App.tsx b/client/src/App.tsx new file mode 100644 index 0000000..4b8af79 --- /dev/null +++ b/client/src/App.tsx @@ -0,0 +1,144 @@ +import React, { useState, useEffect } from 'react'; +import { DragDropContext, Droppable, Draggable, DropResult } from 'react-beautiful-dnd'; +import { focusTaskApi } from './api'; +import { FocusTask } from './types'; +import TaskCard from './components/TaskCard'; +import TaskForm from './components/TaskForm'; +import './App.css'; + +const App: React.FC = () => { + const [tasks, setTasks] = useState([]); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(null); + + useEffect(() => { + loadTasks(); + }, []); + + const loadTasks = async () => { + try { + setLoading(true); + const data = await focusTaskApi.getTasks(); + setTasks(data); + setError(null); + } catch (err) { + setError('Failed to load tasks'); + console.error(err); + } finally { + setLoading(false); + } + }; + + const handleAddTask = async (title: string, description?: string) => { + try { + const newTask = await focusTaskApi.createTask({ title, description }); + setTasks([newTask, ...tasks]); + } catch (err) { + setError('Failed to create task'); + console.error(err); + } + }; + + const handleUpdateTask = async (id: number, title: string, description?: string) => { + try { + const updated = await focusTaskApi.updateTask(id, { title, description }); + setTasks(tasks.map(t => t.id === id ? updated : t)); + } catch (err) { + setError('Failed to update task'); + console.error(err); + } + }; + + const handleDeleteTask = async (id: number) => { + try { + await focusTaskApi.deleteTask(id); + setTasks(tasks.filter(t => t.id !== id)); + } catch (err) { + setError('Failed to delete task'); + console.error(err); + } + }; + + const handleDragEnd = async (result: DropResult) => { + const { source, destination } = result; + + if (!destination) return; + if (source.index === destination.index) return; + + const newTasks = Array.from(tasks); + const [movedTask] = newTasks.splice(source.index, 1); + newTasks.splice(destination.index, 0, movedTask); + + setTasks(newTasks); + + // Update order in backend + try { + const orders = newTasks.map((task, index) => ({ + id: task.id, + order: index + 1, + })); + await focusTaskApi.reorderTasks(orders); + } catch (err) { + setError('Failed to reorder tasks'); + console.error(err); + loadTasks(); // Reload on error + } + }; + + return ( +
+
+
+

🎯 Focus Tasks

+

Deine aktiven Schwerpunkte für die nächsten 2-3 Wochen

+
+ + {error &&
{error}
} + + + + {loading ? ( +
Lade Tasks...
+ ) : tasks.length === 0 ? ( +
+

Keine Tasks vorhanden. Füge einen neuen Task hinzu!

+
+ ) : ( + + + {(provided, snapshot) => ( +
+ {tasks.map((task, index) => ( + + {(provided, snapshot) => ( +
+ handleUpdateTask(task.id, title, desc)} + onDelete={() => handleDeleteTask(task.id)} + /> +
+ )} +
+ ))} + {provided.placeholder} +
+ )} +
+
+ )} +
+
+ ); +}; + +export default App; diff --git a/client/src/api.ts b/client/src/api.ts new file mode 100644 index 0000000..2467732 --- /dev/null +++ b/client/src/api.ts @@ -0,0 +1,39 @@ +import axios from 'axios'; +import { FocusTask, CreateTaskDto, UpdateTaskDto } from './types'; + +const API_URL = '/api/focustasks'; + +const api = axios.create({ + baseURL: API_URL, + headers: { + 'Content-Type': 'application/json', + }, +}); + +export const focusTaskApi = { + getTasks: async (): Promise => { + const { data } = await api.get(''); + return data; + }, + + createTask: async (dto: CreateTaskDto): Promise => { + const { data } = await api.post('', dto); + return data; + }, + + updateTask: async (id: number, dto: UpdateTaskDto): Promise => { + const { data } = await api.put(`/${id}`, dto); + return data; + }, + + deleteTask: async (id: number): Promise => { + await api.delete(`/${id}`); + }, + + reorderTasks: async ( + orders: Array<{ id: number; order: number }> + ): Promise => { + const { data } = await api.put('/reorder', { orders }); + return data; + }, +}; diff --git a/client/src/components/TaskCard.css b/client/src/components/TaskCard.css new file mode 100644 index 0000000..f67e0a7 --- /dev/null +++ b/client/src/components/TaskCard.css @@ -0,0 +1,1020 @@ +:root { + /* Primitive Color Tokens */ + --color-white: rgba(255, 255, 255, 1); + --color-black: rgba(0, 0, 0, 1); + --color-cream-50: rgba(252, 252, 249, 1); + --color-cream-100: rgba(255, 255, 253, 1); + --color-gray-200: rgba(245, 245, 245, 1); + --color-gray-300: rgba(167, 169, 169, 1); + --color-gray-400: rgba(119, 124, 124, 1); + --color-slate-500: rgba(98, 108, 113, 1); + --color-brown-600: rgba(94, 82, 64, 1); + --color-charcoal-700: rgba(31, 33, 33, 1); + --color-charcoal-800: rgba(38, 40, 40, 1); + --color-slate-900: rgba(19, 52, 59, 1); + --color-teal-300: rgba(50, 184, 198, 1); + --color-teal-400: rgba(45, 166, 178, 1); + --color-teal-500: rgba(33, 128, 141, 1); + --color-teal-600: rgba(29, 116, 128, 1); + --color-teal-700: rgba(26, 104, 115, 1); + --color-teal-800: rgba(41, 150, 161, 1); + --color-red-400: rgba(255, 84, 89, 1); + --color-red-500: rgba(192, 21, 47, 1); + --color-orange-400: rgba(230, 129, 97, 1); + --color-orange-500: rgba(168, 75, 47, 1); + + /* RGB versions for opacity control */ + --color-brown-600-rgb: 94, 82, 64; + --color-teal-500-rgb: 33, 128, 141; + --color-slate-900-rgb: 19, 52, 59; + --color-slate-500-rgb: 98, 108, 113; + --color-red-500-rgb: 192, 21, 47; + --color-red-400-rgb: 255, 84, 89; + --color-orange-500-rgb: 168, 75, 47; + --color-orange-400-rgb: 230, 129, 97; + + /* Background color tokens (Light Mode) */ + --color-bg-1: rgba(59, 130, 246, 0.08); /* Light blue */ + --color-bg-2: rgba(245, 158, 11, 0.08); /* Light yellow */ + --color-bg-3: rgba(34, 197, 94, 0.08); /* Light green */ + --color-bg-4: rgba(239, 68, 68, 0.08); /* Light red */ + --color-bg-5: rgba(147, 51, 234, 0.08); /* Light purple */ + --color-bg-6: rgba(249, 115, 22, 0.08); /* Light orange */ + --color-bg-7: rgba(236, 72, 153, 0.08); /* Light pink */ + --color-bg-8: rgba(6, 182, 212, 0.08); /* Light cyan */ + + /* Semantic Color Tokens (Light Mode) */ + --color-background: var(--color-cream-50); + --color-surface: var(--color-cream-100); + --color-text: var(--color-slate-900); + --color-text-secondary: var(--color-slate-500); + --color-primary: var(--color-teal-500); + --color-primary-hover: var(--color-teal-600); + --color-primary-active: var(--color-teal-700); + --color-secondary: rgba(var(--color-brown-600-rgb), 0.12); + --color-secondary-hover: rgba(var(--color-brown-600-rgb), 0.2); + --color-secondary-active: rgba(var(--color-brown-600-rgb), 0.25); + --color-border: rgba(var(--color-brown-600-rgb), 0.2); + --color-btn-primary-text: var(--color-cream-50); + --color-card-border: rgba(var(--color-brown-600-rgb), 0.12); + --color-card-border-inner: rgba(var(--color-brown-600-rgb), 0.12); + --color-error: var(--color-red-500); + --color-success: var(--color-teal-500); + --color-warning: var(--color-orange-500); + --color-info: var(--color-slate-500); + --color-focus-ring: rgba(var(--color-teal-500-rgb), 0.4); + --color-select-caret: rgba(var(--color-slate-900-rgb), 0.8); + + /* Common style patterns */ + --focus-ring: 0 0 0 3px var(--color-focus-ring); + --focus-outline: 2px solid var(--color-primary); + --status-bg-opacity: 0.15; + --status-border-opacity: 0.25; + --select-caret-light: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23134252' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E"); + --select-caret-dark: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23f5f5f5' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E"); + + /* RGB versions for opacity control */ + --color-success-rgb: 33, 128, 141; + --color-error-rgb: 192, 21, 47; + --color-warning-rgb: 168, 75, 47; + --color-info-rgb: 98, 108, 113; + + /* Typography */ + --font-family-base: "FKGroteskNeue", "Geist", "Inter", -apple-system, + BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; + --font-family-mono: "Berkeley Mono", ui-monospace, SFMono-Regular, Menlo, + Monaco, Consolas, monospace; + --font-size-xs: 11px; + --font-size-sm: 12px; + --font-size-base: 14px; + --font-size-md: 14px; + --font-size-lg: 16px; + --font-size-xl: 18px; + --font-size-2xl: 20px; + --font-size-3xl: 24px; + --font-size-4xl: 30px; + --font-weight-normal: 400; + --font-weight-medium: 500; + --font-weight-semibold: 550; + --font-weight-bold: 600; + --line-height-tight: 1.2; + --line-height-normal: 1.5; + --letter-spacing-tight: -0.01em; + + /* Spacing */ + --space-0: 0; + --space-1: 1px; + --space-2: 2px; + --space-4: 4px; + --space-6: 6px; + --space-8: 8px; + --space-10: 10px; + --space-12: 12px; + --space-16: 16px; + --space-20: 20px; + --space-24: 24px; + --space-32: 32px; + + /* Border Radius */ + --radius-sm: 6px; + --radius-base: 8px; + --radius-md: 10px; + --radius-lg: 12px; + --radius-full: 9999px; + + /* Shadows */ + --shadow-xs: 0 1px 2px rgba(0, 0, 0, 0.02); + --shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.04), 0 1px 2px rgba(0, 0, 0, 0.02); + --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.04), + 0 2px 4px -1px rgba(0, 0, 0, 0.02); + --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.04), + 0 4px 6px -2px rgba(0, 0, 0, 0.02); + --shadow-inset-sm: inset 0 1px 0 rgba(255, 255, 255, 0.15), + inset 0 -1px 0 rgba(0, 0, 0, 0.03); + + /* Animation */ + --duration-fast: 150ms; + --duration-normal: 250ms; + --ease-standard: cubic-bezier(0.16, 1, 0.3, 1); + + /* Layout */ + --container-sm: 640px; + --container-md: 768px; + --container-lg: 1024px; + --container-xl: 1280px; +} + +/* Dark mode colors */ +@media (prefers-color-scheme: dark) { + :root { + /* RGB versions for opacity control (Dark Mode) */ + --color-gray-400-rgb: 119, 124, 124; + --color-teal-300-rgb: 50, 184, 198; + --color-gray-300-rgb: 167, 169, 169; + --color-gray-200-rgb: 245, 245, 245; + + /* Background color tokens (Dark Mode) */ + --color-bg-1: rgba(29, 78, 216, 0.15); /* Dark blue */ + --color-bg-2: rgba(180, 83, 9, 0.15); /* Dark yellow */ + --color-bg-3: rgba(21, 128, 61, 0.15); /* Dark green */ + --color-bg-4: rgba(185, 28, 28, 0.15); /* Dark red */ + --color-bg-5: rgba(107, 33, 168, 0.15); /* Dark purple */ + --color-bg-6: rgba(194, 65, 12, 0.15); /* Dark orange */ + --color-bg-7: rgba(190, 24, 93, 0.15); /* Dark pink */ + --color-bg-8: rgba(8, 145, 178, 0.15); /* Dark cyan */ + + /* Semantic Color Tokens (Dark Mode) */ + --color-background: var(--color-charcoal-700); + --color-surface: var(--color-charcoal-800); + --color-text: var(--color-gray-200); + --color-text-secondary: rgba(var(--color-gray-300-rgb), 0.7); + --color-primary: var(--color-teal-300); + --color-primary-hover: var(--color-teal-400); + --color-primary-active: var(--color-teal-800); + --color-secondary: rgba(var(--color-gray-400-rgb), 0.15); + --color-secondary-hover: rgba(var(--color-gray-400-rgb), 0.25); + --color-secondary-active: rgba(var(--color-gray-400-rgb), 0.3); + --color-border: rgba(var(--color-gray-400-rgb), 0.3); + --color-error: var(--color-red-400); + --color-success: var(--color-teal-300); + --color-warning: var(--color-orange-400); + --color-info: var(--color-gray-300); + --color-focus-ring: rgba(var(--color-teal-300-rgb), 0.4); + --color-btn-primary-text: var(--color-slate-900); + --color-card-border: rgba(var(--color-gray-400-rgb), 0.2); + --color-card-border-inner: rgba(var(--color-gray-400-rgb), 0.15); + --shadow-inset-sm: inset 0 1px 0 rgba(255, 255, 255, 0.1), + inset 0 -1px 0 rgba(0, 0, 0, 0.15); + --button-border-secondary: rgba(var(--color-gray-400-rgb), 0.2); + --color-border-secondary: rgba(var(--color-gray-400-rgb), 0.2); + --color-select-caret: rgba(var(--color-gray-200-rgb), 0.8); + + /* Common style patterns - updated for dark mode */ + --focus-ring: 0 0 0 3px var(--color-focus-ring); + --focus-outline: 2px solid var(--color-primary); + --status-bg-opacity: 0.15; + --status-border-opacity: 0.25; + --select-caret-light: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23134252' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E"); + --select-caret-dark: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23f5f5f5' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E"); + + /* RGB versions for dark mode */ + --color-success-rgb: var(--color-teal-300-rgb); + --color-error-rgb: var(--color-red-400-rgb); + --color-warning-rgb: var(--color-orange-400-rgb); + --color-info-rgb: var(--color-gray-300-rgb); + } +} + +/* Data attribute for manual theme switching */ +[data-color-scheme="dark"] { + /* RGB versions for opacity control (dark mode) */ + --color-gray-400-rgb: 119, 124, 124; + --color-teal-300-rgb: 50, 184, 198; + --color-gray-300-rgb: 167, 169, 169; + --color-gray-200-rgb: 245, 245, 245; + + /* Colorful background palette - Dark Mode */ + --color-bg-1: rgba(29, 78, 216, 0.15); /* Dark blue */ + --color-bg-2: rgba(180, 83, 9, 0.15); /* Dark yellow */ + --color-bg-3: rgba(21, 128, 61, 0.15); /* Dark green */ + --color-bg-4: rgba(185, 28, 28, 0.15); /* Dark red */ + --color-bg-5: rgba(107, 33, 168, 0.15); /* Dark purple */ + --color-bg-6: rgba(194, 65, 12, 0.15); /* Dark orange */ + --color-bg-7: rgba(190, 24, 93, 0.15); /* Dark pink */ + --color-bg-8: rgba(8, 145, 178, 0.15); /* Dark cyan */ + + /* Semantic Color Tokens (Dark Mode) */ + --color-background: var(--color-charcoal-700); + --color-surface: var(--color-charcoal-800); + --color-text: var(--color-gray-200); + --color-text-secondary: rgba(var(--color-gray-300-rgb), 0.7); + --color-primary: var(--color-teal-300); + --color-primary-hover: var(--color-teal-400); + --color-primary-active: var(--color-teal-800); + --color-secondary: rgba(var(--color-gray-400-rgb), 0.15); + --color-secondary-hover: rgba(var(--color-gray-400-rgb), 0.25); + --color-secondary-active: rgba(var(--color-gray-400-rgb), 0.3); + --color-border: rgba(var(--color-gray-400-rgb), 0.3); + --color-error: var(--color-red-400); + --color-success: var(--color-teal-300); + --color-warning: var(--color-orange-400); + --color-info: var(--color-gray-300); + --color-focus-ring: rgba(var(--color-teal-300-rgb), 0.4); + --color-btn-primary-text: var(--color-slate-900); + --color-card-border: rgba(var(--color-gray-400-rgb), 0.15); + --color-card-border-inner: rgba(var(--color-gray-400-rgb), 0.15); + --shadow-inset-sm: inset 0 1px 0 rgba(255, 255, 255, 0.1), + inset 0 -1px 0 rgba(0, 0, 0, 0.15); + --color-border-secondary: rgba(var(--color-gray-400-rgb), 0.2); + --color-select-caret: rgba(var(--color-gray-200-rgb), 0.8); + + /* Common style patterns - updated for dark mode */ + --focus-ring: 0 0 0 3px var(--color-focus-ring); + --focus-outline: 2px solid var(--color-primary); + --status-bg-opacity: 0.15; + --status-border-opacity: 0.25; + --select-caret-light: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23134252' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E"); + --select-caret-dark: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23f5f5f5' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E"); + + /* RGB versions for dark mode */ + --color-success-rgb: var(--color-teal-300-rgb); + --color-error-rgb: var(--color-red-400-rgb); + --color-warning-rgb: var(--color-orange-400-rgb); + --color-info-rgb: var(--color-gray-300-rgb); +} + +[data-color-scheme="light"] { + /* RGB versions for opacity control (light mode) */ + --color-brown-600-rgb: 94, 82, 64; + --color-teal-500-rgb: 33, 128, 141; + --color-slate-900-rgb: 19, 52, 59; + + /* Semantic Color Tokens (Light Mode) */ + --color-background: var(--color-cream-50); + --color-surface: var(--color-cream-100); + --color-text: var(--color-slate-900); + --color-text-secondary: var(--color-slate-500); + --color-primary: var(--color-teal-500); + --color-primary-hover: var(--color-teal-600); + --color-primary-active: var(--color-teal-700); + --color-secondary: rgba(var(--color-brown-600-rgb), 0.12); + --color-secondary-hover: rgba(var(--color-brown-600-rgb), 0.2); + --color-secondary-active: rgba(var(--color-brown-600-rgb), 0.25); + --color-border: rgba(var(--color-brown-600-rgb), 0.2); + --color-btn-primary-text: var(--color-cream-50); + --color-card-border: rgba(var(--color-brown-600-rgb), 0.12); + --color-card-border-inner: rgba(var(--color-brown-600-rgb), 0.12); + --color-error: var(--color-red-500); + --color-success: var(--color-teal-500); + --color-warning: var(--color-orange-500); + --color-info: var(--color-slate-500); + --color-focus-ring: rgba(var(--color-teal-500-rgb), 0.4); + + /* RGB versions for light mode */ + --color-success-rgb: var(--color-teal-500-rgb); + --color-error-rgb: var(--color-red-500-rgb); + --color-warning-rgb: var(--color-orange-500-rgb); + --color-info-rgb: var(--color-slate-500-rgb); +} + +/* Base styles */ +html { + font-size: var(--font-size-base); + font-family: var(--font-family-base); + line-height: var(--line-height-normal); + color: var(--color-text); + background-color: var(--color-background); + -webkit-font-smoothing: antialiased; + box-sizing: border-box; +} + +body { + margin: 0; + padding: 0; +} + +*, +*::before, +*::after { + box-sizing: inherit; +} + +/* Typography */ +h1, +h2, +h3, +h4, +h5, +h6 { + margin: 0; + font-weight: var(--font-weight-semibold); + line-height: var(--line-height-tight); + color: var(--color-text); + letter-spacing: var(--letter-spacing-tight); +} + +h1 { + font-size: var(--font-size-4xl); +} +h2 { + font-size: var(--font-size-3xl); +} +h3 { + font-size: var(--font-size-2xl); +} +h4 { + font-size: var(--font-size-xl); +} +h5 { + font-size: var(--font-size-lg); +} +h6 { + font-size: var(--font-size-md); +} + +p { + margin: 0 0 var(--space-16) 0; +} + +a { + color: var(--color-primary); + text-decoration: none; + transition: color var(--duration-fast) var(--ease-standard); +} + +a:hover { + color: var(--color-primary-hover); +} + +code, +pre { + font-family: var(--font-family-mono); + font-size: calc(var(--font-size-base) * 0.95); + background-color: var(--color-secondary); + border-radius: var(--radius-sm); +} + +code { + padding: var(--space-1) var(--space-4); +} + +pre { + padding: var(--space-16); + margin: var(--space-16) 0; + overflow: auto; + border: 1px solid var(--color-border); +} + +pre code { + background: none; + padding: 0; +} + +/* Buttons */ +.btn { + display: inline-flex; + align-items: center; + justify-content: center; + padding: var(--space-8) var(--space-16); + border-radius: var(--radius-base); + font-size: var(--font-size-base); + font-weight: 500; + line-height: 1.5; + cursor: pointer; + transition: all var(--duration-normal) var(--ease-standard); + border: none; + text-decoration: none; + position: relative; +} + +.btn:focus-visible { + outline: none; + box-shadow: var(--focus-ring); +} + +.btn--primary { + background: var(--color-primary); + color: var(--color-btn-primary-text); +} + +.btn--primary:hover { + background: var(--color-primary-hover); +} + +.btn--primary:active { + background: var(--color-primary-active); +} + +.btn--secondary { + background: var(--color-secondary); + color: var(--color-text); +} + +.btn--secondary:hover { + background: var(--color-secondary-hover); +} + +.btn--secondary:active { + background: var(--color-secondary-active); +} + +.btn--outline { + background: transparent; + border: 1px solid var(--color-border); + color: var(--color-text); +} + +.btn--outline:hover { + background: var(--color-secondary); +} + +.btn--sm { + padding: var(--space-4) var(--space-12); + font-size: var(--font-size-sm); + border-radius: var(--radius-sm); +} + +.btn--lg { + padding: var(--space-10) var(--space-20); + font-size: var(--font-size-lg); + border-radius: var(--radius-md); +} + +.btn--full-width { + width: 100%; +} + +.btn:disabled { + opacity: 0.5; + cursor: not-allowed; +} + +/* Form elements */ +.form-control { + display: block; + width: 100%; + padding: var(--space-8) var(--space-12); + font-size: var(--font-size-md); + line-height: 1.5; + color: var(--color-text); + background-color: var(--color-surface); + border: 1px solid var(--color-border); + border-radius: var(--radius-base); + transition: border-color var(--duration-fast) var(--ease-standard), + box-shadow var(--duration-fast) var(--ease-standard); +} + +textarea.form-control { + font-family: var(--font-family-base); + font-size: var(--font-size-base); +} + +select.form-control { + padding: var(--space-8) var(--space-12); + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + background-image: var(--select-caret-light); + background-repeat: no-repeat; + background-position: right var(--space-12) center; + background-size: 16px; + padding-right: var(--space-32); +} + +/* Add a dark mode specific caret */ +@media (prefers-color-scheme: dark) { + select.form-control { + background-image: var(--select-caret-dark); + } +} + +/* Also handle data-color-scheme */ +[data-color-scheme="dark"] select.form-control { + background-image: var(--select-caret-dark); +} + +[data-color-scheme="light"] select.form-control { + background-image: var(--select-caret-light); +} + +.form-control:focus { + border-color: var(--color-primary); + outline: var(--focus-outline); +} + +.form-label { + display: block; + margin-bottom: var(--space-8); + font-weight: var(--font-weight-medium); + font-size: var(--font-size-sm); +} + +.form-group { + margin-bottom: var(--space-16); +} + +/* Card component */ +.card { + background-color: var(--color-surface); + border-radius: var(--radius-lg); + border: 1px solid var(--color-card-border); + box-shadow: var(--shadow-sm); + overflow: hidden; + transition: box-shadow var(--duration-normal) var(--ease-standard); +} + +.card:hover { + box-shadow: var(--shadow-md); +} + +.card__body { + padding: var(--space-16); +} + +.card__header, +.card__footer { + padding: var(--space-16); + border-bottom: 1px solid var(--color-card-border-inner); +} + +/* Status indicators - simplified with CSS variables */ +.status { + display: inline-flex; + align-items: center; + padding: var(--space-6) var(--space-12); + border-radius: var(--radius-full); + font-weight: var(--font-weight-medium); + font-size: var(--font-size-sm); +} + +.status--success { + background-color: rgba( + var(--color-success-rgb, 33, 128, 141), + var(--status-bg-opacity) + ); + color: var(--color-success); + border: 1px solid + rgba(var(--color-success-rgb, 33, 128, 141), var(--status-border-opacity)); +} + +.status--error { + background-color: rgba( + var(--color-error-rgb, 192, 21, 47), + var(--status-bg-opacity) + ); + color: var(--color-error); + border: 1px solid + rgba(var(--color-error-rgb, 192, 21, 47), var(--status-border-opacity)); +} + +.status--warning { + background-color: rgba( + var(--color-warning-rgb, 168, 75, 47), + var(--status-bg-opacity) + ); + color: var(--color-warning); + border: 1px solid + rgba(var(--color-warning-rgb, 168, 75, 47), var(--status-border-opacity)); +} + +.status--info { + background-color: rgba( + var(--color-info-rgb, 98, 108, 113), + var(--status-bg-opacity) + ); + color: var(--color-info); + border: 1px solid + rgba(var(--color-info-rgb, 98, 108, 113), var(--status-border-opacity)); +} + +/* Container layout */ +.container { + width: 100%; + margin-right: auto; + margin-left: auto; + padding-right: var(--space-16); + padding-left: var(--space-16); +} + +@media (min-width: 640px) { + .container { + max-width: var(--container-sm); + } +} +@media (min-width: 768px) { + .container { + max-width: var(--container-md); + } +} +@media (min-width: 1024px) { + .container { + max-width: var(--container-lg); + } +} +@media (min-width: 1280px) { + .container { + max-width: var(--container-xl); + } +} + +/* Utility classes */ +.flex { + display: flex; +} +.flex-col { + flex-direction: column; +} +.items-center { + align-items: center; +} +.justify-center { + justify-content: center; +} +.justify-between { + justify-content: space-between; +} +.gap-4 { + gap: var(--space-4); +} +.gap-8 { + gap: var(--space-8); +} +.gap-16 { + gap: var(--space-16); +} + +.m-0 { + margin: 0; +} +.mt-8 { + margin-top: var(--space-8); +} +.mb-8 { + margin-bottom: var(--space-8); +} +.mx-8 { + margin-left: var(--space-8); + margin-right: var(--space-8); +} +.my-8 { + margin-top: var(--space-8); + margin-bottom: var(--space-8); +} + +.p-0 { + padding: 0; +} +.py-8 { + padding-top: var(--space-8); + padding-bottom: var(--space-8); +} +.px-8 { + padding-left: var(--space-8); + padding-right: var(--space-8); +} +.py-16 { + padding-top: var(--space-16); + padding-bottom: var(--space-16); +} +.px-16 { + padding-left: var(--space-16); + padding-right: var(--space-16); +} + +.block { + display: block; +} +.hidden { + display: none; +} + +/* Accessibility */ +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border-width: 0; +} + +:focus-visible { + outline: var(--focus-outline); + outline-offset: 2px; +} + +/* Dark mode specifics */ +[data-color-scheme="dark"] .btn--outline { + border: 1px solid var(--color-border-secondary); +} + +@font-face { + font-family: 'FKGroteskNeue'; + src: url('https://r2cdn.perplexity.ai/fonts/FKGroteskNeue.woff2') + format('woff2'); +} + +.task-card { + background: var(--color-surface); + border-radius: var(--radius-lg); + padding: var(--space-16); + margin-bottom: var(--space-12); + display: flex; + gap: var(--space-12); + align-items: flex-start; + box-shadow: var(--shadow-sm); + border: 1px solid var(--color-card-border); + transition: all var(--duration-normal) var(--ease-standard); + animation: fadeIn var(--duration-normal) var(--ease-standard); +} + +@keyframes fadeIn { + from { + opacity: 0; + transform: translateY(-10px); + } + to { + opacity: 1; + transform: translateY(0); + } +} + +.task-card:hover { + box-shadow: var(--shadow-md); + transform: translateY(-2px); +} + +.task-card.dragging { + background: var(--color-secondary); + opacity: 0.7; +} + +.task-card.editing { + background: var(--color-surface); + border: 2px solid var(--color-primary); +} + +.task-handle { + color: var(--color-border); + font-size: var(--font-size-xl); + cursor: grab; + user-select: none; + padding-top: var(--space-2); + flex-shrink: 0; +} + +.task-handle:active { + cursor: grabbing; +} + +.task-content { + flex: 1; + min-width: 0; +} + +.task-title { + margin: 0 0 var(--space-6) 0; + font-size: var(--font-size-lg); + font-weight: var(--font-weight-semibold); + color: var(--color-text); + word-break: break-word; + line-height: var(--line-height-tight); +} + +.task-description { + margin: 0 0 var(--space-10) 0; + font-size: var(--font-size-base); + color: var(--color-text-secondary); + line-height: var(--line-height-normal); + word-break: break-word; + white-space: pre-wrap; +} + +.task-meta { + display: flex; + gap: var(--space-12); + align-items: center; +} + +.task-date { + font-size: var(--font-size-sm); + color: var(--color-text-secondary); +} + +.task-actions { + display: flex; + gap: var(--space-6); + flex-shrink: 0; + opacity: 0; + transition: opacity var(--duration-fast) var(--ease-standard); +} + +.task-card:hover .task-actions { + opacity: 1; +} + +.btn-edit, +.btn-delete { + width: 32px; + height: 32px; + border: none; + border-radius: var(--radius-base); + cursor: pointer; + font-size: var(--font-size-md); + transition: all var(--duration-fast) var(--ease-standard); + display: flex; + align-items: center; + justify-content: center; + background: transparent; +} + +.btn-edit { + color: var(--color-primary); + background: rgba(var(--color-teal-500-rgb), 0.12); +} + +.btn-edit:hover { + background: rgba(var(--color-teal-500-rgb), 0.2); +} + +.btn-edit:focus-visible { + outline: var(--focus-outline); + outline-offset: 2px; +} + +.btn-delete { + color: var(--color-error); + background: rgba(var(--color-error-rgb), 0.12); +} + +.btn-delete:hover { + background: rgba(var(--color-error-rgb), 0.2); +} + +.btn-delete:focus-visible { + outline: var(--focus-outline); + outline-offset: 2px; +} + +.edit-form { + display: flex; + flex-direction: column; + gap: var(--space-10); + width: 100%; +} + +.edit-input, +.edit-textarea { + padding: var(--space-10) var(--space-12); + border: 2px solid var(--color-primary); + border-radius: var(--radius-base); + font-family: var(--font-family-base); + font-size: var(--font-size-base); + color: var(--color-text); + background-color: var(--color-surface); + outline: none; + transition: box-shadow var(--duration-fast) var(--ease-standard); +} + +.edit-input:focus, +.edit-textarea:focus { + box-shadow: var(--focus-ring); + outline: var(--focus-outline); +} + +.edit-textarea { + min-height: 80px; + resize: vertical; +} + +.edit-actions { + display: flex; + gap: var(--space-8); +} + +.btn-save, +.btn-cancel { + flex: 1; + padding: var(--space-8) var(--space-12); + border: none; + border-radius: var(--radius-base); + font-weight: var(--font-weight-semibold); + cursor: pointer; + transition: all var(--duration-fast) var(--ease-standard); + font-size: var(--font-size-base); +} + +.btn-save { + background: var(--color-success); + color: var(--color-btn-primary-text); +} + +.btn-save:hover { + background: rgba(var(--color-success-rgb), 0.85); +} + +.btn-save:focus-visible { + outline: var(--focus-outline); + outline-offset: 2px; +} + +.btn-cancel { + background: var(--color-secondary); + color: var(--color-text); +} + +.btn-cancel:hover { + background: var(--color-secondary-hover); +} + +.btn-cancel:focus-visible { + outline: var(--focus-outline); + outline-offset: 2px; +} + +/* Mobile responsive styles */ +@media (max-width: 480px) { + .task-card { + padding: var(--space-12); + gap: var(--space-8); + margin-bottom: var(--space-8); + } + + .task-handle { + font-size: var(--font-size-lg); + } + + .task-title { + font-size: var(--font-size-md); + margin: 0 0 var(--space-4) 0; + } + + .task-description { + font-size: var(--font-size-sm); + margin: 0 0 var(--space-8) 0; + } + + .task-meta { + flex-wrap: wrap; + gap: var(--space-8); + } + + .task-date { + font-size: var(--font-size-xs); + } + + .task-actions { + opacity: 1; + gap: var(--space-4); + } + + .btn-edit, + .btn-delete { + width: 28px; + height: 28px; + font-size: var(--font-size-sm); + } + + .edit-form { + gap: var(--space-8); + } + + .edit-input, + .edit-textarea { + padding: var(--space-8) var(--space-10); + font-size: var(--font-size-sm); + } + + .edit-actions { + gap: var(--space-6); + } + + .btn-save, + .btn-cancel { + padding: var(--space-8) var(--space-10); + font-size: var(--font-size-sm); + } +} \ No newline at end of file diff --git a/client/src/components/TaskCard.tsx b/client/src/components/TaskCard.tsx new file mode 100644 index 0000000..8f82f31 --- /dev/null +++ b/client/src/components/TaskCard.tsx @@ -0,0 +1,87 @@ +import React, { useState } from 'react'; +import { FocusTask } from '../types'; +import './TaskCard.css'; + +interface TaskCardProps { + task: FocusTask; + onUpdate: (title: string, description?: string) => void; + onDelete: () => void; +} + +const TaskCard: React.FC = ({ task, onUpdate, onDelete }) => { + const [isEditing, setIsEditing] = useState(false); + const [editTitle, setEditTitle] = useState(task.title); + const [editDescription, setEditDescription] = useState(task.description || ''); + + const handleSave = () => { + if (editTitle.trim()) { + onUpdate(editTitle, editDescription); + setIsEditing(false); + } + }; + + const handleCancel = () => { + setEditTitle(task.title); + setEditDescription(task.description || ''); + setIsEditing(false); + }; + + if (isEditing) { + return ( +
+
+ setEditTitle(e.target.value)} + className="edit-input" + autoFocus + /> +