diff --git a/README.md b/README.md index 70a34af..cae2c50 100644 --- a/README.md +++ b/README.md @@ -11,9 +11,9 @@ prüft sich selbst und meldet sich, wenn etwas nicht stimmt. | Bahn | Was sie tut | Wo | |---|---|---| -| **Steuerzentrale** | Modelle, Routing, Wartung, Gedächtnis, Ideen-Queue, Auftragsbuch | MC2 `:9001` | +| **Steuerzentrale** | Modelle, Routing, Wartung, Gedächtnis, Ideen-Queue | MC2 `:9001` | | **Coding** | Agentic IDE (z.B. OpenCode Desktop) auf Dev-PC via lokaler API + MCP | 100% lokal | -| **Lucy** | Sprach-Companion mit 3D-Avatar, Augen und Ohren | eigenes Repo `Hitonabi/lucy` | +| **Lucy** | Innere Stimme am PC (HUD, kein Avatar) und auf Telegram — eine Stimme, ein Hirn | eigenes Repo `Hitonabi/lucy` | Lucy holt ihr Hirn direkt über das MC2-Gateway (`:9010/v1`) mit nativer Bildweiche und Voice-Streaming. @@ -30,7 +30,7 @@ Lucy holt ihr Hirn direkt über das MC2-Gateway (`:9010/v1`) mit nativer Bildwei Units in [`deploy/`](deploy/): `mission-control-2` · `mc2-gateway` · `mc2-steward` · `mem0-service` · `voice-service` · `box-console` · `hermes-builtin-ui` + Timer für Backup, -Auto-Update, Self-Smoke und Bagatell-Annahme. `llama-swap` läuft als System-Unit. +Auto-Update und Self-Smoke. `llama-swap` läuft als System-Unit. ## Die Bau-Pipeline @@ -98,7 +98,7 @@ Kontext-Komprimierung löscht still die Regeln mit. ## API (Auswahl) `health · models/* · discover · fit · groups · routing/* · system/* · maintenance/* · connect · -memory/* · agent/* · ideen/* · auftragsbuch/* · chronik · eigenleben · wissen · +memory/* · agent/* · ideen/* · lucy/stimme/* · chronik · eigenleben · wissen · zeitmaschine/* · reminders/* · voice/* · events (SSE)` OpenAI-kompatibel: `/v1/chat/completions`, `/v1/completions`. MCP-Server: [`mcp/`](mcp/). @@ -142,7 +142,6 @@ Dienst-Neustart. Vor jedem Commit lohnt der Ampel-Vorlauf: `ruff check .` und `n | [`docs/BEDIENUNG.md`](docs/BEDIENUNG.md) | Wie man MC2 benutzt | | [`docs/RUNBOOK.md`](docs/RUNBOOK.md) · [`docs/DISASTER_RECOVERY.md`](docs/DISASTER_RECOVERY.md) | Betrieb, Störungen, Wiederherstellung | | [`docs/HERMES_SETUP.md`](docs/HERMES_SETUP.md) | Hermes-Agent, Profile, Crons | -| [`docs/AUFTRAGSBUCH.md`](docs/AUFTRAGSBUCH.md) | Vorschlags-Inbox und das Ein-Klick-Gate | | [`docs/wissen/VERDIKTE.md`](docs/wissen/VERDIKTE.md) | **Finale Technik-Entscheide — nicht neu aufrollen** | | [`docs/wissen/FALLEN.md`](docs/wissen/FALLEN.md) · [`docs/wissen/OFFENE-FAEDEN.md`](docs/wissen/OFFENE-FAEDEN.md) | Stolpersteine · offene Punkte | diff --git a/backend/app.py b/backend/app.py index 487627a..d140066 100644 --- a/backend/app.py +++ b/backend/app.py @@ -21,7 +21,6 @@ from fastapi.responses import FileResponse from fastapi.staticfiles import StaticFiles from routers import ( agent, - auftragsbuch, chronik, connect, console, @@ -126,7 +125,6 @@ if V1_UPSTREAM: else: app.include_router(gateway_proxy.router) # OpenAI-kompatibler /v1-Gateway (model:auto) app.include_router(maintenance.router) -app.include_router(auftragsbuch.router) # Vorschlags-Inbox (Mensch-Gate als Klick) app.include_router(ideen.router) # Ideen-Queue (natives Hermes-Kanban) — Tür der Zentrale app.include_router(chronik.router) # Timeline der autonomen Taten (Announce-Store) app.include_router(events.router) # SSE-Eventstrom /api/events (P3a) — Invalidation-Bus diff --git a/backend/config.py b/backend/config.py index c6cd27d..c18e5dc 100644 --- a/backend/config.py +++ b/backend/config.py @@ -1,142 +1,142 @@ -""" -Zentrale Konfiguration für Mission Control 2.0. - -Eine Quelle der Wahrheit für Pfade, URLs und Defaults — alles über Env-Vars -überschreibbar. Bewusst schlank: MC 2.0 ist ein Glue-Cockpit, das vorhandene -Dienste (llama-swap, LiteLLM-Gateway, Hermes) steuert, statt sie nachzubauen. -""" - -import os -from pathlib import Path - -from ruamel.yaml import YAML - -# --- Engine (llama-swap) ----------------------------------------------------- -LLAMA_SWAP_URL = os.environ.get("MC_LLAMA_SWAP_URL", "http://127.0.0.1:8080").rstrip("/") -CONFIG_PATH = Path(os.environ.get("MC_CONFIG_PATH", "/etc/llama-swap/config.yaml")) -MODELS_DIR = Path(os.environ.get("MC_MODELS_DIR", "/srv/models")) -# Cache der Modell-Entdeckung ("aktuell beste Modelle", live von HuggingFace). -# Persistent neben den Modellen (übersteht Deploys). TTL = Frische-Fenster. -DISCOVER_CACHE_PATH = Path(os.environ.get("MC_DISCOVER_CACHE", str(MODELS_DIR / "mc2-discover.json"))) -DISCOVER_TTL = int(os.environ.get("MC_DISCOVER_TTL", "43200")) # 12 h -# Gedächtnis: MC2 hält KEINS mehr. Bis August 2026 lief hier erst eine eigene SQLite-DB, -# dann ein semantischer Sidecar auf :8765 — beides ist abgelöst, der Port ist tot. -# Einzige Gedächtnis-Wahrheit ist jetzt Hermes selbst (HERMES_API_URL, siehe unten). -# Befehl-Vorlage für llama-swap: {model}=GGUF-Pfad, {ctx}=Kontext, ${PORT} bleibt stehen. -# Hinweis: --prompt-cache/--prompt-cache-all sind llama-CLI-Flags, NICHT llama-server — -# llama-server lehnt sie ab ("invalid argument") und startet dann nicht. Prompt-Caching -# macht llama-server ohnehin automatisch pro Slot (KV-Reuse). -_DEFAULT_CMD_TEMPLATE = ( - "llama-server -m {model} --host 127.0.0.1 --port ${PORT} " - "-c {ctx} -ngl 999 -fa on --no-mmap" -) -CMD_TEMPLATE = os.environ.get("MC_CMD_TEMPLATE", _DEFAULT_CMD_TEMPLATE) -if "{model}" not in CMD_TEMPLATE: - CMD_TEMPLATE = _DEFAULT_CMD_TEMPLATE -DEFAULT_TTL = int(os.environ.get("MC_DEFAULT_TTL", "300")) -# Verzeichnis mit Draft-Modellen für Speculative Decoding. Beim Hinzufügen eines -# fast/coder-Modells wird hieraus automatisch ein **vocab-kompatibler** Draft gewählt -# (Vocab-Check via services.gguf_meta; ein inkompatibler Draft lässt llama.cpp scheitern). -DRAFTS_DIR = Path(os.environ.get("MC_DRAFTS_DIR", str(MODELS_DIR / "drafts"))) -# Optionaler expliziter Default-Draft (leer = Auto-Erkennung aus DRAFTS_DIR). Wird nur -# verwendet, wenn er zum Ziel-Modell vocab-kompatibel ist. (Früher fix qwen2.5 → entfernt, -# weil das mit neueren Vocabs wie Qwen3.6 inkompatibel ist und Spec stillschweigend brach.) -SPEC_DRAFT_MODEL_PATH = os.environ.get("MC_SPEC_DRAFT_MODEL", "") -# Speculative-Decoding-Typ (llama.cpp dieser Generation braucht --spec-type zusätzlich -# zu --spec-draft-model, sonst ist Spec inaktiv). -SPEC_TYPE = os.environ.get("MC_SPEC_TYPE", "draft-simple") -# MTP-Speculative-Decoding (Multi-Token-Prediction): manche Modelle bringen einen eigenen -# MTP-Kopf mit (z.B. gemma-4 → arch 'gemma4-assistant', Datei 'mtp-*.gguf'). Der wird mit -# `--model-draft --spec-type draft-mtp --spec-draft-n-max N` geladen (NICHT -# --spec-draft-model/draft-simple). 1,5–2× Durchsatz bei null Qualitätsverlust. -SPEC_DRAFT_N_MAX = int(os.environ.get("MC_SPEC_DRAFT_N_MAX", "4")) -# Env für HuggingFace-Downloads: XET deaktivieren (Hänger bei ~6 MB, siehe v1-Gotcha). -HF_DOWNLOAD_ENV = {"HF_HUB_DISABLE_XET": "1"} - -# --- Routing-Gateway (builtin in MC2, model: auto) --------------------------- -# MC2 IST der Gateway (services/gateway.py + routers/gateway_proxy.py). KEIN externer -# LiteLLM-Dienst (scheitert auf Python 3.14). Daher keine Gateway-Config-Datei mehr. -GATEWAY_URL = os.environ.get("MC_GATEWAY_URL", f"http://127.0.0.1:{os.environ.get('MC_PORT', '9000')}").rstrip("/") -# Gateway-Auszug (UMBAU v3 P1): Ist MC_V1_UPSTREAM gesetzt (Unit-Env, z. B. -# http://127.0.0.1:9010), bedient der eigenständige mc2-gateway-Prozess den /v1-Pfad -# und MC2 reicht /v1 nur noch roh durch (routers/gateway_forward.py). Leer = altes -# Verhalten, MC2 bedient /v1 selbst — die Zeile aus der Unit nehmen ist der Rollback. -V1_UPSTREAM = os.environ.get("MC_V1_UPSTREAM", "").rstrip("/") - -# --- Hermes Agent (eigener Dienst auf der Box) ------------------------------- -# Gateway (OpenAI-API des Agenten) + interaktives Web-Terminal (ttyd → `hermes chat`). -HERMES_API_URL = os.environ.get("HERMES_API_URL", "http://127.0.0.1:8642").rstrip("/") -# API-Key der Hermes-`api_server`-Plattform (~/.hermes/.env: API_SERVER_KEY). Nötig für -# /v1/chat/completions (Voice-Pipeline) — Bearer-Auth, sonst 401. Derselbe volle Agent -# (Tools + eigenes Gedächtnis) wie CLI/Telegram, nur über HTTP. -def _read_hermes_env(key: str) -> str: - """Liest einen Schlüssel aus ~/.hermes/.env (Fallback, falls nicht in der Prozess-Env). - Der MC2-Dienst erbt die Hermes-Secrets sonst nicht.""" - try: - env_path = Path(os.path.expanduser(os.environ.get("HERMES_HOME", "~/.hermes"))) / ".env" - for line in env_path.read_text(encoding="utf-8").splitlines(): - line = line.strip() - if line.startswith(f"{key}="): - return line.split("=", 1)[1].strip().strip('"').strip("'") - except OSError: - pass - return "" - - -HERMES_API_KEY = ( - os.environ.get("HERMES_API_KEY") - or os.environ.get("API_SERVER_KEY") - or _read_hermes_env("API_SERVER_KEY") -) -# Modellfeld im OpenAI-Request; die api_server-Plattform nutzt ihr konfiguriertes Hirn, -# das Feld ist i.d.R. kosmetisch. Override via Env, falls die Plattform strikt prüft. -HERMES_API_MODEL = os.environ.get("HERMES_API_MODEL", "hermes") - -# --- Voice-Sidecar (STT faster-whisper + TTS Piper/Chatterbox) --------------- -# Eigenes Python-3.12-venv (~/.voice/venv), weil Parakeet/Piper nicht ins 3.14-Backend-venv -# passen. MC2 proxyt nach außen. -VOICE_SERVICE_URL = os.environ.get("MC_VOICE_SERVICE_URL", "http://127.0.0.1:8650").rstrip("/") -# --- Lucys Stimme (lucy-stimme.service, pocket-tts german_24l, Klon aus ref.mp3) ----------- -# Eigener User-Dienst in ~/.lucy-stimme (nur Loopback :8021). Spricht die Telegram-Sprachnachrichten -# UND — seit dem Raphael-Umbau der Desktop-Lucy (04.09.2026) — auch den PC: MC2 reicht ihn unter -# /api/lucy/stimme/* ins LAN (routers/voice.py). EINE Stimme für alle Türen. :8650 ist NICHT Lucy. -LUCY_STIMME_URL = os.environ.get("MC_LUCY_STIMME_URL", "http://127.0.0.1:8021").rstrip("/") -# Box-Konsole: ttyd-Web-Terminal (echte Login-Shell). Bindet NUR an Loopback -# (127.0.0.1:7682, base-path /console) und wird von MC2 über den ohnehin offenen Port 9001 -# rückwärts geproxyt (routers/console.py → same-origin /console/). So braucht die Konsole -# KEINE eigene Firewall-Freigabe (Port 7682 ist von außen dicht) und keinen sudo-Eingriff. -# Direkter, SSH-artiger Zugriff, kein Passwort — gleiches LAN-Trust-Modell wie das Dashboard. -BOX_CONSOLE_UPSTREAM = os.environ.get("MC_BOX_CONSOLE_UPSTREAM", "http://127.0.0.1:7682").rstrip("/") -# Öffentlicher, gleicher-Ursprung-Pfad, unter dem MC2 die Konsole ausliefert (iframe-Ziel). -BOX_CONSOLE_PATH = "/console/" -# Eingebaute Hermes-Web-GUI (`hermes serve`/`dashboard` — die richtige Agent-Oberfläche mit -# Threads/Tool-Calls, die auch die Electron-Desktop-App umhüllt). ‼️ Sie bindet NICHT auf Loopback: -# ein systemd-Drop-in überschreibt `--host 127.0.0.1` mit `0.0.0.0` und setzt dafür ein -# Session-Token. Dass sie trotzdem nicht im LAN hängt, liegt allein an ufw (9119 ist nicht -# freigegeben — am 27.08.2026 von einem zweiten Rechner aus gegengeprüft). Wer die Firewall -# anfasst, öffnet damit auch diese Oberfläche. MC2 erreicht sie über Loopback und reicht sie -# same-origin unter -# /hermes-ui/ durchgereicht (routers/hermes_ui.py). Anders als das ttyd-Terminal ist es eine volle -# SPA → das Bundle wird mit Vite-base=/hermes-ui/ gebaut, damit Assets/API/WS unter dem Präfix -# liegen; der Proxy streift /hermes-ui ab. Kein eigener Firewall-Port nötig. -HERMES_BUILTIN_UI_UPSTREAM = os.environ.get("MC_HERMES_BUILTIN_UI_UPSTREAM", "http://127.0.0.1:9119").rstrip("/") -HERMES_BUILTIN_UI_PATH = "/hermes-ui/" -# GitHub-Repo für Update-Checks. -HERMES_AGENT_REPO = os.environ.get("MC_HERMES_AGENT_REPO", "NousResearch/hermes-agent") -HERMES_HOME = Path(os.path.expanduser(os.environ.get("HERMES_HOME", "~/.hermes"))) -# PC Executor — läuft auf dem Windows-PC, erreichbar über LAN. -PC_EXECUTOR_URL = os.environ.get("MC_PC_EXECUTOR_URL", "http://192.168.178.98:7777").rstrip("/") - -# --- Server ------------------------------------------------------------------ -HOST = os.environ.get("MC_HOST", "0.0.0.0") -PORT = int(os.environ.get("MC_PORT", "9000")) -# Gebautes React-Frontend (frontend/dist). In Prod liefert FastAPI es statisch aus; -# im Dev läuft der Vite-Dev-Server separat und proxyt /api hierher. -FRONTEND_DIST = Path(os.environ.get("MC_FRONTEND_DIST", str(Path(__file__).resolve().parent.parent / "frontend" / "dist"))) - -# Version (Phase 0 — Greenfield-Skeleton). -VERSION = "2.0.0-w8" - -# Gemeinsame YAML-Instanz (preserve_quotes hält Kommentare/Quotes in config.yaml). -yaml = YAML() -yaml.preserve_quotes = True +""" +Zentrale Konfiguration für Mission Control 2.0. + +Eine Quelle der Wahrheit für Pfade, URLs und Defaults — alles über Env-Vars +überschreibbar. Bewusst schlank: MC 2.0 ist ein Glue-Cockpit, das vorhandene +Dienste (llama-swap, LiteLLM-Gateway, Hermes) steuert, statt sie nachzubauen. +""" + +import os +from pathlib import Path + +from ruamel.yaml import YAML + +# --- Engine (llama-swap) ----------------------------------------------------- +LLAMA_SWAP_URL = os.environ.get("MC_LLAMA_SWAP_URL", "http://127.0.0.1:8080").rstrip("/") +CONFIG_PATH = Path(os.environ.get("MC_CONFIG_PATH", "/etc/llama-swap/config.yaml")) +MODELS_DIR = Path(os.environ.get("MC_MODELS_DIR", "/srv/models")) +# Cache der Modell-Entdeckung ("aktuell beste Modelle", live von HuggingFace). +# Persistent neben den Modellen (übersteht Deploys). TTL = Frische-Fenster. +DISCOVER_CACHE_PATH = Path(os.environ.get("MC_DISCOVER_CACHE", str(MODELS_DIR / "mc2-discover.json"))) +DISCOVER_TTL = int(os.environ.get("MC_DISCOVER_TTL", "43200")) # 12 h +# Gedächtnis: MC2 hält KEINS mehr. Bis August 2026 lief hier erst eine eigene SQLite-DB, +# dann ein semantischer Sidecar auf :8765 — beides ist abgelöst, der Port ist tot. +# Einzige Gedächtnis-Wahrheit ist jetzt Hermes selbst (HERMES_API_URL, siehe unten). +# Befehl-Vorlage für llama-swap: {model}=GGUF-Pfad, {ctx}=Kontext, ${PORT} bleibt stehen. +# Hinweis: --prompt-cache/--prompt-cache-all sind llama-CLI-Flags, NICHT llama-server — +# llama-server lehnt sie ab ("invalid argument") und startet dann nicht. Prompt-Caching +# macht llama-server ohnehin automatisch pro Slot (KV-Reuse). +_DEFAULT_CMD_TEMPLATE = ( + "llama-server -m {model} --host 127.0.0.1 --port ${PORT} " + "-c {ctx} -ngl 999 -fa on --no-mmap" +) +CMD_TEMPLATE = os.environ.get("MC_CMD_TEMPLATE", _DEFAULT_CMD_TEMPLATE) +if "{model}" not in CMD_TEMPLATE: + CMD_TEMPLATE = _DEFAULT_CMD_TEMPLATE +DEFAULT_TTL = int(os.environ.get("MC_DEFAULT_TTL", "300")) +# Verzeichnis mit Draft-Modellen für Speculative Decoding. Beim Hinzufügen eines +# fast/coder-Modells wird hieraus automatisch ein **vocab-kompatibler** Draft gewählt +# (Vocab-Check via services.gguf_meta; ein inkompatibler Draft lässt llama.cpp scheitern). +DRAFTS_DIR = Path(os.environ.get("MC_DRAFTS_DIR", str(MODELS_DIR / "drafts"))) +# Optionaler expliziter Default-Draft (leer = Auto-Erkennung aus DRAFTS_DIR). Wird nur +# verwendet, wenn er zum Ziel-Modell vocab-kompatibel ist. (Früher fix qwen2.5 → entfernt, +# weil das mit neueren Vocabs wie Qwen3.6 inkompatibel ist und Spec stillschweigend brach.) +SPEC_DRAFT_MODEL_PATH = os.environ.get("MC_SPEC_DRAFT_MODEL", "") +# Speculative-Decoding-Typ (llama.cpp dieser Generation braucht --spec-type zusätzlich +# zu --spec-draft-model, sonst ist Spec inaktiv). +SPEC_TYPE = os.environ.get("MC_SPEC_TYPE", "draft-simple") +# MTP-Speculative-Decoding (Multi-Token-Prediction): manche Modelle bringen einen eigenen +# MTP-Kopf mit (z.B. gemma-4 → arch 'gemma4-assistant', Datei 'mtp-*.gguf'). Der wird mit +# `--model-draft --spec-type draft-mtp --spec-draft-n-max N` geladen (NICHT +# --spec-draft-model/draft-simple). 1,5–2× Durchsatz bei null Qualitätsverlust. +SPEC_DRAFT_N_MAX = int(os.environ.get("MC_SPEC_DRAFT_N_MAX", "4")) +# Env für HuggingFace-Downloads: XET deaktivieren (Hänger bei ~6 MB, siehe v1-Gotcha). +HF_DOWNLOAD_ENV = {"HF_HUB_DISABLE_XET": "1"} + +# --- Routing-Gateway (builtin in MC2, model: auto) --------------------------- +# MC2 IST der Gateway (services/gateway.py + routers/gateway_proxy.py). KEIN externer +# LiteLLM-Dienst (scheitert auf Python 3.14). Daher keine Gateway-Config-Datei mehr. +GATEWAY_URL = os.environ.get("MC_GATEWAY_URL", f"http://127.0.0.1:{os.environ.get('MC_PORT', '9000')}").rstrip("/") +# Gateway-Auszug (UMBAU v3 P1): Ist MC_V1_UPSTREAM gesetzt (Unit-Env, z. B. +# http://127.0.0.1:9010), bedient der eigenständige mc2-gateway-Prozess den /v1-Pfad +# und MC2 reicht /v1 nur noch roh durch (routers/gateway_forward.py). Leer = altes +# Verhalten, MC2 bedient /v1 selbst — die Zeile aus der Unit nehmen ist der Rollback. +V1_UPSTREAM = os.environ.get("MC_V1_UPSTREAM", "").rstrip("/") + +# --- Hermes Agent (eigener Dienst auf der Box) ------------------------------- +# Gateway (OpenAI-API des Agenten) + interaktives Web-Terminal (ttyd → `hermes chat`). +HERMES_API_URL = os.environ.get("HERMES_API_URL", "http://127.0.0.1:8642").rstrip("/") +# API-Key der Hermes-`api_server`-Plattform (~/.hermes/.env: API_SERVER_KEY). Nötig für +# /v1/chat/completions (Voice-Pipeline) — Bearer-Auth, sonst 401. Derselbe volle Agent +# (Tools + eigenes Gedächtnis) wie CLI/Telegram, nur über HTTP. +def _read_hermes_env(key: str) -> str: + """Liest einen Schlüssel aus ~/.hermes/.env (Fallback, falls nicht in der Prozess-Env). + Der MC2-Dienst erbt die Hermes-Secrets sonst nicht.""" + try: + env_path = Path(os.path.expanduser(os.environ.get("HERMES_HOME", "~/.hermes"))) / ".env" + for line in env_path.read_text(encoding="utf-8").splitlines(): + line = line.strip() + if line.startswith(f"{key}="): + return line.split("=", 1)[1].strip().strip('"').strip("'") + except OSError: + pass + return "" + + +HERMES_API_KEY = ( + os.environ.get("HERMES_API_KEY") + or os.environ.get("API_SERVER_KEY") + or _read_hermes_env("API_SERVER_KEY") +) +# Modellfeld im OpenAI-Request; die api_server-Plattform nutzt ihr konfiguriertes Hirn, +# das Feld ist i.d.R. kosmetisch. Override via Env, falls die Plattform strikt prüft. +HERMES_API_MODEL = os.environ.get("HERMES_API_MODEL", "hermes") + +# --- Voice-Sidecar (STT faster-whisper + TTS Piper/Chatterbox) --------------- +# Eigenes Python-3.12-venv (~/.voice/venv), weil Parakeet/Piper nicht ins 3.14-Backend-venv +# passen. MC2 proxyt nach außen. +VOICE_SERVICE_URL = os.environ.get("MC_VOICE_SERVICE_URL", "http://127.0.0.1:8650").rstrip("/") +# --- Lucys Stimme (lucy-stimme.service, pocket-tts german_24l, Klon aus ref.mp3) ----------- +# Eigener User-Dienst in ~/.lucy-stimme (nur Loopback :8021). Spricht die Telegram-Sprachnachrichten +# UND — seit dem Raphael-Umbau der Desktop-Lucy (04.09.2026) — auch den PC: MC2 reicht ihn unter +# /api/lucy/stimme/* ins LAN (routers/voice.py). EINE Stimme für alle Türen. :8650 ist NICHT Lucy. +LUCY_STIMME_URL = os.environ.get("MC_LUCY_STIMME_URL", "http://127.0.0.1:8021").rstrip("/") +# Box-Konsole: ttyd-Web-Terminal (echte Login-Shell). Bindet NUR an Loopback +# (127.0.0.1:7682, base-path /console) und wird von MC2 über den ohnehin offenen Port 9001 +# rückwärts geproxyt (routers/console.py → same-origin /console/). So braucht die Konsole +# KEINE eigene Firewall-Freigabe (Port 7682 ist von außen dicht) und keinen sudo-Eingriff. +# Direkter, SSH-artiger Zugriff, kein Passwort — gleiches LAN-Trust-Modell wie das Dashboard. +BOX_CONSOLE_UPSTREAM = os.environ.get("MC_BOX_CONSOLE_UPSTREAM", "http://127.0.0.1:7682").rstrip("/") +# Öffentlicher, gleicher-Ursprung-Pfad, unter dem MC2 die Konsole ausliefert (iframe-Ziel). +BOX_CONSOLE_PATH = "/console/" +# Eingebaute Hermes-Web-GUI (`hermes serve`/`dashboard` — die richtige Agent-Oberfläche mit +# Threads/Tool-Calls, die auch die Electron-Desktop-App umhüllt). ‼️ Sie bindet NICHT auf Loopback: +# ein systemd-Drop-in überschreibt `--host 127.0.0.1` mit `0.0.0.0` und setzt dafür ein +# Session-Token. Dass sie trotzdem nicht im LAN hängt, liegt allein an ufw (9119 ist nicht +# freigegeben — am 27.08.2026 von einem zweiten Rechner aus gegengeprüft). Wer die Firewall +# anfasst, öffnet damit auch diese Oberfläche. MC2 erreicht sie über Loopback und reicht sie +# same-origin unter +# /hermes-ui/ durchgereicht (routers/hermes_ui.py). Anders als das ttyd-Terminal ist es eine volle +# SPA → das Bundle wird mit Vite-base=/hermes-ui/ gebaut, damit Assets/API/WS unter dem Präfix +# liegen; der Proxy streift /hermes-ui ab. Kein eigener Firewall-Port nötig. +HERMES_BUILTIN_UI_UPSTREAM = os.environ.get("MC_HERMES_BUILTIN_UI_UPSTREAM", "http://127.0.0.1:9119").rstrip("/") +HERMES_BUILTIN_UI_PATH = "/hermes-ui/" +# GitHub-Repo für Update-Checks. +HERMES_AGENT_REPO = os.environ.get("MC_HERMES_AGENT_REPO", "NousResearch/hermes-agent") +HERMES_HOME = Path(os.path.expanduser(os.environ.get("HERMES_HOME", "~/.hermes"))) +# PC Executor — läuft auf dem Windows-PC, erreichbar über LAN. +PC_EXECUTOR_URL = os.environ.get("MC_PC_EXECUTOR_URL", "http://192.168.178.22:7777").rstrip("/") # PC-IP seit 09/2026 .22 (vorher .98) + +# --- Server ------------------------------------------------------------------ +HOST = os.environ.get("MC_HOST", "0.0.0.0") +PORT = int(os.environ.get("MC_PORT", "9000")) +# Gebautes React-Frontend (frontend/dist). In Prod liefert FastAPI es statisch aus; +# im Dev läuft der Vite-Dev-Server separat und proxyt /api hierher. +FRONTEND_DIST = Path(os.environ.get("MC_FRONTEND_DIST", str(Path(__file__).resolve().parent.parent / "frontend" / "dist"))) + +# Version (Phase 0 — Greenfield-Skeleton). +VERSION = "2.0.0-w8" + +# Gemeinsame YAML-Instanz (preserve_quotes hält Kommentare/Quotes in config.yaml). +yaml = YAML() +yaml.preserve_quotes = True diff --git a/backend/routers/auftragsbuch.py b/backend/routers/auftragsbuch.py deleted file mode 100644 index 50e1f51..0000000 --- a/backend/routers/auftragsbuch.py +++ /dev/null @@ -1,63 +0,0 @@ -"""Auftragsbuch-Endpoints (Vorschlags-Inbox) — dünner REST-Layer über services/auftragsbuch.py. -LAN-only wie alle MC2-Endpoints; das Gate ist der Klick des Commanders.""" - -from fastapi import APIRouter, HTTPException -from pydantic import BaseModel -from services import auftragsbuch - -router = APIRouter(prefix="/api") - - -class BranchIn(BaseModel): - branch: str - repo: str = "mc2" # "mc2" (Box-Stack) oder "lucy" (Desktop-App, Annahme baut am PC) - grund: str = "" # nur beim Ablehnen: optionaler Grund → Lern-Gedächtnis des Kreislaufs - - -class KandidatIn(BaseModel): - file: str - - -@router.get("/auftragsbuch") -def list_proposals() -> dict: - return auftragsbuch.list_proposals() - - -@router.get("/auftragsbuch/diff") -def diff(branch: str, repo: str = "mc2") -> dict: - res = auftragsbuch.diff_of(branch, repo) - if not res.get("ok"): - raise HTTPException(400, res.get("error", "Diff nicht verfügbar.")) - return res - - -@router.post("/auftragsbuch/annehmen") -def accept(body: BranchIn) -> dict: - res = auftragsbuch.accept(body.branch, body.repo) - if not res.get("ok"): - raise HTTPException(400, res.get("error", "Annehmen fehlgeschlagen.")) - return res - - -@router.post("/auftragsbuch/ablehnen") -def reject(body: BranchIn) -> dict: - res = auftragsbuch.reject(body.branch, body.repo, body.grund) - if not res.get("ok"): - raise HTTPException(400, res.get("error", "Ablehnen fehlgeschlagen.")) - return res - - -@router.post("/auftragsbuch/skill/annehmen") -def skill_accept(body: KandidatIn) -> dict: - res = auftragsbuch.skill_accept(body.file) - if not res.get("ok"): - raise HTTPException(400, res.get("error", "Beauftragen fehlgeschlagen.")) - return res - - -@router.post("/auftragsbuch/skill/ablehnen") -def skill_reject(body: KandidatIn) -> dict: - res = auftragsbuch.skill_reject(body.file) - if not res.get("ok"): - raise HTTPException(400, res.get("error", "Verwerfen fehlgeschlagen.")) - return res diff --git a/backend/routers/chronik.py b/backend/routers/chronik.py index ac672b6..d69ebf2 100644 --- a/backend/routers/chronik.py +++ b/backend/routers/chronik.py @@ -1,6 +1,6 @@ """Chronik — die lesbare Timeline dessen, was die Box von allein getan und gemeldet hat. Quelle ist der persistente Melde-Briefkasten (services/announce.py): Health-Wächter, -Auto-Updates, Erinnerungen, Radar/Traum/Chef-Gutachter-Crons, Auftragsbuch — alle +Auto-Updates, Erinnerungen, Radar/Traum/Chef-Gutachter-Crons — alle autonomen Kanäle laufen dort bereits durch. Hier wird nichts Neues erhoben, nur erzählt.""" from fastapi import APIRouter diff --git a/backend/routers/events.py b/backend/routers/events.py index dd19020..6f284d9 100644 --- a/backend/routers/events.py +++ b/backend/routers/events.py @@ -79,9 +79,7 @@ def _fingerprints() -> dict[str, object]: ) except Exception: pass - # Auftragsbuch (Annahme-Status + Karten-Meldungen) & Erinnerungen: Datei-mtimes - fp["auftragsbuch"] = (_mtime(MODELS_DIR / "mc2-auftragsbuch.json"), - _mtime(MODELS_DIR / "mc2-announce-branches.json")) + # Erinnerungen: Datei-mtime (das Auftragsbuch ist seit 04.09.2026 ausgebaut) fp["reminders"] = _mtime(MODELS_DIR / "mc2-reminders.json") return fp diff --git a/backend/services/auftragsbuch.py b/backend/services/auftragsbuch.py deleted file mode 100644 index 629a8f0..0000000 --- a/backend/services/auftragsbuch.py +++ /dev/null @@ -1,525 +0,0 @@ -""" -Auftragsbuch — die Vorschlags-Inbox der Box (das Mensch-Gate als Klick statt Git-Handarbeit). - -Quellen der Karten: - • Vorschlags-Branches auf Gitea (wartung/*, orchestrator/*, doku/*) — die Werkstatt und der - Orchestrator arbeiten propose-only und lassen ihre Ergebnisse dort liegen. - Seit S3 (lucy-pipeline) aus ZWEI Repos: mission-control-v2 (Box-Stack) UND lucy (Desktop-App). - • Skill-Kandidaten aus dem Wissens-Vault (~/wissens-vault/skill-kandidaten/) — Vorschläge des - nächtlichen Traum-Crons, Gate war bisher „Commander sagt mach". - -Annehmen (Branch) startet den Repo-eigenen Runner als EIGENE systemd-Unit (detached): - • mc2: deploy/auftrag-annehmen.sh — Merge im Worktree → Push main → Deploy → Health → Revert bei Rot. - • lucy: deploy/lucy-annahme.sh — Merge im Worktree → Push main → PC baut dist (via PC-Executor) - und startet Lucy neu, wenn sie lief → bei Rot Revert auf main (die laufende Lucy bleibt die alte). -Detached, weil deploy.sh mission-control-2 neu startet — ein Kind des Backends stürbe mittendrin. -Der Fortschritt landet in STATUS_PATH (JSON), das Skript schreibt, die API liest nur. -Status-Schlüssel: mc2 = Branch-Name pur (Bestand), lucy = "lucy:" (kollisionsfrei). - -Lokal (Windows-Dev) ist alles harmlos: available=False, Aktionen geben Fehler statt zu crashen. -""" - -import json -import logging -import os -import re -import shutil -import subprocess -import time -import urllib.request -from pathlib import Path - -from config import MODELS_DIR - -log = logging.getLogger(__name__) - -REPO = Path(os.environ.get("MC2_SOURCE_DIR", "~/mission-control-v2")).expanduser() -LUCY = Path(os.environ.get("MC2_LUCY_DIR", "~/lucy")).expanduser() -VAULT = Path(os.environ.get("MC_VAULT_DIR", "~/wissens-vault")).expanduser() -STATUS_PATH = Path(os.environ.get("MC2_AUFTRAG_STATUS", str(MODELS_DIR / "mc2-auftragsbuch.json"))) -# Empfehlungs-Stempel des nächtlichen Karten-Gutachters (deploy/karten-gutachter.sh schreibt, -# die API liest nur) und das Lern-Gedächtnis der Ablehnungen (Radar/Specifier lesen es). -GUTACHTEN_PATH = Path(os.environ.get("MC2_KARTEN_GUTACHTEN", str(MODELS_DIR / "mc2-karten-gutachten.json"))) -ABLEHNUNGEN_PATH = Path(os.environ.get("MC2_ABLEHNUNGEN", str(MODELS_DIR / "mc2-ablehnungen.jsonl"))) - -# Karten-Quellen. Die Runner-Skripte liegen IMMER im MC2-Checkout (deploy/) — auch der -# Lucy-Runner, denn er läuft auf der Box; nur der Build passiert am PC. -REPOS: dict[str, dict] = { - "mc2": {"path": REPO, "runner": "auftrag-annehmen.sh", "key": ""}, - "lucy": {"path": LUCY, "runner": "lucy-annahme.sh", "key": "lucy:"}, -} - -# Persistenz für gemeldete Branches (Idempotenz: nur EINMAL pro Branch pingen). -# Muster wie mc2-announce.json unter MODELS_DIR. -ANNOUNCE_BRANCHES_PATH = Path(os.environ.get("MC2_ANNOUNCE_BRANCHES", str(MODELS_DIR / "mc2-announce-branches.json"))) - -# Nur diese Branch-Familien sind Vorschläge (main/HEAD & Fremdes bleiben draußen). -PREFIXES = ("wartung/", "orchestrator/", "doku/", "feature/") -# Branch-Namen kommen vom Client zurück → hart validieren (keine Shell-/Git-Injektion). -_BRANCH_RX = re.compile(r"^[A-Za-z0-9][A-Za-z0-9._/-]{0,120}$") -_KANDIDAT_RX = re.compile(r"^[A-Za-z0-9][A-Za-z0-9._ -]{0,120}\.md$") - -_fetch_cache: dict = {} -_FETCH_EVERY = 30.0 # s — Gitea nicht bei jedem UI-Poll anfragen -_CI_CACHE: dict = {} # { (repo, branch, head_sha): {"status": "success", "ts": time} } - -def _gitea_creds() -> tuple | None: - # 1. Fallback: Versuch via git credential manager (zukunftsfähig & plattformübergreifend) - try: - import subprocess - p = subprocess.run( - ["git", "credential", "fill"], - input=b"protocol=https\nhost=git.tobisniceshomelab.ddnsfree.com\n", - capture_output=True, - check=True - ) - out = p.stdout.decode(errors="replace") - u_match = re.search(r"username=(.+)", out) - p_match = re.search(r"password=(.+)", out) - if u_match and p_match: - return u_match.group(1).strip(), p_match.group(1).strip() - except Exception: - pass - - # 2. Fallback: Datei (hauptsächlich auf der AI-Box genutzt) - try: - cred = Path("~/.git-credentials").expanduser() - for line in cred.read_text(encoding="utf-8").splitlines(): - m = re.match(r"https://([^:]+):([^@]+)@git\.tobisniceshomelab", line.strip()) - if m: return m.group(1), m.group(2) - except Exception: - pass - return None - -def _fetch_ci_status(repo: str, branch: str, head_sha: str) -> str | None: - # Nur auf der Box (wo creds liegen) sinnvoll - creds = _gitea_creds() - if not creds: return None - _user, token = creds - cache_key = (repo, branch, head_sha) - cached = _CI_CACHE.get(cache_key) - if cached and (time.time() - cached["ts"] < 30 or cached["status"] in ("success", "failure", "skipped")): - return cached["status"] - - full_repo = "Hitonabi/mission-control-v2" if repo == "mc2" else "Hitonabi/lucy" - url = f"http://192.168.178.153:3000/api/v1/repos/{full_repo}/actions/runs?branch={urllib.parse.quote(branch)}&limit=1" - try: - req = urllib.request.Request(url, headers={"Authorization": "token " + token}) - with urllib.request.urlopen(req, timeout=5) as r: - data = json.load(r) - runs = data if isinstance(data, list) else data.get("runs", data.get("workflow_runs", [])) - if runs: - run = runs[0] - if run.get("head_sha", "").startswith(head_sha[:7]): - st = run.get("status") - if st: - _CI_CACHE[cache_key] = {"status": st, "ts": time.time()} - return st - except Exception as e: - log.warning("auftragsbuch: CI-Status fetch fehler: %s", e) - return None - - - -def _available() -> bool: - return os.name == "posix" and (REPO / ".git").exists() - - -def _repo_ok(repo: str) -> bool: - r = REPOS.get(repo) - return bool(r) and os.name == "posix" and (r["path"] / ".git").exists() - - -def _git(repo: str, args: list[str], timeout: int = 20) -> subprocess.CompletedProcess: - return subprocess.run(["git", "-C", str(REPOS[repo]["path"]), *args], - capture_output=True, text=True, timeout=timeout) - - -def _status_key(repo: str, branch: str) -> str: - return f"{REPOS[repo]['key']}{branch}" - - -def _fetch_throttled(repo: str) -> None: - now = time.time() - if now - _fetch_cache.get(repo, 0.0) < _FETCH_EVERY: - return - _fetch_cache[repo] = now - try: - _git(repo, ["fetch", "-q", "--prune", "origin"], timeout=30) - except Exception: - log.warning("auftragsbuch: git fetch (%s) fehlgeschlagen", repo, exc_info=True) - - -def _load_announce_branches() -> set: - """Liefert die Menge der bereits gemeldeten Branch-Namen (Idempotenz).""" - try: - data = json.loads(ANNOUNCE_BRANCHES_PATH.read_text(encoding="utf-8")) - return set(data) if isinstance(data, list) else set() - except Exception: - return set() - - -def _save_announce_branches(branches: set) -> None: - """Speichert die Menge gemelder Branch-Namen.""" - try: - tmp = ANNOUNCE_BRANCHES_PATH.with_suffix(".tmp") - tmp.write_text(json.dumps(sorted(branches), ensure_ascii=False), encoding="utf-8") - tmp.replace(ANNOUNCE_BRANCHES_PATH) - except OSError: - log.warning("auftragsbuch: Announce-Branches %s nicht schreibbar", ANNOUNCE_BRANCHES_PATH, exc_info=True) - - -def _statuses() -> dict: - try: - return (json.loads(STATUS_PATH.read_text(encoding="utf-8")) or {}).get("branches", {}) - except Exception: - return {} - - -def _set_status(key: str, state: str, detail: str) -> None: - try: - try: - data = json.loads(STATUS_PATH.read_text(encoding="utf-8")) - except Exception: - data = {} - data.setdefault("branches", {})[key] = {"state": state, "detail": detail, "ts": time.time()} - tmp = STATUS_PATH.with_suffix(".tmp") - tmp.write_text(json.dumps(data, ensure_ascii=False), encoding="utf-8") - tmp.replace(STATUS_PATH) - except OSError: - log.warning("auftragsbuch: Status %s nicht schreibbar", STATUS_PATH, exc_info=True) - - -def _gutachten() -> dict: - """Alle Karten-Stempel (":" → {empfehlung, satz, richter, commit_ts, ts}).""" - try: - data = json.loads(GUTACHTEN_PATH.read_text(encoding="utf-8")) - return data if isinstance(data, dict) else {} - except Exception: - return {} - - -def _remote_branches(repo: str) -> list[str]: - r = _git(repo, ["for-each-ref", "--format=%(refname:short)", "refs/remotes/origin"]) - out = [] - for line in (r.stdout or "").splitlines(): - name = line.strip().removeprefix("origin/") - if name and name != "HEAD" and name.startswith(PREFIXES): - out.append(name) - return out - - -def _valid_branch(branch: str) -> bool: - return bool(_BRANCH_RX.match(branch)) and ".." not in branch and branch.startswith(PREFIXES) - - -def _repo_items(repo: str, statuses: dict, gutachten: dict) -> list[dict]: - items = [] - for branch in _remote_branches(repo): - ref = f"origin/{branch}" - status = statuses.get(_status_key(repo, branch)) - try: - ahead = int((_git(repo, ["rev-list", "--count", f"origin/main..{ref}"]).stdout or "0").strip() or 0) - if ahead == 0 and ((status or {}).get("state") not in ("laeuft", "rollback")): - continue # bereits in main enthalten → keine offene Entscheidung mehr - behind = int((_git(repo, ["rev-list", "--count", f"{ref}..origin/main"]).stdout or "0").strip() or 0) - # Kaputt aufgesetzte Branches entlarven (Worker machte git init/Shallow statt zu - # klonen): ohne gemeinsamen Vorfahren kann git NIE mergen — Annehmen wäre ein - # garantierter Fehllauf („refusing to merge unrelated histories"). - verwaist = _git(repo, ["merge-base", "origin/main", ref]).returncode != 0 - show = _git(repo, ["show", "-s", "--format=%s%x1f%b%x1f%ct%x1f%an", ref]) - subject, body, cts, author = ((show.stdout or "").split("\x1f") + ["", "", "", ""])[:4] - ts_val = int(cts) if cts.strip().isdigit() else None - # Stempel nur zeigen, wenn er zum AKTUELLEN Commit gehört (nachgeschobener - # Commit macht das alte Gutachten ungültig — der Nacht-Lauf stempelt neu). - stempel = gutachten.get(f"{repo}:{branch}") - if not (isinstance(stempel, dict) and stempel.get("commit_ts") == ts_val): - stempel = None - - head_sha = (_git(repo, ["rev-parse", ref]).stdout or "").strip() - ci_status = _fetch_ci_status(repo, branch, head_sha) if head_sha else None - - stat = (_git(repo, ["diff", "--shortstat", f"origin/main...{ref}"]).stdout or "").strip() - files_raw = (_git(repo, ["diff", "--name-status", f"origin/main...{ref}"]).stdout or "").splitlines() - files = [] - for line in files_raw[:60]: - parts = line.split("\t") - if len(parts) >= 2: - files.append({"status": parts[0][:2], "path": parts[-1]}) - paths = [f["path"] for f in files] - frontend_src = any(p.startswith("frontend/src") for p in paths) - frontend_dist = any(p.startswith("frontend/dist") for p in paths) - items.append({ - "repo": repo, - "branch": branch, - "kind": branch.split("/", 1)[0], - "subject": subject.strip(), - "body": body.strip()[:2000], - "author": author.strip(), - "ts": ts_val, - "empfehlung": stempel, - "ahead": ahead, - "behind": behind, - "verwaist": verwaist, - # Diff gegen main ist leer → der Branch brächte nichts (Inhalt schon in main - # oder Worker hat am Repo vorbei gearbeitet). Bei verwaist ist der Diff - # technisch leer (kein merge-base) — dann zählt nur das verwaist-Flag. - "leer": not verwaist and ahead > 0 and not files_raw, - "shortstat": stat, - "files": files, - "files_truncated": len(files_raw) > 60, - # Nur mc2: Frontend-Quelltext ohne gebautes Bundle — die Box deployt dist so, wie - # es im Repo liegt. Lucy wird dagegen IMMER am PC gebaut (kein dist im Repo). - "frontend_ohne_build": repo == "mc2" and frontend_src and not frontend_dist, - "status": None if (status or {}).get("state") == "eingespielt" and ahead > 0 else status, - "ci_status": ci_status, - }) - except Exception: - log.warning("auftragsbuch: Branch %s (%s) nicht lesbar", branch, repo, exc_info=True) - return items - - -def list_proposals() -> dict: - """Alle offenen Vorschläge: Branches aus beiden Repos (mit Commit-/Diff-Zusammenfassung + - Status) und Skill-Kandidaten aus dem Vault. Eine Antwort für die ganze Auftragsbuch-Seite. - - Nebenbei: Pinge neu auftauchende Vorschlags-Branches per Telegram und füge sie dem - Briefkasten hinzu (Idempotenz: nur EINMAL pro Branch).""" - if not _available(): - return {"available": False, "items": [], "skill_kandidaten": [], "open_count": 0} - - statuses = _statuses() - gutachten = _gutachten() - items = [] - for repo in REPOS: - if not _repo_ok(repo): - continue # z. B. ~/lucy (noch) nicht geklont → Karten dieses Repos einfach weglassen - _fetch_throttled(repo) - items.extend(_repo_items(repo, statuses, gutachten)) - items.sort(key=lambda i: i.get("ts") or 0, reverse=True) - - # --- Telegram-Ping für NEUE Vorschlags-Branches (Idempotenz) --- - # Alle aktuellen Branch-Namen aus beiden Repos sammeln - aktuelle_branches = set() - for repo in REPOS: - if _repo_ok(repo): - aktuelle_branches.update(_remote_branches(repo)) - - # Bereits gemeldete Branches laden - gemeldet = _load_announce_branches() - - # Nur wirklich NEUE Branches pingen - neue = aktuelle_branches - gemeldet - for branch in neue: - # NotifyTelegram best-effort, niemals crashen - try: - from services import announce - subject = "[Auftragsbuch]" - text = f"Neue Karte wartet auf deinen Klick: {branch}" - announce.notify_telegram(subject, text) - # Und ein Eintrag für den Briefkasten (damit Lucy es spricht) - announce.add(text, subject, "auftragsbuch", "normal") - except Exception: - log.warning("auftragsbuch: Telegram-Ping für %s fehlgeschlagen", branch, exc_info=True) - - # Als gemeldet speichern — aber NUR bei echter Änderung. Ein unbedingtes Schreiben - # bumpte die mtime bei jedem Aufruf, der SSE-Sammler (events.py, Fingerabdruck = - # Datei-mtime) meldete daraufhin „geändert", die UI holte neu, schrieb wieder … - # → 3-s-Endlosschleife auf /api/auftragsbuch je offenem Client (gefunden 15.07. nachts). - if aktuelle_branches != gemeldet: - _save_announce_branches(aktuelle_branches) - - kandidaten = list_skill_kandidaten() - open_count = sum(1 for i in items - if (i.get("status") or {}).get("state") not in ("eingespielt",)) + len(kandidaten) - return {"available": True, "items": items, "skill_kandidaten": kandidaten, "open_count": open_count} - - -def diff_of(branch: str, repo: str = "mc2") -> dict: - if not _repo_ok(repo): - return {"ok": False, "error": "Nur auf der Box verfügbar."} - if not _valid_branch(branch) or branch not in _remote_branches(repo): - return {"ok": False, "error": f"Unbekannter Vorschlags-Branch: {branch}"} - r = _git(repo, ["diff", f"origin/main...origin/{branch}"], timeout=30) - text = r.stdout or "" - truncated = len(text) > 200_000 - return {"ok": True, "diff": text[:200_000], "truncated": truncated} - - -def accept(branch: str, repo: str = "mc2") -> dict: - """Annehmen: detached Runner starten. mc2: Merge→Push→Deploy→Health→ggf. Rollback. - lucy: Merge→Push→PC-Build+Neustart→ggf. Revert (der Runner spricht den PC-Executor an).""" - if not _repo_ok(repo): - return {"ok": False, "error": "Annehmen geht nur auf der Box."} - if not _valid_branch(branch) or branch not in _remote_branches(repo): - return {"ok": False, "error": f"Unbekannter Vorschlags-Branch: {branch}"} - key = _status_key(repo, branch) - state = (_statuses().get(key) or {}).get("state") - if state in ("laeuft", "rollback"): - return {"ok": False, "error": "Für diesen Vorschlag läuft bereits ein Annahme-Lauf."} - # Kaputt aufgesetzter Branch (kein gemeinsamer Vorfahre) → Merge kann NIE gelingen; - # gar nicht erst einen Runner starten (die UI blendet den Knopf aus, die API hält dicht). - if _git(repo, ["merge-base", "origin/main", f"origin/{branch}"]).returncode != 0: - return {"ok": False, "error": "Dieser Branch hat keinen gemeinsamen Ursprung mit main " - "(kaputt aufgesetzt, z. B. git init statt Klonen) — Annehmen ist technisch unmöglich. " - "Bitte ablehnen (gern mit Grund) und die Idee neu in die Queue geben."} - - # Runner als /tmp-Kopie starten: deploy.sh resettet das Repo hart — das Original-Skript - # würde einem laufenden bash unter den Füßen getauscht (bekannte Selbst-Reset-Falle). - src = REPO / "deploy" / REPOS[repo]["runner"] - if not src.is_file(): - return {"ok": False, "error": f"Runner fehlt im Checkout: {src.name}"} - runner = Path(f"/tmp/mc2-auftrag-runner-{int(time.time())}.sh") - try: - shutil.copyfile(src, runner) - except OSError as exc: - return {"ok": False, "error": f"Runner nicht kopierbar: {exc}"} - - slug = re.sub(r"[^a-z0-9-]+", "-", f"{repo}-{branch}".lower())[:40].strip("-") - unit = f"mc2-auftrag-{slug}-{int(time.time())}" - r = subprocess.run( - ["systemd-run", "--user", "--collect", f"--unit={unit}", - "/bin/bash", str(runner), branch], - capture_output=True, text=True, timeout=20) - if r.returncode != 0: - return {"ok": False, "error": f"Start fehlgeschlagen: {(r.stderr or r.stdout).strip()[:300]}"} - _set_status(key, "laeuft", "Annahme-Lauf gestartet") - return {"ok": True, "unit": unit} - - -def reject(branch: str, repo: str = "mc2", grund: str = "") -> dict: - """Ablehnen: Remote-Branch löschen (die Arbeit bleibt in der Gitea-Historie referenzierbar, - aber die Entscheidung ist gefallen). Der optionale GRUND ist das Lern-Gedächtnis des - Kreislaufs: er landet in ABLEHNUNGEN_PATH (jsonl), und Idle-Radar/Analysten bekommen - ihn als „NIE wieder vorschlagen"-Material vorgelegt. Meldung in den Briefkasten.""" - if not _repo_ok(repo): - return {"ok": False, "error": "Ablehnen geht nur auf der Box."} - if not _valid_branch(branch) or branch not in _remote_branches(repo): - return {"ok": False, "error": f"Unbekannter Vorschlags-Branch: {branch}"} - grund = (grund or "").strip()[:400] - # Betreff VOR dem Löschen sichern — danach ist der Ref weg. - subject = (_git(repo, ["show", "-s", "--format=%s", f"origin/{branch}"]).stdout or "").strip()[:200] - r = _git(repo, ["push", "origin", "--delete", branch], timeout=30) - if r.returncode != 0: - return {"ok": False, "error": f"Löschen fehlgeschlagen: {(r.stderr or '').strip()[:300]}"} - _git(repo, ["fetch", "-q", "--prune", "origin"], timeout=30) - detail = "Vom Commander abgelehnt — Branch gelöscht" - if grund: - detail += f" (Grund: {grund})" - _set_status(_status_key(repo, branch), "abgelehnt", detail) - try: - with ABLEHNUNGEN_PATH.open("a", encoding="utf-8") as f: - f.write(json.dumps({"ts": int(time.time()), "repo": repo, "branch": branch, - "subject": subject, "grund": grund}, ensure_ascii=False) + "\n") - except OSError: - log.warning("auftragsbuch: Ablehn-Gedächtnis %s nicht schreibbar", ABLEHNUNGEN_PATH, exc_info=True) - try: - from services import announce - wo = "im Lucy-Repo " if repo == "lucy" else "" - warum = f" Grund: {grund}" if grund else "" - announce.add(f"Vorschlag '{branch}' {wo}wurde abgelehnt und der Branch gelöscht.{warum}", - "[Auftragsbuch]", "auftragsbuch", "silent") - except Exception: - pass - return {"ok": True} - - -# ── Skill-Kandidaten (Wissens-Vault) ───────────────────────────────────────── - -def _kandidaten_dir() -> Path: - return VAULT / "skill-kandidaten" - - -def list_skill_kandidaten() -> list[dict]: - d = _kandidaten_dir() - if os.name != "posix" or not d.is_dir(): - return [] - out = [] - for p in sorted(d.glob("*.md"), key=lambda x: x.stat().st_mtime, reverse=True): - try: - text = p.read_text(encoding="utf-8", errors="replace") - first = next((ln.strip().lstrip("# ") for ln in text.splitlines() if ln.strip()), p.stem) - out.append({"file": p.name, "title": first[:160], - "preview": text[:3000], "mtime": p.stat().st_mtime}) - except OSError: - continue - return out - - -def _vault_git(args: list[str]) -> None: - try: - subprocess.run(["git", "-C", str(VAULT), *args], capture_output=True, text=True, timeout=15) - except Exception: - pass - - -def _kandidat_path(fname: str) -> Path | None: - if not _KANDIDAT_RX.match(fname): - return None - p = (_kandidaten_dir() / fname).resolve() - if not p.is_relative_to(_kandidaten_dir().resolve()) or not p.is_file(): - return None - return p - - -def skill_accept(fname: str) -> dict: - """Skill-Kandidat beauftragen: Inhalt als Werkstatt-Auftrag an die bewährte - `hermes -z`-CLI-Lane (detached — der Lauf dauert Minuten und braucht das Backend nicht). - Ergebnis ist wieder propose-only: ein neuer Branch, der hier als Karte auftaucht.""" - if not _available(): - return {"ok": False, "error": "Beauftragen geht nur auf der Box."} - p = _kandidat_path(fname) - if not p: - return {"ok": False, "error": f"Kandidat nicht gefunden: {fname}"} - - beauftragt = _kandidaten_dir() / "beauftragt" - beauftragt.mkdir(parents=True, exist_ok=True) - target = beauftragt / p.name - try: - content = p.read_text(encoding="utf-8", errors="replace") - p.rename(target) - except OSError as exc: - return {"ok": False, "error": f"Kandidat nicht verschiebbar: {exc}"} - _vault_git(["add", "-A"]) - _vault_git(["commit", "-q", "-m", f"Skill-Kandidat beauftragt: {p.name}"]) - - order = ("Nutze den orchestrator-Skill (propose-only, Zwei-Kritiker-Gate). " - "Auftrag aus dem Wissens-Vault (vom Commander im Auftragsbuch freigegeben):\n\n" - + content) - order_file = Path(f"/tmp/mc2-skill-auftrag-{int(time.time())}.txt") - try: - order_file.write_text(order, encoding="utf-8") - except OSError as exc: - return {"ok": False, "error": f"Auftrag nicht schreibbar: {exc}"} - unit = f"mc2-skill-auftrag-{int(time.time())}" - r = subprocess.run( - ["systemd-run", "--user", "--collect", f"--unit={unit}", - "/bin/bash", "-lc", f'hermes -z "$(cat {order_file})"'], - capture_output=True, text=True, timeout=20) - if r.returncode != 0: - return {"ok": False, "error": f"Start fehlgeschlagen: {(r.stderr or r.stdout).strip()[:300]}"} - try: - from services import announce - announce.add(f"Skill-Kandidat '{fname}' wurde beauftragt — die Werkstatt arbeitet, " - "das Ergebnis erscheint als neuer Vorschlag im Auftragsbuch.", - "[Auftragsbuch]", "auftragsbuch", "silent") - except Exception: - pass - return {"ok": True, "unit": unit} - - -def skill_reject(fname: str) -> dict: - if not _available(): - return {"ok": False, "error": "Verwerfen geht nur auf der Box."} - p = _kandidat_path(fname) - if not p: - return {"ok": False, "error": f"Kandidat nicht gefunden: {fname}"} - verworfen = _kandidaten_dir() / "verworfen" - verworfen.mkdir(parents=True, exist_ok=True) - try: - p.rename(verworfen / p.name) - except OSError as exc: - return {"ok": False, "error": f"Kandidat nicht verschiebbar: {exc}"} - _vault_git(["add", "-A"]) - _vault_git(["commit", "-q", "-m", f"Skill-Kandidat verworfen: {p.name}"]) - return {"ok": True} diff --git a/backend/services/sentry.py b/backend/services/sentry.py index a8223cf..9631bdb 100644 --- a/backend/services/sentry.py +++ b/backend/services/sentry.py @@ -101,7 +101,7 @@ if os.environ.get("MC_SENTRY_WATCH_MC2", "") == "1": _MC2_URL = os.environ.get("MC_SENTRY_MC2_URL", "http://127.0.0.1:9001") _GW_URL = os.environ.get("MC_SENTRY_GATEWAY_URL", "http://127.0.0.1:9010") CHECKS["mc2"] = (lambda: _reach(_MC2_URL, "/api/health"), - "Das Steuerpult ist ausgefallen — Dashboard, Briefkasten und Auftragsbuch gehen gerade nicht.", + "Das Steuerpult ist ausgefallen — Dashboard und Briefkasten gehen gerade nicht.", "Das Steuerpult ist wieder da.") CHECKS["gateway"] = (lambda: _reach(_GW_URL, "/gw/health"), "Der Modell-Gateway ist ausgefallen — meine Denk-Anfragen und die der Worker hängen gerade.", diff --git a/deploy/auftrag-annehmen.sh b/deploy/auftrag-annehmen.sh deleted file mode 100644 index 307d326..0000000 --- a/deploy/auftrag-annehmen.sh +++ /dev/null @@ -1,162 +0,0 @@ -#!/usr/bin/env bash -# Auftragsbuch: einen Vorschlags-Branch ANNEHMEN — der letzte Meter des propose-only-Kreislaufs. -# Werkstatt/Orchestrator liefern Branches (wartung/*, orchestrator/*), der Commander klickt in -# der Zentrale „Annehmen" → dieses Skript macht die bisherige Git-Handarbeit: Merge im -# isolierten Worktree (Lehre: NIE im Live-Checkout arbeiten) → Push nach main → Deploy → -# Health-Check → bei Rot automatischer Revert + Redeploy + Alarm. -# -# WICHTIG: läuft als EIGENE systemd-Unit (systemd-run, startet routers/auftragsbuch.py), -# NICHT als Kind des Backends — deploy.sh startet mission-control-2 neu und würde sonst -# den eigenen Eltern-Prozess mitten im Lauf töten. Außerdem wird es vom Backend als -# /tmp-KOPIE gestartet (deploy.sh macht git reset --hard → die Datei unter den Füßen -# eines laufenden bash zu tauschen korrumpiert das Skript, bekannte Falle). -# -# Nutzung: auftrag-annehmen.sh (z. B. wartung/saubere-zusammenfassung) -set -uo pipefail - -BRANCH="${1:?Nutzung: auftrag-annehmen.sh }" -SRC="${MC2_SRC:-$HOME/mission-control-v2}" -STATUS="${MC2_AUFTRAG_STATUS:-/srv/models/mc2-auftragsbuch.json}" -API="${MC_API:-http://127.0.0.1:9001}" -SLUG="$(echo "$BRANCH" | tr '/' '-')" -WT="/tmp/annahme-$SLUG" -LOG="/tmp/annahme-$SLUG.log" - -notify(){ bash "$SRC/deploy/notify.sh" -s "[Auftragsbuch]" "$1" || true; } - -# Status-Fortschritt für die UI (atomar via tmp+replace; die API liest die Datei nur). -status(){ # $1=state $2=detail - python3 - "$STATUS" "$BRANCH" "$1" "$2" <<'PY' -import json, os, sys, time -p, branch, state, detail = sys.argv[1:5] -try: - d = json.load(open(p, encoding="utf-8")) -except Exception: - d = {} -d.setdefault("branches", {})[branch] = {"state": state, "detail": detail, "ts": time.time()} -tmp = p + ".tmp" -json.dump(d, open(tmp, "w", encoding="utf-8"), ensure_ascii=False) -os.replace(tmp, p) -PY -} - -cleanup_wt(){ git -C "$SRC" worktree remove --force "$WT" 2>/dev/null || true; } - -fail(){ - status "fehlgeschlagen" "$1" - notify "Vorschlag '$BRANCH' konnte NICHT eingespielt werden: $1 — nichts wurde verändert, der Branch bleibt liegen." - cleanup_wt - exit 1 -} - -status "laeuft" "Merge wird vorbereitet" -cd "$SRC" || fail "Live-Checkout $SRC fehlt" -git fetch -q origin || fail "git fetch (Gitea) fehlgeschlagen" -git rev-parse --verify -q "refs/remotes/origin/$BRANCH" >/dev/null \ - || fail "Branch origin/$BRANCH existiert nicht (schon gemergt/gelöscht?)" - -PRE="$(git rev-parse origin/main)" - -# Kaputt aufgesetzte Branches (Worker machte git init/Shallow statt zu klonen) haben KEINEN -# gemeinsamen Vorfahren — git verweigert den Merge immer. Ehrlich sagen statt „Konflikt". -git merge-base origin/main "origin/$BRANCH" >/dev/null 2>&1 \ - || fail "Branch hat keinen gemeinsamen Ursprung mit main (kaputt aufgesetzt, z. B. git init statt Klonen) — bitte ablehnen (mit Grund) und die Idee neu in die Queue geben" - -# Isolierter Worktree — der Live-Checkout bleibt bis zum Deploy unberührt. -cleanup_wt -git worktree add --detach "$WT" origin/main >/dev/null 2>&1 || fail "Worktree konnte nicht angelegt werden" -MERGE_MSG="Auftragsbuch: '$BRANCH' angenommen (Ein-Klick-Gate)" -if ! git -C "$WT" -c user.name="Auftragsbuch" -c user.email="auftragsbuch@box.local" \ - merge --no-ff "origin/$BRANCH" -m "$MERGE_MSG" >>"$LOG" 2>&1; then - git -C "$WT" merge --abort 2>/dev/null || true - # Selbstheilung: veralteten Branch mechanisch auf main rebasen (zweiter Worktree am - # Branch-Kopf). Klappt das sauber, wird der rebasede Stand gemergt — kein PC nötig. - status "laeuft" "Merge-Konflikt — Auto-Rebase wird versucht" - WT2="/tmp/annahme-rebase-$SLUG" - git worktree remove --force "$WT2" 2>/dev/null || true - REBASED="" - if git worktree add --detach "$WT2" "origin/$BRANCH" >/dev/null 2>&1 \ - && git -C "$WT2" -c user.name="Auftragsbuch" -c user.email="auftragsbuch@box.local" \ - rebase origin/main >>"$LOG" 2>&1; then - REBASED="$(git -C "$WT2" rev-parse HEAD)" - else - git -C "$WT2" rebase --abort 2>/dev/null || true - fi - git worktree remove --force "$WT2" 2>/dev/null || true - [ -n "$REBASED" ] || fail "Merge-Konflikt mit main, Auto-Rebase scheiterte ebenfalls — echter Inhaltskonflikt; am einfachsten ablehnen und die Idee neu in die Queue geben (frischer Branch von aktuellem main)" - git -C "$WT" -c user.name="Auftragsbuch" -c user.email="auftragsbuch@box.local" \ - merge --no-ff "$REBASED" -m "$MERGE_MSG — auto-rebased (Branch war veraltet)" >>"$LOG" 2>&1 \ - || { git -C "$WT" merge --abort 2>/dev/null || true; fail "Merge nach Auto-Rebase fehlgeschlagen (unerwartet) — Log: $LOG"; } -fi - -# py_compile-Gate über die durch den Merge geänderten Python-Dateien (AGENTS.md-Regel). -PYS="$(git -C "$WT" diff --name-only "$PRE"..HEAD -- '*.py' 2>/dev/null | tr '\n' ' ')" -if [ -n "${PYS// /}" ]; then - PYBIN="$SRC/backend/.venv/bin/python"; [ -x "$PYBIN" ] || PYBIN="python3" - # shellcheck disable=SC2086 - ( cd "$WT" && "$PYBIN" -m py_compile $PYS ) >>"$LOG" 2>&1 || fail "py_compile-Gate rot — der Patch enthält kaputtes Python" -fi - -status "laeuft" "Push nach main läuft" -PUSHED=0 -for _ in 1 2 3; do - git -C "$WT" push origin HEAD:main >>"$LOG" 2>&1 && { PUSHED=1; break; } - sleep 5 -done -[ "$PUSHED" = 1 ] || fail "Push nach main fehlgeschlagen (Gitea nicht erreichbar / Token?)" -cleanup_wt - -status "laeuft" "Deploy läuft — die Zentrale startet gleich kurz neu" -notify "Vorschlag '$BRANCH' angenommen: Merge auf main ist durch, Deploy läuft. Die Zentrale ist gleich kurz weg." - -# deploy.sh als Kopie ausführen (Selbst-Reset-Falle: es resettet das Repo, in dem es liegt). -cp "$SRC/deploy/deploy.sh" "/tmp/annahme-deploy-$SLUG.sh" -DEPLOY_OK=1 -bash "/tmp/annahme-deploy-$SLUG.sh" >>"$LOG" 2>&1 || DEPLOY_OK=0 - -# Health-Check mit Geduld (Dienst-Neustart + Warmup brauchen einen Moment). -HEALTH=0 -if [ "$DEPLOY_OK" = 1 ]; then - for _ in $(seq 1 18); do - curl -sf -m 5 "$API/api/health" >/dev/null 2>&1 && { HEALTH=1; break; } - sleep 5 - done -fi - -if [ "$HEALTH" = 1 ]; then - # Gemergt + live + grün → der Remote-Branch hat seinen Zweck erfüllt. - git -C "$SRC" push origin --delete "$BRANCH" >>"$LOG" 2>&1 || true - git -C "$SRC" fetch -q --prune origin 2>/dev/null || true - status "eingespielt" "Deploy grün, Health-Check bestanden" - notify "Vorschlag '$BRANCH' ist LIVE — Deploy grün, Health-Check bestanden. ✅" - exit 0 -fi - -# ── Rollback: Merge revertieren, main zurückschieben, neu deployen, Alarm ── -status "rollback" "Health rot — automatischer Revert läuft" -git fetch -q origin || true -cleanup_wt -if git worktree add --detach "$WT" origin/main >/dev/null 2>&1 \ - && git -C "$WT" -c user.name="Auftragsbuch" -c user.email="auftragsbuch@box.local" \ - revert -m 1 --no-edit HEAD >>"$LOG" 2>&1 \ - && git -C "$WT" push origin HEAD:main >>"$LOG" 2>&1; then - cleanup_wt - cp "$SRC/deploy/deploy.sh" "/tmp/annahme-rollback-$SLUG.sh" - bash "/tmp/annahme-rollback-$SLUG.sh" >>"$LOG" 2>&1 || true - R=0 - for _ in $(seq 1 12); do - curl -sf -m 5 "$API/api/health" >/dev/null 2>&1 && { R=1; break; } - sleep 5 - done - if [ "$R" = 1 ]; then - status "zurueckgerollt" "Health blieb rot — Merge automatisch revertiert, Box läuft wieder" - notify "Vorschlag '$BRANCH' hat den Health-Check GERISSEN. Automatisch zurückgerollt — die Box läuft wieder auf dem alten Stand. Der Branch bleibt zur Analyse liegen. Log: $LOG" - exit 1 - fi -fi -cleanup_wt -status "kritisch" "Rollback fehlgeschlagen — Box braucht Hilfe" -curl -sf -m 5 -X POST "$API/api/alarm" -H 'Content-Type: application/json' \ - --data "{\"subject\":\"[Auftragsbuch]\",\"text\":\"KRITISCH: Annehmen von $BRANCH UND Rollback fehlgeschlagen — Zentrale prüfen. Log: $LOG\"}" >/dev/null 2>&1 \ - || notify "KRITISCH: Annehmen von '$BRANCH' UND Rollback fehlgeschlagen — bitte Box prüfen (restore.sh liegt bereit). Log: $LOG" -exit 2 diff --git a/deploy/bagatell-annahme.sh b/deploy/bagatell-annahme.sh deleted file mode 100644 index 5e8e02c..0000000 --- a/deploy/bagatell-annahme.sh +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env bash -# Bagatell-Annahme — „Harmloses darf selbst" (User-Entscheid 10.07.2026, konservativ geschnitten): -# Vorschlags-Branches, die AUSSCHLIESSLICH Markdown-Dateien anlegen oder ändern (Doku/Wiki — -# keine einzige Code-Zeile, keine Löschungen, keine Umbenennungen, keine Skripte), spielt die -# Box nachts OHNE Klick ein. Der Weg ist derselbe wie beim Klick im Auftragsbuch: -# auftrag-annehmen.sh (Merge im Worktree → py_compile-Gate → Push main → Deploy → Health → -# Auto-Revert). Fangnetz drumherum: Nacht-Sicherung 03:30 (Zeitmaschine) liegt davor, die -# Morgenlage 04:30 berichtet danach, jede Annahme steht in Chronik + Telegram. -# JEDE Code-Zeile bleibt Klick-pflichtig — dieses Skript weitet die Klasse NIE selbst aus. -# -# Läuft als mc2-bagatell.timer (04:10) über eine /tmp-Kopie (Selbst-Reset-Falle: die Annahme -# deployt und resettet damit das Repo, in dem dieses Skript liegt). -set -uo pipefail - -SRC="${MC2_SRC:-$HOME/mission-control-v2}" -STATUS="${MC2_AUFTRAG_STATUS:-/srv/models/mc2-auftragsbuch.json}" -MAX_PRO_NACHT=2 # jede Annahme startet die Zentrale kurz neu — Nachtruhe wahren - -cd "$SRC" || exit 0 -git fetch -q --prune origin 2>/dev/null || exit 0 - -angenommen=0 -for REF in $(git for-each-ref --format='%(refname:short)' refs/remotes/origin); do - [ "$angenommen" -ge "$MAX_PRO_NACHT" ] && break - BRANCH="${REF#origin/}" - case "$BRANCH" in wartung/*|orchestrator/*|doku/*|feature/*) ;; *) continue ;; esac - - AHEAD="$(git rev-list --count "origin/main..$REF" 2>/dev/null || echo 0)" - [ "${AHEAD:-0}" -gt 0 ] || continue - - # Nur unberührte Vorschläge: trägt der Branch schon irgendeinen Annahme-Status - # (läuft/fehlgeschlagen/zurückgerollt/…), entscheidet der Commander — nicht wir. - STATE="$(python3 - "$STATUS" "$BRANCH" <<'PY' -import json, sys -try: - print((json.load(open(sys.argv[1], encoding="utf-8")).get("branches", {}).get(sys.argv[2]) or {}).get("state", "")) -except Exception: - print("") -PY -)" - [ -z "$STATE" ] || continue - - # Bagatell-Klasse: JEDE geänderte Datei endet auf .md UND ist nur angelegt (A) oder - # geändert (M). Alles andere (Löschung, Rename R…, Copy C…, Nicht-Markdown) → Klick-Pflicht. - DIFF="$(git diff --name-status "origin/main...$REF" 2>/dev/null)" - [ -n "$DIFF" ] || continue - OK=1 - while IFS=$'\t' read -r st path _rest; do - [ -n "$st" ] || continue - case "$st" in A|M) ;; *) OK=0; break ;; esac - case "$path" in *.md) ;; *) OK=0; break ;; esac - done <<< "$DIFF" - [ "$OK" = 1 ] || continue - - N="$(printf '%s\n' "$DIFF" | wc -l | tr -d ' ')" - echo "Bagatelle erkannt: $BRANCH ($N Markdown-Datei(en))" - curl -sf -m 5 -X POST "${MC_ANNOUNCE_URL:-http://127.0.0.1:9001/api/voice/announce}" \ - -H 'Content-Type: application/json' \ - --data "$(jq -n --arg t "Bagatelle (nur Doku, $N Datei(en)): '$BRANCH' wird ohne Klick eingespielt — Fangnetz aktiv, Details in der Morgenlage." \ - '{text:$t, subject:"[Bagatell-Annahme]", source:"bagatell", priority:"silent"}')" >/dev/null 2>&1 || true - - RUNNER="/tmp/mc2-bagatell-annehmen-$$.sh" - cp "$SRC/deploy/auftrag-annehmen.sh" "$RUNNER" || continue - if bash "$RUNNER" "$BRANCH"; then - angenommen=$((angenommen+1)) - else - # auftrag-annehmen.sh hat selbst gemeldet (fehlgeschlagen/zurückgerollt) und aufgeräumt; - # der Branch trägt jetzt einen Status → nächste Nacht fasst ihn niemand mehr automatisch an. - echo "Bagatell-Annahme von $BRANCH nicht grün — Meldung kam vom Annahme-Runner." - fi -done -echo "Bagatell-Lauf fertig: $angenommen eingespielt." diff --git a/deploy/lucy-annahme.sh b/deploy/lucy-annahme.sh deleted file mode 100644 index c4a6c94..0000000 --- a/deploy/lucy-annahme.sh +++ /dev/null @@ -1,228 +0,0 @@ -#!/usr/bin/env bash -# Auftragsbuch: einen LUCY-Vorschlags-Branch ANNEHMEN — das PC-Gegenstück zu auftrag-annehmen.sh. -# Lucy (Electron) lebt auf dem Windows-PC (F:\Coding Stuff\lucy); dist liegt NICHT im Repo. -# Annehmen heißt darum: Merge auf main (hier, Box) → der PC zieht main, baut dist neu und -# startet Lucy neu, WENN sie lief (User-Entscheid: Lucy startet nur, wenn der Commander sie will). -# Schlägt am PC irgendetwas fehl, wird der Merge auf main automatisch revertiert — die laufende -# Lucy bleibt die alte (der PC-Runner stellt dist aus seinem Backup wieder her). -# -# Der PC wird über den PC-Executor (client/hermes-pc/executor.py, :7777, Bearer-Token aus -# ~/.hermes/config.yaml) gesteuert. /shell hat 60 s Timeout → der Build läuft DETACHED -# (deploy/lucy-annahme.ps1 im Lucy-Repo schreibt eine Status-Datei, wir pollen sie). -# -# Läuft wie der MC2-Runner als EIGENE systemd-Unit und als /tmp-Kopie (Selbst-Reset-Falle). -# Status-Schlüssel in der Auftragsbuch-JSON: "lucy:". -# -# Nutzung: lucy-annahme.sh (z. B. wartung/turncheck-default-aus) -set -uo pipefail - -BRANCH="${1:?Nutzung: lucy-annahme.sh }" -SRC="${MC2_SRC:-$HOME/mission-control-v2}" -LUCY="${MC2_LUCY_DIR:-$HOME/lucy}" -STATUS="${MC2_AUFTRAG_STATUS:-/srv/models/mc2-auftragsbuch.json}" -HERMES_CONF="${HERMES_CONF:-$HOME/.hermes/config.yaml}" -SLUG="lucy-$(echo "$BRANCH" | tr '/' '-')" -WT="/tmp/annahme-$SLUG" -LOG="/tmp/annahme-$SLUG.log" - -# Windows-Seite (Pfade im PC-Dateisystem; einfach gehalten — EIN PC, EIN Checkout). -PC_REPO='F:\Coding Stuff\lucy' -PC_STATUSFILE='F:\Coding Stuff\lucy\.lucy-annahme.json' -PC_RUNNER='F:\Coding Stuff\lucy\deploy\lucy-annahme.ps1' -BUILD_TIMEOUT_S=1500 # 25 min Deckel für npm ci + tsc + electron-builder + Stimm-Warmup - -notify(){ bash "$SRC/deploy/notify.sh" -s "[Auftragsbuch]" "$1" || true; } - -# Status-Fortschritt für die UI (atomar via tmp+replace; die API liest die Datei nur). -status(){ # $1=state $2=detail - python3 - "$STATUS" "lucy:$BRANCH" "$1" "$2" <<'PY' -import json, os, sys, time -p, key, state, detail = sys.argv[1:5] -try: - d = json.load(open(p, encoding="utf-8")) -except Exception: - d = {} -d.setdefault("branches", {})[key] = {"state": state, "detail": detail, "ts": time.time()} -tmp = p + ".tmp" -json.dump(d, open(tmp, "w", encoding="utf-8"), ensure_ascii=False) -os.replace(tmp, p) -PY -} - -# PC-Executor: PowerShell-Kommando ausführen. stdout des PCs → stdout; rc 0 nur wenn -# Transport UND Kommando grün. Token/URL kommen aus der Hermes-Config (kein zweiter Ablageort). -PC_URL="$(sed -n 's/^[[:space:]]*PC_EXECUTOR_URL:[[:space:]]*//p' "$HERMES_CONF" | head -1 | tr -d "\"'" | tr -d '[:space:]')" -PC_TOKEN="$(sed -n 's/^[[:space:]]*PC_EXECUTOR_TOKEN:[[:space:]]*//p' "$HERMES_CONF" | head -1 | tr -d "\"'" | tr -d '[:space:]')" -pc_shell(){ # $1 = PowerShell-Kommando - python3 - "$PC_URL" "$PC_TOKEN" "$1" <<'PY' -import json, sys, urllib.request -url, token, cmd = sys.argv[1:4] -req = urllib.request.Request(url + "/shell", data=json.dumps({"command": cmd}).encode(), - headers={"Authorization": "Bearer " + token, - "Content-Type": "application/json"}) -try: - r = json.load(urllib.request.urlopen(req, timeout=58)) -except Exception as e: - print(f"(PC-Executor nicht erreichbar: {e})") - sys.exit(2) -out = (r.get("stdout") or "").strip() -if out: - print(out) -err = (r.get("stderr") or "").strip() -if err: - print(err, file=sys.stderr) -sys.exit(0 if r.get("returncode") == 0 else 1) -PY -} - -cleanup_wt(){ git -C "$LUCY" worktree remove --force "$WT" 2>/dev/null || true; } - -fail(){ - status "fehlgeschlagen" "$1" - notify "Lucy-Vorschlag '$BRANCH' konnte NICHT eingespielt werden: $1 — nichts wurde verändert, der Branch bleibt liegen." - cleanup_wt - exit 1 -} - -# Revert nach schon gepushtem Merge (PC-Phase rot): main zurückdrehen, PC-Checkout nachziehen. -revert_main(){ # $1 = Grund für die Meldung - status "rollback" "PC-Phase rot — Merge wird automatisch zurückgedreht" - git -C "$LUCY" fetch -q origin || true - cleanup_wt - if git -C "$LUCY" worktree add --detach "$WT" origin/main >/dev/null 2>&1 \ - && git -C "$WT" -c user.name="Auftragsbuch" -c user.email="auftragsbuch@box.local" \ - revert -m 1 --no-edit HEAD >>"$LOG" 2>&1 \ - && git -C "$WT" push origin HEAD:main >>"$LOG" 2>&1; then - cleanup_wt - # PC-Checkout best-effort auf den revertierten Stand nachziehen (Quelle = laufende Lucy). - pc_shell "git -C '$PC_REPO' fetch origin main 2>&1; git -C '$PC_REPO' merge --ff-only FETCH_HEAD 2>&1" >>"$LOG" 2>&1 || true - status "zurueckgerollt" "$1 — Merge automatisch revertiert, Lucy läuft in der alten Version weiter" - notify "Lucy-Vorschlag '$BRANCH' hat den PC-Build/Neustart GERISSEN: $1. Merge automatisch zurückgedreht — Lucy läuft in der alten Version weiter. Der Branch bleibt zur Analyse liegen. Log: $LOG" - exit 1 - fi - cleanup_wt - status "kritisch" "Revert fehlgeschlagen — Lucy-Repo und PC von Hand prüfen" - notify "KRITISCH: Lucy-Annahme '$BRANCH' scheiterte UND der automatische Revert schlug fehl — bitte Lucy-Repo (Gitea main) und PC prüfen. Log: $LOG" - exit 2 -} - -[ -n "$PC_URL" ] && [ -n "$PC_TOKEN" ] || fail "PC-Executor-Zugang fehlt in $HERMES_CONF (PC_EXECUTOR_URL/TOKEN)" - -# ── Vorprüfungen am PC (VOR dem Merge — solange ist nichts kaputtzumachen) ── -status "laeuft" "Vorprüfung: ist der PC bereit?" -curl -sf -m 8 "$PC_URL/health" >/dev/null 2>&1 \ - || fail "PC-Executor nicht erreichbar — Lucy-Annahme braucht den eingeschalteten PC (Executor-Task läuft bei Anmeldung)" - -PC_BRANCH="$(pc_shell "git -C '$PC_REPO' rev-parse --abbrev-ref HEAD" 2>>"$LOG")" \ - || fail "PC-Arbeitskopie nicht lesbar (git am PC): $PC_BRANCH" -[ "$PC_BRANCH" = "main" ] || fail "PC-Arbeitskopie steht auf '$PC_BRANCH' statt main — bitte am PC aufräumen" - -PC_DIRTY="$(pc_shell "git -C '$PC_REPO' status --porcelain -uno" 2>>"$LOG")" \ - || fail "PC-Arbeitskopie nicht prüfbar" -[ -z "$PC_DIRTY" ] || fail "PC-Arbeitskopie hat ungespeicherte Änderungen — bitte erst am PC committen/aufräumen: $(echo "$PC_DIRTY" | head -3 | tr '\n' ' ')" - -WAS_RUNNING="$(pc_shell "if (Get-Process Lucy -ErrorAction SilentlyContinue) { '1' } else { '0' }" 2>>"$LOG")" || WAS_RUNNING="0" -case "$WAS_RUNNING" in 1|0) ;; *) WAS_RUNNING="0" ;; esac - -# ── Merge auf main (Box, isolierter Worktree — wie beim MC2-Runner) ───────── -status "laeuft" "Merge wird vorbereitet" -git -C "$LUCY" fetch -q origin || fail "git fetch (Gitea) fehlgeschlagen" -git -C "$LUCY" rev-parse --verify -q "refs/remotes/origin/$BRANCH" >/dev/null \ - || fail "Branch origin/$BRANCH existiert nicht (schon gemergt/gelöscht?)" - -# Kaputt aufgesetzte Branches (kein gemeinsamer Vorfahre) → Merge kann NIE gelingen. -git -C "$LUCY" merge-base origin/main "origin/$BRANCH" >/dev/null 2>&1 \ - || fail "Branch hat keinen gemeinsamen Ursprung mit main (kaputt aufgesetzt, z. B. git init statt Klonen) — bitte ablehnen (mit Grund) und die Idee neu in die Queue geben" - -cleanup_wt -git -C "$LUCY" worktree add --detach "$WT" origin/main >/dev/null 2>&1 || fail "Worktree konnte nicht angelegt werden" -MERGE_MSG="Auftragsbuch: Lucy-Vorschlag '$BRANCH' angenommen (Ein-Klick-Gate)" -if ! git -C "$WT" -c user.name="Auftragsbuch" -c user.email="auftragsbuch@box.local" \ - merge --no-ff "origin/$BRANCH" -m "$MERGE_MSG" >>"$LOG" 2>&1; then - git -C "$WT" merge --abort 2>/dev/null || true - # Selbstheilung: veralteten Branch mechanisch auf main rebasen (wie im MC2-Runner). - status "laeuft" "Merge-Konflikt — Auto-Rebase wird versucht" - WT2="/tmp/annahme-rebase-$SLUG" - git -C "$LUCY" worktree remove --force "$WT2" 2>/dev/null || true - REBASED="" - if git -C "$LUCY" worktree add --detach "$WT2" "origin/$BRANCH" >/dev/null 2>&1 \ - && git -C "$WT2" -c user.name="Auftragsbuch" -c user.email="auftragsbuch@box.local" \ - rebase origin/main >>"$LOG" 2>&1; then - REBASED="$(git -C "$WT2" rev-parse HEAD)" - else - git -C "$WT2" rebase --abort 2>/dev/null || true - fi - git -C "$LUCY" worktree remove --force "$WT2" 2>/dev/null || true - [ -n "$REBASED" ] || fail "Merge-Konflikt mit main, Auto-Rebase scheiterte ebenfalls — echter Inhaltskonflikt; am einfachsten ablehnen und die Idee neu in die Queue geben (frischer Branch von aktuellem main)" - git -C "$WT" -c user.name="Auftragsbuch" -c user.email="auftragsbuch@box.local" \ - merge --no-ff "$REBASED" -m "$MERGE_MSG — auto-rebased (Branch war veraltet)" >>"$LOG" 2>&1 \ - || { git -C "$WT" merge --abort 2>/dev/null || true; fail "Merge nach Auto-Rebase fehlgeschlagen (unerwartet) — Log: $LOG"; } -fi - -status "laeuft" "Push nach main läuft" -PUSHED=0 -for _ in 1 2 3; do - git -C "$WT" push origin HEAD:main >>"$LOG" 2>&1 && { PUSHED=1; break; } - sleep 5 -done -[ "$PUSHED" = 1 ] || fail "Push nach main fehlgeschlagen (Gitea nicht erreichbar / Token?)" -cleanup_wt - -# ── PC: main ziehen, Build detached starten ───────────────────────────────── -status "laeuft" "PC zieht den neuen Stand" -pc_shell "git -C '$PC_REPO' fetch origin main 2>&1; if (\$LASTEXITCODE -ne 0) { exit 1 }; git -C '$PC_REPO' merge --ff-only FETCH_HEAD 2>&1" >>"$LOG" 2>&1 \ - || revert_main "PC konnte main nicht ziehen (git fetch/merge am PC rot)" - -pc_shell "if (Test-Path '$PC_RUNNER') { exit 0 } else { exit 1 }" >>"$LOG" 2>&1 \ - || revert_main "PC-Runner-Skript fehlt im Lucy-Repo (deploy/lucy-annahme.ps1)" - -# WICHTIG: -File-Pfad MUSS eingebettete Anführungszeichen tragen — Start-Process fügt -# die ArgumentList-Elemente OHNE Quoting zusammen; 'F:\Coding Stuff\…' zerbricht sonst am -# Leerzeichen und die gespawnte powershell stirbt still (erster Live-Lauf, 12.07.). -pc_shell "Remove-Item -Force '$PC_STATUSFILE' -ErrorAction SilentlyContinue; Start-Process powershell -WindowStyle Hidden -ArgumentList '-NoProfile','-ExecutionPolicy','Bypass','-File','\"$PC_RUNNER\"','-WasRunning','$WAS_RUNNING'" >>"$LOG" 2>&1 \ - || revert_main "PC-Build ließ sich nicht starten" - -# ── Status-Datei pollen, Fortschritt in die UI spiegeln ───────────────────── -status "laeuft" "PC baut Lucy (dist) — das dauert ein paar Minuten" -DEADLINE=$(( $(date +%s) + BUILD_TIMEOUT_S )) -LAST_DETAIL="" -FINAL="" -while [ "$(date +%s)" -lt "$DEADLINE" ]; do - sleep 10 - RAW="$(pc_shell "if (Test-Path '$PC_STATUSFILE') { Get-Content -Raw '$PC_STATUSFILE' }" 2>>"$LOG")" || continue - [ -n "$RAW" ] || continue - # Parse OHNE f-String-Escapes: \" in f-String-Ausdruecken ist seit Python 3.12/3.14 - # ein SyntaxError (alter Pre-3.12-Stil) — genau das legte den ersten Live-Lauf lahm. - PARSED="$(printf '%s' "$RAW" | python3 -c ' -import json, sys -try: - d = json.loads(sys.stdin.read()) -except Exception: - sys.exit(0) -detail = str(d.get("detail", "")).replace("|", "/").replace("\n", " ") -done = "1" if d.get("done") else "0" -ok = "1" if d.get("ok") else "0" -print(done + "|" + ok + "|" + detail) -')" - [ -n "$PARSED" ] || continue - DONE="${PARSED%%|*}"; REST="${PARSED#*|}"; OK="${REST%%|*}"; DETAIL="${REST#*|}" - if [ "$DETAIL" != "$LAST_DETAIL" ] && [ -n "$DETAIL" ]; then - LAST_DETAIL="$DETAIL" - status "laeuft" "PC: $DETAIL" - fi - if [ "$DONE" = "1" ]; then FINAL="$OK"; break; fi -done - -[ -n "$FINAL" ] || revert_main "PC-Build-Timeout nach $((BUILD_TIMEOUT_S/60)) Minuten (Status-Datei blieb offen)" -[ "$FINAL" = "1" ] || revert_main "${LAST_DETAIL:-PC meldet Fehler ohne Detail}" - -# ── Grün: Branch aufräumen, ehrlich melden ────────────────────────────────── -git -C "$LUCY" push origin --delete "$BRANCH" >>"$LOG" 2>&1 || true -git -C "$LUCY" fetch -q --prune origin 2>/dev/null || true -status "eingespielt" "${LAST_DETAIL:-Build grün}" -if [ "$WAS_RUNNING" = "1" ]; then - notify "Lucy-Vorschlag '$BRANCH' ist LIVE — dist am PC neu gebaut, Lucy neu gestartet, Stimme meldet sich. ✅" -else - notify "Lucy-Vorschlag '$BRANCH' ist eingespielt — dist am PC neu gebaut. Lucy war aus und bleibt aus; die neue Version startet beim nächsten Öffnen. ✅" -fi -exit 0 diff --git a/deploy/selbst-inventur.sh b/deploy/selbst-inventur.sh index 1bebbc3..12d4bcb 100644 --- a/deploy/selbst-inventur.sh +++ b/deploy/selbst-inventur.sh @@ -97,21 +97,9 @@ for x in sorted(off, key=lambda x: x.get("title") or ""): print("- [{}] {}".format(x.get("status", "?"), (x.get("title") or "")[:100])) ' 2>/dev/null || echo "(Queue nicht lesbar)" echo - echo "## Offene Karten im Auftragsbuch" - curl -sf -m 10 "$API/api/auftragsbuch" 2>/dev/null | python3 -c ' -import json, sys -try: - items = json.load(sys.stdin).get("items") or [] -except Exception: - items = [] -if not items: - print("- (keine)") -for it in sorted(items, key=lambda x: x.get("branch") or ""): - print("- {}:{}".format(it.get("repo", "mc2"), it.get("branch", "?"))) -' 2>/dev/null || echo "(Auftragsbuch nicht lesbar)" echo echo "## Feste Leitplanken (Kurzfassung — Details docs/wissen/)" - echo "- Jede Code-Zeile geht NUR ueber eine Auftragsbuch-Karte live (Klick des Commanders)." + echo "- Jede Code-Zeile geht NUR als Branch nach Gitea live: Ampel gruen, Merge durch den Commander, deploy.sh." echo "- TABU ohne explizites User-Ja: Security (approvals/Tokens/ufw/sudoers), ~/.hermes/config.yaml, systemd-Units, Hermes-Quellcode." echo "- Updates macht der Auto-Update-Timer mit Fangnetz — niemand sonst." } > "$STECK.tmp" 2>/dev/null diff --git a/deploy/skills/konzept-fliessband/SKILL.md b/deploy/skills/konzept-fliessband/SKILL.md index 9f76261..8c7fd6f 100644 --- a/deploy/skills/konzept-fliessband/SKILL.md +++ b/deploy/skills/konzept-fliessband/SKILL.md @@ -83,8 +83,8 @@ heavy-Rollen einer Runde am Stueck (heavy bleibt warm), DANN der Skeptiker (ein dieses Projekt nicht (noetige Komponente gibt es nur als Image o. ae.), sag das im Konzept AUSDRUECKLICH mit Begruendung — still ignorieren gilt nicht. - **★ Explizite Commander-Wahl UEBERSTIMMT deine Einschaetzung.** Steht im Auftrag eine Zeile - „AUFWAND (vom Commander gewaehlt): SIMPEL …" bzw. „… GRUENDLICH …" (der Commander hat im - Auftragsbuch „IDE: simpel" oder „IDE: gruendlich" geklickt), dann HALTE DICH DARAN — SIMPEL = + „AUFWAND (vom Commander gewaehlt): SIMPEL …" bzw. „… GRUENDLICH …" (der Commander hat in der + Ideen-Ansicht „IDE: simpel" oder „IDE: gruendlich" gewaehlt), dann HALTE DICH DARAN — SIMPEL = 2 Rollen/1 Runde, GRUENDLICH = volle 3-5 Rollen/bis 3 Runden — auch wenn deine eigene Schaetzung anders ausfaellt. Nur wenn KEINE solche Zeile da ist, entscheidest du selbst. - **Max 3 Denk-Runden — keine Endlosschleife.** Nach der letzten Runde (je nach Groesse 1-3) kommt diff --git a/deploy/skills/morning-report/SKILL.md b/deploy/skills/morning-report/SKILL.md index 7933a34..1d80678 100644 --- a/deploy/skills/morning-report/SKILL.md +++ b/deploy/skills/morning-report/SKILL.md @@ -17,5 +17,5 @@ Dieser Skill fungiert als dein persönlicher, KI-gesteuerter Sysadmin, der dir j 1. **System-Metriken abrufen**: Ruft den Health-Status und Load der Box ab. 2. **Logs durchkämmen**: Sucht nach Auffälligkeiten, Fehlern oder Crashes in der Nacht. 3. **News Fetching**: Liest die Top-Posts von Hacker News (oder anderen Tech-Feeds), filtert sie nach AI-Relevanz und fasst die 3 wichtigsten Entwicklungen zusammen. -4. **Auftragsbuch Check**: Prüft, ob neue unentschiedene Vorschläge im Auftragsbuch liegen. +4. **Offene Branches**: Nennt ungemergte Vorschlags-Branches auf Gitea (wartung/*, feature/*, doku/*), falls welche warten. 5. **Report Generierung**: Bündelt all diese Informationen in eine kompakte, handyfreundliche (sehr kurze) Nachricht und schickt sie via Telegram an den Commander. diff --git a/docs/AUFTRAGSBUCH.md b/docs/AUFTRAGSBUCH.md deleted file mode 100644 index 5723d5f..0000000 --- a/docs/AUFTRAGSBUCH.md +++ /dev/null @@ -1,169 +0,0 @@ -# Auftragsbuch — die Vorschlags-Inbox der Box - -Das Auftragsbuch ist das Mensch-Gate des propose-only-Kreislaufs als Klick statt -Git-Handarbeit: alles, was die Box von allein baut oder sich ausdenkt, landet hier -als Karte — du entscheidest mit **Annehmen** oder **Ablehnen**. - -## Die Ideen-Queue davor (natives Hermes-Kanban, seit 10.07.2026) - -Vor dem Auftragsbuch liegt DIE eine Ideen-Queue: das native Hermes-Kanban -(`hermes kanban`, SQLite-Board, Dispatcher läuft im Gateway). Der Weg einer Idee: - -1. **Idee rein — Tür egal:** Eingabefeld im Auftragsbuch-Tab (`POST /api/ideen`), - Telegram/Desktop (natives Tool `kanban_create`, Regel in SOUL.md) oder Lucys - Sprech-Leitung (`idee_notieren` in `mcp/mcp_voice.py`). Alles landet als - `triage`-Aufgabe auf demselben Board. -2. **Die Box arbeitet sie aus:** der Kanban-Specifier macht aus der rohen Idee - einen sauberen Auftrag und wählt das Worker-Profil (Routing über die - Profil-Beschreibungen: Code → `werkstatt` [Qwen3-Coder-Next, Leitplanken in - `deploy/werkstatt-SOUL.md`], Doku/Analyse → `default`). -3. **Der Worker baut** im isolierten Workspace; Code-Ergebnisse pusht er als - Vorschlags-Branch auf Gitea — der hier als Karte erscheint. **Das Gate bleibt - dein Klick.** - -**Die Queue füttert sich auch selbst — Idle-Radar (S4 „Zündung", 12.07.2026):** ein -nächtlicher Hermes-Cron (03:45, `deploy/idle-radar-feed.sh`) destilliert aus den -Journal-Fehlermustern der letzten 24 h und der jüngsten Traum-Notiz bis zu **2 belegte** -Wartungs-Kandidaten und legt sie als rohe Ideen (`triage`, `created_by=idle-radar`) auf -dasselbe Board. Leitplanken: jedes Beleg-Zitat wird **mechanisch** gegen das Material -geprüft (erfundene Belege fliegen raus — reproduziert-oder-abgelehnt), **Stau-Bremse** -(ab 4 offenen Queue-Aufgaben oder 3 offenen Karten legt er nichts nach), dreifacher -Dedup (State-Datei `~/.hermes/state/idle-radar-gemeldet.txt`, Board-Abgleich inklusive -archivierter = verworfener Ideen, `--idempotency-key`), Security/Config/Updates tabu. -Der Radar legt nur Ideen an — gebaut wird über denselben Kreislauf, dein Klick bleibt -das Gate. - -Die Queue-Sicht im Tab (Status, offene Ideen) kommt aus `hermes kanban list --json` -(`backend/services/ideen.py`); die Morgenlage bekommt `kanban stats` als -Beweismaterial. Entscheid nativ-vs-Eigenbau (Hermes-first): Probe 10.07.2026 — -Dispatcher, Specifier, Profil-Modellwahl und Artefakt-Tracking sind nativ E2E -bewiesen; ein Eigenbau hätte all das nur nachgebaut. - -## Woher die Karten kommen - -- **Fertige Patches** — Branches auf Gitea (`wartung/*`, `orchestrator/*`, `doku/*`, - `feature/*`), wie die Werkstatt und der Orchestrator sie hinterlassen. Die Karte - zeigt Commit-Botschaft, geänderte Dateien und den vollen Diff. Seit S3 - (lucy-pipeline) aus **zwei Repos**: `mission-control-v2` (Box-Stack) und `lucy` - (Desktop-App, rosa „Lucy"-Badge auf der Karte). -- **Skill-Kandidaten** — Ideen des nächtlichen Traum-Crons aus dem Wissens-Vault - (`~/wissens-vault/skill-kandidaten/`). „Beauftragen" schickt sie als Auftrag an - die Werkstatt (Orchestrator-Skill); das Ergebnis kommt als neuer Patch zurück. - -## Was „Annehmen" bei einem Patch macht (deploy/auftrag-annehmen.sh) - -1. Merge des Branches in einem **isolierten Worktree** (Live-Checkout bleibt unberührt). - Kollidiert der Merge, weil main weitergelaufen ist, versucht der Runner **automatisch - einen Rebase** des Branches auf main (Selbstheilung für veraltete Vorschläge) — erst - wenn auch der kollidiert, fällt die Karte mit ehrlicher Meldung durch. -2. `py_compile`-Gate über die geänderten Python-Dateien. -3. Push nach `main` auf Gitea (mit Retry). -4. Deploy (als /tmp-Kopie von deploy.sh — Selbst-Reset-Falle) — die Zentrale - startet dabei kurz neu. -5. Health-Check mit Geduld. **Rot ⇒ automatischer Revert des Merges + Redeploy + - Alarm.** Grün ⇒ Branch wird aufgeräumt, Meldung an Telegram + Chronik. - -Der Lauf ist eine eigene systemd-Unit (detached) — er überlebt den Neustart des -Backends, das ihn gestartet hat. Fortschritt steht live auf der Karte -(`/srv/models/mc2-auftragsbuch.json`). - -**Kaputt aufgesetzte Branches** (Worker machte `git init`/Shallow statt zu klonen → kein -gemeinsamer Ursprung mit main, „refusing to merge unrelated histories") erkennt das -Auftragsbuch an der Quelle: rote Markierung „kein gemeinsamer Ursprung", der -Annehmen-Knopf fehlt (Annehmen wäre ein garantierter Fehllauf), API und Runner halten -zusätzlich dicht. Ebenso markiert: „Diff leer — bringt nichts" (Branch würde gegenüber -main nichts ändern). In beiden Fällen: **ablehnen mit Grund** und die Idee frisch in die -Queue geben; die Prävention (voll klonen, merge-base-Selbstcheck, fetch+rebase vor dem -Push) steht in der werkstatt-SOUL. - -## Was „Annehmen" bei einer LUCY-Karte macht (deploy/lucy-annahme.sh) - -Lucy (Electron) lebt auf dem Windows-PC; ihr `dist` liegt nicht im Repo — die Box -kann sie nicht bauen. Der Lucy-Runner spannt darum den PC ein (PC-Executor :7777, -Token aus `~/.hermes/config.yaml`): - -1. **Vorprüfung am PC, VOR dem Merge:** Executor erreichbar? Arbeitskopie - `F:\Coding Stuff\lucy` auf `main` und sauber? Läuft Lucy gerade? Scheitert etwas, - bricht der Lauf ab, ohne irgendetwas zu verändern — der PC muss an sein. -2. Merge des Branches im isolierten Worktree von `~/lucy` → Push nach `main`. -3. Der PC zieht `main` (ff-only) und startet **detached** - `deploy/lucy-annahme.ps1` (liegt im Lucy-Repo): ggf. `npm ci` (nur wenn sich - das Lockfile geändert hat) → `tsc --noEmit`-Gate → dist-Backup → `npm run dist` - → Lucy-Neustart **nur, wenn sie vorher lief** (User-Entscheid: Lucy startet - nur, wenn der Commander sie will) → Stimme-Health (`:8130`). -4. Die Box pollt die PC-Status-Datei (`.lucy-annahme.json`) und spiegelt den - Fortschritt live auf die Karte. **Rot ⇒ Merge wird automatisch revertiert**, - der PC stellt dist aus dem Backup wieder her — die laufende Lucy bleibt die - alte. Grün ⇒ Branch aufgeräumt, Meldung an Telegram + Chronik. - -## Bagatellen ohne Klick (mc2-bagatell.timer, 04:10) - -Einzige Ausnahme vom Klick-Gate (User-Entscheid 10.07.2026, bewusst eng geschnitten): -`deploy/bagatell-annahme.sh` spielt nachts Vorschlags-Branches ein, deren Diff -**ausschließlich `.md`-Dateien anlegt oder ändert** — keine Code-Zeile, keine -Löschungen, keine Renames, keine Skripte. Der Weg ist derselbe Annahme-Runner wie -beim Klick (Merge → Gate → Deploy → Health → Auto-Revert), maximal 2 pro Nacht und -nur Branches ohne vorherige Fehl-Läufe. Fangnetz: Nacht-Sicherung 03:30 liegt davor, -jede Annahme steht in Chronik + Telegram, die Morgenlage 04:30 berichtet. Die Klasse -erweitert nur der Commander, nie das Skript. - -## „Lucy kennt sich" (12.07.2026): Selbstbild, Empfehlungs-Stempel, Lern-Gedächtnis - -- **Selbst-Inventur (Cron 03:35, `deploy/selbst-inventur.sh`):** erhebt den - **Selbst-Steckbrief** der Box live aus der Realität (Versionen, Dienste, Modelle, - Crons, Queue, Karten → `~/.hermes/state/selbst-steckbrief.md`) und **bemerkt selbst, - wenn sich etwas ändert** (Diff gegen gestern → stille Chronik-Karte + kurze - Telegram-Zeile; keine Änderung = still). Der Steckbrief ist das „was es schon - gibt"-Gedächtnis: Idle-Radar-Analyst und Werkstatt (Realitäts-Check-Regel) lesen ihn, - bevor sie vorschlagen oder bauen. -- **Karten-Gutachter (Cron 04:00, `deploy/karten-gutachter.sh`):** stempelt jede neue - Karte mit **„Empfehlung: Annehmen/Ablehnen/Unklar" + einem ehrlichen Satz** — - geprüft werden Redundanz (existiert das laut Steckbrief schon?), Risiko und Nutzen. - Der Stempel ist eine Meinung, kein Gate; ein nachgeschobener Commit macht ihn - ungültig (wird neu gestempelt). Ablage `/srv/models/mc2-karten-gutachten.json`. -- **Ablehnen mit Grund:** Beim Ablehnen einer Karte kannst du der Box in einem Satz - sagen, *warum* („gibt es schon", „will ich nicht"). Der Grund landet in - `/srv/models/mc2-ablehnungen.jsonl` und wird Radar/Analysten als „NIE wieder - vorschlagen"-Material vorgelegt — dein Klick wird damit zum Lehrer, nicht nur zum Tor. -- **Radar-Treffer → Queue:** Meldet der wöchentliche Release-Radar einen echten Treffer, - legt er zusätzlich EINE rohe Idee in die Ideen-Queue („Probe bauen?", idempotent je - Release-Tag) — der Blick nach draußen füttert damit denselben Kreislauf. - -## Curator Auto-Archivierung (Cron `0 3 * * *` — täglich um 03:00) - -**Zweck:** Automatische Archivierung inaktiver Skills nach 14 Tagen ohne Nutzung. - -**Skripte:** -- `~/.hermes/scripts/curator-archive-watchdog.sh` — Cron-Einstieg, ruft das Python-Skript auf. -- `~/.hermes/scripts/curator_archive_logic.py` — Hauptlogik. Liest `.curator_state` und `.usage.json` aus `~/.hermes/skills/`, prüft auf Inaktivität (>14 Tage seit letztem Gebrauch), überspringt gepinnte und exkludierte Skills, verschiebt Skills nach `.archive//`. -- `~/.hermes/scripts/curator-idle-watchdog.sh` — Zusätzlicher Watchdog (Sonntag 00:00, Cron `0 0 * * 0`): prüft, ob der Curator selbst ≥14 Tage idle ist und triggert ggf. eine Reaktivierung. - -**Konfiguration** (`~/.hermes/skills/.curator_state`): -- `archivierung.enabled: false` — Archivierung muss explizit aktiviert werden. -- `archivierung.threshold_days: 14` — Tage ohne Nutzung bis zur Archivierung. -- `archivierung.excluded_skills: [...]` — Liste der nie zu archivierenden Skills. -- `archivierung.last_archive_run_at` — Zeitstempel des letzten Durchlaufs. - -**Ablauf im Durchlauf:** -1. Prüft, ob Archivierung aktiviert ist. -2. Läuft alle Skills durch `.usage.json`. -3. Überspringt: gepinnte Skills, exkludierte Skills, aktive Skills (<14 Tage). -4. Archiviert: State auf "archived" setzen, Verzeichnis nach `.archive//` verschieben, Usage-Datei aktualisieren. -5. Protokolliert in `~/.hermes/logs/curator/archive-.log`. - -**Sicherheit:** -- Archivierung standardmäßig deaktiviert — passiert nie ohne explizite Freigabe. -- Gepinnte und exkludierte Skills werden nie berührt. -- Archivierung ist reversibel: Skills können manuell aus `.archive/` zurückverschoben werden. - -## Leitplanken - -- Propose-only bleibt: **keine Code-Zeile geht ohne Klick live.** Das Gate ist dieses - Buch; einzige Ausnahme sind die eng geschnittenen Doku-Bagatellen (oben). -- „Frontend ohne Build"-Warnung (nur mc2): enthält ein Branch `frontend/src` ohne - frisches `frontend/dist`, bleibt die Oberfläche nach dem Annehmen alt, bis am PC - gebaut wird. Lucy-Karten brauchen die Warnung nicht — dort baut IMMER der PC. -- Ablehnen löscht nur den Remote-Branch; die Historie auf Gitea bleibt. - -Diese Datei kam übrigens selbst über das Auftragsbuch ins Repo — als erste echte -End-to-End-Annahme (Probe-Branch `wartung/annahme-probe`, 08.07.2026). diff --git a/docs/BEDIENUNG.md b/docs/BEDIENUNG.md index 502b72f..5226f06 100644 --- a/docs/BEDIENUNG.md +++ b/docs/BEDIENUNG.md @@ -8,7 +8,6 @@ ## Die Bereiche (Sidebar, Stand 09.07.2026) - **Cockpit** — deine Box auf einen Blick (Status, Leistung, Morgenlage, Erinnerungen). -- **Auftragsbuch** — Vorschläge der Box (Werkstatt/Orchestrator/Traum) per Ein-Klick annehmen/ablehnen. - **Modelle** — Speicherleiste, installierte Modelle + neue finden/laden, Rollen (hermes/fast/heavy/…). - **Gedächtnis** — geteilte Fakten/Regeln, die ALLE Tools (Hermes, Desktop, PC) via MCP lesen/schreiben. - **Wissen** — Lucys Wissens-Vault (Traum-Notizen, `[[verlinkt]]` navigierbar). diff --git a/docs/GEMINI_BRIEFING.md b/docs/GEMINI_BRIEFING.md index 219ae7c..2fdc408 100644 --- a/docs/GEMINI_BRIEFING.md +++ b/docs/GEMINI_BRIEFING.md @@ -8,7 +8,7 @@ lies das hier KOMPLETT, bevor du irgendetwas empfiehlst oder änderst._ **Notfall + Außen-Review. KEIN Großbau-Partner.** Den Alltag (Features bauen, Wartung, Ideen umsetzen) macht die Box selbst über ihre -Queue→Karte→Klick-Pipeline. Du wirst gerufen, wenn: +Ideen-Queue und Branch→Ampel→Merge-Pipeline. Du wirst gerufen, wenn: 1. **Notfall** — etwas ist kaputt und die Box kann sich nicht selbst heilen. 2. **Außen-Review** — ein Fremd-Blick auf Code/Architektur ist gewünscht @@ -34,8 +34,7 @@ Eine 100 % lokale KI-Appliance („die Box", AMD Strix Halo, 128 GB) mit llama.c llama-swap als Engine, Hermes-Agent als Runtime (Persona „Lucy"), MC2 (dieses Repo: FastAPI + React) als Web-Admin-Konsole, Mem0 als Gedächtnis, und einer Electron-Voice-Begleiterin „Lucy" auf dem Windows-PC (EIGENES Repo `F:\Coding Stuff\lucy`). Die Box wartet sich selbst -(nächtliche Crons: Traum, Chef-Gutachter, Radar; Backups in 3 Schichten; Auftragsbuch mit -Ein-Klick-Annahme). Der Mensch ist das Gate für jede Code-Zeile. +(nächtliche Crons: Traum, Chef-Gutachter, Radar; Backups in 3 Schichten). Der Mensch ist das Gate für jede Code-Zeile. ## Harte Leitplanken (nicht verhandelbar) @@ -44,8 +43,8 @@ Ein-Klick-Annahme). Der Mensch ist das Gate für jede Code-Zeile. ohne Bench, Hermes-Quellcode nie forken. - **Security-Config (approvals/Tokens/ufw/sudoers) nur MELDEN, nie ändern.** - **`frontend/dist` ist ABSICHT im Git** (Box hat kein Node) — kein Fehler. -- **Propose-only:** Änderungen als Branch/Diff vorschlagen; Merge+Deploy läuft über das - Auftragsbuch (User-Klick) oder ein explizites User-Ja. +- **Propose-only:** Änderungen als Branch/Diff vorschlagen; Merge+Deploy macht nur der User + (Ampel grün, dann `deploy.sh`). - **Verifizieren vor Behaupten:** Behauptungen über Live-Verhalten nur nach echter Messung auf der Box. Am 07.07. hat ein Gemini-Umbau Lucys STT still von Box-Parakeet auf einkernigen PC-Whisper umgestellt und das Gegenteil behauptet — die Messung entlarvte es. diff --git a/docs/RUNBOOK.md b/docs/RUNBOOK.md index c7a15b6..25c5a99 100644 --- a/docs/RUNBOOK.md +++ b/docs/RUNBOOK.md @@ -11,7 +11,7 @@ höchstens „mach". Dieses Blatt ist NUR für den Fall, dass etwas klemmt. | „… zurückgerollt … GEPINNT" | Update war schlecht, alte Version läuft wieder | keiner (läuft stabil weiter) | | „KRITISCH: …" | Update UND Rollback kaputt | siehe „Box tot?" unten | | „🛰️ Evolution-Radar …" | monatlicher Chancen-Report | lesen; bei Interesse „mach" antworten | -| „[Werkstatt] … Vorschlag liegt bereit" | Box hat einen Fix vorbereitet | im Web-UI → **Auftragsbuch** → Karte ansehen → „Annehmen" oder „Ablehnen" klicken | +| „[Werkstatt] … Vorschlag liegt bereit" | Box hat einen Fix vorbereitet | Branch auf Gitea ansehen → Ampel grün? → selbst auf main mergen → `deploy.sh` | ## Box tot / Weboberfläche weg? diff --git a/docs/skills/gitea-workflow.md b/docs/skills/gitea-workflow.md index 0a0e79c..958f82b 100644 --- a/docs/skills/gitea-workflow.md +++ b/docs/skills/gitea-workflow.md @@ -11,7 +11,7 @@ Der Skill beschreibt einen alternativen Git-Workflow für Fälle, in denen der d 3. Änderungen im Clone gemacht, committet, gepusht. 4. Ein Pull Request via Gitea-REST-API auf `main` erstellt. -Das Ergebnis landet als Vorschlags-Branch auf Gitea und geht über das Auftragsbuch ins Live-System — der Commander muss es annehmen. +Das Ergebnis landet als Vorschlags-Branch auf Gitea — der Commander merged es selbst, wenn die Ampel grün ist. ## Wann er zum Einsatz kommt diff --git a/docs/wissen/ARBEITSWEISE.md b/docs/wissen/ARBEITSWEISE.md index 53528ec..c281caa 100644 --- a/docs/wissen/ARBEITSWEISE.md +++ b/docs/wissen/ARBEITSWEISE.md @@ -27,7 +27,7 @@ _Kuratiert 10.07.2026. Gilt für JEDEN Agenten, der an diesem System arbeitet 2. **Scope challengen.** Ein Tool-/Technik-Vorschlag (auch vom User) ist kein Umsetzungsbefehl: erst Use-Case klären, bei erkennbarer Fehlannahme kurz stoppen und warnen. Lehrbuch-Best-Practice ≠ unser Use-Case (Beispiele: LobeChat, Tool Search). -3. **Propose-only + Mensch-Gate.** Jede Code-Zeile ist Klick-pflichtig (Auftragsbuch-Karte). +3. **Propose-only + Mensch-Gate.** Jede Code-Zeile geht als Branch nach Gitea; gemergt wird nur vom User (Ampel grün). Merge/Deploy NIE ohne grünes Gate. Bagatell-Klassen ohne Klick sind ausschließlich: Doku/Wiki/Vault/Chronik/tote Dateien — nichts mit Code-Logik, immer Morgenlage-Bericht. 4. **Security-Config NIE ohne explizites User-Ja** (approvals, Tokens, ufw, sudoers, @@ -49,7 +49,7 @@ _Kuratiert 10.07.2026. Gilt für JEDEN Agenten, der an diesem System arbeitet - **Hermes Desktop** = Arbeit: Projekte, Coding, Review, lange Threads (cli-Lane). Faustregel: „Repo oder >2 Minuten → Desktop". - **Telegram** = mobil + Melde-/Freigabe-Kanal (Alarmkette, Cron-Delivery). -- **MC2-Web-UI** = Verwaltung, Auftragsbuch (Karten-Klicks), Chronik/Zeitmaschine, Wissen. +- **MC2-Web-UI** = Verwaltung, Ideen, Chronik/Zeitmaschine, Wissen. **Steuerpult, kein Chat** — Gesprächs-/Voice-Funktionen gehören zu Lucy/Telegram, nicht in MC2. - **Gemini/Antigravity** = Notfall + Außen-Review, siehe [GEMINI_BRIEFING](../GEMINI_BRIEFING.md). diff --git a/docs/wissen/FALLEN.md b/docs/wissen/FALLEN.md index 4bf14ee..a9eeb33 100644 --- a/docs/wissen/FALLEN.md +++ b/docs/wissen/FALLEN.md @@ -30,13 +30,10 @@ Neue Fallen: hier eintragen, mit Datum und Symptom._ Worker `git init`/Shallow statt voll zu klonen, entsteht ein Branch OHNE gemeinsamen Vorfahren — Erkennungsmuster auf der Karte: **Diff „0 Dateien" + „hinter main" ≈ ganze Historie** (z. B. 386). Merge ist NIE möglich; oft ist der Inhalt obendrein Müll - (~/.hermes-Dateien statt Repo-Dateien). Seit 12.07.2026 markiert das Auftragsbuch solche - Karten („kein gemeinsamer Ursprung", Annehmen-Knopf weg) → ablehnen mit Grund, Idee neu - in die Queue. Prävention steht in der werkstatt-SOUL (voll klonen + merge-base-Selbstcheck). -- **Ehrlich-veraltete Branches (echter Merge-Konflikt):** die Annahme versucht seit - 12.07.2026 automatisch einen Rebase auf main (isolierter Worktree, Gates laufen danach - normal). Nur wenn AUCH der Rebase kollidiert, fällt die Karte durch — dann ablehnen und - die Idee frisch einqueuen statt „am PC auflösen". + (~/.hermes-Dateien statt Repo-Dateien). (Historisch: das Auftragsbuch markierte solche Branches; es ist seit 04.09.2026 + ausgebaut.) Erkennung heute: `git merge-base main ` leer → Branch verwerfen. Prävention steht in der werkstatt-SOUL (voll klonen + merge-base-Selbstcheck). +- **Ehrlich-veraltete Branches (echter Merge-Konflikt):** vor dem Merge `git rebase main` + auf dem Branch; kollidiert auch das, Branch verwerfen und die Idee frisch aufsetzen. ## Box / systemd / llama-swap diff --git a/docs/wissen/GRENZEN.md b/docs/wissen/GRENZEN.md index 45325fb..90c0867 100644 --- a/docs/wissen/GRENZEN.md +++ b/docs/wissen/GRENZEN.md @@ -12,15 +12,15 @@ Funktion an der falschen Fläche ist Murks, auch wenn sie „funktioniert"._ | Fläche | Code/Ort | ✅ Gehört hierhin | ❌ Gehört NICHT hierhin | |---|---|---|---| -| **MC2 – Steuerpult** | `~/mission-control-v2` (backend Py + frontend React) `:9001` | Verwaltung, Auftragsbuch/Karten-Klicks, Chronik/Zeitmaschine, Wissens-Tab, Modelle/Rollen, System-Status/Logs, Ideen-Queue-**Eingabe**, Wartung/Updates | **Ein Chat-/Gesprächsfenster** oder ein Konversations-Assistent — dafür ist Lucy/Telegram/Hermes-Desktop da. MC2 wird angeschaut und geklickt, nicht „zugetextet". | -| **Lucy – Chat & Stimme** | eigenes Repo `F:\Coding Stuff\lucy` (Electron, `lucy-desktop/`+`lucy-tts/`) | Voice/Zuruf, Gespräch, Avatar/Animation, proaktive Meldungen, Wake-Word/Barge-in, Zettelkasten | **Verwaltungs-/Wartungs-Oberfläche** (Update-Knöpfe, Karten-Verwaltung, System-Logs) — das ist MC2. Lucy bleibt schlank (~1-s-Sprech-Latenz schützen). | +| **MC2 – Steuerpult** | `~/mission-control-v2` (backend Py + frontend React) `:9001` | Verwaltung, Chronik/Zeitmaschine, Wissens-Tab, Modelle/Rollen, System-Status/Logs, Ideen-Queue-**Eingabe**, Wartung/Updates | **Ein Chat-/Gesprächsfenster** oder ein Konversations-Assistent — dafür ist Lucy/Telegram/Hermes-Desktop da. MC2 wird angeschaut und geklickt, nicht „zugetextet". | +| **Lucy – Chat & Stimme** | eigenes Repo `F:\Coding Stuff\lucy` (Electron, `lucy-desktop/`+`lucy-tts/`) | Voice/Zuruf, Gespräch (innere Stimme, kein Avatar seit 04.09.2026), proaktive Meldungen, Wake-Word/Barge-in, Zettelkasten | **Verwaltungs-/Wartungs-Oberfläche** (Update-Knöpfe, System-Logs) — das ist MC2. Lucy bleibt schlank (~1-s-Sprech-Latenz schützen). | | **Hermes – Agenten-Fundament** | `~/.hermes/hermes-agent` (Framework), `~/.hermes/config.yaml`, `SOUL.md`, `skills/`, `agent-hooks/`, `mcp/` | Agenten-VERHALTEN ändern: über **Config, SOUL, Skills, Hooks, MCP-Server, Plugins** | **Quellcode patchen/forken — NIEMALS.** Kein Edit in `~/.hermes/hermes-agent/`. Fehlt ein Feature nativ → Config/Skill/Hook/MCP drumherum, nicht die Engine ändern. | | **Telegram** | Hermes-Platform-Lane | mobil: Meldungen empfangen, Freigaben/Zurufe, Alarmkette, Cron-Delivery | Kein Bau-Ziel für UIs. Ist ein Kanal, keine App. | | **Hermes Desktop** | PC-Hermes, Profil `pc`, Hirn = Box `:9001/v1` | Arbeit am PC: Projekte, Coding, Review, lange Threads. Faustregel „Repo oder >2 Min → Desktop". | Nicht mit Lucy verwechseln (Zuruf/Voice) — Desktop ist die Werkbank. | ## „Ich will X bauen — wohin?" (Schnell-Entscheid) -- **Etwas verwalten/anzeigen/klicken (Status, Karten, Logs, Modelle, Backups, Updates)** → **MC2** (backend + frontend). +- **Etwas verwalten/anzeigen/klicken (Status, Logs, Modelle, Backups, Updates)** → **MC2** (backend + frontend). - **Reden/hören/begleiten (Sprache, Gespräch, Avatar, proaktiv melden)** → **Lucy** (eigenes Repo). - **Wie der Agent SICH VERHÄLT (Routing, Prompts, neue Fähigkeit, Werkzeug, Guardrail)** → **Hermes drumherum**: `config.yaml` / `SOUL.md` / ein **Skill** / ein **Hook** (`agent-hooks/`) / diff --git a/docs/wissen/OFFENE-FAEDEN.md b/docs/wissen/OFFENE-FAEDEN.md index 4f0bd09..bab0199 100644 --- a/docs/wissen/OFFENE-FAEDEN.md +++ b/docs/wissen/OFFENE-FAEDEN.md @@ -70,10 +70,12 @@ keine zweite Liste anlegen. Verdikte werden NICHT als „offen" geführt → [VE `openai` + `base_url http://127.0.0.1:8021/v1` (Telegram spricht dann mit Lucys Stimme), SOUL.md-Ton auf Raphael (nur mit User-Ja). Ohr-Test Box-Stimme vs. lokal mit `lucy_perf=1`. Alles in [RAPHAEL.md](RAPHAEL.md). -- **Auftragsbuch = Leiche im Code (Fund 04.09.2026):** Router/View/Annahme-Skripte liegen noch in - main, die Box listet Branches als Karten, aber letzte Annahme 02.08. (revertiert), Kanban-Tools - seit 21.08. aus, PC-Executor-IP in der Box veraltet (`.98` statt `.22`), STACK.md nennt den Weg - trotzdem „Standard". Entscheid nötig: ausbauen + STACK.md/GRENZEN.md auf den manuellen Weg. +- **Auftragsbuch ausgebaut (04.09.2026, Branch `wartung/auftragsbuch-ausbau`):** Router, Service, + View, Annahme-Skripte, Bagatell-Annahme, `docs/AUFTRAGSBUCH.md` weg; Cockpit zeigt Ideen statt + Karten; STACK/GRENZEN/ARBEITSWEISE/README auf den Branch→Ampel→Merge-Weg. Reste, die bewusst + blieben: `deploy/werkstatt-SOUL.md` + `projektstart-SOUL.md` (Werkstatt-Persona, seit Kanban-Aus + ohnehin tot — eigener Aufräum-Faden), Chronik-Kategorie „auftragsbuch" (historische Einträge). + Auf der Box: `mc2-bagatell.timer` deaktiviert, PC-Executor-URL in `~/.hermes/config.yaml` auf .22. - **Nach dem Ohr-Test:** VERDIKTE.md-Einträge „Electron, nicht Tauri" (Begründung Overlay entfällt) und „STT läuft auf der BOX / Stimme lokal" ersetzen; Lucy-Repo-Altlasten (`mini-stimme/`, Kokoro-Notebooks, `Lucy-Startklar.bat` mit totem Pfad) mit User-Ja räumen. diff --git a/docs/wissen/RAPHAEL.md b/docs/wissen/RAPHAEL.md index 5e9d9ff..62c9d7c 100644 --- a/docs/wissen/RAPHAEL.md +++ b/docs/wissen/RAPHAEL.md @@ -84,9 +84,9 @@ Weg ist der aus AGENTS.md/STACK.md „Manuell": Die 21.08.-Notiz sagt „ganze Abstimmung mitgezogen" — wenn dort etwas Box-spezifisch getunt wurde, gehört es zurück ins Repo, nicht überschrieben. -**Aufräum-Kandidat (User-Entscheid):** Auftragsbuch-Router + View + Annahme-Skripte + PC-Executor- -Verweis ausbauen und STACK.md „Deploy & Pipeline" auf den manuellen Weg umschreiben — sonst -behauptet die Doku weiter einen Standard-Weg, den niemand mehr geht. +**Erledigt (04.09.2026, `wartung/auftragsbuch-ausbau`, baut auf diesem Branch auf):** Auftragsbuch- +Router, Service, View, Annahme-Skripte und Bagatell-Annahme sind raus; STACK.md „Deploy & Pipeline" +beschreibt nur noch den manuellen Weg. Wer `wartung/auftragsbuch-ausbau` merged, hat beide Branches. ## Mobil: Telegram ist die Tür, die Stimme ist dieselbe diff --git a/docs/wissen/README.md b/docs/wissen/README.md index 234fe96..0e0204a 100644 --- a/docs/wissen/README.md +++ b/docs/wissen/README.md @@ -34,6 +34,6 @@ Dazu im Repo-Wurzelverzeichnis bzw. docs/: `AGENTS.md` (verbindliche Projekt-Reg User-Entscheid) — dann in VERDIKTE.md den alten Eintrag ERSETZEN, nicht löschen. 3. **Verifizieren vor Behaupten:** Stand-Angaben tragen ein Datum; wer STACK.md ändert, hat live auf der Box gemessen/gelesen, nicht vermutet. -4. Änderungen laufen wie alles über die Pipeline: Branch → Karte im Auftragsbuch → Klick. +4. Änderungen laufen wie alles über die Pipeline: Branch → Ampel grün → Merge durch den User → deploy.sh. Reine Doku hier gehört zu den "Bagatellen ohne Klick"-Klassen (siehe ZIELBILD.md), erscheint aber immer in Morgenlage/Chronik. diff --git a/docs/wissen/STACK.md b/docs/wissen/STACK.md index 7566c50..ac9578b 100644 --- a/docs/wissen/STACK.md +++ b/docs/wissen/STACK.md @@ -114,10 +114,11 @@ Box-sudo braucht Passwort; NOPASSWD nur für update-engine/swap (`/etc/sudoers.d ## Deploy & Pipeline -- **Standard-Weg für Box-Arbeit = Auftragsbuch:** Vorschlags-Branch auf Gitea - (`wartung/*`, `orchestrator/*`, `doku/*`, `feature/*`) → Karte in der UI → User-Klick = - Merge + Deploy + Health + Auto-Revert (detached Runner). -- Manuell: main auf Gitea pushen → `ssh … 'bash ~/mission-control-v2/deploy/deploy.sh'` +- **Standard-Weg für Box-Arbeit (seit 04.09.2026 der EINZIGE):** Vorschlags-Branch auf Gitea + (`wartung/*`, `doku/*`, `feature/*`) → Ampel-CI grün → **der User merged auf main** → + `deploy.sh` auf der Box. Das Auftragsbuch (Karten-Klick, detached Annahme-Runner, Bagatell- + Annahme, Lucy-Annahme über den PC-Executor) ist ausgebaut — es war seit 02.08. ungenutzt. +- Deploy: main auf Gitea pushen → `ssh … 'bash ~/mission-control-v2/deploy/deploy.sh'` ODER `POST :9001/api/system/self-update` (restart meldet ok:false — harmlos, /api/health prüfen). - deploy.sh macht `git reset --hard origin/main` (main MUSS vorher auf Gitea liegen) und baut KEIN Frontend → dist lokal bauen + committen. Fallen: [FALLEN.md](FALLEN.md). diff --git a/docs/wissen/ZIELBILD.md b/docs/wissen/ZIELBILD.md index 6dbed4b..811d9a3 100644 --- a/docs/wissen/ZIELBILD.md +++ b/docs/wissen/ZIELBILD.md @@ -36,6 +36,9 @@ planen, **jede Session hinterlässt einen sauberen Stand**. Loft, Overlay, Mimik, Dazwischenrufe raus; ein HUD am PC, Telegram unterwegs, **eine Stimme** für beide (`lucy-stimme.service` auf der Box). Kein zweites Hirn auf dem PC. Details, Reihenfolge der Annahme und der SOUL.md-Vorschlag: [RAPHAEL.md](RAPHAEL.md). +9. **Auftragsbuch ausgebaut (04.09.2026).** Die Queue→Karte→Klick-Mechanik aus Punkt 2/3/5 war + seit 02.08. ungenutzt (Kanban-Tools seit 21.08. aus). Gate ist jetzt: Ampel grün + Merge durch + den User + `deploy.sh`. Bagatell-Annahme ohne Klick (Punkt 5) entfällt damit ebenfalls. ## Recherche-Fundament (10.07., Web) diff --git a/frontend/dist/assets/AgentView-fp_5ftXX.js b/frontend/dist/assets/AgentView-Ddy3G6Cn.js similarity index 98% rename from frontend/dist/assets/AgentView-fp_5ftXX.js rename to frontend/dist/assets/AgentView-Ddy3G6Cn.js index b975b1c..10d799e 100644 --- a/frontend/dist/assets/AgentView-fp_5ftXX.js +++ b/frontend/dist/assets/AgentView-Ddy3G6Cn.js @@ -1,4 +1,4 @@ -import{c as B,M as T,j as e,N as p,W as g,b as n,J as D,T as G,z as L,O as $,f as R,k as F,u as I,r as q,P as y,Q as v,t as w,X as U,C as k,n as _,q as u}from"./index-l6kyKCL9.js";import{S}from"./SectionLabel-zEOM9wM3.js";import{C as K}from"./clock-QfyF1ur_.js";import{E as O}from"./external-link-ClFd8iN1.js";import{S as Q}from"./shield-CVm2T_f5.js";/** +import{c as B,M as T,j as e,N as p,W as g,b as n,J as D,T as G,z as L,O as $,f as R,k as F,u as I,r as q,P as y,Q as v,t as w,X as U,C as k,n as _,q as u}from"./index-DMY9lUCb.js";import{S}from"./SectionLabel-B7ySrBs7.js";import{C as K}from"./clock-Bth-s5Y3.js";import{E as O}from"./external-link-DcJao8h4.js";import{S as Q}from"./shield-BtE9Fxv6.js";/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. diff --git a/frontend/dist/assets/AuftragsbuchView-BElnexXf.js b/frontend/dist/assets/AuftragsbuchView-BElnexXf.js deleted file mode 100644 index 203a0cc..0000000 --- a/frontend/dist/assets/AuftragsbuchView-BElnexXf.js +++ /dev/null @@ -1,15 +0,0 @@ -import{c as W,z as G,a2 as H,a3 as T,u as F,k as O,r as u,j as e,b as N,L as m,C as E,$ as P,a1 as z,a4 as R,X as I,T as B,G as V,n as $,a5 as _,q}from"./index-l6kyKCL9.js";import{S}from"./SectionLabel-zEOM9wM3.js";import{R as U}from"./refresh-cw-BV1qZMSR.js";import{A as Q}from"./arrow-right-DSSXd-8y.js";import{C as K}from"./clock-QfyF1ur_.js";import{C as M}from"./chevron-down-C5keVSfm.js";import{H as Z}from"./hammer-Cl-GywsD.js";/** - * @license lucide-react v0.460.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const J=W("FileDiff",[["path",{d:"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z",key:"1rqfz7"}],["path",{d:"M9 10h6",key:"9gxzsh"}],["path",{d:"M12 13V7",key:"h0r20n"}],["path",{d:"M9 17h6",key:"r8uit2"}]]);/** - * @license lucide-react v0.460.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const X=W("GitBranch",[["line",{x1:"6",x2:"6",y1:"3",y2:"15",key:"17qcm7"}],["circle",{cx:"18",cy:"6",r:"3",key:"1h7g24"}],["circle",{cx:"6",cy:"18",r:"3",key:"fqmcym"}],["path",{d:"M18 9a9 9 0 0 1-9 9",key:"n2h4wq"}]]),Y={wartung:"Werkstatt",orchestrator:"Orchestrator",doku:"Doku",feature:"Feature"},ee={laeuft:{label:"wird eingespielt …",cls:"text-sky-300 border-sky-500/40 bg-sky-500/10",spin:!0},rollback:{label:"Rollback läuft …",cls:"text-amber-300 border-amber-500/40 bg-amber-500/10",spin:!0},eingespielt:{label:"eingespielt ✓",cls:"text-emerald-300 border-emerald-500/40 bg-emerald-500/10"},fehlgeschlagen:{label:"fehlgeschlagen",cls:"text-red-300 border-red-500/40 bg-red-500/10"},zurueckgerollt:{label:"zurückgerollt",cls:"text-amber-300 border-amber-500/40 bg-amber-500/10"},kritisch:{label:"KRITISCH — Box prüfen",cls:"text-red-200 border-red-500/60 bg-red-500/20"},abgelehnt:{label:"abgelehnt",cls:"text-muted-foreground border-border/60 bg-background/30"}};function xe(){const t=G(),{data:r,isLoading:n,refetch:p,isFetching:o}=H(),{data:c}=T(),b=F(),{showAlert:f,showConfirm:k,dialogElement:w}=O(),[v,g]=u.useState({}),y=()=>b.invalidateQueries({queryKey:q.auftragsbuch});async function A(a,L,D,j){g(l=>({...l,[a]:!0}));try{await $(L,{method:"POST",body:JSON.stringify(D)}),j&&f("Erledigt",j),y()}catch(l){f("Das hat nicht geklappt",String((l==null?void 0:l.message)||l))}finally{g(l=>({...l,[a]:!1}))}}const h=(r==null?void 0:r.items)??[],x=(r==null?void 0:r.skill_kandidaten)??[],d=c!=null&&c.available?c.items.filter(a=>a.status==="blocked").length:0,C=h.length===0&&x.length===0;return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"bg-gradient-to-r from-foreground via-foreground to-primary bg-clip-text font-space text-2xl font-bold tracking-tight text-transparent",children:"Auftragsbuch"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Was die Box gebaut oder sich ausgedacht hat — du entscheidest. Annehmen spielt es mit Fangnetz ein (Health-Check, automatischer Rollback)."})]}),e.jsxs("button",{onClick:()=>p(),className:"flex h-9 items-center gap-1.5 rounded-lg border border-border/60 bg-card/45 px-3 text-xs font-semibold text-muted-foreground hover:text-foreground hover:border-primary/40 transition-all cursor-pointer",children:[e.jsx(U,{className:N("h-3.5 w-3.5",o&&"animate-spin")})," Aktualisieren"]})]}),r&&!r.available&&e.jsx("div",{className:"rounded-2xl border border-amber-500/30 bg-amber-500/5 p-4 text-xs text-amber-300",children:"Das Auftragsbuch lebt auf der Box (liest die Gitea-Branches dort). Im lokalen Dev-Modus ist hier nichts zu sehen."}),n&&e.jsxs("div",{className:"flex items-center gap-2 rounded-2xl border border-border/60 bg-card/30 p-6 text-xs text-muted-foreground",children:[e.jsx(m,{className:"h-4 w-4 animate-spin"})," Vorschläge werden geladen …"]}),(r==null?void 0:r.available)&&C&&e.jsxs("div",{className:"flex items-center gap-3 rounded-2xl border border-emerald-500/25 bg-emerald-500/5 p-5",children:[e.jsx(E,{className:"h-5 w-5 shrink-0 text-emerald-400"}),e.jsxs("div",{children:[e.jsx("p",{className:"text-sm font-semibold text-foreground",children:"Nichts zu entscheiden"}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Keine offenen Vorschläge. Werkstatt, Orchestrator und Traum melden sich hier, sobald es etwas gibt."})]})]}),d>0&&e.jsxs("button",{onClick:()=>t({to:"/ideen"}),className:"flex w-full items-center gap-3 rounded-2xl border border-red-500/30 bg-red-500/5 p-4 text-left transition-all hover:border-red-500/50 cursor-pointer",children:[e.jsx(P,{className:"h-5 w-5 shrink-0 text-red-300"}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("p",{className:"text-sm font-semibold text-foreground",children:d===1?"Eine Idee hängt und braucht dich":`${d} Ideen hängen und brauchen dich`}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Hier ist nichts zu tun — aber drüben in den Ideen wartet eine Frage auf deine Antwort."})]}),e.jsx(Q,{className:"h-4 w-4 shrink-0 text-red-300/70"})]}),h.length>0&&e.jsxs("section",{className:"space-y-3",children:[e.jsxs(S,{icon:X,children:["Patch-Vorschläge (",h.length,")"]}),h.map(a=>e.jsx(se,{item:a,busy:v,onAct:A,showConfirm:k},`${a.repo??"mc2"}:${a.branch}`))]}),x.length>0&&e.jsxs("section",{className:"space-y-3",children:[e.jsxs(S,{icon:z,children:["Skill-Kandidaten aus dem Traum (",x.length,")"]}),x.map(a=>e.jsx(ae,{k:a,busy:v,onAct:A,showConfirm:k},a.file))]}),w]})}function te({item:t}){const r=t.status;if(!r)return null;const n=ee[r.state];return n?e.jsxs("span",{className:N("flex items-center gap-1.5 rounded-lg border px-2 py-0.5 text-[10px] font-bold",n.cls),title:r.detail,children:[n.spin&&e.jsx(m,{className:"h-3 w-3 animate-spin"}),n.label]}):null}function re({item:t}){const r=t.ci_status;return r?r==="success"?e.jsxs("span",{className:"flex items-center gap-1 rounded-lg border border-emerald-500/30 bg-emerald-500/10 px-1.5 py-0.5 text-[10px] font-bold text-emerald-400",title:"CI-Ampel: Grün (Baut & läuft)",children:[e.jsx(E,{className:"h-3 w-3"})," CI Grün"]}):r==="failure"?e.jsxs("span",{className:"flex items-center gap-1 rounded-lg border border-red-500/30 bg-red-500/10 px-1.5 py-0.5 text-[10px] font-bold text-red-400",title:"CI-Ampel: Rot (Fehler)",children:[e.jsx(I,{className:"h-3 w-3"})," CI Rot"]}):r==="pending"?e.jsxs("span",{className:"flex items-center gap-1 rounded-lg border border-amber-500/30 bg-amber-500/10 px-1.5 py-0.5 text-[10px] font-bold text-amber-400",title:"CI-Ampel: Läuft",children:[e.jsx(m,{className:"h-3 w-3 animate-spin"})," CI Läuft"]}):null:null}function se({item:t,busy:r,onAct:n,showConfirm:p}){var D,j,l;const[o,c]=u.useState(!1),[b,f]=u.useState(null),[k,w]=u.useState(!1),[v,g]=u.useState(!1),[y,A]=u.useState(""),h=((D=t.status)==null?void 0:D.state)==="laeuft"||((j=t.status)==null?void 0:j.state)==="rollback",x=((l=t.status)==null?void 0:l.state)==="eingespielt",d=t.repo??"mc2",C=d==="lucy",a=`${d}:${t.branch}`;async function L(){const s=!o;if(c(s),s&&b===null){w(!0);try{const i=await $(`/api/auftragsbuch/diff?branch=${encodeURIComponent(t.branch)}&repo=${d}`);f(i.diff+(i.truncated?` -… (gekürzt)`:""))}catch(i){f(`(Diff nicht ladbar: ${(i==null?void 0:i.message)||i})`)}finally{w(!1)}}}return e.jsxs("div",{className:"mc-card p-4 space-y-3",children:[e.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-3",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx("span",{className:"rounded-md border border-primary/30 bg-primary/10 px-1.5 py-0.5 text-[10px] font-bold uppercase tracking-wider text-primary",children:Y[t.kind]??t.kind}),C&&e.jsx("span",{className:"rounded-md border border-pink-500/40 bg-pink-500/10 px-1.5 py-0.5 text-[10px] font-bold uppercase tracking-wider text-pink-300",title:"Vorschlag fürs Lucy-Repo — Annehmen baut die App am PC neu und startet sie neu, wenn sie läuft.",children:"Lucy"}),e.jsx("span",{className:"font-mono text-[11px] text-muted-foreground truncate",title:t.branch,children:t.branch}),e.jsxs("span",{className:"flex items-center gap-1 text-[10px] text-muted-foreground/70",children:[e.jsx(K,{className:"h-3 w-3"}),R(t.ts)]}),e.jsx(re,{item:t}),e.jsx(te,{item:t})]}),e.jsx("p",{className:"mt-1.5 text-sm font-semibold text-foreground",children:t.subject||"(ohne Titel)"}),t.body&&e.jsx("p",{className:"mt-1 whitespace-pre-wrap text-xs leading-relaxed text-muted-foreground line-clamp-6",children:t.body}),t.empfehlung&&e.jsxs("p",{className:N("mt-1.5 flex items-start gap-1.5 rounded-lg border px-2 py-1 text-[11px]",t.empfehlung.empfehlung==="ANNEHMEN"&&"border-emerald-500/30 bg-emerald-500/5 text-emerald-300",t.empfehlung.empfehlung==="ABLEHNEN"&&"border-red-500/30 bg-red-500/5 text-red-300",t.empfehlung.empfehlung==="UNKLAR"&&"border-amber-500/30 bg-amber-500/5 text-amber-300"),title:`Nächtliches Kurz-Gutachten (${t.empfehlung.richter}) — eine Meinung, kein Muss. Die Entscheidung bleibt bei dir.`,children:[e.jsx(z,{className:"mt-0.5 h-3 w-3 shrink-0"}),e.jsxs("span",{children:[e.jsxs("b",{children:["Empfehlung: ",t.empfehlung.empfehlung==="ANNEHMEN"?"Annehmen":t.empfehlung.empfehlung==="ABLEHNEN"?"Ablehnen":"Unklar","."]})," ",t.empfehlung.satz]})]})]}),!h&&!x&&e.jsxs("div",{className:"flex shrink-0 items-center gap-2",children:[!t.verwaist&&e.jsxs("button",{disabled:!!r[a],onClick:()=>p("Vorschlag annehmen?",C?`'${t.branch}' wird im Lucy-Repo auf main gemergt, dann baut dein PC die App neu (dist) und startet Lucy neu, falls sie gerade läuft. Der PC muss dafür an sein. Schlägt Build oder Start fehl, dreht die Box den Merge automatisch zurück — die laufende Lucy bleibt die alte.`:`'${t.branch}' wird auf main gemergt und live eingespielt. Die Zentrale startet dabei kurz neu. Geht der Health-Check danach rot, rollt die Box automatisch zurück.${t.frontend_ohne_build?` - -Achtung: Enthält Frontend-Quelltext ohne gebautes Bundle — die Oberfläche bleibt alt, bis am PC gebaut wird.`:""}`,()=>n(a,"/api/auftragsbuch/annehmen",{branch:t.branch,repo:d})),className:"flex h-9 items-center gap-1.5 rounded-lg border border-emerald-500/40 bg-emerald-500/10 px-3 text-[11px] font-bold uppercase tracking-wide text-emerald-300 transition-all hover:bg-emerald-500/20 cursor-pointer disabled:opacity-50",children:[r[a]?e.jsx(m,{className:"h-3.5 w-3.5 animate-spin"}):e.jsx(E,{className:"h-3.5 w-3.5"})," Annehmen"]}),e.jsxs("button",{disabled:!!r["ab:"+a],onClick:()=>g(s=>!s),className:"flex h-9 items-center gap-1.5 rounded-lg border border-red-500/30 bg-red-500/5 px-3 text-[11px] font-bold uppercase tracking-wide text-red-300/90 transition-all hover:bg-red-500/15 cursor-pointer disabled:opacity-50",children:[r["ab:"+a]?e.jsx(m,{className:"h-3.5 w-3.5 animate-spin"}):e.jsx(I,{className:"h-3.5 w-3.5"})," Ablehnen"]})]})]}),v&&!h&&!x&&e.jsxs("div",{className:"space-y-2 rounded-xl border border-red-500/25 bg-red-500/5 p-3",children:[e.jsxs("p",{className:"text-[11px] text-muted-foreground",children:["Der Branch '",t.branch,"' wird auf Gitea gelöscht (die Arbeit bleibt in der Historie). Sag der Box kurz ",e.jsx("b",{children:"warum"})," — dann schlägt sie dir so etwas nicht wieder vor."]}),e.jsx("input",{value:y,onChange:s=>A(s.target.value),placeholder:"Grund (optional) — z. B. „gibt es schon“ oder „will ich nicht“",maxLength:400,className:"w-full rounded-lg border border-border/60 bg-background/60 px-2.5 py-1.5 text-xs text-foreground placeholder:text-muted-foreground/50 focus:border-red-400/50 focus:outline-none"}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs("button",{disabled:!!r["ab:"+a],onClick:()=>{g(!1),n("ab:"+a,"/api/auftragsbuch/ablehnen",{branch:t.branch,repo:d,grund:y.trim()})},className:"flex h-8 items-center gap-1.5 rounded-lg border border-red-500/40 bg-red-500/10 px-3 text-[11px] font-bold uppercase tracking-wide text-red-300 transition-all hover:bg-red-500/20 cursor-pointer disabled:opacity-50",children:[e.jsx(I,{className:"h-3.5 w-3.5"})," Wirklich ablehnen"]}),e.jsx("button",{onClick:()=>g(!1),className:"flex h-8 items-center rounded-lg border border-border/60 bg-background/40 px-3 text-[11px] font-semibold text-muted-foreground transition-all hover:text-foreground cursor-pointer",children:"Abbrechen"})]})]}),t.status&&(h||!x)&&t.status.detail&&e.jsx("p",{className:"text-[11px] text-muted-foreground",children:t.status.detail}),t.verwaist&&e.jsxs("p",{className:"rounded-lg border border-red-500/30 bg-red-500/5 px-2 py-1.5 text-[11px] text-red-300/90",children:[e.jsx("b",{children:"Kaputt aufgesetzt:"})," Dieser Branch hat keinen gemeinsamen Ursprung mit main (der Werkstatt-Worker hat nicht richtig geklont) — Annehmen ist technisch unmöglich, deshalb fehlt der Knopf. Am besten ",e.jsx("b",{children:"ablehnen mit Grund"}),"; die Idee kann danach frisch in die Queue."]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-2 text-[11px] text-muted-foreground",children:[e.jsxs("span",{className:"rounded bg-background/40 px-1.5 py-0.5 font-mono",children:[t.ahead," Commit",t.ahead===1?"":"s"]}),t.shortstat&&e.jsx("span",{className:"rounded bg-background/40 px-1.5 py-0.5 font-mono",children:t.shortstat.trim()}),t.verwaist&&e.jsxs("span",{className:"flex items-center gap-1 rounded bg-red-500/10 px-1.5 py-0.5 text-red-300",title:"Kein gemeinsamer Vorfahre mit main — git kann diesen Branch niemals mergen.",children:[e.jsx(B,{className:"h-3 w-3"})," kein gemeinsamer Ursprung"]}),t.leer&&e.jsxs("span",{className:"flex items-center gap-1 rounded bg-amber-500/10 px-1.5 py-0.5 text-amber-300",title:"Der Diff gegen main ist leer — der Branch würde nichts verändern (Inhalt schon in main oder am Repo vorbei gearbeitet).",children:[e.jsx(B,{className:"h-3 w-3"})," Diff leer — bringt nichts"]}),t.behind>0&&!t.verwaist&&e.jsxs("span",{className:"flex items-center gap-1 rounded bg-amber-500/10 px-1.5 py-0.5 text-amber-300",title:"main ist seit diesem Vorschlag weitergelaufen — bei Konflikten versucht die Annahme automatisch einen Rebase.",children:[e.jsx(B,{className:"h-3 w-3"})," ",t.behind," hinter main"]}),t.frontend_ohne_build&&e.jsxs("span",{className:"flex items-center gap-1 rounded bg-amber-500/10 px-1.5 py-0.5 text-amber-300",title:"Die Box kann kein Frontend bauen (kein Node) — nach dem Annehmen bleibt die Oberfläche alt, bis am PC gebaut wird.",children:[e.jsx(B,{className:"h-3 w-3"})," Frontend ohne Build"]})]}),e.jsxs("div",{children:[e.jsxs("button",{onClick:L,className:"flex items-center gap-1.5 text-[11px] font-semibold text-muted-foreground hover:text-foreground transition-colors cursor-pointer",children:[o?e.jsx(M,{className:"h-3.5 w-3.5"}):e.jsx(V,{className:"h-3.5 w-3.5"}),e.jsx(J,{className:"h-3.5 w-3.5"})," ",t.files.length," Datei",t.files.length===1?"":"en"," — Änderungen ansehen"]}),o&&e.jsxs("div",{className:"mt-2 space-y-2",children:[e.jsxs("div",{className:"flex flex-wrap gap-1.5",children:[t.files.map(s=>e.jsxs("span",{className:"rounded bg-background/40 px-1.5 py-0.5 font-mono text-[10px] text-muted-foreground",children:[e.jsx("b",{className:N(s.status.startsWith("A")&&"text-emerald-400",s.status.startsWith("D")&&"text-red-400",s.status.startsWith("M")&&"text-sky-400"),children:s.status})," ",s.path]},s.path)),t.files_truncated&&e.jsx("span",{className:"text-[10px] text-muted-foreground/60",children:"…"})]}),e.jsx("div",{className:"max-h-96 overflow-auto rounded-xl border border-border/50 bg-background/50 p-3",children:k?e.jsx("span",{className:"text-[11px] text-muted-foreground",children:"Diff wird geladen …"}):e.jsx("pre",{className:"text-[10px] leading-relaxed text-foreground/80 whitespace-pre",children:(b??"").split(` -`).map((s,i)=>e.jsx("span",{className:N("block",s.startsWith("+")&&!s.startsWith("+++")&&"text-emerald-300/90 bg-emerald-500/5",s.startsWith("-")&&!s.startsWith("---")&&"text-red-300/90 bg-red-500/5",(s.startsWith("@@")||s.startsWith("diff "))&&"text-sky-300/90"),children:s||" "},i))})})]})]})]})}function ae({k:t,busy:r,onAct:n,showConfirm:p}){const[o,c]=u.useState(!1);return e.jsxs("div",{className:"rounded-2xl border border-violet-500/25 bg-violet-500/[0.04] p-4 shadow-lg shadow-black/15 backdrop-blur-md space-y-3",children:[e.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-3",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx("span",{className:"rounded-md border border-violet-500/30 bg-violet-500/10 px-1.5 py-0.5 text-[10px] font-bold uppercase tracking-wider text-violet-300",children:"Traum-Idee"}),e.jsx("span",{className:"font-mono text-[11px] text-muted-foreground truncate",children:t.file}),e.jsxs("span",{className:"flex items-center gap-1 text-[10px] text-muted-foreground/70",children:[e.jsx(K,{className:"h-3 w-3"}),R(t.mtime)]})]}),e.jsx("p",{className:"mt-1.5 text-sm font-semibold text-foreground",children:t.title})]}),e.jsxs("div",{className:"flex shrink-0 items-center gap-2",children:[e.jsxs("button",{disabled:!!r["sk:"+t.file],onClick:()=>p("Werkstatt beauftragen?",`Der Kandidat '${t.title}' geht als Auftrag an die Werkstatt (Orchestrator, propose-only). Das Ergebnis erscheint später als neuer Patch-Vorschlag hier im Auftragsbuch — nichts geht ungefragt live.`,()=>n("sk:"+t.file,"/api/auftragsbuch/skill/annehmen",{file:t.file},"Die Werkstatt arbeitet. Das Ergebnis taucht als neuer Vorschlag im Auftragsbuch auf (das kann einige Minuten dauern).")),className:"flex h-9 items-center gap-1.5 rounded-lg border border-violet-500/40 bg-violet-500/10 px-3 text-[11px] font-bold uppercase tracking-wide text-violet-300 transition-all hover:bg-violet-500/20 cursor-pointer disabled:opacity-50",children:[r["sk:"+t.file]?e.jsx(m,{className:"h-3.5 w-3.5 animate-spin"}):e.jsx(Z,{className:"h-3.5 w-3.5"})," Beauftragen"]}),e.jsxs("button",{disabled:!!r["skab:"+t.file],onClick:()=>p("Kandidat verwerfen?",`'${t.title}' wandert ins Archiv des Wissens-Vaults (verworfen/). Der Traum schlägt ihn nicht erneut vor.`,()=>n("skab:"+t.file,"/api/auftragsbuch/skill/ablehnen",{file:t.file})),className:"flex h-9 items-center gap-1.5 rounded-lg border border-red-500/30 bg-red-500/5 px-3 text-[11px] font-bold uppercase tracking-wide text-red-300/90 transition-all hover:bg-red-500/15 cursor-pointer disabled:opacity-50",children:[r["skab:"+t.file]?e.jsx(m,{className:"h-3.5 w-3.5 animate-spin"}):e.jsx(I,{className:"h-3.5 w-3.5"})," Verwerfen"]})]})]}),e.jsxs("button",{onClick:()=>c(b=>!b),className:"flex items-center gap-1.5 text-[11px] font-semibold text-muted-foreground hover:text-foreground transition-colors cursor-pointer",children:[o?e.jsx(M,{className:"h-3.5 w-3.5"}):e.jsx(V,{className:"h-3.5 w-3.5"}),e.jsx(_,{className:"h-3.5 w-3.5"})," Vorschlag lesen"]}),o&&e.jsx("pre",{className:"max-h-72 overflow-auto rounded-xl border border-border/50 bg-background/50 p-3 text-[11px] leading-relaxed text-foreground/85 whitespace-pre-wrap",children:t.preview})]})}export{xe as AuftragsbuchView}; diff --git a/frontend/dist/assets/ChronikView-CVJajeyU.js b/frontend/dist/assets/ChronikView-79MqWZGv.js similarity index 74% rename from frontend/dist/assets/ChronikView-CVJajeyU.js rename to frontend/dist/assets/ChronikView-79MqWZGv.js index d11dca9..9085659 100644 --- a/frontend/dist/assets/ChronikView-CVJajeyU.js +++ b/frontend/dist/assets/ChronikView-79MqWZGv.js @@ -1,31 +1,36 @@ -import{c as f,r as p,j as e,b as w,ai as z,z as C,A as D,aj as A,L as y,a1 as E,R as N,a5 as B,ak as L,al as Z,am as q,u as $,k as R,n as j,q as T}from"./index-l6kyKCL9.js";import{S as U}from"./search-C1Zs6OOf.js";/** +import{c as b,r as p,j as e,b as w,ag as z,z as C,A as D,ah as A,L as y,a1 as E,R as N,ai as B,aj as L,ak as Z,u as q,k as $,n as j,q as R}from"./index-DMY9lUCb.js";import{S as T}from"./search-D_8DnBvS.js";/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const V=f("AlarmClock",[["circle",{cx:"12",cy:"13",r:"8",key:"3y4lt7"}],["path",{d:"M12 9v4l2 2",key:"1c63tq"}],["path",{d:"M5 3 2 6",key:"18tl5t"}],["path",{d:"m22 6-3-3",key:"1opdir"}],["path",{d:"M6.38 18.7 4 21",key:"17xu3x"}],["path",{d:"M17.64 18.67 20 21",key:"kv2oe2"}]]);/** + */const U=b("AlarmClock",[["circle",{cx:"12",cy:"13",r:"8",key:"3y4lt7"}],["path",{d:"M12 9v4l2 2",key:"1c63tq"}],["path",{d:"M5 3 2 6",key:"18tl5t"}],["path",{d:"m22 6-3-3",key:"1opdir"}],["path",{d:"M6.38 18.7 4 21",key:"17xu3x"}],["path",{d:"M17.64 18.67 20 21",key:"kv2oe2"}]]);/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const v=f("Archive",[["rect",{width:"20",height:"5",x:"2",y:"3",rx:"1",key:"1wp1u1"}],["path",{d:"M4 8v11a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8",key:"1s80jp"}],["path",{d:"M10 12h4",key:"a56b0p"}]]);/** + */const v=b("Archive",[["rect",{width:"20",height:"5",x:"2",y:"3",rx:"1",key:"1wp1u1"}],["path",{d:"M4 8v11a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8",key:"1s80jp"}],["path",{d:"M10 12h4",key:"a56b0p"}]]);/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const H=f("Bell",[["path",{d:"M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9",key:"1qo2s2"}],["path",{d:"M10.3 21a1.94 1.94 0 0 0 3.4 0",key:"qgo35s"}]]);/** + */const H=b("Bell",[["path",{d:"M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9",key:"1qo2s2"}],["path",{d:"M10.3 21a1.94 1.94 0 0 0 3.4 0",key:"qgo35s"}]]);/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const O=f("MessageCircle",[["path",{d:"M7.9 20A9 9 0 1 0 4 16.1L2 22Z",key:"vv11sd"}]]);/** + */const V=b("Inbox",[["polyline",{points:"22 12 16 12 14 15 10 15 8 12 2 12",key:"o97t9d"}],["path",{d:"M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z",key:"oot6mr"}]]);/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const P=f("Moon",[["path",{d:"M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z",key:"a7tn18"}]]);/** + */const O=b("MessageCircle",[["path",{d:"M7.9 20A9 9 0 1 0 4 16.1L2 22Z",key:"vv11sd"}]]);/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const W=f("Radar",[["path",{d:"M19.07 4.93A10 10 0 0 0 6.99 3.34",key:"z3du51"}],["path",{d:"M4 6h.01",key:"oypzma"}],["path",{d:"M2.29 9.62A10 10 0 1 0 21.31 8.35",key:"qzzz0"}],["path",{d:"M16.24 7.76A6 6 0 1 0 8.23 16.67",key:"1yjesh"}],["path",{d:"M12 18h.01",key:"mhygvu"}],["path",{d:"M17.99 11.66A6 6 0 0 1 15.77 16.67",key:"1u2y91"}],["circle",{cx:"12",cy:"12",r:"2",key:"1c9p78"}],["path",{d:"m13.41 10.59 5.66-5.66",key:"mhq4k0"}]]),F=3600,k=48;function J({items:t,aktiv:m}){const{balken:d,von:x,bis:g,max:c}=p.useMemo(()=>{if(!t.length)return{balken:[],von:0,bis:0,max:0};const a=t.map(l=>l.ts),h=Math.min(...a),r=Math.max(...a),o=Math.max(r-h,F),n=new Array(k).fill(0);for(const l of a){const b=Math.min(k-1,Math.floor((l-h)/o*k));n[b]++}return{balken:n,von:h,bis:r,max:Math.max(...n,1)}},[t]);if(d.length===0)return null;const u=a=>new Date(a*1e3).toLocaleDateString("de-DE",{day:"2-digit",month:"2-digit",...g-x<2*86400?{hour:"2-digit",minute:"2-digit"}:{}});return e.jsxs("div",{className:"space-y-1",children:[e.jsx("div",{className:"flex h-8 items-end gap-px",role:"img","aria-label":`Aktivitätsdichte: ${t.length} Einträge zwischen ${u(x)} und ${u(g)}`,children:d.map((a,h)=>e.jsx("div",{title:a===1?"1 Eintrag":`${a} Einträge`,className:w("min-w-px flex-1 rounded-t-sm transition-colors",a===0?"bg-border/25":m?"bg-primary/70":"bg-primary/40"),style:{height:a===0?"2px":`${Math.max(12,a/c*100)}%`}},h))}),e.jsxs("div",{className:"flex justify-between font-mono text-[9px] text-muted-foreground/60",children:[e.jsx("span",{children:u(x)}),e.jsxs("span",{className:"tabular-nums",children:[t.length," Einträge"]}),e.jsx("span",{children:u(g)})]})]})}const _={sentry:{icon:Z,label:"Health-Wächter",cls:"text-red-300 bg-red-500/10 border-red-500/25"},alarm:{icon:L,label:"Alarm",cls:"text-red-200 bg-red-500/15 border-red-500/40"},notify:{icon:H,label:"Meldung",cls:"text-sky-300 bg-sky-500/10 border-sky-500/25"},"chef-gutachter":{icon:P,label:"Morgenlage",cls:"text-violet-300 bg-violet-500/10 border-violet-500/25"},radar:{icon:W,label:"Radar",cls:"text-teal-300 bg-teal-500/10 border-teal-500/25"},auftragsbuch:{icon:B,label:"Auftragsbuch",cls:"text-primary bg-primary/10 border-primary/25"},zeitmaschine:{icon:N,label:"Zeitmaschine",cls:"text-amber-300 bg-amber-500/10 border-amber-500/25"},reminder:{icon:V,label:"Erinnerung",cls:"text-amber-300 bg-amber-500/10 border-amber-500/25"},traum:{icon:E,label:"Traum",cls:"text-violet-300 bg-violet-500/10 border-violet-500/25"}},G={icon:O,label:"Box",cls:"text-muted-foreground bg-background/40 border-border/50"};function I(t){return new Date(t*1e3).toLocaleDateString("de-DE",{weekday:"long",day:"2-digit",month:"long"})}function Y(){const{data:t=[],isLoading:m}=z(),[d,x]=p.useState(!0),g=C(),{q:c=""}=D({from:"/chronik"}),u=r=>g({to:"/chronik",search:r?{q:r}:{},replace:!0}),a=p.useMemo(()=>{const r=c.trim().toLowerCase();return r?t.filter(o=>o.subject.toLowerCase().includes(r)||o.text.toLowerCase().includes(r)||o.source.toLowerCase().includes(r)):t},[t,c]),h=p.useMemo(()=>{const r=[];for(const o of a){const n=I(o.ts),l=r[r.length-1];l&&l.day===n?l.items.push(o):r.push({day:n,items:[o]})}return r},[a]);return e.jsxs("div",{className:"space-y-7",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"bg-gradient-to-r from-foreground via-foreground to-primary bg-clip-text font-space text-2xl font-bold tracking-tight text-transparent",children:"Chronik"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Was deine Box von allein getan und gemeldet hat — und die Zeitmaschine, falls du zu einem früheren Stand zurück willst."})]}),e.jsx(K,{}),e.jsxs("section",{className:"space-y-4",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-3",children:[e.jsxs("p",{className:"flex items-center gap-1.5 text-[11px] font-semibold uppercase tracking-wider text-muted-foreground/60",children:[e.jsx(A,{className:"h-3.5 w-3.5"})," Verlauf",c&&e.jsxs("span",{className:"normal-case text-primary",children:["· ",a.length," von ",t.length]})]}),e.jsxs("div",{className:"relative ml-auto w-full sm:w-64",children:[e.jsx(U,{className:"pointer-events-none absolute left-2.5 top-1/2 h-3.5 w-3.5 -translate-y-1/2 text-muted-foreground","aria-hidden":"true"}),e.jsx("input",{type:"search",value:c,onChange:r=>u(r.target.value),placeholder:"Verlauf durchsuchen …","aria-label":"Chronik durchsuchen",className:"h-8 w-full rounded-lg border border-border/60 bg-background/40 pl-8 pr-3 text-xs text-foreground outline-none transition-colors focus:border-primary"})]})]}),!m&&a.length>0&&e.jsx(J,{items:a,aktiv:!!c}),m&&e.jsxs("div",{className:"flex items-center gap-2 rounded-2xl border border-border/60 bg-card/30 p-6 text-xs text-muted-foreground",children:[e.jsx(y,{className:"h-4 w-4 animate-spin"})," Chronik wird geladen …"]}),!m&&a.length===0&&e.jsx("div",{className:"rounded-2xl border border-dashed border-border/60 bg-card/20 p-8 text-center text-xs text-muted-foreground",children:c?e.jsxs(e.Fragment,{children:["Nichts zu „",c,'" im Verlauf. ',e.jsx("button",{onClick:()=>u(""),className:"cursor-pointer text-primary underline underline-offset-2",children:"Filter aufheben"})]}):"Noch keine Einträge. Sobald die Box etwas von allein tut oder meldet (Updates, Wächter, Träume), steht es hier."}),h.map(({day:r,items:o})=>e.jsxs("div",{children:[e.jsx("p",{className:"mb-2 text-xs font-bold text-foreground/70",children:r}),e.jsxs("div",{className:"space-y-2 border-l-2 border-border/40 pl-4",children:[(d?o.slice(0,8):o).map(n=>{const l=_[n.source]??G,b=l.icon;return e.jsxs("div",{className:"relative rounded-xl border border-border/50 bg-card/40 p-3 backdrop-blur-sm",children:[e.jsx("span",{className:"absolute -left-[23px] top-4 h-2.5 w-2.5 rounded-full bg-border ring-4 ring-background/60"}),e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsxs("span",{className:w("flex items-center gap-1 rounded-md border px-1.5 py-0.5 text-[10px] font-bold",l.cls),children:[e.jsx(b,{className:"h-3 w-3"})," ",l.label]}),n.subject&&e.jsx("span",{className:"text-[10px] font-semibold text-muted-foreground",children:n.subject}),e.jsx("span",{className:"ml-auto font-mono text-[10px] text-muted-foreground/60",children:new Date(n.ts*1e3).toLocaleTimeString("de-DE",{hour:"2-digit",minute:"2-digit"})})]}),e.jsx("p",{className:"mt-1.5 whitespace-pre-wrap text-xs leading-relaxed text-foreground/85",children:n.text})]},n.id)}),d&&o.length>8&&e.jsxs("button",{onClick:()=>x(!1),className:"text-[11px] text-muted-foreground underline hover:text-foreground",children:[o.length-8," weitere anzeigen"]})]})]},r))]})]})}function K(){const{data:t}=q(),m=$(),{showAlert:d,showConfirm:x,dialogElement:g}=R(),[c,u]=p.useState(null),[a,h]=p.useState(!1),[r,o]=p.useState(!1),n=(t==null?void 0:t.backups)??[],l=r?n:n.slice(0,4);function b(s){const i=s.snapshot.match(/^(\d{4})-?(\d{2})-?(\d{2})[T_-](\d{2})[-:]?(\d{2})/);return i?`${i[3]}.${i[2]}.${i[1]}, ${i[4]}:${i[5]} Uhr`:s.snapshot}async function M(s){u(s.file);try{await j("/api/zeitmaschine/restore",{method:"POST",body:JSON.stringify({file:s.file})}),d("Zeitmaschine läuft","Die Wiederherstellung wurde gestartet. Die Dienste starten gleich neu — die Zentrale ist kurz weg und meldet sich von selbst zurück. Vorher wurde automatisch ein Sicherheits-Backup des jetzigen Zustands gemacht.")}catch(i){d("Start fehlgeschlagen",String((i==null?void 0:i.message)||i))}finally{u(null)}}async function S(){h(!0);try{const s=await j("/api/system/backup",{method:"POST"});s.ok?d("Gesichert",`Snapshot ${s.snapshot} wurde angelegt.`):d("Backup fehlgeschlagen",s.error||"Unbekannter Fehler"),m.invalidateQueries({queryKey:T.zeitmaschine})}catch(s){d("Backup fehlgeschlagen",String((s==null?void 0:s.message)||s))}finally{h(!1)}}return e.jsxs("section",{className:"space-y-3",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("p",{className:"flex items-center gap-1.5 text-[11px] font-semibold uppercase tracking-wider text-muted-foreground/60",children:[e.jsx(v,{className:"h-3.5 w-3.5"})," Zeitmaschine — gesicherte Stände"]}),e.jsxs("button",{onClick:S,disabled:a||!(t!=null&&t.available),className:"flex h-8 items-center gap-1.5 rounded-lg border border-border/60 bg-card/45 px-2.5 text-[11px] font-semibold text-muted-foreground hover:text-foreground hover:border-primary/40 transition-all cursor-pointer disabled:opacity-50",children:[a?e.jsx(y,{className:"h-3.5 w-3.5 animate-spin"}):e.jsx(v,{className:"h-3.5 w-3.5"})," Jetzt sichern"]})]}),t&&!t.available&&e.jsx("div",{className:"rounded-2xl border border-amber-500/30 bg-amber-500/5 p-4 text-xs text-amber-300",children:"Die Snapshots liegen auf der Box — im lokalen Dev-Modus nicht verfügbar."}),(t==null?void 0:t.available)&&n.length===0&&e.jsx("div",{className:"rounded-2xl border border-dashed border-border/60 bg-card/20 p-5 text-center text-xs text-muted-foreground",children:'Noch keine Snapshots. Das nächtliche Backup (03:30) legt sie automatisch an — oder „Jetzt sichern".'}),l.length>0&&e.jsx("div",{className:"grid gap-2 sm:grid-cols-2",children:l.map((s,i)=>e.jsxs("div",{className:"flex items-center justify-between gap-3 rounded-xl border border-border/50 bg-card/40 p-3",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsxs("p",{className:"text-xs font-semibold text-foreground",children:[b(s)," ",i===0&&e.jsx("span",{className:"ml-1 rounded bg-emerald-500/10 px-1.5 py-0.5 text-[9px] font-bold text-emerald-300",children:"neuester"})]}),e.jsxs("p",{className:"font-mono text-[10px] text-muted-foreground/70 truncate",title:s.file,children:[s.size_mb.toLocaleString("de-DE")," MB · ",s.file]})]}),e.jsxs("button",{disabled:c!==null,onClick:()=>x("Wirklich zu diesem Stand zurück?",`Die Box wird auf den Snapshot vom ${b(s)} zurückgesetzt (Gedächtnis, Hermes-Config, Modell-Router). Der JETZIGE Zustand wird vorher automatisch gesichert — der Schritt ist also umkehrbar. Die Dienste starten neu, die Zentrale ist kurz weg.`,()=>M(s)),className:"flex h-8 shrink-0 items-center gap-1.5 rounded-lg border border-amber-500/40 bg-amber-500/10 px-2.5 text-[10px] font-bold uppercase tracking-wide text-amber-300 transition-all hover:bg-amber-500/20 cursor-pointer disabled:opacity-50",children:[c===s.file?e.jsx(y,{className:"h-3 w-3 animate-spin"}):e.jsx(N,{className:"h-3 w-3"})," Zurück"]})]},s.file))}),n.length>4&&!r&&e.jsxs("button",{onClick:()=>o(!0),className:"text-[11px] text-muted-foreground underline hover:text-foreground",children:["Alle ",n.length," Snapshots anzeigen"]}),g]})}export{Y as ChronikView}; + */const P=b("Moon",[["path",{d:"M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z",key:"a7tn18"}]]);/** + * @license lucide-react v0.460.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const W=b("Radar",[["path",{d:"M19.07 4.93A10 10 0 0 0 6.99 3.34",key:"z3du51"}],["path",{d:"M4 6h.01",key:"oypzma"}],["path",{d:"M2.29 9.62A10 10 0 1 0 21.31 8.35",key:"qzzz0"}],["path",{d:"M16.24 7.76A6 6 0 1 0 8.23 16.67",key:"1yjesh"}],["path",{d:"M12 18h.01",key:"mhygvu"}],["path",{d:"M17.99 11.66A6 6 0 0 1 15.77 16.67",key:"1u2y91"}],["circle",{cx:"12",cy:"12",r:"2",key:"1c9p78"}],["path",{d:"m13.41 10.59 5.66-5.66",key:"mhq4k0"}]]),F=3600,k=48;function I({items:t,aktiv:m}){const{balken:d,von:x,bis:g,max:c}=p.useMemo(()=>{if(!t.length)return{balken:[],von:0,bis:0,max:0};const a=t.map(l=>l.ts),u=Math.min(...a),r=Math.max(...a),o=Math.max(r-u,F),n=new Array(k).fill(0);for(const l of a){const f=Math.min(k-1,Math.floor((l-u)/o*k));n[f]++}return{balken:n,von:u,bis:r,max:Math.max(...n,1)}},[t]);if(d.length===0)return null;const h=a=>new Date(a*1e3).toLocaleDateString("de-DE",{day:"2-digit",month:"2-digit",...g-x<2*86400?{hour:"2-digit",minute:"2-digit"}:{}});return e.jsxs("div",{className:"space-y-1",children:[e.jsx("div",{className:"flex h-8 items-end gap-px",role:"img","aria-label":`Aktivitätsdichte: ${t.length} Einträge zwischen ${h(x)} und ${h(g)}`,children:d.map((a,u)=>e.jsx("div",{title:a===1?"1 Eintrag":`${a} Einträge`,className:w("min-w-px flex-1 rounded-t-sm transition-colors",a===0?"bg-border/25":m?"bg-primary/70":"bg-primary/40"),style:{height:a===0?"2px":`${Math.max(12,a/c*100)}%`}},u))}),e.jsxs("div",{className:"flex justify-between font-mono text-[9px] text-muted-foreground/60",children:[e.jsx("span",{children:h(x)}),e.jsxs("span",{className:"tabular-nums",children:[t.length," Einträge"]}),e.jsx("span",{children:h(g)})]})]})}const J={sentry:{icon:L,label:"Health-Wächter",cls:"text-red-300 bg-red-500/10 border-red-500/25"},alarm:{icon:B,label:"Alarm",cls:"text-red-200 bg-red-500/15 border-red-500/40"},notify:{icon:H,label:"Meldung",cls:"text-sky-300 bg-sky-500/10 border-sky-500/25"},"chef-gutachter":{icon:P,label:"Morgenlage",cls:"text-violet-300 bg-violet-500/10 border-violet-500/25"},radar:{icon:W,label:"Radar",cls:"text-teal-300 bg-teal-500/10 border-teal-500/25"},auftragsbuch:{icon:V,label:"Auftragsbuch",cls:"text-primary bg-primary/10 border-primary/25"},zeitmaschine:{icon:N,label:"Zeitmaschine",cls:"text-amber-300 bg-amber-500/10 border-amber-500/25"},reminder:{icon:U,label:"Erinnerung",cls:"text-amber-300 bg-amber-500/10 border-amber-500/25"},traum:{icon:E,label:"Traum",cls:"text-violet-300 bg-violet-500/10 border-violet-500/25"}},_={icon:O,label:"Box",cls:"text-muted-foreground bg-background/40 border-border/50"};function G(t){return new Date(t*1e3).toLocaleDateString("de-DE",{weekday:"long",day:"2-digit",month:"long"})}function Y(){const{data:t=[],isLoading:m}=z(),[d,x]=p.useState(!0),g=C(),{q:c=""}=D({from:"/chronik"}),h=r=>g({to:"/chronik",search:r?{q:r}:{},replace:!0}),a=p.useMemo(()=>{const r=c.trim().toLowerCase();return r?t.filter(o=>o.subject.toLowerCase().includes(r)||o.text.toLowerCase().includes(r)||o.source.toLowerCase().includes(r)):t},[t,c]),u=p.useMemo(()=>{const r=[];for(const o of a){const n=G(o.ts),l=r[r.length-1];l&&l.day===n?l.items.push(o):r.push({day:n,items:[o]})}return r},[a]);return e.jsxs("div",{className:"space-y-7",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"bg-gradient-to-r from-foreground via-foreground to-primary bg-clip-text font-space text-2xl font-bold tracking-tight text-transparent",children:"Chronik"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Was deine Box von allein getan und gemeldet hat — und die Zeitmaschine, falls du zu einem früheren Stand zurück willst."})]}),e.jsx(K,{}),e.jsxs("section",{className:"space-y-4",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-3",children:[e.jsxs("p",{className:"flex items-center gap-1.5 text-[11px] font-semibold uppercase tracking-wider text-muted-foreground/60",children:[e.jsx(A,{className:"h-3.5 w-3.5"})," Verlauf",c&&e.jsxs("span",{className:"normal-case text-primary",children:["· ",a.length," von ",t.length]})]}),e.jsxs("div",{className:"relative ml-auto w-full sm:w-64",children:[e.jsx(T,{className:"pointer-events-none absolute left-2.5 top-1/2 h-3.5 w-3.5 -translate-y-1/2 text-muted-foreground","aria-hidden":"true"}),e.jsx("input",{type:"search",value:c,onChange:r=>h(r.target.value),placeholder:"Verlauf durchsuchen …","aria-label":"Chronik durchsuchen",className:"h-8 w-full rounded-lg border border-border/60 bg-background/40 pl-8 pr-3 text-xs text-foreground outline-none transition-colors focus:border-primary"})]})]}),!m&&a.length>0&&e.jsx(I,{items:a,aktiv:!!c}),m&&e.jsxs("div",{className:"flex items-center gap-2 rounded-2xl border border-border/60 bg-card/30 p-6 text-xs text-muted-foreground",children:[e.jsx(y,{className:"h-4 w-4 animate-spin"})," Chronik wird geladen …"]}),!m&&a.length===0&&e.jsx("div",{className:"rounded-2xl border border-dashed border-border/60 bg-card/20 p-8 text-center text-xs text-muted-foreground",children:c?e.jsxs(e.Fragment,{children:["Nichts zu „",c,'" im Verlauf. ',e.jsx("button",{onClick:()=>h(""),className:"cursor-pointer text-primary underline underline-offset-2",children:"Filter aufheben"})]}):"Noch keine Einträge. Sobald die Box etwas von allein tut oder meldet (Updates, Wächter, Träume), steht es hier."}),u.map(({day:r,items:o})=>e.jsxs("div",{children:[e.jsx("p",{className:"mb-2 text-xs font-bold text-foreground/70",children:r}),e.jsxs("div",{className:"space-y-2 border-l-2 border-border/40 pl-4",children:[(d?o.slice(0,8):o).map(n=>{const l=J[n.source]??_,f=l.icon;return e.jsxs("div",{className:"relative rounded-xl border border-border/50 bg-card/40 p-3 backdrop-blur-sm",children:[e.jsx("span",{className:"absolute -left-[23px] top-4 h-2.5 w-2.5 rounded-full bg-border ring-4 ring-background/60"}),e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsxs("span",{className:w("flex items-center gap-1 rounded-md border px-1.5 py-0.5 text-[10px] font-bold",l.cls),children:[e.jsx(f,{className:"h-3 w-3"})," ",l.label]}),n.subject&&e.jsx("span",{className:"text-[10px] font-semibold text-muted-foreground",children:n.subject}),e.jsx("span",{className:"ml-auto font-mono text-[10px] text-muted-foreground/60",children:new Date(n.ts*1e3).toLocaleTimeString("de-DE",{hour:"2-digit",minute:"2-digit"})})]}),e.jsx("p",{className:"mt-1.5 whitespace-pre-wrap text-xs leading-relaxed text-foreground/85",children:n.text})]},n.id)}),d&&o.length>8&&e.jsxs("button",{onClick:()=>x(!1),className:"text-[11px] text-muted-foreground underline hover:text-foreground",children:[o.length-8," weitere anzeigen"]})]})]},r))]})]})}function K(){const{data:t}=Z(),m=q(),{showAlert:d,showConfirm:x,dialogElement:g}=$(),[c,h]=p.useState(null),[a,u]=p.useState(!1),[r,o]=p.useState(!1),n=(t==null?void 0:t.backups)??[],l=r?n:n.slice(0,4);function f(s){const i=s.snapshot.match(/^(\d{4})-?(\d{2})-?(\d{2})[T_-](\d{2})[-:]?(\d{2})/);return i?`${i[3]}.${i[2]}.${i[1]}, ${i[4]}:${i[5]} Uhr`:s.snapshot}async function M(s){h(s.file);try{await j("/api/zeitmaschine/restore",{method:"POST",body:JSON.stringify({file:s.file})}),d("Zeitmaschine läuft","Die Wiederherstellung wurde gestartet. Die Dienste starten gleich neu — die Zentrale ist kurz weg und meldet sich von selbst zurück. Vorher wurde automatisch ein Sicherheits-Backup des jetzigen Zustands gemacht.")}catch(i){d("Start fehlgeschlagen",String((i==null?void 0:i.message)||i))}finally{h(null)}}async function S(){u(!0);try{const s=await j("/api/system/backup",{method:"POST"});s.ok?d("Gesichert",`Snapshot ${s.snapshot} wurde angelegt.`):d("Backup fehlgeschlagen",s.error||"Unbekannter Fehler"),m.invalidateQueries({queryKey:R.zeitmaschine})}catch(s){d("Backup fehlgeschlagen",String((s==null?void 0:s.message)||s))}finally{u(!1)}}return e.jsxs("section",{className:"space-y-3",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("p",{className:"flex items-center gap-1.5 text-[11px] font-semibold uppercase tracking-wider text-muted-foreground/60",children:[e.jsx(v,{className:"h-3.5 w-3.5"})," Zeitmaschine — gesicherte Stände"]}),e.jsxs("button",{onClick:S,disabled:a||!(t!=null&&t.available),className:"flex h-8 items-center gap-1.5 rounded-lg border border-border/60 bg-card/45 px-2.5 text-[11px] font-semibold text-muted-foreground hover:text-foreground hover:border-primary/40 transition-all cursor-pointer disabled:opacity-50",children:[a?e.jsx(y,{className:"h-3.5 w-3.5 animate-spin"}):e.jsx(v,{className:"h-3.5 w-3.5"})," Jetzt sichern"]})]}),t&&!t.available&&e.jsx("div",{className:"rounded-2xl border border-amber-500/30 bg-amber-500/5 p-4 text-xs text-amber-300",children:"Die Snapshots liegen auf der Box — im lokalen Dev-Modus nicht verfügbar."}),(t==null?void 0:t.available)&&n.length===0&&e.jsx("div",{className:"rounded-2xl border border-dashed border-border/60 bg-card/20 p-5 text-center text-xs text-muted-foreground",children:'Noch keine Snapshots. Das nächtliche Backup (03:30) legt sie automatisch an — oder „Jetzt sichern".'}),l.length>0&&e.jsx("div",{className:"grid gap-2 sm:grid-cols-2",children:l.map((s,i)=>e.jsxs("div",{className:"flex items-center justify-between gap-3 rounded-xl border border-border/50 bg-card/40 p-3",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsxs("p",{className:"text-xs font-semibold text-foreground",children:[f(s)," ",i===0&&e.jsx("span",{className:"ml-1 rounded bg-emerald-500/10 px-1.5 py-0.5 text-[9px] font-bold text-emerald-300",children:"neuester"})]}),e.jsxs("p",{className:"font-mono text-[10px] text-muted-foreground/70 truncate",title:s.file,children:[s.size_mb.toLocaleString("de-DE")," MB · ",s.file]})]}),e.jsxs("button",{disabled:c!==null,onClick:()=>x("Wirklich zu diesem Stand zurück?",`Die Box wird auf den Snapshot vom ${f(s)} zurückgesetzt (Gedächtnis, Hermes-Config, Modell-Router). Der JETZIGE Zustand wird vorher automatisch gesichert — der Schritt ist also umkehrbar. Die Dienste starten neu, die Zentrale ist kurz weg.`,()=>M(s)),className:"flex h-8 shrink-0 items-center gap-1.5 rounded-lg border border-amber-500/40 bg-amber-500/10 px-2.5 text-[10px] font-bold uppercase tracking-wide text-amber-300 transition-all hover:bg-amber-500/20 cursor-pointer disabled:opacity-50",children:[c===s.file?e.jsx(y,{className:"h-3 w-3 animate-spin"}):e.jsx(N,{className:"h-3 w-3"})," Zurück"]})]},s.file))}),n.length>4&&!r&&e.jsxs("button",{onClick:()=>o(!0),className:"text-[11px] text-muted-foreground underline hover:text-foreground",children:["Alle ",n.length," Snapshots anzeigen"]}),g]})}export{Y as ChronikView}; diff --git a/frontend/dist/assets/CommandPalette-lAUVtU0H.js b/frontend/dist/assets/CommandPalette-CUaikJDv.js similarity index 99% rename from frontend/dist/assets/CommandPalette-lAUVtU0H.js rename to frontend/dist/assets/CommandPalette-CUaikJDv.js index 4a22327..3729c47 100644 --- a/frontend/dist/assets/CommandPalette-lAUVtU0H.js +++ b/frontend/dist/assets/CommandPalette-CUaikJDv.js @@ -1,4 +1,4 @@ -import{c as It,r as a,j as E,at as be,W as In,au as An,$ as _n,av as Mn,aw as ht,z as Tn,n as Ln,T as Fn,b as jn}from"./index-l6kyKCL9.js";import{r as At}from"./index-GVsa8kqq.js";import{C as $n,a as Wn}from"./cloud-download-YEWUSwEY.js";import{R as Un}from"./refresh-cw-BV1qZMSR.js";import{S as Bn}from"./search-C1Zs6OOf.js";import{F as Vn}from"./file-text-nO0jfgun.js";/** +import{c as It,r as a,j as E,ar as be,W as In,as as An,$ as _n,at as Mn,au as ht,z as Tn,n as Ln,T as Fn,b as jn}from"./index-DMY9lUCb.js";import{r as At}from"./index-CVfMhtws.js";import{C as $n,a as Wn}from"./cloud-download-BGirmHxu.js";import{R as Un}from"./refresh-cw-hAcZthO8.js";import{S as Bn}from"./search-D_8DnBvS.js";import{F as Vn}from"./file-text-BSQuFPZM.js";/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. diff --git a/frontend/dist/assets/ConnectView-Cs6CoHdG.js b/frontend/dist/assets/ConnectView-CdvOrseN.js similarity index 98% rename from frontend/dist/assets/ConnectView-Cs6CoHdG.js rename to frontend/dist/assets/ConnectView-CdvOrseN.js index fc57ff1..965077d 100644 --- a/frontend/dist/assets/ConnectView-Cs6CoHdG.js +++ b/frontend/dist/assets/ConnectView-CdvOrseN.js @@ -1,4 +1,4 @@ -import{c as f,r as m,D as G,F as H,j as e,t as I,B as M,I as y,G as z,b as S,L as B,J as _,K as E,C as P}from"./index-l6kyKCL9.js";import{A as u}from"./arrow-right-DSSXd-8y.js";import{C as K}from"./chevron-down-C5keVSfm.js";/** +import{c as f,r as m,D as G,F as H,j as e,t as I,B as M,I as y,G as z,b as S,L as B,J as _,K as E,C as P}from"./index-DMY9lUCb.js";import{A as u}from"./arrow-right-CNrCtUoh.js";import{C as K}from"./chevron-down-1Vx9W9jM.js";/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. diff --git a/frontend/dist/assets/GuideView-CxJU6Qxs.js b/frontend/dist/assets/GuideView-CxJU6Qxs.js new file mode 100644 index 0000000..666a5ae --- /dev/null +++ b/frontend/dist/assets/GuideView-CxJU6Qxs.js @@ -0,0 +1,36 @@ +import{c as u,j as e,r as M,t as C,Y as z,Z as k,_ as y,Q as v,$ as L,a0 as G,W as D,b as f,a1 as T}from"./index-DMY9lUCb.js";import{a as w,L as B,C as P,Z as E}from"./zap-2yha4rs4.js";import{L as I}from"./layers-CcL78b5Q.js";import{S as R}from"./shield-BtE9Fxv6.js";/** + * @license lucide-react v0.460.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const K=u("ArrowUpRight",[["path",{d:"M7 7h10v10",key:"1tivn9"}],["path",{d:"M7 17 17 7",key:"1vkiza"}]]);/** + * @license lucide-react v0.460.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const S=u("BookOpen",[["path",{d:"M12 7v14",key:"1akyts"}],["path",{d:"M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z",key:"ruj8y"}]]);/** + * @license lucide-react v0.460.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const V=u("Database",[["ellipse",{cx:"12",cy:"5",rx:"9",ry:"3",key:"msslwz"}],["path",{d:"M3 5V19A9 3 0 0 0 21 19V5",key:"1wlel7"}],["path",{d:"M3 12A9 3 0 0 0 21 12",key:"mv7ke4"}]]);/** + * @license lucide-react v0.460.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const W=u("LifeBuoy",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m4.93 4.93 4.24 4.24",key:"1ymg45"}],["path",{d:"m14.83 9.17 4.24-4.24",key:"1cb5xl"}],["path",{d:"m14.83 14.83 4.24 4.24",key:"q42g0n"}],["path",{d:"m9.17 14.83-4.24 4.24",key:"bqpfvv"}],["circle",{cx:"12",cy:"12",r:"4",key:"4exip2"}]]);/** + * @license lucide-react v0.460.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const N=u("Network",[["rect",{x:"16",y:"16",width:"6",height:"6",rx:"1",key:"4q2zg0"}],["rect",{x:"2",y:"16",width:"6",height:"6",rx:"1",key:"8cvhb9"}],["rect",{x:"9",y:"2",width:"6",height:"6",rx:"1",key:"1egb70"}],["path",{d:"M5 16v-3a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v3",key:"1jsf9p"}],["path",{d:"M12 12V8",key:"2874zd"}]]);/** + * @license lucide-react v0.460.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const H=u("Puzzle",[["path",{d:"M15.39 4.39a1 1 0 0 0 1.68-.474 2.5 2.5 0 1 1 3.014 3.015 1 1 0 0 0-.474 1.68l1.683 1.682a2.414 2.414 0 0 1 0 3.414L19.61 15.39a1 1 0 0 1-1.68-.474 2.5 2.5 0 1 0-3.014 3.015 1 1 0 0 1 .474 1.68l-1.683 1.682a2.414 2.414 0 0 1-3.414 0L8.61 19.61a1 1 0 0 0-1.68.474 2.5 2.5 0 1 1-3.014-3.015 1 1 0 0 0 .474-1.68l-1.683-1.682a2.414 2.414 0 0 1 0-3.414L4.39 8.61a1 1 0 0 1 1.68.474 2.5 2.5 0 1 0 3.014-3.015 1 1 0 0 1-.474-1.68l1.683-1.682a2.414 2.414 0 0 1 3.414 0z",key:"w46dr5"}]]),i={text:"hsl(var(--foreground))",mut:"hsl(var(--muted-foreground))",border:"hsl(var(--border))",card:"hsl(var(--card) / 0.9)",bg:"hsl(var(--background) / 0.4)",primary:"hsl(var(--primary))",teal:"#2dd4bf",sky:"#38bdf8",violet:"#a78bfa",rose:"#fb7185",amber:"#fbbf24",emerald:"#34d399",indigo:"#818cf8"};function o({x:n,y:r,w:t,h:c,color:h,title:g,sub:d,sub2:x,strong:p}){const b=n+t/2;return e.jsxs("g",{children:[e.jsx("rect",{x:n,y:r,width:t,height:c,rx:12,fill:i.card,stroke:h,strokeOpacity:p?.9:.45,strokeWidth:p?2:1.25}),e.jsx("rect",{x:n,y:r,width:t,height:3,rx:1.5,fill:h,opacity:.8}),e.jsx("text",{x:b,y:r+(d?24:c/2+4),textAnchor:"middle",fill:i.text,fontSize:12.5,fontWeight:700,children:g}),d&&e.jsx("text",{x:b,y:r+40,textAnchor:"middle",fill:i.mut,fontSize:10,children:d}),x&&e.jsx("text",{x:b,y:r+53,textAnchor:"middle",fill:i.mut,fontSize:10,children:x})]})}function j({from:n,to:r,color:t=i.border,dash:c}){const[h,g]=n,[d,x]=r,p=(h+d)/2;return e.jsxs("g",{stroke:t,strokeOpacity:.7,fill:"none",strokeWidth:1.5,strokeDasharray:c?"5 4":void 0,children:[e.jsx("path",{d:`M ${h} ${g} C ${p} ${g}, ${p} ${x}, ${d} ${x}`}),e.jsx("path",{d:`M ${d-6} ${x-4} L ${d} ${x} L ${d-6} ${x+4}`,fill:t,fillOpacity:.7,stroke:"none"})]})}function F(){const n=[{y:34,title:"Diese Oberfläche",sub:"Browser · Cockpit & Klick-Gates",color:i.teal},{y:128,title:"Lucy",sub:"Stimme & Begleiterin am PC",color:i.rose},{y:222,title:"Hermes Desktop",sub:"IDE für Projekte (PC + remote)",color:i.violet},{y:316,title:"Telegram",sub:"unterwegs, gleiche Erinnerung",color:i.sky}];return e.jsxs("svg",{viewBox:"0 0 880 432",role:"img","aria-label":"Landkarte: Du erreichst die Box über vier Türen; in der Box arbeiten Mission Control, der Hermes-Agent, der Modell-Stall, das Gedächtnis und der Wissens-Vault.",style:{width:"100%",height:"auto",fontFamily:"var(--font-sans)"},children:[e.jsx(o,{x:16,y:150,w:120,h:92,color:i.primary,strong:!0,title:"Du",sub:"entscheidest —",sub2:"die Box arbeitet"}),e.jsx(o,{x:16,y:330,w:150,h:68,color:i.emerald,title:"PC-Executor",sub:"baut & startet Lucy",sub2:"nach deiner Annahme"}),n.map(r=>e.jsx(o,{x:196,y:r.y,w:186,h:64,color:r.color,title:r.title,sub:r.sub},r.title)),n.map(r=>e.jsx(j,{from:[136,196],to:[196,r.y+32]},r.title)),e.jsx("rect",{x:420,y:14,width:444,height:404,rx:16,fill:i.bg,stroke:i.border,strokeOpacity:.7}),e.jsx("text",{x:642,y:38,textAnchor:"middle",fill:i.text,fontSize:13,fontWeight:800,letterSpacing:.5,children:"DIE BOX · 192.168.178.151"}),e.jsx(o,{x:444,y:54,w:396,h:62,color:i.teal,title:"Mission Control (:9001)",sub:"Cockpit · Ideen · Chronik · Wissen"}),e.jsx(o,{x:444,y:126,w:396,h:62,color:i.rose,title:"Hermes-Agent",sub:"denkt, nutzt Werkzeuge, betreibt die Werkstatt & Nacht-Crons"}),e.jsx(o,{x:444,y:198,w:396,h:78,color:i.sky,title:"Modell-Stall (llama-swap)",sub:"Hirn · Groß · Coder · Augen · Späher · Kritiker",sub2:"+ Embedding & Sortierer fürs Gedächtnis"}),e.jsx(o,{x:444,y:286,w:190,h:56,color:i.indigo,title:"Natives Gedächtnis",sub:"Hermes v0.20 SQLite & Embed"}),e.jsx(o,{x:650,y:286,w:190,h:56,color:i.amber,title:"Wissens-Vault",sub:"Träume & Notizen (git)"}),e.jsx(o,{x:444,y:352,w:396,h:52,color:i.emerald,title:"Selbstheilung & Backups",sub:"Health-Checks · Auto-Revert bei Rot · PBS-Sicherung"}),n.map(r=>e.jsx(j,{from:[382,r.y+32],to:[420,r.y+46]},r.title)),e.jsx(j,{from:[420,396],to:[166,364],color:i.emerald,dash:!0}),e.jsx("text",{x:272,y:412,textAnchor:"middle",fill:i.mut,fontSize:9.5,fontStyle:"italic",children:"Lucy-Karte angenommen → PC baut neu"})]})}function O(){const n=[{x:14,color:i.amber,title:"Idee",sub:"von dir oder vom",sub2:"Nacht-Radar"},{x:158,color:i.violet,title:"Ideen-Queue",sub:"Kanban sammelt,",sub2:"Specifier plant"},{x:302,color:i.rose,title:"IDE am PC",sub:"Agent baut den",sub2:"Branch (Gitea)"},{x:446,color:i.sky,title:"Ampel",sub:"CI prüft Build",sub2:"und Tests"},{x:590,color:i.primary,title:"DEIN Merge",sub:"nur du bringst",sub2:"es auf main",strong:!0},{x:734,color:i.emerald,title:"Live",sub:"deploy.sh,",sub2:"Zeitmaschine = Rückweg"}];return e.jsxs("svg",{viewBox:"0 0 880 246",role:"img","aria-label":"Kreislauf: Idee, Ideen-Queue, IDE am PC, Ampel, dein Merge, live — Chronik und Morgenlage berichten zurück.",style:{width:"100%",height:"auto",fontFamily:"var(--font-sans)"},children:[n.map(r=>e.jsx(o,{x:r.x,y:38,w:132,h:66,color:r.color,title:r.title,sub:r.sub,sub2:r.sub2,strong:r.strong},r.title)),n.slice(0,-1).map((r,t)=>e.jsx(j,{from:[r.x+132,71],to:[n[t+1].x,71]},r.title)),e.jsxs("g",{stroke:i.border,strokeOpacity:.7,fill:"none",strokeWidth:1.5,strokeDasharray:"5 4",children:[e.jsx("path",{d:"M 800 104 C 800 150, 720 150, 440 150 C 160 150, 80 150, 80 112"}),e.jsx("path",{d:"M 76 118 L 80 108 L 84 118",fill:i.border,fillOpacity:.7,stroke:"none"})]}),e.jsx("text",{x:440,y:144,textAnchor:"middle",fill:i.mut,fontSize:10,fontStyle:"italic",children:"Chronik & Morgenlage berichten · Ablehnungs-Gründe werden Lern-Futter"}),e.jsx("rect",{x:14,y:176,width:852,height:54,rx:12,fill:i.bg,stroke:i.border,strokeOpacity:.5}),e.jsx("text",{x:440,y:198,textAnchor:"middle",fill:i.text,fontSize:11,fontWeight:700,children:"Nachts, ganz allein:"}),e.jsx("text",{x:440,y:216,textAnchor:"middle",fill:i.mut,fontSize:10,children:"03:15 Traum · 03:35 Selbst-Inventur · 03:45 Idle-Radar · 04:00 Karten-Gutachter · 04:10 Bagatellen · 04:30 Morgenlage · Mo 05:15 Release-Radar"})]})}function U(){return e.jsxs("div",{className:"space-y-5",children:[e.jsx("div",{className:"overflow-x-auto",children:e.jsx("div",{className:"min-w-[680px]",children:e.jsx(F,{})})}),e.jsx("div",{className:"border-t border-border/20 pt-4 overflow-x-auto",children:e.jsx("div",{className:"min-w-[680px]",children:e.jsx(O,{})})})]})}const A=[{id:"system",label:"Dein System"},{id:"grundlagen",label:"Grundlagen"},{id:"moe",label:"MoE & Quant"},{id:"lokal",label:"Lokal betreiben"},{id:"modelle",label:"Modell-Landschaft"},{id:"gateway",label:"Gateway-Trick"},{id:"mcp",label:"MCP"},{id:"skills",label:"Skills"},{id:"memory",label:"Gedächtnis & RAG"},{id:"agents",label:"Agenten"},{id:"ide",label:"IDE anbinden"},{id:"tricks",label:"Tricks & Kniffe"},{id:"wartung",label:"Sicherheit & Wartung"},{id:"ressourcen",label:"Ressourcen"},{id:"troubleshooting",label:"Troubleshooting"}];function Q(n){var r;(r=document.getElementById(n))==null||r.scrollIntoView({behavior:"smooth",block:"start"})}function a({id:n,icon:r,color:t,title:c,kicker:h,children:g,wide:d}){return e.jsxs("section",{id:n,className:f("scroll-mt-20 mc-card p-6 space-y-3",d&&"md:col-span-2"),children:[e.jsxs("div",{className:"flex items-center gap-2.5 border-b border-border/20 pb-3",children:[e.jsx(r,{className:f("h-5 w-5 shrink-0",t)}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-xs font-bold uppercase tracking-wider text-foreground",children:c}),h&&e.jsx("span",{className:f("text-[9px] font-mono",t),children:h})]})]}),e.jsx("div",{className:"text-xs text-muted-foreground space-y-2.5 leading-relaxed",children:g})]})}function m({children:n}){return e.jsxs("div",{className:"mt-1 rounded-xl border border-primary/25 bg-primary/[0.06] p-3 text-[11px] leading-relaxed",children:[e.jsxs("div",{className:"flex items-center gap-1.5 font-bold text-primary mb-1",children:[e.jsx(T,{className:"h-3 w-3"})," Bei dir konkret"]}),e.jsx("div",{className:"text-muted-foreground space-y-1",children:n})]})}function s({children:n}){return e.jsx("code",{className:"rounded bg-background/40 border border-border/30 px-1.5 py-0.5 font-mono text-[10px] text-foreground",children:n})}function l({href:n,name:r,note:t}){return e.jsxs("li",{className:"leading-relaxed",children:[e.jsxs("a",{href:n,target:"_blank",rel:"noopener",className:"text-primary hover:underline font-semibold inline-flex items-center gap-0.5",children:[r,e.jsx(K,{className:"h-3 w-3 opacity-60"})]}),e.jsxs("span",{className:"text-muted-foreground",children:[" — ",t]})]})}function J(){const[n,r]=M.useState(!1);return e.jsxs("div",{className:"space-y-7",children:[e.jsxs("div",{className:"mc-card p-6 flex items-start gap-4",children:[e.jsx("div",{className:"h-11 w-11 rounded-xl bg-primary/15 flex items-center justify-center shrink-0",children:e.jsx(S,{className:"h-6 w-6 text-primary"})}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("h1",{className:"text-2xl font-space font-bold tracking-tight bg-gradient-to-r from-foreground via-foreground to-primary bg-clip-text text-transparent",children:"Die AI-Bibel"}),e.jsxs("p",{className:"text-sm text-muted-foreground leading-relaxed max-w-2xl",children:["Erst ",e.jsx("span",{className:"font-semibold text-foreground",children:"dein System auf einen Blick"}),", dann das allgemeine Nachschlagewerk für lokale & agentische AI — Konzepte, Tricks, Kniffe und kuratierte Quellen. ",e.jsx("span",{className:"font-semibold text-foreground",children:"Stand Juli 2026."})," ",e.jsx("span",{className:"text-primary font-semibold",children:'„Bei dir konkret"'}),"-Kästen zeigen, was dein Stack daraus macht."]})]})]}),e.jsx("div",{className:"sticky top-0 z-10 -mx-1 px-1",children:e.jsx("div",{className:"rounded-xl border border-border/50 bg-card/70 backdrop-blur-xl p-2 shadow-lg shadow-black/20",children:e.jsxs("div",{className:"flex items-center gap-1.5 flex-wrap",children:[e.jsx(w,{className:"h-3.5 w-3.5 text-primary ml-1 mr-0.5 shrink-0"}),(n?A:A.slice(0,9)).map(t=>e.jsx("button",{onClick:()=>Q(t.id),className:"rounded-lg px-2.5 py-1 text-[11px] font-semibold text-muted-foreground hover:text-primary hover:bg-primary/10 transition-colors cursor-pointer",children:t.label},t.id)),e.jsx("button",{onClick:()=>r(t=>!t),className:"rounded-lg px-2 py-1 text-[11px] font-semibold text-primary hover:bg-primary/10 transition-colors cursor-pointer",children:n?"weniger":"+ mehr"})]})})}),e.jsxs("section",{id:"system",className:"scroll-mt-20 mc-card p-6 space-y-4",children:[e.jsxs("div",{className:"flex items-center gap-2.5 border-b border-border/20 pb-3",children:[e.jsx(N,{className:"h-5 w-5 text-primary"}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-xs font-bold uppercase tracking-wider text-foreground",children:"So funktioniert dein System"}),e.jsx("span",{className:"text-[9px] font-mono text-primary",children:"Landkarte & Kreislauf — das große Bild"})]})]}),e.jsxs("p",{className:"text-xs text-muted-foreground leading-relaxed max-w-3xl",children:["Vier Türen führen zur selben Box: ",e.jsx("strong",{className:"text-foreground",children:"diese Oberfläche"})," zum Steuern und Abnicken, ",e.jsx("strong",{className:"text-foreground",children:"Lucy"})," für Zurufe per Stimme,",e.jsx("strong",{className:"text-foreground",children:" Hermes Desktop"})," für richtige Projekte und",e.jsx("strong",{className:"text-foreground",children:" Telegram"})," für unterwegs. In der Box denken die Modelle, das Gedächtnis lernt automatisch mit — und nachts arbeitet sie allein: Sie träumt, inventarisiert sich selbst, entwickelt Ideen zu Konzepten. Gebaut wird am PC in der IDE, jede Änderung geht als Branch nach Gitea.",e.jsx("strong",{className:"text-primary",children:" Nichts geht live ohne deinen Merge"})," — die Ampel-CI muss grün sein, danach spielt ",e.jsx("code",{children:"deploy.sh"})," den Stand ein."]}),e.jsx(U,{})]}),e.jsxs("div",{className:"grid gap-5 md:grid-cols-2",children:[e.jsxs(a,{id:"grundlagen",icon:C,color:"text-cyan-400",title:"1. Wie LLMs ticken",kicker:"Grundlagen",children:[e.jsxs("p",{children:["Ein LLM ist im Kern ein ",e.jsx("strong",{children:"Wahrscheinlichkeits-Rechner für das nächste Token"}),' (Wortteil). Es „weiß" nichts — es setzt fort, was statistisch am plausibelsten ist. Daraus folgt fast alles andere.']}),e.jsxs("ul",{className:"list-disc pl-4 space-y-1",children:[e.jsxs("li",{children:[e.jsx("strong",{children:"Tokens"})," sind die Einheit — ~¾ Wort. Ein- und Ausgabe werden in Tokens gezählt."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Kontextfenster"}),' = wie viele Tokens das Modell gleichzeitig „sehen" kann (Prompt + Antwort). Voll = Anfang fällt raus.']}),e.jsxs("li",{children:[e.jsx("strong",{children:"Parameter"})," = die trainierten Gewichte. Training ist einmalig, ",e.jsx("strong",{children:"Inferenz"})," ist jede Antwort."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Temperatur / Sampling"})," steuert Zufall: niedrig = deterministisch/präzise (Code), hoch = kreativ."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Halluzination"})," ist kein Bug, sondern die Kehrseite des Ratens. Gegenmittel: Grounding via Tools/RAG, Verifikation."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Reasoning-/Thinking-Modelle"}),' „denken" in unsichtbaren Tokens vor der Antwort — besser bei Logik, langsamer/teurer.']})]})]}),e.jsxs(a,{id:"moe",icon:I,color:"text-violet-400",title:"2. MoE & Quantisierung",kicker:"Mehr Modell, weniger Last",children:[e.jsxs("p",{children:[e.jsx("strong",{children:"Mixture of Experts (MoE):"})," Statt für jedes Token das ganze Netz zu aktivieren, wählt ein",e.jsx("em",{children:" Router"})," nur ein paar spezialisierte ",e.jsx("em",{children:"Experts"}),' aus. So läuft ein 100B-Modell mit der aktiven Rechenlast eines viel kleineren (z.B. „122B total / 10B aktiv").']}),e.jsxs("p",{children:[e.jsx("strong",{children:"Quantisierung:"})," Gewichte von FP16 auf weniger Bits eindampfen — kleiner & schneller bei minimalem Qualitätsverlust. Faustregel:"]}),e.jsxs("ul",{className:"list-disc pl-4 space-y-1",children:[e.jsxs("li",{children:[e.jsx(s,{children:"Q8"})," nahezu verlustfrei, größter Footprint"]}),e.jsxs("li",{children:[e.jsx(s,{children:"Q6_K"})," sehr gut, guter Mittelweg"]}),e.jsxs("li",{children:[e.jsx(s,{children:"Q4_K_M"})," der Sweet-Spot für lokal — viel Modell pro GB"]})]}),e.jsxs(m,{children:["VRAM/RAM ist die harte Grenze — ",e.jsx("strong",{children:"darum"})," ist beides hier zentral: MoE lässt 100B+ überhaupt laufen, Quant entscheidet, was reinpasst. Dein Line-up fährt durchweg ",e.jsx(s,{children:"Q4_K_M"}),"/",e.jsx(s,{children:"Q6_K"}),"."]})]}),e.jsxs(a,{id:"lokal",icon:z,color:"text-emerald-400",title:"3. Lokal betreiben: Engines & Backends",kicker:"llama.cpp, vLLM & Co.",wide:!0,children:[e.jsxs("div",{className:"grid md:grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsxs("p",{children:[e.jsx("strong",{children:"Inference-Engines"})," — was die Modelle ausführt:"]}),e.jsxs("ul",{className:"list-disc pl-4 space-y-1",children:[e.jsxs("li",{children:[e.jsx("strong",{children:"llama.cpp / GGUF"})," — der De-facto-Standard für lokal, CPU+GPU, läuft überall."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Ollama / LM Studio"})," — bequeme Wrapper mit One-Click-Downloads (LM Studio mit GUI)."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"vLLM / TGI"})," — Server-Engines für maximalen Durchsatz auf dicken GPUs."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"llama-swap"})," — Proxy, der ",e.jsx("em",{children:"mehrere"})," Modelle hinter ",e.jsx("em",{children:"einem"})," Port hält und je nach Anfrage automatisch ein-/aussattelt."]})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs("p",{children:[e.jsx("strong",{children:"GPU-Backends"})," — wie gerechnet wird:"]}),e.jsx("ul",{className:"list-disc pl-4 space-y-1",children:e.jsxs("li",{children:[e.jsx(s,{children:"CUDA"})," NVIDIA · ",e.jsx(s,{children:"ROCm"})," AMD · ",e.jsx(s,{children:"Vulkan"})," herstellerübergreifend · ",e.jsx(s,{children:"Metal"})," Apple"]})}),e.jsxs("p",{className:"pt-1",children:[e.jsx("strong",{children:"Begriffe, die immer wiederkommen:"})," Kontext (",e.jsx(s,{children:"-c"}),"), Slots/Parallel, KV-Cache, Modell-TTL/Swap, ",e.jsx("strong",{children:"Speculative Decoding"})," (kleines Draft-Modell rät voraus → schneller)."]})]})]}),e.jsxs(m,{children:["Deine Box hat eine AMD-APU (gfx1151). ",e.jsx("strong",{children:"Einschränkung & Trick:"})," dort schlägt ",e.jsx(s,{children:"Vulkan/RADV"})," das offizielle ",e.jsx(s,{children:"ROCm"})," bei Token-Generierung um ~12–22 % — darum läuft die Engine auf Vulkan.",e.jsx(s,{children:"llama-swap"})," hält die Alltags-Hirne dauerwarm; ",e.jsx(s,{children:"coder"})," nutzt Spec-Decoding."]})]}),e.jsxs(a,{id:"modelle",icon:k,color:"text-sky-400",title:"4. Modell-Landschaft",kicker:"Stand Juni 2026",wide:!0,children:[e.jsxs("div",{className:"grid md:grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx("p",{children:e.jsx("strong",{children:"Open-Weight (lokal nutzbar):"})}),e.jsxs("ul",{className:"list-disc pl-4 space-y-1",children:[e.jsxs("li",{children:[e.jsx("strong",{children:"Qwen"})," (Alibaba) — starke Allrounder + Coder + Vision, viele Größen/MoE."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Llama"})," (Meta), ",e.jsx("strong",{children:"Gemma"})," (Google), ",e.jsx("strong",{children:"Phi"})," (Microsoft) — solide Open-Familien."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"DeepSeek"}),", ",e.jsx("strong",{children:"Mistral/Mixtral"})," — kräftige MoE-/Reasoning-Modelle."]})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx("p",{children:e.jsx("strong",{children:"Frontier (Cloud-API):"})}),e.jsx("ul",{className:"list-disc pl-4 space-y-1",children:e.jsxs("li",{children:[e.jsx("strong",{children:"Claude"})," (Anthropic), ",e.jsx("strong",{children:"GPT"})," (OpenAI), ",e.jsx("strong",{children:"Gemini"})," (Google) — die stärksten Allrounder, aber nicht lokal."]})}),e.jsxs("p",{className:"pt-1",children:[e.jsx("strong",{children:"Modellwahl nach Aufgabe:"})," schnelles Alltags-Hirn · großes Logik-Hirn für harte Tasks · dediziertes Code-Modell · multimodal für Bilder · Embedding-Modell fürs Gedächtnis."]})]})]}),e.jsx("p",{className:"text-[11px] italic",children:'Leaderboards (HF, LMArena) sind grobe Orientierung — der einzige Benchmark, der zählt, ist deine eigene Aufgabe. Vorsicht vor „Benchmaxxing".'}),e.jsxs(m,{children:["Dein Line-up via llama-swap (Klartext-Rollen): ",e.jsx(s,{children:"Hirn"})," (Agent, dauerwarm) · ",e.jsx(s,{children:"Groß"})," (schwere Logik) · ",e.jsx(s,{children:"Coder"})," · ",e.jsx(s,{children:"Augen"})," (Bilder) · ",e.jsx(s,{children:"Späher"})," (schnelle Recherche) ·",e.jsx(s,{children:"Kritiker"})," (Fremdblick/Review) · ",e.jsx(s,{children:"Gedächtnis"})," + ",e.jsx(s,{children:"Sortierer"})," (Embedding & Reranking). Verwalten/tauschen im ",e.jsx("strong",{children:"Modelle"}),"-Tab."]})]}),e.jsxs(a,{id:"gateway",icon:N,color:"text-amber-400",title:"5. Der Gateway-Trick",kicker:"OpenAI-kompatibel = überall andocken",children:[e.jsxs("p",{children:["Fast jedes AI-Tool spricht heute das ",e.jsx("strong",{children:"OpenAI-Format"})," (",e.jsx(s,{children:"/v1/chat/completions"}),"). Ein",e.jsx("strong",{children:" Gateway"})," davor gibt dir ",e.jsx("em",{children:"einen"})," Endpunkt für alles: zentrales Key-Management, Logging und transparentes ",e.jsx("strong",{children:"Routing"})," — der Client merkt nicht, welches Modell tatsächlich antwortet."]}),e.jsxs("p",{children:["Die Lane-Idee: du wählst ",e.jsx(s,{children:"chat"})," (Alltag, ",e.jsx(s,{children:"auto"})," geht als Alias weiter) oder"," ",e.jsx(s,{children:"coding"})," (agentisch), das Gateway pickt das passende echte Modell und lädt es bei Bedarf."]}),e.jsxs(m,{children:["Dein Gateway: ",e.jsx(s,{children:"http://192.168.178.151:9001/v1"}),", Model ",e.jsx(s,{children:"chat"})," oder ",e.jsx(s,{children:"coding"}),", API-Key beliebig. Fertige Configs erzeugt dir der ",e.jsx("strong",{children:"Verbinden"}),"-Tab live — eine Wahrheit, kein Abtippen."]})]}),e.jsxs(a,{id:"mcp",icon:y,color:"text-violet-400",title:"6. MCP — Werkzeuge für Agenten",kicker:"USB-C für AI-Tools",children:[e.jsxs("p",{children:["Das ",e.jsx("strong",{children:"Model Context Protocol"})," (offen, von Anthropic initiiert) standardisiert, wie ein AI-Client mit externen Tools & Datenquellen spricht. Ein ",e.jsx("strong",{children:"MCP-Server"})," bringt Fähigkeiten: Dateien, Web-Fetch, Git, Datenbanken, eigene APIs."]}),e.jsx("p",{children:"Statt für jeden Editor eigene Tools zu schreiben, bindet jeder MCP-fähige Agent denselben Server an."}),e.jsxs("div",{className:"flex items-start gap-1.5 rounded-xl border border-amber-500/25 bg-amber-500/[0.06] p-2.5 text-[11px]",children:[e.jsx(B,{className:"h-3.5 w-3.5 text-amber-400 shrink-0 mt-0.5"}),e.jsxs("span",{children:[e.jsx("strong",{children:"Sicherheit:"})," ein MCP-Server hat echten Zugriff (Dateien, Shell). Nur vertrauenswürdige Server laufen lassen, Rechte minimal halten, Quelle prüfen."]})]})]}),e.jsxs(a,{id:"skills",icon:H,color:"text-emerald-400",title:"7. Agent Skills",kicker:"Wiederverwendbare Fähigkeiten",children:[e.jsxs("p",{children:["Ein ",e.jsx("strong",{children:"Skill"})," ist ein Ordner mit einer ",e.jsx(s,{children:"SKILL.md"})," (YAML-Kopf + Anleitung, optional Skripte/Beispiele), den der Agent für eine bestimmte Aufgabe lädt — z.B. TDD, Code-Vereinfachung, API-Design."]}),e.jsx("pre",{className:"p-2.5 bg-background/25 rounded-lg border border-border/30 font-mono text-[9px] text-foreground overflow-x-auto whitespace-pre",children:`--- +name: tdd-pro +description: Treibt Entwicklung mit strikter TDD-Praxis +--- +# Instructions +...`}),e.jsxs("p",{children:["Suchen & installieren über die ",e.jsx("strong",{children:"skills.sh"}),"-Registry: ",e.jsx(s,{children:"npx skills find"})," /",e.jsx(s,{children:"npx skills add owner/repo"}),". Skills liegen projektweit (vom Agent beim Start gelesen) oder global."]})]}),e.jsxs(a,{id:"memory",icon:V,color:"text-indigo-400",title:"8. Gedächtnis & RAG",kicker:"Modelle vergessen — du nicht",wide:!0,children:[e.jsxs("div",{className:"grid md:grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsxs("p",{children:["LLMs sind ",e.jsx("strong",{children:"zustandslos"}),": ohne Hilfe weiß das Modell beim nächsten Turn nichts mehr. Gedächtnis lebt extern."]}),e.jsxs("ul",{className:"list-disc pl-4 space-y-1",children:[e.jsxs("li",{children:[e.jsx("strong",{children:"Embeddings"})," wandeln Text in Vektoren; ein ",e.jsx("strong",{children:"Vektor-Store"})," (Chroma, …) findet semantisch Ähnliches."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"RAG"})," = relevante Fakten vor dem Turn heraussuchen und einblenden statt alles im Prompt zu halten."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Long-Context vs. RAG:"}),' riesige Fenster sind bequem, aber teuer & „lost in the middle" — gezieltes Abrufen skaliert besser.']})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs("p",{children:[e.jsx("strong",{children:"Auto-lernendes Gedächtnis"})," ist die nächste Stufe:"]}),e.jsxs("ul",{className:"list-disc pl-4 space-y-1",children:[e.jsxs("li",{children:["extrahiert Fakten ",e.jsx("em",{children:"selbst"})," aus Gesprächen, statt nur abzuspeichern"]}),e.jsx("li",{children:"dedupliziert semantisch (kein 10× derselbe Fakt)"}),e.jsxs("li",{children:[e.jsx("strong",{children:"Graph-Sicht"})," = Fakten ",e.jsx("em",{children:"plus"})," ihre Beziehungen, nicht nur eine flache Liste"]})]})]})]}),e.jsxs(m,{children:["Dein Gedächtnis führt ",e.jsx("strong",{children:"Hermes"})," selbst — auto-lernend und semantisch. Der Agent lernt im Hintergrund nach jedem Turn, egal ob du per Desktop, Konsole, Telegram oder Lucy mit ihm sprichst.",e.jsx("br",{}),"Deshalb hat das Steuerpult ",e.jsx("strong",{children:"keinen eigenen Gedächtnis-Tab"}),": bis August 2026 lag das Gedächtnis in einem MC2-Sidecar, seit dessen Ablösung ist Hermes die einzige Quelle — angesehen und gepflegt wird es dort, nicht hier. Unter ",e.jsx("strong",{children:"Wissen"})," findest du weiterhin die Graph-Sicht auf Lucys Wissens-Vault.",e.jsx("br",{}),e.jsx("strong",{children:"Gotcha:"})," ein gelöschter Fakt kann wieder auftauchen, solange die Original-Nachricht noch im Verlauf steht (additive Extraktion)."]})]}),e.jsxs(a,{id:"agents",icon:v,color:"text-rose-400",title:"9. Autonome Agenten betreiben",kicker:"LLM in der Schleife",wide:!0,children:[e.jsxs("div",{className:"grid md:grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsxs("p",{children:["Ein ",e.jsx("strong",{children:"Agent"})," ist ein LLM in einer Schleife mit Tools:",e.jsx("em",{children:" denken → Tool aufrufen → Ergebnis beobachten → weiter"}),", bis das Ziel erreicht ist."]}),e.jsxs("ul",{className:"list-disc pl-4 space-y-1",children:[e.jsxs("li",{children:[e.jsx("strong",{children:"Guardrails"})," (Hard-Stop, Tool-Limits) verhindern Endlos-Loops, wenn ein Tool fehlt oder hängt."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Kontext-Hygiene"})," ist die wichtigste Disziplin: frische Sessions starten — vollgemüllte Historien werden langsam, driften und halluzinieren."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Kanäle:"})," CLI/Terminal, Chat-UI, Messaging (z.B. Telegram), reine API."]})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs("p",{children:[e.jsx("strong",{children:"Least Privilege:"})," gib einem Agenten nur die Tools, die er wirklich braucht. Kritische Aktionen (Shell auf dem Host, Löschen, Geld/Deploys) hinter menschliche Freigabe."]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Was sich vollautomatisch lohnt:"})," Modell-Routing, Hintergrund-Gedächtnis, Recherche. ",e.jsx("strong",{children:"Was Freigabe braucht:"})," Systembefehle, Updates/Reboots, permanentes Löschen."]})]})]}),e.jsxs(m,{children:[e.jsx("strong",{children:"Hermes"})," ist dein Box-Agent mit eigenem Agent-Hirn (Rolle ",e.jsx(s,{children:"Hirn"}),", dauerwarm). Reden tust du mit ihm über ",e.jsx("strong",{children:"Hermes Desktop"})," (am PC, remote via ",e.jsx(s,{children:"/hermes-ui"}),"), die ",e.jsx("strong",{children:"Konsole"})," (Box-Shell im Browser), ",e.jsx("strong",{children:"Telegram"})," — oder per Stimme über",e.jsx("strong",{children:" Lucy"}),". Er hat MCP-Server für Gedächtnis, Stack-Steuerung, Web-Fetch und",e.jsx("strong",{children:" PC-Steuerung"})," (Executor auf deinem Windows-PC). Nachts betreibt er Radar-Crons und meldet Funde in Chronik, Briefkasten und Telegram. Status & Verdrahtung im ",e.jsx("strong",{children:"Hermes"}),"-Tab."]})]}),e.jsxs(a,{id:"ide",icon:P,color:"text-cyan-400",title:"10. IDE / Editor anbinden",kicker:"Vibe-Coding lokal",children:[e.jsxs("p",{children:["Jede ",e.jsx("strong",{children:"OpenAI-kompatible"})," IDE oder Extension lässt sich auf einen lokalen Server umbiegen — Base-URL + Model eintragen, fertig:"]}),e.jsxs("ul",{className:"list-disc pl-4 space-y-1",children:[e.jsxs("li",{children:[e.jsx("strong",{children:"Cline"})," & ",e.jsx("strong",{children:"Roo Code"})," (VS-Code-Extensions, voller Agent + MCP)"]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Cursor"})," (VS-Code-Fork mit Top-Autocomplete)"]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Continue"}),", ",e.jsx("strong",{children:"aider"})," (CLI), ",e.jsx("strong",{children:"OpenCode"})," (Desktop)"]})]}),e.jsxs(m,{children:["Deine Haupt-IDE ist inzwischen ",e.jsx("strong",{children:"Hermes Desktop"})," — sie ist ab Werk mit Box, Gedächtnis und Skills verdrahtet, da ist nichts zu konfigurieren. Für alles andere gilt: Tipp den Kram nicht ab — der",e.jsx("strong",{children:" Verbinden"}),"-Tab generiert die fertige Config (inkl. MCP-Gedächtnis) pro Tool zum Kopieren. Essenz: Base ",e.jsx(s,{children:"…:9001/v1"}),", Model ",e.jsx(s,{children:"coder"})," (bauen) / ",e.jsx(s,{children:"heavy"})," (denken) /"," ",e.jsx(s,{children:"vision"})," (Bilder); für simple Chat-Tools tut es die Lane ",e.jsx(s,{children:"chat"}),". Key beliebig."]})]}),e.jsx(a,{id:"tricks",icon:L,color:"text-amber-400",title:"11. Tricks & Kniffe",kicker:"Was im Alltag wirklich spart",wide:!0,children:e.jsx("div",{className:"grid md:grid-cols-3 gap-3",children:[["Kontext sauber halten","Neue Session statt Mega-Historie. Drift, Tempo und Halluzination hängen direkt am Kontext-Müll."],["Plan-then-Act","Erst Plan/Vorgehen bestätigen lassen, dann ausführen. Spart teure Holzwege."],["Gezielte Edits","Nie ganze Dateien überschreiben für eine Zeile — Such-/Ersetz-Tools nutzen. Weniger Tokens, weniger Fehler."],["Non-interaktive Befehle","Keine interaktiven Prompts im Agent-Terminal; lange Tasks als Background-Job. Sonst hängt der Loop."],["DevTools koppeln","Browser-/Konsolen-Zugriff geben — der Agent liest echte Fehler statt blind zu raten."],["Richtige Modellwahl","Schnelles Hirn für Alltag, großes für harte Logik, Coder fürs Coden. Nicht alles mit der Kanone."],["Akzeptanzkriterien","Sag konkret, woran „fertig“ erkennbar ist. Vage Prompts → vage Ergebnisse."],["Verifizieren statt vertrauen","Tests/Live-Check fordern. „Sollte funktionieren“ ist kein Beweis."],["Regeln ins Gedächtnis","Wiederkehrende Vorlieben/Konventionen einmal ablegen — der Agent zieht sie selbst."]].map(([t,c])=>e.jsxs("div",{className:"space-y-1 p-3 bg-background/10 rounded-xl border border-border/30",children:[e.jsxs("div",{className:"flex items-center gap-1.5 font-bold text-foreground text-[11px]",children:[e.jsx(E,{className:"h-3 w-3 text-amber-400"})," ",t]}),e.jsx("p",{className:"text-[11px]",children:c})]},t))})}),e.jsx(a,{id:"wartung",icon:R,color:"text-emerald-400",title:"12. Sicherheit & Wartung",kicker:"Damit's auch morgen noch läuft",wide:!0,children:e.jsxs("div",{className:"grid md:grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsxs("p",{className:"flex items-center gap-1.5 font-bold text-foreground",children:[e.jsx(G,{className:"h-3.5 w-3.5 text-emerald-400"})," Goldene Regeln"]}),e.jsxs("ul",{className:"list-disc pl-4 space-y-1",children:[e.jsxs("li",{children:[e.jsx("strong",{children:"Ein ungetesteter Restore ist kein Backup."})," Wiederherstellung mindestens einmal echt durchspielen."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Updates können Dinge still zerschießen"})," — gerade bei AI-Stacks (Embeddings, Provider-Interna). Versionen pinnen, Smoke-Test, Post-Check."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Least Privilege"})," für Agenten, MCP-Server und PC-Zugriff. Kritisches hinter Freigabe."]})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs("p",{className:"flex items-center gap-1.5 font-bold text-foreground",children:[e.jsx(D,{className:"h-3.5 w-3.5 text-emerald-400"})," Bei dir im SystemDrawer"]}),e.jsxs("ul",{className:"list-disc pl-4 space-y-1",children:[e.jsxs("li",{children:[e.jsx("strong",{children:"Backup:"})," PBS-Backup-Zentrum (Sicherung auf den Proxmox-Server) + tägliche Tarball-Sicherung; Restore echt durchgespielt (",e.jsx(s,{children:"restore.sh"}),", Doku in ",e.jsx(s,{children:"docs/BACKUP.md"}),")."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Updates:"})," git-basierter Update-Check; ",e.jsx("strong",{children:"Update-Buttons"})," mit anschließendem ",e.jsx("strong",{children:"Gehirn-Check"})," (rot, falls ein Update das Gedächtnis zerschießt)."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Deploy-Sicherheit:"})," ",e.jsx("code",{children:"deploy.sh"})," sichert vorher und prüft danach die Gesundheit; die Zeitmaschine in der Chronik ist der Rückweg."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Dienste & Gefahrenzone:"})," Restart/Logs pro Dienst, kritische Eingriffe getrennt."]})]}),e.jsx("p",{className:"text-[10px] italic",children:'Erreichbar über das System-Icon → Tab „Wartung".'})]})]})}),e.jsxs("section",{id:"ressourcen",className:"scroll-mt-20 md:col-span-2 mc-card p-6 space-y-4",children:[e.jsxs("div",{className:"flex items-center gap-2.5 border-b border-border/20 pb-3",children:[e.jsx(w,{className:"h-5 w-5 text-primary"}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-xs font-bold uppercase tracking-wider text-foreground",children:"13. Kuratierte Ressourcen & Links"}),e.jsx("span",{className:"text-[9px] font-mono text-primary",children:"Sauber geordnet — die guten Quellen"})]})]}),e.jsxs("div",{className:"grid md:grid-cols-2 gap-5 text-xs",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"font-bold text-foreground flex items-center gap-1.5",children:[e.jsx(k,{className:"h-3.5 w-3.5 text-sky-400"})," Modelle & Engines"]}),e.jsxs("ul",{className:"list-disc pl-4 space-y-1.5",children:[e.jsx(l,{href:"https://huggingface.co/models",name:"Hugging Face",note:"das Repository für offene Modelle (GGUF, Embeddings, Datasets)."}),e.jsx(l,{href:"https://github.com/ggml-org/llama.cpp",name:"llama.cpp",note:"die Referenz-Engine für lokale Inferenz."}),e.jsx(l,{href:"https://github.com/mostlygeek/llama-swap",name:"llama-swap",note:"mehrere Modelle hinter einem Port, Auto-Swap."}),e.jsx(l,{href:"https://ollama.com",name:"Ollama",note:"einfachster Einstieg, One-Command-Modelle."}),e.jsx(l,{href:"https://lmstudio.ai",name:"LM Studio",note:"lokale GUI zum Stöbern, Laden & Chatten."}),e.jsx(l,{href:"https://github.com/vllm-project/vllm",name:"vLLM",note:"Hochdurchsatz-Serving auf dicken GPUs."})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"font-bold text-foreground flex items-center gap-1.5",children:[e.jsx(y,{className:"h-3.5 w-3.5 text-violet-400"})," MCP & Skills"]}),e.jsxs("ul",{className:"list-disc pl-4 space-y-1.5",children:[e.jsx(l,{href:"https://modelcontextprotocol.io",name:"MCP — offizielle Doku",note:"Spezifikation & Einstieg."}),e.jsx(l,{href:"https://github.com/modelcontextprotocol/servers",name:"Offizielle MCP-Server",note:"filesystem, git, postgres, fetch & mehr."}),e.jsx(l,{href:"https://smithery.ai",name:"Smithery",note:"Registry zum Suchen & Auto-Installieren von MCP-Servern."}),e.jsx(l,{href:"https://glama.ai/mcp/servers",name:"Glama MCP Registry",note:"kuratierte Community-Datenbank."}),e.jsx(l,{href:"https://skills.sh",name:"skills.sh",note:"Registry & CLI für Agent-Skills."})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"font-bold text-foreground flex items-center gap-1.5",children:[e.jsx(v,{className:"h-3.5 w-3.5 text-rose-400"})," Agenten & Frameworks"]}),e.jsxs("ul",{className:"list-disc pl-4 space-y-1.5",children:[e.jsx(l,{href:"https://github.com/NousResearch/hermes-agent",name:"Hermes Agent (Nous)",note:"der Agent, der auf deiner Box läuft."}),e.jsx(l,{href:"https://docs.claude.com",name:"Anthropic / Claude Docs",note:"API, Tool-Use, Agent SDK, MCP."}),e.jsx(l,{href:"https://github.com/cline/cline",name:"Cline",note:"autonomer Coding-Agent für VS Code."}),e.jsx(l,{href:"https://aider.chat",name:"aider",note:"AI-Pair-Programming im Terminal, git-nativ."}),e.jsx(l,{href:"https://continue.dev",name:"Continue",note:"Open-Source-Autopilot für IDEs."})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"font-bold text-foreground flex items-center gap-1.5",children:[e.jsx(S,{className:"h-3.5 w-3.5 text-amber-400"})," Lernen & Community"]}),e.jsxs("ul",{className:"list-disc pl-4 space-y-1.5",children:[e.jsx(l,{href:"https://docs.anthropic.com/en/docs/build-with-claude/prompt-engineering/overview",name:"Prompt-Engineering (Anthropic)",note:"die beste praktische Anleitung."}),e.jsx(l,{href:"https://github.com/anthropics/anthropic-cookbook",name:"Anthropic Cookbook",note:"lauffähige Rezepte für Tools, RAG, Agenten."}),e.jsx(l,{href:"https://www.promptingguide.ai",name:"Prompt Engineering Guide",note:"herstellerneutrales Nachschlagewerk."}),e.jsx(l,{href:"https://hermes-agent.nousresearch.com",name:"Hermes Agent",note:"die autonome Open-Source Agenten-Plattform unserer Box."}),e.jsx(l,{href:"https://www.reddit.com/r/LocalLLaMA/",name:"r/LocalLLaMA",note:"der Puls der lokalen-LLM-Szene."})]})]})]})]}),e.jsx(a,{id:"troubleshooting",icon:W,color:"text-rose-400",title:"14. Troubleshooting",kicker:"Wenn's hakt",wide:!0,children:e.jsxs("ul",{className:"space-y-2 list-disc pl-4",children:[e.jsxs("li",{children:[e.jsx("strong",{children:"Keine Verbindung?"})," Selbes LAN wie die Box? IP/Port stimmen (",e.jsx(s,{children:":9001"}),")? Backend-Status im ",e.jsx("strong",{children:"Cockpit"})," prüfen."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Modell antwortet nicht / langsam?"})," Im ",e.jsx("strong",{children:"Cockpit → Dienste"})," schauen, ob ",e.jsx(s,{children:"llama-swap"})," grün ist; sonst Restart. Erstes Token nach Swap dauert (Modell lädt)."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Agent dreht durch / halluziniert?"})," Frische Session starten (Hermes Desktop oder ",e.jsx("strong",{children:"Konsole"}),") — meist ist es vollgemüllter Kontext."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Gedächtnis findet nichts?"})," Embedding-Dienst online? Semantisch suchen (Sinn statt exaktem Wort)."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Angenommene Karte hat etwas zerschossen?"})," Meist fängt es der Auto-Revert; sonst ",e.jsx("strong",{children:"Chronik → Zeitmaschine"})," (Stand von gestern) oder Backup & ",e.jsx(s,{children:"restore.sh"}),"."]})]})})]}),e.jsx("p",{className:"text-center text-[10px] text-muted-foreground/50 pt-2",children:"Mission Control 2 · AI-Bibel · Stand Juli 2026 — lebendes Dokument, wächst mit dem Stack."})]})}export{J as GuideView}; diff --git a/frontend/dist/assets/GuideView-DJzyVTu7.js b/frontend/dist/assets/GuideView-DJzyVTu7.js deleted file mode 100644 index aeb37e2..0000000 --- a/frontend/dist/assets/GuideView-DJzyVTu7.js +++ /dev/null @@ -1,36 +0,0 @@ -import{c as u,j as e,r as M,t as C,Y as z,Z as k,_ as y,Q as v,$ as L,a0 as G,W as D,b as f,a1 as T}from"./index-l6kyKCL9.js";import{a as w,L as B,C as P,Z as E}from"./zap-CnZftvep.js";import{L as R}from"./layers-BFKjGswj.js";import{S as I}from"./shield-CVm2T_f5.js";/** - * @license lucide-react v0.460.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const K=u("ArrowUpRight",[["path",{d:"M7 7h10v10",key:"1tivn9"}],["path",{d:"M7 17 17 7",key:"1vkiza"}]]);/** - * @license lucide-react v0.460.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const S=u("BookOpen",[["path",{d:"M12 7v14",key:"1akyts"}],["path",{d:"M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z",key:"ruj8y"}]]);/** - * @license lucide-react v0.460.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const W=u("Database",[["ellipse",{cx:"12",cy:"5",rx:"9",ry:"3",key:"msslwz"}],["path",{d:"M3 5V19A9 3 0 0 0 21 19V5",key:"1wlel7"}],["path",{d:"M3 12A9 3 0 0 0 21 12",key:"mv7ke4"}]]);/** - * @license lucide-react v0.460.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const V=u("LifeBuoy",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m4.93 4.93 4.24 4.24",key:"1ymg45"}],["path",{d:"m14.83 9.17 4.24-4.24",key:"1cb5xl"}],["path",{d:"m14.83 14.83 4.24 4.24",key:"q42g0n"}],["path",{d:"m9.17 14.83-4.24 4.24",key:"bqpfvv"}],["circle",{cx:"12",cy:"12",r:"4",key:"4exip2"}]]);/** - * @license lucide-react v0.460.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const A=u("Network",[["rect",{x:"16",y:"16",width:"6",height:"6",rx:"1",key:"4q2zg0"}],["rect",{x:"2",y:"16",width:"6",height:"6",rx:"1",key:"8cvhb9"}],["rect",{x:"9",y:"2",width:"6",height:"6",rx:"1",key:"1egb70"}],["path",{d:"M5 16v-3a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v3",key:"1jsf9p"}],["path",{d:"M12 12V8",key:"2874zd"}]]);/** - * @license lucide-react v0.460.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const H=u("Puzzle",[["path",{d:"M15.39 4.39a1 1 0 0 0 1.68-.474 2.5 2.5 0 1 1 3.014 3.015 1 1 0 0 0-.474 1.68l1.683 1.682a2.414 2.414 0 0 1 0 3.414L19.61 15.39a1 1 0 0 1-1.68-.474 2.5 2.5 0 1 0-3.014 3.015 1 1 0 0 1 .474 1.68l-1.683 1.682a2.414 2.414 0 0 1-3.414 0L8.61 19.61a1 1 0 0 0-1.68.474 2.5 2.5 0 1 1-3.014-3.015 1 1 0 0 0 .474-1.68l-1.683-1.682a2.414 2.414 0 0 1 0-3.414L4.39 8.61a1 1 0 0 1 1.68.474 2.5 2.5 0 1 0 3.014-3.015 1 1 0 0 1-.474-1.68l1.683-1.682a2.414 2.414 0 0 1 3.414 0z",key:"w46dr5"}]]),i={text:"hsl(var(--foreground))",mut:"hsl(var(--muted-foreground))",border:"hsl(var(--border))",card:"hsl(var(--card) / 0.9)",bg:"hsl(var(--background) / 0.4)",primary:"hsl(var(--primary))",teal:"#2dd4bf",sky:"#38bdf8",violet:"#a78bfa",rose:"#fb7185",amber:"#fbbf24",emerald:"#34d399",indigo:"#818cf8"};function o({x:n,y:r,w:t,h:c,color:h,title:g,sub:d,sub2:x,strong:p}){const b=n+t/2;return e.jsxs("g",{children:[e.jsx("rect",{x:n,y:r,width:t,height:c,rx:12,fill:i.card,stroke:h,strokeOpacity:p?.9:.45,strokeWidth:p?2:1.25}),e.jsx("rect",{x:n,y:r,width:t,height:3,rx:1.5,fill:h,opacity:.8}),e.jsx("text",{x:b,y:r+(d?24:c/2+4),textAnchor:"middle",fill:i.text,fontSize:12.5,fontWeight:700,children:g}),d&&e.jsx("text",{x:b,y:r+40,textAnchor:"middle",fill:i.mut,fontSize:10,children:d}),x&&e.jsx("text",{x:b,y:r+53,textAnchor:"middle",fill:i.mut,fontSize:10,children:x})]})}function j({from:n,to:r,color:t=i.border,dash:c}){const[h,g]=n,[d,x]=r,p=(h+d)/2;return e.jsxs("g",{stroke:t,strokeOpacity:.7,fill:"none",strokeWidth:1.5,strokeDasharray:c?"5 4":void 0,children:[e.jsx("path",{d:`M ${h} ${g} C ${p} ${g}, ${p} ${x}, ${d} ${x}`}),e.jsx("path",{d:`M ${d-6} ${x-4} L ${d} ${x} L ${d-6} ${x+4}`,fill:t,fillOpacity:.7,stroke:"none"})]})}function F(){const n=[{y:34,title:"Diese Oberfläche",sub:"Browser · Cockpit & Klick-Gates",color:i.teal},{y:128,title:"Lucy",sub:"Stimme & Begleiterin am PC",color:i.rose},{y:222,title:"Hermes Desktop",sub:"IDE für Projekte (PC + remote)",color:i.violet},{y:316,title:"Telegram",sub:"unterwegs, gleiche Erinnerung",color:i.sky}];return e.jsxs("svg",{viewBox:"0 0 880 432",role:"img","aria-label":"Landkarte: Du erreichst die Box über vier Türen; in der Box arbeiten Mission Control, der Hermes-Agent, der Modell-Stall, das Gedächtnis und der Wissens-Vault.",style:{width:"100%",height:"auto",fontFamily:"var(--font-sans)"},children:[e.jsx(o,{x:16,y:150,w:120,h:92,color:i.primary,strong:!0,title:"Du",sub:"entscheidest —",sub2:"die Box arbeitet"}),e.jsx(o,{x:16,y:330,w:150,h:68,color:i.emerald,title:"PC-Executor",sub:"baut & startet Lucy",sub2:"nach deiner Annahme"}),n.map(r=>e.jsx(o,{x:196,y:r.y,w:186,h:64,color:r.color,title:r.title,sub:r.sub},r.title)),n.map(r=>e.jsx(j,{from:[136,196],to:[196,r.y+32]},r.title)),e.jsx("rect",{x:420,y:14,width:444,height:404,rx:16,fill:i.bg,stroke:i.border,strokeOpacity:.7}),e.jsx("text",{x:642,y:38,textAnchor:"middle",fill:i.text,fontSize:13,fontWeight:800,letterSpacing:.5,children:"DIE BOX · 192.168.178.151"}),e.jsx(o,{x:444,y:54,w:396,h:62,color:i.teal,title:"Mission Control (:9001)",sub:"Cockpit · Auftragsbuch (Klick-Gate) · Chronik · Wissen"}),e.jsx(o,{x:444,y:126,w:396,h:62,color:i.rose,title:"Hermes-Agent",sub:"denkt, nutzt Werkzeuge, betreibt die Werkstatt & Nacht-Crons"}),e.jsx(o,{x:444,y:198,w:396,h:78,color:i.sky,title:"Modell-Stall (llama-swap)",sub:"Hirn · Groß · Coder · Augen · Späher · Kritiker",sub2:"+ Embedding & Sortierer fürs Gedächtnis"}),e.jsx(o,{x:444,y:286,w:190,h:56,color:i.indigo,title:"Natives Gedächtnis",sub:"Hermes v0.20 SQLite & Embed"}),e.jsx(o,{x:650,y:286,w:190,h:56,color:i.amber,title:"Wissens-Vault",sub:"Träume & Notizen (git)"}),e.jsx(o,{x:444,y:352,w:396,h:52,color:i.emerald,title:"Selbstheilung & Backups",sub:"Health-Checks · Auto-Revert bei Rot · PBS-Sicherung"}),n.map(r=>e.jsx(j,{from:[382,r.y+32],to:[420,r.y+46]},r.title)),e.jsx(j,{from:[420,396],to:[166,364],color:i.emerald,dash:!0}),e.jsx("text",{x:272,y:412,textAnchor:"middle",fill:i.mut,fontSize:9.5,fontStyle:"italic",children:"Lucy-Karte angenommen → PC baut neu"})]})}function O(){const n=[{x:14,color:i.amber,title:"Idee",sub:"von dir oder vom",sub2:"Nacht-Radar"},{x:158,color:i.violet,title:"Ideen-Queue",sub:"Kanban sammelt,",sub2:"Specifier plant"},{x:302,color:i.rose,title:"Werkstatt",sub:"Agent baut den",sub2:"Vorschlag (Branch)"},{x:446,color:i.sky,title:"Auftragsbuch",sub:"Karte + Stempel",sub2:"vom Gutachter"},{x:590,color:i.primary,title:"DEIN Klick",sub:"annehmen oder",sub2:"ablehnen (mit Grund)",strong:!0},{x:734,color:i.emerald,title:"Live",sub:"Merge + Deploy,",sub2:"Rot = Auto-Rückbau"}];return e.jsxs("svg",{viewBox:"0 0 880 246",role:"img","aria-label":"Kreislauf: Idee, Ideen-Queue, Werkstatt, Auftragsbuch, dein Klick, live — Chronik und Morgenlage berichten zurück.",style:{width:"100%",height:"auto",fontFamily:"var(--font-sans)"},children:[n.map(r=>e.jsx(o,{x:r.x,y:38,w:132,h:66,color:r.color,title:r.title,sub:r.sub,sub2:r.sub2,strong:r.strong},r.title)),n.slice(0,-1).map((r,t)=>e.jsx(j,{from:[r.x+132,71],to:[n[t+1].x,71]},r.title)),e.jsxs("g",{stroke:i.border,strokeOpacity:.7,fill:"none",strokeWidth:1.5,strokeDasharray:"5 4",children:[e.jsx("path",{d:"M 800 104 C 800 150, 720 150, 440 150 C 160 150, 80 150, 80 112"}),e.jsx("path",{d:"M 76 118 L 80 108 L 84 118",fill:i.border,fillOpacity:.7,stroke:"none"})]}),e.jsx("text",{x:440,y:144,textAnchor:"middle",fill:i.mut,fontSize:10,fontStyle:"italic",children:"Chronik & Morgenlage berichten · Ablehnungs-Gründe werden Lern-Futter"}),e.jsx("rect",{x:14,y:176,width:852,height:54,rx:12,fill:i.bg,stroke:i.border,strokeOpacity:.5}),e.jsx("text",{x:440,y:198,textAnchor:"middle",fill:i.text,fontSize:11,fontWeight:700,children:"Nachts, ganz allein:"}),e.jsx("text",{x:440,y:216,textAnchor:"middle",fill:i.mut,fontSize:10,children:"03:15 Traum · 03:35 Selbst-Inventur · 03:45 Idle-Radar · 04:00 Karten-Gutachter · 04:10 Bagatellen · 04:30 Morgenlage · Mo 05:15 Release-Radar"})]})}function U(){return e.jsxs("div",{className:"space-y-5",children:[e.jsx("div",{className:"overflow-x-auto",children:e.jsx("div",{className:"min-w-[680px]",children:e.jsx(F,{})})}),e.jsx("div",{className:"border-t border-border/20 pt-4 overflow-x-auto",children:e.jsx("div",{className:"min-w-[680px]",children:e.jsx(O,{})})})]})}const N=[{id:"system",label:"Dein System"},{id:"grundlagen",label:"Grundlagen"},{id:"moe",label:"MoE & Quant"},{id:"lokal",label:"Lokal betreiben"},{id:"modelle",label:"Modell-Landschaft"},{id:"gateway",label:"Gateway-Trick"},{id:"mcp",label:"MCP"},{id:"skills",label:"Skills"},{id:"memory",label:"Gedächtnis & RAG"},{id:"agents",label:"Agenten"},{id:"ide",label:"IDE anbinden"},{id:"tricks",label:"Tricks & Kniffe"},{id:"wartung",label:"Sicherheit & Wartung"},{id:"ressourcen",label:"Ressourcen"},{id:"troubleshooting",label:"Troubleshooting"}];function Q(n){var r;(r=document.getElementById(n))==null||r.scrollIntoView({behavior:"smooth",block:"start"})}function a({id:n,icon:r,color:t,title:c,kicker:h,children:g,wide:d}){return e.jsxs("section",{id:n,className:f("scroll-mt-20 mc-card p-6 space-y-3",d&&"md:col-span-2"),children:[e.jsxs("div",{className:"flex items-center gap-2.5 border-b border-border/20 pb-3",children:[e.jsx(r,{className:f("h-5 w-5 shrink-0",t)}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-xs font-bold uppercase tracking-wider text-foreground",children:c}),h&&e.jsx("span",{className:f("text-[9px] font-mono",t),children:h})]})]}),e.jsx("div",{className:"text-xs text-muted-foreground space-y-2.5 leading-relaxed",children:g})]})}function m({children:n}){return e.jsxs("div",{className:"mt-1 rounded-xl border border-primary/25 bg-primary/[0.06] p-3 text-[11px] leading-relaxed",children:[e.jsxs("div",{className:"flex items-center gap-1.5 font-bold text-primary mb-1",children:[e.jsx(T,{className:"h-3 w-3"})," Bei dir konkret"]}),e.jsx("div",{className:"text-muted-foreground space-y-1",children:n})]})}function s({children:n}){return e.jsx("code",{className:"rounded bg-background/40 border border-border/30 px-1.5 py-0.5 font-mono text-[10px] text-foreground",children:n})}function l({href:n,name:r,note:t}){return e.jsxs("li",{className:"leading-relaxed",children:[e.jsxs("a",{href:n,target:"_blank",rel:"noopener",className:"text-primary hover:underline font-semibold inline-flex items-center gap-0.5",children:[r,e.jsx(K,{className:"h-3 w-3 opacity-60"})]}),e.jsxs("span",{className:"text-muted-foreground",children:[" — ",t]})]})}function J(){const[n,r]=M.useState(!1);return e.jsxs("div",{className:"space-y-7",children:[e.jsxs("div",{className:"mc-card p-6 flex items-start gap-4",children:[e.jsx("div",{className:"h-11 w-11 rounded-xl bg-primary/15 flex items-center justify-center shrink-0",children:e.jsx(S,{className:"h-6 w-6 text-primary"})}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("h1",{className:"text-2xl font-space font-bold tracking-tight bg-gradient-to-r from-foreground via-foreground to-primary bg-clip-text text-transparent",children:"Die AI-Bibel"}),e.jsxs("p",{className:"text-sm text-muted-foreground leading-relaxed max-w-2xl",children:["Erst ",e.jsx("span",{className:"font-semibold text-foreground",children:"dein System auf einen Blick"}),", dann das allgemeine Nachschlagewerk für lokale & agentische AI — Konzepte, Tricks, Kniffe und kuratierte Quellen. ",e.jsx("span",{className:"font-semibold text-foreground",children:"Stand Juli 2026."})," ",e.jsx("span",{className:"text-primary font-semibold",children:'„Bei dir konkret"'}),"-Kästen zeigen, was dein Stack daraus macht."]})]})]}),e.jsx("div",{className:"sticky top-0 z-10 -mx-1 px-1",children:e.jsx("div",{className:"rounded-xl border border-border/50 bg-card/70 backdrop-blur-xl p-2 shadow-lg shadow-black/20",children:e.jsxs("div",{className:"flex items-center gap-1.5 flex-wrap",children:[e.jsx(w,{className:"h-3.5 w-3.5 text-primary ml-1 mr-0.5 shrink-0"}),(n?N:N.slice(0,9)).map(t=>e.jsx("button",{onClick:()=>Q(t.id),className:"rounded-lg px-2.5 py-1 text-[11px] font-semibold text-muted-foreground hover:text-primary hover:bg-primary/10 transition-colors cursor-pointer",children:t.label},t.id)),e.jsx("button",{onClick:()=>r(t=>!t),className:"rounded-lg px-2 py-1 text-[11px] font-semibold text-primary hover:bg-primary/10 transition-colors cursor-pointer",children:n?"weniger":"+ mehr"})]})})}),e.jsxs("section",{id:"system",className:"scroll-mt-20 mc-card p-6 space-y-4",children:[e.jsxs("div",{className:"flex items-center gap-2.5 border-b border-border/20 pb-3",children:[e.jsx(A,{className:"h-5 w-5 text-primary"}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-xs font-bold uppercase tracking-wider text-foreground",children:"So funktioniert dein System"}),e.jsx("span",{className:"text-[9px] font-mono text-primary",children:"Landkarte & Kreislauf — das große Bild"})]})]}),e.jsxs("p",{className:"text-xs text-muted-foreground leading-relaxed max-w-3xl",children:["Vier Türen führen zur selben Box: ",e.jsx("strong",{className:"text-foreground",children:"diese Oberfläche"})," zum Steuern und Abnicken, ",e.jsx("strong",{className:"text-foreground",children:"Lucy"})," für Zurufe per Stimme,",e.jsx("strong",{className:"text-foreground",children:" Hermes Desktop"})," für richtige Projekte und",e.jsx("strong",{className:"text-foreground",children:" Telegram"})," für unterwegs. In der Box denken die Modelle, das Gedächtnis lernt automatisch mit — und nachts arbeitet sie allein: Sie träumt, inventarisiert sich selbst, entwickelt Ideen zu fertigen Vorschlägen und legt sie dir als Karten ins Auftragsbuch.",e.jsx("strong",{className:"text-primary",children:" Nichts geht live ohne deinen Klick"})," — und wenn nach einer Annahme etwas rot wird, baut die Box es selbst zurück."]}),e.jsx(U,{})]}),e.jsxs("div",{className:"grid gap-5 md:grid-cols-2",children:[e.jsxs(a,{id:"grundlagen",icon:C,color:"text-cyan-400",title:"1. Wie LLMs ticken",kicker:"Grundlagen",children:[e.jsxs("p",{children:["Ein LLM ist im Kern ein ",e.jsx("strong",{children:"Wahrscheinlichkeits-Rechner für das nächste Token"}),' (Wortteil). Es „weiß" nichts — es setzt fort, was statistisch am plausibelsten ist. Daraus folgt fast alles andere.']}),e.jsxs("ul",{className:"list-disc pl-4 space-y-1",children:[e.jsxs("li",{children:[e.jsx("strong",{children:"Tokens"})," sind die Einheit — ~¾ Wort. Ein- und Ausgabe werden in Tokens gezählt."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Kontextfenster"}),' = wie viele Tokens das Modell gleichzeitig „sehen" kann (Prompt + Antwort). Voll = Anfang fällt raus.']}),e.jsxs("li",{children:[e.jsx("strong",{children:"Parameter"})," = die trainierten Gewichte. Training ist einmalig, ",e.jsx("strong",{children:"Inferenz"})," ist jede Antwort."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Temperatur / Sampling"})," steuert Zufall: niedrig = deterministisch/präzise (Code), hoch = kreativ."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Halluzination"})," ist kein Bug, sondern die Kehrseite des Ratens. Gegenmittel: Grounding via Tools/RAG, Verifikation."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Reasoning-/Thinking-Modelle"}),' „denken" in unsichtbaren Tokens vor der Antwort — besser bei Logik, langsamer/teurer.']})]})]}),e.jsxs(a,{id:"moe",icon:R,color:"text-violet-400",title:"2. MoE & Quantisierung",kicker:"Mehr Modell, weniger Last",children:[e.jsxs("p",{children:[e.jsx("strong",{children:"Mixture of Experts (MoE):"})," Statt für jedes Token das ganze Netz zu aktivieren, wählt ein",e.jsx("em",{children:" Router"})," nur ein paar spezialisierte ",e.jsx("em",{children:"Experts"}),' aus. So läuft ein 100B-Modell mit der aktiven Rechenlast eines viel kleineren (z.B. „122B total / 10B aktiv").']}),e.jsxs("p",{children:[e.jsx("strong",{children:"Quantisierung:"})," Gewichte von FP16 auf weniger Bits eindampfen — kleiner & schneller bei minimalem Qualitätsverlust. Faustregel:"]}),e.jsxs("ul",{className:"list-disc pl-4 space-y-1",children:[e.jsxs("li",{children:[e.jsx(s,{children:"Q8"})," nahezu verlustfrei, größter Footprint"]}),e.jsxs("li",{children:[e.jsx(s,{children:"Q6_K"})," sehr gut, guter Mittelweg"]}),e.jsxs("li",{children:[e.jsx(s,{children:"Q4_K_M"})," der Sweet-Spot für lokal — viel Modell pro GB"]})]}),e.jsxs(m,{children:["VRAM/RAM ist die harte Grenze — ",e.jsx("strong",{children:"darum"})," ist beides hier zentral: MoE lässt 100B+ überhaupt laufen, Quant entscheidet, was reinpasst. Dein Line-up fährt durchweg ",e.jsx(s,{children:"Q4_K_M"}),"/",e.jsx(s,{children:"Q6_K"}),"."]})]}),e.jsxs(a,{id:"lokal",icon:z,color:"text-emerald-400",title:"3. Lokal betreiben: Engines & Backends",kicker:"llama.cpp, vLLM & Co.",wide:!0,children:[e.jsxs("div",{className:"grid md:grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsxs("p",{children:[e.jsx("strong",{children:"Inference-Engines"})," — was die Modelle ausführt:"]}),e.jsxs("ul",{className:"list-disc pl-4 space-y-1",children:[e.jsxs("li",{children:[e.jsx("strong",{children:"llama.cpp / GGUF"})," — der De-facto-Standard für lokal, CPU+GPU, läuft überall."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Ollama / LM Studio"})," — bequeme Wrapper mit One-Click-Downloads (LM Studio mit GUI)."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"vLLM / TGI"})," — Server-Engines für maximalen Durchsatz auf dicken GPUs."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"llama-swap"})," — Proxy, der ",e.jsx("em",{children:"mehrere"})," Modelle hinter ",e.jsx("em",{children:"einem"})," Port hält und je nach Anfrage automatisch ein-/aussattelt."]})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs("p",{children:[e.jsx("strong",{children:"GPU-Backends"})," — wie gerechnet wird:"]}),e.jsx("ul",{className:"list-disc pl-4 space-y-1",children:e.jsxs("li",{children:[e.jsx(s,{children:"CUDA"})," NVIDIA · ",e.jsx(s,{children:"ROCm"})," AMD · ",e.jsx(s,{children:"Vulkan"})," herstellerübergreifend · ",e.jsx(s,{children:"Metal"})," Apple"]})}),e.jsxs("p",{className:"pt-1",children:[e.jsx("strong",{children:"Begriffe, die immer wiederkommen:"})," Kontext (",e.jsx(s,{children:"-c"}),"), Slots/Parallel, KV-Cache, Modell-TTL/Swap, ",e.jsx("strong",{children:"Speculative Decoding"})," (kleines Draft-Modell rät voraus → schneller)."]})]})]}),e.jsxs(m,{children:["Deine Box hat eine AMD-APU (gfx1151). ",e.jsx("strong",{children:"Einschränkung & Trick:"})," dort schlägt ",e.jsx(s,{children:"Vulkan/RADV"})," das offizielle ",e.jsx(s,{children:"ROCm"})," bei Token-Generierung um ~12–22 % — darum läuft die Engine auf Vulkan.",e.jsx(s,{children:"llama-swap"})," hält die Alltags-Hirne dauerwarm; ",e.jsx(s,{children:"coder"})," nutzt Spec-Decoding."]})]}),e.jsxs(a,{id:"modelle",icon:k,color:"text-sky-400",title:"4. Modell-Landschaft",kicker:"Stand Juni 2026",wide:!0,children:[e.jsxs("div",{className:"grid md:grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx("p",{children:e.jsx("strong",{children:"Open-Weight (lokal nutzbar):"})}),e.jsxs("ul",{className:"list-disc pl-4 space-y-1",children:[e.jsxs("li",{children:[e.jsx("strong",{children:"Qwen"})," (Alibaba) — starke Allrounder + Coder + Vision, viele Größen/MoE."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Llama"})," (Meta), ",e.jsx("strong",{children:"Gemma"})," (Google), ",e.jsx("strong",{children:"Phi"})," (Microsoft) — solide Open-Familien."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"DeepSeek"}),", ",e.jsx("strong",{children:"Mistral/Mixtral"})," — kräftige MoE-/Reasoning-Modelle."]})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx("p",{children:e.jsx("strong",{children:"Frontier (Cloud-API):"})}),e.jsx("ul",{className:"list-disc pl-4 space-y-1",children:e.jsxs("li",{children:[e.jsx("strong",{children:"Claude"})," (Anthropic), ",e.jsx("strong",{children:"GPT"})," (OpenAI), ",e.jsx("strong",{children:"Gemini"})," (Google) — die stärksten Allrounder, aber nicht lokal."]})}),e.jsxs("p",{className:"pt-1",children:[e.jsx("strong",{children:"Modellwahl nach Aufgabe:"})," schnelles Alltags-Hirn · großes Logik-Hirn für harte Tasks · dediziertes Code-Modell · multimodal für Bilder · Embedding-Modell fürs Gedächtnis."]})]})]}),e.jsx("p",{className:"text-[11px] italic",children:'Leaderboards (HF, LMArena) sind grobe Orientierung — der einzige Benchmark, der zählt, ist deine eigene Aufgabe. Vorsicht vor „Benchmaxxing".'}),e.jsxs(m,{children:["Dein Line-up via llama-swap (Klartext-Rollen): ",e.jsx(s,{children:"Hirn"})," (Agent, dauerwarm) · ",e.jsx(s,{children:"Groß"})," (schwere Logik) · ",e.jsx(s,{children:"Coder"})," · ",e.jsx(s,{children:"Augen"})," (Bilder) · ",e.jsx(s,{children:"Späher"})," (schnelle Recherche) ·",e.jsx(s,{children:"Kritiker"})," (Fremdblick/Review) · ",e.jsx(s,{children:"Gedächtnis"})," + ",e.jsx(s,{children:"Sortierer"})," (Embedding & Reranking). Verwalten/tauschen im ",e.jsx("strong",{children:"Modelle"}),"-Tab."]})]}),e.jsxs(a,{id:"gateway",icon:A,color:"text-amber-400",title:"5. Der Gateway-Trick",kicker:"OpenAI-kompatibel = überall andocken",children:[e.jsxs("p",{children:["Fast jedes AI-Tool spricht heute das ",e.jsx("strong",{children:"OpenAI-Format"})," (",e.jsx(s,{children:"/v1/chat/completions"}),"). Ein",e.jsx("strong",{children:" Gateway"})," davor gibt dir ",e.jsx("em",{children:"einen"})," Endpunkt für alles: zentrales Key-Management, Logging und transparentes ",e.jsx("strong",{children:"Routing"})," — der Client merkt nicht, welches Modell tatsächlich antwortet."]}),e.jsxs("p",{children:["Die Lane-Idee: du wählst ",e.jsx(s,{children:"chat"})," (Alltag, ",e.jsx(s,{children:"auto"})," geht als Alias weiter) oder"," ",e.jsx(s,{children:"coding"})," (agentisch), das Gateway pickt das passende echte Modell und lädt es bei Bedarf."]}),e.jsxs(m,{children:["Dein Gateway: ",e.jsx(s,{children:"http://192.168.178.151:9001/v1"}),", Model ",e.jsx(s,{children:"chat"})," oder ",e.jsx(s,{children:"coding"}),", API-Key beliebig. Fertige Configs erzeugt dir der ",e.jsx("strong",{children:"Verbinden"}),"-Tab live — eine Wahrheit, kein Abtippen."]})]}),e.jsxs(a,{id:"mcp",icon:y,color:"text-violet-400",title:"6. MCP — Werkzeuge für Agenten",kicker:"USB-C für AI-Tools",children:[e.jsxs("p",{children:["Das ",e.jsx("strong",{children:"Model Context Protocol"})," (offen, von Anthropic initiiert) standardisiert, wie ein AI-Client mit externen Tools & Datenquellen spricht. Ein ",e.jsx("strong",{children:"MCP-Server"})," bringt Fähigkeiten: Dateien, Web-Fetch, Git, Datenbanken, eigene APIs."]}),e.jsx("p",{children:"Statt für jeden Editor eigene Tools zu schreiben, bindet jeder MCP-fähige Agent denselben Server an."}),e.jsxs("div",{className:"flex items-start gap-1.5 rounded-xl border border-amber-500/25 bg-amber-500/[0.06] p-2.5 text-[11px]",children:[e.jsx(B,{className:"h-3.5 w-3.5 text-amber-400 shrink-0 mt-0.5"}),e.jsxs("span",{children:[e.jsx("strong",{children:"Sicherheit:"})," ein MCP-Server hat echten Zugriff (Dateien, Shell). Nur vertrauenswürdige Server laufen lassen, Rechte minimal halten, Quelle prüfen."]})]})]}),e.jsxs(a,{id:"skills",icon:H,color:"text-emerald-400",title:"7. Agent Skills",kicker:"Wiederverwendbare Fähigkeiten",children:[e.jsxs("p",{children:["Ein ",e.jsx("strong",{children:"Skill"})," ist ein Ordner mit einer ",e.jsx(s,{children:"SKILL.md"})," (YAML-Kopf + Anleitung, optional Skripte/Beispiele), den der Agent für eine bestimmte Aufgabe lädt — z.B. TDD, Code-Vereinfachung, API-Design."]}),e.jsx("pre",{className:"p-2.5 bg-background/25 rounded-lg border border-border/30 font-mono text-[9px] text-foreground overflow-x-auto whitespace-pre",children:`--- -name: tdd-pro -description: Treibt Entwicklung mit strikter TDD-Praxis ---- -# Instructions -...`}),e.jsxs("p",{children:["Suchen & installieren über die ",e.jsx("strong",{children:"skills.sh"}),"-Registry: ",e.jsx(s,{children:"npx skills find"})," /",e.jsx(s,{children:"npx skills add owner/repo"}),". Skills liegen projektweit (vom Agent beim Start gelesen) oder global."]})]}),e.jsxs(a,{id:"memory",icon:W,color:"text-indigo-400",title:"8. Gedächtnis & RAG",kicker:"Modelle vergessen — du nicht",wide:!0,children:[e.jsxs("div",{className:"grid md:grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsxs("p",{children:["LLMs sind ",e.jsx("strong",{children:"zustandslos"}),": ohne Hilfe weiß das Modell beim nächsten Turn nichts mehr. Gedächtnis lebt extern."]}),e.jsxs("ul",{className:"list-disc pl-4 space-y-1",children:[e.jsxs("li",{children:[e.jsx("strong",{children:"Embeddings"})," wandeln Text in Vektoren; ein ",e.jsx("strong",{children:"Vektor-Store"})," (Chroma, …) findet semantisch Ähnliches."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"RAG"})," = relevante Fakten vor dem Turn heraussuchen und einblenden statt alles im Prompt zu halten."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Long-Context vs. RAG:"}),' riesige Fenster sind bequem, aber teuer & „lost in the middle" — gezieltes Abrufen skaliert besser.']})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs("p",{children:[e.jsx("strong",{children:"Auto-lernendes Gedächtnis"})," ist die nächste Stufe:"]}),e.jsxs("ul",{className:"list-disc pl-4 space-y-1",children:[e.jsxs("li",{children:["extrahiert Fakten ",e.jsx("em",{children:"selbst"})," aus Gesprächen, statt nur abzuspeichern"]}),e.jsx("li",{children:"dedupliziert semantisch (kein 10× derselbe Fakt)"}),e.jsxs("li",{children:[e.jsx("strong",{children:"Graph-Sicht"})," = Fakten ",e.jsx("em",{children:"plus"})," ihre Beziehungen, nicht nur eine flache Liste"]})]})]})]}),e.jsxs(m,{children:["Dein Gedächtnis führt ",e.jsx("strong",{children:"Hermes"})," selbst — auto-lernend und semantisch. Der Agent lernt im Hintergrund nach jedem Turn, egal ob du per Desktop, Konsole, Telegram oder Lucy mit ihm sprichst.",e.jsx("br",{}),"Deshalb hat das Steuerpult ",e.jsx("strong",{children:"keinen eigenen Gedächtnis-Tab"}),": bis August 2026 lag das Gedächtnis in einem MC2-Sidecar, seit dessen Ablösung ist Hermes die einzige Quelle — angesehen und gepflegt wird es dort, nicht hier. Unter ",e.jsx("strong",{children:"Wissen"})," findest du weiterhin die Graph-Sicht auf Lucys Wissens-Vault.",e.jsx("br",{}),e.jsx("strong",{children:"Gotcha:"})," ein gelöschter Fakt kann wieder auftauchen, solange die Original-Nachricht noch im Verlauf steht (additive Extraktion)."]})]}),e.jsxs(a,{id:"agents",icon:v,color:"text-rose-400",title:"9. Autonome Agenten betreiben",kicker:"LLM in der Schleife",wide:!0,children:[e.jsxs("div",{className:"grid md:grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsxs("p",{children:["Ein ",e.jsx("strong",{children:"Agent"})," ist ein LLM in einer Schleife mit Tools:",e.jsx("em",{children:" denken → Tool aufrufen → Ergebnis beobachten → weiter"}),", bis das Ziel erreicht ist."]}),e.jsxs("ul",{className:"list-disc pl-4 space-y-1",children:[e.jsxs("li",{children:[e.jsx("strong",{children:"Guardrails"})," (Hard-Stop, Tool-Limits) verhindern Endlos-Loops, wenn ein Tool fehlt oder hängt."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Kontext-Hygiene"})," ist die wichtigste Disziplin: frische Sessions starten — vollgemüllte Historien werden langsam, driften und halluzinieren."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Kanäle:"})," CLI/Terminal, Chat-UI, Messaging (z.B. Telegram), reine API."]})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs("p",{children:[e.jsx("strong",{children:"Least Privilege:"})," gib einem Agenten nur die Tools, die er wirklich braucht. Kritische Aktionen (Shell auf dem Host, Löschen, Geld/Deploys) hinter menschliche Freigabe."]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Was sich vollautomatisch lohnt:"})," Modell-Routing, Hintergrund-Gedächtnis, Recherche. ",e.jsx("strong",{children:"Was Freigabe braucht:"})," Systembefehle, Updates/Reboots, permanentes Löschen."]})]})]}),e.jsxs(m,{children:[e.jsx("strong",{children:"Hermes"})," ist dein Box-Agent mit eigenem Agent-Hirn (Rolle ",e.jsx(s,{children:"Hirn"}),", dauerwarm). Reden tust du mit ihm über ",e.jsx("strong",{children:"Hermes Desktop"})," (am PC, remote via ",e.jsx(s,{children:"/hermes-ui"}),"), die ",e.jsx("strong",{children:"Konsole"})," (Box-Shell im Browser), ",e.jsx("strong",{children:"Telegram"})," — oder per Stimme über",e.jsx("strong",{children:" Lucy"}),". Er hat MCP-Server für Gedächtnis, Stack-Steuerung, Web-Fetch und",e.jsx("strong",{children:" PC-Steuerung"})," (Executor auf deinem Windows-PC). Nachts betreibt er Werkstatt & Radar-Crons — alles Gebaute landet als Karte im ",e.jsx("strong",{children:"Auftragsbuch"}),". Status & Verdrahtung im ",e.jsx("strong",{children:"Hermes"}),"-Tab."]})]}),e.jsxs(a,{id:"ide",icon:P,color:"text-cyan-400",title:"10. IDE / Editor anbinden",kicker:"Vibe-Coding lokal",children:[e.jsxs("p",{children:["Jede ",e.jsx("strong",{children:"OpenAI-kompatible"})," IDE oder Extension lässt sich auf einen lokalen Server umbiegen — Base-URL + Model eintragen, fertig:"]}),e.jsxs("ul",{className:"list-disc pl-4 space-y-1",children:[e.jsxs("li",{children:[e.jsx("strong",{children:"Cline"})," & ",e.jsx("strong",{children:"Roo Code"})," (VS-Code-Extensions, voller Agent + MCP)"]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Cursor"})," (VS-Code-Fork mit Top-Autocomplete)"]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Continue"}),", ",e.jsx("strong",{children:"aider"})," (CLI), ",e.jsx("strong",{children:"OpenCode"})," (Desktop)"]})]}),e.jsxs(m,{children:["Deine Haupt-IDE ist inzwischen ",e.jsx("strong",{children:"Hermes Desktop"})," — sie ist ab Werk mit Box, Gedächtnis und Skills verdrahtet, da ist nichts zu konfigurieren. Für alles andere gilt: Tipp den Kram nicht ab — der",e.jsx("strong",{children:" Verbinden"}),"-Tab generiert die fertige Config (inkl. MCP-Gedächtnis) pro Tool zum Kopieren. Essenz: Base ",e.jsx(s,{children:"…:9001/v1"}),", Model ",e.jsx(s,{children:"coder"})," (bauen) / ",e.jsx(s,{children:"heavy"})," (denken) /"," ",e.jsx(s,{children:"vision"})," (Bilder); für simple Chat-Tools tut es die Lane ",e.jsx(s,{children:"chat"}),". Key beliebig."]})]}),e.jsx(a,{id:"tricks",icon:L,color:"text-amber-400",title:"11. Tricks & Kniffe",kicker:"Was im Alltag wirklich spart",wide:!0,children:e.jsx("div",{className:"grid md:grid-cols-3 gap-3",children:[["Kontext sauber halten","Neue Session statt Mega-Historie. Drift, Tempo und Halluzination hängen direkt am Kontext-Müll."],["Plan-then-Act","Erst Plan/Vorgehen bestätigen lassen, dann ausführen. Spart teure Holzwege."],["Gezielte Edits","Nie ganze Dateien überschreiben für eine Zeile — Such-/Ersetz-Tools nutzen. Weniger Tokens, weniger Fehler."],["Non-interaktive Befehle","Keine interaktiven Prompts im Agent-Terminal; lange Tasks als Background-Job. Sonst hängt der Loop."],["DevTools koppeln","Browser-/Konsolen-Zugriff geben — der Agent liest echte Fehler statt blind zu raten."],["Richtige Modellwahl","Schnelles Hirn für Alltag, großes für harte Logik, Coder fürs Coden. Nicht alles mit der Kanone."],["Akzeptanzkriterien","Sag konkret, woran „fertig“ erkennbar ist. Vage Prompts → vage Ergebnisse."],["Verifizieren statt vertrauen","Tests/Live-Check fordern. „Sollte funktionieren“ ist kein Beweis."],["Regeln ins Gedächtnis","Wiederkehrende Vorlieben/Konventionen einmal ablegen — der Agent zieht sie selbst."]].map(([t,c])=>e.jsxs("div",{className:"space-y-1 p-3 bg-background/10 rounded-xl border border-border/30",children:[e.jsxs("div",{className:"flex items-center gap-1.5 font-bold text-foreground text-[11px]",children:[e.jsx(E,{className:"h-3 w-3 text-amber-400"})," ",t]}),e.jsx("p",{className:"text-[11px]",children:c})]},t))})}),e.jsx(a,{id:"wartung",icon:I,color:"text-emerald-400",title:"12. Sicherheit & Wartung",kicker:"Damit's auch morgen noch läuft",wide:!0,children:e.jsxs("div",{className:"grid md:grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsxs("p",{className:"flex items-center gap-1.5 font-bold text-foreground",children:[e.jsx(G,{className:"h-3.5 w-3.5 text-emerald-400"})," Goldene Regeln"]}),e.jsxs("ul",{className:"list-disc pl-4 space-y-1",children:[e.jsxs("li",{children:[e.jsx("strong",{children:"Ein ungetesteter Restore ist kein Backup."})," Wiederherstellung mindestens einmal echt durchspielen."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Updates können Dinge still zerschießen"})," — gerade bei AI-Stacks (Embeddings, Provider-Interna). Versionen pinnen, Smoke-Test, Post-Check."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Least Privilege"})," für Agenten, MCP-Server und PC-Zugriff. Kritisches hinter Freigabe."]})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs("p",{className:"flex items-center gap-1.5 font-bold text-foreground",children:[e.jsx(D,{className:"h-3.5 w-3.5 text-emerald-400"})," Bei dir im SystemDrawer"]}),e.jsxs("ul",{className:"list-disc pl-4 space-y-1",children:[e.jsxs("li",{children:[e.jsx("strong",{children:"Backup:"})," PBS-Backup-Zentrum (Sicherung auf den Proxmox-Server) + tägliche Tarball-Sicherung; Restore echt durchgespielt (",e.jsx(s,{children:"restore.sh"}),", Doku in ",e.jsx(s,{children:"docs/BACKUP.md"}),")."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Updates:"})," git-basierter Update-Check; ",e.jsx("strong",{children:"Update-Buttons"})," mit anschließendem ",e.jsx("strong",{children:"Gehirn-Check"})," (rot, falls ein Update das Gedächtnis zerschießt)."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Annahme-Sicherheit:"})," jede Auftragsbuch-Annahme läuft mit Health-Check — wird's rot, baut die Box automatisch zurück (Auto-Revert)."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Dienste & Gefahrenzone:"})," Restart/Logs pro Dienst, kritische Eingriffe getrennt."]})]}),e.jsx("p",{className:"text-[10px] italic",children:'Erreichbar über das System-Icon → Tab „Wartung".'})]})]})}),e.jsxs("section",{id:"ressourcen",className:"scroll-mt-20 md:col-span-2 mc-card p-6 space-y-4",children:[e.jsxs("div",{className:"flex items-center gap-2.5 border-b border-border/20 pb-3",children:[e.jsx(w,{className:"h-5 w-5 text-primary"}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-xs font-bold uppercase tracking-wider text-foreground",children:"13. Kuratierte Ressourcen & Links"}),e.jsx("span",{className:"text-[9px] font-mono text-primary",children:"Sauber geordnet — die guten Quellen"})]})]}),e.jsxs("div",{className:"grid md:grid-cols-2 gap-5 text-xs",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"font-bold text-foreground flex items-center gap-1.5",children:[e.jsx(k,{className:"h-3.5 w-3.5 text-sky-400"})," Modelle & Engines"]}),e.jsxs("ul",{className:"list-disc pl-4 space-y-1.5",children:[e.jsx(l,{href:"https://huggingface.co/models",name:"Hugging Face",note:"das Repository für offene Modelle (GGUF, Embeddings, Datasets)."}),e.jsx(l,{href:"https://github.com/ggml-org/llama.cpp",name:"llama.cpp",note:"die Referenz-Engine für lokale Inferenz."}),e.jsx(l,{href:"https://github.com/mostlygeek/llama-swap",name:"llama-swap",note:"mehrere Modelle hinter einem Port, Auto-Swap."}),e.jsx(l,{href:"https://ollama.com",name:"Ollama",note:"einfachster Einstieg, One-Command-Modelle."}),e.jsx(l,{href:"https://lmstudio.ai",name:"LM Studio",note:"lokale GUI zum Stöbern, Laden & Chatten."}),e.jsx(l,{href:"https://github.com/vllm-project/vllm",name:"vLLM",note:"Hochdurchsatz-Serving auf dicken GPUs."})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"font-bold text-foreground flex items-center gap-1.5",children:[e.jsx(y,{className:"h-3.5 w-3.5 text-violet-400"})," MCP & Skills"]}),e.jsxs("ul",{className:"list-disc pl-4 space-y-1.5",children:[e.jsx(l,{href:"https://modelcontextprotocol.io",name:"MCP — offizielle Doku",note:"Spezifikation & Einstieg."}),e.jsx(l,{href:"https://github.com/modelcontextprotocol/servers",name:"Offizielle MCP-Server",note:"filesystem, git, postgres, fetch & mehr."}),e.jsx(l,{href:"https://smithery.ai",name:"Smithery",note:"Registry zum Suchen & Auto-Installieren von MCP-Servern."}),e.jsx(l,{href:"https://glama.ai/mcp/servers",name:"Glama MCP Registry",note:"kuratierte Community-Datenbank."}),e.jsx(l,{href:"https://skills.sh",name:"skills.sh",note:"Registry & CLI für Agent-Skills."})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"font-bold text-foreground flex items-center gap-1.5",children:[e.jsx(v,{className:"h-3.5 w-3.5 text-rose-400"})," Agenten & Frameworks"]}),e.jsxs("ul",{className:"list-disc pl-4 space-y-1.5",children:[e.jsx(l,{href:"https://github.com/NousResearch/hermes-agent",name:"Hermes Agent (Nous)",note:"der Agent, der auf deiner Box läuft."}),e.jsx(l,{href:"https://docs.claude.com",name:"Anthropic / Claude Docs",note:"API, Tool-Use, Agent SDK, MCP."}),e.jsx(l,{href:"https://github.com/cline/cline",name:"Cline",note:"autonomer Coding-Agent für VS Code."}),e.jsx(l,{href:"https://aider.chat",name:"aider",note:"AI-Pair-Programming im Terminal, git-nativ."}),e.jsx(l,{href:"https://continue.dev",name:"Continue",note:"Open-Source-Autopilot für IDEs."})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"font-bold text-foreground flex items-center gap-1.5",children:[e.jsx(S,{className:"h-3.5 w-3.5 text-amber-400"})," Lernen & Community"]}),e.jsxs("ul",{className:"list-disc pl-4 space-y-1.5",children:[e.jsx(l,{href:"https://docs.anthropic.com/en/docs/build-with-claude/prompt-engineering/overview",name:"Prompt-Engineering (Anthropic)",note:"die beste praktische Anleitung."}),e.jsx(l,{href:"https://github.com/anthropics/anthropic-cookbook",name:"Anthropic Cookbook",note:"lauffähige Rezepte für Tools, RAG, Agenten."}),e.jsx(l,{href:"https://www.promptingguide.ai",name:"Prompt Engineering Guide",note:"herstellerneutrales Nachschlagewerk."}),e.jsx(l,{href:"https://hermes-agent.nousresearch.com",name:"Hermes Agent",note:"die autonome Open-Source Agenten-Plattform unserer Box."}),e.jsx(l,{href:"https://www.reddit.com/r/LocalLLaMA/",name:"r/LocalLLaMA",note:"der Puls der lokalen-LLM-Szene."})]})]})]})]}),e.jsx(a,{id:"troubleshooting",icon:V,color:"text-rose-400",title:"14. Troubleshooting",kicker:"Wenn's hakt",wide:!0,children:e.jsxs("ul",{className:"space-y-2 list-disc pl-4",children:[e.jsxs("li",{children:[e.jsx("strong",{children:"Keine Verbindung?"})," Selbes LAN wie die Box? IP/Port stimmen (",e.jsx(s,{children:":9001"}),")? Backend-Status im ",e.jsx("strong",{children:"Cockpit"})," prüfen."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Modell antwortet nicht / langsam?"})," Im ",e.jsx("strong",{children:"Cockpit → Dienste"})," schauen, ob ",e.jsx(s,{children:"llama-swap"})," grün ist; sonst Restart. Erstes Token nach Swap dauert (Modell lädt)."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Agent dreht durch / halluziniert?"})," Frische Session starten (Hermes Desktop oder ",e.jsx("strong",{children:"Konsole"}),") — meist ist es vollgemüllter Kontext."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Gedächtnis findet nichts?"})," Embedding-Dienst online? Semantisch suchen (Sinn statt exaktem Wort)."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Angenommene Karte hat etwas zerschossen?"})," Meist fängt es der Auto-Revert; sonst ",e.jsx("strong",{children:"Chronik → Zeitmaschine"})," (Stand von gestern) oder Backup & ",e.jsx(s,{children:"restore.sh"}),"."]})]})})]}),e.jsx("p",{className:"text-center text-[10px] text-muted-foreground/50 pt-2",children:"Mission Control 2 · AI-Bibel · Stand Juli 2026 — lebendes Dokument, wächst mit dem Stack."})]})}export{J as GuideView}; diff --git a/frontend/dist/assets/IdeenAnsicht-DewuOeHX.js b/frontend/dist/assets/IdeenAnsicht-Cy8yw2ZX.js similarity index 72% rename from frontend/dist/assets/IdeenAnsicht-DewuOeHX.js rename to frontend/dist/assets/IdeenAnsicht-Cy8yw2ZX.js index a21a134..a5330e8 100644 --- a/frontend/dist/assets/IdeenAnsicht-DewuOeHX.js +++ b/frontend/dist/assets/IdeenAnsicht-Cy8yw2ZX.js @@ -1,35 +1,40 @@ -import{c as R,$ as O,r as u,n as z,j as e,b as S,L as D,G as T,X as Q,a3 as Se,u as De,k as Ce,z as Ke,A as ze,a6 as Ee,a7 as xe,C as Ae,T as Le,a4 as Pe,R as We,q as $e}from"./index-l6kyKCL9.js";import{S as Re}from"./SectionLabel-zEOM9wM3.js";import{C as ee}from"./code-xml-QQtsFWSM.js";import{H as X}from"./hammer-Cl-GywsD.js";import{R as ge}from"./refresh-cw-BV1qZMSR.js";import{F as fe}from"./file-text-nO0jfgun.js";import{L as Be}from"./layers-BFKjGswj.js";import{C as U}from"./chevron-down-C5keVSfm.js";import{C as he}from"./clock-QfyF1ur_.js";/** +import{c as L,$ as O,r as u,n as z,j as e,b as S,L as D,G as T,X as Q,a2 as Se,u as De,k as Ce,z as Ke,A as ze,a3 as Ee,a4 as xe,C as Ae,T as Le,a5 as Pe,R as We,q as $e}from"./index-DMY9lUCb.js";import{S as Re}from"./SectionLabel-B7ySrBs7.js";import{C as ee}from"./code-xml-Bf-y5tB9.js";import{R as ge}from"./refresh-cw-hAcZthO8.js";import{F as fe}from"./file-text-BSQuFPZM.js";import{L as Be}from"./layers-CcL78b5Q.js";import{C as X}from"./chevron-down-1Vx9W9jM.js";import{C as he}from"./clock-Bth-s5Y3.js";/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Ie=R("ArrowDown",[["path",{d:"M12 5v14",key:"s699le"}],["path",{d:"m19 12-7 7-7-7",key:"1idqje"}]]);/** + */const Ie=L("ArrowDown",[["path",{d:"M12 5v14",key:"s699le"}],["path",{d:"m19 12-7 7-7-7",key:"1idqje"}]]);/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Oe=R("ArrowUp",[["path",{d:"m5 12 7-7 7 7",key:"hav0vg"}],["path",{d:"M12 19V5",key:"x0mq9r"}]]);/** + */const Oe=L("ArrowUp",[["path",{d:"m5 12 7-7 7 7",key:"hav0vg"}],["path",{d:"M12 19V5",key:"x0mq9r"}]]);/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Te=R("ClipboardCheck",[["rect",{width:"8",height:"4",x:"8",y:"2",rx:"1",ry:"1",key:"tgr4d6"}],["path",{d:"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2",key:"116196"}],["path",{d:"m9 14 2 2 4-4",key:"df797q"}]]);/** + */const Te=L("ClipboardCheck",[["rect",{width:"8",height:"4",x:"8",y:"2",rx:"1",ry:"1",key:"tgr4d6"}],["path",{d:"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2",key:"116196"}],["path",{d:"m9 14 2 2 4-4",key:"df797q"}]]);/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Y=R("GitFork",[["circle",{cx:"12",cy:"18",r:"3",key:"1mpf1b"}],["circle",{cx:"6",cy:"6",r:"3",key:"1lh9wr"}],["circle",{cx:"18",cy:"6",r:"3",key:"1h7g24"}],["path",{d:"M18 9v2c0 .6-.4 1-1 1H7c-.6 0-1-.4-1-1V9",key:"1uq4wg"}],["path",{d:"M12 12v3",key:"158kv8"}]]);/** + */const U=L("GitFork",[["circle",{cx:"12",cy:"18",r:"3",key:"1mpf1b"}],["circle",{cx:"6",cy:"6",r:"3",key:"1lh9wr"}],["circle",{cx:"18",cy:"6",r:"3",key:"1h7g24"}],["path",{d:"M18 9v2c0 .6-.4 1-1 1H7c-.6 0-1-.4-1-1V9",key:"1uq4wg"}],["path",{d:"M12 12v3",key:"158kv8"}]]);/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const me=R("Send",[["path",{d:"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z",key:"1ffxy3"}],["path",{d:"m21.854 2.147-10.94 10.939",key:"12cjpa"}]]);/** + */const Y=L("Hammer",[["path",{d:"m15 12-8.373 8.373a1 1 0 1 1-3-3L12 9",key:"eefl8a"}],["path",{d:"m18 15 4-4",key:"16gjal"}],["path",{d:"m21.5 11.5-1.914-1.914A2 2 0 0 1 19 8.172V7l-2.26-2.26a6 6 0 0 0-4.202-1.756L9 2.96l.92.82A6.18 6.18 0 0 1 12 8.4V10l2 2h1.172a2 2 0 0 1 1.414.586L18.5 14.5",key:"b7pghm"}]]);/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Ve=R("Square",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}]]),qe={triage:{label:"wird ausgearbeitet …",cls:"text-violet-300 border-violet-500/40 bg-violet-500/10",spin:!0},todo:{label:"wartet",cls:"text-muted-foreground border-border/60 bg-background/30"},scheduled:{label:"geplant",cls:"text-muted-foreground border-border/60 bg-background/30"},ready:{label:"gleich dran",cls:"text-sky-300/80 border-sky-500/30 bg-sky-500/5"},running:{label:"in Arbeit …",cls:"text-sky-300 border-sky-500/40 bg-sky-500/10",spin:!0},review:{label:"im Review",cls:"text-amber-300 border-amber-500/40 bg-amber-500/10"},blocked:{label:"hängt — braucht dich",cls:"text-red-300 border-red-500/40 bg-red-500/10"},done:{label:"fertig ✓",cls:"text-emerald-300 border-emerald-500/40 bg-emerald-500/10"}},_e={box:{label:"BOX",icon:X,cls:"border-border/60 bg-background/40 text-muted-foreground",title:"Box-Welt: die Werkstatt baut das selbst. Das Ergebnis kommt als Patch-Vorschlag zurück — nichts geht ohne deinen Klick live."},idee:{label:"IDEE",icon:O,cls:"border-sky-500/40 bg-sky-500/10 text-sky-300",title:"Nur durchdacht: die Box hat die Produkt-Idee mit voller Denk-Kaskade zu einem Konzept ausgearbeitet. Kein Gerüst, kein Bau — du liest es und entscheidest, ob ein Projekt draus wird."},projekt:{label:"IDE",icon:ee,cls:"border-violet-500/40 bg-violet-500/10 text-violet-300",title:"IDE-Welt: die Box bereitet nur vor (Konzept + Repo + Doku, kein Code). Gebaut wird von dir in der Agentic IDE."}},Fe={needs_input:"Die Box hat eine Frage:",capability:"Die Box kam hier nicht weiter:",transient:"Die Aufgabe hakt:"},$={blocked:0,running:1,review:2,ready:3,triage:4},be="mc_ideen_quote";function ke(){try{const r=JSON.parse(localStorage.getItem(be)||"{}");return{gesendet:Number(r.gesendet)||0,geaendert:Number(r.geaendert)||0}}catch{return{gesendet:0,geaendert:0}}}function pe(r){try{const d=ke();d[r]+=1,localStorage.setItem(be,JSON.stringify(d))}catch{}}function Ge({id:r}){const[d,k]=u.useState(null),[n,m]=u.useState(!1),[p,h]=u.useState(0);u.useEffect(()=>{let o=!1;return m(!1),k(null),z(`/api/ideen/${r}/ergebnis`).then(i=>{o||k(i)}).catch(()=>{o||m(!0)}),()=>{o=!0}},[r,p]);const g=d?d.summary||d.result:"";return e.jsx("div",{className:"ml-2 -mt-1",children:e.jsxs("div",{className:"rounded-lg border border-emerald-500/25 bg-emerald-500/5 p-2.5",children:[e.jsxs("p",{className:"mb-1 flex items-center gap-1.5 text-[10px] font-bold uppercase tracking-wide text-emerald-300",children:[e.jsx(Te,{className:"h-3 w-3"})," Ergebnis des Workers"]}),n?e.jsx("button",{type:"button",onClick:()=>h(o=>o+1),className:"text-[10px] text-red-400 underline decoration-dotted underline-offset-2 hover:text-red-300",children:"Ergebnis nicht ladbar — nochmal versuchen"}):d===null?e.jsx("p",{className:"text-[10px] text-muted-foreground animate-pulse",children:"Wird geladen …"}):g?e.jsx("p",{className:"max-h-64 overflow-y-auto whitespace-pre-wrap text-xs leading-relaxed text-foreground/85",children:g}):e.jsx("p",{className:"text-[10px] text-muted-foreground italic",children:"Der Worker hat keine Abschluss-Zusammenfassung hinterlassen (ältere Karte oder Protokollverstoß)."})]})})}function Ze({text:r,className:d}){const k=(r||"").split(` + */const me=L("Send",[["path",{d:"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z",key:"1ffxy3"}],["path",{d:"m21.854 2.147-10.94 10.939",key:"12cjpa"}]]);/** + * @license lucide-react v0.460.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ve=L("Square",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}]]),qe={triage:{label:"wird ausgearbeitet …",cls:"text-violet-300 border-violet-500/40 bg-violet-500/10",spin:!0},todo:{label:"wartet",cls:"text-muted-foreground border-border/60 bg-background/30"},scheduled:{label:"geplant",cls:"text-muted-foreground border-border/60 bg-background/30"},ready:{label:"gleich dran",cls:"text-sky-300/80 border-sky-500/30 bg-sky-500/5"},running:{label:"in Arbeit …",cls:"text-sky-300 border-sky-500/40 bg-sky-500/10",spin:!0},review:{label:"im Review",cls:"text-amber-300 border-amber-500/40 bg-amber-500/10"},blocked:{label:"hängt — braucht dich",cls:"text-red-300 border-red-500/40 bg-red-500/10"},done:{label:"fertig ✓",cls:"text-emerald-300 border-emerald-500/40 bg-emerald-500/10"}},_e={box:{label:"BOX",icon:Y,cls:"border-border/60 bg-background/40 text-muted-foreground",title:"Box-Welt: die Werkstatt baut das selbst. Das Ergebnis kommt als Patch-Vorschlag zurück — nichts geht ohne deinen Klick live."},idee:{label:"IDEE",icon:O,cls:"border-sky-500/40 bg-sky-500/10 text-sky-300",title:"Nur durchdacht: die Box hat die Produkt-Idee mit voller Denk-Kaskade zu einem Konzept ausgearbeitet. Kein Gerüst, kein Bau — du liest es und entscheidest, ob ein Projekt draus wird."},projekt:{label:"IDE",icon:ee,cls:"border-violet-500/40 bg-violet-500/10 text-violet-300",title:"IDE-Welt: die Box bereitet nur vor (Konzept + Repo + Doku, kein Code). Gebaut wird von dir in der Agentic IDE."}},Ge={needs_input:"Die Box hat eine Frage:",capability:"Die Box kam hier nicht weiter:",transient:"Die Aufgabe hakt:"},R={blocked:0,running:1,review:2,ready:3,triage:4},be="mc_ideen_quote";function ke(){try{const r=JSON.parse(localStorage.getItem(be)||"{}");return{gesendet:Number(r.gesendet)||0,geaendert:Number(r.geaendert)||0}}catch{return{gesendet:0,geaendert:0}}}function pe(r){try{const d=ke();d[r]+=1,localStorage.setItem(be,JSON.stringify(d))}catch{}}function Fe({id:r}){const[d,k]=u.useState(null),[n,m]=u.useState(!1),[p,h]=u.useState(0);u.useEffect(()=>{let o=!1;return m(!1),k(null),z(`/api/ideen/${r}/ergebnis`).then(i=>{o||k(i)}).catch(()=>{o||m(!0)}),()=>{o=!0}},[r,p]);const g=d?d.summary||d.result:"";return e.jsx("div",{className:"ml-2 -mt-1",children:e.jsxs("div",{className:"rounded-lg border border-emerald-500/25 bg-emerald-500/5 p-2.5",children:[e.jsxs("p",{className:"mb-1 flex items-center gap-1.5 text-[10px] font-bold uppercase tracking-wide text-emerald-300",children:[e.jsx(Te,{className:"h-3 w-3"})," Ergebnis des Workers"]}),n?e.jsx("button",{type:"button",onClick:()=>h(o=>o+1),className:"text-[10px] text-red-400 underline decoration-dotted underline-offset-2 hover:text-red-300",children:"Ergebnis nicht ladbar — nochmal versuchen"}):d===null?e.jsx("p",{className:"text-[10px] text-muted-foreground animate-pulse",children:"Wird geladen …"}):g?e.jsx("p",{className:"max-h-64 overflow-y-auto whitespace-pre-wrap text-xs leading-relaxed text-foreground/85",children:g}):e.jsx("p",{className:"text-[10px] text-muted-foreground italic",children:"Der Worker hat keine Abschluss-Zusammenfassung hinterlassen (ältere Karte oder Protokollverstoß)."})]})})}function Ze({text:r,className:d}){const k=(r||"").split(` `),n=[];let m=[],p=null;const h=g=>{m.length&&(n.push(e.jsx("ul",{className:"mb-3 ml-4 list-disc space-y-1",children:m},g)),m=[])};return k.forEach((g,o)=>{const i=`l${o}`;if(p!==null){g.trimEnd()==="```"?(n.push(e.jsx("pre",{className:"mb-3 overflow-x-auto rounded-xl border border-border/50 bg-background/50 p-3 font-mono text-[11px] leading-relaxed text-foreground/85",children:p.join(` -`)},i)),p=null):p.push(g);return}if(g.trimStart().startsWith("```")){h(i),p=[];return}const j=g.trimEnd();if(!j.trim()){h(i);return}const w=j.match(/^(#{1,4})\s+(.*)$/);if(w){h(i);const N=w[1].length,c=N===1?"text-base font-bold mt-1 mb-2":N===2?"text-sm font-bold mt-4 mb-1.5":"text-xs font-bold mt-3 mb-1 uppercase tracking-wide text-muted-foreground";n.push(e.jsx("p",{className:S(c,"font-space text-foreground"),children:F(w[2],i)},i));return}const y=j.match(/^\s*[-*•]\s+(.*)$/);if(y){m.push(e.jsx("li",{className:"text-xs leading-relaxed text-foreground/85",children:F(y[1],i)},i));return}const l=j.match(/^\s*\d+\.\s+(.*)$/);if(l){m.push(e.jsx("li",{className:"text-xs leading-relaxed text-foreground/85",children:F(l[1],i)},i));return}h(i),n.push(e.jsx("p",{className:"mb-2 text-xs leading-relaxed text-foreground/85",children:F(j,i)},i))}),h("end"),p!==null&&n.push(e.jsx("pre",{className:"mb-3 overflow-x-auto rounded-xl border border-border/50 bg-background/50 p-3 font-mono text-[11px]",children:p.join(` -`)},"code-end")),e.jsx("div",{className:S("max-w-3xl",d),children:n})}function F(r,d){return r.split(/(\*\*[^*]+\*\*|\*[^*]+\*|`[^`]+`)/g).map((n,m)=>{const p=`${d}-${m}`;return/^\*\*[^*]+\*\*$/.test(n)?e.jsx("b",{className:"font-semibold text-foreground",children:n.slice(2,-2)},p):/^\*[^*]+\*$/.test(n)?e.jsx("i",{children:n.slice(1,-1)},p):/^`[^`]+`$/.test(n)?e.jsx("code",{className:"rounded bg-background/50 px-1 font-mono text-[11px] text-foreground/90",children:n.slice(1,-1)},p):e.jsx("span",{children:n},p)})}function He({id:r,onFertig:d}){const[k,n]=u.useState("lxc"),[m,p]=u.useState("simpel"),[h,g]=u.useState(!1),[o,i]=u.useState(null),[j,w]=u.useState(""),[y,l]=u.useState(""),N=async(c,L,V)=>{g(!0),w("");try{const C=await z(c,{method:"POST",body:JSON.stringify(L)});i({id:C.id,art:V}),d==null||d()}catch(C){w(String((C==null?void 0:C.message)||C))}finally{g(!1)}};return o?e.jsx("p",{className:"mt-3 border-t border-violet-500/20 pt-2 text-[11px] text-emerald-300",children:o.art==="projekt"?e.jsxs(e.Fragment,{children:["Projekt-Karte ",e.jsx("span",{className:"font-mono",children:o.id})," ist angelegt — die Box bereitet das Repo vor (Konzept übernimmt sie, sie denkt es nicht neu). Danach öffnest du es in der Agentic IDE."]}):e.jsxs(e.Fragment,{children:["Überarbeitung ",e.jsx("span",{className:"font-mono",children:o.id}),' läuft — die Box arbeitet deine Rückmeldung ein und schreibt die neue Fassung an dieselbe Stelle. Danach hier wieder „Konzept" öffnen.']})}):e.jsxs("div",{className:"mt-3 space-y-3 border-t border-violet-500/20 pt-2.5",children:[e.jsxs("div",{className:"space-y-1.5",children:[e.jsxs("p",{className:"text-[11px] text-muted-foreground",children:[e.jsx("b",{className:"text-sky-300/90",children:"Passt etwas nicht?"})," Schreib hin, was anders werden soll — die Box arbeitet es ein und lässt den Rest stehen. Beliebig oft wiederholbar."]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx("input",{value:y,onChange:c=>l(c.target.value),onKeyDown:c=>{c.key==="Enter"&&y.trim().length>=3&&!h&&N("/api/ideen/nachschaerfen",{id:r,hinweis:y},"runde")},placeholder:"z. B. „Punkt 3: kein WebSocket, das ist mir zu fragil — nimm Polling“",maxLength:2e3,className:"h-8 min-w-0 flex-1 rounded-lg border border-border/60 bg-background/60 px-2.5 text-xs text-foreground placeholder:text-muted-foreground/50 focus:border-sky-400/50 focus:outline-none"}),e.jsxs("button",{onClick:()=>N("/api/ideen/nachschaerfen",{id:r,hinweis:y},"runde"),disabled:h||y.trim().length<3,className:"flex h-8 shrink-0 items-center gap-1.5 rounded-lg border border-sky-500/40 bg-sky-500/10 px-3 text-[10px] font-bold uppercase tracking-wide text-sky-300 transition-all hover:bg-sky-500/20 cursor-pointer disabled:opacity-50",children:[h?e.jsx(D,{className:"h-3.5 w-3.5 animate-spin"}):e.jsx(ge,{className:"h-3.5 w-3.5"}),"Nachschärfen"]})]})]}),e.jsxs("p",{className:"text-[11px] text-muted-foreground",children:[e.jsx("b",{className:"text-violet-300/90",children:"Passt es so?"})," Dann macht die Box daraus ein startklares Repo — Konzept wird übernommen (nicht neu gedacht), dazu Roadmap, AGENTS.md & Co. Gebaut wird danach von dir in der Agentic IDE."]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-x-3 gap-y-2",children:[e.jsx("span",{className:"text-[11px] text-muted-foreground/70",children:"Ziel"}),e.jsx("div",{className:"flex rounded-lg border border-border/40 p-0.5",children:["lxc","docker"].map(c=>e.jsx("button",{onClick:()=>n(c),title:c==="lxc"?"Dienst in einem eigenen Proxmox-LXC (systemd, kein Docker) — wird automatisch mitgesichert.":"Natives Docker: Dockerfile + compose, portabel und pipeline-tauglich.",className:S("rounded px-2 py-0.5 text-[10px] font-semibold transition-all cursor-pointer",k===c?"bg-foreground/10 text-foreground":"text-muted-foreground/50 hover:text-foreground/80"),children:c==="lxc"?"LXC":"Docker"},c))}),e.jsx("span",{className:"text-[11px] text-muted-foreground/70",children:"Aufwand"}),e.jsx("div",{className:"flex rounded-lg border border-border/40 p-0.5",children:["simpel","gruendlich"].map(c=>e.jsx("button",{onClick:()=>p(c),title:c==="simpel"?"Konzept ist schon gehärtet — nur kurz auf die Bau-Sicht nachschärfen (empfohlen).":"Nochmal volle Kaskade über die Bau-Sicht: mehrere Rollen, Härtetests. Dauert entsprechend.",className:S("rounded px-2 py-0.5 text-[10px] font-semibold transition-all cursor-pointer",m===c?"bg-foreground/10 text-foreground":"text-muted-foreground/50 hover:text-foreground/80"),children:c==="simpel"?"schlank":"gründlich"},c))}),e.jsxs("button",{onClick:()=>N("/api/ideen/weiterfuehren",{id:r,ziel:k,tiefe:m},"projekt"),disabled:h,className:"ml-auto flex h-8 shrink-0 items-center gap-1.5 rounded-lg border border-violet-500/40 bg-violet-500/10 px-3 text-[10px] font-bold uppercase tracking-wide text-violet-300 transition-all hover:bg-violet-500/20 cursor-pointer disabled:opacity-50",children:[h?e.jsx(D,{className:"h-3.5 w-3.5 animate-spin"}):e.jsx(ee,{className:"h-3.5 w-3.5"}),"Gefällt mir — Projekt daraus machen"]})]}),j&&e.jsx("p",{className:"text-[11px] text-red-400",children:j})]})}function Je({id:r,istIdee:d,onWeiter:k}){const[n,m]=u.useState(null),[p,h]=u.useState(!1),[g,o]=u.useState(0);return u.useEffect(()=>{let i=!1;return m(null),h(!1),z(`/api/ideen/${r}/konzept`).then(j=>{i||m(j)}).catch(()=>{i||h(!0)}),()=>{i=!0}},[r,g]),e.jsx("div",{className:"ml-2 -mt-1",children:e.jsxs("div",{className:"rounded-lg border border-violet-500/25 bg-violet-500/[0.04] p-3",children:[e.jsxs("div",{className:"mb-2 flex items-center gap-2",children:[e.jsxs("p",{className:"flex items-center gap-1.5 text-[10px] font-bold uppercase tracking-wide text-violet-300",children:[e.jsx(fe,{className:"h-3 w-3"})," Konzept"]}),(n==null?void 0:n.repo)&&e.jsxs("a",{href:`https://git.tobisniceshomelab.ddnsfree.com/${n.repo}`,className:"flex items-center gap-1 text-[10px] text-violet-300/70 hover:text-violet-200",children:[e.jsx(Y,{className:"h-3 w-3"})," ",n.repo]}),!(n!=null&&n.repo)&&(n==null?void 0:n.quelle)==="datei"&&e.jsx("span",{className:"truncate font-mono text-[10px] text-muted-foreground/70",title:"Der Worker hat kein Repo angelegt — das Konzept liegt als Datei auf der Box.",children:n.pfad}),e.jsx("button",{onClick:()=>o(i=>i+1),title:"Neu laden",className:"ml-auto rounded p-0.5 text-muted-foreground/50 hover:text-foreground cursor-pointer",children:e.jsx(ge,{className:"h-3 w-3"})})]}),p?e.jsx("p",{className:"text-[11px] text-red-400",children:"Konzept nicht ladbar — später nochmal versuchen."}):n===null?e.jsx("p",{className:"text-[10px] text-muted-foreground animate-pulse",children:"Konzept wird geladen …"}):n.konzept?e.jsx("div",{className:"max-h-[28rem] overflow-y-auto pr-1",children:e.jsx(Ze,{text:n.konzept})}):e.jsx("p",{className:"text-[11px] text-muted-foreground italic",children:n.error||"Noch kein Konzept — das Projekt wird gerade vorbereitet."}),d&&(n==null?void 0:n.konzept)&&e.jsx(He,{id:r,onFertig:k})]})})}function Me({projekt:r,karten:d,zeile:k,onArchivAlle:n,raeumt:m}){const[p,h]=u.useState(!1),[g,o]=u.useState(!1),i=d.filter(l=>$[l.status]!==void 0).sort((l,N)=>$[l.status]-$[N.status]||(l.erstellt??0)-(N.erstellt??0)),j=d.filter(l=>l.status==="todo"||l.status==="scheduled").sort((l,N)=>{var c,L;return((c=l.wartet_auf)!=null&&c.length?1:0)-((L=N.wartet_auf)!=null&&L.length?1:0)||(l.erstellt??0)-(N.erstellt??0)}),w=d.filter(l=>l.status==="done").sort((l,N)=>(N.fertig??0)-(l.fertig??0)),y=r.gesamt>0?Math.round(r.fertig/r.gesamt*100):0;return e.jsxs("div",{className:"space-y-2 rounded-xl border border-border/50 bg-background/20 p-3",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(Be,{className:"h-4 w-4 shrink-0 text-primary/70"}),e.jsx("p",{className:"min-w-0 flex-1 truncate text-xs font-semibold text-foreground",title:r.titel,children:r.titel}),e.jsxs("span",{className:"shrink-0 text-[10px] text-muted-foreground",children:[r.fertig," von ",r.gesamt," fertig"]})]}),e.jsx("div",{className:"h-1 overflow-hidden rounded-full bg-background/60",title:`${y}%`,children:e.jsx("div",{className:"h-1 rounded-full bg-primary/70 transition-all",style:{width:`${y}%`}})}),i.length>0&&e.jsx("ul",{className:"space-y-1.5",children:i.map(l=>k(l))}),j.length>0&&e.jsxs("div",{children:[e.jsxs("button",{onClick:()=>h(l=>!l),className:"flex items-center gap-1.5 text-[11px] font-semibold text-muted-foreground hover:text-foreground transition-colors cursor-pointer",children:[p?e.jsx(U,{className:"h-3.5 w-3.5"}):e.jsx(T,{className:"h-3.5 w-3.5"}),j.length," Karte",j.length===1?"":"n"," in der Kette — laufen automatisch der Reihe nach"]}),p&&e.jsx("ul",{className:"mt-1.5 space-y-1.5",children:j.map(l=>k(l))})]}),w.length>0&&e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs("button",{onClick:()=>o(l=>!l),className:"flex items-center gap-1.5 text-[11px] font-semibold text-emerald-300/70 hover:text-emerald-300 transition-colors cursor-pointer",children:[g?e.jsx(U,{className:"h-3.5 w-3.5"}):e.jsx(T,{className:"h-3.5 w-3.5"}),w.length," fertig"]}),n&&e.jsxs("button",{disabled:m,onClick:()=>n(r.key,w.length,`„${r.titel}"`),title:"Räumt die fertigen Karten dieser Kette weg (Archiv, nichts wird gelöscht).",className:"flex items-center gap-1 text-[11px] text-muted-foreground/60 transition-colors hover:text-foreground disabled:opacity-50 cursor-pointer",children:[m?e.jsx(D,{className:"h-3 w-3 animate-spin"}):e.jsx(Q,{className:"h-3 w-3"}),"wegräumen"]})]}),g&&e.jsx("ul",{className:"mt-1.5 space-y-1.5",children:w.map(l=>k(l))})]})]})}function G({k:r,aktiv:d,onWahl:k}){return e.jsxs("button",{onClick:k,className:S("rounded-xl border p-3 text-left transition-all cursor-pointer",d?"border-primary/60 bg-primary/5":"border-border/50 hover:border-border"),children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(r.icon,{className:S("h-4 w-4 shrink-0",d?"text-primary":"text-muted-foreground")}),e.jsx("span",{className:"text-xs font-semibold text-foreground",children:r.titel})]}),e.jsx("p",{className:"mt-1 text-[11px] leading-relaxed text-muted-foreground",children:r.text})]})}function Qe(){var ie,le;const{data:r,isLoading:d}=Se(),k=De(),{showAlert:n,showConfirm:m,dialogElement:p}=Ce(),[h,g]=u.useState(""),[o,i]=u.useState("denken"),[j,w]=u.useState("schlank"),[y,l]=u.useState(!1),[N,c]=u.useState(!1),L=o!=="box",V=o==="repo",[C,je]=u.useState("lxc"),[Z,te]=u.useState(!1),[v,E]=u.useState({}),Ne=Ke(),B=ze({from:"/ideen"}).offen??null,we=t=>Ne({to:"/ideen",search:s=>({...s,offen:t??void 0}),replace:!0}),[H,ye]=u.useState(null),[J,re]=u.useState({}),P=(r==null?void 0:r.items)??[],W=()=>k.invalidateQueries({queryKey:$e.ideen});u.useEffect(()=>{const t=h.trim();if(t.length<12){c(!1);return}let s=!1;const x=setTimeout(async()=>{try{const f=await z("/api/ideen/einordnen",{method:"POST",body:JSON.stringify({text:t})});if(s||!(f!=null&&f.ok))return;i(f.nur_denken?"denken":f.wer==="ide"?"repo":"box"),f.tiefe&&w(f.tiefe),c(!0)}catch{}},700);return()=>{s=!0,clearTimeout(x)}},[h]);const se=B!==null&&(((ie=r==null?void 0:r.items.find(t=>t.id===B))==null?void 0:ie.status)==="triage"||((le=r==null?void 0:r.items.find(t=>t.id===B))==null?void 0:le.status)==="running"),I=Ee(B??"",se);async function ne(){const t=h.trim();if(!(t.length<3||Z)){te(!0);try{const s=t.length>160?t.slice(0,157)+"…":t;await z("/api/ideen",{method:"POST",body:JSON.stringify({titel:s,notiz:t.length>160?t:"",welt:L?"ide":"box",tiefe:V?j==="gruendlich"?"gruendlich":"simpel":"",ziel:V?C:"",art:o==="denken"?"idee":"projekt"})}),pe("gesendet"),g(""),c(!1),l(!1),W()}catch(s){n("Das hat nicht geklappt",String((s==null?void 0:s.message)||s))}finally{te(!1)}}}function ae(t,s,x){m(`${s} fertige Karte${s===1?"":"n"} wegräumen?`,`${x} verschwindet aus der Liste. Gelöscht wird nichts — die Karten wandern ins Archiv der Queue und bleiben dort lesbar. Laufende, hängende und wartende Karten bleiben unberührt.`,async()=>{var b;const f="arch:"+(t||"*");E(a=>({...a,[f]:!0}));try{const a=await z("/api/ideen/archivieren-alle",{method:"POST",body:JSON.stringify({projekt:t})});(b=a.fehlgeschlagen)!=null&&b.length&&n("Teilweise erledigt",`${a.archiviert} weggeräumt, ${a.fehlgeschlagen.length} nicht: `+a.fehlgeschlagen.map(A=>A.titel).join(", ")),W()}catch(a){n("Das hat nicht geklappt",String((a==null?void 0:a.message)||a))}finally{E(a=>({...a,[f]:!1}))}})}async function ve(t){E(s=>({...s,[t]:!0}));try{await z("/api/ideen/archivieren",{method:"POST",body:JSON.stringify({id:t})}),W()}catch(s){n("Das hat nicht geklappt",String((s==null?void 0:s.message)||s))}finally{E(s=>({...s,[t]:!1}))}}async function q(t,s,x,f){E(b=>({...b,[t+s]:!0}));try{await z(x,{method:"POST",body:JSON.stringify(f)}),W()}catch(b){n("Das hat nicht geklappt",String((b==null?void 0:b.message)||b))}finally{E(b=>({...b,[t+s]:!1}))}}async function oe(t){const s=(J[t]||"").trim();if(!(s.length<1||v["ans:"+t])){E(x=>({...x,["ans:"+t]:!0}));try{await z("/api/ideen/antwort",{method:"POST",body:JSON.stringify({id:t,antwort:s})}),re(x=>({...x,[t]:""})),W()}catch(x){n("Das hat nicht geklappt",String((x==null?void 0:x.message)||x))}finally{E(x=>({...x,["ans:"+t]:!1}))}}}const _=t=>{var ce,ue;const s=qe[t.status]??{label:t.status,cls:"text-muted-foreground border-border/60 bg-background/30"},x=B===t.id,f=t.status==="triage"||t.status==="running"||t.status==="done",b=t.status==="blocked",a=!!v["ans:"+t.id],A=t.status==="running"&&(t.puls_alter??0)>600,de=t.status==="todo"||t.status==="ready"||t.status==="scheduled";return e.jsxs("li",{className:S("flex flex-col gap-2 rounded-xl border bg-background/30 px-3 py-2",b?"border-red-500/30":A?"border-amber-500/40":"border-border/40"),children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs("span",{className:S("flex shrink-0 items-center gap-1.5 rounded-lg border px-2 py-0.5 text-[10px] font-bold",s.cls),children:[s.spin&&e.jsx(D,{className:"h-3 w-3 animate-spin"}),s.label]}),A&&e.jsxs("span",{className:"flex shrink-0 items-center gap-1 rounded-lg border border-amber-500/40 bg-amber-500/10 px-2 py-0.5 text-[10px] font-bold text-amber-300",title:"Der Worker lebt, gibt aber kein Lebenszeichen mehr — vermutlich wartet er auf etwas, das nie kommt. „Neuer Versuch“ startet die Karte frisch.",children:[e.jsx(Le,{className:"h-3 w-3"})," ",Math.round((t.puls_alter??0)/60)," min ohne Regung"]}),(t.prio??0)!==0&&e.jsxs("span",{className:"shrink-0 rounded bg-background/50 px-1.5 py-0.5 font-mono text-[10px] text-muted-foreground",title:"Priorität — höher kommt zuerst dran (bei gleicher Prio: Erstellzeit)",children:["P",t.prio]}),(()=>{const K=_e[t.art||(t.welt==="ide"?"projekt":"box")];if(!K)return null;const M=K.icon;return e.jsxs("span",{className:S("flex shrink-0 items-center gap-1 rounded-lg border px-2 py-0.5 text-[10px] font-bold",K.cls),title:K.title,children:[e.jsx(M,{className:"h-3 w-3"})," ",K.label]})})(),e.jsx("span",{className:"min-w-0 flex-1 truncate text-xs text-foreground",title:t.titel,children:t.titel}),e.jsxs("span",{className:"flex shrink-0 items-center gap-1 text-[10px] text-muted-foreground/70",children:[e.jsx(he,{className:"h-3 w-3"}),Pe(t.erstellt)]}),de&&e.jsxs("span",{className:"flex shrink-0 items-center",children:[e.jsx("button",{disabled:!!v["pr:"+t.id],onClick:()=>q("pr:",t.id,"/api/ideen/prio",{id:t.id,richtung:"hoch"}),title:"Vorziehen (Prio +1)",className:"rounded-md p-1 text-muted-foreground/60 transition-colors hover:text-foreground cursor-pointer disabled:opacity-50",children:e.jsx(Oe,{className:"h-3.5 w-3.5"})}),e.jsx("button",{disabled:!!v["pr:"+t.id],onClick:()=>q("pr:",t.id,"/api/ideen/prio",{id:t.id,richtung:"runter"}),title:"Zurückstellen (Prio −1)",className:"rounded-md p-1 text-muted-foreground/60 transition-colors hover:text-foreground cursor-pointer disabled:opacity-50",children:e.jsx(Ie,{className:"h-3.5 w-3.5"})})]}),(t.status==="running"||b)&&e.jsx("button",{disabled:!!v["rt:"+t.id],onClick:()=>m("Neuer Versuch?",t.status==="running"?`Der laufende Worker von '${t.titel.slice(0,60)}' wird beendet (samt gestarteter Test-Prozesse) und die Karte frisch gestartet. Bisheriger Zwischenstand im Workspace bleibt liegen.`:`Die Karte '${t.titel.slice(0,60)}' wird entsperrt und läuft weiter, sobald ein Platz frei ist.`,()=>q("rt:",t.id,"/api/ideen/retry",{id:t.id})),title:"Neuer Versuch — Karte frisch starten",className:S("shrink-0 rounded-md p-1 transition-colors cursor-pointer disabled:opacity-50",A?"text-amber-300 hover:text-amber-200":"text-muted-foreground/60 hover:text-foreground"),children:v["rt:"+t.id]?e.jsx(D,{className:"h-3.5 w-3.5 animate-spin"}):e.jsx(We,{className:"h-3.5 w-3.5"})}),(t.status==="running"||de||t.status==="triage")&&e.jsx("button",{disabled:!!v["st:"+t.id],onClick:()=>m("Karte stoppen?",`'${t.titel.slice(0,60)}' wird angehalten${t.status==="running"?" und der laufende Worker beendet":""}. Sie bleibt als gestoppt im Board und kann jederzeit per „Neuer Versuch“ weiterlaufen.`,()=>q("st:",t.id,"/api/ideen/stopp",{id:t.id})),title:"Stoppen — Karte anhalten",className:"shrink-0 rounded-md p-1 text-muted-foreground/60 transition-colors hover:text-red-300 cursor-pointer disabled:opacity-50",children:v["st:"+t.id]?e.jsx(D,{className:"h-3.5 w-3.5 animate-spin"}):e.jsx(Ve,{className:"h-3.5 w-3.5"})}),(t.status==="done"||b)&&e.jsx("button",{disabled:!!v[t.id],onClick:()=>ve(t.id),title:b?"Aufgeben und aus der Liste räumen (wandert ins Kanban-Archiv)":"Aus der Liste räumen (wandert ins Kanban-Archiv)",className:"shrink-0 rounded-md p-1 text-muted-foreground/60 transition-colors hover:text-foreground cursor-pointer disabled:opacity-50",children:v[t.id]?e.jsx(D,{className:"h-3.5 w-3.5 animate-spin"}):e.jsx(Q,{className:"h-3.5 w-3.5"})}),t.welt==="ide"&&(t.status==="running"||t.status==="done")&&e.jsxs("button",{onClick:()=>ye(H===t.id?null:t.id),title:"Konzept ansehen (das ausgearbeitete KONZEPT.md)",className:S("flex shrink-0 items-center gap-1 rounded-md px-1.5 py-1 text-[10px] font-bold transition-colors cursor-pointer",H===t.id?"text-violet-300":"text-violet-300/70 hover:text-violet-200"),children:[e.jsx(fe,{className:"h-3.5 w-3.5"})," Konzept"]}),f&&e.jsx("button",{onClick:()=>we(x?null:t.id),title:t.status==="done"?"Ergebnis anzeigen":"Worker-Log anzeigen",className:"shrink-0 rounded-md p-1 text-muted-foreground/60 transition-colors hover:text-foreground cursor-pointer",children:x?e.jsx(U,{className:"h-3.5 w-3.5"}):e.jsx(T,{className:"h-3.5 w-3.5"})})]}),H===t.id&&e.jsx(Je,{id:t.id,istIdee:t.art==="idee"&&t.status==="done",onWeiter:W}),t.status==="running"&&t.notiz&&e.jsxs("p",{className:"-mt-1 ml-1 text-[11px] italic leading-relaxed text-sky-200/80",title:"Jüngste Zwischenmeldung des Workers (Heartbeat)",children:["„",t.notiz,"“"]}),(t.status==="todo"||t.status==="scheduled"||t.status==="ready")&&(((ce=t.wartet_auf)==null?void 0:ce.length)??0)>0&&e.jsxs("p",{className:"-mt-1 ml-1 text-[10px] text-muted-foreground/70",children:["→ wartet auf: ",t.wartet_auf.join(" · ")]}),b&&e.jsxs("div",{className:"space-y-2 border-t border-red-500/20 pt-2",children:[e.jsxs("p",{className:"flex items-start gap-1.5 text-[11px] leading-relaxed text-red-200/90",children:[e.jsx(xe,{className:"mt-0.5 h-3.5 w-3.5 shrink-0 text-red-300"}),e.jsxs("span",{children:[e.jsx("b",{children:Fe[t.frage_kind||""]??"Die Aufgabe hängt und wartet auf dich:"})," ",t.frage?e.jsx("span",{className:"text-foreground/90",children:t.frage}):e.jsx("span",{className:"text-muted-foreground italic",children:"kein genauer Grund hinterlegt — antworte einfach mit einer Entscheidung, dann läuft sie weiter."})]})]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx("input",{value:J[t.id]||"",onChange:K=>re(M=>({...M,[t.id]:K.target.value})),onKeyDown:K=>{K.key==="Enter"&&oe(t.id)},placeholder:"Deine Antwort — die Box macht damit weiter",maxLength:2e3,className:"h-8 min-w-0 flex-1 rounded-lg border border-border/60 bg-background/60 px-2.5 text-xs text-foreground placeholder:text-muted-foreground/50 focus:border-red-400/50 focus:outline-none"}),e.jsxs("button",{onClick:()=>oe(t.id),disabled:a||(J[t.id]||"").trim().length<1,className:"flex h-8 shrink-0 items-center gap-1.5 rounded-lg border border-emerald-500/40 bg-emerald-500/10 px-3 text-[10px] font-bold uppercase tracking-wide text-emerald-300 transition-all hover:bg-emerald-500/20 cursor-pointer disabled:opacity-50",children:[a?e.jsx(D,{className:"h-3.5 w-3.5 animate-spin"}):e.jsx(me,{className:"h-3.5 w-3.5"})," Antworten & weiter"]})]})]}),x&&f&&t.status!=="done"&&e.jsx("div",{className:"ml-2 -mt-1",children:e.jsx("div",{className:"rounded-lg border border-border/50 bg-background/50 p-2",children:se&&I.isLoading?e.jsx("p",{className:"text-[10px] text-muted-foreground animate-pulse",children:"Log wird geladen …"}):I.error?e.jsx("p",{className:"text-[10px] text-red-400",children:"Log nicht ladbar"}):(ue=I.data)!=null&&ue.available&&I.data.lines.length>0?e.jsx("pre",{className:"max-h-64 overflow-auto font-mono text-[10px] leading-relaxed text-foreground/80 whitespace-pre-wrap",children:I.data.lines.join(` -`)}):e.jsx("p",{className:"text-[10px] text-muted-foreground",children:"Kein Log verfügbar"})})}),x&&t.status==="done"&&e.jsx(Ge,{id:t.id})]},t.id)};return r&&!r.available?null:e.jsxs("section",{className:"space-y-3",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3",children:[e.jsx(Re,{icon:O,children:(()=>{if(!r)return"Ideen-Queue";const t=x=>P.filter(f=>x.includes(f.status)).length,s=[t(["blocked"])>0?`${t(["blocked"])} braucht dich`:"",t(["running","triage","review"])>0?`${t(["running","triage","review"])} in Arbeit`:"",t(["todo","scheduled","ready"])>0?`${t(["todo","scheduled","ready"])} wartet`:"",t(["done"])>0?`${t(["done"])} fertig`:""].filter(Boolean);return s.length?s.join(" · "):"noch nichts in der Queue"})()}),(()=>{const t=P.filter(s=>s.status==="done").length;return t===0?null:e.jsxs("button",{disabled:!!v["arch:*"],onClick:()=>ae("",t,`Alle ${t} fertigen Karten`),title:"Räumt ALLE fertigen Karten weg — auch die in abgeschlossenen Projekt-Ketten. Laufende, hängende und wartende bleiben unberührt.",className:"flex shrink-0 items-center gap-1.5 rounded-lg border border-border/60 px-2.5 py-1 text-[11px] font-semibold text-muted-foreground transition-all hover:border-primary/40 hover:text-foreground disabled:opacity-50 cursor-pointer",children:[v["arch:*"]?e.jsx(D,{className:"h-3.5 w-3.5 animate-spin"}):e.jsx(Q,{className:"h-3.5 w-3.5"}),t," fertige wegräumen"]})})()]}),e.jsxs("div",{className:"mc-card p-4 space-y-4",children:[e.jsxs("div",{className:"flex gap-2",children:[e.jsx("input",{value:h,onChange:t=>{g(t.target.value),c(!1)},onKeyDown:t=>{t.key==="Enter"&&ne()},placeholder:"Was soll entstehen?",className:"h-10 min-w-0 flex-1 rounded-lg border border-border/60 bg-background/50 px-3 text-sm text-foreground placeholder:text-muted-foreground/50 focus:border-primary/50 focus:outline-none"}),e.jsxs("button",{onClick:ne,disabled:Z||h.trim().length<3,className:"flex h-10 shrink-0 items-center gap-1.5 rounded-lg border border-primary/40 bg-primary/10 px-4 text-xs font-semibold text-primary transition-all hover:bg-primary/20 disabled:opacity-40 cursor-pointer",children:[Z?e.jsx(D,{className:"h-4 w-4 animate-spin"}):e.jsx(me,{className:"h-4 w-4"}),"Los"]})]}),y?e.jsxs("div",{className:"space-y-3 rounded-xl border border-border/40 bg-background/20 p-3",children:[e.jsxs("div",{children:[e.jsx("p",{className:"mb-1.5 text-[11px] text-muted-foreground/70",children:"Wer baut das?"}),e.jsxs("div",{className:"grid gap-2 sm:grid-cols-2",children:[e.jsx(G,{aktiv:o!=="box",onWahl:()=>i(o==="box"?"denken":o),k:{id:"ide",icon:ee,titel:"Ich, in der Agentic IDE",text:"Du bekommst Konzept und Repo — den Code schreibst du selbst."}}),e.jsx(G,{aktiv:o==="box",onWahl:()=>i("box"),k:{id:"box",icon:X,titel:"Die Box, allein",text:"Für dein Heimlabor. Das Ergebnis kommt als Patch-Vorschlag ins Auftragsbuch."}})]})]}),o!=="box"&&e.jsxs("div",{className:"border-l-2 border-primary/40 pl-3",children:[e.jsx("p",{className:"mb-1.5 text-[11px] text-muted-foreground/70",children:"Und wie startest du?"}),e.jsxs("div",{className:"grid gap-2 sm:grid-cols-2",children:[e.jsx(G,{aktiv:o==="denken",onWahl:()=>i("denken"),k:{id:"denken",icon:O,titel:"Erst durchdenken",text:"Konzept zuerst — auf dein Ja wird ein Repo daraus."}}),e.jsx(G,{aktiv:o==="repo",onWahl:()=>i("repo"),k:{id:"repo",icon:Y,titel:"Direkt ein Repo",text:"Konzept und Gitea-Repo in einem Zug."}})]}),o==="repo"?e.jsxs("div",{className:"mt-2.5 flex flex-wrap items-center gap-x-3 gap-y-2",children:[e.jsx("span",{className:"text-[11px] text-muted-foreground/70",children:"Wie gründlich?"}),e.jsx("div",{className:"flex rounded-lg border border-border/60 p-0.5",children:[["schlank","schlank"],["gruendlich","gründlich"]].map(([t,s])=>e.jsx("button",{onClick:()=>w(t),className:S("rounded px-2.5 py-1 text-[10px] font-bold uppercase tracking-wide transition-all cursor-pointer",j===t?"bg-primary/15 text-primary":"text-muted-foreground/60 hover:text-foreground"),children:s},t))}),e.jsxs("span",{className:"ml-auto flex items-center gap-1.5",children:[e.jsx("span",{className:"text-[11px] text-muted-foreground/70",children:"Läuft als"}),e.jsx("div",{className:"flex rounded-lg border border-border/40 p-0.5",children:[["lxc","LXC"],["docker","Docker"]].map(([t,s])=>e.jsx("button",{onClick:()=>je(t),title:t==="lxc"?"Dienst in einem eigenen Proxmox-LXC (systemd, kein Docker). Wird vom Backup-Server mitgesichert.":"Natives Docker: Dockerfile + compose, portabel und pipeline-tauglich.",className:S("rounded px-2 py-0.5 text-[10px] font-semibold transition-all cursor-pointer",C===t?"bg-foreground/10 text-foreground":"text-muted-foreground/50 hover:text-foreground/80"),children:s},t))})]})]}):e.jsxs("p",{className:"mt-2 flex items-start gap-1.5 text-[10px] leading-relaxed text-muted-foreground/60",children:[e.jsx(xe,{className:"mt-px h-3 w-3 shrink-0"}),'Wie gründlich und wo es läuft, fragt die Box erst beim „gefällt mir" — dann weißt du mehr.']})]}),(()=>{const t=ke();return t.gesendet<3?null:e.jsxs("p",{className:"border-t border-border/30 pt-2 text-[10px] text-muted-foreground/50",children:["Du hast ",t.geaendert," von ",t.gesendet," Vorschlägen geändert. Wird das die Regel, bauen wir hier einen richtigen Schritt-für-Schritt-Assistenten."]})})()]}):e.jsxs("div",{className:"flex flex-wrap items-center gap-2 rounded-xl border border-border/40 bg-background/20 px-3 py-2.5 text-xs",children:[o==="box"?e.jsx(X,{className:"h-4 w-4 shrink-0 text-primary"}):o==="repo"?e.jsx(Y,{className:"h-4 w-4 shrink-0 text-primary"}):e.jsx(O,{className:"h-4 w-4 shrink-0 text-primary"}),!N&&e.jsx("span",{className:"shrink-0 text-[10px] uppercase tracking-wider text-muted-foreground/50",children:"Voreingestellt"}),e.jsx("span",{className:"text-muted-foreground",children:o==="box"?"Ich baue das selbst und lege dir das Ergebnis als Vorschlag hin.":o==="repo"?"Du baust selbst — ich lege dir Konzept und Repo an.":"Du baust selbst — ich arbeite erst ein Konzept aus."}),N&&e.jsx("span",{className:"shrink-0 rounded border border-primary/40 bg-primary/10 px-1.5 py-0.5 text-[10px] font-bold text-primary",children:"gelesen"}),e.jsx("button",{onClick:()=>{l(!0),pe("geaendert")},className:"ml-auto shrink-0 text-[11px] text-muted-foreground/60 underline underline-offset-2 transition-colors hover:text-foreground cursor-pointer",children:"anders"})]}),d&&e.jsxs("p",{className:"flex items-center gap-2 text-xs text-muted-foreground",children:[e.jsx(D,{className:"h-3.5 w-3.5 animate-spin"})," Queue wird geladen …"]}),(r==null?void 0:r.fehler)&&e.jsx("p",{className:"text-xs text-amber-300",children:"Queue gerade nicht lesbar — neuer Versuch läuft."}),P.length>0&&e.jsxs("div",{className:"space-y-3",children:[((r==null?void 0:r.projekte)??[]).map(t=>e.jsx(Me,{projekt:t,karten:P.filter(s=>s.projekt===t.key),zeile:_,onArchivAlle:ae,raeumt:!!v["arch:"+t.key]},t.key)),(()=>{const t=new Set(((r==null?void 0:r.projekte)??[]).map(a=>a.key)),s=P.filter(a=>!a.projekt||!t.has(a.projekt));if(s.length===0)return null;const x=s.filter(a=>$[a.status]!==void 0).sort((a,A)=>$[a.status]-$[A.status]||(a.erstellt??0)-(A.erstellt??0)),f=s.filter(a=>["todo","scheduled"].includes(a.status)),b=s.filter(a=>a.status==="done");return e.jsxs("div",{className:"space-y-2",children:[x.length>0&&e.jsx("ul",{className:"space-y-1.5",children:x.map(a=>_(a))}),f.length>0&&e.jsxs("details",{className:"group",children:[e.jsxs("summary",{className:"flex cursor-pointer list-none items-center gap-1.5 py-1 text-[11px] text-muted-foreground/70 hover:text-foreground",children:[e.jsx(T,{className:"h-3 w-3 transition-transform group-open:rotate-90"}),e.jsx(he,{className:"h-3 w-3"})," Wartet (",f.length,")"]}),e.jsx("ul",{className:"mt-1.5 space-y-1.5",children:f.map(a=>_(a))})]}),b.length>0&&e.jsxs("details",{className:"group",children:[e.jsxs("summary",{className:"flex cursor-pointer list-none items-center gap-1.5 py-1 text-[11px] text-muted-foreground/70 hover:text-foreground",children:[e.jsx(T,{className:"h-3 w-3 transition-transform group-open:rotate-90"}),e.jsx(Ae,{className:"h-3 w-3 text-emerald-400/70"})," Fertig (",b.length,")"]}),e.jsx("ul",{className:"mt-1.5 space-y-1.5",children:b.map(a=>_(a))})]})]})})()]}),(r==null?void 0:r.available)&&!d&&P.length===0&&e.jsxs("div",{className:"space-y-2",children:[e.jsx("p",{className:"text-[11px] text-muted-foreground/70",children:"Noch nichts hier. Zum Beispiel:"}),["Ein kleines Werkzeug, das meine Fotos nach Aufnahmedatum in Ordner sortiert","Rippy soll die Untertitel-Spur automatisch auswählen statt zu fragen","Lohnt sich ein Dashboard für die Stromzähler, oder reicht Home Assistant?"].map(t=>e.jsxs("button",{onClick:()=>g(t),className:"flex w-full items-center gap-2 rounded-lg border border-border/40 bg-background/20 px-3 py-2 text-left text-xs text-muted-foreground transition-all hover:border-primary/40 hover:text-foreground cursor-pointer",children:[e.jsx(O,{className:"h-3.5 w-3.5 shrink-0 text-muted-foreground/50"}),t]},t))]})]}),p]})}function it(){return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"bg-gradient-to-r from-foreground via-foreground to-primary bg-clip-text font-space text-2xl font-bold tracking-tight text-transparent",children:"Ideen"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Schreib hin, was entstehen soll. Die Box liest mit und schlägt vor, wie es weitergeht — ändern kannst du das immer."})]}),e.jsx(Qe,{})]})}export{it as IdeenView}; +`)},i)),p=null):p.push(g);return}if(g.trimStart().startsWith("```")){h(i),p=[];return}const j=g.trimEnd();if(!j.trim()){h(i);return}const w=j.match(/^(#{1,4})\s+(.*)$/);if(w){h(i);const N=w[1].length,c=N===1?"text-base font-bold mt-1 mb-2":N===2?"text-sm font-bold mt-4 mb-1.5":"text-xs font-bold mt-3 mb-1 uppercase tracking-wide text-muted-foreground";n.push(e.jsx("p",{className:S(c,"font-space text-foreground"),children:G(w[2],i)},i));return}const y=j.match(/^\s*[-*•]\s+(.*)$/);if(y){m.push(e.jsx("li",{className:"text-xs leading-relaxed text-foreground/85",children:G(y[1],i)},i));return}const l=j.match(/^\s*\d+\.\s+(.*)$/);if(l){m.push(e.jsx("li",{className:"text-xs leading-relaxed text-foreground/85",children:G(l[1],i)},i));return}h(i),n.push(e.jsx("p",{className:"mb-2 text-xs leading-relaxed text-foreground/85",children:G(j,i)},i))}),h("end"),p!==null&&n.push(e.jsx("pre",{className:"mb-3 overflow-x-auto rounded-xl border border-border/50 bg-background/50 p-3 font-mono text-[11px]",children:p.join(` +`)},"code-end")),e.jsx("div",{className:S("max-w-3xl",d),children:n})}function G(r,d){return r.split(/(\*\*[^*]+\*\*|\*[^*]+\*|`[^`]+`)/g).map((n,m)=>{const p=`${d}-${m}`;return/^\*\*[^*]+\*\*$/.test(n)?e.jsx("b",{className:"font-semibold text-foreground",children:n.slice(2,-2)},p):/^\*[^*]+\*$/.test(n)?e.jsx("i",{children:n.slice(1,-1)},p):/^`[^`]+`$/.test(n)?e.jsx("code",{className:"rounded bg-background/50 px-1 font-mono text-[11px] text-foreground/90",children:n.slice(1,-1)},p):e.jsx("span",{children:n},p)})}function He({id:r,onFertig:d}){const[k,n]=u.useState("lxc"),[m,p]=u.useState("simpel"),[h,g]=u.useState(!1),[o,i]=u.useState(null),[j,w]=u.useState(""),[y,l]=u.useState(""),N=async(c,P,V)=>{g(!0),w("");try{const C=await z(c,{method:"POST",body:JSON.stringify(P)});i({id:C.id,art:V}),d==null||d()}catch(C){w(String((C==null?void 0:C.message)||C))}finally{g(!1)}};return o?e.jsx("p",{className:"mt-3 border-t border-violet-500/20 pt-2 text-[11px] text-emerald-300",children:o.art==="projekt"?e.jsxs(e.Fragment,{children:["Projekt-Karte ",e.jsx("span",{className:"font-mono",children:o.id})," ist angelegt — die Box bereitet das Repo vor (Konzept übernimmt sie, sie denkt es nicht neu). Danach öffnest du es in der Agentic IDE."]}):e.jsxs(e.Fragment,{children:["Überarbeitung ",e.jsx("span",{className:"font-mono",children:o.id}),' läuft — die Box arbeitet deine Rückmeldung ein und schreibt die neue Fassung an dieselbe Stelle. Danach hier wieder „Konzept" öffnen.']})}):e.jsxs("div",{className:"mt-3 space-y-3 border-t border-violet-500/20 pt-2.5",children:[e.jsxs("div",{className:"space-y-1.5",children:[e.jsxs("p",{className:"text-[11px] text-muted-foreground",children:[e.jsx("b",{className:"text-sky-300/90",children:"Passt etwas nicht?"})," Schreib hin, was anders werden soll — die Box arbeitet es ein und lässt den Rest stehen. Beliebig oft wiederholbar."]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx("input",{value:y,onChange:c=>l(c.target.value),onKeyDown:c=>{c.key==="Enter"&&y.trim().length>=3&&!h&&N("/api/ideen/nachschaerfen",{id:r,hinweis:y},"runde")},placeholder:"z. B. „Punkt 3: kein WebSocket, das ist mir zu fragil — nimm Polling“",maxLength:2e3,className:"h-8 min-w-0 flex-1 rounded-lg border border-border/60 bg-background/60 px-2.5 text-xs text-foreground placeholder:text-muted-foreground/50 focus:border-sky-400/50 focus:outline-none"}),e.jsxs("button",{onClick:()=>N("/api/ideen/nachschaerfen",{id:r,hinweis:y},"runde"),disabled:h||y.trim().length<3,className:"flex h-8 shrink-0 items-center gap-1.5 rounded-lg border border-sky-500/40 bg-sky-500/10 px-3 text-[10px] font-bold uppercase tracking-wide text-sky-300 transition-all hover:bg-sky-500/20 cursor-pointer disabled:opacity-50",children:[h?e.jsx(D,{className:"h-3.5 w-3.5 animate-spin"}):e.jsx(ge,{className:"h-3.5 w-3.5"}),"Nachschärfen"]})]})]}),e.jsxs("p",{className:"text-[11px] text-muted-foreground",children:[e.jsx("b",{className:"text-violet-300/90",children:"Passt es so?"})," Dann macht die Box daraus ein startklares Repo — Konzept wird übernommen (nicht neu gedacht), dazu Roadmap, AGENTS.md & Co. Gebaut wird danach von dir in der Agentic IDE."]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-x-3 gap-y-2",children:[e.jsx("span",{className:"text-[11px] text-muted-foreground/70",children:"Ziel"}),e.jsx("div",{className:"flex rounded-lg border border-border/40 p-0.5",children:["lxc","docker"].map(c=>e.jsx("button",{onClick:()=>n(c),title:c==="lxc"?"Dienst in einem eigenen Proxmox-LXC (systemd, kein Docker) — wird automatisch mitgesichert.":"Natives Docker: Dockerfile + compose, portabel und pipeline-tauglich.",className:S("rounded px-2 py-0.5 text-[10px] font-semibold transition-all cursor-pointer",k===c?"bg-foreground/10 text-foreground":"text-muted-foreground/50 hover:text-foreground/80"),children:c==="lxc"?"LXC":"Docker"},c))}),e.jsx("span",{className:"text-[11px] text-muted-foreground/70",children:"Aufwand"}),e.jsx("div",{className:"flex rounded-lg border border-border/40 p-0.5",children:["simpel","gruendlich"].map(c=>e.jsx("button",{onClick:()=>p(c),title:c==="simpel"?"Konzept ist schon gehärtet — nur kurz auf die Bau-Sicht nachschärfen (empfohlen).":"Nochmal volle Kaskade über die Bau-Sicht: mehrere Rollen, Härtetests. Dauert entsprechend.",className:S("rounded px-2 py-0.5 text-[10px] font-semibold transition-all cursor-pointer",m===c?"bg-foreground/10 text-foreground":"text-muted-foreground/50 hover:text-foreground/80"),children:c==="simpel"?"schlank":"gründlich"},c))}),e.jsxs("button",{onClick:()=>N("/api/ideen/weiterfuehren",{id:r,ziel:k,tiefe:m},"projekt"),disabled:h,className:"ml-auto flex h-8 shrink-0 items-center gap-1.5 rounded-lg border border-violet-500/40 bg-violet-500/10 px-3 text-[10px] font-bold uppercase tracking-wide text-violet-300 transition-all hover:bg-violet-500/20 cursor-pointer disabled:opacity-50",children:[h?e.jsx(D,{className:"h-3.5 w-3.5 animate-spin"}):e.jsx(ee,{className:"h-3.5 w-3.5"}),"Gefällt mir — Projekt daraus machen"]})]}),j&&e.jsx("p",{className:"text-[11px] text-red-400",children:j})]})}function Je({id:r,istIdee:d,onWeiter:k}){const[n,m]=u.useState(null),[p,h]=u.useState(!1),[g,o]=u.useState(0);return u.useEffect(()=>{let i=!1;return m(null),h(!1),z(`/api/ideen/${r}/konzept`).then(j=>{i||m(j)}).catch(()=>{i||h(!0)}),()=>{i=!0}},[r,g]),e.jsx("div",{className:"ml-2 -mt-1",children:e.jsxs("div",{className:"rounded-lg border border-violet-500/25 bg-violet-500/[0.04] p-3",children:[e.jsxs("div",{className:"mb-2 flex items-center gap-2",children:[e.jsxs("p",{className:"flex items-center gap-1.5 text-[10px] font-bold uppercase tracking-wide text-violet-300",children:[e.jsx(fe,{className:"h-3 w-3"})," Konzept"]}),(n==null?void 0:n.repo)&&e.jsxs("a",{href:`https://git.tobisniceshomelab.ddnsfree.com/${n.repo}`,className:"flex items-center gap-1 text-[10px] text-violet-300/70 hover:text-violet-200",children:[e.jsx(U,{className:"h-3 w-3"})," ",n.repo]}),!(n!=null&&n.repo)&&(n==null?void 0:n.quelle)==="datei"&&e.jsx("span",{className:"truncate font-mono text-[10px] text-muted-foreground/70",title:"Der Worker hat kein Repo angelegt — das Konzept liegt als Datei auf der Box.",children:n.pfad}),e.jsx("button",{onClick:()=>o(i=>i+1),title:"Neu laden",className:"ml-auto rounded p-0.5 text-muted-foreground/50 hover:text-foreground cursor-pointer",children:e.jsx(ge,{className:"h-3 w-3"})})]}),p?e.jsx("p",{className:"text-[11px] text-red-400",children:"Konzept nicht ladbar — später nochmal versuchen."}):n===null?e.jsx("p",{className:"text-[10px] text-muted-foreground animate-pulse",children:"Konzept wird geladen …"}):n.konzept?e.jsx("div",{className:"max-h-[28rem] overflow-y-auto pr-1",children:e.jsx(Ze,{text:n.konzept})}):e.jsx("p",{className:"text-[11px] text-muted-foreground italic",children:n.error||"Noch kein Konzept — das Projekt wird gerade vorbereitet."}),d&&(n==null?void 0:n.konzept)&&e.jsx(He,{id:r,onFertig:k})]})})}function Me({projekt:r,karten:d,zeile:k,onArchivAlle:n,raeumt:m}){const[p,h]=u.useState(!1),[g,o]=u.useState(!1),i=d.filter(l=>R[l.status]!==void 0).sort((l,N)=>R[l.status]-R[N.status]||(l.erstellt??0)-(N.erstellt??0)),j=d.filter(l=>l.status==="todo"||l.status==="scheduled").sort((l,N)=>{var c,P;return((c=l.wartet_auf)!=null&&c.length?1:0)-((P=N.wartet_auf)!=null&&P.length?1:0)||(l.erstellt??0)-(N.erstellt??0)}),w=d.filter(l=>l.status==="done").sort((l,N)=>(N.fertig??0)-(l.fertig??0)),y=r.gesamt>0?Math.round(r.fertig/r.gesamt*100):0;return e.jsxs("div",{className:"space-y-2 rounded-xl border border-border/50 bg-background/20 p-3",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(Be,{className:"h-4 w-4 shrink-0 text-primary/70"}),e.jsx("p",{className:"min-w-0 flex-1 truncate text-xs font-semibold text-foreground",title:r.titel,children:r.titel}),e.jsxs("span",{className:"shrink-0 text-[10px] text-muted-foreground",children:[r.fertig," von ",r.gesamt," fertig"]})]}),e.jsx("div",{className:"h-1 overflow-hidden rounded-full bg-background/60",title:`${y}%`,children:e.jsx("div",{className:"h-1 rounded-full bg-primary/70 transition-all",style:{width:`${y}%`}})}),i.length>0&&e.jsx("ul",{className:"space-y-1.5",children:i.map(l=>k(l))}),j.length>0&&e.jsxs("div",{children:[e.jsxs("button",{onClick:()=>h(l=>!l),className:"flex items-center gap-1.5 text-[11px] font-semibold text-muted-foreground hover:text-foreground transition-colors cursor-pointer",children:[p?e.jsx(X,{className:"h-3.5 w-3.5"}):e.jsx(T,{className:"h-3.5 w-3.5"}),j.length," Karte",j.length===1?"":"n"," in der Kette — laufen automatisch der Reihe nach"]}),p&&e.jsx("ul",{className:"mt-1.5 space-y-1.5",children:j.map(l=>k(l))})]}),w.length>0&&e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs("button",{onClick:()=>o(l=>!l),className:"flex items-center gap-1.5 text-[11px] font-semibold text-emerald-300/70 hover:text-emerald-300 transition-colors cursor-pointer",children:[g?e.jsx(X,{className:"h-3.5 w-3.5"}):e.jsx(T,{className:"h-3.5 w-3.5"}),w.length," fertig"]}),n&&e.jsxs("button",{disabled:m,onClick:()=>n(r.key,w.length,`„${r.titel}"`),title:"Räumt die fertigen Karten dieser Kette weg (Archiv, nichts wird gelöscht).",className:"flex items-center gap-1 text-[11px] text-muted-foreground/60 transition-colors hover:text-foreground disabled:opacity-50 cursor-pointer",children:[m?e.jsx(D,{className:"h-3 w-3 animate-spin"}):e.jsx(Q,{className:"h-3 w-3"}),"wegräumen"]})]}),g&&e.jsx("ul",{className:"mt-1.5 space-y-1.5",children:w.map(l=>k(l))})]})]})}function F({k:r,aktiv:d,onWahl:k}){return e.jsxs("button",{onClick:k,className:S("rounded-xl border p-3 text-left transition-all cursor-pointer",d?"border-primary/60 bg-primary/5":"border-border/50 hover:border-border"),children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(r.icon,{className:S("h-4 w-4 shrink-0",d?"text-primary":"text-muted-foreground")}),e.jsx("span",{className:"text-xs font-semibold text-foreground",children:r.titel})]}),e.jsx("p",{className:"mt-1 text-[11px] leading-relaxed text-muted-foreground",children:r.text})]})}function Qe(){var ie,le;const{data:r,isLoading:d}=Se(),k=De(),{showAlert:n,showConfirm:m,dialogElement:p}=Ce(),[h,g]=u.useState(""),[o,i]=u.useState("denken"),[j,w]=u.useState("schlank"),[y,l]=u.useState(!1),[N,c]=u.useState(!1),P=o!=="box",V=o==="repo",[C,je]=u.useState("lxc"),[Z,te]=u.useState(!1),[v,E]=u.useState({}),Ne=Ke(),B=ze({from:"/ideen"}).offen??null,we=t=>Ne({to:"/ideen",search:s=>({...s,offen:t??void 0}),replace:!0}),[H,ye]=u.useState(null),[J,re]=u.useState({}),W=(r==null?void 0:r.items)??[],$=()=>k.invalidateQueries({queryKey:$e.ideen});u.useEffect(()=>{const t=h.trim();if(t.length<12){c(!1);return}let s=!1;const x=setTimeout(async()=>{try{const f=await z("/api/ideen/einordnen",{method:"POST",body:JSON.stringify({text:t})});if(s||!(f!=null&&f.ok))return;i(f.nur_denken?"denken":f.wer==="ide"?"repo":"box"),f.tiefe&&w(f.tiefe),c(!0)}catch{}},700);return()=>{s=!0,clearTimeout(x)}},[h]);const se=B!==null&&(((ie=r==null?void 0:r.items.find(t=>t.id===B))==null?void 0:ie.status)==="triage"||((le=r==null?void 0:r.items.find(t=>t.id===B))==null?void 0:le.status)==="running"),I=Ee(B??"",se);async function ne(){const t=h.trim();if(!(t.length<3||Z)){te(!0);try{const s=t.length>160?t.slice(0,157)+"…":t;await z("/api/ideen",{method:"POST",body:JSON.stringify({titel:s,notiz:t.length>160?t:"",welt:P?"ide":"box",tiefe:V?j==="gruendlich"?"gruendlich":"simpel":"",ziel:V?C:"",art:o==="denken"?"idee":"projekt"})}),pe("gesendet"),g(""),c(!1),l(!1),$()}catch(s){n("Das hat nicht geklappt",String((s==null?void 0:s.message)||s))}finally{te(!1)}}}function ae(t,s,x){m(`${s} fertige Karte${s===1?"":"n"} wegräumen?`,`${x} verschwindet aus der Liste. Gelöscht wird nichts — die Karten wandern ins Archiv der Queue und bleiben dort lesbar. Laufende, hängende und wartende Karten bleiben unberührt.`,async()=>{var b;const f="arch:"+(t||"*");E(a=>({...a,[f]:!0}));try{const a=await z("/api/ideen/archivieren-alle",{method:"POST",body:JSON.stringify({projekt:t})});(b=a.fehlgeschlagen)!=null&&b.length&&n("Teilweise erledigt",`${a.archiviert} weggeräumt, ${a.fehlgeschlagen.length} nicht: `+a.fehlgeschlagen.map(A=>A.titel).join(", ")),$()}catch(a){n("Das hat nicht geklappt",String((a==null?void 0:a.message)||a))}finally{E(a=>({...a,[f]:!1}))}})}async function ve(t){E(s=>({...s,[t]:!0}));try{await z("/api/ideen/archivieren",{method:"POST",body:JSON.stringify({id:t})}),$()}catch(s){n("Das hat nicht geklappt",String((s==null?void 0:s.message)||s))}finally{E(s=>({...s,[t]:!1}))}}async function q(t,s,x,f){E(b=>({...b,[t+s]:!0}));try{await z(x,{method:"POST",body:JSON.stringify(f)}),$()}catch(b){n("Das hat nicht geklappt",String((b==null?void 0:b.message)||b))}finally{E(b=>({...b,[t+s]:!1}))}}async function oe(t){const s=(J[t]||"").trim();if(!(s.length<1||v["ans:"+t])){E(x=>({...x,["ans:"+t]:!0}));try{await z("/api/ideen/antwort",{method:"POST",body:JSON.stringify({id:t,antwort:s})}),re(x=>({...x,[t]:""})),$()}catch(x){n("Das hat nicht geklappt",String((x==null?void 0:x.message)||x))}finally{E(x=>({...x,["ans:"+t]:!1}))}}}const _=t=>{var ce,ue;const s=qe[t.status]??{label:t.status,cls:"text-muted-foreground border-border/60 bg-background/30"},x=B===t.id,f=t.status==="triage"||t.status==="running"||t.status==="done",b=t.status==="blocked",a=!!v["ans:"+t.id],A=t.status==="running"&&(t.puls_alter??0)>600,de=t.status==="todo"||t.status==="ready"||t.status==="scheduled";return e.jsxs("li",{className:S("flex flex-col gap-2 rounded-xl border bg-background/30 px-3 py-2",b?"border-red-500/30":A?"border-amber-500/40":"border-border/40"),children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs("span",{className:S("flex shrink-0 items-center gap-1.5 rounded-lg border px-2 py-0.5 text-[10px] font-bold",s.cls),children:[s.spin&&e.jsx(D,{className:"h-3 w-3 animate-spin"}),s.label]}),A&&e.jsxs("span",{className:"flex shrink-0 items-center gap-1 rounded-lg border border-amber-500/40 bg-amber-500/10 px-2 py-0.5 text-[10px] font-bold text-amber-300",title:"Der Worker lebt, gibt aber kein Lebenszeichen mehr — vermutlich wartet er auf etwas, das nie kommt. „Neuer Versuch“ startet die Karte frisch.",children:[e.jsx(Le,{className:"h-3 w-3"})," ",Math.round((t.puls_alter??0)/60)," min ohne Regung"]}),(t.prio??0)!==0&&e.jsxs("span",{className:"shrink-0 rounded bg-background/50 px-1.5 py-0.5 font-mono text-[10px] text-muted-foreground",title:"Priorität — höher kommt zuerst dran (bei gleicher Prio: Erstellzeit)",children:["P",t.prio]}),(()=>{const K=_e[t.art||(t.welt==="ide"?"projekt":"box")];if(!K)return null;const M=K.icon;return e.jsxs("span",{className:S("flex shrink-0 items-center gap-1 rounded-lg border px-2 py-0.5 text-[10px] font-bold",K.cls),title:K.title,children:[e.jsx(M,{className:"h-3 w-3"})," ",K.label]})})(),e.jsx("span",{className:"min-w-0 flex-1 truncate text-xs text-foreground",title:t.titel,children:t.titel}),e.jsxs("span",{className:"flex shrink-0 items-center gap-1 text-[10px] text-muted-foreground/70",children:[e.jsx(he,{className:"h-3 w-3"}),Pe(t.erstellt)]}),de&&e.jsxs("span",{className:"flex shrink-0 items-center",children:[e.jsx("button",{disabled:!!v["pr:"+t.id],onClick:()=>q("pr:",t.id,"/api/ideen/prio",{id:t.id,richtung:"hoch"}),title:"Vorziehen (Prio +1)",className:"rounded-md p-1 text-muted-foreground/60 transition-colors hover:text-foreground cursor-pointer disabled:opacity-50",children:e.jsx(Oe,{className:"h-3.5 w-3.5"})}),e.jsx("button",{disabled:!!v["pr:"+t.id],onClick:()=>q("pr:",t.id,"/api/ideen/prio",{id:t.id,richtung:"runter"}),title:"Zurückstellen (Prio −1)",className:"rounded-md p-1 text-muted-foreground/60 transition-colors hover:text-foreground cursor-pointer disabled:opacity-50",children:e.jsx(Ie,{className:"h-3.5 w-3.5"})})]}),(t.status==="running"||b)&&e.jsx("button",{disabled:!!v["rt:"+t.id],onClick:()=>m("Neuer Versuch?",t.status==="running"?`Der laufende Worker von '${t.titel.slice(0,60)}' wird beendet (samt gestarteter Test-Prozesse) und die Karte frisch gestartet. Bisheriger Zwischenstand im Workspace bleibt liegen.`:`Die Karte '${t.titel.slice(0,60)}' wird entsperrt und läuft weiter, sobald ein Platz frei ist.`,()=>q("rt:",t.id,"/api/ideen/retry",{id:t.id})),title:"Neuer Versuch — Karte frisch starten",className:S("shrink-0 rounded-md p-1 transition-colors cursor-pointer disabled:opacity-50",A?"text-amber-300 hover:text-amber-200":"text-muted-foreground/60 hover:text-foreground"),children:v["rt:"+t.id]?e.jsx(D,{className:"h-3.5 w-3.5 animate-spin"}):e.jsx(We,{className:"h-3.5 w-3.5"})}),(t.status==="running"||de||t.status==="triage")&&e.jsx("button",{disabled:!!v["st:"+t.id],onClick:()=>m("Karte stoppen?",`'${t.titel.slice(0,60)}' wird angehalten${t.status==="running"?" und der laufende Worker beendet":""}. Sie bleibt als gestoppt im Board und kann jederzeit per „Neuer Versuch“ weiterlaufen.`,()=>q("st:",t.id,"/api/ideen/stopp",{id:t.id})),title:"Stoppen — Karte anhalten",className:"shrink-0 rounded-md p-1 text-muted-foreground/60 transition-colors hover:text-red-300 cursor-pointer disabled:opacity-50",children:v["st:"+t.id]?e.jsx(D,{className:"h-3.5 w-3.5 animate-spin"}):e.jsx(Ve,{className:"h-3.5 w-3.5"})}),(t.status==="done"||b)&&e.jsx("button",{disabled:!!v[t.id],onClick:()=>ve(t.id),title:b?"Aufgeben und aus der Liste räumen (wandert ins Kanban-Archiv)":"Aus der Liste räumen (wandert ins Kanban-Archiv)",className:"shrink-0 rounded-md p-1 text-muted-foreground/60 transition-colors hover:text-foreground cursor-pointer disabled:opacity-50",children:v[t.id]?e.jsx(D,{className:"h-3.5 w-3.5 animate-spin"}):e.jsx(Q,{className:"h-3.5 w-3.5"})}),t.welt==="ide"&&(t.status==="running"||t.status==="done")&&e.jsxs("button",{onClick:()=>ye(H===t.id?null:t.id),title:"Konzept ansehen (das ausgearbeitete KONZEPT.md)",className:S("flex shrink-0 items-center gap-1 rounded-md px-1.5 py-1 text-[10px] font-bold transition-colors cursor-pointer",H===t.id?"text-violet-300":"text-violet-300/70 hover:text-violet-200"),children:[e.jsx(fe,{className:"h-3.5 w-3.5"})," Konzept"]}),f&&e.jsx("button",{onClick:()=>we(x?null:t.id),title:t.status==="done"?"Ergebnis anzeigen":"Worker-Log anzeigen",className:"shrink-0 rounded-md p-1 text-muted-foreground/60 transition-colors hover:text-foreground cursor-pointer",children:x?e.jsx(X,{className:"h-3.5 w-3.5"}):e.jsx(T,{className:"h-3.5 w-3.5"})})]}),H===t.id&&e.jsx(Je,{id:t.id,istIdee:t.art==="idee"&&t.status==="done",onWeiter:$}),t.status==="running"&&t.notiz&&e.jsxs("p",{className:"-mt-1 ml-1 text-[11px] italic leading-relaxed text-sky-200/80",title:"Jüngste Zwischenmeldung des Workers (Heartbeat)",children:["„",t.notiz,"“"]}),(t.status==="todo"||t.status==="scheduled"||t.status==="ready")&&(((ce=t.wartet_auf)==null?void 0:ce.length)??0)>0&&e.jsxs("p",{className:"-mt-1 ml-1 text-[10px] text-muted-foreground/70",children:["→ wartet auf: ",t.wartet_auf.join(" · ")]}),b&&e.jsxs("div",{className:"space-y-2 border-t border-red-500/20 pt-2",children:[e.jsxs("p",{className:"flex items-start gap-1.5 text-[11px] leading-relaxed text-red-200/90",children:[e.jsx(xe,{className:"mt-0.5 h-3.5 w-3.5 shrink-0 text-red-300"}),e.jsxs("span",{children:[e.jsx("b",{children:Ge[t.frage_kind||""]??"Die Aufgabe hängt und wartet auf dich:"})," ",t.frage?e.jsx("span",{className:"text-foreground/90",children:t.frage}):e.jsx("span",{className:"text-muted-foreground italic",children:"kein genauer Grund hinterlegt — antworte einfach mit einer Entscheidung, dann läuft sie weiter."})]})]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx("input",{value:J[t.id]||"",onChange:K=>re(M=>({...M,[t.id]:K.target.value})),onKeyDown:K=>{K.key==="Enter"&&oe(t.id)},placeholder:"Deine Antwort — die Box macht damit weiter",maxLength:2e3,className:"h-8 min-w-0 flex-1 rounded-lg border border-border/60 bg-background/60 px-2.5 text-xs text-foreground placeholder:text-muted-foreground/50 focus:border-red-400/50 focus:outline-none"}),e.jsxs("button",{onClick:()=>oe(t.id),disabled:a||(J[t.id]||"").trim().length<1,className:"flex h-8 shrink-0 items-center gap-1.5 rounded-lg border border-emerald-500/40 bg-emerald-500/10 px-3 text-[10px] font-bold uppercase tracking-wide text-emerald-300 transition-all hover:bg-emerald-500/20 cursor-pointer disabled:opacity-50",children:[a?e.jsx(D,{className:"h-3.5 w-3.5 animate-spin"}):e.jsx(me,{className:"h-3.5 w-3.5"})," Antworten & weiter"]})]})]}),x&&f&&t.status!=="done"&&e.jsx("div",{className:"ml-2 -mt-1",children:e.jsx("div",{className:"rounded-lg border border-border/50 bg-background/50 p-2",children:se&&I.isLoading?e.jsx("p",{className:"text-[10px] text-muted-foreground animate-pulse",children:"Log wird geladen …"}):I.error?e.jsx("p",{className:"text-[10px] text-red-400",children:"Log nicht ladbar"}):(ue=I.data)!=null&&ue.available&&I.data.lines.length>0?e.jsx("pre",{className:"max-h-64 overflow-auto font-mono text-[10px] leading-relaxed text-foreground/80 whitespace-pre-wrap",children:I.data.lines.join(` +`)}):e.jsx("p",{className:"text-[10px] text-muted-foreground",children:"Kein Log verfügbar"})})}),x&&t.status==="done"&&e.jsx(Fe,{id:t.id})]},t.id)};return r&&!r.available?null:e.jsxs("section",{className:"space-y-3",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3",children:[e.jsx(Re,{icon:O,children:(()=>{if(!r)return"Ideen-Queue";const t=x=>W.filter(f=>x.includes(f.status)).length,s=[t(["blocked"])>0?`${t(["blocked"])} braucht dich`:"",t(["running","triage","review"])>0?`${t(["running","triage","review"])} in Arbeit`:"",t(["todo","scheduled","ready"])>0?`${t(["todo","scheduled","ready"])} wartet`:"",t(["done"])>0?`${t(["done"])} fertig`:""].filter(Boolean);return s.length?s.join(" · "):"noch nichts in der Queue"})()}),(()=>{const t=W.filter(s=>s.status==="done").length;return t===0?null:e.jsxs("button",{disabled:!!v["arch:*"],onClick:()=>ae("",t,`Alle ${t} fertigen Karten`),title:"Räumt ALLE fertigen Karten weg — auch die in abgeschlossenen Projekt-Ketten. Laufende, hängende und wartende bleiben unberührt.",className:"flex shrink-0 items-center gap-1.5 rounded-lg border border-border/60 px-2.5 py-1 text-[11px] font-semibold text-muted-foreground transition-all hover:border-primary/40 hover:text-foreground disabled:opacity-50 cursor-pointer",children:[v["arch:*"]?e.jsx(D,{className:"h-3.5 w-3.5 animate-spin"}):e.jsx(Q,{className:"h-3.5 w-3.5"}),t," fertige wegräumen"]})})()]}),e.jsxs("div",{className:"mc-card p-4 space-y-4",children:[e.jsxs("div",{className:"flex gap-2",children:[e.jsx("input",{value:h,onChange:t=>{g(t.target.value),c(!1)},onKeyDown:t=>{t.key==="Enter"&&ne()},placeholder:"Was soll entstehen?",className:"h-10 min-w-0 flex-1 rounded-lg border border-border/60 bg-background/50 px-3 text-sm text-foreground placeholder:text-muted-foreground/50 focus:border-primary/50 focus:outline-none"}),e.jsxs("button",{onClick:ne,disabled:Z||h.trim().length<3,className:"flex h-10 shrink-0 items-center gap-1.5 rounded-lg border border-primary/40 bg-primary/10 px-4 text-xs font-semibold text-primary transition-all hover:bg-primary/20 disabled:opacity-40 cursor-pointer",children:[Z?e.jsx(D,{className:"h-4 w-4 animate-spin"}):e.jsx(me,{className:"h-4 w-4"}),"Los"]})]}),y?e.jsxs("div",{className:"space-y-3 rounded-xl border border-border/40 bg-background/20 p-3",children:[e.jsxs("div",{children:[e.jsx("p",{className:"mb-1.5 text-[11px] text-muted-foreground/70",children:"Wer baut das?"}),e.jsxs("div",{className:"grid gap-2 sm:grid-cols-2",children:[e.jsx(F,{aktiv:o!=="box",onWahl:()=>i(o==="box"?"denken":o),k:{id:"ide",icon:ee,titel:"Ich, in der Agentic IDE",text:"Du bekommst Konzept und Repo — den Code schreibst du selbst."}}),e.jsx(F,{aktiv:o==="box",onWahl:()=>i("box"),k:{id:"box",icon:Y,titel:"Die Box, allein",text:"Für dein Heimlabor. Das Ergebnis kommt als Branch nach Gitea — mergen tust du."}})]})]}),o!=="box"&&e.jsxs("div",{className:"border-l-2 border-primary/40 pl-3",children:[e.jsx("p",{className:"mb-1.5 text-[11px] text-muted-foreground/70",children:"Und wie startest du?"}),e.jsxs("div",{className:"grid gap-2 sm:grid-cols-2",children:[e.jsx(F,{aktiv:o==="denken",onWahl:()=>i("denken"),k:{id:"denken",icon:O,titel:"Erst durchdenken",text:"Konzept zuerst — auf dein Ja wird ein Repo daraus."}}),e.jsx(F,{aktiv:o==="repo",onWahl:()=>i("repo"),k:{id:"repo",icon:U,titel:"Direkt ein Repo",text:"Konzept und Gitea-Repo in einem Zug."}})]}),o==="repo"?e.jsxs("div",{className:"mt-2.5 flex flex-wrap items-center gap-x-3 gap-y-2",children:[e.jsx("span",{className:"text-[11px] text-muted-foreground/70",children:"Wie gründlich?"}),e.jsx("div",{className:"flex rounded-lg border border-border/60 p-0.5",children:[["schlank","schlank"],["gruendlich","gründlich"]].map(([t,s])=>e.jsx("button",{onClick:()=>w(t),className:S("rounded px-2.5 py-1 text-[10px] font-bold uppercase tracking-wide transition-all cursor-pointer",j===t?"bg-primary/15 text-primary":"text-muted-foreground/60 hover:text-foreground"),children:s},t))}),e.jsxs("span",{className:"ml-auto flex items-center gap-1.5",children:[e.jsx("span",{className:"text-[11px] text-muted-foreground/70",children:"Läuft als"}),e.jsx("div",{className:"flex rounded-lg border border-border/40 p-0.5",children:[["lxc","LXC"],["docker","Docker"]].map(([t,s])=>e.jsx("button",{onClick:()=>je(t),title:t==="lxc"?"Dienst in einem eigenen Proxmox-LXC (systemd, kein Docker). Wird vom Backup-Server mitgesichert.":"Natives Docker: Dockerfile + compose, portabel und pipeline-tauglich.",className:S("rounded px-2 py-0.5 text-[10px] font-semibold transition-all cursor-pointer",C===t?"bg-foreground/10 text-foreground":"text-muted-foreground/50 hover:text-foreground/80"),children:s},t))})]})]}):e.jsxs("p",{className:"mt-2 flex items-start gap-1.5 text-[10px] leading-relaxed text-muted-foreground/60",children:[e.jsx(xe,{className:"mt-px h-3 w-3 shrink-0"}),'Wie gründlich und wo es läuft, fragt die Box erst beim „gefällt mir" — dann weißt du mehr.']})]}),(()=>{const t=ke();return t.gesendet<3?null:e.jsxs("p",{className:"border-t border-border/30 pt-2 text-[10px] text-muted-foreground/50",children:["Du hast ",t.geaendert," von ",t.gesendet," Vorschlägen geändert. Wird das die Regel, bauen wir hier einen richtigen Schritt-für-Schritt-Assistenten."]})})()]}):e.jsxs("div",{className:"flex flex-wrap items-center gap-2 rounded-xl border border-border/40 bg-background/20 px-3 py-2.5 text-xs",children:[o==="box"?e.jsx(Y,{className:"h-4 w-4 shrink-0 text-primary"}):o==="repo"?e.jsx(U,{className:"h-4 w-4 shrink-0 text-primary"}):e.jsx(O,{className:"h-4 w-4 shrink-0 text-primary"}),!N&&e.jsx("span",{className:"shrink-0 text-[10px] uppercase tracking-wider text-muted-foreground/50",children:"Voreingestellt"}),e.jsx("span",{className:"text-muted-foreground",children:o==="box"?"Ich baue das selbst und lege dir das Ergebnis als Vorschlag hin.":o==="repo"?"Du baust selbst — ich lege dir Konzept und Repo an.":"Du baust selbst — ich arbeite erst ein Konzept aus."}),N&&e.jsx("span",{className:"shrink-0 rounded border border-primary/40 bg-primary/10 px-1.5 py-0.5 text-[10px] font-bold text-primary",children:"gelesen"}),e.jsx("button",{onClick:()=>{l(!0),pe("geaendert")},className:"ml-auto shrink-0 text-[11px] text-muted-foreground/60 underline underline-offset-2 transition-colors hover:text-foreground cursor-pointer",children:"anders"})]}),d&&e.jsxs("p",{className:"flex items-center gap-2 text-xs text-muted-foreground",children:[e.jsx(D,{className:"h-3.5 w-3.5 animate-spin"})," Queue wird geladen …"]}),(r==null?void 0:r.fehler)&&e.jsx("p",{className:"text-xs text-amber-300",children:"Queue gerade nicht lesbar — neuer Versuch läuft."}),W.length>0&&e.jsxs("div",{className:"space-y-3",children:[((r==null?void 0:r.projekte)??[]).map(t=>e.jsx(Me,{projekt:t,karten:W.filter(s=>s.projekt===t.key),zeile:_,onArchivAlle:ae,raeumt:!!v["arch:"+t.key]},t.key)),(()=>{const t=new Set(((r==null?void 0:r.projekte)??[]).map(a=>a.key)),s=W.filter(a=>!a.projekt||!t.has(a.projekt));if(s.length===0)return null;const x=s.filter(a=>R[a.status]!==void 0).sort((a,A)=>R[a.status]-R[A.status]||(a.erstellt??0)-(A.erstellt??0)),f=s.filter(a=>["todo","scheduled"].includes(a.status)),b=s.filter(a=>a.status==="done");return e.jsxs("div",{className:"space-y-2",children:[x.length>0&&e.jsx("ul",{className:"space-y-1.5",children:x.map(a=>_(a))}),f.length>0&&e.jsxs("details",{className:"group",children:[e.jsxs("summary",{className:"flex cursor-pointer list-none items-center gap-1.5 py-1 text-[11px] text-muted-foreground/70 hover:text-foreground",children:[e.jsx(T,{className:"h-3 w-3 transition-transform group-open:rotate-90"}),e.jsx(he,{className:"h-3 w-3"})," Wartet (",f.length,")"]}),e.jsx("ul",{className:"mt-1.5 space-y-1.5",children:f.map(a=>_(a))})]}),b.length>0&&e.jsxs("details",{className:"group",children:[e.jsxs("summary",{className:"flex cursor-pointer list-none items-center gap-1.5 py-1 text-[11px] text-muted-foreground/70 hover:text-foreground",children:[e.jsx(T,{className:"h-3 w-3 transition-transform group-open:rotate-90"}),e.jsx(Ae,{className:"h-3 w-3 text-emerald-400/70"})," Fertig (",b.length,")"]}),e.jsx("ul",{className:"mt-1.5 space-y-1.5",children:b.map(a=>_(a))})]})]})})()]}),(r==null?void 0:r.available)&&!d&&W.length===0&&e.jsxs("div",{className:"space-y-2",children:[e.jsx("p",{className:"text-[11px] text-muted-foreground/70",children:"Noch nichts hier. Zum Beispiel:"}),["Ein kleines Werkzeug, das meine Fotos nach Aufnahmedatum in Ordner sortiert","Rippy soll die Untertitel-Spur automatisch auswählen statt zu fragen","Lohnt sich ein Dashboard für die Stromzähler, oder reicht Home Assistant?"].map(t=>e.jsxs("button",{onClick:()=>g(t),className:"flex w-full items-center gap-2 rounded-lg border border-border/40 bg-background/20 px-3 py-2 text-left text-xs text-muted-foreground transition-all hover:border-primary/40 hover:text-foreground cursor-pointer",children:[e.jsx(O,{className:"h-3.5 w-3.5 shrink-0 text-muted-foreground/50"}),t]},t))]})]}),p]})}function ot(){return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"bg-gradient-to-r from-foreground via-foreground to-primary bg-clip-text font-space text-2xl font-bold tracking-tight text-transparent",children:"Ideen"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Schreib hin, was entstehen soll. Die Box liest mit und schlägt vor, wie es weitergeht — ändern kannst du das immer."})]}),e.jsx(Qe,{})]})}export{ot as IdeenView}; diff --git a/frontend/dist/assets/JobsBar-HflSaqor.js b/frontend/dist/assets/JobsBar-95gsUJZs.js similarity index 93% rename from frontend/dist/assets/JobsBar-HflSaqor.js rename to frontend/dist/assets/JobsBar-95gsUJZs.js index 7f7f0da..c5549ec 100644 --- a/frontend/dist/assets/JobsBar-HflSaqor.js +++ b/frontend/dist/assets/JobsBar-95gsUJZs.js @@ -1 +1 @@ -import{u,ag as m,k as x,j as s,y as n,ah as b,b as p,n as f,q as h}from"./index-l6kyKCL9.js";function y(){const d=u(),{data:t=[]}=m(),{showAlert:l,dialogElement:o}=x();async function i(e){try{await f(`/api/jobs/${e}/cancel`,{method:"POST"}),d.invalidateQueries({queryKey:h.jobs})}catch(c){l("Fehler",c.message)}}const a=t.filter(e=>e.state==="running"||e.state==="queued"),r=t.filter(e=>e.state!=="running"&&e.state!=="queued").slice(-3);return a.length===0&&r.length===0?null:s.jsxs("div",{className:"space-y-3 mc-card p-4",children:[s.jsx("div",{className:"text-[11px] font-semibold text-muted-foreground uppercase tracking-wider",children:"Aktive Downloads"}),a.map(e=>s.jsxs("div",{className:"space-y-1.5 p-3 rounded-xl bg-background/20 border border-border/40",children:[s.jsxs("div",{className:"flex justify-between items-center text-xs",children:[s.jsx("span",{className:"font-semibold truncate max-w-[250px]",children:e.label}),s.jsxs("div",{className:"flex items-center gap-3",children:[s.jsxs("span",{className:"text-muted-foreground font-mono",children:[e.progress??0,"% • ",n(e.done_bytes),"/",n(e.total_bytes),e.eta_s?` • ETA ${b(e.eta_s)}`:""]}),s.jsx("button",{onClick:()=>i(e.id),className:"text-[10px] text-red-400 hover:text-red-300 font-semibold border border-red-500/25 bg-red-500/5 px-2 py-0.5 rounded transition-all cursor-pointer",children:"Abbrechen"})]})]}),s.jsx("div",{className:"h-1.5 overflow-hidden rounded-full bg-muted",children:s.jsx("div",{className:"h-full rounded-full bg-primary transition-all duration-500",style:{width:`${e.progress??0}%`}})})]},e.id)),r.map(e=>s.jsxs("div",{className:"flex justify-between items-center text-xs text-muted-foreground px-1",children:[s.jsx("span",{className:"truncate",children:e.label}),s.jsx("span",{className:p("font-semibold text-[10px] px-1.5 py-0.5 rounded uppercase font-mono",e.state==="done"?"bg-emerald-500/10 text-emerald-400":"bg-amber-500/10 text-amber-400"),children:e.state})]},e.id)),o]})}export{y as J}; +import{u,ae as m,k as x,j as s,y as n,af as b,b as p,n as f,q as h}from"./index-DMY9lUCb.js";function y(){const d=u(),{data:t=[]}=m(),{showAlert:l,dialogElement:o}=x();async function i(e){try{await f(`/api/jobs/${e}/cancel`,{method:"POST"}),d.invalidateQueries({queryKey:h.jobs})}catch(c){l("Fehler",c.message)}}const a=t.filter(e=>e.state==="running"||e.state==="queued"),r=t.filter(e=>e.state!=="running"&&e.state!=="queued").slice(-3);return a.length===0&&r.length===0?null:s.jsxs("div",{className:"space-y-3 mc-card p-4",children:[s.jsx("div",{className:"text-[11px] font-semibold text-muted-foreground uppercase tracking-wider",children:"Aktive Downloads"}),a.map(e=>s.jsxs("div",{className:"space-y-1.5 p-3 rounded-xl bg-background/20 border border-border/40",children:[s.jsxs("div",{className:"flex justify-between items-center text-xs",children:[s.jsx("span",{className:"font-semibold truncate max-w-[250px]",children:e.label}),s.jsxs("div",{className:"flex items-center gap-3",children:[s.jsxs("span",{className:"text-muted-foreground font-mono",children:[e.progress??0,"% • ",n(e.done_bytes),"/",n(e.total_bytes),e.eta_s?` • ETA ${b(e.eta_s)}`:""]}),s.jsx("button",{onClick:()=>i(e.id),className:"text-[10px] text-red-400 hover:text-red-300 font-semibold border border-red-500/25 bg-red-500/5 px-2 py-0.5 rounded transition-all cursor-pointer",children:"Abbrechen"})]})]}),s.jsx("div",{className:"h-1.5 overflow-hidden rounded-full bg-muted",children:s.jsx("div",{className:"h-full rounded-full bg-primary transition-all duration-500",style:{width:`${e.progress??0}%`}})})]},e.id)),r.map(e=>s.jsxs("div",{className:"flex justify-between items-center text-xs text-muted-foreground px-1",children:[s.jsx("span",{className:"truncate",children:e.label}),s.jsx("span",{className:p("font-semibold text-[10px] px-1.5 py-0.5 rounded uppercase font-mono",e.state==="done"?"bg-emerald-500/10 text-emerald-400":"bg-amber-500/10 text-amber-400"),children:e.state})]},e.id)),o]})}export{y as J}; diff --git a/frontend/dist/assets/KonsoleView-BFFWN-AY.js b/frontend/dist/assets/KonsoleView-CSxygCPx.js similarity index 94% rename from frontend/dist/assets/KonsoleView-BFFWN-AY.js rename to frontend/dist/assets/KonsoleView-CSxygCPx.js index 798c5e3..493977e 100644 --- a/frontend/dist/assets/KonsoleView-BFFWN-AY.js +++ b/frontend/dist/assets/KonsoleView-CSxygCPx.js @@ -1 +1 @@ -import{O as h,u as g,P as p,r as d,j as e,b as x,T as j,S as N,n as v,U as m,V as w,q as f}from"./index-l6kyKCL9.js";import{E as k}from"./external-link-ClFd8iN1.js";import{R as y}from"./refresh-cw-BV1qZMSR.js";function K(){const{data:t}=h(),u=g(),a=t!=null&&t.box_console_url?p(t.box_console_url):void 0,n=t==null?void 0:t.box_console_reachable,[o,i]=d.useState(!1),[c,l]=d.useState("");async function b(){i(!0),l("");try{const s=await v("/api/maintenance/restart",{method:"POST",body:JSON.stringify({service:"box-console"})}),r=s.ok?"Konsolen-Dienst neu gestartet — einen Moment, dann lädt das Terminal.":`Neustart fehlgeschlagen: ${s.err||"Unbekannter Fehler"}`;l(r),m(s.ok?"erfolg":"fehler",r),w(u,f.agentStatus,f.services)}catch(s){const r=`Neustart fehlgeschlagen: ${(s==null?void 0:s.message)||s}`;l(r),m("fehler",r)}finally{i(!1)}}return e.jsxs("div",{className:"flex h-full flex-col gap-4",children:[e.jsxs("div",{className:"flex flex-wrap items-end justify-between gap-3",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"bg-gradient-to-r from-foreground via-foreground to-primary bg-clip-text font-space text-2xl font-bold tracking-tight text-transparent",children:"Konsole"}),e.jsx("p",{className:"flex items-center gap-2 text-sm text-muted-foreground",children:"Direkte Shell auf der Box — wie ein SSH-Fenster, mitten im Browser."})]}),e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsxs("span",{className:"flex items-center gap-1.5 text-[11px] font-medium text-muted-foreground",children:[e.jsx("span",{className:x("h-2 w-2 rounded-full",n?"bg-emerald-500 animate-pulse":"bg-amber-500")}),n?"online":"offline"]}),a&&e.jsxs("a",{href:a,target:"_blank",rel:"noopener",className:"flex h-8 items-center gap-1.5 rounded-lg border border-border/60 bg-background/20 px-3 text-xs font-semibold text-muted-foreground transition-all hover:border-primary/50 hover:text-foreground",children:[e.jsx(k,{className:"h-3.5 w-3.5"})," In neuem Tab"]})]})]}),a?e.jsxs("div",{className:"relative min-h-[58vh] flex-1 overflow-hidden rounded-2xl border border-border/60 bg-black/50 shadow-lg shadow-black/25",children:[n===!1&&e.jsxs("div",{className:"absolute inset-0 z-10 flex flex-col items-center justify-center gap-3 bg-black/70 text-center",children:[e.jsx(j,{className:"h-8 w-8 text-amber-400"}),e.jsx("div",{className:"text-sm font-semibold text-amber-300",children:"Konsole nicht erreichbar"}),e.jsxs("p",{className:"max-w-sm text-[11px] leading-normal text-muted-foreground",children:["Der Terminal-Dienst (",e.jsx("code",{className:"font-mono text-primary",children:"box-console"}),") läuft gerade nicht."]}),e.jsxs("button",{onClick:b,disabled:o,className:"flex h-9 items-center gap-1.5 rounded-lg border border-amber-500/40 bg-amber-500/10 px-4 text-[11px] font-bold uppercase tracking-wide text-amber-300 transition-all hover:bg-amber-500/20 cursor-pointer disabled:opacity-50",children:[e.jsx(y,{className:x("h-3.5 w-3.5",o&&"animate-spin")})," Dienst neu starten"]}),c&&e.jsx("p",{className:"max-w-sm text-[11px] text-muted-foreground",children:c})]}),e.jsx("iframe",{src:a,title:"Box-Konsole",className:"h-full w-full border-0",style:{minHeight:"58vh"}})]}):e.jsxs("div",{className:"flex min-h-[58vh] flex-1 items-center justify-center rounded-2xl border border-border/60 bg-background/20 text-xs text-muted-foreground",children:[e.jsx(N,{className:"mr-2 h-4 w-4"})," Lade Konsole…"]})]})}export{K as KonsoleView}; +import{O as h,u as g,P as p,r as d,j as e,b as x,T as j,S as N,n as v,U as m,V as w,q as f}from"./index-DMY9lUCb.js";import{E as k}from"./external-link-DcJao8h4.js";import{R as y}from"./refresh-cw-hAcZthO8.js";function K(){const{data:t}=h(),u=g(),a=t!=null&&t.box_console_url?p(t.box_console_url):void 0,n=t==null?void 0:t.box_console_reachable,[o,i]=d.useState(!1),[c,l]=d.useState("");async function b(){i(!0),l("");try{const s=await v("/api/maintenance/restart",{method:"POST",body:JSON.stringify({service:"box-console"})}),r=s.ok?"Konsolen-Dienst neu gestartet — einen Moment, dann lädt das Terminal.":`Neustart fehlgeschlagen: ${s.err||"Unbekannter Fehler"}`;l(r),m(s.ok?"erfolg":"fehler",r),w(u,f.agentStatus,f.services)}catch(s){const r=`Neustart fehlgeschlagen: ${(s==null?void 0:s.message)||s}`;l(r),m("fehler",r)}finally{i(!1)}}return e.jsxs("div",{className:"flex h-full flex-col gap-4",children:[e.jsxs("div",{className:"flex flex-wrap items-end justify-between gap-3",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"bg-gradient-to-r from-foreground via-foreground to-primary bg-clip-text font-space text-2xl font-bold tracking-tight text-transparent",children:"Konsole"}),e.jsx("p",{className:"flex items-center gap-2 text-sm text-muted-foreground",children:"Direkte Shell auf der Box — wie ein SSH-Fenster, mitten im Browser."})]}),e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsxs("span",{className:"flex items-center gap-1.5 text-[11px] font-medium text-muted-foreground",children:[e.jsx("span",{className:x("h-2 w-2 rounded-full",n?"bg-emerald-500 animate-pulse":"bg-amber-500")}),n?"online":"offline"]}),a&&e.jsxs("a",{href:a,target:"_blank",rel:"noopener",className:"flex h-8 items-center gap-1.5 rounded-lg border border-border/60 bg-background/20 px-3 text-xs font-semibold text-muted-foreground transition-all hover:border-primary/50 hover:text-foreground",children:[e.jsx(k,{className:"h-3.5 w-3.5"})," In neuem Tab"]})]})]}),a?e.jsxs("div",{className:"relative min-h-[58vh] flex-1 overflow-hidden rounded-2xl border border-border/60 bg-black/50 shadow-lg shadow-black/25",children:[n===!1&&e.jsxs("div",{className:"absolute inset-0 z-10 flex flex-col items-center justify-center gap-3 bg-black/70 text-center",children:[e.jsx(j,{className:"h-8 w-8 text-amber-400"}),e.jsx("div",{className:"text-sm font-semibold text-amber-300",children:"Konsole nicht erreichbar"}),e.jsxs("p",{className:"max-w-sm text-[11px] leading-normal text-muted-foreground",children:["Der Terminal-Dienst (",e.jsx("code",{className:"font-mono text-primary",children:"box-console"}),") läuft gerade nicht."]}),e.jsxs("button",{onClick:b,disabled:o,className:"flex h-9 items-center gap-1.5 rounded-lg border border-amber-500/40 bg-amber-500/10 px-4 text-[11px] font-bold uppercase tracking-wide text-amber-300 transition-all hover:bg-amber-500/20 cursor-pointer disabled:opacity-50",children:[e.jsx(y,{className:x("h-3.5 w-3.5",o&&"animate-spin")})," Dienst neu starten"]}),c&&e.jsx("p",{className:"max-w-sm text-[11px] text-muted-foreground",children:c})]}),e.jsx("iframe",{src:a,title:"Box-Konsole",className:"h-full w-full border-0",style:{minHeight:"58vh"}})]}):e.jsxs("div",{className:"flex min-h-[58vh] flex-1 items-center justify-center rounded-2xl border border-border/60 bg-background/20 text-xs text-muted-foreground",children:[e.jsx(N,{className:"mr-2 h-4 w-4"})," Lade Konsole…"]})]})}export{K as KonsoleView}; diff --git a/frontend/dist/assets/LiveAreaChartImpl-Cl5sD7ID.js b/frontend/dist/assets/LiveAreaChartImpl-CUepOhWM.js similarity index 99% rename from frontend/dist/assets/LiveAreaChartImpl-Cl5sD7ID.js rename to frontend/dist/assets/LiveAreaChartImpl-CUepOhWM.js index 98da959..f4b0942 100644 --- a/frontend/dist/assets/LiveAreaChartImpl-Cl5sD7ID.js +++ b/frontend/dist/assets/LiveAreaChartImpl-CUepOhWM.js @@ -1,4 +1,4 @@ -var Wy=Object.defineProperty;var Uy=(e,t,r)=>t in e?Wy(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var Hn=(e,t,r)=>Uy(e,typeof t!="symbol"?t+"":t,r);import{r as h,ax as ee,ay as Ky,az as Hy,ao as Yy,at as Gy,j as oe}from"./index-l6kyKCL9.js";import{m as Yl,d as Gl,o as Dd,e as ot,f as Vy,i as Ao,c as Vl,a as ql,b as qy,g as Tt,h as Xy}from"./string-DoZi9Vij.js";import{r as $d}from"./index-GVsa8kqq.js";var Zy=["dangerouslySetInnerHTML","onCopy","onCopyCapture","onCut","onCutCapture","onPaste","onPasteCapture","onCompositionEnd","onCompositionEndCapture","onCompositionStart","onCompositionStartCapture","onCompositionUpdate","onCompositionUpdateCapture","onFocus","onFocusCapture","onBlur","onBlurCapture","onChange","onChangeCapture","onBeforeInput","onBeforeInputCapture","onInput","onInputCapture","onReset","onResetCapture","onSubmit","onSubmitCapture","onInvalid","onInvalidCapture","onLoad","onLoadCapture","onError","onErrorCapture","onKeyDown","onKeyDownCapture","onKeyPress","onKeyPressCapture","onKeyUp","onKeyUpCapture","onAbort","onAbortCapture","onCanPlay","onCanPlayCapture","onCanPlayThrough","onCanPlayThroughCapture","onDurationChange","onDurationChangeCapture","onEmptied","onEmptiedCapture","onEncrypted","onEncryptedCapture","onEnded","onEndedCapture","onLoadedData","onLoadedDataCapture","onLoadedMetadata","onLoadedMetadataCapture","onLoadStart","onLoadStartCapture","onPause","onPauseCapture","onPlay","onPlayCapture","onPlaying","onPlayingCapture","onProgress","onProgressCapture","onRateChange","onRateChangeCapture","onSeeked","onSeekedCapture","onSeeking","onSeekingCapture","onStalled","onStalledCapture","onSuspend","onSuspendCapture","onTimeUpdate","onTimeUpdateCapture","onVolumeChange","onVolumeChangeCapture","onWaiting","onWaitingCapture","onAuxClick","onAuxClickCapture","onClick","onClickCapture","onContextMenu","onContextMenuCapture","onDoubleClick","onDoubleClickCapture","onDrag","onDragCapture","onDragEnd","onDragEndCapture","onDragEnter","onDragEnterCapture","onDragExit","onDragExitCapture","onDragLeave","onDragLeaveCapture","onDragOver","onDragOverCapture","onDragStart","onDragStartCapture","onDrop","onDropCapture","onMouseDown","onMouseDownCapture","onMouseEnter","onMouseLeave","onMouseMove","onMouseMoveCapture","onMouseOut","onMouseOutCapture","onMouseOver","onMouseOverCapture","onMouseUp","onMouseUpCapture","onSelect","onSelectCapture","onTouchCancel","onTouchCancelCapture","onTouchEnd","onTouchEndCapture","onTouchMove","onTouchMoveCapture","onTouchStart","onTouchStartCapture","onPointerDown","onPointerDownCapture","onPointerMove","onPointerMoveCapture","onPointerUp","onPointerUpCapture","onPointerCancel","onPointerCancelCapture","onPointerEnter","onPointerEnterCapture","onPointerLeave","onPointerLeaveCapture","onPointerOver","onPointerOverCapture","onPointerOut","onPointerOutCapture","onGotPointerCapture","onGotPointerCaptureCapture","onLostPointerCapture","onLostPointerCaptureCapture","onScroll","onScrollCapture","onWheel","onWheelCapture","onAnimationStart","onAnimationStartCapture","onAnimationEnd","onAnimationEndCapture","onAnimationIteration","onAnimationIterationCapture","onTransitionEnd","onTransitionEndCapture"];function pu(e){if(typeof e!="string")return!1;var t=Zy;return t.includes(e)}var Qy=["aria-activedescendant","aria-atomic","aria-autocomplete","aria-busy","aria-checked","aria-colcount","aria-colindex","aria-colspan","aria-controls","aria-current","aria-describedby","aria-details","aria-disabled","aria-errormessage","aria-expanded","aria-flowto","aria-haspopup","aria-hidden","aria-invalid","aria-keyshortcuts","aria-label","aria-labelledby","aria-level","aria-live","aria-modal","aria-multiline","aria-multiselectable","aria-orientation","aria-owns","aria-placeholder","aria-posinset","aria-pressed","aria-readonly","aria-relevant","aria-required","aria-roledescription","aria-rowcount","aria-rowindex","aria-rowspan","aria-selected","aria-setsize","aria-sort","aria-valuemax","aria-valuemin","aria-valuenow","aria-valuetext","className","color","height","id","lang","max","media","method","min","name","style","target","width","role","tabIndex","accentHeight","accumulate","additive","alignmentBaseline","allowReorder","alphabetic","amplitude","arabicForm","ascent","attributeName","attributeType","autoReverse","azimuth","baseFrequency","baselineShift","baseProfile","bbox","begin","bias","by","calcMode","capHeight","clip","clipPath","clipPathUnits","clipRule","colorInterpolation","colorInterpolationFilters","colorProfile","colorRendering","contentScriptType","contentStyleType","cursor","cx","cy","d","decelerate","descent","diffuseConstant","direction","display","divisor","dominantBaseline","dur","dx","dy","edgeMode","elevation","enableBackground","end","exponent","externalResourcesRequired","fill","fillOpacity","fillRule","filter","filterRes","filterUnits","floodColor","floodOpacity","focusable","fontFamily","fontSize","fontSizeAdjust","fontStretch","fontStyle","fontVariant","fontWeight","format","from","fx","fy","g1","g2","glyphName","glyphOrientationHorizontal","glyphOrientationVertical","glyphRef","gradientTransform","gradientUnits","hanging","horizAdvX","horizOriginX","href","ideographic","imageRendering","in2","in","intercept","k1","k2","k3","k4","k","kernelMatrix","kernelUnitLength","kerning","keyPoints","keySplines","keyTimes","lengthAdjust","letterSpacing","lightingColor","limitingConeAngle","local","markerEnd","markerHeight","markerMid","markerStart","markerUnits","markerWidth","mask","maskContentUnits","maskUnits","mathematical","mode","numOctaves","offset","opacity","operator","order","orient","orientation","origin","overflow","overlinePosition","overlineThickness","paintOrder","panose1","pathLength","patternContentUnits","patternTransform","patternUnits","pointerEvents","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","preserveAspectRatio","primitiveUnits","r","radius","refX","refY","renderingIntent","repeatCount","repeatDur","requiredExtensions","requiredFeatures","restart","result","rotate","rx","ry","seed","shapeRendering","slope","spacing","specularConstant","specularExponent","speed","spreadMethod","startOffset","stdDeviation","stemh","stemv","stitchTiles","stopColor","stopOpacity","strikethroughPosition","strikethroughThickness","string","stroke","strokeDasharray","strokeDashoffset","strokeLinecap","strokeLinejoin","strokeMiterlimit","strokeOpacity","strokeWidth","surfaceScale","systemLanguage","tableValues","targetX","targetY","textAnchor","textDecoration","textLength","textRendering","to","transform","u1","u2","underlinePosition","underlineThickness","unicode","unicodeBidi","unicodeRange","unitsPerEm","vAlphabetic","values","vectorEffect","version","vertAdvY","vertOriginX","vertOriginY","vHanging","vIdeographic","viewTarget","visibility","vMathematical","widths","wordSpacing","writingMode","x1","x2","x","xChannelSelector","xHeight","xlinkActuate","xlinkArcrole","xlinkHref","xlinkRole","xlinkShow","xlinkTitle","xlinkType","xmlBase","xmlLang","xmlns","xmlnsXlink","xmlSpace","y1","y2","y","yChannelSelector","z","zoomAndPan","ref","key","angle"],Jy=new Set(Qy);function Nd(e){return typeof e!="string"?!1:Jy.has(e)}function Ld(e){return typeof e=="string"&&e.startsWith("data-")}function it(e){if(typeof e!="object"||e===null)return{};var t={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(Nd(r)||Ld(r))&&(t[r]=e[r]);return t}function ia(e){if(e==null)return null;if(h.isValidElement(e)&&typeof e.props=="object"&&e.props!==null){var t=e.props;return it(t)}return typeof e=="object"&&!Array.isArray(e)?it(e):null}function Ve(e){var t={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(Nd(r)||Ld(r)||pu(r))&&(t[r]=e[r]);return t}function eg(e){return e==null?null:h.isValidElement(e)?Ve(e.props):typeof e=="object"&&!Array.isArray(e)?Ve(e):null}var tg=["children","width","height","viewBox","className","style","title","desc"];function Oo(){return Oo=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var r=e.children,n=e.width,i=e.height,a=e.viewBox,o=e.className,u=e.style,l=e.title,c=e.desc,s=rg(e,tg),f=a||{width:n,height:i,x:0,y:0},d=ee("recharts-surface",o);return h.createElement("svg",Oo({},Ve(s),{className:d,width:n,height:i,style:u,viewBox:"".concat(f.x," ").concat(f.y," ").concat(f.width," ").concat(f.height),ref:t}),h.createElement("title",null,l),h.createElement("desc",null,c),r)}),ig=["children","className"];function Po(){return Po=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var r=e.children,n=e.className,i=ag(e,ig),a=ee("recharts-layer",n);return h.createElement("g",Po({className:a},Ve(i),{ref:t}),r)}),ug=h.createContext(null);function ne(e){return function(){return e}}const So=Math.PI,Eo=2*So,er=1e-6,lg=Eo-er;function zd(e){this._+=e[0];for(let t=1,r=e.length;t=0))throw new Error(`invalid digits: ${e}`);if(t>15)return zd;const r=10**t;return function(n){this._+=n[0];for(let i=1,a=n.length;ier)if(!(Math.abs(f*l-c*s)>er)||!a)this._append`L${this._x1=t},${this._y1=r}`;else{let v=n-o,p=i-u,m=l*l+c*c,y=v*v+p*p,g=Math.sqrt(m),w=Math.sqrt(d),x=a*Math.tan((So-Math.acos((m+d-y)/(2*g*w)))/2),A=x/w,O=x/g;Math.abs(A-1)>er&&this._append`L${t+A*s},${r+A*f}`,this._append`A${a},${a},0,0,${+(f*v>s*p)},${this._x1=t+O*l},${this._y1=r+O*c}`}}arc(t,r,n,i,a,o){if(t=+t,r=+r,n=+n,o=!!o,n<0)throw new Error(`negative radius: ${n}`);let u=n*Math.cos(i),l=n*Math.sin(i),c=t+u,s=r+l,f=1^o,d=o?i-a:a-i;this._x1===null?this._append`M${c},${s}`:(Math.abs(this._x1-c)>er||Math.abs(this._y1-s)>er)&&this._append`L${c},${s}`,n&&(d<0&&(d=d%Eo+Eo),d>lg?this._append`A${n},${n},0,1,${f},${t-u},${r-l}A${n},${n},0,1,${f},${this._x1=c},${this._y1=s}`:d>er&&this._append`A${n},${n},0,${+(d>=So)},${f},${this._x1=t+n*Math.cos(a)},${this._y1=r+n*Math.sin(a)}`)}rect(t,r,n,i){this._append`M${this._x0=this._x1=+t},${this._y0=this._y1=+r}h${n=+n}v${+i}h${-n}Z`}toString(){return this._}}function Bd(e){let t=3;return e.digits=function(r){if(!arguments.length)return t;if(r==null)t=null;else{const n=Math.floor(r);if(!(n>=0))throw new RangeError(`invalid digits: ${r}`);t=n}return e},()=>new sg(t)}function mu(e){return typeof e=="object"&&"length"in e?e:Array.from(e)}function Fd(e){this._context=e}Fd.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:this._context.lineTo(e,t);break}}};function aa(e){return new Fd(e)}function Wd(e){return e[0]}function Ud(e){return e[1]}function Kd(e,t){var r=ne(!0),n=null,i=aa,a=null,o=Bd(u);e=typeof e=="function"?e:e===void 0?Wd:ne(e),t=typeof t=="function"?t:t===void 0?Ud:ne(t);function u(l){var c,s=(l=mu(l)).length,f,d=!1,v;for(n==null&&(a=i(v=o())),c=0;c<=s;++c)!(c=v;--p)u.point(x[p],A[p]);u.lineEnd(),u.areaEnd()}g&&(x[d]=+e(y,d,f),A[d]=+t(y,d,f),u.point(n?+n(y,d,f):x[d],r?+r(y,d,f):A[d]))}if(w)return u=null,w+""||null}function s(){return Kd().defined(i).curve(o).context(a)}return c.x=function(f){return arguments.length?(e=typeof f=="function"?f:ne(+f),n=null,c):e},c.x0=function(f){return arguments.length?(e=typeof f=="function"?f:ne(+f),c):e},c.x1=function(f){return arguments.length?(n=f==null?null:typeof f=="function"?f:ne(+f),c):n},c.y=function(f){return arguments.length?(t=typeof f=="function"?f:ne(+f),r=null,c):t},c.y0=function(f){return arguments.length?(t=typeof f=="function"?f:ne(+f),c):t},c.y1=function(f){return arguments.length?(r=f==null?null:typeof f=="function"?f:ne(+f),c):r},c.lineX0=c.lineY0=function(){return s().x(e).y(t)},c.lineY1=function(){return s().x(e).y(r)},c.lineX1=function(){return s().x(n).y(t)},c.defined=function(f){return arguments.length?(i=typeof f=="function"?f:ne(!!f),c):i},c.curve=function(f){return arguments.length?(o=f,a!=null&&(u=o(a)),c):o},c.context=function(f){return arguments.length?(f==null?a=u=null:u=o(a=f),c):a},c}class Hd{constructor(t,r){this._context=t,this._x=r}areaStart(){this._line=0}areaEnd(){this._line=NaN}lineStart(){this._point=0}lineEnd(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line}point(t,r){switch(t=+t,r=+r,this._point){case 0:{this._point=1,this._line?this._context.lineTo(t,r):this._context.moveTo(t,r);break}case 1:this._point=2;default:{this._x?this._context.bezierCurveTo(this._x0=(this._x0+t)/2,this._y0,this._x0,r,t,r):this._context.bezierCurveTo(this._x0,this._y0=(this._y0+r)/2,t,this._y0,t,r);break}}this._x0=t,this._y0=r}}function fg(e){return new Hd(e,!0)}function dg(e){return new Hd(e,!1)}function vi(){}function hi(e,t,r){e._context.bezierCurveTo((2*e._x0+e._x1)/3,(2*e._y0+e._y1)/3,(e._x0+2*e._x1)/3,(e._y0+2*e._y1)/3,(e._x0+4*e._x1+t)/6,(e._y0+4*e._y1+r)/6)}function Yd(e){this._context=e}Yd.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:hi(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:hi(this,e,t);break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function vg(e){return new Yd(e)}function Gd(e){this._context=e}Gd.prototype={areaStart:vi,areaEnd:vi,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:{this._context.moveTo(this._x2,this._y2),this._context.closePath();break}case 2:{this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break}case 3:{this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4);break}}},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._x2=e,this._y2=t;break;case 1:this._point=2,this._x3=e,this._y3=t;break;case 2:this._point=3,this._x4=e,this._y4=t,this._context.moveTo((this._x0+4*this._x1+e)/6,(this._y0+4*this._y1+t)/6);break;default:hi(this,e,t);break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function hg(e){return new Gd(e)}function Vd(e){this._context=e}Vd.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var r=(this._x0+4*this._x1+e)/6,n=(this._y0+4*this._y1+t)/6;this._line?this._context.lineTo(r,n):this._context.moveTo(r,n);break;case 3:this._point=4;default:hi(this,e,t);break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function pg(e){return new Vd(e)}function qd(e){this._context=e}qd.prototype={areaStart:vi,areaEnd:vi,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(e,t){e=+e,t=+t,this._point?this._context.lineTo(e,t):(this._point=1,this._context.moveTo(e,t))}};function mg(e){return new qd(e)}function Xl(e){return e<0?-1:1}function Zl(e,t,r){var n=e._x1-e._x0,i=t-e._x1,a=(e._y1-e._y0)/(n||i<0&&-0),o=(r-e._y1)/(i||n<0&&-0),u=(a*i+o*n)/(n+i);return(Xl(a)+Xl(o))*Math.min(Math.abs(a),Math.abs(o),.5*Math.abs(u))||0}function Ql(e,t){var r=e._x1-e._x0;return r?(3*(e._y1-e._y0)/r-t)/2:t}function Ga(e,t,r){var n=e._x0,i=e._y0,a=e._x1,o=e._y1,u=(a-n)/3;e._context.bezierCurveTo(n+u,i+u*t,a-u,o-u*r,a,o)}function pi(e){this._context=e}pi.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:Ga(this,this._t0,Ql(this,this._t0));break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){var r=NaN;if(e=+e,t=+t,!(e===this._x1&&t===this._y1)){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3,Ga(this,Ql(this,r=Zl(this,e,t)),r);break;default:Ga(this,this._t0,r=Zl(this,e,t));break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t,this._t0=r}}};function Xd(e){this._context=new Zd(e)}(Xd.prototype=Object.create(pi.prototype)).point=function(e,t){pi.prototype.point.call(this,t,e)};function Zd(e){this._context=e}Zd.prototype={moveTo:function(e,t){this._context.moveTo(t,e)},closePath:function(){this._context.closePath()},lineTo:function(e,t){this._context.lineTo(t,e)},bezierCurveTo:function(e,t,r,n,i,a){this._context.bezierCurveTo(t,e,n,r,a,i)}};function yg(e){return new pi(e)}function gg(e){return new Xd(e)}function Qd(e){this._context=e}Qd.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=[],this._y=[]},lineEnd:function(){var e=this._x,t=this._y,r=e.length;if(r)if(this._line?this._context.lineTo(e[0],t[0]):this._context.moveTo(e[0],t[0]),r===2)this._context.lineTo(e[1],t[1]);else for(var n=Jl(e),i=Jl(t),a=0,o=1;o=0;--t)i[t]=(o[t]-i[t+1])/a[t];for(a[r-1]=(e[r]+i[r-1])/2,t=0;t=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:{if(this._t<=0)this._context.lineTo(this._x,t),this._context.lineTo(e,t);else{var r=this._x*(1-this._t)+e*this._t;this._context.lineTo(r,this._y),this._context.lineTo(r,t)}break}}this._x=e,this._y=t}};function wg(e){return new oa(e,.5)}function xg(e){return new oa(e,0)}function Ag(e){return new oa(e,1)}function cr(e,t){if((o=e.length)>1)for(var r=1,n,i,a=e[t[0]],o,u=a.length;r=0;)r[t]=t;return r}function Og(e,t){return e[t]}function Pg(e){const t=[];return t.key=e,t}function Sg(){var e=ne([]),t=_o,r=cr,n=Og;function i(a){var o=Array.from(e.apply(this,arguments),Pg),u,l=o.length,c=-1,s;for(const f of a)for(u=0,++c;u0){for(var r,n,i=0,a=e[0].length,o;i0){for(var r=0,n=e[t[0]],i,a=n.length;r0)||!((a=(i=e[t[0]]).length)>0))){for(var r=0,n=1,i,a,o;n1&&arguments[1]!==void 0?arguments[1]:kg,r=10**t,n=Math.round(e*r)/r;return Object.is(n,-0)?0:n}function we(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n{var u=r[o-1];return typeof u=="string"?i+u+a:u!==void 0?i+Ut(u)+a:i+a},"")}var He=e=>e===0?0:e>0?1:-1,ht=e=>typeof e=="number"&&e!=+e,sr=e=>typeof e=="string"&&e.length>1&&e.indexOf("%")===e.length-1,D=e=>(typeof e=="number"||e instanceof Number)&&!ht(e),pt=e=>D(e)||typeof e=="string",jg=0,yn=e=>{var t=++jg;return"".concat(e||"").concat(t)},Yt=function(t,r){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1;if(!D(t)&&typeof t!="string")return n;var a;if(sr(t)){if(r==null)return n;var o=t.indexOf("%");a=r*parseFloat(t.slice(0,o))/100}else a=+t;return ht(a)&&(a=n),i&&r!=null&&a>r&&(a=r),a},tv=e=>{if(!Array.isArray(e))return!1;for(var t=e.length,r={},n=0;nn&&(typeof t=="function"?t(n):yr(n,t))===r)}var Oe=e=>e===null||typeof e>"u",bu=e=>Oe(e)?e:"".concat(e.charAt(0).toUpperCase()).concat(e.slice(1));function De(e){return e!=null}function Fr(){}var nv=e=>"radius"in e&&"startAngle"in e&&"endAngle"in e,wu=(e,t)=>{if(!e||typeof e=="function"||typeof e=="boolean")return null;var r=e;if(h.isValidElement(e)&&(r=e.props),typeof r!="object"&&typeof r!="function")return null;var n={};return Object.keys(r).forEach(i=>{pu(i)&&typeof r[i]=="function"&&(n[i]=(a=>r[i](r,a)))}),n},Tg=(e,t,r)=>n=>(e(t,r,n),null),Mg=(e,t,r)=>{if(e===null||typeof e!="object"&&typeof e!="function")return null;var n=null;return Object.keys(e).forEach(i=>{var a=e[i];pu(i)&&typeof a=="function"&&(n||(n={}),n[i]=Tg(a,t,r))}),n};function ec(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Dg(e){for(var t=1;t(o[u]===void 0&&n[u]!==void 0&&(o[u]=n[u]),o),r);return a}function Rg(e,t){const r=new Map;for(let n=0;nObject.prototype.propertyIsEnumerable.call(e,t))}function xu(e){return e==null?e===void 0?"[object Undefined]":"[object Null]":Object.prototype.toString.call(e)}const Ug="[object RegExp]",av="[object String]",ov="[object Number]",uv="[object Boolean]",lv="[object Arguments]",Kg="[object Symbol]",Hg="[object Date]",Yg="[object Map]",Gg="[object Set]",Vg="[object Array]",qg="[object ArrayBuffer]",Xg="[object Object]",Zg="[object DataView]",Qg="[object Uint8Array]",Jg="[object Uint8ClampedArray]",e0="[object Uint16Array]",t0="[object Uint32Array]",r0="[object Int8Array]",n0="[object Int16Array]",i0="[object Int32Array]",a0="[object Float32Array]",o0="[object Float64Array]",tc=typeof globalThis=="object"&&globalThis||typeof window=="object"&&window||typeof self=="object"&&self||typeof global=="object"&&global||(function(){return this})();function u0(e){return typeof tc.Buffer<"u"&&tc.Buffer.isBuffer(e)}function l0(e,t){return nr(e,void 0,e,new Map,t)}function nr(e,t,r,n=new Map,i=void 0){const a=i==null?void 0:i(e,t,r,n);if(a!==void 0)return a;if(Co(e))return e;if(n.has(e))return n.get(e);if(Array.isArray(e)){const o=new Array(e.length);n.set(e,o);for(let u=0;u{}):ko(e,t,function n(i,a,o,u,l,c){const s=r(i,a,o,u,l,c);return s!==void 0?!!s:ko(i,a,n,c,!1)},new Map,!0)}function ko(e,t,r,n,i=!1){if(t===e)return!0;switch(typeof t){case"object":return f0(e,t,r,n);case"function":return Object.keys(t).length>0?ko(e,{...t},r,n,i):oi(e,t);default:return cv(e)&&i?typeof t=="string"?t==="":!0:oi(e,t)}}function f0(e,t,r,n){if(t==null)return!0;if(Array.isArray(t))return fv(e,t,r,n);if(t instanceof Map)return d0(e,t,r,n);if(t instanceof Set)return v0(e,t,r,n);const i=Object.keys(t);if(e==null||Co(e))return i.length===0;if(i.length===0)return!0;if(n!=null&&n.has(t))return n.get(t)===e;n==null||n.set(t,e);try{for(let a=0;a{})}function h0(e){return e=s0(e),t=>dv(t,e)}function p0(e,t){return l0(e,(r,n,i,a)=>{if(typeof e=="object"){if(xu(e)==="[object Object]"&&typeof e.constructor!="function"){const o={};return a.set(e,o),tt(o,e,i,a),o}switch(Object.prototype.toString.call(e)){case ov:case av:case uv:{const o=new e.constructor(e==null?void 0:e.valueOf());return tt(o,e),o}case lv:{const o={};return tt(o,e),o.length=e.length,o[Symbol.iterator]=e[Symbol.iterator],o}default:return}}})}function m0(e){return p0(e)}const y0=/^(?:0|[1-9]\d*)$/;function vv(e,t=Number.MAX_SAFE_INTEGER){switch(typeof e){case"number":return Number.isInteger(e)&&e>=0&&e=0}function hv(e){return e!=null&&typeof e!="function"&&A0(e.length)}function O0(e){return typeof e=="object"&&e!==null}function P0(e){return O0(e)&&hv(e)}function rc(e,t=iv){return P0(e)?Rg(Array.from(e),zg(x0(t),1)):[]}function S0(e,t,r){return t===!0?rc(e,r):typeof t=="function"?rc(e,t):e}var Au=h.createContext(null),E0=e=>e,le=()=>{var e=h.useContext(Au);return e?e.store.dispatch:E0},ui=()=>{},_0=()=>ui,I0=(e,t)=>e===t;function N(e){var t=h.useContext(Au),r=h.useMemo(()=>t?n=>{if(n!=null)return e(n)}:ui,[t,e]);return Ky.useSyncExternalStoreWithSelector(t?t.subscription.addNestedSub:_0,t?t.store.getState:ui,t?t.store.getState:ui,r,I0)}function C0(e,t=`expected a function, instead received ${typeof e}`){if(typeof e!="function")throw new TypeError(t)}function k0(e,t="expected all items to be functions, instead received the following types: "){if(!e.every(r=>typeof r=="function")){const r=e.map(n=>typeof n=="function"?`function ${n.name||"unnamed"}()`:typeof n).join(", ");throw new TypeError(`${t}[${r}]`)}}var nc=e=>Array.isArray(e)?e:[e];function j0(e){const t=Array.isArray(e[0])?e[0]:e;return k0(t,"createSelector expects all input-selectors to be functions, but received the following types: "),t}function T0(e,t){const r=[],{length:n}=e;for(let i=0;itypeof WeakRef>"u"?M0:WeakRef,pv=D0(),$0=0,ic=1;function Gn(){return{s:$0,v:void 0,o:null,p:null}}function N0(e){return e instanceof pv?e.deref():e}function mv(e,t={}){let r=Gn();const{resultEqualityCheck:n}=t;let i,a=0;function o(){let u=r;const{length:l}=arguments;for(let f=0,d=l;f{r=Gn(),o.resetResultsCount()},o.resultsCount=()=>a,o.resetResultsCount=()=>{a=0},o}function L0(e,...t){const r=typeof e=="function"?{memoize:e,memoizeOptions:t}:e,n=(...i)=>{let a=0,o=0,u,l={},c=i.pop();typeof c=="object"&&(l=c,c=i.pop()),C0(c,`createSelector expects an output function after the inputs, but received: [${typeof c}]`);const s={...r,...l},{memoize:f,memoizeOptions:d=[],argsMemoize:v=mv,argsMemoizeOptions:p=[]}=s,m=nc(d),y=nc(p),g=j0(i),w=f(function(){return a++,c.apply(null,arguments)},...m),x=v(function(){o++;const O=T0(g,arguments);return u=w.apply(null,O),u},...y);return Object.assign(x,{resultFunc:c,memoizedResultFunc:w,dependencies:g,dependencyRecomputations:()=>o,resetDependencyRecomputations:()=>{o=0},lastResult:()=>u,recomputations:()=>a,resetRecomputations:()=>{a=0},memoize:f,argsMemoize:v})};return Object.assign(n,{withTypes:()=>n}),n}var P=L0(mv);function R0(e,t=1){const r=[],n=Math.floor(t),i=(a,o)=>{for(let u=0;u{if(e!==t){const n=ac(e),i=ac(t);if(n===i&&n===0){if(et)return r==="desc"?-1:1}return r==="desc"?i-n:n-i}return 0};function yv(e){return typeof e=="symbol"||e instanceof Symbol}const B0=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,F0=/^\w*$/;function W0(e,t){return Array.isArray(e)?!1:typeof e=="number"||typeof e=="boolean"||e==null||yv(e)?!0:typeof e=="string"&&(F0.test(e)||!B0.test(e))||t!=null}function U0(e,t,r,n){if(e==null)return[];r=r,Array.isArray(e)||(e=Object.values(e)),Array.isArray(t)||(t=t==null?[null]:[t]),t.length===0&&(t=[null]),Array.isArray(r)||(r=r==null?[]:[r]),r=r.map(u=>String(u));const i=(u,l)=>{let c=u;for(let s=0;sl==null||u==null?l:typeof u=="object"&&"key"in u?Object.hasOwn(l,u.key)?l[u.key]:i(l,u.path):typeof u=="function"?u(l):Array.isArray(u)?i(l,u):typeof l=="object"?l[u]:l,o=t.map(u=>(Array.isArray(u)&&u.length===1&&(u=u[0]),u==null||typeof u=="function"||Array.isArray(u)||W0(u)?u:{key:u,path:gu(u)}));return e.map(u=>({original:u,criteria:o.map(l=>a(l,u))})).slice().sort((u,l)=>{for(let c=0;cu.original)}function ua(e,...t){const r=t.length;return r>1&&jo(e,t[0],t[1])?t=[]:r>2&&jo(t[0],t[1],t[2])&&(t=[t[0]]),U0(e,R0(t),["asc"])}var gv=e=>e.legend.settings,K0=e=>e.legend.size,H0=e=>e.legend.payload;P([H0,gv],(e,t)=>{var r=t.itemSorter,n=e.flat(1);return r?ua(n,r):n});function Y0(e,t){return X0(e)||q0(e,t)||V0(e,t)||G0()}function G0(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. +var Wy=Object.defineProperty;var Uy=(e,t,r)=>t in e?Wy(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var Hn=(e,t,r)=>Uy(e,typeof t!="symbol"?t+"":t,r);import{r as h,av as ee,aw as Ky,ax as Hy,am as Yy,ar as Gy,j as oe}from"./index-DMY9lUCb.js";import{m as Yl,d as Gl,o as Dd,e as ot,f as Vy,i as Ao,c as Vl,a as ql,b as qy,g as Tt,h as Xy}from"./string-DoZi9Vij.js";import{r as $d}from"./index-CVfMhtws.js";var Zy=["dangerouslySetInnerHTML","onCopy","onCopyCapture","onCut","onCutCapture","onPaste","onPasteCapture","onCompositionEnd","onCompositionEndCapture","onCompositionStart","onCompositionStartCapture","onCompositionUpdate","onCompositionUpdateCapture","onFocus","onFocusCapture","onBlur","onBlurCapture","onChange","onChangeCapture","onBeforeInput","onBeforeInputCapture","onInput","onInputCapture","onReset","onResetCapture","onSubmit","onSubmitCapture","onInvalid","onInvalidCapture","onLoad","onLoadCapture","onError","onErrorCapture","onKeyDown","onKeyDownCapture","onKeyPress","onKeyPressCapture","onKeyUp","onKeyUpCapture","onAbort","onAbortCapture","onCanPlay","onCanPlayCapture","onCanPlayThrough","onCanPlayThroughCapture","onDurationChange","onDurationChangeCapture","onEmptied","onEmptiedCapture","onEncrypted","onEncryptedCapture","onEnded","onEndedCapture","onLoadedData","onLoadedDataCapture","onLoadedMetadata","onLoadedMetadataCapture","onLoadStart","onLoadStartCapture","onPause","onPauseCapture","onPlay","onPlayCapture","onPlaying","onPlayingCapture","onProgress","onProgressCapture","onRateChange","onRateChangeCapture","onSeeked","onSeekedCapture","onSeeking","onSeekingCapture","onStalled","onStalledCapture","onSuspend","onSuspendCapture","onTimeUpdate","onTimeUpdateCapture","onVolumeChange","onVolumeChangeCapture","onWaiting","onWaitingCapture","onAuxClick","onAuxClickCapture","onClick","onClickCapture","onContextMenu","onContextMenuCapture","onDoubleClick","onDoubleClickCapture","onDrag","onDragCapture","onDragEnd","onDragEndCapture","onDragEnter","onDragEnterCapture","onDragExit","onDragExitCapture","onDragLeave","onDragLeaveCapture","onDragOver","onDragOverCapture","onDragStart","onDragStartCapture","onDrop","onDropCapture","onMouseDown","onMouseDownCapture","onMouseEnter","onMouseLeave","onMouseMove","onMouseMoveCapture","onMouseOut","onMouseOutCapture","onMouseOver","onMouseOverCapture","onMouseUp","onMouseUpCapture","onSelect","onSelectCapture","onTouchCancel","onTouchCancelCapture","onTouchEnd","onTouchEndCapture","onTouchMove","onTouchMoveCapture","onTouchStart","onTouchStartCapture","onPointerDown","onPointerDownCapture","onPointerMove","onPointerMoveCapture","onPointerUp","onPointerUpCapture","onPointerCancel","onPointerCancelCapture","onPointerEnter","onPointerEnterCapture","onPointerLeave","onPointerLeaveCapture","onPointerOver","onPointerOverCapture","onPointerOut","onPointerOutCapture","onGotPointerCapture","onGotPointerCaptureCapture","onLostPointerCapture","onLostPointerCaptureCapture","onScroll","onScrollCapture","onWheel","onWheelCapture","onAnimationStart","onAnimationStartCapture","onAnimationEnd","onAnimationEndCapture","onAnimationIteration","onAnimationIterationCapture","onTransitionEnd","onTransitionEndCapture"];function pu(e){if(typeof e!="string")return!1;var t=Zy;return t.includes(e)}var Qy=["aria-activedescendant","aria-atomic","aria-autocomplete","aria-busy","aria-checked","aria-colcount","aria-colindex","aria-colspan","aria-controls","aria-current","aria-describedby","aria-details","aria-disabled","aria-errormessage","aria-expanded","aria-flowto","aria-haspopup","aria-hidden","aria-invalid","aria-keyshortcuts","aria-label","aria-labelledby","aria-level","aria-live","aria-modal","aria-multiline","aria-multiselectable","aria-orientation","aria-owns","aria-placeholder","aria-posinset","aria-pressed","aria-readonly","aria-relevant","aria-required","aria-roledescription","aria-rowcount","aria-rowindex","aria-rowspan","aria-selected","aria-setsize","aria-sort","aria-valuemax","aria-valuemin","aria-valuenow","aria-valuetext","className","color","height","id","lang","max","media","method","min","name","style","target","width","role","tabIndex","accentHeight","accumulate","additive","alignmentBaseline","allowReorder","alphabetic","amplitude","arabicForm","ascent","attributeName","attributeType","autoReverse","azimuth","baseFrequency","baselineShift","baseProfile","bbox","begin","bias","by","calcMode","capHeight","clip","clipPath","clipPathUnits","clipRule","colorInterpolation","colorInterpolationFilters","colorProfile","colorRendering","contentScriptType","contentStyleType","cursor","cx","cy","d","decelerate","descent","diffuseConstant","direction","display","divisor","dominantBaseline","dur","dx","dy","edgeMode","elevation","enableBackground","end","exponent","externalResourcesRequired","fill","fillOpacity","fillRule","filter","filterRes","filterUnits","floodColor","floodOpacity","focusable","fontFamily","fontSize","fontSizeAdjust","fontStretch","fontStyle","fontVariant","fontWeight","format","from","fx","fy","g1","g2","glyphName","glyphOrientationHorizontal","glyphOrientationVertical","glyphRef","gradientTransform","gradientUnits","hanging","horizAdvX","horizOriginX","href","ideographic","imageRendering","in2","in","intercept","k1","k2","k3","k4","k","kernelMatrix","kernelUnitLength","kerning","keyPoints","keySplines","keyTimes","lengthAdjust","letterSpacing","lightingColor","limitingConeAngle","local","markerEnd","markerHeight","markerMid","markerStart","markerUnits","markerWidth","mask","maskContentUnits","maskUnits","mathematical","mode","numOctaves","offset","opacity","operator","order","orient","orientation","origin","overflow","overlinePosition","overlineThickness","paintOrder","panose1","pathLength","patternContentUnits","patternTransform","patternUnits","pointerEvents","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","preserveAspectRatio","primitiveUnits","r","radius","refX","refY","renderingIntent","repeatCount","repeatDur","requiredExtensions","requiredFeatures","restart","result","rotate","rx","ry","seed","shapeRendering","slope","spacing","specularConstant","specularExponent","speed","spreadMethod","startOffset","stdDeviation","stemh","stemv","stitchTiles","stopColor","stopOpacity","strikethroughPosition","strikethroughThickness","string","stroke","strokeDasharray","strokeDashoffset","strokeLinecap","strokeLinejoin","strokeMiterlimit","strokeOpacity","strokeWidth","surfaceScale","systemLanguage","tableValues","targetX","targetY","textAnchor","textDecoration","textLength","textRendering","to","transform","u1","u2","underlinePosition","underlineThickness","unicode","unicodeBidi","unicodeRange","unitsPerEm","vAlphabetic","values","vectorEffect","version","vertAdvY","vertOriginX","vertOriginY","vHanging","vIdeographic","viewTarget","visibility","vMathematical","widths","wordSpacing","writingMode","x1","x2","x","xChannelSelector","xHeight","xlinkActuate","xlinkArcrole","xlinkHref","xlinkRole","xlinkShow","xlinkTitle","xlinkType","xmlBase","xmlLang","xmlns","xmlnsXlink","xmlSpace","y1","y2","y","yChannelSelector","z","zoomAndPan","ref","key","angle"],Jy=new Set(Qy);function Nd(e){return typeof e!="string"?!1:Jy.has(e)}function Ld(e){return typeof e=="string"&&e.startsWith("data-")}function it(e){if(typeof e!="object"||e===null)return{};var t={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(Nd(r)||Ld(r))&&(t[r]=e[r]);return t}function ia(e){if(e==null)return null;if(h.isValidElement(e)&&typeof e.props=="object"&&e.props!==null){var t=e.props;return it(t)}return typeof e=="object"&&!Array.isArray(e)?it(e):null}function Ve(e){var t={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(Nd(r)||Ld(r)||pu(r))&&(t[r]=e[r]);return t}function eg(e){return e==null?null:h.isValidElement(e)?Ve(e.props):typeof e=="object"&&!Array.isArray(e)?Ve(e):null}var tg=["children","width","height","viewBox","className","style","title","desc"];function Oo(){return Oo=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var r=e.children,n=e.width,i=e.height,a=e.viewBox,o=e.className,u=e.style,l=e.title,c=e.desc,s=rg(e,tg),f=a||{width:n,height:i,x:0,y:0},d=ee("recharts-surface",o);return h.createElement("svg",Oo({},Ve(s),{className:d,width:n,height:i,style:u,viewBox:"".concat(f.x," ").concat(f.y," ").concat(f.width," ").concat(f.height),ref:t}),h.createElement("title",null,l),h.createElement("desc",null,c),r)}),ig=["children","className"];function Po(){return Po=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var r=e.children,n=e.className,i=ag(e,ig),a=ee("recharts-layer",n);return h.createElement("g",Po({className:a},Ve(i),{ref:t}),r)}),ug=h.createContext(null);function ne(e){return function(){return e}}const So=Math.PI,Eo=2*So,er=1e-6,lg=Eo-er;function zd(e){this._+=e[0];for(let t=1,r=e.length;t=0))throw new Error(`invalid digits: ${e}`);if(t>15)return zd;const r=10**t;return function(n){this._+=n[0];for(let i=1,a=n.length;ier)if(!(Math.abs(f*l-c*s)>er)||!a)this._append`L${this._x1=t},${this._y1=r}`;else{let v=n-o,p=i-u,m=l*l+c*c,y=v*v+p*p,g=Math.sqrt(m),w=Math.sqrt(d),x=a*Math.tan((So-Math.acos((m+d-y)/(2*g*w)))/2),A=x/w,O=x/g;Math.abs(A-1)>er&&this._append`L${t+A*s},${r+A*f}`,this._append`A${a},${a},0,0,${+(f*v>s*p)},${this._x1=t+O*l},${this._y1=r+O*c}`}}arc(t,r,n,i,a,o){if(t=+t,r=+r,n=+n,o=!!o,n<0)throw new Error(`negative radius: ${n}`);let u=n*Math.cos(i),l=n*Math.sin(i),c=t+u,s=r+l,f=1^o,d=o?i-a:a-i;this._x1===null?this._append`M${c},${s}`:(Math.abs(this._x1-c)>er||Math.abs(this._y1-s)>er)&&this._append`L${c},${s}`,n&&(d<0&&(d=d%Eo+Eo),d>lg?this._append`A${n},${n},0,1,${f},${t-u},${r-l}A${n},${n},0,1,${f},${this._x1=c},${this._y1=s}`:d>er&&this._append`A${n},${n},0,${+(d>=So)},${f},${this._x1=t+n*Math.cos(a)},${this._y1=r+n*Math.sin(a)}`)}rect(t,r,n,i){this._append`M${this._x0=this._x1=+t},${this._y0=this._y1=+r}h${n=+n}v${+i}h${-n}Z`}toString(){return this._}}function Bd(e){let t=3;return e.digits=function(r){if(!arguments.length)return t;if(r==null)t=null;else{const n=Math.floor(r);if(!(n>=0))throw new RangeError(`invalid digits: ${r}`);t=n}return e},()=>new sg(t)}function mu(e){return typeof e=="object"&&"length"in e?e:Array.from(e)}function Fd(e){this._context=e}Fd.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:this._context.lineTo(e,t);break}}};function aa(e){return new Fd(e)}function Wd(e){return e[0]}function Ud(e){return e[1]}function Kd(e,t){var r=ne(!0),n=null,i=aa,a=null,o=Bd(u);e=typeof e=="function"?e:e===void 0?Wd:ne(e),t=typeof t=="function"?t:t===void 0?Ud:ne(t);function u(l){var c,s=(l=mu(l)).length,f,d=!1,v;for(n==null&&(a=i(v=o())),c=0;c<=s;++c)!(c=v;--p)u.point(x[p],A[p]);u.lineEnd(),u.areaEnd()}g&&(x[d]=+e(y,d,f),A[d]=+t(y,d,f),u.point(n?+n(y,d,f):x[d],r?+r(y,d,f):A[d]))}if(w)return u=null,w+""||null}function s(){return Kd().defined(i).curve(o).context(a)}return c.x=function(f){return arguments.length?(e=typeof f=="function"?f:ne(+f),n=null,c):e},c.x0=function(f){return arguments.length?(e=typeof f=="function"?f:ne(+f),c):e},c.x1=function(f){return arguments.length?(n=f==null?null:typeof f=="function"?f:ne(+f),c):n},c.y=function(f){return arguments.length?(t=typeof f=="function"?f:ne(+f),r=null,c):t},c.y0=function(f){return arguments.length?(t=typeof f=="function"?f:ne(+f),c):t},c.y1=function(f){return arguments.length?(r=f==null?null:typeof f=="function"?f:ne(+f),c):r},c.lineX0=c.lineY0=function(){return s().x(e).y(t)},c.lineY1=function(){return s().x(e).y(r)},c.lineX1=function(){return s().x(n).y(t)},c.defined=function(f){return arguments.length?(i=typeof f=="function"?f:ne(!!f),c):i},c.curve=function(f){return arguments.length?(o=f,a!=null&&(u=o(a)),c):o},c.context=function(f){return arguments.length?(f==null?a=u=null:u=o(a=f),c):a},c}class Hd{constructor(t,r){this._context=t,this._x=r}areaStart(){this._line=0}areaEnd(){this._line=NaN}lineStart(){this._point=0}lineEnd(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line}point(t,r){switch(t=+t,r=+r,this._point){case 0:{this._point=1,this._line?this._context.lineTo(t,r):this._context.moveTo(t,r);break}case 1:this._point=2;default:{this._x?this._context.bezierCurveTo(this._x0=(this._x0+t)/2,this._y0,this._x0,r,t,r):this._context.bezierCurveTo(this._x0,this._y0=(this._y0+r)/2,t,this._y0,t,r);break}}this._x0=t,this._y0=r}}function fg(e){return new Hd(e,!0)}function dg(e){return new Hd(e,!1)}function vi(){}function hi(e,t,r){e._context.bezierCurveTo((2*e._x0+e._x1)/3,(2*e._y0+e._y1)/3,(e._x0+2*e._x1)/3,(e._y0+2*e._y1)/3,(e._x0+4*e._x1+t)/6,(e._y0+4*e._y1+r)/6)}function Yd(e){this._context=e}Yd.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:hi(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:hi(this,e,t);break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function vg(e){return new Yd(e)}function Gd(e){this._context=e}Gd.prototype={areaStart:vi,areaEnd:vi,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:{this._context.moveTo(this._x2,this._y2),this._context.closePath();break}case 2:{this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break}case 3:{this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4);break}}},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._x2=e,this._y2=t;break;case 1:this._point=2,this._x3=e,this._y3=t;break;case 2:this._point=3,this._x4=e,this._y4=t,this._context.moveTo((this._x0+4*this._x1+e)/6,(this._y0+4*this._y1+t)/6);break;default:hi(this,e,t);break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function hg(e){return new Gd(e)}function Vd(e){this._context=e}Vd.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var r=(this._x0+4*this._x1+e)/6,n=(this._y0+4*this._y1+t)/6;this._line?this._context.lineTo(r,n):this._context.moveTo(r,n);break;case 3:this._point=4;default:hi(this,e,t);break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function pg(e){return new Vd(e)}function qd(e){this._context=e}qd.prototype={areaStart:vi,areaEnd:vi,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(e,t){e=+e,t=+t,this._point?this._context.lineTo(e,t):(this._point=1,this._context.moveTo(e,t))}};function mg(e){return new qd(e)}function Xl(e){return e<0?-1:1}function Zl(e,t,r){var n=e._x1-e._x0,i=t-e._x1,a=(e._y1-e._y0)/(n||i<0&&-0),o=(r-e._y1)/(i||n<0&&-0),u=(a*i+o*n)/(n+i);return(Xl(a)+Xl(o))*Math.min(Math.abs(a),Math.abs(o),.5*Math.abs(u))||0}function Ql(e,t){var r=e._x1-e._x0;return r?(3*(e._y1-e._y0)/r-t)/2:t}function Ga(e,t,r){var n=e._x0,i=e._y0,a=e._x1,o=e._y1,u=(a-n)/3;e._context.bezierCurveTo(n+u,i+u*t,a-u,o-u*r,a,o)}function pi(e){this._context=e}pi.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:Ga(this,this._t0,Ql(this,this._t0));break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){var r=NaN;if(e=+e,t=+t,!(e===this._x1&&t===this._y1)){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3,Ga(this,Ql(this,r=Zl(this,e,t)),r);break;default:Ga(this,this._t0,r=Zl(this,e,t));break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t,this._t0=r}}};function Xd(e){this._context=new Zd(e)}(Xd.prototype=Object.create(pi.prototype)).point=function(e,t){pi.prototype.point.call(this,t,e)};function Zd(e){this._context=e}Zd.prototype={moveTo:function(e,t){this._context.moveTo(t,e)},closePath:function(){this._context.closePath()},lineTo:function(e,t){this._context.lineTo(t,e)},bezierCurveTo:function(e,t,r,n,i,a){this._context.bezierCurveTo(t,e,n,r,a,i)}};function yg(e){return new pi(e)}function gg(e){return new Xd(e)}function Qd(e){this._context=e}Qd.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=[],this._y=[]},lineEnd:function(){var e=this._x,t=this._y,r=e.length;if(r)if(this._line?this._context.lineTo(e[0],t[0]):this._context.moveTo(e[0],t[0]),r===2)this._context.lineTo(e[1],t[1]);else for(var n=Jl(e),i=Jl(t),a=0,o=1;o=0;--t)i[t]=(o[t]-i[t+1])/a[t];for(a[r-1]=(e[r]+i[r-1])/2,t=0;t=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:{if(this._t<=0)this._context.lineTo(this._x,t),this._context.lineTo(e,t);else{var r=this._x*(1-this._t)+e*this._t;this._context.lineTo(r,this._y),this._context.lineTo(r,t)}break}}this._x=e,this._y=t}};function wg(e){return new oa(e,.5)}function xg(e){return new oa(e,0)}function Ag(e){return new oa(e,1)}function cr(e,t){if((o=e.length)>1)for(var r=1,n,i,a=e[t[0]],o,u=a.length;r=0;)r[t]=t;return r}function Og(e,t){return e[t]}function Pg(e){const t=[];return t.key=e,t}function Sg(){var e=ne([]),t=_o,r=cr,n=Og;function i(a){var o=Array.from(e.apply(this,arguments),Pg),u,l=o.length,c=-1,s;for(const f of a)for(u=0,++c;u0){for(var r,n,i=0,a=e[0].length,o;i0){for(var r=0,n=e[t[0]],i,a=n.length;r0)||!((a=(i=e[t[0]]).length)>0))){for(var r=0,n=1,i,a,o;n1&&arguments[1]!==void 0?arguments[1]:kg,r=10**t,n=Math.round(e*r)/r;return Object.is(n,-0)?0:n}function we(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n{var u=r[o-1];return typeof u=="string"?i+u+a:u!==void 0?i+Ut(u)+a:i+a},"")}var He=e=>e===0?0:e>0?1:-1,ht=e=>typeof e=="number"&&e!=+e,sr=e=>typeof e=="string"&&e.length>1&&e.indexOf("%")===e.length-1,D=e=>(typeof e=="number"||e instanceof Number)&&!ht(e),pt=e=>D(e)||typeof e=="string",jg=0,yn=e=>{var t=++jg;return"".concat(e||"").concat(t)},Yt=function(t,r){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1;if(!D(t)&&typeof t!="string")return n;var a;if(sr(t)){if(r==null)return n;var o=t.indexOf("%");a=r*parseFloat(t.slice(0,o))/100}else a=+t;return ht(a)&&(a=n),i&&r!=null&&a>r&&(a=r),a},tv=e=>{if(!Array.isArray(e))return!1;for(var t=e.length,r={},n=0;nn&&(typeof t=="function"?t(n):yr(n,t))===r)}var Oe=e=>e===null||typeof e>"u",bu=e=>Oe(e)?e:"".concat(e.charAt(0).toUpperCase()).concat(e.slice(1));function De(e){return e!=null}function Fr(){}var nv=e=>"radius"in e&&"startAngle"in e&&"endAngle"in e,wu=(e,t)=>{if(!e||typeof e=="function"||typeof e=="boolean")return null;var r=e;if(h.isValidElement(e)&&(r=e.props),typeof r!="object"&&typeof r!="function")return null;var n={};return Object.keys(r).forEach(i=>{pu(i)&&typeof r[i]=="function"&&(n[i]=(a=>r[i](r,a)))}),n},Tg=(e,t,r)=>n=>(e(t,r,n),null),Mg=(e,t,r)=>{if(e===null||typeof e!="object"&&typeof e!="function")return null;var n=null;return Object.keys(e).forEach(i=>{var a=e[i];pu(i)&&typeof a=="function"&&(n||(n={}),n[i]=Tg(a,t,r))}),n};function ec(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Dg(e){for(var t=1;t(o[u]===void 0&&n[u]!==void 0&&(o[u]=n[u]),o),r);return a}function Rg(e,t){const r=new Map;for(let n=0;nObject.prototype.propertyIsEnumerable.call(e,t))}function xu(e){return e==null?e===void 0?"[object Undefined]":"[object Null]":Object.prototype.toString.call(e)}const Ug="[object RegExp]",av="[object String]",ov="[object Number]",uv="[object Boolean]",lv="[object Arguments]",Kg="[object Symbol]",Hg="[object Date]",Yg="[object Map]",Gg="[object Set]",Vg="[object Array]",qg="[object ArrayBuffer]",Xg="[object Object]",Zg="[object DataView]",Qg="[object Uint8Array]",Jg="[object Uint8ClampedArray]",e0="[object Uint16Array]",t0="[object Uint32Array]",r0="[object Int8Array]",n0="[object Int16Array]",i0="[object Int32Array]",a0="[object Float32Array]",o0="[object Float64Array]",tc=typeof globalThis=="object"&&globalThis||typeof window=="object"&&window||typeof self=="object"&&self||typeof global=="object"&&global||(function(){return this})();function u0(e){return typeof tc.Buffer<"u"&&tc.Buffer.isBuffer(e)}function l0(e,t){return nr(e,void 0,e,new Map,t)}function nr(e,t,r,n=new Map,i=void 0){const a=i==null?void 0:i(e,t,r,n);if(a!==void 0)return a;if(Co(e))return e;if(n.has(e))return n.get(e);if(Array.isArray(e)){const o=new Array(e.length);n.set(e,o);for(let u=0;u{}):ko(e,t,function n(i,a,o,u,l,c){const s=r(i,a,o,u,l,c);return s!==void 0?!!s:ko(i,a,n,c,!1)},new Map,!0)}function ko(e,t,r,n,i=!1){if(t===e)return!0;switch(typeof t){case"object":return f0(e,t,r,n);case"function":return Object.keys(t).length>0?ko(e,{...t},r,n,i):oi(e,t);default:return cv(e)&&i?typeof t=="string"?t==="":!0:oi(e,t)}}function f0(e,t,r,n){if(t==null)return!0;if(Array.isArray(t))return fv(e,t,r,n);if(t instanceof Map)return d0(e,t,r,n);if(t instanceof Set)return v0(e,t,r,n);const i=Object.keys(t);if(e==null||Co(e))return i.length===0;if(i.length===0)return!0;if(n!=null&&n.has(t))return n.get(t)===e;n==null||n.set(t,e);try{for(let a=0;a{})}function h0(e){return e=s0(e),t=>dv(t,e)}function p0(e,t){return l0(e,(r,n,i,a)=>{if(typeof e=="object"){if(xu(e)==="[object Object]"&&typeof e.constructor!="function"){const o={};return a.set(e,o),tt(o,e,i,a),o}switch(Object.prototype.toString.call(e)){case ov:case av:case uv:{const o=new e.constructor(e==null?void 0:e.valueOf());return tt(o,e),o}case lv:{const o={};return tt(o,e),o.length=e.length,o[Symbol.iterator]=e[Symbol.iterator],o}default:return}}})}function m0(e){return p0(e)}const y0=/^(?:0|[1-9]\d*)$/;function vv(e,t=Number.MAX_SAFE_INTEGER){switch(typeof e){case"number":return Number.isInteger(e)&&e>=0&&e=0}function hv(e){return e!=null&&typeof e!="function"&&A0(e.length)}function O0(e){return typeof e=="object"&&e!==null}function P0(e){return O0(e)&&hv(e)}function rc(e,t=iv){return P0(e)?Rg(Array.from(e),zg(x0(t),1)):[]}function S0(e,t,r){return t===!0?rc(e,r):typeof t=="function"?rc(e,t):e}var Au=h.createContext(null),E0=e=>e,le=()=>{var e=h.useContext(Au);return e?e.store.dispatch:E0},ui=()=>{},_0=()=>ui,I0=(e,t)=>e===t;function N(e){var t=h.useContext(Au),r=h.useMemo(()=>t?n=>{if(n!=null)return e(n)}:ui,[t,e]);return Ky.useSyncExternalStoreWithSelector(t?t.subscription.addNestedSub:_0,t?t.store.getState:ui,t?t.store.getState:ui,r,I0)}function C0(e,t=`expected a function, instead received ${typeof e}`){if(typeof e!="function")throw new TypeError(t)}function k0(e,t="expected all items to be functions, instead received the following types: "){if(!e.every(r=>typeof r=="function")){const r=e.map(n=>typeof n=="function"?`function ${n.name||"unnamed"}()`:typeof n).join(", ");throw new TypeError(`${t}[${r}]`)}}var nc=e=>Array.isArray(e)?e:[e];function j0(e){const t=Array.isArray(e[0])?e[0]:e;return k0(t,"createSelector expects all input-selectors to be functions, but received the following types: "),t}function T0(e,t){const r=[],{length:n}=e;for(let i=0;itypeof WeakRef>"u"?M0:WeakRef,pv=D0(),$0=0,ic=1;function Gn(){return{s:$0,v:void 0,o:null,p:null}}function N0(e){return e instanceof pv?e.deref():e}function mv(e,t={}){let r=Gn();const{resultEqualityCheck:n}=t;let i,a=0;function o(){let u=r;const{length:l}=arguments;for(let f=0,d=l;f{r=Gn(),o.resetResultsCount()},o.resultsCount=()=>a,o.resetResultsCount=()=>{a=0},o}function L0(e,...t){const r=typeof e=="function"?{memoize:e,memoizeOptions:t}:e,n=(...i)=>{let a=0,o=0,u,l={},c=i.pop();typeof c=="object"&&(l=c,c=i.pop()),C0(c,`createSelector expects an output function after the inputs, but received: [${typeof c}]`);const s={...r,...l},{memoize:f,memoizeOptions:d=[],argsMemoize:v=mv,argsMemoizeOptions:p=[]}=s,m=nc(d),y=nc(p),g=j0(i),w=f(function(){return a++,c.apply(null,arguments)},...m),x=v(function(){o++;const O=T0(g,arguments);return u=w.apply(null,O),u},...y);return Object.assign(x,{resultFunc:c,memoizedResultFunc:w,dependencies:g,dependencyRecomputations:()=>o,resetDependencyRecomputations:()=>{o=0},lastResult:()=>u,recomputations:()=>a,resetRecomputations:()=>{a=0},memoize:f,argsMemoize:v})};return Object.assign(n,{withTypes:()=>n}),n}var P=L0(mv);function R0(e,t=1){const r=[],n=Math.floor(t),i=(a,o)=>{for(let u=0;u{if(e!==t){const n=ac(e),i=ac(t);if(n===i&&n===0){if(et)return r==="desc"?-1:1}return r==="desc"?i-n:n-i}return 0};function yv(e){return typeof e=="symbol"||e instanceof Symbol}const B0=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,F0=/^\w*$/;function W0(e,t){return Array.isArray(e)?!1:typeof e=="number"||typeof e=="boolean"||e==null||yv(e)?!0:typeof e=="string"&&(F0.test(e)||!B0.test(e))||t!=null}function U0(e,t,r,n){if(e==null)return[];r=r,Array.isArray(e)||(e=Object.values(e)),Array.isArray(t)||(t=t==null?[null]:[t]),t.length===0&&(t=[null]),Array.isArray(r)||(r=r==null?[]:[r]),r=r.map(u=>String(u));const i=(u,l)=>{let c=u;for(let s=0;sl==null||u==null?l:typeof u=="object"&&"key"in u?Object.hasOwn(l,u.key)?l[u.key]:i(l,u.path):typeof u=="function"?u(l):Array.isArray(u)?i(l,u):typeof l=="object"?l[u]:l,o=t.map(u=>(Array.isArray(u)&&u.length===1&&(u=u[0]),u==null||typeof u=="function"||Array.isArray(u)||W0(u)?u:{key:u,path:gu(u)}));return e.map(u=>({original:u,criteria:o.map(l=>a(l,u))})).slice().sort((u,l)=>{for(let c=0;cu.original)}function ua(e,...t){const r=t.length;return r>1&&jo(e,t[0],t[1])?t=[]:r>2&&jo(t[0],t[1],t[2])&&(t=[t[0]]),U0(e,R0(t),["asc"])}var gv=e=>e.legend.settings,K0=e=>e.legend.size,H0=e=>e.legend.payload;P([H0,gv],(e,t)=>{var r=t.itemSorter,n=e.flat(1);return r?ua(n,r):n});function Y0(e,t){return X0(e)||q0(e,t)||V0(e,t)||G0()}function G0(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function V0(e,t){if(e){if(typeof e=="string")return oc(e,t);var r={}.toString.call(e).slice(8,-1);return r==="Object"&&e.constructor&&(r=e.constructor.name),r==="Map"||r==="Set"?Array.from(e):r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?oc(e,t):void 0}}function oc(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);rVn||Math.abs(e.left-t.left)>Vn||Math.abs(e.top-t.top)>Vn||Math.abs(e.width-t.width)>Vn}function lc(e){var t=e.getBoundingClientRect();return{height:t.height,left:t.left,top:t.top,width:t.width}}function Z0(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],t=h.useState({height:0,left:0,top:0,width:0}),r=Y0(t,2),n=r[0],i=r[1],a=h.useRef(null),o=h.useRef(n);o.current=n;var u=h.useCallback(l=>{if(a.current!=null&&(a.current.disconnect(),a.current=null),l!=null){var c=lc(l);if(uc(c,o.current)&&i(c),typeof ResizeObserver<"u"){var s=new ResizeObserver(()=>{var f=lc(l);uc(f,o.current)&&i(f)});s.observe(l),a.current=s}}},[...e]);return h.useEffect(()=>()=>{var l;(l=a.current)===null||l===void 0||l.disconnect()},[]),[n,u]}function be(e){return`Minified Redux error #${e}; visit https://redux.js.org/Errors?code=${e} for the full message or use the non-minified dev environment for full errors. `}var Q0=typeof Symbol=="function"&&Symbol.observable||"@@observable",cc=Q0,Va=()=>Math.random().toString(36).substring(7).split("").join("."),J0={INIT:`@@redux/INIT${Va()}`,REPLACE:`@@redux/REPLACE${Va()}`,PROBE_UNKNOWN_ACTION:()=>`@@redux/PROBE_UNKNOWN_ACTION${Va()}`},mi=J0;function Ou(e){if(typeof e!="object"||e===null)return!1;let t=e;for(;Object.getPrototypeOf(t)!==null;)t=Object.getPrototypeOf(t);return Object.getPrototypeOf(e)===t||Object.getPrototypeOf(e)===null}function bv(e,t,r){if(typeof e!="function")throw new Error(be(2));if(typeof t=="function"&&typeof r=="function"||typeof r=="function"&&typeof arguments[3]=="function")throw new Error(be(0));if(typeof t=="function"&&typeof r>"u"&&(r=t,t=void 0),typeof r<"u"){if(typeof r!="function")throw new Error(be(1));return r(bv)(e,t)}let n=e,i=t,a=new Map,o=a,u=0,l=!1;function c(){o===a&&(o=new Map,a.forEach((y,g)=>{o.set(g,y)}))}function s(){if(l)throw new Error(be(3));return i}function f(y){if(typeof y!="function")throw new Error(be(4));if(l)throw new Error(be(5));let g=!0;c();const w=u++;return o.set(w,y),function(){if(g){if(l)throw new Error(be(6));g=!1,c(),o.delete(w),a=null}}}function d(y){if(!Ou(y))throw new Error(be(7));if(typeof y.type>"u")throw new Error(be(8));if(typeof y.type!="string")throw new Error(be(17));if(l)throw new Error(be(9));try{l=!0,i=n(i,y)}finally{l=!1}return(a=o).forEach(w=>{w()}),y}function v(y){if(typeof y!="function")throw new Error(be(10));n=y,d({type:mi.REPLACE})}function p(){const y=f;return{subscribe(g){if(typeof g!="object"||g===null)throw new Error(be(11));function w(){const A=g;A.next&&A.next(s())}return w(),{unsubscribe:y(w)}},[cc](){return this}}}return d({type:mi.INIT}),{dispatch:d,subscribe:f,getState:s,replaceReducer:v,[cc]:p}}function eb(e){Object.keys(e).forEach(t=>{const r=e[t];if(typeof r(void 0,{type:mi.INIT})>"u")throw new Error(be(12));if(typeof r(void 0,{type:mi.PROBE_UNKNOWN_ACTION()})>"u")throw new Error(be(13))})}function wv(e){const t=Object.keys(e),r={};for(let a=0;a"u")throw u&&u.type,new Error(be(14));c[f]=p,l=l||p!==v}return l=l||n.length!==Object.keys(o).length,l?c:o}}function yi(...e){return e.length===0?t=>t:e.length===1?e[0]:e.reduce((t,r)=>(...n)=>t(r(...n)))}function tb(...e){return t=>(r,n)=>{const i=t(r,n);let a=()=>{throw new Error(be(15))};const o={getState:i.getState,dispatch:(l,...c)=>a(l,...c)},u=e.map(l=>l(o));return a=yi(...u)(i.dispatch),{...i,dispatch:a}}}function xv(e){return Ou(e)&&"type"in e&&typeof e.type=="string"}var Av=Symbol.for("immer-nothing"),sc=Symbol.for("immer-draftable"),Te=Symbol.for("immer-state");function rt(e,...t){throw new Error(`[Immer] minified error nr: ${e}. Full error at: https://bit.ly/3cXEKWf`)}var Be=Object,Mr=Be.getPrototypeOf,gi="constructor",la="prototype",To="configurable",bi="enumerable",li="writable",gn="value",It=e=>!!e&&!!e[Te];function at(e){var t;return e?Ov(e)||sa(e)||!!e[sc]||!!((t=e[gi])!=null&&t[sc])||fa(e)||da(e):!1}var rb=Be[la][gi].toString(),fc=new WeakMap;function Ov(e){if(!e||!Pu(e))return!1;const t=Mr(e);if(t===null||t===Be[la])return!0;const r=Be.hasOwnProperty.call(t,gi)&&t[gi];if(r===Object)return!0;if(!Ir(r))return!1;let n=fc.get(r);return n===void 0&&(n=Function.toString.call(r),fc.set(r,n)),n===rb}function ca(e,t,r=!0){kn(e)===0?(r?Reflect.ownKeys(e):Be.keys(e)).forEach(i=>{t(i,e[i],e)}):e.forEach((n,i)=>t(i,n,e))}function kn(e){const t=e[Te];return t?t.type_:sa(e)?1:fa(e)?2:da(e)?3:0}var dc=(e,t,r=kn(e))=>r===2?e.has(t):Be[la].hasOwnProperty.call(e,t),Mo=(e,t,r=kn(e))=>r===2?e.get(t):e[t],wi=(e,t,r,n=kn(e))=>{n===2?e.set(t,r):n===3?e.add(r):e[t]=r};function nb(e,t){return e===t?e!==0||1/e===1/t:e!==e&&t!==t}var sa=Array.isArray,fa=e=>e instanceof Map,da=e=>e instanceof Set,Pu=e=>typeof e=="object",Ir=e=>typeof e=="function",qa=e=>typeof e=="boolean";function ib(e){const t=+e;return Number.isInteger(t)&&String(t)===e}var xt=e=>e.copy_||e.base_,Su=e=>e.modified_?e.copy_:e.base_;function Do(e,t){if(fa(e))return new Map(e);if(da(e))return new Set(e);if(sa(e))return Array[la].slice.call(e);const r=Ov(e);if(t===!0||t==="class_only"&&!r){const n=Be.getOwnPropertyDescriptors(e);delete n[Te];let i=Reflect.ownKeys(n);for(let a=0;a1&&Be.defineProperties(e,{set:qn,add:qn,clear:qn,delete:qn}),Be.freeze(e),t&&ca(e,(r,n)=>{Eu(n,!0)},!1)),e}function ab(){rt(2)}var qn={[gn]:ab};function va(e){return e===null||!Pu(e)?!0:Be.isFrozen(e)}var xi="MapSet",$o="Patches",vc="ArrayMethods",Pv={};function fr(e){const t=Pv[e];return t||rt(0,e),t}var hc=e=>!!Pv[e],bn,Sv=()=>bn,ob=(e,t)=>({drafts_:[],parent_:e,immer_:t,canAutoFreeze_:!0,unfinalizedDrafts_:0,handledSet_:new Set,processedForPatches_:new Set,mapSetPlugin_:hc(xi)?fr(xi):void 0,arrayMethodsPlugin_:hc(vc)?fr(vc):void 0});function pc(e,t){t&&(e.patchPlugin_=fr($o),e.patches_=[],e.inversePatches_=[],e.patchListener_=t)}function No(e){Lo(e),e.drafts_.forEach(ub),e.drafts_=null}function Lo(e){e===bn&&(bn=e.parent_)}var mc=e=>bn=ob(bn,e);function ub(e){const t=e[Te];t.type_===0||t.type_===1?t.revoke_():t.revoked_=!0}function yc(e,t){t.unfinalizedDrafts_=t.drafts_.length;const r=t.drafts_[0];if(e!==void 0&&e!==r){r[Te].modified_&&(No(t),rt(4)),at(e)&&(e=gc(t,e));const{patchPlugin_:i}=t;i&&i.generateReplacementPatches_(r[Te].base_,e,t)}else e=gc(t,r);return lb(t,e,!0),No(t),t.patches_&&t.patchListener_(t.patches_,t.inversePatches_),e!==Av?e:void 0}function gc(e,t){if(va(t))return t;const r=t[Te];if(!r)return Ai(t,e.handledSet_,e);if(!ha(r,e))return t;if(!r.modified_)return r.base_;if(!r.finalized_){const{callbacks_:n}=r;if(n)for(;n.length>0;)n.pop()(e);Iv(r,e)}return r.copy_}function lb(e,t,r=!1){!e.parent_&&e.immer_.autoFreeze_&&e.canAutoFreeze_&&Eu(t,r)}function Ev(e){e.finalized_=!0,e.scope_.unfinalizedDrafts_--}var ha=(e,t)=>e.scope_===t,cb=[];function _v(e,t,r,n){const i=xt(e),a=e.type_;if(n!==void 0&&Mo(i,n,a)===t){wi(i,n,r,a);return}if(!e.draftLocations_){const u=e.draftLocations_=new Map;ca(i,(l,c)=>{if(It(c)){const s=u.get(c)||[];s.push(l),u.set(c,s)}})}const o=e.draftLocations_.get(t)??cb;for(const u of o)wi(i,u,r,a)}function sb(e,t,r){e.callbacks_.push(function(i){var u;const a=t;if(!a||!ha(a,i))return;(u=i.mapSetPlugin_)==null||u.fixSetContents(a);const o=Su(a);_v(e,a.draft_??a,o,r),Iv(a,i)})}function Iv(e,t){var n;if(e.modified_&&!e.finalized_&&(e.type_===3||e.type_===1&&e.allIndicesReassigned_||(((n=e.assigned_)==null?void 0:n.size)??0)>0)){const{patchPlugin_:i}=t;if(i){const a=i.getPath(e);a&&i.generatePatches_(e,a,t)}Ev(e)}}function fb(e,t,r){const{scope_:n}=e;if(It(r)){const i=r[Te];ha(i,n)&&i.callbacks_.push(function(){ci(e);const o=Su(i);_v(e,r,o,t)})}else at(r)&&e.callbacks_.push(function(){const a=xt(e);e.type_===3?a.has(r)&&Ai(r,n.handledSet_,n):Mo(a,t,e.type_)===r&&n.drafts_.length>1&&(e.assigned_.get(t)??!1)===!0&&e.copy_&&Ai(Mo(e.copy_,t,e.type_),n.handledSet_,n)})}function Ai(e,t,r){return!r.immer_.autoFreeze_&&r.unfinalizedDrafts_<1||It(e)||t.has(e)||!at(e)||va(e)||(t.add(e),ca(e,(n,i)=>{if(It(i)){const a=i[Te];if(ha(a,r)){const o=Su(a);wi(e,n,o,e.type_),Ev(a)}}else at(i)&&Ai(i,t,r)})),e}function db(e,t){const r=sa(e),n={type_:r?1:0,scope_:t?t.scope_:Sv(),modified_:!1,finalized_:!1,assigned_:void 0,parent_:t,base_:e,draft_:null,copy_:null,revoke_:null,isManual_:!1,callbacks_:void 0};let i=n,a=Oi;r&&(i=[n],a=wn);const{revoke:o,proxy:u}=Proxy.revocable(i,a);return n.draft_=u,n.revoke_=o,[u,n]}var Oi={get(e,t){if(t===Te)return e;let r=e.scope_.arrayMethodsPlugin_;const n=e.type_===1&&typeof t=="string";if(n&&r!=null&&r.isArrayOperationMethod(t))return r.createMethodInterceptor(e,t);const i=xt(e);if(!dc(i,t,e.type_))return vb(e,i,t);const a=i[t];if(e.finalized_||!at(a)||n&&e.operationMethod&&(r!=null&&r.isMutatingArrayMethod(e.operationMethod))&&ib(t))return a;if(a===Xa(e.base_,t)){ci(e);const o=e.type_===1?+t:t,u=zo(e.scope_,a,e,o);return e.copy_[o]=u}return a},has(e,t){return t in xt(e)},ownKeys(e){return Reflect.ownKeys(xt(e))},set(e,t,r){const n=Cv(xt(e),t);if(n!=null&&n.set)return n.set.call(e.draft_,r),!0;if(!e.modified_){const i=Xa(xt(e),t),a=i==null?void 0:i[Te];if(a&&a.base_===r)return e.copy_[t]=r,e.assigned_.set(t,!1),!0;if(nb(r,i)&&(r!==void 0||dc(e.base_,t,e.type_)))return!0;ci(e),Ro(e)}return e.copy_[t]===r&&(r!==void 0||t in e.copy_)||Number.isNaN(r)&&Number.isNaN(e.copy_[t])||(e.copy_[t]=r,e.assigned_.set(t,!0),fb(e,t,r)),!0},deleteProperty(e,t){return ci(e),Xa(e.base_,t)!==void 0||t in e.base_?(e.assigned_.set(t,!1),Ro(e)):e.assigned_.delete(t),e.copy_&&delete e.copy_[t],!0},getOwnPropertyDescriptor(e,t){const r=xt(e),n=Reflect.getOwnPropertyDescriptor(r,t);return n&&{[li]:!0,[To]:e.type_!==1||t!=="length",[bi]:n[bi],[gn]:r[t]}},defineProperty(){rt(11)},getPrototypeOf(e){return Mr(e.base_)},setPrototypeOf(){rt(12)}},wn={};for(let e in Oi){let t=Oi[e];wn[e]=function(){const r=arguments;return r[0]=r[0][0],t.apply(this,r)}}wn.deleteProperty=function(e,t){return wn.set.call(this,e,t,void 0)};wn.set=function(e,t,r){return Oi.set.call(this,e[0],t,r,e[0])};function Xa(e,t){const r=e[Te];return(r?xt(r):e)[t]}function vb(e,t,r){var i;const n=Cv(t,r);return n?gn in n?n[gn]:(i=n.get)==null?void 0:i.call(e.draft_):void 0}function Cv(e,t){if(!(t in e))return;let r=Mr(e);for(;r;){const n=Object.getOwnPropertyDescriptor(r,t);if(n)return n;r=Mr(r)}}function Ro(e){e.modified_||(e.modified_=!0,e.parent_&&Ro(e.parent_))}function ci(e){e.copy_||(e.assigned_=new Map,e.copy_=Do(e.base_,e.scope_.immer_.useStrictShallowCopy_))}var hb=class{constructor(t){this.autoFreeze_=!0,this.useStrictShallowCopy_=!1,this.useStrictIteration_=!1,this.produce=(r,n,i)=>{if(Ir(r)&&!Ir(n)){const o=n;n=r;const u=this;return function(c=o,...s){return u.produce(c,f=>n.call(this,f,...s))}}Ir(n)||rt(6),i!==void 0&&!Ir(i)&&rt(7);let a;if(at(r)){const o=mc(this),u=zo(o,r,void 0);let l=!0;try{a=n(u),l=!1}finally{l?No(o):Lo(o)}return pc(o,i),yc(a,o)}else if(!r||!Pu(r)){if(a=n(r),a===void 0&&(a=r),a===Av&&(a=void 0),this.autoFreeze_&&Eu(a,!0),i){const o=[],u=[];fr($o).generateReplacementPatches_(r,a,{patches_:o,inversePatches_:u}),i(o,u)}return a}else rt(1,r)},this.produceWithPatches=(r,n)=>{if(Ir(r))return(u,...l)=>this.produceWithPatches(u,c=>r(c,...l));let i,a;return[this.produce(r,n,(u,l)=>{i=u,a=l}),i,a]},qa(t==null?void 0:t.autoFreeze)&&this.setAutoFreeze(t.autoFreeze),qa(t==null?void 0:t.useStrictShallowCopy)&&this.setUseStrictShallowCopy(t.useStrictShallowCopy),qa(t==null?void 0:t.useStrictIteration)&&this.setUseStrictIteration(t.useStrictIteration)}createDraft(t){at(t)||rt(8),It(t)&&(t=Ye(t));const r=mc(this),n=zo(r,t,void 0);return n[Te].isManual_=!0,Lo(r),n}finishDraft(t,r){const n=t&&t[Te];(!n||!n.isManual_)&&rt(9);const{scope_:i}=n;return pc(i,r),yc(void 0,i)}setAutoFreeze(t){this.autoFreeze_=t}setUseStrictShallowCopy(t){this.useStrictShallowCopy_=t}setUseStrictIteration(t){this.useStrictIteration_=t}shouldUseStrictIteration(){return this.useStrictIteration_}applyPatches(t,r){let n;for(n=r.length-1;n>=0;n--){const a=r[n];if(a.path.length===0&&a.op==="replace"){t=a.value;break}}n>-1&&(r=r.slice(n+1));const i=fr($o).applyPatches_;return It(t)?i(t,r):this.produce(t,a=>i(a,r))}};function zo(e,t,r,n){const[i,a]=fa(t)?fr(xi).proxyMap_(t,r):da(t)?fr(xi).proxySet_(t,r):db(t,r);return((r==null?void 0:r.scope_)??Sv()).drafts_.push(i),a.callbacks_=(r==null?void 0:r.callbacks_)??[],a.key_=n,r&&n!==void 0?sb(r,a,n):a.callbacks_.push(function(l){var s;(s=l.mapSetPlugin_)==null||s.fixSetContents(a);const{patchPlugin_:c}=l;a.modified_&&c&&c.generatePatches_(a,[],l)}),i}function Ye(e){return It(e)||rt(10,e),kv(e)}function kv(e){if(!at(e)||va(e))return e;const t=e[Te];let r,n=!0;if(t){if(!t.modified_)return t.base_;t.finalized_=!0,r=Do(e,t.scope_.immer_.useStrictShallowCopy_),n=t.scope_.immer_.shouldUseStrictIteration()}else r=Do(e,!0);return ca(r,(i,a)=>{wi(r,i,kv(a))},n),t&&(t.finalized_=!1),r}var pb=new hb,jv=pb.produce;function Tv(e){return({dispatch:r,getState:n})=>i=>a=>typeof a=="function"?a(r,n,e):i(a)}var mb=Tv(),yb=Tv,gb=typeof window<"u"&&window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__?window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__:function(){if(arguments.length!==0)return typeof arguments[0]=="object"?yi:yi.apply(null,arguments)};function We(e,t){function r(...n){if(t){let i=t(...n);if(!i)throw new Error(Fe(0));return{type:e,payload:i.payload,..."meta"in i&&{meta:i.meta},..."error"in i&&{error:i.error}}}return{type:e,payload:n[0]}}return r.toString=()=>`${e}`,r.type=e,r.match=n=>xv(n)&&n.type===e,r}var Mv=class fn extends Array{constructor(...t){super(...t),Object.setPrototypeOf(this,fn.prototype)}static get[Symbol.species](){return fn}concat(...t){return super.concat.apply(this,t)}prepend(...t){return t.length===1&&Array.isArray(t[0])?new fn(...t[0].concat(this)):new fn(...t.concat(this))}};function bc(e){return at(e)?jv(e,()=>{}):e}function Xn(e,t,r){return e.has(t)?e.get(t):e.set(t,r(t)).get(t)}function bb(e){return typeof e=="boolean"}var wb=()=>function(t){const{thunk:r=!0,immutableCheck:n=!0,serializableCheck:i=!0,actionCreatorCheck:a=!0}=t??{};let o=new Mv;return r&&(bb(r)?o.push(mb):o.push(yb(r.extraArgument))),o},Dv="RTK_autoBatch",Q=()=>e=>({payload:e,meta:{[Dv]:!0}}),wc=e=>t=>{setTimeout(t,e)},xb=(e,t)=>r=>{let n=!1;const i=()=>{n||(n=!0,cancelAnimationFrame(a),clearTimeout(o),r())},a=e(i),o=setTimeout(i,t)},$v=(e={type:"raf"})=>t=>(...r)=>{const n=t(...r);let i=!0,a=!1,o=!1;const u=new Set,l=e.type==="tick"?queueMicrotask:e.type==="raf"?typeof window<"u"&&window.requestAnimationFrame?xb(window.requestAnimationFrame,100):wc(10):e.type==="callback"?e.queueNotification:wc(e.timeout),c=()=>{o=!1,a&&(a=!1,u.forEach(s=>s()))};return Object.assign({},n,{subscribe(s){const f=()=>i&&s(),d=n.subscribe(f);return u.add(s),()=>{d(),u.delete(s)}},dispatch(s){var f;try{return i=!((f=s==null?void 0:s.meta)!=null&&f[Dv]),a=!i,a&&(o||(o=!0,l(c))),n.dispatch(s)}finally{i=!0}}})},Ab=e=>function(r){const{autoBatch:n=!0}=r??{};let i=new Mv(e);return n&&i.push($v(typeof n=="object"?n:void 0)),i};function Ob(e){const t=wb(),{reducer:r=void 0,middleware:n,devTools:i=!0,preloadedState:a=void 0,enhancers:o=void 0}=e||{};let u;if(typeof r=="function")u=r;else if(Ou(r))u=wv(r);else throw new Error(Fe(1));let l;typeof n=="function"?l=n(t):l=t();let c=yi;i&&(c=gb({trace:!1,...typeof i=="object"&&i}));const s=tb(...l),f=Ab(s);let d=typeof o=="function"?o(f):f();const v=c(...d);return bv(u,a,v)}function Nv(e){const t={},r=[];let n;const i={addCase(a,o){const u=typeof a=="string"?a:a.type;if(!u)throw new Error(Fe(28));if(u in t)throw new Error(Fe(29));return t[u]=o,i},addAsyncThunk(a,o){return o.pending&&(t[a.pending.type]=o.pending),o.rejected&&(t[a.rejected.type]=o.rejected),o.fulfilled&&(t[a.fulfilled.type]=o.fulfilled),o.settled&&r.push({matcher:a.settled,reducer:o.settled}),i},addMatcher(a,o){return r.push({matcher:a,reducer:o}),i},addDefaultCase(a){return n=a,i}};return e(i),[t,r,n]}function Pb(e){return typeof e=="function"}function Sb(e,t){let[r,n,i]=Nv(t),a;if(Pb(e))a=()=>bc(e());else{const u=bc(e);a=()=>u}function o(u=a(),l){let c=[r[l.type],...n.filter(({matcher:s})=>s(l)).map(({reducer:s})=>s)];return c.filter(s=>!!s).length===0&&(c=[i]),c.reduce((s,f)=>{if(f)if(It(s)){const v=f(s,l);return v===void 0?s:v}else{if(at(s))return jv(s,d=>f(d,l));{const d=f(s,l);if(d===void 0){if(s===null)return s;throw Error("A case reducer on a non-draftable value must not return undefined")}return d}}return s},u)}return o.getInitialState=a,o}var Eb="ModuleSymbhasOwnPr-0123456789ABCDEFGHNRVfgctiUvz_KqYTJkLxpZXIjQW",_b=(e=21)=>{let t="",r=e;for(;r--;)t+=Eb[Math.random()*64|0];return t},Ib=Symbol.for("rtk-slice-createasyncthunk");function Cb(e,t){return`${e}/${t}`}function kb({creators:e}={}){var r;const t=(r=e==null?void 0:e.asyncThunk)==null?void 0:r[Ib];return function(i){const{name:a,reducerPath:o=a}=i;if(!a)throw new Error(Fe(11));const u=(typeof i.reducers=="function"?i.reducers(Tb()):i.reducers)||{},l=Object.keys(u),c={sliceCaseReducersByName:{},sliceCaseReducersByType:{},actionCreators:{},sliceMatchers:[]},s={addCase(A,O){const b=typeof A=="string"?A:A.type;if(!b)throw new Error(Fe(12));if(b in c.sliceCaseReducersByType)throw new Error(Fe(13));return c.sliceCaseReducersByType[b]=O,s},addMatcher(A,O){return c.sliceMatchers.push({matcher:A,reducer:O}),s},exposeAction(A,O){return c.actionCreators[A]=O,s},exposeCaseReducer(A,O){return c.sliceCaseReducersByName[A]=O,s}};l.forEach(A=>{const O=u[A],b={reducerName:A,type:Cb(a,A),createNotation:typeof i.reducers=="function"};Db(O)?Nb(b,O,s,t):Mb(b,O,s)});function f(){const[A={},O=[],b=void 0]=typeof i.extraReducers=="function"?Nv(i.extraReducers):[i.extraReducers],S={...A,...c.sliceCaseReducersByType};return Sb(i.initialState,_=>{for(let I in S)_.addCase(I,S[I]);for(let I of c.sliceMatchers)_.addMatcher(I.matcher,I.reducer);for(let I of O)_.addMatcher(I.matcher,I.reducer);b&&_.addDefaultCase(b)})}const d=A=>A,v=new Map,p=new WeakMap;let m;function y(A,O){return m||(m=f()),m(A,O)}function g(){return m||(m=f()),m.getInitialState()}function w(A,O=!1){function b(_){let I=_[A];return typeof I>"u"&&O&&(I=Xn(p,b,g)),I}function S(_=d){const I=Xn(v,O,()=>new WeakMap);return Xn(I,_,()=>{const C={};for(const[j,E]of Object.entries(i.selectors??{}))C[j]=jb(E,_,()=>Xn(p,_,g),O);return C})}return{reducerPath:A,getSelectors:S,get selectors(){return S(b)},selectSlice:b}}const x={name:a,reducer:y,actions:c.actionCreators,caseReducers:c.sliceCaseReducersByName,getInitialState:g,...w(o),injectInto(A,{reducerPath:O,...b}={}){const S=O??o;return A.inject({reducerPath:S,reducer:y},b),{...x,...w(S,!0)}}};return x}}function jb(e,t,r,n){function i(a,...o){let u=t(a);return typeof u>"u"&&n&&(u=r()),e(u,...o)}return i.unwrapped=e,i}var Ce=kb();function Tb(){function e(t,r){return{_reducerDefinitionType:"asyncThunk",payloadCreator:t,...r}}return e.withTypes=()=>e,{reducer(t){return Object.assign({[t.name](...r){return t(...r)}}[t.name],{_reducerDefinitionType:"reducer"})},preparedReducer(t,r){return{_reducerDefinitionType:"reducerWithPrepare",prepare:t,reducer:r}},asyncThunk:e}}function Mb({type:e,reducerName:t,createNotation:r},n,i){let a,o;if("reducer"in n){if(r&&!$b(n))throw new Error(Fe(17));a=n.reducer,o=n.prepare}else a=n;i.addCase(e,a).exposeCaseReducer(t,a).exposeAction(t,o?We(e,o):We(e))}function Db(e){return e._reducerDefinitionType==="asyncThunk"}function $b(e){return e._reducerDefinitionType==="reducerWithPrepare"}function Nb({type:e,reducerName:t},r,n,i){if(!i)throw new Error(Fe(18));const{payloadCreator:a,fulfilled:o,pending:u,rejected:l,settled:c,options:s}=r,f=i(e,a,s);n.exposeAction(t,f),o&&n.addCase(f.fulfilled,o),u&&n.addCase(f.pending,u),l&&n.addCase(f.rejected,l),c&&n.addMatcher(f.settled,c),n.exposeCaseReducer(t,{fulfilled:o||Zn,pending:u||Zn,rejected:l||Zn,settled:c||Zn})}function Zn(){}var Lb="task",Lv="listener",Rv="completed",_u="cancelled",Rb=`task-${_u}`,zb=`task-${Rv}`,Bo=`${Lv}-${_u}`,Bb=`${Lv}-${Rv}`,pa=class{constructor(e){Hn(this,"code");Hn(this,"name","TaskAbortError");Hn(this,"message");this.code=e,this.message=`${Lb} ${_u} (reason: ${e})`}},Iu=(e,t)=>{if(typeof e!="function")throw new TypeError(Fe(32))},Pi=()=>{},zv=(e,t=Pi)=>(e.catch(t),e),Bv=(e,t)=>(e.addEventListener("abort",t,{once:!0}),()=>e.removeEventListener("abort",t)),ur=e=>{if(e.aborted)throw new pa(e.reason)};function Fv(e,t){let r=Pi;return new Promise((n,i)=>{const a=()=>i(new pa(e.reason));if(e.aborted){a();return}r=Bv(e,a),t.finally(()=>r()).then(n,i)}).finally(()=>{r=Pi})}var Fb=async(e,t)=>{try{return await Promise.resolve(),{status:"ok",value:await e()}}catch(r){return{status:r instanceof pa?"cancelled":"rejected",error:r}}finally{t==null||t()}},Si=e=>t=>zv(Fv(e,t).then(r=>(ur(e),r))),Wv=e=>{const t=Si(e);return r=>t(new Promise(n=>setTimeout(n,r)))},{assign:jr}=Object,xc={},ma="listenerMiddleware",Wb=(e,t)=>{const r=n=>Bv(e,()=>n.abort(e.reason));return(n,i)=>{Iu(n);const a=new AbortController;r(a);const o=Fb(async()=>{ur(e),ur(a.signal);const u=await n({pause:Si(a.signal),delay:Wv(a.signal),signal:a.signal});return ur(a.signal),u},()=>a.abort(zb));return i!=null&&i.autoJoin&&t.push(o.catch(Pi)),{result:Si(e)(o),cancel(){a.abort(Rb)}}}},Ub=(e,t)=>{const r=async(n,i)=>{ur(t);let a=()=>{};const u=[new Promise((l,c)=>{let s=e({predicate:n,effect:(f,d)=>{d.unsubscribe(),l([f,d.getState(),d.getOriginalState()])}});a=()=>{s(),c()}})];i!=null&&u.push(new Promise(l=>setTimeout(l,i,null)));try{const l=await Fv(t,Promise.race(u));return ur(t),l}finally{a()}};return((n,i)=>zv(r(n,i)))},Uv=e=>{let{type:t,actionCreator:r,matcher:n,predicate:i,effect:a}=e;if(t)i=We(t).match;else if(r)t=r.type,i=r.match;else if(n)i=n;else if(!i)throw new Error(Fe(21));return Iu(a),{predicate:i,type:t,effect:a}},Kv=jr(e=>{const{type:t,predicate:r,effect:n}=Uv(e);return{id:_b(),effect:n,type:t,predicate:r,pending:new Set,unsubscribe:()=>{throw new Error(Fe(22))}}},{withTypes:()=>Kv}),Ac=(e,t)=>{const{type:r,effect:n,predicate:i}=Uv(t);return Array.from(e.values()).find(a=>(typeof r=="string"?a.type===r:a.predicate===i)&&a.effect===n)},Fo=e=>{e.pending.forEach(t=>{t.abort(Bo)})},Kb=(e,t)=>()=>{for(const r of t.keys())Fo(r);e.clear()},Oc=(e,t,r)=>{try{e(t,r)}catch(n){setTimeout(()=>{throw n},0)}},Hv=jr(We(`${ma}/add`),{withTypes:()=>Hv}),Hb=We(`${ma}/removeAll`),Yv=jr(We(`${ma}/remove`),{withTypes:()=>Yv}),Yb=(...e)=>{console.error(`${ma}/error`,...e)},jn=(e={})=>{const t=new Map,r=new Map,n=v=>{const p=r.get(v)??0;r.set(v,p+1)},i=v=>{const p=r.get(v)??1;p===1?r.delete(v):r.set(v,p-1)},{extra:a,onError:o=Yb}=e;Iu(o);const u=v=>(v.unsubscribe=()=>t.delete(v.id),t.set(v.id,v),p=>{v.unsubscribe(),p!=null&&p.cancelActive&&Fo(v)}),l=(v=>{const p=Ac(t,v)??Kv(v);return u(p)});jr(l,{withTypes:()=>l});const c=v=>{const p=Ac(t,v);return p&&(p.unsubscribe(),v.cancelActive&&Fo(p)),!!p};jr(c,{withTypes:()=>c});const s=async(v,p,m,y)=>{const g=new AbortController,w=Ub(l,g.signal),x=[];try{v.pending.add(g),n(v),await Promise.resolve(v.effect(p,jr({},m,{getOriginalState:y,condition:(A,O)=>w(A,O).then(Boolean),take:w,delay:Wv(g.signal),pause:Si(g.signal),extra:a,signal:g.signal,fork:Wb(g.signal,x),unsubscribe:v.unsubscribe,subscribe:()=>{t.set(v.id,v)},cancelActiveListeners:()=>{v.pending.forEach((A,O,b)=>{A!==g&&(A.abort(Bo),b.delete(A))})},cancel:()=>{g.abort(Bo),v.pending.delete(g)},throwIfCancelled:()=>{ur(g.signal)}})))}catch(A){A instanceof pa||Oc(o,A,{raisedBy:"effect"})}finally{await Promise.all(x),g.abort(Bb),i(v),v.pending.delete(g)}},f=Kb(t,r);return{middleware:v=>p=>m=>{if(!xv(m))return p(m);if(Hv.match(m))return l(m.payload);if(Hb.match(m)){f();return}if(Yv.match(m))return c(m.payload);let y=v.getState();const g=()=>{if(y===xc)throw new Error(Fe(23));return y};let w;try{if(w=p(m),t.size>0){const x=v.getState(),A=Array.from(t.values());for(const O of A){let b=!1;try{b=O.predicate(m,x,y)}catch(S){b=!1,Oc(o,S,{raisedBy:"predicate"})}b&&s(O,m,v,g)}}}finally{y=xc}return w},startListening:l,stopListening:c,clearListeners:f}};function Fe(e){return`Minified Redux Toolkit error #${e}; visit https://redux-toolkit.js.org/Errors?code=${e} for the full message or use the non-minified dev environment for full errors. `}var Gb={layoutType:"horizontal",width:0,height:0,margin:{top:5,right:5,bottom:5,left:5},scale:1},Gv=Ce({name:"chartLayout",initialState:Gb,reducers:{setLayout(e,t){e.layoutType=t.payload},setChartSize(e,t){e.width=t.payload.width,e.height=t.payload.height},setMargin(e,t){var r,n,i,a;e.margin.top=(r=t.payload.top)!==null&&r!==void 0?r:0,e.margin.right=(n=t.payload.right)!==null&&n!==void 0?n:0,e.margin.bottom=(i=t.payload.bottom)!==null&&i!==void 0?i:0,e.margin.left=(a=t.payload.left)!==null&&a!==void 0?a:0},setScale(e,t){e.scale=t.payload}}}),ya=Gv.actions,Vb=ya.setMargin,qb=ya.setLayout,Xb=ya.setChartSize,Zb=ya.setScale,Qb=Gv.reducer;function Vv(e,t,r){return Array.isArray(e)&&e&&t+r!==0?e.slice(t,r+1):e}function U(e){return Number.isFinite(e)}function mt(e){return typeof e=="number"&&e>0&&Number.isFinite(e)}function Pc(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Cr(e){for(var t=1;t{if(t&&r){var n=r.width,i=r.height,a=t.align,o=t.verticalAlign,u=t.layout;if((u==="vertical"||u==="horizontal"&&o==="middle")&&a!=="center"&&D(e[a]))return Cr(Cr({},e),{},{[a]:e[a]+(n||0)});if((u==="horizontal"||u==="vertical"&&a==="center")&&o!=="middle"&&D(e[o]))return Cr(Cr({},e),{},{[o]:e[o]+(i||0)})}return e},bt=(e,t)=>e==="horizontal"&&t==="xAxis"||e==="vertical"&&t==="yAxis"||e==="centric"&&t==="angleAxis"||e==="radial"&&t==="radiusAxis",qv=(e,t,r,n)=>{if(n)return e.map(u=>u.coordinate);var i,a,o=e.map(u=>(u.coordinate===t&&(i=!0),u.coordinate===r&&(a=!0),u.coordinate));return i||o.push(t),a||o.push(r),o},Xv=(e,t,r)=>{if(!e)return null;var n=e.duplicateDomain,i=e.type,a=e.range,o=e.scale,u=e.realScaleType,l=e.isCategorical,c=e.categoricalDomain,s=e.tickCount,f=e.ticks,d=e.niceTicks,v=e.axisType;if(!o)return null;var p=u==="scaleBand"&&o.bandwidth?o.bandwidth()/2:2,m=i==="category"&&o.bandwidth?o.bandwidth()/p:0;if(m=v==="angleAxis"&&a&&a.length>=2?He(a[0]-a[1])*2*m:m,f||d){var y=(f||d||[]).map((g,w)=>{var x=n?n.indexOf(g):g,A=o.map(x);return U(A)?{coordinate:A+m,value:g,offset:m,index:w}:null}).filter(De);return y}return l&&c?c.map((g,w)=>{var x=o.map(g);return U(x)?{coordinate:x+m,value:g,index:w,offset:m}:null}).filter(De):o.ticks&&s!=null?o.ticks(s).map((g,w)=>{var x=o.map(g);return U(x)?{coordinate:x+m,value:g,index:w,offset:m}:null}).filter(De):o.domain().map((g,w)=>{var x=o.map(g);return U(x)?{coordinate:x+m,value:n?n[g]:g,index:w,offset:m}:null}).filter(De)},nw=e=>{var t,r=e.length;if(!(r<=0)){var n=(t=e[0])===null||t===void 0?void 0:t.length;if(!(n==null||n<=0))for(var i=0;i=0?(c[0]=a,a+=d,c[1]=a):(c[0]=o,o+=d,c[1]=o)}}}},iw=e=>{var t,r=e.length;if(!(r<=0)){var n=(t=e[0])===null||t===void 0?void 0:t.length;if(!(n==null||n<=0))for(var i=0;i=0?(l[0]=a,a+=c,l[1]=a):(l[0]=0,l[1]=0)}}}},aw={sign:nw,expand:Eg,none:cr,silhouette:_g,wiggle:Ig,positive:iw},ow=(e,t,r)=>{var n,i=(n=aw[r])!==null&&n!==void 0?n:cr,a=Sg().keys(t).value((u,l)=>Number(he(u,l,0))).order(_o).offset(i),o=a(e);return o.forEach((u,l)=>{u.forEach((c,s)=>{var f=he(e[s],t[l],0);Array.isArray(f)&&f.length===2&&D(f[0])&&D(f[1])&&(c[0]=f[0],c[1]=f[1])})}),o};function uw(e){return e==null?void 0:String(e)}function Sc(e){var t=e.axis,r=e.ticks,n=e.bandSize,i=e.entry,a=e.index,o=e.dataKey;if(t.type==="category"){if(!t.allowDuplicatedCategory&&t.dataKey&&!Oe(i[t.dataKey])){var u=rv(r,"value",i[t.dataKey]);if(u)return u.coordinate+n/2}return r!=null&&r[a]?r[a].coordinate+n/2:null}var l=he(i,Oe(o)?t.dataKey:o),c=t.scale.map(l);return D(c)?c:null}var lw=e=>{var t=e.flat(2).filter(D);return[Math.min(...t),Math.max(...t)]},cw=e=>[e[0]===1/0?0:e[0],e[1]===-1/0?0:e[1]],sw=(e,t,r)=>{if(!(e==null||Object.keys(e).length===0))return cw(Object.keys(e).reduce((n,i)=>{var a=e[i];if(!a)return n;var o=a.stackedData,u=o.reduce((l,c)=>{var s=Vv(c,t,r),f=lw(s);return!U(f[0])||!U(f[1])?l:[Math.min(l[0],f[0]),Math.max(l[1],f[1])]},[1/0,-1/0]);return[Math.min(u[0],n[0]),Math.max(u[1],n[1])]},[1/0,-1/0]))},Ec=/^dataMin[\s]*-[\s]*([0-9]+([.]{1}[0-9]+){0,1})$/,_c=/^dataMax[\s]*\+[\s]*([0-9]+([.]{1}[0-9]+){0,1})$/,Ei=(e,t,r)=>{if(e&&e.scale&&e.scale.bandwidth){var n=e.scale.bandwidth();if(!r||n>0)return n}if(e&&t&&t.length>=2){for(var i=ua(t,s=>s.coordinate),a=1/0,o=1,u=i.length;o{if(t==="horizontal")return e.relativeX;if(t==="vertical")return e.relativeY},dw=(e,t)=>t==="centric"?e.angle:e.radius,Mt=e=>e.layout.width,Dt=e=>e.layout.height,vw=e=>e.layout.scale,Qv=e=>e.layout.margin,ga=P(e=>e.cartesianAxis.xAxis,e=>Object.values(e)),ba=P(e=>e.cartesianAxis.yAxis,e=>Object.values(e)),hw="data-recharts-item-index",pw="data-recharts-item-id",Tn=60;function Cc(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Qn(e){for(var t=1;te.brush.height;function ww(e){var t=ba(e);return t.reduce((r,n)=>{if(n.orientation==="left"&&!n.mirror&&!n.hide){var i=typeof n.width=="number"?n.width:Tn;return r+i}return r},0)}function xw(e){var t=ba(e);return t.reduce((r,n)=>{if(n.orientation==="right"&&!n.mirror&&!n.hide){var i=typeof n.width=="number"?n.width:Tn;return r+i}return r},0)}function Aw(e){var t=ga(e);return t.reduce((r,n)=>n.orientation==="top"&&!n.mirror&&!n.hide?r+n.height:r,0)}function Ow(e){var t=ga(e);return t.reduce((r,n)=>n.orientation==="bottom"&&!n.mirror&&!n.hide?r+n.height:r,0)}var Pe=P([Mt,Dt,Qv,bw,ww,xw,Aw,Ow,gv,K0],(e,t,r,n,i,a,o,u,l,c)=>{var s={left:(r.left||0)+i,right:(r.right||0)+a},f={top:(r.top||0)+o,bottom:(r.bottom||0)+u},d=Qn(Qn({},f),s),v=d.bottom;d.bottom+=n,d=rw(d,l,c);var p=e-d.left-d.right,m=t-d.top-d.bottom;return Qn(Qn({brushBottom:v},d),{},{width:Math.max(p,0),height:Math.max(m,0)})}),Pw=P(Pe,e=>({x:e.left,y:e.top,width:e.width,height:e.height})),Jv=P(Mt,Dt,(e,t)=>({x:0,y:0,width:e,height:t})),Sw=h.createContext(null),$e=()=>h.useContext(Sw)!=null,wa=e=>e.brush,xa=P([wa,Pe,Qv],(e,t,r)=>({height:e.height,x:D(e.x)?e.x:t.left,y:D(e.y)?e.y:t.top+t.height+t.brushBottom-((r==null?void 0:r.bottom)||0),width:D(e.width)?e.width:t.width}));function Ew(e,t,{signal:r,edges:n}={}){let i,a=null;const o=n!=null&&n.includes("leading"),u=n==null||n.includes("trailing"),l=()=>{a!==null&&(e.apply(i,a),i=void 0,a=null)},c=()=>{u&&l(),v()};let s=null;const f=()=>{s!=null&&clearTimeout(s),s=setTimeout(()=>{s=null,c()},t)},d=()=>{s!==null&&(clearTimeout(s),s=null)},v=()=>{d(),i=void 0,a=null},p=()=>{l()},m=function(...y){if(r!=null&&r.aborted)return;i=this,a=y;const g=s==null;f(),o&&g&&l()};return m.schedule=f,m.cancel=v,m.flush=p,r==null||r.addEventListener("abort",v,{once:!0}),m}function _w(e,t=0,r={}){typeof r!="object"&&(r={});const{leading:n=!1,trailing:i=!0,maxWait:a}=r,o=Array(2);n&&(o[0]="leading"),i&&(o[1]="trailing");let u,l=null;const c=Ew(function(...d){u=e.apply(this,d),l=null},t,{edges:o}),s=function(...d){return a!=null&&(l===null&&(l=Date.now()),Date.now()-l>=a)?(u=e.apply(this,d),l=Date.now(),c.cancel(),c.schedule(),u):(c.apply(this,d),u)},f=()=>(c.flush(),u);return s.cancel=c.cancel,s.flush=f,s}function Iw(e,t=0,r={}){const{leading:n=!0,trailing:i=!0}=r;return _w(e,t,{leading:n,maxWait:t,trailing:i})}var _i=function(t,r){for(var n=arguments.length,i=new Array(n>2?n-2:0),a=2;ai[o++]))}},ft={width:"100%",height:"100%",debounce:0,minWidth:0,initialDimension:{width:-1,height:-1}},eh=(e,t,r)=>{var n=r.width,i=n===void 0?ft.width:n,a=r.height,o=a===void 0?ft.height:a,u=r.aspect,l=r.maxHeight,c=sr(i)?e:Number(i),s=sr(o)?t:Number(o);return u&&u>0&&(c?s=c/u:s&&(c=s*u),l&&s!=null&&s>l&&(s=l)),{calculatedWidth:c,calculatedHeight:s}},Cw={width:0,height:0,overflow:"visible"},kw={width:0,overflowX:"visible"},jw={height:0,overflowY:"visible"},Tw={},Mw=e=>{var t=e.width,r=e.height,n=sr(t),i=sr(r);return n&&i?Cw:n?kw:i?jw:Tw};function Dw(e){var t=e.width,r=e.height,n=e.aspect,i=t,a=r;return i===void 0&&a===void 0?(i=ft.width,a=ft.height):i===void 0?i=n&&n>0?void 0:ft.width:a===void 0&&(a=n&&n>0?void 0:ft.height),{width:i,height:a}}var $w=["aspect","initialDimension","width","height","minWidth","minHeight","maxHeight","children","debounce","id","className","onResize","style"];function Ii(){return Ii=Object.assign?Object.assign.bind():function(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=Array(t);r({width:r,height:n}),[r,n]);return Yw(i)?h.createElement(th.Provider,{value:i},t):null}var Cu=()=>h.useContext(th),Gw=h.forwardRef((e,t)=>{var r=e.aspect,n=e.initialDimension,i=n===void 0?ft.initialDimension:n,a=e.width,o=e.height,u=e.minWidth,l=u===void 0?ft.minWidth:u,c=e.minHeight,s=e.maxHeight,f=e.children,d=e.debounce,v=d===void 0?ft.debounce:d,p=e.id,m=e.className,y=e.onResize,g=e.style,w=g===void 0?{}:g,x=Kw(e,$w),A=h.useRef(null),O=h.useRef();O.current=y,h.useImperativeHandle(t,()=>A.current);var b=h.useState({containerWidth:i.width,containerHeight:i.height}),S=zw(b,2),_=S[0],I=S[1],C=h.useCallback((H,Y)=>{I(B=>{var q=Math.round(H),W=Math.round(Y);return B.containerWidth===q&&B.containerHeight===W?B:{containerWidth:q,containerHeight:W}})},[]);h.useEffect(()=>{if(A.current==null||typeof ResizeObserver>"u")return Fr;var H=Se=>{var ge,ae=Se[0];if(ae!=null){var Ne=ae.contentRect,Le=Ne.width,Je=Ne.height;C(Le,Je),(ge=O.current)===null||ge===void 0||ge.call(O,Le,Je)}};v>0&&(H=Iw(H,v,{trailing:!0,leading:!1}));var Y=new ResizeObserver(H),B=A.current.getBoundingClientRect(),q=B.width,W=B.height;return C(q,W),Y.observe(A.current),()=>{Y.disconnect()}},[C,v]);var j=_.containerWidth,E=_.containerHeight;_i(!r||r>0,"The aspect(%s) must be greater than zero.",r);var R=eh(j,E,{width:a,height:o,aspect:r,maxHeight:s}),$=R.calculatedWidth,V=R.calculatedHeight;return _i(j<0||E<0||$!=null&&$>0||V!=null&&V>0,`The width(%s) and height(%s) of chart should be greater than 0, please check the style of container, or the props width(%s) and height(%s), diff --git a/frontend/dist/assets/ModelsView-Cwn5DMTg.js b/frontend/dist/assets/ModelsView-dw81nBmA.js similarity index 99% rename from frontend/dist/assets/ModelsView-Cwn5DMTg.js rename to frontend/dist/assets/ModelsView-dw81nBmA.js index b57fe67..91a5a96 100644 --- a/frontend/dist/assets/ModelsView-Cwn5DMTg.js +++ b/frontend/dist/assets/ModelsView-dw81nBmA.js @@ -1,4 +1,4 @@ -import{c as E,u as he,a as qe,r as v,j as e,C as Y,L as Fe,b as k,d as Re,q as V,R as Ie,B as re,e as Pe,E as ze,f as le,g as Be,h as Ae,i as Oe,k as Ge,l as ee,X as xe,H as be,T as se,s as Te,m as He,n as q,o as U,p as Qe,t as Ue,v as Ve,w as We,x as Ze,y as Je,z as Xe,A as Ye}from"./index-l6kyKCL9.js";import{J as et}from"./JobsBar-HflSaqor.js";import{C as tt}from"./code-xml-QQtsFWSM.js";import{C as ue,Z as ie,L as rt,a as st}from"./zap-CnZftvep.js";import{S as ge}from"./search-C1Zs6OOf.js";import{P as nt}from"./power-DcJoPDeQ.js";import{C as $e}from"./chevron-down-C5keVSfm.js";import{L as at}from"./layers-BFKjGswj.js";/** +import{c as E,u as he,a as qe,r as v,j as e,C as Y,L as Fe,b as k,d as Re,q as V,R as Ie,B as re,e as Pe,E as ze,f as le,g as Be,h as Ae,i as Oe,k as Ge,l as ee,X as xe,H as be,T as se,s as Te,m as He,n as q,o as U,p as Qe,t as Ue,v as Ve,w as We,x as Ze,y as Je,z as Xe,A as Ye}from"./index-DMY9lUCb.js";import{J as et}from"./JobsBar-95gsUJZs.js";import{C as tt}from"./code-xml-Bf-y5tB9.js";import{C as ue,Z as ie,L as rt,a as st}from"./zap-2yha4rs4.js";import{S as ge}from"./search-D_8DnBvS.js";import{P as nt}from"./power-DsvD9qMX.js";import{C as $e}from"./chevron-down-1Vx9W9jM.js";import{L as at}from"./layers-CcL78b5Q.js";/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. diff --git a/frontend/dist/assets/SectionLabel-zEOM9wM3.js b/frontend/dist/assets/SectionLabel-B7ySrBs7.js similarity index 76% rename from frontend/dist/assets/SectionLabel-zEOM9wM3.js rename to frontend/dist/assets/SectionLabel-B7ySrBs7.js index fea9929..9fb6652 100644 --- a/frontend/dist/assets/SectionLabel-zEOM9wM3.js +++ b/frontend/dist/assets/SectionLabel-B7ySrBs7.js @@ -1 +1 @@ -import{j as e}from"./index-l6kyKCL9.js";function n({icon:t,children:s}){return e.jsxs("p",{className:"flex items-center gap-1.5 text-[11px] font-semibold uppercase tracking-wider text-muted-foreground/60",children:[e.jsx(t,{className:"h-3.5 w-3.5"})," ",s]})}export{n as S}; +import{j as e}from"./index-DMY9lUCb.js";function n({icon:t,children:s}){return e.jsxs("p",{className:"flex items-center gap-1.5 text-[11px] font-semibold uppercase tracking-wider text-muted-foreground/60",children:[e.jsx(t,{className:"h-3.5 w-3.5"})," ",s]})}export{n as S}; diff --git a/frontend/dist/assets/SkillsView-C1JOUS_h.js b/frontend/dist/assets/SkillsView-DqlZxdwQ.js similarity index 96% rename from frontend/dist/assets/SkillsView-C1JOUS_h.js rename to frontend/dist/assets/SkillsView-DqlZxdwQ.js index 6eb654f..f167048 100644 --- a/frontend/dist/assets/SkillsView-C1JOUS_h.js +++ b/frontend/dist/assets/SkillsView-DqlZxdwQ.js @@ -1,4 +1,4 @@ -var E=r=>{throw TypeError(r)};var O=(r,e,t)=>e.has(r)||E("Cannot "+t);var a=(r,e,t)=>(O(r,e,"read from private field"),t?t.call(r):e.get(r)),y=(r,e,t)=>e.has(r)?E("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(r):e.set(r,t),v=(r,e,t,n)=>(O(r,e,"write to private field"),n?n.call(r,t):e.set(r,t),t),j=(r,e,t)=>(O(r,e,"access private method"),t);import{a8 as Q,a9 as A,aa as M,ab as B,ac as P,u as J,r as f,ad as F,ae as I,c as T,af as U,j as s,J as D,T as H,b as K,L,Q as V,q as _,n as R}from"./index-l6kyKCL9.js";import{J as z}from"./JobsBar-HflSaqor.js";var c,g,o,h,m,w,C,q,G=(q=class extends Q{constructor(e,t){super();y(this,m);y(this,c);y(this,g);y(this,o);y(this,h);v(this,c,e),this.setOptions(t),this.bindMethods(),j(this,m,w).call(this)}bindMethods(){this.mutate=this.mutate.bind(this),this.reset=this.reset.bind(this)}setOptions(e){var n;const t=this.options;this.options=a(this,c).defaultMutationOptions(e),A(this.options,t)||a(this,c).getMutationCache().notify({type:"observerOptionsUpdated",mutation:a(this,o),observer:this}),t!=null&&t.mutationKey&&this.options.mutationKey&&M(t.mutationKey)!==M(this.options.mutationKey)?this.reset():((n=a(this,o))==null?void 0:n.state.status)==="pending"&&a(this,o).setOptions(this.options)}onUnsubscribe(){var e;this.hasListeners()||(e=a(this,o))==null||e.removeObserver(this)}onMutationUpdate(e){j(this,m,w).call(this),j(this,m,C).call(this,e)}getCurrentResult(){return a(this,g)}reset(){var e;(e=a(this,o))==null||e.removeObserver(this),v(this,o,void 0),j(this,m,w).call(this),j(this,m,C).call(this)}mutate(e,t){var n;return v(this,h,t),(n=a(this,o))==null||n.removeObserver(this),v(this,o,a(this,c).getMutationCache().build(a(this,c),this.options)),a(this,o).addObserver(this),a(this,o).execute(e)}},c=new WeakMap,g=new WeakMap,o=new WeakMap,h=new WeakMap,m=new WeakSet,w=function(){var t;const e=((t=a(this,o))==null?void 0:t.state)??B();v(this,g,{...e,isPending:e.status==="pending",isSuccess:e.status==="success",isError:e.status==="error",isIdle:e.status==="idle",mutate:this.mutate,reset:this.reset})},C=function(e){P.batch(()=>{var t,n,l,x,d,p,k,i;if(a(this,h)&&this.hasListeners()){const u=a(this,g).variables,N=a(this,g).context,S={client:a(this,c),meta:this.options.meta,mutationKey:this.options.mutationKey};if((e==null?void 0:e.type)==="success"){try{(n=(t=a(this,h)).onSuccess)==null||n.call(t,e.data,u,N,S)}catch(b){Promise.reject(b)}try{(x=(l=a(this,h)).onSettled)==null||x.call(l,e.data,null,u,N,S)}catch(b){Promise.reject(b)}}else if((e==null?void 0:e.type)==="error"){try{(p=(d=a(this,h)).onError)==null||p.call(d,e.error,u,N,S)}catch(b){Promise.reject(b)}try{(i=(k=a(this,h)).onSettled)==null||i.call(k,void 0,e.error,u,N,S)}catch(b){Promise.reject(b)}}}this.listeners.forEach(u=>{u(a(this,g))})})},q);function W(r,e){const t=J(),[n]=f.useState(()=>new G(t,r));f.useEffect(()=>{n.setOptions(r)},[n,r]);const l=f.useSyncExternalStore(f.useCallback(d=>n.subscribe(P.batchCalls(d)),[n]),()=>n.getCurrentResult(),()=>n.getCurrentResult()),x=f.useCallback((d,p)=>{n.mutate(d,p).catch(F)},[n]);if(l.error&&I(n.options.throwOnError,[l.error]))throw l.error;return{...l,mutate:x,mutateAsync:l.mutate}}/** +var E=r=>{throw TypeError(r)};var O=(r,e,t)=>e.has(r)||E("Cannot "+t);var a=(r,e,t)=>(O(r,e,"read from private field"),t?t.call(r):e.get(r)),y=(r,e,t)=>e.has(r)?E("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(r):e.set(r,t),v=(r,e,t,n)=>(O(r,e,"write to private field"),n?n.call(r,t):e.set(r,t),t),j=(r,e,t)=>(O(r,e,"access private method"),t);import{a6 as Q,a7 as A,a8 as M,a9 as B,aa as P,u as J,r as f,ab as F,ac as I,c as T,ad as U,j as s,J as D,T as H,b as K,L,Q as V,q as _,n as R}from"./index-DMY9lUCb.js";import{J as z}from"./JobsBar-95gsUJZs.js";var c,g,o,h,m,w,C,q,G=(q=class extends Q{constructor(e,t){super();y(this,m);y(this,c);y(this,g);y(this,o);y(this,h);v(this,c,e),this.setOptions(t),this.bindMethods(),j(this,m,w).call(this)}bindMethods(){this.mutate=this.mutate.bind(this),this.reset=this.reset.bind(this)}setOptions(e){var n;const t=this.options;this.options=a(this,c).defaultMutationOptions(e),A(this.options,t)||a(this,c).getMutationCache().notify({type:"observerOptionsUpdated",mutation:a(this,o),observer:this}),t!=null&&t.mutationKey&&this.options.mutationKey&&M(t.mutationKey)!==M(this.options.mutationKey)?this.reset():((n=a(this,o))==null?void 0:n.state.status)==="pending"&&a(this,o).setOptions(this.options)}onUnsubscribe(){var e;this.hasListeners()||(e=a(this,o))==null||e.removeObserver(this)}onMutationUpdate(e){j(this,m,w).call(this),j(this,m,C).call(this,e)}getCurrentResult(){return a(this,g)}reset(){var e;(e=a(this,o))==null||e.removeObserver(this),v(this,o,void 0),j(this,m,w).call(this),j(this,m,C).call(this)}mutate(e,t){var n;return v(this,h,t),(n=a(this,o))==null||n.removeObserver(this),v(this,o,a(this,c).getMutationCache().build(a(this,c),this.options)),a(this,o).addObserver(this),a(this,o).execute(e)}},c=new WeakMap,g=new WeakMap,o=new WeakMap,h=new WeakMap,m=new WeakSet,w=function(){var t;const e=((t=a(this,o))==null?void 0:t.state)??B();v(this,g,{...e,isPending:e.status==="pending",isSuccess:e.status==="success",isError:e.status==="error",isIdle:e.status==="idle",mutate:this.mutate,reset:this.reset})},C=function(e){P.batch(()=>{var t,n,l,x,d,p,k,i;if(a(this,h)&&this.hasListeners()){const u=a(this,g).variables,N=a(this,g).context,S={client:a(this,c),meta:this.options.meta,mutationKey:this.options.mutationKey};if((e==null?void 0:e.type)==="success"){try{(n=(t=a(this,h)).onSuccess)==null||n.call(t,e.data,u,N,S)}catch(b){Promise.reject(b)}try{(x=(l=a(this,h)).onSettled)==null||x.call(l,e.data,null,u,N,S)}catch(b){Promise.reject(b)}}else if((e==null?void 0:e.type)==="error"){try{(p=(d=a(this,h)).onError)==null||p.call(d,e.error,u,N,S)}catch(b){Promise.reject(b)}try{(i=(k=a(this,h)).onSettled)==null||i.call(k,void 0,e.error,u,N,S)}catch(b){Promise.reject(b)}}}this.listeners.forEach(u=>{u(a(this,g))})})},q);function W(r,e){const t=J(),[n]=f.useState(()=>new G(t,r));f.useEffect(()=>{n.setOptions(r)},[n,r]);const l=f.useSyncExternalStore(f.useCallback(d=>n.subscribe(P.batchCalls(d)),[n]),()=>n.getCurrentResult(),()=>n.getCurrentResult()),x=f.useCallback((d,p)=>{n.mutate(d,p).catch(F)},[n]);if(l.error&&I(n.options.throwOnError,[l.error]))throw l.error;return{...l,mutate:x,mutateAsync:l.mutate}}/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. diff --git a/frontend/dist/assets/SystemDrawer-C9kOlIQQ.js b/frontend/dist/assets/SystemDrawer-CpUj62ev.js similarity index 98% rename from frontend/dist/assets/SystemDrawer-C9kOlIQQ.js rename to frontend/dist/assets/SystemDrawer-CpUj62ev.js index 070500f..34b27b1 100644 --- a/frontend/dist/assets/SystemDrawer-C9kOlIQQ.js +++ b/frontend/dist/assets/SystemDrawer-CpUj62ev.js @@ -1,4 +1,4 @@ -import{c as v,j as e,b as c,r as l,T as W,L as ae,E as ve,n as b,Q as le,Y as oe,X as de,J as Se,u as _e,k as Ce,x as ze,as as Fe,ag as Le,am as Ue,V as P,t as Ae,y as q,q as N}from"./index-l6kyKCL9.js";import{R as F}from"./refresh-cw-BV1qZMSR.js";import{F as Pe}from"./file-text-nO0jfgun.js";import{S as Be}from"./search-C1Zs6OOf.js";import{S as ce}from"./shield-CVm2T_f5.js";import{A as ne}from"./arrow-right-DSSXd-8y.js";import{C as Re}from"./clock-QfyF1ur_.js";import{E as $e}from"./external-link-ClFd8iN1.js";import{C as De,a as Ee}from"./cloud-download-YEWUSwEY.js";import{P as Oe}from"./power-DcJoPDeQ.js";/** +import{c as v,j as e,b as c,r as l,T as W,L as ae,E as ve,n as b,Q as le,Y as oe,X as de,J as Se,u as _e,k as Ce,x as ze,aq as Fe,ae as Le,ak as Ue,V as P,t as Ae,y as q,q as N}from"./index-DMY9lUCb.js";import{R as F}from"./refresh-cw-hAcZthO8.js";import{F as Pe}from"./file-text-BSQuFPZM.js";import{S as Be}from"./search-D_8DnBvS.js";import{S as ce}from"./shield-BtE9Fxv6.js";import{A as ne}from"./arrow-right-CNrCtUoh.js";import{C as Re}from"./clock-Bth-s5Y3.js";import{E as $e}from"./external-link-DcJao8h4.js";import{C as De,a as Ee}from"./cloud-download-BGirmHxu.js";import{P as Oe}from"./power-DsvD9qMX.js";/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. diff --git a/frontend/dist/assets/WissenView-1g9-Kr_d.js b/frontend/dist/assets/WissenView-BoYalgKN.js similarity index 99% rename from frontend/dist/assets/WissenView-1g9-Kr_d.js rename to frontend/dist/assets/WissenView-BoYalgKN.js index 52624d8..342cf81 100644 --- a/frontend/dist/assets/WissenView-1g9-Kr_d.js +++ b/frontend/dist/assets/WissenView-BoYalgKN.js @@ -1,4 +1,4 @@ -var to=Object.defineProperty;var eo=(e,n,r)=>n in e?to(e,n,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[n]=r;var Bn=(e,n,r)=>eo(e,typeof n!="symbol"?n+"":n,r);import{c as no,r as W,an as ro,ao as io,j as $,ap as oo,z as ao,A as so,aq as uo,n as lo,b as Ae,L as Ke,a1 as co,ar as fo}from"./index-l6kyKCL9.js";import{i as Ft,c as Xn,a as Yn,b as ho,o as po,m as Zn,d as Kn}from"./string-DoZi9Vij.js";import{R as go}from"./refresh-cw-BV1qZMSR.js";import{S as yo}from"./search-C1Zs6OOf.js";import{F as _o}from"./file-text-nO0jfgun.js";/** +var to=Object.defineProperty;var eo=(e,n,r)=>n in e?to(e,n,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[n]=r;var Bn=(e,n,r)=>eo(e,typeof n!="symbol"?n+"":n,r);import{c as no,r as W,al as ro,am as io,j as $,an as oo,z as ao,A as so,ao as uo,n as lo,b as Ae,L as Ke,a1 as co,ap as fo}from"./index-DMY9lUCb.js";import{i as Ft,c as Xn,a as Yn,b as ho,o as po,m as Zn,d as Kn}from"./string-DoZi9Vij.js";import{R as go}from"./refresh-cw-hAcZthO8.js";import{S as yo}from"./search-D_8DnBvS.js";import{F as _o}from"./file-text-BSQuFPZM.js";/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. diff --git a/frontend/dist/assets/arrow-right-DSSXd-8y.js b/frontend/dist/assets/arrow-right-CNrCtUoh.js similarity index 86% rename from frontend/dist/assets/arrow-right-DSSXd-8y.js rename to frontend/dist/assets/arrow-right-CNrCtUoh.js index f8738d6..fe1eaba 100644 --- a/frontend/dist/assets/arrow-right-DSSXd-8y.js +++ b/frontend/dist/assets/arrow-right-CNrCtUoh.js @@ -1,4 +1,4 @@ -import{c as r}from"./index-l6kyKCL9.js";/** +import{c as r}from"./index-DMY9lUCb.js";/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. diff --git a/frontend/dist/assets/chevron-down-C5keVSfm.js b/frontend/dist/assets/chevron-down-1Vx9W9jM.js similarity index 85% rename from frontend/dist/assets/chevron-down-C5keVSfm.js rename to frontend/dist/assets/chevron-down-1Vx9W9jM.js index 5a48142..3a0d0d7 100644 --- a/frontend/dist/assets/chevron-down-C5keVSfm.js +++ b/frontend/dist/assets/chevron-down-1Vx9W9jM.js @@ -1,4 +1,4 @@ -import{c as o}from"./index-l6kyKCL9.js";/** +import{c as o}from"./index-DMY9lUCb.js";/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. diff --git a/frontend/dist/assets/clock-QfyF1ur_.js b/frontend/dist/assets/clock-Bth-s5Y3.js similarity index 88% rename from frontend/dist/assets/clock-QfyF1ur_.js rename to frontend/dist/assets/clock-Bth-s5Y3.js index ededf9d..162bea5 100644 --- a/frontend/dist/assets/clock-QfyF1ur_.js +++ b/frontend/dist/assets/clock-Bth-s5Y3.js @@ -1,4 +1,4 @@ -import{c}from"./index-l6kyKCL9.js";/** +import{c}from"./index-DMY9lUCb.js";/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. diff --git a/frontend/dist/assets/cloud-download-YEWUSwEY.js b/frontend/dist/assets/cloud-download-BGirmHxu.js similarity index 94% rename from frontend/dist/assets/cloud-download-YEWUSwEY.js rename to frontend/dist/assets/cloud-download-BGirmHxu.js index 3a945eb..53e150b 100644 --- a/frontend/dist/assets/cloud-download-YEWUSwEY.js +++ b/frontend/dist/assets/cloud-download-BGirmHxu.js @@ -1,4 +1,4 @@ -import{c as a}from"./index-l6kyKCL9.js";/** +import{c as a}from"./index-DMY9lUCb.js";/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. diff --git a/frontend/dist/assets/code-xml-QQtsFWSM.js b/frontend/dist/assets/code-xml-Bf-y5tB9.js similarity index 88% rename from frontend/dist/assets/code-xml-QQtsFWSM.js rename to frontend/dist/assets/code-xml-Bf-y5tB9.js index 7eefe72..ec6915d 100644 --- a/frontend/dist/assets/code-xml-QQtsFWSM.js +++ b/frontend/dist/assets/code-xml-Bf-y5tB9.js @@ -1,4 +1,4 @@ -import{c as e}from"./index-l6kyKCL9.js";/** +import{c as e}from"./index-DMY9lUCb.js";/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. diff --git a/frontend/dist/assets/external-link-ClFd8iN1.js b/frontend/dist/assets/external-link-DcJao8h4.js similarity index 89% rename from frontend/dist/assets/external-link-ClFd8iN1.js rename to frontend/dist/assets/external-link-DcJao8h4.js index 20a0240..932282b 100644 --- a/frontend/dist/assets/external-link-ClFd8iN1.js +++ b/frontend/dist/assets/external-link-DcJao8h4.js @@ -1,4 +1,4 @@ -import{c as a}from"./index-l6kyKCL9.js";/** +import{c as a}from"./index-DMY9lUCb.js";/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. diff --git a/frontend/dist/assets/file-text-nO0jfgun.js b/frontend/dist/assets/file-text-BSQuFPZM.js similarity index 91% rename from frontend/dist/assets/file-text-nO0jfgun.js rename to frontend/dist/assets/file-text-BSQuFPZM.js index 44f3f1f..5a22578 100644 --- a/frontend/dist/assets/file-text-nO0jfgun.js +++ b/frontend/dist/assets/file-text-BSQuFPZM.js @@ -1,4 +1,4 @@ -import{c as e}from"./index-l6kyKCL9.js";/** +import{c as e}from"./index-DMY9lUCb.js";/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. diff --git a/frontend/dist/assets/hammer-Cl-GywsD.js b/frontend/dist/assets/hammer-Cl-GywsD.js deleted file mode 100644 index 14bcd15..0000000 --- a/frontend/dist/assets/hammer-Cl-GywsD.js +++ /dev/null @@ -1,6 +0,0 @@ -import{c as a}from"./index-l6kyKCL9.js";/** - * @license lucide-react v0.460.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const m=a("Hammer",[["path",{d:"m15 12-8.373 8.373a1 1 0 1 1-3-3L12 9",key:"eefl8a"}],["path",{d:"m18 15 4-4",key:"16gjal"}],["path",{d:"m21.5 11.5-1.914-1.914A2 2 0 0 1 19 8.172V7l-2.26-2.26a6 6 0 0 0-4.202-1.756L9 2.96l.92.82A6.18 6.18 0 0 1 12 8.4V10l2 2h1.172a2 2 0 0 1 1.414.586L18.5 14.5",key:"b7pghm"}]]);export{m as H}; diff --git a/frontend/dist/assets/index-CVfMhtws.js b/frontend/dist/assets/index-CVfMhtws.js new file mode 100644 index 0000000..58f7470 --- /dev/null +++ b/frontend/dist/assets/index-CVfMhtws.js @@ -0,0 +1 @@ +import{ay as r}from"./index-DMY9lUCb.js";var o=r();export{o as r}; diff --git a/frontend/dist/assets/index-DMY9lUCb.js b/frontend/dist/assets/index-DMY9lUCb.js new file mode 100644 index 0000000..1db6e72 --- /dev/null +++ b/frontend/dist/assets/index-DMY9lUCb.js @@ -0,0 +1,264 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/SystemDrawer-CpUj62ev.js","assets/refresh-cw-hAcZthO8.js","assets/file-text-BSQuFPZM.js","assets/search-D_8DnBvS.js","assets/shield-BtE9Fxv6.js","assets/arrow-right-CNrCtUoh.js","assets/clock-Bth-s5Y3.js","assets/external-link-DcJao8h4.js","assets/cloud-download-BGirmHxu.js","assets/power-DsvD9qMX.js","assets/CommandPalette-CUaikJDv.js","assets/index-CVfMhtws.js","assets/LiveAreaChartImpl-CUepOhWM.js","assets/string-DoZi9Vij.js","assets/ModelsView-dw81nBmA.js","assets/JobsBar-95gsUJZs.js","assets/code-xml-Bf-y5tB9.js","assets/zap-2yha4rs4.js","assets/chevron-down-1Vx9W9jM.js","assets/layers-CcL78b5Q.js","assets/ConnectView-CdvOrseN.js","assets/AgentView-Ddy3G6Cn.js","assets/SectionLabel-B7ySrBs7.js","assets/KonsoleView-CSxygCPx.js","assets/GuideView-CxJU6Qxs.js","assets/IdeenAnsicht-Cy8yw2ZX.js","assets/SkillsView-DqlZxdwQ.js","assets/ChronikView-79MqWZGv.js","assets/WissenView-BoYalgKN.js"])))=>i.map(i=>d[i]); +var L1=Object.defineProperty;var Op=a=>{throw TypeError(a)};var B1=(a,l,s)=>l in a?L1(a,l,{enumerable:!0,configurable:!0,writable:!0,value:s}):a[l]=s;var Ru=(a,l,s)=>B1(a,typeof l!="symbol"?l+"":l,s),bf=(a,l,s)=>l.has(a)||Op("Cannot "+s);var C=(a,l,s)=>(bf(a,l,"read from private field"),s?s.call(a):l.get(a)),ce=(a,l,s)=>l.has(a)?Op("Cannot add the same private member more than once"):l instanceof WeakSet?l.add(a):l.set(a,s),le=(a,l,s,r)=>(bf(a,l,"write to private field"),r?r.call(a,s):l.set(a,s),s),Ee=(a,l,s)=>(bf(a,l,"access private method"),s);var zu=(a,l,s,r)=>({set _(o){le(a,l,o,s)},get _(){return C(a,l,r)}});function H1(a,l){for(var s=0;sr[o]})}}}return Object.freeze(Object.defineProperty(a,Symbol.toStringTag,{value:"Module"}))}(function(){const l=document.createElement("link").relList;if(l&&l.supports&&l.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))r(o);new MutationObserver(o=>{for(const f of o)if(f.type==="childList")for(const h of f.addedNodes)h.tagName==="LINK"&&h.rel==="modulepreload"&&r(h)}).observe(document,{childList:!0,subtree:!0});function s(o){const f={};return o.integrity&&(f.integrity=o.integrity),o.referrerPolicy&&(f.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?f.credentials="include":o.crossOrigin==="anonymous"?f.credentials="omit":f.credentials="same-origin",f}function r(o){if(o.ep)return;o.ep=!0;const f=s(o);fetch(o.href,f)}})();function Wy(a){return a&&a.__esModule&&Object.prototype.hasOwnProperty.call(a,"default")?a.default:a}var xf={exports:{}},ks={};/** + * @license React + * react-jsx-runtime.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var kp;function q1(){if(kp)return ks;kp=1;var a=Symbol.for("react.transitional.element"),l=Symbol.for("react.fragment");function s(r,o,f){var h=null;if(f!==void 0&&(h=""+f),o.key!==void 0&&(h=""+o.key),"key"in o){f={};for(var d in o)d!=="key"&&(f[d]=o[d])}else f=o;return o=f.ref,{$$typeof:a,type:r,key:h,ref:o!==void 0?o:null,props:f}}return ks.Fragment=l,ks.jsx=s,ks.jsxs=s,ks}var Up;function G1(){return Up||(Up=1,xf.exports=q1()),xf.exports}var v=G1(),Sf={exports:{}},he={};/** + * @license React + * react.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var Lp;function Q1(){if(Lp)return he;Lp=1;var a=Symbol.for("react.transitional.element"),l=Symbol.for("react.portal"),s=Symbol.for("react.fragment"),r=Symbol.for("react.strict_mode"),o=Symbol.for("react.profiler"),f=Symbol.for("react.consumer"),h=Symbol.for("react.context"),d=Symbol.for("react.forward_ref"),p=Symbol.for("react.suspense"),g=Symbol.for("react.memo"),b=Symbol.for("react.lazy"),y=Symbol.for("react.activity"),_=Symbol.iterator;function S(M){return M===null||typeof M!="object"?null:(M=_&&M[_]||M["@@iterator"],typeof M=="function"?M:null)}var w={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},E=Object.assign,j={};function R(M,X,ne){this.props=M,this.context=X,this.refs=j,this.updater=ne||w}R.prototype.isReactComponent={},R.prototype.setState=function(M,X){if(typeof M!="object"&&typeof M!="function"&&M!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,M,X,"setState")},R.prototype.forceUpdate=function(M){this.updater.enqueueForceUpdate(this,M,"forceUpdate")};function z(){}z.prototype=R.prototype;function L(M,X,ne){this.props=M,this.context=X,this.refs=j,this.updater=ne||w}var D=L.prototype=new z;D.constructor=L,E(D,R.prototype),D.isPureReactComponent=!0;var Z=Array.isArray;function G(){}var K={H:null,A:null,T:null,S:null},J=Object.prototype.hasOwnProperty;function Q(M,X,ne){var se=ne.ref;return{$$typeof:a,type:M,key:X,ref:se!==void 0?se:null,props:ne}}function P(M,X){return Q(M.type,X,M.props)}function ee(M){return typeof M=="object"&&M!==null&&M.$$typeof===a}function I(M){var X={"=":"=0",":":"=2"};return"$"+M.replace(/[=:]/g,function(ne){return X[ne]})}var fe=/\/+/g;function F(M,X){return typeof M=="object"&&M!==null&&M.key!=null?I(""+M.key):X.toString(36)}function ae(M){switch(M.status){case"fulfilled":return M.value;case"rejected":throw M.reason;default:switch(typeof M.status=="string"?M.then(G,G):(M.status="pending",M.then(function(X){M.status==="pending"&&(M.status="fulfilled",M.value=X)},function(X){M.status==="pending"&&(M.status="rejected",M.reason=X)})),M.status){case"fulfilled":return M.value;case"rejected":throw M.reason}}throw M}function B(M,X,ne,se,de){var ge=typeof M;(ge==="undefined"||ge==="boolean")&&(M=null);var Ae=!1;if(M===null)Ae=!0;else switch(ge){case"bigint":case"string":case"number":Ae=!0;break;case"object":switch(M.$$typeof){case a:case l:Ae=!0;break;case b:return Ae=M._init,B(Ae(M._payload),X,ne,se,de)}}if(Ae)return de=de(M),Ae=se===""?"."+F(M,0):se,Z(de)?(ne="",Ae!=null&&(ne=Ae.replace(fe,"$&/")+"/"),B(de,X,ne,"",function(_n){return _n})):de!=null&&(ee(de)&&(de=P(de,ne+(de.key==null||M&&M.key===de.key?"":(""+de.key).replace(fe,"$&/")+"/")+Ae)),X.push(de)),1;Ae=0;var ot=se===""?".":se+":";if(Z(M))for(var Qe=0;Qe>>1,me=B[be];if(0>>1;beo(ne,te))seo(de,ne)?(B[be]=de,B[se]=te,be=se):(B[be]=ne,B[X]=te,be=X);else if(seo(de,te))B[be]=de,B[se]=te,be=se;else break e}}return W}function o(B,W){var te=B.sortIndex-W.sortIndex;return te!==0?te:B.id-W.id}if(a.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var f=performance;a.unstable_now=function(){return f.now()}}else{var h=Date,d=h.now();a.unstable_now=function(){return h.now()-d}}var p=[],g=[],b=1,y=null,_=3,S=!1,w=!1,E=!1,j=!1,R=typeof setTimeout=="function"?setTimeout:null,z=typeof clearTimeout=="function"?clearTimeout:null,L=typeof setImmediate<"u"?setImmediate:null;function D(B){for(var W=s(g);W!==null;){if(W.callback===null)r(g);else if(W.startTime<=B)r(g),W.sortIndex=W.expirationTime,l(p,W);else break;W=s(g)}}function Z(B){if(E=!1,D(B),!w)if(s(p)!==null)w=!0,G||(G=!0,I());else{var W=s(g);W!==null&&ae(Z,W.startTime-B)}}var G=!1,K=-1,J=5,Q=-1;function P(){return j?!0:!(a.unstable_now()-QB&&P());){var be=y.callback;if(typeof be=="function"){y.callback=null,_=y.priorityLevel;var me=be(y.expirationTime<=B);if(B=a.unstable_now(),typeof me=="function"){y.callback=me,D(B),W=!0;break t}y===s(p)&&r(p),D(B)}else r(p);y=s(p)}if(y!==null)W=!0;else{var M=s(g);M!==null&&ae(Z,M.startTime-B),W=!1}}break e}finally{y=null,_=te,S=!1}W=void 0}}finally{W?I():G=!1}}}var I;if(typeof L=="function")I=function(){L(ee)};else if(typeof MessageChannel<"u"){var fe=new MessageChannel,F=fe.port2;fe.port1.onmessage=ee,I=function(){F.postMessage(null)}}else I=function(){R(ee,0)};function ae(B,W){K=R(function(){B(a.unstable_now())},W)}a.unstable_IdlePriority=5,a.unstable_ImmediatePriority=1,a.unstable_LowPriority=4,a.unstable_NormalPriority=3,a.unstable_Profiling=null,a.unstable_UserBlockingPriority=2,a.unstable_cancelCallback=function(B){B.callback=null},a.unstable_forceFrameRate=function(B){0>B||125be?(B.sortIndex=te,l(g,B),s(p)===null&&B===s(g)&&(E?(z(K),K=-1):E=!0,ae(Z,te-be))):(B.sortIndex=me,l(p,B),w||S||(w=!0,G||(G=!0,I()))),B},a.unstable_shouldYield=P,a.unstable_wrapCallback=function(B){var W=_;return function(){var te=_;_=W;try{return B.apply(this,arguments)}finally{_=te}}}})(Ef)),Ef}var qp;function Y1(){return qp||(qp=1,wf.exports=V1()),wf.exports}var jf={exports:{}},yt={};/** + * @license React + * react-dom.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var Gp;function K1(){if(Gp)return yt;Gp=1;var a=rr();function l(p){var g="https://react.dev/errors/"+p;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(a)}catch(l){console.error(l)}}return a(),jf.exports=K1(),jf.exports}/** + * @license React + * react-dom-client.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var Vp;function Z1(){if(Vp)return Us;Vp=1;var a=Y1(),l=rr(),s=X1();function r(e){var t="https://react.dev/errors/"+e;if(1me||(e.current=be[me],be[me]=null,me--)}function ne(e,t){me++,be[me]=e.current,e.current=t}var se=M(null),de=M(null),ge=M(null),Ae=M(null);function ot(e,t){switch(ne(ge,t),ne(de,e),ne(se,null),t.nodeType){case 9:case 11:e=(e=t.documentElement)&&(e=e.namespaceURI)?ap(e):0;break;default:if(e=t.tagName,t=t.namespaceURI)t=ap(t),e=lp(t,e);else switch(e){case"svg":e=1;break;case"math":e=2;break;default:e=0}}X(se),ne(se,e)}function Qe(){X(se),X(de),X(ge)}function _n(e){e.memoizedState!==null&&ne(Ae,e);var t=se.current,n=lp(t,e.type);t!==n&&(ne(de,e),ne(se,n))}function wn(e){de.current===e&&(X(se),X(de)),Ae.current===e&&(X(Ae),zs._currentValue=te)}var Pn,Bi;function fn(e){if(Pn===void 0)try{throw Error()}catch(n){var t=n.stack.trim().match(/\n( *(at )?)/);Pn=t&&t[1]||"",Bi=-1)":-1u||T[i]!==k[u]){var q=` +`+T[i].replace(" at new "," at ");return e.displayName&&q.includes("")&&(q=q.replace("",e.displayName)),q}while(1<=i&&0<=u);break}}}finally{wl=!1,Error.prepareStackTrace=n}return(n=e?e.displayName||e.name:"")?fn(n):""}function Hi(e,t){switch(e.tag){case 26:case 27:case 5:return fn(e.type);case 16:return fn("Lazy");case 13:return e.child!==t&&t!==null?fn("Suspense Fallback"):fn("Suspense");case 19:return fn("SuspenseList");case 0:case 15:return an(e.type,!1);case 11:return an(e.type.render,!1);case 1:return an(e.type,!0);case 31:return fn("Activity");default:return""}}function En(e){try{var t="",n=null;do t+=Hi(e,n),n=e,e=e.return;while(e);return t}catch(i){return` +Error generating stack: `+i.message+` +`+i.stack}}var Ga=Object.prototype.hasOwnProperty,qi=a.unstable_scheduleCallback,Gi=a.unstable_cancelCallback,dr=a.unstable_shouldYield,it=a.unstable_requestPaint,Fe=a.unstable_now,jn=a.unstable_getCurrentPriorityLevel,Qi=a.unstable_ImmediatePriority,Ud=a.unstable_UserBlockingPriority,hr=a.unstable_NormalPriority,vv=a.unstable_LowPriority,Ld=a.unstable_IdlePriority,bv=a.log,xv=a.unstable_setDisableYieldValue,Vi=null,Nt=null;function In(e){if(typeof bv=="function"&&xv(e),Nt&&typeof Nt.setStrictMode=="function")try{Nt.setStrictMode(Vi,e)}catch{}}var Dt=Math.clz32?Math.clz32:wv,Sv=Math.log,_v=Math.LN2;function wv(e){return e>>>=0,e===0?32:31-(Sv(e)/_v|0)|0}var mr=256,gr=262144,pr=4194304;function Qa(e){var t=e&42;if(t!==0)return t;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:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return e&261888;case 262144:case 524288:case 1048576:case 2097152:return e&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return e&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return e}}function yr(e,t,n){var i=e.pendingLanes;if(i===0)return 0;var u=0,c=e.suspendedLanes,m=e.pingedLanes;e=e.warmLanes;var x=i&134217727;return x!==0?(i=x&~c,i!==0?u=Qa(i):(m&=x,m!==0?u=Qa(m):n||(n=x&~e,n!==0&&(u=Qa(n))))):(x=i&~c,x!==0?u=Qa(x):m!==0?u=Qa(m):n||(n=i&~e,n!==0&&(u=Qa(n)))),u===0?0:t!==0&&t!==u&&(t&c)===0&&(c=u&-u,n=t&-t,c>=n||c===32&&(n&4194048)!==0)?t:u}function Yi(e,t){return(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&t)===0}function Ev(e,t){switch(e){case 1:case 2:case 4:case 8:case 64:return t+250;case 16:case 32: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 t+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function Bd(){var e=pr;return pr<<=1,(pr&62914560)===0&&(pr=4194304),e}function ic(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function Ki(e,t){e.pendingLanes|=t,t!==268435456&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function jv(e,t,n,i,u,c){var m=e.pendingLanes;e.pendingLanes=n,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=n,e.entangledLanes&=n,e.errorRecoveryDisabledLanes&=n,e.shellSuspendCounter=0;var x=e.entanglements,T=e.expirationTimes,k=e.hiddenUpdates;for(n=m&~n;0"u")return null;try{return e.activeElement||e.body}catch{return e.body}}var zv=/[\n"\\]/g;function Xt(e){return e.replace(zv,function(t){return"\\"+t.charCodeAt(0).toString(16)+" "})}function fc(e,t,n,i,u,c,m,x){e.name="",m!=null&&typeof m!="function"&&typeof m!="symbol"&&typeof m!="boolean"?e.type=m:e.removeAttribute("type"),t!=null?m==="number"?(t===0&&e.value===""||e.value!=t)&&(e.value=""+Kt(t)):e.value!==""+Kt(t)&&(e.value=""+Kt(t)):m!=="submit"&&m!=="reset"||e.removeAttribute("value"),t!=null?dc(e,m,Kt(t)):n!=null?dc(e,m,Kt(n)):i!=null&&e.removeAttribute("value"),u==null&&c!=null&&(e.defaultChecked=!!c),u!=null&&(e.checked=u&&typeof u!="function"&&typeof u!="symbol"),x!=null&&typeof x!="function"&&typeof x!="symbol"&&typeof x!="boolean"?e.name=""+Kt(x):e.removeAttribute("name")}function Wd(e,t,n,i,u,c,m,x){if(c!=null&&typeof c!="function"&&typeof c!="symbol"&&typeof c!="boolean"&&(e.type=c),t!=null||n!=null){if(!(c!=="submit"&&c!=="reset"||t!=null)){oc(e);return}n=n!=null?""+Kt(n):"",t=t!=null?""+Kt(t):n,x||t===e.value||(e.value=t),e.defaultValue=t}i=i??u,i=typeof i!="function"&&typeof i!="symbol"&&!!i,e.checked=x?e.checked:!!i,e.defaultChecked=!!i,m!=null&&typeof m!="function"&&typeof m!="symbol"&&typeof m!="boolean"&&(e.name=m),oc(e)}function dc(e,t,n){t==="number"&&xr(e.ownerDocument)===e||e.defaultValue===""+n||(e.defaultValue=""+n)}function Cl(e,t,n,i){if(e=e.options,t){t={};for(var u=0;u"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),yc=!1;if(An)try{var Fi={};Object.defineProperty(Fi,"passive",{get:function(){yc=!0}}),window.addEventListener("test",Fi,Fi),window.removeEventListener("test",Fi,Fi)}catch{yc=!1}var ta=null,vc=null,_r=null;function lh(){if(_r)return _r;var e,t=vc,n=t.length,i,u="value"in ta?ta.value:ta.textContent,c=u.length;for(e=0;e=Pi),oh=" ",fh=!1;function dh(e,t){switch(e){case"keyup":return ib.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function hh(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var Dl=!1;function rb(e,t){switch(e){case"compositionend":return hh(t);case"keypress":return t.which!==32?null:(fh=!0,oh);case"textInput":return e=t.data,e===oh&&fh?null:e;default:return null}}function ub(e,t){if(Dl)return e==="compositionend"||!wc&&dh(e,t)?(e=lh(),_r=vc=ta=null,Dl=!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:n,offset:t-e};e=i}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=Sh(n)}}function wh(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?wh(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function Eh(e){e=e!=null&&e.ownerDocument!=null&&e.ownerDocument.defaultView!=null?e.ownerDocument.defaultView:window;for(var t=xr(e.document);t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href=="string"}catch{n=!1}if(n)e=t.contentWindow;else break;t=xr(e.document)}return t}function Tc(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")}var pb=An&&"documentMode"in document&&11>=document.documentMode,Ol=null,Mc=null,ns=null,Ac=!1;function jh(e,t,n){var i=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;Ac||Ol==null||Ol!==xr(i)||(i=Ol,"selectionStart"in i&&Tc(i)?i={start:i.selectionStart,end:i.selectionEnd}:(i=(i.ownerDocument&&i.ownerDocument.defaultView||window).getSelection(),i={anchorNode:i.anchorNode,anchorOffset:i.anchorOffset,focusNode:i.focusNode,focusOffset:i.focusOffset}),ns&&ts(ns,i)||(ns=i,i=gu(Mc,"onSelect"),0>=m,u-=m,dn=1<<32-Dt(t)+u|n<ye?(we=re,re=null):we=re.sibling;var Re=U(N,re,O[ye],V);if(Re===null){re===null&&(re=we);break}e&&re&&Re.alternate===null&&t(N,re),A=c(Re,A,ye),Ce===null?ue=Re:Ce.sibling=Re,Ce=Re,re=we}if(ye===O.length)return n(N,re),je&&Rn(N,ye),ue;if(re===null){for(;yeye?(we=re,re=null):we=re.sibling;var wa=U(N,re,Re.value,V);if(wa===null){re===null&&(re=we);break}e&&re&&wa.alternate===null&&t(N,re),A=c(wa,A,ye),Ce===null?ue=wa:Ce.sibling=wa,Ce=wa,re=we}if(Re.done)return n(N,re),je&&Rn(N,ye),ue;if(re===null){for(;!Re.done;ye++,Re=O.next())Re=Y(N,Re.value,V),Re!==null&&(A=c(Re,A,ye),Ce===null?ue=Re:Ce.sibling=Re,Ce=Re);return je&&Rn(N,ye),ue}for(re=i(re);!Re.done;ye++,Re=O.next())Re=H(re,N,ye,Re.value,V),Re!==null&&(e&&Re.alternate!==null&&re.delete(Re.key===null?ye:Re.key),A=c(Re,A,ye),Ce===null?ue=Re:Ce.sibling=Re,Ce=Re);return e&&re.forEach(function(U1){return t(N,U1)}),je&&Rn(N,ye),ue}function Be(N,A,O,V){if(typeof O=="object"&&O!==null&&O.type===E&&O.key===null&&(O=O.props.children),typeof O=="object"&&O!==null){switch(O.$$typeof){case S:e:{for(var ue=O.key;A!==null;){if(A.key===ue){if(ue=O.type,ue===E){if(A.tag===7){n(N,A.sibling),V=u(A,O.props.children),V.return=N,N=V;break e}}else if(A.elementType===ue||typeof ue=="object"&&ue!==null&&ue.$$typeof===J&&Ia(ue)===A.type){n(N,A.sibling),V=u(A,O.props),us(V,O),V.return=N,N=V;break e}n(N,A);break}else t(N,A);A=A.sibling}O.type===E?(V=Ja(O.props.children,N.mode,V,O.key),V.return=N,N=V):(V=Nr(O.type,O.key,O.props,null,N.mode,V),us(V,O),V.return=N,N=V)}return m(N);case w:e:{for(ue=O.key;A!==null;){if(A.key===ue)if(A.tag===4&&A.stateNode.containerInfo===O.containerInfo&&A.stateNode.implementation===O.implementation){n(N,A.sibling),V=u(A,O.children||[]),V.return=N,N=V;break e}else{n(N,A);break}else t(N,A);A=A.sibling}V=kc(O,N.mode,V),V.return=N,N=V}return m(N);case J:return O=Ia(O),Be(N,A,O,V)}if(ae(O))return ie(N,A,O,V);if(I(O)){if(ue=I(O),typeof ue!="function")throw Error(r(150));return O=ue.call(O),oe(N,A,O,V)}if(typeof O.then=="function")return Be(N,A,Hr(O),V);if(O.$$typeof===L)return Be(N,A,kr(N,O),V);qr(N,O)}return typeof O=="string"&&O!==""||typeof O=="number"||typeof O=="bigint"?(O=""+O,A!==null&&A.tag===6?(n(N,A.sibling),V=u(A,O),V.return=N,N=V):(n(N,A),V=Oc(O,N.mode,V),V.return=N,N=V),m(N)):n(N,A)}return function(N,A,O,V){try{rs=0;var ue=Be(N,A,O,V);return Kl=null,ue}catch(re){if(re===Yl||re===Lr)throw re;var Ce=kt(29,re,null,N.mode);return Ce.lanes=V,Ce.return=N,Ce}finally{}}}var tl=Jh(!0),Fh=Jh(!1),sa=!1;function Zc(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function Jc(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,callbacks:null})}function ra(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function ua(e,t,n){var i=e.updateQueue;if(i===null)return null;if(i=i.shared,(ze&2)!==0){var u=i.pending;return u===null?t.next=t:(t.next=u.next,u.next=t),i.pending=t,t=zr(e),Nh(e,null,n),t}return Rr(e,i,t,n),zr(e)}function cs(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,(n&4194048)!==0)){var i=t.lanes;i&=e.pendingLanes,n|=i,t.lanes=n,qd(e,n)}}function Fc(e,t){var n=e.updateQueue,i=e.alternate;if(i!==null&&(i=i.updateQueue,n===i)){var u=null,c=null;if(n=n.firstBaseUpdate,n!==null){do{var m={lane:n.lane,tag:n.tag,payload:n.payload,callback:null,next:null};c===null?u=c=m:c=c.next=m,n=n.next}while(n!==null);c===null?u=c=t:c=c.next=t}else u=c=t;n={baseState:i.baseState,firstBaseUpdate:u,lastBaseUpdate:c,shared:i.shared,callbacks:i.callbacks},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}var $c=!1;function os(){if($c){var e=Vl;if(e!==null)throw e}}function fs(e,t,n,i){$c=!1;var u=e.updateQueue;sa=!1;var c=u.firstBaseUpdate,m=u.lastBaseUpdate,x=u.shared.pending;if(x!==null){u.shared.pending=null;var T=x,k=T.next;T.next=null,m===null?c=k:m.next=k,m=T;var q=e.alternate;q!==null&&(q=q.updateQueue,x=q.lastBaseUpdate,x!==m&&(x===null?q.firstBaseUpdate=k:x.next=k,q.lastBaseUpdate=T))}if(c!==null){var Y=u.baseState;m=0,q=k=T=null,x=c;do{var U=x.lane&-536870913,H=U!==x.lane;if(H?(_e&U)===U:(i&U)===U){U!==0&&U===Ql&&($c=!0),q!==null&&(q=q.next={lane:0,tag:x.tag,payload:x.payload,callback:null,next:null});e:{var ie=e,oe=x;U=t;var Be=n;switch(oe.tag){case 1:if(ie=oe.payload,typeof ie=="function"){Y=ie.call(Be,Y,U);break e}Y=ie;break e;case 3:ie.flags=ie.flags&-65537|128;case 0:if(ie=oe.payload,U=typeof ie=="function"?ie.call(Be,Y,U):ie,U==null)break e;Y=y({},Y,U);break e;case 2:sa=!0}}U=x.callback,U!==null&&(e.flags|=64,H&&(e.flags|=8192),H=u.callbacks,H===null?u.callbacks=[U]:H.push(U))}else H={lane:U,tag:x.tag,payload:x.payload,callback:x.callback,next:null},q===null?(k=q=H,T=Y):q=q.next=H,m|=U;if(x=x.next,x===null){if(x=u.shared.pending,x===null)break;H=x,x=H.next,H.next=null,u.lastBaseUpdate=H,u.shared.pending=null}}while(!0);q===null&&(T=Y),u.baseState=T,u.firstBaseUpdate=k,u.lastBaseUpdate=q,c===null&&(u.shared.lanes=0),ha|=m,e.lanes=m,e.memoizedState=Y}}function $h(e,t){if(typeof e!="function")throw Error(r(191,e));e.call(t)}function Wh(e,t){var n=e.callbacks;if(n!==null)for(e.callbacks=null,e=0;ec?c:8;var m=B.T,x={};B.T=x,po(e,!1,t,n);try{var T=u(),k=B.S;if(k!==null&&k(x,T),T!==null&&typeof T=="object"&&typeof T.then=="function"){var q=jb(T,i);ms(e,t,q,qt(e))}else ms(e,t,i,qt(e))}catch(Y){ms(e,t,{then:function(){},status:"rejected",reason:Y},qt())}finally{W.p=c,m!==null&&x.types!==null&&(m.types=x.types),B.T=m}}function zb(){}function mo(e,t,n,i){if(e.tag!==5)throw Error(r(476));var u=Cm(e).queue;Am(e,u,t,te,n===null?zb:function(){return Rm(e),n(i)})}function Cm(e){var t=e.memoizedState;if(t!==null)return t;t={memoizedState:te,baseState:te,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:On,lastRenderedState:te},next:null};var n={};return t.next={memoizedState:n,baseState:n,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:On,lastRenderedState:n},next:null},e.memoizedState=t,e=e.alternate,e!==null&&(e.memoizedState=t),t}function Rm(e){var t=Cm(e);t.next===null&&(t=e.alternate.memoizedState),ms(e,t.next.queue,{},qt())}function go(){return ht(zs)}function zm(){return et().memoizedState}function Nm(){return et().memoizedState}function Nb(e){for(var t=e.return;t!==null;){switch(t.tag){case 24:case 3:var n=qt();e=ra(n);var i=ua(t,e,n);i!==null&&(At(i,t,n),cs(i,t,n)),t={cache:Vc()},e.payload=t;return}t=t.return}}function Db(e,t,n){var i=qt();n={lane:i,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null},$r(e)?Om(t,n):(n=Nc(e,t,n,i),n!==null&&(At(n,e,i),km(n,t,i)))}function Dm(e,t,n){var i=qt();ms(e,t,n,i)}function ms(e,t,n,i){var u={lane:i,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null};if($r(e))Om(t,u);else{var c=e.alternate;if(e.lanes===0&&(c===null||c.lanes===0)&&(c=t.lastRenderedReducer,c!==null))try{var m=t.lastRenderedState,x=c(m,n);if(u.hasEagerState=!0,u.eagerState=x,Ot(x,m))return Rr(e,t,u,0),He===null&&Cr(),!1}catch{}finally{}if(n=Nc(e,t,u,i),n!==null)return At(n,e,i),km(n,t,i),!0}return!1}function po(e,t,n,i){if(i={lane:2,revertLane:Jo(),gesture:null,action:i,hasEagerState:!1,eagerState:null,next:null},$r(e)){if(t)throw Error(r(479))}else t=Nc(e,n,i,2),t!==null&&At(t,e,2)}function $r(e){var t=e.alternate;return e===pe||t!==null&&t===pe}function Om(e,t){Zl=Vr=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function km(e,t,n){if((n&4194048)!==0){var i=t.lanes;i&=e.pendingLanes,n|=i,t.lanes=n,qd(e,n)}}var gs={readContext:ht,use:Xr,useCallback:$e,useContext:$e,useEffect:$e,useImperativeHandle:$e,useLayoutEffect:$e,useInsertionEffect:$e,useMemo:$e,useReducer:$e,useRef:$e,useState:$e,useDebugValue:$e,useDeferredValue:$e,useTransition:$e,useSyncExternalStore:$e,useId:$e,useHostTransitionStatus:$e,useFormState:$e,useActionState:$e,useOptimistic:$e,useMemoCache:$e,useCacheRefresh:$e};gs.useEffectEvent=$e;var Um={readContext:ht,use:Xr,useCallback:function(e,t){return bt().memoizedState=[e,t===void 0?null:t],e},useContext:ht,useEffect:bm,useImperativeHandle:function(e,t,n){n=n!=null?n.concat([e]):null,Jr(4194308,4,wm.bind(null,t,e),n)},useLayoutEffect:function(e,t){return Jr(4194308,4,e,t)},useInsertionEffect:function(e,t){Jr(4,2,e,t)},useMemo:function(e,t){var n=bt();t=t===void 0?null:t;var i=e();if(nl){In(!0);try{e()}finally{In(!1)}}return n.memoizedState=[i,t],i},useReducer:function(e,t,n){var i=bt();if(n!==void 0){var u=n(t);if(nl){In(!0);try{n(t)}finally{In(!1)}}}else u=t;return i.memoizedState=i.baseState=u,e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:u},i.queue=e,e=e.dispatch=Db.bind(null,pe,e),[i.memoizedState,e]},useRef:function(e){var t=bt();return e={current:e},t.memoizedState=e},useState:function(e){e=uo(e);var t=e.queue,n=Dm.bind(null,pe,t);return t.dispatch=n,[e.memoizedState,n]},useDebugValue:fo,useDeferredValue:function(e,t){var n=bt();return ho(n,e,t)},useTransition:function(){var e=uo(!1);return e=Am.bind(null,pe,e.queue,!0,!1),bt().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,t,n){var i=pe,u=bt();if(je){if(n===void 0)throw Error(r(407));n=n()}else{if(n=t(),He===null)throw Error(r(349));(_e&127)!==0||am(i,t,n)}u.memoizedState=n;var c={value:n,getSnapshot:t};return u.queue=c,bm(im.bind(null,i,c,e),[e]),i.flags|=2048,Fl(9,{destroy:void 0},lm.bind(null,i,c,n,t),null),n},useId:function(){var e=bt(),t=He.identifierPrefix;if(je){var n=hn,i=dn;n=(i&~(1<<32-Dt(i)-1)).toString(32)+n,t="_"+t+"R_"+n,n=Yr++,0<\/script>",c=c.removeChild(c.firstChild);break;case"select":c=typeof i.is=="string"?m.createElement("select",{is:i.is}):m.createElement("select"),i.multiple?c.multiple=!0:i.size&&(c.size=i.size);break;default:c=typeof i.is=="string"?m.createElement(u,{is:i.is}):m.createElement(u)}}c[ft]=t,c[_t]=i;e:for(m=t.child;m!==null;){if(m.tag===5||m.tag===6)c.appendChild(m.stateNode);else if(m.tag!==4&&m.tag!==27&&m.child!==null){m.child.return=m,m=m.child;continue}if(m===t)break e;for(;m.sibling===null;){if(m.return===null||m.return===t)break e;m=m.return}m.sibling.return=m.return,m=m.sibling}t.stateNode=c;e:switch(gt(c,u,i),u){case"button":case"input":case"select":case"textarea":i=!!i.autoFocus;break e;case"img":i=!0;break e;default:i=!1}i&&Un(t)}}return Ye(t),Ro(t,t.type,e===null?null:e.memoizedProps,t.pendingProps,n),null;case 6:if(e&&t.stateNode!=null)e.memoizedProps!==i&&Un(t);else{if(typeof i!="string"&&t.stateNode===null)throw Error(r(166));if(e=ge.current,ql(t)){if(e=t.stateNode,n=t.memoizedProps,i=null,u=dt,u!==null)switch(u.tag){case 27:case 5:i=u.memoizedProps}e[ft]=t,e=!!(e.nodeValue===n||i!==null&&i.suppressHydrationWarning===!0||tp(e.nodeValue,n)),e||la(t,!0)}else e=pu(e).createTextNode(i),e[ft]=t,t.stateNode=e}return Ye(t),null;case 31:if(n=t.memoizedState,e===null||e.memoizedState!==null){if(i=ql(t),n!==null){if(e===null){if(!i)throw Error(r(318));if(e=t.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(r(557));e[ft]=t}else Fa(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;Ye(t),e=!1}else n=Hc(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=n),e=!0;if(!e)return t.flags&256?(Lt(t),t):(Lt(t),null);if((t.flags&128)!==0)throw Error(r(558))}return Ye(t),null;case 13:if(i=t.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(u=ql(t),i!==null&&i.dehydrated!==null){if(e===null){if(!u)throw Error(r(318));if(u=t.memoizedState,u=u!==null?u.dehydrated:null,!u)throw Error(r(317));u[ft]=t}else Fa(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;Ye(t),u=!1}else u=Hc(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=u),u=!0;if(!u)return t.flags&256?(Lt(t),t):(Lt(t),null)}return Lt(t),(t.flags&128)!==0?(t.lanes=n,t):(n=i!==null,e=e!==null&&e.memoizedState!==null,n&&(i=t.child,u=null,i.alternate!==null&&i.alternate.memoizedState!==null&&i.alternate.memoizedState.cachePool!==null&&(u=i.alternate.memoizedState.cachePool.pool),c=null,i.memoizedState!==null&&i.memoizedState.cachePool!==null&&(c=i.memoizedState.cachePool.pool),c!==u&&(i.flags|=2048)),n!==e&&n&&(t.child.flags|=8192),tu(t,t.updateQueue),Ye(t),null);case 4:return Qe(),e===null&&Po(t.stateNode.containerInfo),Ye(t),null;case 10:return Nn(t.type),Ye(t),null;case 19:if(X(Ie),i=t.memoizedState,i===null)return Ye(t),null;if(u=(t.flags&128)!==0,c=i.rendering,c===null)if(u)ys(i,!1);else{if(We!==0||e!==null&&(e.flags&128)!==0)for(e=t.child;e!==null;){if(c=Qr(e),c!==null){for(t.flags|=128,ys(i,!1),e=c.updateQueue,t.updateQueue=e,tu(t,e),t.subtreeFlags=0,e=n,n=t.child;n!==null;)Dh(n,e),n=n.sibling;return ne(Ie,Ie.current&1|2),je&&Rn(t,i.treeForkCount),t.child}e=e.sibling}i.tail!==null&&Fe()>su&&(t.flags|=128,u=!0,ys(i,!1),t.lanes=4194304)}else{if(!u)if(e=Qr(c),e!==null){if(t.flags|=128,u=!0,e=e.updateQueue,t.updateQueue=e,tu(t,e),ys(i,!0),i.tail===null&&i.tailMode==="hidden"&&!c.alternate&&!je)return Ye(t),null}else 2*Fe()-i.renderingStartTime>su&&n!==536870912&&(t.flags|=128,u=!0,ys(i,!1),t.lanes=4194304);i.isBackwards?(c.sibling=t.child,t.child=c):(e=i.last,e!==null?e.sibling=c:t.child=c,i.last=c)}return i.tail!==null?(e=i.tail,i.rendering=e,i.tail=e.sibling,i.renderingStartTime=Fe(),e.sibling=null,n=Ie.current,ne(Ie,u?n&1|2:n&1),je&&Rn(t,i.treeForkCount),e):(Ye(t),null);case 22:case 23:return Lt(t),Pc(),i=t.memoizedState!==null,e!==null?e.memoizedState!==null!==i&&(t.flags|=8192):i&&(t.flags|=8192),i?(n&536870912)!==0&&(t.flags&128)===0&&(Ye(t),t.subtreeFlags&6&&(t.flags|=8192)):Ye(t),n=t.updateQueue,n!==null&&tu(t,n.retryQueue),n=null,e!==null&&e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(n=e.memoizedState.cachePool.pool),i=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(i=t.memoizedState.cachePool.pool),i!==n&&(t.flags|=2048),e!==null&&X(Pa),null;case 24:return n=null,e!==null&&(n=e.memoizedState.cache),t.memoizedState.cache!==n&&(t.flags|=2048),Nn(tt),Ye(t),null;case 25:return null;case 30:return null}throw Error(r(156,t.tag))}function Bb(e,t){switch(Lc(t),t.tag){case 1:return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return Nn(tt),Qe(),e=t.flags,(e&65536)!==0&&(e&128)===0?(t.flags=e&-65537|128,t):null;case 26:case 27:case 5:return wn(t),null;case 31:if(t.memoizedState!==null){if(Lt(t),t.alternate===null)throw Error(r(340));Fa()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 13:if(Lt(t),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(r(340));Fa()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return X(Ie),null;case 4:return Qe(),null;case 10:return Nn(t.type),null;case 22:case 23:return Lt(t),Pc(),e!==null&&X(Pa),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 24:return Nn(tt),null;case 25:return null;default:return null}}function sg(e,t){switch(Lc(t),t.tag){case 3:Nn(tt),Qe();break;case 26:case 27:case 5:wn(t);break;case 4:Qe();break;case 31:t.memoizedState!==null&&Lt(t);break;case 13:Lt(t);break;case 19:X(Ie);break;case 10:Nn(t.type);break;case 22:case 23:Lt(t),Pc(),e!==null&&X(Pa);break;case 24:Nn(tt)}}function vs(e,t){try{var n=t.updateQueue,i=n!==null?n.lastEffect:null;if(i!==null){var u=i.next;n=u;do{if((n.tag&e)===e){i=void 0;var c=n.create,m=n.inst;i=c(),m.destroy=i}n=n.next}while(n!==u)}}catch(x){Oe(t,t.return,x)}}function fa(e,t,n){try{var i=t.updateQueue,u=i!==null?i.lastEffect:null;if(u!==null){var c=u.next;i=c;do{if((i.tag&e)===e){var m=i.inst,x=m.destroy;if(x!==void 0){m.destroy=void 0,u=t;var T=n,k=x;try{k()}catch(q){Oe(u,T,q)}}}i=i.next}while(i!==c)}}catch(q){Oe(t,t.return,q)}}function rg(e){var t=e.updateQueue;if(t!==null){var n=e.stateNode;try{Wh(t,n)}catch(i){Oe(e,e.return,i)}}}function ug(e,t,n){n.props=al(e.type,e.memoizedProps),n.state=e.memoizedState;try{n.componentWillUnmount()}catch(i){Oe(e,t,i)}}function bs(e,t){try{var n=e.ref;if(n!==null){switch(e.tag){case 26:case 27:case 5:var i=e.stateNode;break;case 30:i=e.stateNode;break;default:i=e.stateNode}typeof n=="function"?e.refCleanup=n(i):n.current=i}}catch(u){Oe(e,t,u)}}function mn(e,t){var n=e.ref,i=e.refCleanup;if(n!==null)if(typeof i=="function")try{i()}catch(u){Oe(e,t,u)}finally{e.refCleanup=null,e=e.alternate,e!=null&&(e.refCleanup=null)}else if(typeof n=="function")try{n(null)}catch(u){Oe(e,t,u)}else n.current=null}function cg(e){var t=e.type,n=e.memoizedProps,i=e.stateNode;try{e:switch(t){case"button":case"input":case"select":case"textarea":n.autoFocus&&i.focus();break e;case"img":n.src?i.src=n.src:n.srcSet&&(i.srcset=n.srcSet)}}catch(u){Oe(e,e.return,u)}}function zo(e,t,n){try{var i=e.stateNode;s1(i,e.type,n,t),i[_t]=t}catch(u){Oe(e,e.return,u)}}function og(e){return e.tag===5||e.tag===3||e.tag===26||e.tag===27&&va(e.type)||e.tag===4}function No(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||og(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.tag===27&&va(e.type)||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 Do(e,t,n){var i=e.tag;if(i===5||i===6)e=e.stateNode,t?(n.nodeType===9?n.body:n.nodeName==="HTML"?n.ownerDocument.body:n).insertBefore(e,t):(t=n.nodeType===9?n.body:n.nodeName==="HTML"?n.ownerDocument.body:n,t.appendChild(e),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=Mn));else if(i!==4&&(i===27&&va(e.type)&&(n=e.stateNode,t=null),e=e.child,e!==null))for(Do(e,t,n),e=e.sibling;e!==null;)Do(e,t,n),e=e.sibling}function nu(e,t,n){var i=e.tag;if(i===5||i===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(i!==4&&(i===27&&va(e.type)&&(n=e.stateNode),e=e.child,e!==null))for(nu(e,t,n),e=e.sibling;e!==null;)nu(e,t,n),e=e.sibling}function fg(e){var t=e.stateNode,n=e.memoizedProps;try{for(var i=e.type,u=t.attributes;u.length;)t.removeAttributeNode(u[0]);gt(t,i,n),t[ft]=e,t[_t]=n}catch(c){Oe(e,e.return,c)}}var Ln=!1,lt=!1,Oo=!1,dg=typeof WeakSet=="function"?WeakSet:Set,ut=null;function Hb(e,t){if(e=e.containerInfo,tf=wu,e=Eh(e),Tc(e)){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{n=(n=e.ownerDocument)&&n.defaultView||window;var i=n.getSelection&&n.getSelection();if(i&&i.rangeCount!==0){n=i.anchorNode;var u=i.anchorOffset,c=i.focusNode;i=i.focusOffset;try{n.nodeType,c.nodeType}catch{n=null;break e}var m=0,x=-1,T=-1,k=0,q=0,Y=e,U=null;t:for(;;){for(var H;Y!==n||u!==0&&Y.nodeType!==3||(x=m+u),Y!==c||i!==0&&Y.nodeType!==3||(T=m+i),Y.nodeType===3&&(m+=Y.nodeValue.length),(H=Y.firstChild)!==null;)U=Y,Y=H;for(;;){if(Y===e)break t;if(U===n&&++k===u&&(x=m),U===c&&++q===i&&(T=m),(H=Y.nextSibling)!==null)break;Y=U,U=Y.parentNode}Y=H}n=x===-1||T===-1?null:{start:x,end:T}}else n=null}n=n||{start:0,end:0}}else n=null;for(nf={focusedElem:e,selectionRange:n},wu=!1,ut=t;ut!==null;)if(t=ut,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,ut=e;else for(;ut!==null;){switch(t=ut,c=t.alternate,e=t.flags,t.tag){case 0:if((e&4)!==0&&(e=t.updateQueue,e=e!==null?e.events:null,e!==null))for(n=0;n title"))),gt(c,i,n),c[ft]=e,rt(c),i=c;break e;case"link":var m=vp("link","href",u).get(i+(n.href||""));if(m){for(var x=0;xBe&&(m=Be,Be=oe,oe=m);var N=_h(x,oe),A=_h(x,Be);if(N&&A&&(H.rangeCount!==1||H.anchorNode!==N.node||H.anchorOffset!==N.offset||H.focusNode!==A.node||H.focusOffset!==A.offset)){var O=Y.createRange();O.setStart(N.node,N.offset),H.removeAllRanges(),oe>Be?(H.addRange(O),H.extend(A.node,A.offset)):(O.setEnd(A.node,A.offset),H.addRange(O))}}}}for(Y=[],H=x;H=H.parentNode;)H.nodeType===1&&Y.push({element:H,left:H.scrollLeft,top:H.scrollTop});for(typeof x.focus=="function"&&x.focus(),x=0;xn?32:n,B.T=null,n=Go,Go=null;var c=ga,m=Qn;if(st=0,ei=ga=null,Qn=0,(ze&6)!==0)throw Error(r(331));var x=ze;if(ze|=4,wg(c.current),xg(c,c.current,m,n),ze=x,js(0,!1),Nt&&typeof Nt.onPostCommitFiberRoot=="function")try{Nt.onPostCommitFiberRoot(Vi,c)}catch{}return!0}finally{W.p=u,B.T=i,Gg(e,t)}}function Vg(e,t,n){t=Jt(n,t),t=xo(e.stateNode,t,2),e=ua(e,t,2),e!==null&&(Ki(e,2),gn(e))}function Oe(e,t,n){if(e.tag===3)Vg(e,e,n);else for(;t!==null;){if(t.tag===3){Vg(t,e,n);break}else if(t.tag===1){var i=t.stateNode;if(typeof t.type.getDerivedStateFromError=="function"||typeof i.componentDidCatch=="function"&&(ma===null||!ma.has(i))){e=Jt(n,e),n=Ym(2),i=ua(t,n,2),i!==null&&(Km(n,i,t,e),Ki(i,2),gn(i));break}}t=t.return}}function Ko(e,t,n){var i=e.pingCache;if(i===null){i=e.pingCache=new Qb;var u=new Set;i.set(t,u)}else u=i.get(t),u===void 0&&(u=new Set,i.set(t,u));u.has(n)||(Lo=!0,u.add(n),e=Zb.bind(null,e,t,n),t.then(e,e))}function Zb(e,t,n){var i=e.pingCache;i!==null&&i.delete(t),e.pingedLanes|=e.suspendedLanes&n,e.warmLanes&=~n,He===e&&(_e&n)===n&&(We===4||We===3&&(_e&62914560)===_e&&300>Fe()-iu?(ze&2)===0&&ti(e,0):Bo|=n,Il===_e&&(Il=0)),gn(e)}function Yg(e,t){t===0&&(t=Bd()),e=Za(e,t),e!==null&&(Ki(e,t),gn(e))}function Jb(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),Yg(e,n)}function Fb(e,t){var n=0;switch(e.tag){case 31:case 13:var i=e.stateNode,u=e.memoizedState;u!==null&&(n=u.retryLane);break;case 19:i=e.stateNode;break;case 22:i=e.stateNode._retryCache;break;default:throw Error(r(314))}i!==null&&i.delete(t),Yg(e,n)}function $b(e,t){return qi(e,t)}var du=null,ai=null,Xo=!1,hu=!1,Zo=!1,ya=0;function gn(e){e!==ai&&e.next===null&&(ai===null?du=ai=e:ai=ai.next=e),hu=!0,Xo||(Xo=!0,Pb())}function js(e,t){if(!Zo&&hu){Zo=!0;do for(var n=!1,i=du;i!==null;){if(e!==0){var u=i.pendingLanes;if(u===0)var c=0;else{var m=i.suspendedLanes,x=i.pingedLanes;c=(1<<31-Dt(42|e)+1)-1,c&=u&~(m&~x),c=c&201326741?c&201326741|1:c?c|2:0}c!==0&&(n=!0,Jg(i,c))}else c=_e,c=yr(i,i===He?c:0,i.cancelPendingCommit!==null||i.timeoutHandle!==-1),(c&3)===0||Yi(i,c)||(n=!0,Jg(i,c));i=i.next}while(n);Zo=!1}}function Wb(){Kg()}function Kg(){hu=Xo=!1;var e=0;ya!==0&&u1()&&(e=ya);for(var t=Fe(),n=null,i=du;i!==null;){var u=i.next,c=Xg(i,t);c===0?(i.next=null,n===null?du=u:n.next=u,u===null&&(ai=n)):(n=i,(e!==0||(c&3)!==0)&&(hu=!0)),i=u}st!==0&&st!==5||js(e),ya!==0&&(ya=0)}function Xg(e,t){for(var n=e.suspendedLanes,i=e.pingedLanes,u=e.expirationTimes,c=e.pendingLanes&-62914561;0x)break;var q=T.transferSize,Y=T.initiatorType;q&&np(Y)&&(T=T.responseEnd,m+=q*(T"u"?null:document;function mp(e,t,n){var i=li;if(i&&typeof t=="string"&&t){var u=Xt(t);u='link[rel="'+e+'"][href="'+u+'"]',typeof n=="string"&&(u+='[crossorigin="'+n+'"]'),hp.has(u)||(hp.add(u),e={rel:e,crossOrigin:n,href:t},i.querySelector(u)===null&&(t=i.createElement("link"),gt(t,"link",e),rt(t),i.head.appendChild(t)))}}function y1(e){Vn.D(e),mp("dns-prefetch",e,null)}function v1(e,t){Vn.C(e,t),mp("preconnect",e,t)}function b1(e,t,n){Vn.L(e,t,n);var i=li;if(i&&e&&t){var u='link[rel="preload"][as="'+Xt(t)+'"]';t==="image"&&n&&n.imageSrcSet?(u+='[imagesrcset="'+Xt(n.imageSrcSet)+'"]',typeof n.imageSizes=="string"&&(u+='[imagesizes="'+Xt(n.imageSizes)+'"]')):u+='[href="'+Xt(e)+'"]';var c=u;switch(t){case"style":c=ii(e);break;case"script":c=si(e)}en.has(c)||(e=y({rel:"preload",href:t==="image"&&n&&n.imageSrcSet?void 0:e,as:t},n),en.set(c,e),i.querySelector(u)!==null||t==="style"&&i.querySelector(Cs(c))||t==="script"&&i.querySelector(Rs(c))||(t=i.createElement("link"),gt(t,"link",e),rt(t),i.head.appendChild(t)))}}function x1(e,t){Vn.m(e,t);var n=li;if(n&&e){var i=t&&typeof t.as=="string"?t.as:"script",u='link[rel="modulepreload"][as="'+Xt(i)+'"][href="'+Xt(e)+'"]',c=u;switch(i){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":c=si(e)}if(!en.has(c)&&(e=y({rel:"modulepreload",href:e},t),en.set(c,e),n.querySelector(u)===null)){switch(i){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(n.querySelector(Rs(c)))return}i=n.createElement("link"),gt(i,"link",e),rt(i),n.head.appendChild(i)}}}function S1(e,t,n){Vn.S(e,t,n);var i=li;if(i&&e){var u=Ml(i).hoistableStyles,c=ii(e);t=t||"default";var m=u.get(c);if(!m){var x={loading:0,preload:null};if(m=i.querySelector(Cs(c)))x.loading=5;else{e=y({rel:"stylesheet",href:e,"data-precedence":t},n),(n=en.get(c))&&of(e,n);var T=m=i.createElement("link");rt(T),gt(T,"link",e),T._p=new Promise(function(k,q){T.onload=k,T.onerror=q}),T.addEventListener("load",function(){x.loading|=1}),T.addEventListener("error",function(){x.loading|=2}),x.loading|=4,vu(m,t,i)}m={type:"stylesheet",instance:m,count:1,state:x},u.set(c,m)}}}function _1(e,t){Vn.X(e,t);var n=li;if(n&&e){var i=Ml(n).hoistableScripts,u=si(e),c=i.get(u);c||(c=n.querySelector(Rs(u)),c||(e=y({src:e,async:!0},t),(t=en.get(u))&&ff(e,t),c=n.createElement("script"),rt(c),gt(c,"link",e),n.head.appendChild(c)),c={type:"script",instance:c,count:1,state:null},i.set(u,c))}}function w1(e,t){Vn.M(e,t);var n=li;if(n&&e){var i=Ml(n).hoistableScripts,u=si(e),c=i.get(u);c||(c=n.querySelector(Rs(u)),c||(e=y({src:e,async:!0,type:"module"},t),(t=en.get(u))&&ff(e,t),c=n.createElement("script"),rt(c),gt(c,"link",e),n.head.appendChild(c)),c={type:"script",instance:c,count:1,state:null},i.set(u,c))}}function gp(e,t,n,i){var u=(u=ge.current)?yu(u):null;if(!u)throw Error(r(446));switch(e){case"meta":case"title":return null;case"style":return typeof n.precedence=="string"&&typeof n.href=="string"?(t=ii(n.href),n=Ml(u).hoistableStyles,i=n.get(t),i||(i={type:"style",instance:null,count:0,state:null},n.set(t,i)),i):{type:"void",instance:null,count:0,state:null};case"link":if(n.rel==="stylesheet"&&typeof n.href=="string"&&typeof n.precedence=="string"){e=ii(n.href);var c=Ml(u).hoistableStyles,m=c.get(e);if(m||(u=u.ownerDocument||u,m={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},c.set(e,m),(c=u.querySelector(Cs(e)))&&!c._p&&(m.instance=c,m.state.loading=5),en.has(e)||(n={rel:"preload",as:"style",href:n.href,crossOrigin:n.crossOrigin,integrity:n.integrity,media:n.media,hrefLang:n.hrefLang,referrerPolicy:n.referrerPolicy},en.set(e,n),c||E1(u,e,n,m.state))),t&&i===null)throw Error(r(528,""));return m}if(t&&i!==null)throw Error(r(529,""));return null;case"script":return t=n.async,n=n.src,typeof n=="string"&&t&&typeof t!="function"&&typeof t!="symbol"?(t=si(n),n=Ml(u).hoistableScripts,i=n.get(t),i||(i={type:"script",instance:null,count:0,state:null},n.set(t,i)),i):{type:"void",instance:null,count:0,state:null};default:throw Error(r(444,e))}}function ii(e){return'href="'+Xt(e)+'"'}function Cs(e){return'link[rel="stylesheet"]['+e+"]"}function pp(e){return y({},e,{"data-precedence":e.precedence,precedence:null})}function E1(e,t,n,i){e.querySelector('link[rel="preload"][as="style"]['+t+"]")?i.loading=1:(t=e.createElement("link"),i.preload=t,t.addEventListener("load",function(){return i.loading|=1}),t.addEventListener("error",function(){return i.loading|=2}),gt(t,"link",n),rt(t),e.head.appendChild(t))}function si(e){return'[src="'+Xt(e)+'"]'}function Rs(e){return"script[async]"+e}function yp(e,t,n){if(t.count++,t.instance===null)switch(t.type){case"style":var i=e.querySelector('style[data-href~="'+Xt(n.href)+'"]');if(i)return t.instance=i,rt(i),i;var u=y({},n,{"data-href":n.href,"data-precedence":n.precedence,href:null,precedence:null});return i=(e.ownerDocument||e).createElement("style"),rt(i),gt(i,"style",u),vu(i,n.precedence,e),t.instance=i;case"stylesheet":u=ii(n.href);var c=e.querySelector(Cs(u));if(c)return t.state.loading|=4,t.instance=c,rt(c),c;i=pp(n),(u=en.get(u))&&of(i,u),c=(e.ownerDocument||e).createElement("link"),rt(c);var m=c;return m._p=new Promise(function(x,T){m.onload=x,m.onerror=T}),gt(c,"link",i),t.state.loading|=4,vu(c,n.precedence,e),t.instance=c;case"script":return c=si(n.src),(u=e.querySelector(Rs(c)))?(t.instance=u,rt(u),u):(i=n,(u=en.get(c))&&(i=y({},n),ff(i,u)),e=e.ownerDocument||e,u=e.createElement("script"),rt(u),gt(u,"link",i),e.head.appendChild(u),t.instance=u);case"void":return null;default:throw Error(r(443,t.type))}else t.type==="stylesheet"&&(t.state.loading&4)===0&&(i=t.instance,t.state.loading|=4,vu(i,n.precedence,e));return t.instance}function vu(e,t,n){for(var i=n.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),u=i.length?i[i.length-1]:null,c=u,m=0;m title"):null)}function j1(e,t,n){if(n===1||t.itemProp!=null)return!1;switch(e){case"meta":case"title":return!0;case"style":if(typeof t.precedence!="string"||typeof t.href!="string"||t.href==="")break;return!0;case"link":if(typeof t.rel!="string"||typeof t.href!="string"||t.href===""||t.onLoad||t.onError)break;switch(t.rel){case"stylesheet":return e=t.disabled,typeof t.precedence=="string"&&e==null;default:return!0}case"script":if(t.async&&typeof t.async!="function"&&typeof t.async!="symbol"&&!t.onLoad&&!t.onError&&t.src&&typeof t.src=="string")return!0}return!1}function xp(e){return!(e.type==="stylesheet"&&(e.state.loading&3)===0)}function T1(e,t,n,i){if(n.type==="stylesheet"&&(typeof i.media!="string"||matchMedia(i.media).matches!==!1)&&(n.state.loading&4)===0){if(n.instance===null){var u=ii(i.href),c=t.querySelector(Cs(u));if(c){t=c._p,t!==null&&typeof t=="object"&&typeof t.then=="function"&&(e.count++,e=xu.bind(e),t.then(e,e)),n.state.loading|=4,n.instance=c,rt(c);return}c=t.ownerDocument||t,i=pp(i),(u=en.get(u))&&of(i,u),c=c.createElement("link"),rt(c);var m=c;m._p=new Promise(function(x,T){m.onload=x,m.onerror=T}),gt(c,"link",i),n.instance=c}e.stylesheets===null&&(e.stylesheets=new Map),e.stylesheets.set(n,t),(t=n.state.preload)&&(n.state.loading&3)===0&&(e.count++,n=xu.bind(e),t.addEventListener("load",n),t.addEventListener("error",n))}}var df=0;function M1(e,t){return e.stylesheets&&e.count===0&&_u(e,e.stylesheets),0df?50:800)+t);return e.unsuspend=n,function(){e.unsuspend=null,clearTimeout(i),clearTimeout(u)}}:null}function xu(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)_u(this,this.stylesheets);else if(this.unsuspend){var e=this.unsuspend;this.unsuspend=null,e()}}}var Su=null;function _u(e,t){e.stylesheets=null,e.unsuspend!==null&&(e.count++,Su=new Map,t.forEach(A1,e),Su=null,xu.call(e))}function A1(e,t){if(!(t.state.loading&4)){var n=Su.get(e);if(n)var i=n.get(null);else{n=new Map,Su.set(e,n);for(var u=e.querySelectorAll("link[data-precedence],style[data-precedence]"),c=0;c"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(a)}catch(l){console.error(l)}}return a(),_f.exports=Z1(),_f.exports}var F1=J1();const $1=Wy(F1);var ur=class{constructor(){this.listeners=new Set,this.subscribe=this.subscribe.bind(this)}subscribe(a){return this.listeners.add(a),this.onSubscribe(),()=>{this.listeners.delete(a),this.onUnsubscribe()}}hasListeners(){return this.listeners.size>0}onSubscribe(){}onUnsubscribe(){}},cl,Aa,vi,Gy,W1=(Gy=class extends ur{constructor(){super();ce(this,cl);ce(this,Aa);ce(this,vi);le(this,vi,l=>{if(typeof window<"u"&&window.addEventListener){const s=()=>l();return window.addEventListener("visibilitychange",s,!1),()=>{window.removeEventListener("visibilitychange",s)}}})}onSubscribe(){C(this,Aa)||this.setEventListener(C(this,vi))}onUnsubscribe(){var l;this.hasListeners()||((l=C(this,Aa))==null||l.call(this),le(this,Aa,void 0))}setEventListener(l){var s;le(this,vi,l),(s=C(this,Aa))==null||s.call(this),le(this,Aa,l(r=>{typeof r=="boolean"?this.setFocused(r):this.onFocus()}))}setFocused(l){C(this,cl)!==l&&(le(this,cl,l),this.onFocus())}onFocus(){const l=this.isFocused();this.listeners.forEach(s=>{s(l)})}isFocused(){var l;return typeof C(this,cl)=="boolean"?C(this,cl):((l=globalThis.document)==null?void 0:l.visibilityState)!=="hidden"}},cl=new WeakMap,Aa=new WeakMap,vi=new WeakMap,Gy),hd=new W1,P1={setTimeout:(a,l)=>setTimeout(a,l),clearTimeout:a=>clearTimeout(a),setInterval:(a,l)=>setInterval(a,l),clearInterval:a=>clearInterval(a)},Ca,dd,Qy,I1=(Qy=class{constructor(){ce(this,Ca,P1);ce(this,dd,!1)}setTimeoutProvider(a){le(this,Ca,a)}setTimeout(a,l){return C(this,Ca).setTimeout(a,l)}clearTimeout(a){C(this,Ca).clearTimeout(a)}setInterval(a,l){return C(this,Ca).setInterval(a,l)}clearInterval(a){C(this,Ca).clearInterval(a)}},Ca=new WeakMap,dd=new WeakMap,Qy),rl=new I1;function ex(a){setTimeout(a,0)}var tx=typeof window>"u"||"Deno"in globalThis;function Rt(){}function nx(a,l){return typeof a=="function"?a(l):a}function Hf(a){return typeof a=="number"&&a>=0&&a!==1/0}function Py(a,l){return Math.max(a+(l||0)-Date.now(),0)}function La(a,l){return typeof a=="function"?a(l):a}function Qt(a,l){return typeof a=="function"?a(l):a}function Kp(a,l){const{type:s="all",exact:r,fetchStatus:o,predicate:f,queryKey:h,stale:d}=a;if(h){if(r){if(l.queryHash!==md(h,l.options))return!1}else if(!Fs(l.queryKey,h))return!1}if(s!=="all"){const p=l.isActive();if(s==="active"&&!p||s==="inactive"&&p)return!1}return!(typeof d=="boolean"&&l.isStale()!==d||o&&o!==l.state.fetchStatus||f&&!f(l))}function Xp(a,l){const{exact:s,status:r,predicate:o,mutationKey:f}=a;if(f){if(!l.options.mutationKey)return!1;if(s){if(Js(l.options.mutationKey)!==Js(f))return!1}else if(!Fs(l.options.mutationKey,f))return!1}return!(r&&l.state.status!==r||o&&!o(l))}function md(a,l){return((l==null?void 0:l.queryKeyHashFn)||Js)(a)}function Js(a){return JSON.stringify(a,(l,s)=>Gf(s)?Object.keys(s).sort().reduce((r,o)=>(r[o]=s[o],r),{}):s)}function Fs(a,l){return a===l?!0:typeof a!=typeof l?!1:a&&l&&typeof a=="object"&&typeof l=="object"?Object.keys(l).every(s=>Fs(a[s],l[s])):!1}var ax=Object.prototype.hasOwnProperty;function Iy(a,l,s=0){if(a===l)return a;if(s>500)return l;const r=Zp(a)&&Zp(l);if(!r&&!(Gf(a)&&Gf(l)))return l;const f=(r?a:Object.keys(a)).length,h=r?l:Object.keys(l),d=h.length,p=r?new Array(d):{};let g=0;for(let b=0;b{rl.setTimeout(l,a)})}function Qf(a,l,s){return typeof s.structuralSharing=="function"?s.structuralSharing(a,l):s.structuralSharing!==!1?Iy(a,l):l}function ix(a,l,s=0){const r=[...a,l];return s&&r.length>s?r.slice(1):r}function sx(a,l,s=0){const r=[l,...a];return s&&r.length>s?r.slice(0,-1):r}var gd=Symbol();function e0(a,l){return!a.queryFn&&(l!=null&&l.initialPromise)?()=>l.initialPromise:!a.queryFn||a.queryFn===gd?()=>Promise.reject(new Error(`Missing queryFn: '${a.queryHash}'`)):a.queryFn}function t0(a,l){return typeof a=="function"?a(...l):!!a}function rx(a,l,s){let r=!1,o;return Object.defineProperty(a,"signal",{enumerable:!0,get:()=>(o??(o=l()),r||(r=!0,o.aborted?s():o.addEventListener("abort",s,{once:!0})),o)}),a}var $s=(()=>{let a=()=>tx;return{isServer(){return a()},setIsServer(l){a=l}}})();function Vf(){let a,l;const s=new Promise((o,f)=>{a=o,l=f});s.status="pending",s.catch(()=>{});function r(o){Object.assign(s,o),delete s.resolve,delete s.reject}return s.resolve=o=>{r({status:"fulfilled",value:o}),a(o)},s.reject=o=>{r({status:"rejected",reason:o}),l(o)},s}var ux=ex;function cx(){let a=[],l=0,s=d=>{d()},r=d=>{d()},o=ux;const f=d=>{l?a.push(d):o(()=>{s(d)})},h=()=>{const d=a;a=[],d.length&&o(()=>{r(()=>{d.forEach(p=>{s(p)})})})};return{batch:d=>{let p;l++;try{p=d()}finally{l--,l||h()}return p},batchCalls:d=>(...p)=>{f(()=>{d(...p)})},schedule:f,setNotifyFunction:d=>{s=d},setBatchNotifyFunction:d=>{r=d},setScheduler:d=>{o=d}}}var pt=cx(),bi,Ra,xi,Vy,ox=(Vy=class extends ur{constructor(){super();ce(this,bi,!0);ce(this,Ra);ce(this,xi);le(this,xi,l=>{if(typeof window<"u"&&window.addEventListener){const s=()=>l(!0),r=()=>l(!1);return window.addEventListener("online",s,!1),window.addEventListener("offline",r,!1),()=>{window.removeEventListener("online",s),window.removeEventListener("offline",r)}}})}onSubscribe(){C(this,Ra)||this.setEventListener(C(this,xi))}onUnsubscribe(){var l;this.hasListeners()||((l=C(this,Ra))==null||l.call(this),le(this,Ra,void 0))}setEventListener(l){var s;le(this,xi,l),(s=C(this,Ra))==null||s.call(this),le(this,Ra,l(this.setOnline.bind(this)))}setOnline(l){C(this,bi)!==l&&(le(this,bi,l),this.listeners.forEach(r=>{r(l)}))}isOnline(){return C(this,bi)}},bi=new WeakMap,Ra=new WeakMap,xi=new WeakMap,Vy),Vu=new ox;function fx(a){return Math.min(1e3*2**a,3e4)}function n0(a){return(a??"online")==="online"?Vu.isOnline():!0}var Yf=class extends Error{constructor(a){super("CancelledError"),this.revert=a==null?void 0:a.revert,this.silent=a==null?void 0:a.silent}};function a0(a){let l=!1,s=0,r;const o=Vf(),f=()=>o.status!=="pending",h=E=>{var j;if(!f()){const R=new Yf(E);_(R),(j=a.onCancel)==null||j.call(a,R)}},d=()=>{l=!0},p=()=>{l=!1},g=()=>hd.isFocused()&&(a.networkMode==="always"||Vu.isOnline())&&a.canRun(),b=()=>n0(a.networkMode)&&a.canRun(),y=E=>{f()||(r==null||r(),o.resolve(E))},_=E=>{f()||(r==null||r(),o.reject(E))},S=()=>new Promise(E=>{var j;r=R=>{(f()||g())&&E(R)},(j=a.onPause)==null||j.call(a)}).then(()=>{var E;r=void 0,f()||(E=a.onContinue)==null||E.call(a)}),w=()=>{if(f())return;let E;const j=s===0?a.initialPromise:void 0;try{E=j??a.fn()}catch(R){E=Promise.reject(R)}Promise.resolve(E).then(y).catch(R=>{var G;if(f())return;const z=a.retry??($s.isServer()?0:3),L=a.retryDelay??fx,D=typeof L=="function"?L(s,R):L,Z=z===!0||typeof z=="number"&&sg()?void 0:S()).then(()=>{l?_(R):w()})})};return{promise:o,status:()=>o.status,cancel:h,continue:()=>(r==null||r(),o),cancelRetry:d,continueRetry:p,canStart:b,start:()=>(b()?w():S().then(w),o)}}var ol,Yy,l0=(Yy=class{constructor(){ce(this,ol)}destroy(){this.clearGcTimeout()}scheduleGc(){this.clearGcTimeout(),Hf(this.gcTime)&&le(this,ol,rl.setTimeout(()=>{this.optionalRemove()},this.gcTime))}updateGcTime(a){this.gcTime=Math.max(this.gcTime||0,a??($s.isServer()?1/0:300*1e3))}clearGcTimeout(){C(this,ol)!==void 0&&(rl.clearTimeout(C(this,ol)),le(this,ol,void 0))}},ol=new WeakMap,Yy);function dx(a){return{onFetch:(l,s)=>{var b,y,_,S,w;const r=l.options,o=(_=(y=(b=l.fetchOptions)==null?void 0:b.meta)==null?void 0:y.fetchMore)==null?void 0:_.direction,f=((S=l.state.data)==null?void 0:S.pages)||[],h=((w=l.state.data)==null?void 0:w.pageParams)||[];let d={pages:[],pageParams:[]},p=0;const g=async()=>{let E=!1;const j=L=>{rx(L,()=>l.signal,()=>E=!0)},R=e0(l.options,l.fetchOptions),z=async(L,D,Z)=>{if(E)return Promise.reject(l.signal.reason);if(D==null&&L.pages.length)return Promise.resolve(L);const K=(()=>{const ee={client:l.client,queryKey:l.queryKey,pageParam:D,direction:Z?"backward":"forward",meta:l.options.meta};return j(ee),ee})(),J=await R(K),{maxPages:Q}=l.options,P=Z?sx:ix;return{pages:P(L.pages,J,Q),pageParams:P(L.pageParams,D,Q)}};if(o&&f.length){const L=o==="backward",D=L?hx:Fp,Z={pages:f,pageParams:h},G=D(r,Z);d=await z(Z,G,L)}else{const L=a??f.length;do{const D=p===0?h[0]??r.initialPageParam:Fp(r,d);if(p>0&&D==null)break;d=await z(d,D),p++}while(p{var E,j;return(j=(E=l.options).persister)==null?void 0:j.call(E,g,{client:l.client,queryKey:l.queryKey,meta:l.options.meta,signal:l.signal},s)}:l.fetchFn=g}}}function Fp(a,{pages:l,pageParams:s}){const r=l.length-1;return l.length>0?a.getNextPageParam(l[r],l,s[r],s):void 0}function hx(a,{pages:l,pageParams:s}){var r;return l.length>0?(r=a.getPreviousPageParam)==null?void 0:r.call(a,l[0],l,s[0],s):void 0}var Si,fl,_i,tn,dl,ct,nr,hl,Gt,i0,Kn,Ky,mx=(Ky=class extends l0{constructor(l){super();ce(this,Gt);ce(this,Si);ce(this,fl);ce(this,_i);ce(this,tn);ce(this,dl);ce(this,ct);ce(this,nr);ce(this,hl);le(this,hl,!1),le(this,nr,l.defaultOptions),this.setOptions(l.options),this.observers=[],le(this,dl,l.client),le(this,tn,C(this,dl).getQueryCache()),this.queryKey=l.queryKey,this.queryHash=l.queryHash,le(this,fl,Wp(this.options)),this.state=l.state??C(this,fl),this.scheduleGc()}get meta(){return this.options.meta}get queryType(){return C(this,Si)}get promise(){var l;return(l=C(this,ct))==null?void 0:l.promise}setOptions(l){if(this.options={...C(this,nr),...l},l!=null&&l._type&&le(this,Si,l._type),this.updateGcTime(this.options.gcTime),this.state&&this.state.data===void 0){const s=Wp(this.options);s.data!==void 0&&(this.setState($p(s.data,s.dataUpdatedAt)),le(this,fl,s))}}optionalRemove(){!this.observers.length&&this.state.fetchStatus==="idle"&&C(this,tn).remove(this)}setData(l,s){const r=Qf(this.state.data,l,this.options);return Ee(this,Gt,Kn).call(this,{data:r,type:"success",dataUpdatedAt:s==null?void 0:s.updatedAt,manual:s==null?void 0:s.manual}),r}setState(l){Ee(this,Gt,Kn).call(this,{type:"setState",state:l})}cancel(l){var r,o;const s=(r=C(this,ct))==null?void 0:r.promise;return(o=C(this,ct))==null||o.cancel(l),s?s.then(Rt).catch(Rt):Promise.resolve()}destroy(){super.destroy(),this.cancel({silent:!0})}get resetState(){return C(this,fl)}reset(){this.destroy(),this.setState(this.resetState)}isActive(){return this.observers.some(l=>Qt(l.options.enabled,this)!==!1)}isDisabled(){return this.getObserversCount()>0?!this.isActive():this.options.queryFn===gd||!this.isFetched()}isFetched(){return this.state.dataUpdateCount+this.state.errorUpdateCount>0}isStatic(){return this.getObserversCount()>0?this.observers.some(l=>La(l.options.staleTime,this)==="static"):!1}isStale(){return this.getObserversCount()>0?this.observers.some(l=>l.getCurrentResult().isStale):this.state.data===void 0||this.state.isInvalidated}isStaleByTime(l=0){return this.state.data===void 0?!0:l==="static"?!1:this.state.isInvalidated?!0:!Py(this.state.dataUpdatedAt,l)}onFocus(){var s;const l=this.observers.find(r=>r.shouldFetchOnWindowFocus());l==null||l.refetch({cancelRefetch:!1}),(s=C(this,ct))==null||s.continue()}onOnline(){var s;const l=this.observers.find(r=>r.shouldFetchOnReconnect());l==null||l.refetch({cancelRefetch:!1}),(s=C(this,ct))==null||s.continue()}addObserver(l){this.observers.includes(l)||(this.observers.push(l),this.clearGcTimeout(),C(this,tn).notify({type:"observerAdded",query:this,observer:l}))}removeObserver(l){this.observers.includes(l)&&(this.observers=this.observers.filter(s=>s!==l),this.observers.length||(C(this,ct)&&(C(this,hl)||Ee(this,Gt,i0).call(this)?C(this,ct).cancel({revert:!0}):C(this,ct).cancelRetry()),this.scheduleGc()),C(this,tn).notify({type:"observerRemoved",query:this,observer:l}))}getObserversCount(){return this.observers.length}invalidate(){this.state.isInvalidated||Ee(this,Gt,Kn).call(this,{type:"invalidate"})}async fetch(l,s){var g,b,y,_,S,w,E,j,R,z,L;if(this.state.fetchStatus!=="idle"&&((g=C(this,ct))==null?void 0:g.status())!=="rejected"){if(this.state.data!==void 0&&(s!=null&&s.cancelRefetch))this.cancel({silent:!0});else if(C(this,ct))return C(this,ct).continueRetry(),C(this,ct).promise}if(l&&this.setOptions(l),!this.options.queryFn){const D=this.observers.find(Z=>Z.options.queryFn);D&&this.setOptions(D.options)}const r=new AbortController,o=D=>{Object.defineProperty(D,"signal",{enumerable:!0,get:()=>(le(this,hl,!0),r.signal)})},f=()=>{const D=e0(this.options,s),G=(()=>{const K={client:C(this,dl),queryKey:this.queryKey,meta:this.meta};return o(K),K})();return le(this,hl,!1),this.options.persister?this.options.persister(D,G,this):D(G)},d=(()=>{const D={fetchOptions:s,options:this.options,queryKey:this.queryKey,client:C(this,dl),state:this.state,fetchFn:f};return o(D),D})(),p=C(this,Si)==="infinite"?dx(this.options.pages):this.options.behavior;p==null||p.onFetch(d,this),le(this,_i,this.state),(this.state.fetchStatus==="idle"||this.state.fetchMeta!==((b=d.fetchOptions)==null?void 0:b.meta))&&Ee(this,Gt,Kn).call(this,{type:"fetch",meta:(y=d.fetchOptions)==null?void 0:y.meta}),le(this,ct,a0({initialPromise:s==null?void 0:s.initialPromise,fn:d.fetchFn,onCancel:D=>{D instanceof Yf&&D.revert&&this.setState({...C(this,_i),fetchStatus:"idle"}),r.abort()},onFail:(D,Z)=>{Ee(this,Gt,Kn).call(this,{type:"failed",failureCount:D,error:Z})},onPause:()=>{Ee(this,Gt,Kn).call(this,{type:"pause"})},onContinue:()=>{Ee(this,Gt,Kn).call(this,{type:"continue"})},retry:d.options.retry,retryDelay:d.options.retryDelay,networkMode:d.options.networkMode,canRun:()=>!0}));try{const D=await C(this,ct).start();if(D===void 0)throw new Error(`${this.queryHash} data is undefined`);return this.setData(D),(S=(_=C(this,tn).config).onSuccess)==null||S.call(_,D,this),(E=(w=C(this,tn).config).onSettled)==null||E.call(w,D,this.state.error,this),D}catch(D){if(D instanceof Yf){if(D.silent)return C(this,ct).promise;if(D.revert){if(this.state.data===void 0)throw D;return this.state.data}}throw Ee(this,Gt,Kn).call(this,{type:"error",error:D}),(R=(j=C(this,tn).config).onError)==null||R.call(j,D,this),(L=(z=C(this,tn).config).onSettled)==null||L.call(z,this.state.data,D,this),D}finally{this.scheduleGc()}}},Si=new WeakMap,fl=new WeakMap,_i=new WeakMap,tn=new WeakMap,dl=new WeakMap,ct=new WeakMap,nr=new WeakMap,hl=new WeakMap,Gt=new WeakSet,i0=function(){return this.state.fetchStatus==="paused"&&this.state.status==="pending"},Kn=function(l){const s=r=>{switch(l.type){case"failed":return{...r,fetchFailureCount:l.failureCount,fetchFailureReason:l.error};case"pause":return{...r,fetchStatus:"paused"};case"continue":return{...r,fetchStatus:"fetching"};case"fetch":return{...r,...s0(r.data,this.options),fetchMeta:l.meta??null};case"success":const o={...r,...$p(l.data,l.dataUpdatedAt),dataUpdateCount:r.dataUpdateCount+1,...!l.manual&&{fetchStatus:"idle",fetchFailureCount:0,fetchFailureReason:null}};return le(this,_i,l.manual?o:void 0),o;case"error":const f=l.error;return{...r,error:f,errorUpdateCount:r.errorUpdateCount+1,errorUpdatedAt:Date.now(),fetchFailureCount:r.fetchFailureCount+1,fetchFailureReason:f,fetchStatus:"idle",status:"error",isInvalidated:!0};case"invalidate":return{...r,isInvalidated:!0};case"setState":return{...r,...l.state}}};this.state=s(this.state),pt.batch(()=>{this.observers.forEach(r=>{r.onQueryUpdate()}),C(this,tn).notify({query:this,type:"updated",action:l})})},Ky);function s0(a,l){return{fetchFailureCount:0,fetchFailureReason:null,fetchStatus:n0(l.networkMode)?"fetching":"paused",...a===void 0&&{error:null,status:"pending"}}}function $p(a,l){return{data:a,dataUpdatedAt:l??Date.now(),error:null,isInvalidated:!1,status:"success"}}function Wp(a){const l=typeof a.initialData=="function"?a.initialData():a.initialData,s=l!==void 0,r=s?typeof a.initialDataUpdatedAt=="function"?a.initialDataUpdatedAt():a.initialDataUpdatedAt:0;return{data:l,dataUpdateCount:0,dataUpdatedAt:s?r??Date.now():0,error:null,errorUpdateCount:0,errorUpdatedAt:0,fetchFailureCount:0,fetchFailureReason:null,fetchMeta:null,isInvalidated:!1,status:s?"success":"pending",fetchStatus:"idle"}}var Ct,Te,ar,xt,ml,wi,Xn,za,lr,Ei,ji,gl,pl,Na,Ti,Ne,Vs,Kf,Xf,Zf,Jf,Ff,$f,Wf,r0,Xy,gx=(Xy=class extends ur{constructor(l,s){super();ce(this,Ne);ce(this,Ct);ce(this,Te);ce(this,ar);ce(this,xt);ce(this,ml);ce(this,wi);ce(this,Xn);ce(this,za);ce(this,lr);ce(this,Ei);ce(this,ji);ce(this,gl);ce(this,pl);ce(this,Na);ce(this,Ti,new Set);this.options=s,le(this,Ct,l),le(this,za,null),le(this,Xn,Vf()),this.bindMethods(),this.setOptions(s)}bindMethods(){this.refetch=this.refetch.bind(this)}onSubscribe(){this.listeners.size===1&&(C(this,Te).addObserver(this),Pp(C(this,Te),this.options)?Ee(this,Ne,Vs).call(this):this.updateResult(),Ee(this,Ne,Jf).call(this))}onUnsubscribe(){this.hasListeners()||this.destroy()}shouldFetchOnReconnect(){return Pf(C(this,Te),this.options,this.options.refetchOnReconnect)}shouldFetchOnWindowFocus(){return Pf(C(this,Te),this.options,this.options.refetchOnWindowFocus)}destroy(){this.listeners=new Set,Ee(this,Ne,Ff).call(this),Ee(this,Ne,$f).call(this),C(this,Te).removeObserver(this)}setOptions(l){const s=this.options,r=C(this,Te);if(this.options=C(this,Ct).defaultQueryOptions(l),this.options.enabled!==void 0&&typeof this.options.enabled!="boolean"&&typeof this.options.enabled!="function"&&typeof Qt(this.options.enabled,C(this,Te))!="boolean")throw new Error("Expected enabled to be a boolean or a callback that returns a boolean");Ee(this,Ne,Wf).call(this),C(this,Te).setOptions(this.options),s._defaulted&&!qf(this.options,s)&&C(this,Ct).getQueryCache().notify({type:"observerOptionsUpdated",query:C(this,Te),observer:this});const o=this.hasListeners();o&&Ip(C(this,Te),r,this.options,s)&&Ee(this,Ne,Vs).call(this),this.updateResult(),o&&(C(this,Te)!==r||Qt(this.options.enabled,C(this,Te))!==Qt(s.enabled,C(this,Te))||La(this.options.staleTime,C(this,Te))!==La(s.staleTime,C(this,Te)))&&Ee(this,Ne,Kf).call(this);const f=Ee(this,Ne,Xf).call(this);o&&(C(this,Te)!==r||Qt(this.options.enabled,C(this,Te))!==Qt(s.enabled,C(this,Te))||f!==C(this,Na))&&Ee(this,Ne,Zf).call(this,f)}getOptimisticResult(l){const s=C(this,Ct).getQueryCache().build(C(this,Ct),l),r=this.createResult(s,l);return yx(this,r)&&(le(this,xt,r),le(this,wi,this.options),le(this,ml,C(this,Te).state)),r}getCurrentResult(){return C(this,xt)}trackResult(l,s){return new Proxy(l,{get:(r,o)=>(this.trackProp(o),s==null||s(o),o==="promise"&&(this.trackProp("data"),!this.options.experimental_prefetchInRender&&C(this,Xn).status==="pending"&&C(this,Xn).reject(new Error("experimental_prefetchInRender feature flag is not enabled"))),Reflect.get(r,o))})}trackProp(l){C(this,Ti).add(l)}getCurrentQuery(){return C(this,Te)}refetch({...l}={}){return this.fetch({...l})}fetchOptimistic(l){const s=C(this,Ct).defaultQueryOptions(l),r=C(this,Ct).getQueryCache().build(C(this,Ct),s);return r.fetch().then(()=>this.createResult(r,s))}fetch(l){return Ee(this,Ne,Vs).call(this,{...l,cancelRefetch:l.cancelRefetch??!0}).then(()=>(this.updateResult(),C(this,xt)))}createResult(l,s){var Q;const r=C(this,Te),o=this.options,f=C(this,xt),h=C(this,ml),d=C(this,wi),g=l!==r?l.state:C(this,ar),{state:b}=l;let y={...b},_=!1,S;if(s._optimisticResults){const P=this.hasListeners(),ee=!P&&Pp(l,s),I=P&&Ip(l,r,s,o);(ee||I)&&(y={...y,...s0(b.data,l.options)}),s._optimisticResults==="isRestoring"&&(y.fetchStatus="idle")}let{error:w,errorUpdatedAt:E,status:j}=y;S=y.data;let R=!1;if(s.placeholderData!==void 0&&S===void 0&&j==="pending"){let P;f!=null&&f.isPlaceholderData&&s.placeholderData===(d==null?void 0:d.placeholderData)?(P=f.data,R=!0):P=typeof s.placeholderData=="function"?s.placeholderData((Q=C(this,ji))==null?void 0:Q.state.data,C(this,ji)):s.placeholderData,P!==void 0&&(j="success",S=Qf(f==null?void 0:f.data,P,s),_=!0)}if(s.select&&S!==void 0&&!R)if(f&&S===(h==null?void 0:h.data)&&s.select===C(this,lr))S=C(this,Ei);else try{le(this,lr,s.select),S=s.select(S),S=Qf(f==null?void 0:f.data,S,s),le(this,Ei,S),le(this,za,null)}catch(P){le(this,za,P)}C(this,za)&&(w=C(this,za),S=C(this,Ei),E=Date.now(),j="error");const z=y.fetchStatus==="fetching",L=j==="pending",D=j==="error",Z=L&&z,G=S!==void 0,J={status:j,fetchStatus:y.fetchStatus,isPending:L,isSuccess:j==="success",isError:D,isInitialLoading:Z,isLoading:Z,data:S,dataUpdatedAt:y.dataUpdatedAt,error:w,errorUpdatedAt:E,failureCount:y.fetchFailureCount,failureReason:y.fetchFailureReason,errorUpdateCount:y.errorUpdateCount,isFetched:l.isFetched(),isFetchedAfterMount:y.dataUpdateCount>g.dataUpdateCount||y.errorUpdateCount>g.errorUpdateCount,isFetching:z,isRefetching:z&&!L,isLoadingError:D&&!G,isPaused:y.fetchStatus==="paused",isPlaceholderData:_,isRefetchError:D&&G,isStale:pd(l,s),refetch:this.refetch,promise:C(this,Xn),isEnabled:Qt(s.enabled,l)!==!1};if(this.options.experimental_prefetchInRender){const P=J.data!==void 0,ee=J.status==="error"&&!P,I=ae=>{ee?ae.reject(J.error):P&&ae.resolve(J.data)},fe=()=>{const ae=le(this,Xn,J.promise=Vf());I(ae)},F=C(this,Xn);switch(F.status){case"pending":l.queryHash===r.queryHash&&I(F);break;case"fulfilled":(ee||J.data!==F.value)&&fe();break;case"rejected":(!ee||J.error!==F.reason)&&fe();break}}return J}updateResult(){const l=C(this,xt),s=this.createResult(C(this,Te),this.options);if(le(this,ml,C(this,Te).state),le(this,wi,this.options),C(this,ml).data!==void 0&&le(this,ji,C(this,Te)),qf(s,l))return;le(this,xt,s);const r=()=>{if(!l)return!0;const{notifyOnChangeProps:o}=this.options,f=typeof o=="function"?o():o;if(f==="all"||!f&&!C(this,Ti).size)return!0;const h=new Set(f??C(this,Ti));return this.options.throwOnError&&h.add("error"),Object.keys(C(this,xt)).some(d=>{const p=d;return C(this,xt)[p]!==l[p]&&h.has(p)})};Ee(this,Ne,r0).call(this,{listeners:r()})}onQueryUpdate(){this.updateResult(),this.hasListeners()&&Ee(this,Ne,Jf).call(this)}},Ct=new WeakMap,Te=new WeakMap,ar=new WeakMap,xt=new WeakMap,ml=new WeakMap,wi=new WeakMap,Xn=new WeakMap,za=new WeakMap,lr=new WeakMap,Ei=new WeakMap,ji=new WeakMap,gl=new WeakMap,pl=new WeakMap,Na=new WeakMap,Ti=new WeakMap,Ne=new WeakSet,Vs=function(l){Ee(this,Ne,Wf).call(this);let s=C(this,Te).fetch(this.options,l);return l!=null&&l.throwOnError||(s=s.catch(Rt)),s},Kf=function(){Ee(this,Ne,Ff).call(this);const l=La(this.options.staleTime,C(this,Te));if($s.isServer()||C(this,xt).isStale||!Hf(l))return;const r=Py(C(this,xt).dataUpdatedAt,l)+1;le(this,gl,rl.setTimeout(()=>{C(this,xt).isStale||this.updateResult()},r))},Xf=function(){return(typeof this.options.refetchInterval=="function"?this.options.refetchInterval(C(this,Te)):this.options.refetchInterval)??!1},Zf=function(l){Ee(this,Ne,$f).call(this),le(this,Na,l),!($s.isServer()||Qt(this.options.enabled,C(this,Te))===!1||!Hf(C(this,Na))||C(this,Na)===0)&&le(this,pl,rl.setInterval(()=>{(this.options.refetchIntervalInBackground||hd.isFocused())&&Ee(this,Ne,Vs).call(this)},C(this,Na)))},Jf=function(){Ee(this,Ne,Kf).call(this),Ee(this,Ne,Zf).call(this,Ee(this,Ne,Xf).call(this))},Ff=function(){C(this,gl)!==void 0&&(rl.clearTimeout(C(this,gl)),le(this,gl,void 0))},$f=function(){C(this,pl)!==void 0&&(rl.clearInterval(C(this,pl)),le(this,pl,void 0))},Wf=function(){const l=C(this,Ct).getQueryCache().build(C(this,Ct),this.options);if(l===C(this,Te))return;const s=C(this,Te);le(this,Te,l),le(this,ar,l.state),this.hasListeners()&&(s==null||s.removeObserver(this),l.addObserver(this))},r0=function(l){pt.batch(()=>{l.listeners&&this.listeners.forEach(s=>{s(C(this,xt))}),C(this,Ct).getQueryCache().notify({query:C(this,Te),type:"observerResultsUpdated"})})},Xy);function px(a,l){return Qt(l.enabled,a)!==!1&&a.state.data===void 0&&!(a.state.status==="error"&&Qt(l.retryOnMount,a)===!1)}function Pp(a,l){return px(a,l)||a.state.data!==void 0&&Pf(a,l,l.refetchOnMount)}function Pf(a,l,s){if(Qt(l.enabled,a)!==!1&&La(l.staleTime,a)!=="static"){const r=typeof s=="function"?s(a):s;return r==="always"||r!==!1&&pd(a,l)}return!1}function Ip(a,l,s,r){return(a!==l||Qt(r.enabled,a)===!1)&&(!s.suspense||a.state.status!=="error")&&pd(a,s)}function pd(a,l){return Qt(l.enabled,a)!==!1&&a.isStaleByTime(La(l.staleTime,a))}function yx(a,l){return!qf(a.getCurrentResult(),l)}var ir,yn,vt,yl,vn,Ta,Zy,vx=(Zy=class extends l0{constructor(l){super();ce(this,vn);ce(this,ir);ce(this,yn);ce(this,vt);ce(this,yl);le(this,ir,l.client),this.mutationId=l.mutationId,le(this,vt,l.mutationCache),le(this,yn,[]),this.state=l.state||bx(),this.setOptions(l.options),this.scheduleGc()}setOptions(l){this.options=l,this.updateGcTime(this.options.gcTime)}get meta(){return this.options.meta}addObserver(l){C(this,yn).includes(l)||(C(this,yn).push(l),this.clearGcTimeout(),C(this,vt).notify({type:"observerAdded",mutation:this,observer:l}))}removeObserver(l){le(this,yn,C(this,yn).filter(s=>s!==l)),this.scheduleGc(),C(this,vt).notify({type:"observerRemoved",mutation:this,observer:l})}optionalRemove(){C(this,yn).length||(this.state.status==="pending"?this.scheduleGc():C(this,vt).remove(this))}continue(){var l;return((l=C(this,yl))==null?void 0:l.continue())??this.execute(this.state.variables)}async execute(l){var h,d,p,g,b,y,_,S,w,E,j,R,z,L,D,Z,G,K;const s=()=>{Ee(this,vn,Ta).call(this,{type:"continue"})},r={client:C(this,ir),meta:this.options.meta,mutationKey:this.options.mutationKey};le(this,yl,a0({fn:()=>this.options.mutationFn?this.options.mutationFn(l,r):Promise.reject(new Error("No mutationFn found")),onFail:(J,Q)=>{Ee(this,vn,Ta).call(this,{type:"failed",failureCount:J,error:Q})},onPause:()=>{Ee(this,vn,Ta).call(this,{type:"pause"})},onContinue:s,retry:this.options.retry??0,retryDelay:this.options.retryDelay,networkMode:this.options.networkMode,canRun:()=>C(this,vt).canRun(this)}));const o=this.state.status==="pending",f=!C(this,yl).canStart();try{if(o)s();else{Ee(this,vn,Ta).call(this,{type:"pending",variables:l,isPaused:f}),C(this,vt).config.onMutate&&await C(this,vt).config.onMutate(l,this,r);const Q=await((d=(h=this.options).onMutate)==null?void 0:d.call(h,l,r));Q!==this.state.context&&Ee(this,vn,Ta).call(this,{type:"pending",context:Q,variables:l,isPaused:f})}const J=await C(this,yl).start();return await((g=(p=C(this,vt).config).onSuccess)==null?void 0:g.call(p,J,l,this.state.context,this,r)),await((y=(b=this.options).onSuccess)==null?void 0:y.call(b,J,l,this.state.context,r)),await((S=(_=C(this,vt).config).onSettled)==null?void 0:S.call(_,J,null,this.state.variables,this.state.context,this,r)),await((E=(w=this.options).onSettled)==null?void 0:E.call(w,J,null,l,this.state.context,r)),Ee(this,vn,Ta).call(this,{type:"success",data:J}),J}catch(J){try{await((R=(j=C(this,vt).config).onError)==null?void 0:R.call(j,J,l,this.state.context,this,r))}catch(Q){Promise.reject(Q)}try{await((L=(z=this.options).onError)==null?void 0:L.call(z,J,l,this.state.context,r))}catch(Q){Promise.reject(Q)}try{await((Z=(D=C(this,vt).config).onSettled)==null?void 0:Z.call(D,void 0,J,this.state.variables,this.state.context,this,r))}catch(Q){Promise.reject(Q)}try{await((K=(G=this.options).onSettled)==null?void 0:K.call(G,void 0,J,l,this.state.context,r))}catch(Q){Promise.reject(Q)}throw Ee(this,vn,Ta).call(this,{type:"error",error:J}),J}finally{C(this,vt).runNext(this)}}},ir=new WeakMap,yn=new WeakMap,vt=new WeakMap,yl=new WeakMap,vn=new WeakSet,Ta=function(l){const s=r=>{switch(l.type){case"failed":return{...r,failureCount:l.failureCount,failureReason:l.error};case"pause":return{...r,isPaused:!0};case"continue":return{...r,isPaused:!1};case"pending":return{...r,context:l.context,data:void 0,failureCount:0,failureReason:null,error:null,isPaused:l.isPaused,status:"pending",variables:l.variables,submittedAt:Date.now()};case"success":return{...r,data:l.data,failureCount:0,failureReason:null,error:null,status:"success",isPaused:!1};case"error":return{...r,data:void 0,error:l.error,failureCount:r.failureCount+1,failureReason:l.error,isPaused:!1,status:"error"}}};this.state=s(this.state),pt.batch(()=>{C(this,yn).forEach(r=>{r.onMutationUpdate(l)}),C(this,vt).notify({mutation:this,type:"updated",action:l})})},Zy);function bx(){return{context:void 0,data:void 0,error:null,failureCount:0,failureReason:null,isPaused:!1,status:"idle",variables:void 0,submittedAt:0}}var Zn,un,sr,Jy,xx=(Jy=class extends ur{constructor(l={}){super();ce(this,Zn);ce(this,un);ce(this,sr);this.config=l,le(this,Zn,new Set),le(this,un,new Map),le(this,sr,0)}build(l,s,r){const o=new vx({client:l,mutationCache:this,mutationId:++zu(this,sr)._,options:l.defaultMutationOptions(s),state:r});return this.add(o),o}add(l){C(this,Zn).add(l);const s=Nu(l);if(typeof s=="string"){const r=C(this,un).get(s);r?r.push(l):C(this,un).set(s,[l])}this.notify({type:"added",mutation:l})}remove(l){if(C(this,Zn).delete(l)){const s=Nu(l);if(typeof s=="string"){const r=C(this,un).get(s);if(r)if(r.length>1){const o=r.indexOf(l);o!==-1&&r.splice(o,1)}else r[0]===l&&C(this,un).delete(s)}}this.notify({type:"removed",mutation:l})}canRun(l){const s=Nu(l);if(typeof s=="string"){const r=C(this,un).get(s),o=r==null?void 0:r.find(f=>f.state.status==="pending");return!o||o===l}else return!0}runNext(l){var r;const s=Nu(l);if(typeof s=="string"){const o=(r=C(this,un).get(s))==null?void 0:r.find(f=>f!==l&&f.state.isPaused);return(o==null?void 0:o.continue())??Promise.resolve()}else return Promise.resolve()}clear(){pt.batch(()=>{C(this,Zn).forEach(l=>{this.notify({type:"removed",mutation:l})}),C(this,Zn).clear(),C(this,un).clear()})}getAll(){return Array.from(C(this,Zn))}find(l){const s={exact:!0,...l};return this.getAll().find(r=>Xp(s,r))}findAll(l={}){return this.getAll().filter(s=>Xp(l,s))}notify(l){pt.batch(()=>{this.listeners.forEach(s=>{s(l)})})}resumePausedMutations(){const l=this.getAll().filter(s=>s.state.isPaused);return pt.batch(()=>Promise.all(l.map(s=>s.continue().catch(Rt))))}},Zn=new WeakMap,un=new WeakMap,sr=new WeakMap,Jy);function Nu(a){var l;return(l=a.options.scope)==null?void 0:l.id}var bn,Fy,Sx=(Fy=class extends ur{constructor(l={}){super();ce(this,bn);this.config=l,le(this,bn,new Map)}build(l,s,r){const o=s.queryKey,f=s.queryHash??md(o,s);let h=this.get(f);return h||(h=new mx({client:l,queryKey:o,queryHash:f,options:l.defaultQueryOptions(s),state:r,defaultOptions:l.getQueryDefaults(o)}),this.add(h)),h}add(l){C(this,bn).has(l.queryHash)||(C(this,bn).set(l.queryHash,l),this.notify({type:"added",query:l}))}remove(l){const s=C(this,bn).get(l.queryHash);s&&(l.destroy(),s===l&&C(this,bn).delete(l.queryHash),this.notify({type:"removed",query:l}))}clear(){pt.batch(()=>{this.getAll().forEach(l=>{this.remove(l)})})}get(l){return C(this,bn).get(l)}getAll(){return[...C(this,bn).values()]}find(l){const s={exact:!0,...l};return this.getAll().find(r=>Kp(s,r))}findAll(l={}){const s=this.getAll();return Object.keys(l).length>0?s.filter(r=>Kp(l,r)):s}notify(l){pt.batch(()=>{this.listeners.forEach(s=>{s(l)})})}onFocus(){pt.batch(()=>{this.getAll().forEach(l=>{l.onFocus()})})}onOnline(){pt.batch(()=>{this.getAll().forEach(l=>{l.onOnline()})})}},bn=new WeakMap,Fy),Pe,Da,Oa,Mi,Ai,ka,Ci,Ri,$y,_x=($y=class{constructor(a={}){ce(this,Pe);ce(this,Da);ce(this,Oa);ce(this,Mi);ce(this,Ai);ce(this,ka);ce(this,Ci);ce(this,Ri);le(this,Pe,a.queryCache||new Sx),le(this,Da,a.mutationCache||new xx),le(this,Oa,a.defaultOptions||{}),le(this,Mi,new Map),le(this,Ai,new Map),le(this,ka,0)}mount(){zu(this,ka)._++,C(this,ka)===1&&(le(this,Ci,hd.subscribe(async a=>{a&&(await this.resumePausedMutations(),C(this,Pe).onFocus())})),le(this,Ri,Vu.subscribe(async a=>{a&&(await this.resumePausedMutations(),C(this,Pe).onOnline())})))}unmount(){var a,l;zu(this,ka)._--,C(this,ka)===0&&((a=C(this,Ci))==null||a.call(this),le(this,Ci,void 0),(l=C(this,Ri))==null||l.call(this),le(this,Ri,void 0))}isFetching(a){return C(this,Pe).findAll({...a,fetchStatus:"fetching"}).length}isMutating(a){return C(this,Da).findAll({...a,status:"pending"}).length}getQueryData(a){var s;const l=this.defaultQueryOptions({queryKey:a});return(s=C(this,Pe).get(l.queryHash))==null?void 0:s.state.data}ensureQueryData(a){const l=this.defaultQueryOptions(a),s=C(this,Pe).build(this,l),r=s.state.data;return r===void 0?this.fetchQuery(a):(a.revalidateIfStale&&s.isStaleByTime(La(l.staleTime,s))&&this.prefetchQuery(l),Promise.resolve(r))}getQueriesData(a){return C(this,Pe).findAll(a).map(({queryKey:l,state:s})=>{const r=s.data;return[l,r]})}setQueryData(a,l,s){const r=this.defaultQueryOptions({queryKey:a}),o=C(this,Pe).get(r.queryHash),f=o==null?void 0:o.state.data,h=nx(l,f);if(h!==void 0)return C(this,Pe).build(this,r).setData(h,{...s,manual:!0})}setQueriesData(a,l,s){return pt.batch(()=>C(this,Pe).findAll(a).map(({queryKey:r})=>[r,this.setQueryData(r,l,s)]))}getQueryState(a){var s;const l=this.defaultQueryOptions({queryKey:a});return(s=C(this,Pe).get(l.queryHash))==null?void 0:s.state}removeQueries(a){const l=C(this,Pe);pt.batch(()=>{l.findAll(a).forEach(s=>{l.remove(s)})})}resetQueries(a,l){const s=C(this,Pe);return pt.batch(()=>(s.findAll(a).forEach(r=>{r.reset()}),this.refetchQueries({type:"active",...a},l)))}cancelQueries(a,l={}){const s={revert:!0,...l},r=pt.batch(()=>C(this,Pe).findAll(a).map(o=>o.cancel(s)));return Promise.all(r).then(Rt).catch(Rt)}invalidateQueries(a,l={}){return pt.batch(()=>(C(this,Pe).findAll(a).forEach(s=>{s.invalidate()}),(a==null?void 0:a.refetchType)==="none"?Promise.resolve():this.refetchQueries({...a,type:(a==null?void 0:a.refetchType)??(a==null?void 0:a.type)??"active"},l)))}refetchQueries(a,l={}){const s={...l,cancelRefetch:l.cancelRefetch??!0},r=pt.batch(()=>C(this,Pe).findAll(a).filter(o=>!o.isDisabled()&&!o.isStatic()).map(o=>{let f=o.fetch(void 0,s);return s.throwOnError||(f=f.catch(Rt)),o.state.fetchStatus==="paused"?Promise.resolve():f}));return Promise.all(r).then(Rt)}fetchQuery(a){const l=this.defaultQueryOptions(a);l.retry===void 0&&(l.retry=!1);const s=C(this,Pe).build(this,l);return s.isStaleByTime(La(l.staleTime,s))?s.fetch(l):Promise.resolve(s.state.data)}prefetchQuery(a){return this.fetchQuery(a).then(Rt).catch(Rt)}fetchInfiniteQuery(a){return a._type="infinite",this.fetchQuery(a)}prefetchInfiniteQuery(a){return this.fetchInfiniteQuery(a).then(Rt).catch(Rt)}ensureInfiniteQueryData(a){return a._type="infinite",this.ensureQueryData(a)}resumePausedMutations(){return Vu.isOnline()?C(this,Da).resumePausedMutations():Promise.resolve()}getQueryCache(){return C(this,Pe)}getMutationCache(){return C(this,Da)}getDefaultOptions(){return C(this,Oa)}setDefaultOptions(a){le(this,Oa,a)}setQueryDefaults(a,l){C(this,Mi).set(Js(a),{queryKey:a,defaultOptions:l})}getQueryDefaults(a){const l=[...C(this,Mi).values()],s={};return l.forEach(r=>{Fs(a,r.queryKey)&&Object.assign(s,r.defaultOptions)}),s}setMutationDefaults(a,l){C(this,Ai).set(Js(a),{mutationKey:a,defaultOptions:l})}getMutationDefaults(a){const l=[...C(this,Ai).values()],s={};return l.forEach(r=>{Fs(a,r.mutationKey)&&Object.assign(s,r.defaultOptions)}),s}defaultQueryOptions(a){if(a._defaulted)return a;const l={...C(this,Oa).queries,...this.getQueryDefaults(a.queryKey),...a,_defaulted:!0};return l.queryHash||(l.queryHash=md(l.queryKey,l)),l.refetchOnReconnect===void 0&&(l.refetchOnReconnect=l.networkMode!=="always"),l.throwOnError===void 0&&(l.throwOnError=!!l.suspense),!l.networkMode&&l.persister&&(l.networkMode="offlineFirst"),l.queryFn===gd&&(l.enabled=!1),l}defaultMutationOptions(a){return a!=null&&a._defaulted?a:{...C(this,Oa).mutations,...(a==null?void 0:a.mutationKey)&&this.getMutationDefaults(a.mutationKey),...a,_defaulted:!0}}clear(){C(this,Pe).clear(),C(this,Da).clear()}},Pe=new WeakMap,Da=new WeakMap,Oa=new WeakMap,Mi=new WeakMap,Ai=new WeakMap,ka=new WeakMap,Ci=new WeakMap,Ri=new WeakMap,$y),u0=$.createContext(void 0),yd=a=>{const l=$.useContext(u0);if(!l)throw new Error("No QueryClient set, use QueryClientProvider to set one");return l},wx=({client:a,children:l})=>($.useEffect(()=>(a.mount(),()=>{a.unmount()}),[a]),v.jsx(u0.Provider,{value:a,children:l})),c0=$.createContext(!1),Ex=()=>$.useContext(c0);c0.Provider;function jx(){let a=!1;return{clearReset:()=>{a=!1},reset:()=>{a=!0},isReset:()=>a}}var Tx=$.createContext(jx()),Mx=()=>$.useContext(Tx),Ax=(a,l,s)=>{const r=s!=null&&s.state.error&&typeof a.throwOnError=="function"?t0(a.throwOnError,[s.state.error,s]):a.throwOnError;(a.suspense||a.experimental_prefetchInRender||r)&&(l.isReset()||(a.retryOnMount=!1))},Cx=a=>{$.useEffect(()=>{a.clearReset()},[a])},Rx=({result:a,errorResetBoundary:l,throwOnError:s,query:r,suspense:o})=>a.isError&&!l.isReset()&&!a.isFetching&&r&&(o&&a.data===void 0||t0(s,[a.error,r])),zx=a=>{if(a.suspense){const s=o=>o==="static"?o:Math.max(o??1e3,1e3),r=a.staleTime;a.staleTime=typeof r=="function"?(...o)=>s(r(...o)):s(r),typeof a.gcTime=="number"&&(a.gcTime=Math.max(a.gcTime,1e3))}},Nx=(a,l)=>a.isLoading&&a.isFetching&&!l,Dx=(a,l)=>(a==null?void 0:a.suspense)&&l.isPending,ey=(a,l,s)=>l.fetchOptimistic(a).catch(()=>{s.clearReset()});function Ox(a,l,s){var S,w,E,j;const r=Ex(),o=Mx(),f=yd(),h=f.defaultQueryOptions(a);(w=(S=f.getDefaultOptions().queries)==null?void 0:S._experimental_beforeQuery)==null||w.call(S,h);const d=f.getQueryCache().get(h.queryHash),p=a.subscribed!==!1;h._optimisticResults=r?"isRestoring":p?"optimistic":void 0,zx(h),Ax(h,o,d),Cx(o);const g=!f.getQueryCache().get(h.queryHash),[b]=$.useState(()=>new l(f,h)),y=b.getOptimisticResult(h),_=!r&&p;if($.useSyncExternalStore($.useCallback(R=>{const z=_?b.subscribe(pt.batchCalls(R)):Rt;return b.updateResult(),z},[b,_]),()=>b.getCurrentResult(),()=>b.getCurrentResult()),$.useEffect(()=>{b.setOptions(h)},[h,b]),Dx(h,y))throw ey(h,b,o);if(Rx({result:y,errorResetBoundary:o,throwOnError:h.throwOnError,query:d,suspense:h.suspense}))throw y.error;if((j=(E=f.getDefaultOptions().queries)==null?void 0:E._experimental_afterQuery)==null||j.call(E,h,y),h.experimental_prefetchInRender&&!$s.isServer()&&Nx(y,r)){const R=g?ey(h,b,o):d==null?void 0:d.promise;R==null||R.catch(Rt).finally(()=>{b.updateResult()})}return h.notifyOnChangeProps?y:b.trackResult(y)}function Xe(a,l){return Ox(a,gx)}const kx=!1;var o0=$.useLayoutEffect;function Ux(a,l,s){$.useEffect(()=>{if(!a.current||s||typeof IntersectionObserver!="function")return()=>l();const r=new IntersectionObserver(o=>{l(o.pop())},{rootMargin:"100px"});return r.observe(a.current),()=>{r.disconnect(),l()}},[l,s,a])}function Lx(a){const l=$.useRef(null);return $.useImperativeHandle(a,()=>l.current,[]),l}function Ws(a){return a[a.length-1]}function zi(a,l){return typeof a=="function"?a(l):a}const f0=Object.prototype.hasOwnProperty,Bx=Object.prototype.propertyIsEnumerable;function d0(a){for(const l in a)if(f0.call(a,l))return!0;return!1}const Hx=()=>Object.create(null),sl=(a,l)=>ul(a,l,Hx);function ul(a,l,s=()=>({}),r=0){if(a===l)return a;if(r>500)return l;const o=l,f=ay(a)&&ay(o);if(!f&&!(Yu(a)&&Yu(o)))return o;const h=f?a:ty(a);if(!h)return o;const d=f?o:ty(o);if(!d)return o;const p=h.length,g=d.length,b=f?new Array(g):s();let y=0;for(let _=0;_"u")return!0;const s=l.prototype;return!(!ny(s)||!s.hasOwnProperty("isPrototypeOf"))}function ny(a){return Object.prototype.toString.call(a)==="[object Object]"}function ay(a){return Array.isArray(a)&&a.length===Object.keys(a).length}function Ba(a,l,s){if(a===l)return!0;if(typeof a!=typeof l)return!1;if(Array.isArray(a)&&Array.isArray(l)){if(a.length!==l.length)return!1;for(let r=0,o=a.length;ro||!Ba(a[h],l[h],s)))return!1;return o===f}return!1}const qx=/[\x00-\x1f\x7f"<>`{}]/g;function Gx(a){return a.replace(qx,l=>"%"+l.charCodeAt(0).toString(16).toUpperCase().padStart(2,"0"))}function ly(a){let l;try{l=decodeURI(a)}catch{l=a.replaceAll(/%[0-9A-F]{2}/gi,s=>{try{return decodeURI(s)}catch{return s}})}return Gx(l)}const Qx=["http:","https:","mailto:","tel:"];function Ku(a,l){if(!a)return!1;try{const s=new URL(a);return!l.has(s.protocol)}catch{return!1}}function Ls(a){if(!a)return{path:a,handledProtocolRelativeURL:!1};if(!/[%\\\x00-\x1f\x7f]/.test(a)&&!a.startsWith("//"))return{path:a,handledProtocolRelativeURL:!1};const l=/%25|%5C/gi;let s=0,r="",o;for(;(o=l.exec(a))!==null;)r+=ly(a.slice(s,o.index))+o[0],s=l.lastIndex;r=r+ly(s?a.slice(s):a);let f=!1;return r.startsWith("//")&&(f=!0,r="/"+r.replace(/^\/+/,"")),{path:r,handledProtocolRelativeURL:f}}function Vx(a){return/\s|[^\u0000-\u007F]/.test(a)?a.replace(/\s|[^\u0000-\u007F]/gu,encodeURIComponent):a}function Yx(a,l){if(a===l)return!0;if(a.length!==l.length)return!1;for(let s=0;s{f.next&&(f.prev?(f.prev.next=f.next,f.next.prev=f.prev,f.next=void 0,r&&(r.next=f,f.prev=r)):(f.next.prev=void 0,s=f.next,f.next=void 0,r&&(f.prev=r,r.next=f)),r=f)};return{get(f){const h=l.get(f);if(h)return o(h),h.value},set(f,h){if(l.size>=a&&s){const p=s;l.delete(p.key),p.next&&(s=p.next,p.next.prev=void 0),p===r&&(r=void 0)}const d=l.get(f);if(d)d.value=h,o(d);else{const p={key:f,value:h,prev:r};r&&(r.next=p),r=p,s||(s=p),l.set(f,p)}},clear(){l.clear(),s=void 0,r=void 0}}}const Ua=4,h0=5;function m0(a,l,s=new Uint16Array(6)){const r=a.indexOf("/",l),o=r===-1?a.length:r,f=a.substring(l,o);if(!f||!f.includes("$"))return s[0]=0,s[1]=l,s[2]=l,s[3]=o,s[4]=o,s[5]=o,s;if(f==="$"){const p=a.length;return s[0]=2,s[1]=l,s[2]=l,s[3]=p,s[4]=p,s[5]=p,s}if(f.charCodeAt(0)===36)return s[0]=1,s[1]=l,s[2]=l+1,s[3]=o,s[4]=o,s[5]=o,s;const h=f.indexOf("{");let d;if(h!==-1&&h+1!ee.parse&&ee.caseSensitive===J&&ee.prefix===G&&ee.suffix===K));if(P)z=P;else{const ee=Kx(Z,y,J,G,K);z=ee,ee.parent=o,ee.depth=f;let I;Z===1?I=o.dynamic??(o.dynamic=[]):Z===3?I=o.optional??(o.optional=[]):I=o.wildcard??(o.wildcard=[]),I.push(ee),I.length===2&&(h==null||h.push(I))}break}}o=z}if(E&&s.children&&!s.isRoot&&s.id&&s.id.charCodeAt(s.id.lastIndexOf("/")+1)===95){const R=fi(y);R.kind=h0,R.parent=o,f++,R.depth=f,o.pathless??(o.pathless=[]),o.pathless.push(R),o=R}const j=(s.path||!s.children)&&!s.isRoot;if(j&&y.endsWith("/")){const R=fi(y);R.kind=Ua,R.parent=o,f++,R.depth=f,o.index=R,o=R}o.parse=E??null,o.priority=((b=_==null?void 0:_.params)==null?void 0:b.priority)??0,j&&!o.route&&(o.route=s,o.fullPath=y)}if(s.children)for(const y of s.children)Iu(a,l,y,p,o,f,h,d)}function g0(a,l){if(a.parse&&!l.parse)return-1;if(!a.parse&&l.parse)return 1;if(a.parse&&l.parse&&(a.priority||l.priority))return l.priority-a.priority;if(a.prefix&&l.prefix&&a.prefix!==l.prefix){if(a.prefix.startsWith(l.prefix))return-1;if(l.prefix.startsWith(a.prefix))return 1}if(a.suffix&&l.suffix&&a.suffix!==l.suffix){if(a.suffix.endsWith(l.suffix))return-1;if(l.suffix.endsWith(a.suffix))return 1}return a.prefix&&!l.prefix?-1:!a.prefix&&l.prefix?1:a.suffix&&!l.suffix?-1:!a.suffix&&l.suffix?1:a.caseSensitive&&!l.caseSensitive?-1:!a.caseSensitive&&l.caseSensitive?1:0}function fi(a){return{kind:0,depth:0,pathless:null,index:null,static:null,staticInsensitive:null,dynamic:null,optional:null,wildcard:null,route:null,fullPath:a,parent:null,parse:null,priority:0}}function Kx(a,l,s,r,o){return{kind:a,depth:0,pathless:null,index:null,static:null,staticInsensitive:null,dynamic:null,optional:null,wildcard:null,route:null,fullPath:l,parent:null,parse:null,priority:0,caseSensitive:s,prefix:r,suffix:o}}function Xx(a,l){const s=fi("/"),r=new Uint16Array(6),o=[];for(const f of a)Iu(!1,r,f,1,s,0,o);for(const f of o)f.sort(g0);l.masksTree=s,l.flatCache=Xu(1e3)}function Zx(a,l){a||(a="/");const s=l.flatCache.get(a);if(s!==void 0)return s;const r=bd(a,l.masksTree);return l.flatCache.set(a,r),r}function Jx(a,l,s,r,o){a||(a="/"),r||(r="/");const f=l?`case\0${a}`:a;let h=o.singleCache.get(f);return h||(h=fi("/"),Iu(l,new Uint16Array(6),{from:a},1,h,0),o.singleCache.set(f,h)),bd(r,h,s)}function Fx(a,l,s=!1){const r=s?a:`nofuzz\0${a}`,o=l.matchCache.get(r);if(o!==void 0)return o;a||(a="/");let f;try{f=bd(a,l.segmentTree,s)}catch(h){if(h instanceof URIError)f=null;else throw h}return f&&(f.branch=y0(f.route)),l.matchCache.set(r,f),f}function $x(a){return a==="/"?a:a.replace(/\/{1,}$/,"")}function Wx(a,l=!1,s){const r=fi(a.fullPath),o=new Uint16Array(6),f=[],h={},d={};let p=0;Iu(l,o,a,1,r,0,f,g=>{if(s==null||s(g,p),g.id in h&&vd(),h[g.id]=g,p!==0&&g.path){const b=$x(g.fullPath);(!d[b]||g.fullPath.endsWith("/"))&&(d[b]=g)}p++});for(const g of f)g.sort(g0);return{processedTree:{segmentTree:r,singleCache:Xu(1e3),matchCache:Xu(1e3),flatCache:null,masksTree:null},routesById:h,routesByPath:d}}function bd(a,l,s=!1){const r=a.split("/"),o=Ix(a,r,l,s);if(!o)return null;const[f]=p0(a,r,o);return{route:o.node.route,rawParams:f}}function p0(a,l,s){var b,y,_,S;const r=Px(s.node);let o=null;const f=Object.create(null);let h=((b=s.extract)==null?void 0:b.part)??0,d=((y=s.extract)==null?void 0:y.node)??0,p=((_=s.extract)==null?void 0:_.path)??0,g=((S=s.extract)==null?void 0:S.segment)??0;for(;d=0;G--){const K=y.wildcard[G],{prefix:J,suffix:Q}=K;if(!(J&&(L||!(K.caseSensitive?D:Z??(Z=D.toLowerCase())).startsWith(J)))){if(Q){if(L)continue;const P=l.slice(_).join("/"),ee=P.slice(-Q.length);if((K.caseSensitive?ee:ee.toLowerCase())!==Q||P.length-Q.length=0;K--){const J=y.optional[K];d.push({node:J,index:_,skipped:G,statics:w,dynamics:E,optionals:j,extract:R,rawParams:z})}if(!L)for(let K=y.optional.length-1;K>=0;K--){const J=y.optional[K],{prefix:Q,suffix:P}=J;if(Q||P){const ee=J.caseSensitive?D:Z??(Z=D.toLowerCase());if(Q&&!ee.startsWith(Q)||P&&ee.indexOf(P,ee.length-P.length)=0;G--){const K=y.dynamic[G],{prefix:J,suffix:Q}=K;if(J||Q){const P=K.caseSensitive?D:Z??(Z=D.toLowerCase());if(J&&!P.startsWith(J)||Q&&P.indexOf(Q,P.length-Q.length)=0;G--){const K=y.pathless[G];d.push({node:K,index:_,skipped:S,statics:w,dynamics:E,optionals:j,extract:R,rawParams:z})}}if(g)return g;if(r&&p){let b=p.index;for(let _=0;_a.statics||l.statics===a.statics&&(l.dynamics>a.dynamics||l.dynamics===a.dynamics&&(l.optionals>a.optionals||l.optionals===a.optionals&&((l.node.kind===Ua)>(a.node.kind===Ua)||l.node.kind===Ua==(a.node.kind===Ua)&&l.node.depth>a.node.depth))):!0}function Bu(a){return Hu(a.filter(l=>l!==void 0).join("/"))}function Hu(a){return a.replace(/\/{2,}/g,"/")}function v0(a){return a==="/"?a:a.replace(/^\/{1,}/,"")}function Jn(a){const l=a.length;return l>1&&a[l-1]==="/"?a.replace(/\/{1,}$/,""):a}function b0(a){return Jn(v0(a))}function Zu(a,l){return a!=null&&a.endsWith("/")&&a!=="/"&&a!==`${l}/`?a.slice(0,-1):a}function tS(a,l,s){return Zu(a,s)===Zu(l,s)}function nS({base:a,to:l,trailingSlash:s="never",cache:r}){if(l.includes("//")&&(l=Hu(l)),l.startsWith("/"))return l.length===1||s==="preserve"?l:s==="always"?l.endsWith("/")?l:`${l}/`:l.endsWith("/")?l.slice(0,-1):l;const o=l===".";let f;if(r){f=o?a:a+"\0"+l;const g=r.get(f);if(g)return g}let h;if(o)h=a.split("/");else{for(a.includes("//")&&(a=Hu(a)),h=a.split("/");h.length>1&&Ws(h)==="";)h.pop();const g=l.split("/");for(let b=0,y=g.length;b1?h.pop():h=[""]:_==="."||h.push(_)}}h.length>1&&(Ws(h)===""?s==="never"&&h.pop():s==="always"&&h.push(""));const d=h.join("/"),p=(o?Hu(d):d)||"/";return f&&r&&r.set(f,p),p}function aS(a){const l=new Map(a.map(o=>[encodeURIComponent(o),o])),s=Array.from(l.keys()).map(o=>o.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join("|"),r=new RegExp(s,"g");return o=>o.replace(r,f=>l.get(f)??f)}function Tf(a,l,s){const r=l[a];return typeof r!="string"?r:a==="_splat"?/^[a-zA-Z0-9\-._~!/]*$/.test(r)?r:r.split("/").map(o=>ry(o,s)).join("/"):ry(r,s)}function sy({path:a,params:l,decoder:s,...r}){let o=!1;const f=Object.create(null);if(!a||a==="/")return{interpolatedPath:"/",usedParams:f,isMissingParams:o};if(!a.includes("$"))return{interpolatedPath:a,usedParams:f,isMissingParams:o};const h=a.length;let d=0,p,g="";for(;da.state.__TSR_key||a.href;function cS(a){const l=a.getAttribute(uy);if(l)return`[${uy}="${l}"]`;let s="",r=a,o;for(;o=r.parentNode;){let f=1,h=r;for(;h=h.previousElementSibling;)f++;const d=`${r.localName}:nth-child(${f})`;s=s?`${d} > ${s}`:d,r=o}return s}let ku=!1;const qu="window";function If(a){try{return typeof a=="function"?a():document.querySelector(a)}catch{}}function cy(a){const l=new Set;for(const s of a){if(s===qu)continue;const r=If(s);r&&l.add(r)}return l}function oS(a,l){const s=a.options.scrollRestoration,r=a._scroll;s&&(r.restoring=!0);const o=a.options.getScrollRestorationKey||uS,f=new Set,h=d=>{const p=Ma[d]||(Ma[d]={});for(const g of f)g===document?p[qu]={scrollX,scrollY}:g.isConnected&&(p[cS(g)]={scrollX:g.scrollLeft,scrollY:g.scrollTop})};s&&!r.restoration&&(r.restoration=!0,ku=!1,history.scrollRestoration="manual",document.addEventListener("scroll",d=>{ku||f.add(d.target)},!0),a.subscribe("onBeforeLoad",d=>{d.fromLocation&&h(o(d.fromLocation)),f.clear()}),addEventListener("pagehide",()=>{h(o(a.stores.resolvedLocation.get()??a.stores.location.get())),rS()})),!r.reset&&(r.reset=!0,a.subscribe("onRendered",d=>{var E;const p=a.options.scrollRestorationBehavior,g=a.options.scrollToTopSelectors,b=r.next,y=r.hash;let _;if(f.clear(),r.next=!0,r.hash=!1,typeof a.options.scrollRestoration=="function"&&!a.options.scrollRestoration({location:a.latestLocation}))return;const S=o(d.toLocation),w=d.fromLocation&&o(d.fromLocation);if(r.restoring&&w&&w!==S){const j=Ma[w];if(j){let R=Ma[S];for(const z in j){if(z===qu){if(b)continue}else{const L=If(z);if(!L||b&&g&&(_??(_=cy(g)),_.has(L)))continue}R||(R=Ma[S]={}),R[z]??(R[z]=j[z])}}}ku=!0;try{const j=d.toLocation.hash,R=d.toLocation.state.__hashScrollIntoViewOptions??!0;let z=!1;if(b){!j&&g&&(_??(_=cy(g)));const L=j&&R&&y,D=r.restoring?Ma[S]:void 0;if(D)for(const Z in D){const{scrollX:G,scrollY:K}=D[Z];if(Z===qu){if(L)continue;scrollTo({top:K,left:G,behavior:p}),z=!0}else{const J=If(Z);J&&(J.scrollLeft=G,J.scrollTop=K,_==null||_.delete(J))}}if(!j){const Z={top:0,left:0,behavior:p};if(z||scrollTo(Z),_)for(const G of _)G.scrollTo(Z)}}!z&&j&&R&&((E=document.getElementById(j))==null||E.scrollIntoView(R))}finally{ku=!1}}))}function fS(a,l=String){const s=new URLSearchParams;for(const r in a){const o=a[r];o!==void 0&&s.set(r,l(o))}return s.toString()}function Mf(a){return a?a==="false"?!1:a==="true"?!0:+a*0===0&&+a+""===a?+a:a:""}function dS(a){const l=new URLSearchParams(a),s=Object.create(null);for(const[r,o]of l.entries()){const f=s[r];f==null?s[r]=Mf(o):Array.isArray(f)?f.push(Mf(o)):s[r]=[f,Mf(o)]}return s}const hS=/^(?:\s|["[{\d-]|fa|nu|tr)/,mS=pS(JSON.parse),gS=yS(JSON.stringify,JSON.parse);function pS(a){return l=>{l[0]==="?"&&(l=l.substring(1));const s=dS(l);for(const r in s){const o=s[r];if(typeof o=="string")try{s[r]=a(o)}catch{}}return s}}function yS(a,l){const s=l===JSON.parse;function r(o){if(o&&typeof o=="object")try{return a(o)}catch{}else if(l&&typeof o=="string"){if(s&&!hS.test(o))return o;try{return l(o),a(o)}catch{}}return o}return o=>{const f=fS(o,r);return f?`?${f}`:""}}const hi="__root__";function x0(a){if(a.statusCode=a.statusCode||a.code||307,!a.reloadDocument&&typeof a.href=="string")try{new URL(a.href),a.reloadDocument=!0}catch{}const l=new Headers(a.headers);a.href&&l.get("Location")===null&&l.set("Location",a.href);const s=new Response(null,{status:a.statusCode,headers:l});if(s.options=a,a.throw)throw s;return s}function S0(a){return a instanceof Response&&!!a.options}function vS(a){return{input:({url:l})=>{for(const s of a)l=ed(s,l);return l},output:({url:l})=>{for(let s=a.length-1;s>=0;s--)l=_0(a[s],l);return l}}}function bS(a){const l=b0(a.basepath),s=`/${l}`,r=a.caseSensitive?s:s.toLowerCase(),o=`${r}/`;return{input:({url:f})=>{const h=a.caseSensitive?f.pathname:f.pathname.toLowerCase();return h===r?f.pathname="/":h.startsWith(o)&&(f.pathname=f.pathname.slice(s.length)),f},output:({url:f})=>(f.pathname=Bu(["/",l,f.pathname]),f)}}function ed(a,l){var r;const s=(r=a==null?void 0:a.input)==null?void 0:r.call(a,{url:l});if(s){if(typeof s=="string")return new URL(s);if(s instanceof URL)return s}return l}function _0(a,l){var r;const s=(r=a==null?void 0:a.output)==null?void 0:r.call(a,{url:l});if(s){if(typeof s=="string")return new URL(s);if(s instanceof URL)return s}return l}function xS(a,l){const{createMutableStore:s,createReadonlyStore:r,batch:o}=l,f=new Map,h=s("idle"),d=s(a),p=s(void 0),g=s([]),b=r(()=>g.get().map(E=>f.get(E).get())),y=r(()=>({status:h.get(),isLoading:h.get()==="pending",matches:b.get(),location:d.get(),resolvedLocation:p.get()}));function _(E){let j=f.get(E);return j||(j=s(void 0),f.set(E,j)),j}const S={status:h,location:d,resolvedLocation:p,ids:g,matches:b,byRoute:f,__store:y,getMatchStore:_,setMatches:w};function w(E){const j=g.get(),R=E.map(z=>z.routeId);o(()=>{Yx(j,R)||g.set(R);for(const z of j)R.includes(z)||f.get(z).set(()=>{});for(const z of E){const L=_(z.routeId);L.get()!==z&&L.set(z)}})}return S}var Ha="__TSR_index",oy="popstate",fy="beforeunload";function SS(a){let l=a.getLocation();const s=new Set,r=h=>{l=a.getLocation(),s.forEach(d=>d({location:l,action:h}))},o=h=>{a.notifyOnIndexChange??!0?r(h):l=a.getLocation()},f=async({task:h,navigateOpts:d,...p})=>{var y,_;if((d==null?void 0:d.ignoreBlocker)??!1){h();return}const g=((y=a.getBlockers)==null?void 0:y.call(a))??[],b=p.type==="PUSH"||p.type==="REPLACE";if(typeof document<"u"&&g.length&&b)for(const S of g){const w=Ju(p.path,p.state);if(await S.blockerFn({currentLocation:l,nextLocation:w,action:p.type})){(_=a.onBlocked)==null||_.call(a);return}}h()};return{get location(){return l},get length(){return a.getLength()},subscribers:s,subscribe:h=>(s.add(h),()=>{s.delete(h)}),push:(h,d,p)=>{const g=l.state[Ha];d=dy(g+1,d),f({task:()=>{a.pushState(h,d),r({type:"PUSH"})},navigateOpts:p,type:"PUSH",path:h,state:d})},replace:(h,d,p)=>{const g=l.state[Ha];d=dy(g,d),f({task:()=>{a.replaceState(h,d),r({type:"REPLACE"})},navigateOpts:p,type:"REPLACE",path:h,state:d})},go:(h,d)=>{f({task:()=>{a.go(h),o({type:"GO",index:h})},navigateOpts:d,type:"GO"})},back:h=>{f({task:()=>{a.back((h==null?void 0:h.ignoreBlocker)??!1),o({type:"BACK"})},navigateOpts:h,type:"BACK"})},forward:h=>{f({task:()=>{a.forward((h==null?void 0:h.ignoreBlocker)??!1),o({type:"FORWARD"})},navigateOpts:h,type:"FORWARD"})},canGoBack:()=>l.state[Ha]!==0,createHref:h=>a.createHref(h),block:h=>{var p;if(!a.setBlockers)return()=>{};const d=((p=a.getBlockers)==null?void 0:p.call(a))??[];return a.setBlockers([...d,h]),()=>{var b,y;const g=((b=a.getBlockers)==null?void 0:b.call(a))??[];(y=a.setBlockers)==null||y.call(a,g.filter(_=>_!==h))}},flush:()=>{var h;return(h=a.flush)==null?void 0:h.call(a)},destroy:()=>{var h;return(h=a.destroy)==null?void 0:h.call(a)},notify:r}}function dy(a,l){l||(l={});const s=xd();return{...l,key:s,__TSR_key:s,[Ha]:a}}function _S(a){var K,J;const l=typeof document<"u"?window:void 0,s=l.history.pushState,r=l.history.replaceState;let o=[];const f=()=>o,h=Q=>o=Q,d=(Q=>Q),p=(()=>Ju(`${l.location.pathname}${l.location.search}${l.location.hash}`,l.history.state));if(!((K=l.history.state)!=null&&K.__TSR_key)&&!((J=l.history.state)!=null&&J.key)){const Q=xd();l.history.replaceState({[Ha]:0,key:Q,__TSR_key:Q},"")}let g=p(),b,y=!1,_=!1,S=!1,w=!1;const E=()=>g;let j;const R=()=>{j&&(G._ignoreSubscribers=!0,(j[2]?l.history.pushState:l.history.replaceState)(j[1],"",j[0]),G._ignoreSubscribers=!1,j=void 0,b=void 0)},z=(Q,P,ee)=>{const I=d(P),fe=!!j;fe||(b=g),g=Ju(P,ee),j=[I,ee,(j==null?void 0:j[2])||Q],fe||queueMicrotask(()=>R())},L=Q=>{g=p(),G.notify({type:Q})},D=async()=>{if(_){_=!1;return}const Q=p(),P=Q.state[Ha]-g.state[Ha],ee=P===1,I=P===-1,fe=!ee&&!I||y;y=!1;const F=fe?"GO":I?"BACK":"FORWARD",ae=fe?{type:"GO",index:P}:{type:I?"BACK":"FORWARD"};if(S)S=!1;else{const B=f();if(typeof document<"u"&&B.length){for(const W of B)if(await W.blockerFn({currentLocation:g,nextLocation:Q,action:F})){_=!0,l.history.go(1),G.notify(ae);return}}}g=p(),G.notify(ae)},Z=Q=>{if(w){w=!1;return}let P=!1;const ee=f();if(typeof document<"u"&&ee.length)for(const I of ee){const fe=I.enableBeforeUnload??!0;if(fe===!0){P=!0;break}if(typeof fe=="function"&&fe()===!0){P=!0;break}}if(P)return Q.preventDefault(),Q.returnValue=""},G=SS({getLocation:E,getLength:()=>l.history.length,pushState:(Q,P)=>z(!0,Q,P),replaceState:(Q,P)=>z(!1,Q,P),back:Q=>(Q&&(S=!0),w=!0,l.history.back()),forward:Q=>{Q&&(S=!0),w=!0,l.history.forward()},go:Q=>{y=!0,l.history.go(Q)},createHref:Q=>d(Q),flush:R,destroy:()=>{l.history.pushState=s,l.history.replaceState=r,l.removeEventListener(fy,Z,{capture:!0}),l.removeEventListener(oy,D)},onBlocked:()=>{b&&g!==b&&(g=b)},getBlockers:f,setBlockers:h,notifyOnIndexChange:!1});return l.addEventListener(fy,Z,{capture:!0}),l.addEventListener(oy,D),l.history.pushState=function(...Q){const P=s.apply(l.history,Q);return G._ignoreSubscribers||L("PUSH"),P},l.history.replaceState=function(...Q){const P=r.apply(l.history,Q);return G._ignoreSubscribers||L("REPLACE"),P},G}function wS(a){let l=a.replace(/[\x00-\x1f\x7f]/g,"");return l.startsWith("//")&&(l="/"+l.replace(/^\/+/,"")),l}function Ju(a,l){const s=wS(a),r=s.indexOf("#"),o=s.indexOf("?"),f=xd();return{href:s,pathname:s.substring(0,r>0?o>0?Math.min(r,o):r:o>0?o:s.length),hash:r>-1?s.substring(r):"",search:o>-1?s.slice(o,r===-1?void 0:r):"",state:l||{[Ha]:0,key:f,__TSR_key:f}}}function xd(){return(Math.random()+1).toString(36).substring(7)}function hy(a){var l,s;return a.options.loader||a.options.beforeLoad||a.lazyFn||((l=a.options.component)==null?void 0:l.preload)||((s=a.options.pendingComponent)==null?void 0:s.preload)}function ec(a,l){return{fromLocation:l,toLocation:a,pathChanged:(l==null?void 0:l.pathname)!==a.pathname,hrefChanged:(l==null?void 0:l.href)!==a.href,hashChanged:(l==null?void 0:l.hash)!==a.hash}}function my({key:a,__TSR_key:l,__TSR_index:s,__hashScrollIntoViewOptions:r,...o}){return o}function ES(a,l,s,r){var o,f,h,d;for(const p of l){if(r&&a._tx!==r)return;s.some(g=>g.routeId===p.routeId)||(f=(o=a.routesById[p.routeId].options).onLeave)==null||f.call(o,p)}for(const p of s){if(r&&a._tx!==r)return;(d=(h=a.routesById[p.routeId].options)[l.some(g=>g.routeId===p.routeId)?"onStay":"onEnter"])==null||d.call(h,p)}}var jS=class{constructor(a,l){this.tempLocationKey=`${Math.round(Math.random()*1e7)}`,this._scroll={next:!0},this.subscribers=new Set,this._cache=new Map,this._committed=[],this.routeBranchCache=new WeakMap,this.lightweightCache=new WeakMap,this.startTransition=async s=>(s(),!1),this.update=s=>{const r=this.options,o=this.basepath??(r==null?void 0:r.basepath)??"/",f=this.basepath===void 0,h=r==null?void 0:r.rewrite;if(this.options={...r,...s},this.isServer=this.options.isServer??kx??typeof document>"u",this.protocolAllowlist=new Set(this.options.protocolAllowlist),this.options.pathParamsAllowedCharacters&&(this.pathParamsDecoder=aS(this.options.pathParamsAllowedCharacters)),(!this.history||this.options.history&&this.options.history!==this.history)&&(this.options.history?this.history=this.options.history:this.history=_S()),this.origin=this.options.origin,this.origin||(window!=null&&window.origin&&window.origin!=="null"?this.origin=window.origin:this.origin="http://localhost"),this.history&&this.updateLatestLocation(),this.options.routeTree!==this.routeTree){this.routeTree=this.options.routeTree;let g;this.resolvePathCache=Xu(1e3),g=this.buildRouteTree(),this.setRoutes(g)}if(!this.stores&&this.latestLocation){const g=this.getStoreConfig(this);this.batch=g.batch,this.stores=xS(this.latestLocation,g),oS(this)}const d=this.options.basepath??"/",p=this.options.rewrite;if(f||o!==d||h!==p){this.basepath=d;const g=[],b=b0(d);b&&b!=="/"&&g.push(bS({basepath:d})),p&&g.push(p),this.rewrite=g.length===0?void 0:g.length===1?g[0]:vS(g),this.history&&this.updateLatestLocation(),this.stores&&this.stores.location.set(this.latestLocation)}},this.updateLatestLocation=()=>{this.latestLocation=this.parseLocation(this.history.location,this.latestLocation)},this.buildRouteTree=()=>{const s=Wx(this.routeTree,this.options.caseSensitive,(r,o)=>{r.init({originalIndex:o})});return this.options.routeMasks&&Xx(this.options.routeMasks,s.processedTree),s},this.subscribe=(s,r)=>{const o={eventType:s,fn:r};return this.subscribers.add(o),()=>{this.subscribers.delete(o)}},this.emit=s=>{for(const r of this.subscribers)if(r.eventType===s.type)try{r.fn(s)}catch(o){console.error(o)}},this.parseLocation=(s,r)=>{const o=({pathname:p,search:g,hash:b,href:y,state:_})=>{if(!this.rewrite&&!/[ \x00-\x1f\x7f\u0080-\uffff]/.test(p)){const R=this.options.parseSearch(g),z=this.options.stringifySearch(R);return{href:p+z+b,publicHref:p+z+b,pathname:Ls(p).path,external:!1,searchStr:z,search:sl(r==null?void 0:r.search,R),hash:Ls(b.slice(1)).path,state:ul(r==null?void 0:r.state,_)}}const S=new URL(y,this.origin),w=ed(this.rewrite,S),E=this.options.parseSearch(w.search),j=this.options.stringifySearch(E);return w.search=j,{href:w.href.replace(w.origin,""),publicHref:y,pathname:Ls(w.pathname).path,external:!!this.rewrite&&w.origin!==this.origin,searchStr:j,search:sl(r==null?void 0:r.search,E),hash:Ls(w.hash.slice(1)).path,state:ul(r==null?void 0:r.state,_)}},f=o(s),{__tempLocation:h,__tempKey:d}=f.state;if(h&&(!d||d===this.tempLocationKey)){const p=o(h);return p.state.key=f.state.key,p.state.__TSR_key=f.state.__TSR_key,delete p.state.__tempLocation,{...p,maskedLocation:f}}return f},this.resolvePathWithBase=(s,r)=>nS({base:s,to:r,trailingSlash:this.options.trailingSlash,cache:this.resolvePathCache}),this.matchRoutes=(s,r,o)=>typeof s=="string"?this.matchRoutesInternal({pathname:s,search:r},o):this.matchRoutesInternal(s,r),this.getMatchedRoutes=s=>{const r=Object.create(null),o=Fx(Jn(s),this.processedTree,!0);return o&&Object.assign(r,o.rawParams),[(o==null?void 0:o.branch)||[this.routesById.__root__],r,o==null?void 0:o.route]},this.buildLocation=s=>{const r=(f={})=>{var Q,P;if(f.href){const ee=Ju(f.href,{});f={...f,to:ed(this.rewrite,new URL(ee.pathname,this.origin)).pathname,search:this.options.parseSearch(ee.search),hash:ee.hash.slice(1)}}const h=f._fromLocation||this._pendingLocation||this.latestLocation,d=this.matchRoutesLightweight(h);f.from;const p=f.unsafeRelative==="path"?h.pathname:f.from??d[1],g=d[2],b=d[3],y=this.resolvePathWithBase(p,f.to?`${f.to}`:".");let _=gy(f.params,b);const S=this.routesByPath[Jn(y)];let w;if(S)w=this.getRouteBranch(S);else if(y.includes("$"))w=[];else{const[ee,I,fe]=this.getMatchedRoutes(y);w=ee,this.options.notFoundRoute&&(!fe||fe.path!=="/"&&I["**"])&&(w=[...w,this.options.notFoundRoute])}if(w.length&&d0(_))for(const ee of w){const I=((Q=ee.options.params)==null?void 0:Q.stringify)??ee.options.stringifyParams;if(I){_===b&&(_=Object.assign(Object.create(null),_));try{Object.assign(_,I(_))}catch{}}}const E=s.leaveParams?y:Ls(sy({path:y,params:_,decoder:this.pathParamsDecoder,server:this.isServer}).interpolatedPath).path;let j=g;if(s._includeValidateSearch&&((P=this.options.search)!=null&&P.strict)){const ee={};w.forEach(I=>{if(I.options.validateSearch)try{Object.assign(ee,Gu(I.options.validateSearch,{...ee,...j}))}catch{}}),j=ee}j=MS(j,f,w,s._includeValidateSearch),j=sl(g,j);const R=this.options.stringifySearch(j),z=f.hash===!0?h.hash:f.hash?zi(f.hash,h.hash):void 0,L=z?`#${z}`:"";let D=f.state===!0?h.state:f.state?zi(f.state,h.state):{};f.state&&(D=ul(h.state,D));const Z=`${E}${R}${L}`;let G,K,J=!1;if(this.rewrite){const ee=new URL(Z,this.origin),I=_0(this.rewrite,ee);G=ee.href.replace(ee.origin,""),I.origin!==this.origin?(K=I.href,J=!0):K=I.pathname+I.search+I.hash}else G=Vx(Z),K=G;return{publicHref:K,href:G,pathname:E,search:j,searchStr:R,state:D,hash:z??"",external:J,unmaskOnReload:f.unmaskOnReload}},o=r(s);if(s.mask)o.maskedLocation=r({from:s.from,...s.mask});else if(this.options.routeMasks){const f=Zx(o.pathname,this.processedTree);if(f){const h=Object.assign(Object.create(null),f.rawParams),{from:d,params:p,...g}=f.route,b=gy(p,h);o.maskedLocation=r({from:s.from,...g,params:b})}}return o},this.commitLocation=async({viewTransition:s,ignoreBlocker:r,...o})=>{let f;const h=Jn(this.latestLocation.href)===Jn(o.href)&&Ba(my(o.state),my(this.latestLocation.state)),d=this._commitPromise;let p;const g=new Promise(b=>{p=b});if(g.resolve=()=>{p(),d==null||d.resolve()},this._commitPromise=g,h)this.load();else{let{maskedLocation:b,hashScrollIntoView:y,..._}=o;b&&(_={...b,state:{...b.state,__tempKey:void 0,__tempLocation:{..._,search:_.searchStr,state:{..._.state,__tempKey:void 0,__tempLocation:void 0,__TSR_key:void 0,key:void 0}}}},(_.unmaskOnReload??this.options.unmaskOnReload??!1)&&(_.state.__tempKey=this.tempLocationKey)),_.state.__hashScrollIntoViewOptions=y??this.options.defaultHashScrollIntoView??!0,this.shouldViewTransition=s,f=o.replace?"REPLACE":"PUSH",this.history[f==="REPLACE"?"replace":"push"](_.publicHref,_.state,{ignoreBlocker:r}),this.history.subscribers.size||this.load({action:{type:f}})}return this._scroll.next=o.resetScroll??!0,this._commitPromise},this.buildAndCommitLocation=({replace:s,resetScroll:r,hashScrollIntoView:o,viewTransition:f,ignoreBlocker:h,...d}={})=>{const p=this.buildLocation({...d,_includeValidateSearch:!0});this._pendingLocation=p;const g=this.commitLocation({...p,viewTransition:f,replace:s,resetScroll:r,hashScrollIntoView:o,ignoreBlocker:h});return queueMicrotask(()=>{this._pendingLocation===p&&(this._pendingLocation=void 0)}),g},this.navigate=async({to:s,reloadDocument:r,href:o,publicHref:f,...h})=>{var p,g;let d=!1;if(o)try{new URL(`${o}`),d=!0}catch{}if(d&&!r&&(r=!0),r){if(s!==void 0||!o){const y=this.buildLocation({to:s,...h});o=o??y.publicHref,f=f??y.publicHref}const b=!d&&f?f:o;if(Ku(b,this.protocolAllowlist))return;if(!h.ignoreBlocker){const y=((g=(p=this.history).getBlockers)==null?void 0:g.call(p))??[];for(const _ of y)if(_!=null&&_.blockerFn&&await _.blockerFn({currentLocation:this.latestLocation,nextLocation:this.latestLocation,action:"PUSH"}))return}h.replace?window.location.replace(b):window.location.href=b;return}return this.buildAndCommitLocation({...h,href:o,to:s,_isNavigate:!0})},this.load=async s=>{this.updateLatestLocation(),s!=null&&s.action&&(this._scroll.hash=s.action.type==="PUSH"||s.action.type==="REPLACE"),await US(this,s)},this.startViewTransition=s=>{var o,f;const r=this.shouldViewTransition??this.options.defaultViewTransition;if(this.shouldViewTransition=void 0,r&&typeof document.startViewTransition=="function"){let h;if(typeof r=="object"&&((f=(o=window.CSS)==null?void 0:o.supports)!=null&&f.call(o,"selector(:active-view-transition-type(a))"))){const d=this.latestLocation,p=this.stores.resolvedLocation.get(),g=typeof r.types=="function"?r.types(ec(d,p)):r.types;if(g===!1)return s();h={update:s,types:g}}else h=s;return document.startViewTransition(h).updateCallbackDone}return s()},this.invalidate=s=>{var g,b;const r=this._committed,o=s==null?void 0:s.filter,f=this._preloads,h=new Set([...r,...this._cache.values(),...[...(f==null?void 0:f.values())??[]].flat(),...((g=this._tx)==null?void 0:g[3])??[]].filter(y=>!o||o(y)).map(y=>y.id)),d=[];for(const[y,_]of f??[])_.some(S=>h.has(S.id))&&(f.delete(y),d.push(y));const p=y=>{if(h.has(y.id)){const _=this.routesById[y.routeId],S={...y,invalid:!0,...(s!=null&&s.forcePending||y.status==="error"||y.status==="notFound")&&hy(_)?{status:"pending",error:void 0}:void 0};return y._flight=void 0,S}return y};this._committed=r.map(p);for(const[y,_]of this._cache)h.has(y)&&(_.invalid=!0,s!=null&&s.forcePending&&(_.status="pending"));for(const y of h)(b=this._flights)==null||b.delete(y);for(const y of d)y.abort();return this.shouldViewTransition=!1,this.load({sync:s==null?void 0:s.sync})},this.resolveRedirect=s=>{const r=s.headers.get("Location");if(s.options.href){if(r)try{const o=new URL(r);if(this.origin&&o.origin===this.origin){const f=o.pathname+o.search+o.hash;s.options.href=f,s.headers.set("Location",f)}}catch{}}else{const o=this.buildLocation(s.options).publicHref||"/";s.options.href=o,s.headers.set("Location",o)}if(s.options.href&&Ku(s.options.href,this.protocolAllowlist))throw new Error("Redirect blocked: unsafe protocol");return s.headers.get("Location")||s.headers.set("Location",s.options.href),s},this.clearCache=s=>{var g;const r=this._cache,o=this._preloads,f=s==null?void 0:s.filter,h=[],d=[];for(const[b,y]of r)(!f||f(y))&&(d.push(b),h.push(y));const p=[];for(const[b,y]of o??[])(!f||y.some(f))&&(p.push(b),h.push(...y));for(const b of d)r.delete(b);for(const b of p)o.delete(b);for(const b of h){const y=b._flight;b._flight=void 0,y&&!--y[2]&&(((g=this._flights)==null?void 0:g.get(b.id))===y&&this._flights.delete(b.id),p.push(y[1]))}for(const b of p)b.abort()},this.loadRouteChunk=mi,this.preloadRoute=s=>LS(this,s),this.matchRoute=(s,r)=>{const o={...s,to:s.to?this.resolvePathWithBase(s.from||"",s.to):void 0,params:s.params||{},leaveParams:!0},f=this.buildLocation(o),h=this.stores.status.get()==="pending";if(r!=null&&r.pending&&!h)return!1;const d=(r==null?void 0:r.pending)??!h?this.latestLocation:this.stores.resolvedLocation.get()||this.stores.location.get(),p=Jx(f.pathname,(r==null?void 0:r.caseSensitive)??!1,(r==null?void 0:r.fuzzy)??!1,d.pathname,this.processedTree);return!p||s.params&&!Ba(p.rawParams,s.params,{partial:!0})?!1:(r==null?void 0:r.includeSearch)??!0?Ba(d.search,f.search,{partial:!0})?p.rawParams:!1:p.rawParams},this.getStoreConfig=l,this.update({defaultPreloadDelay:50,defaultPendingMs:1e3,defaultPendingMinMs:500,context:void 0,...a,caseSensitive:a.caseSensitive??!1,notFoundMode:a.notFoundMode??"fuzzy",stringifySearch:a.stringifySearch??gS,parseSearch:a.parseSearch??mS,protocolAllowlist:a.protocolAllowlist??Qx}),self.__TSR_ROUTER__=this}isShell(){return!!this.options.isShell}get state(){return this.stores.__store.get()}setRoutes({routesById:a,routesByPath:l,processedTree:s}){this.routesById=a,this.routesByPath=l,this.processedTree=s;const r=this.options.notFoundRoute;r&&(r.init({originalIndex:99999999999}),this.routesById[r.id]=r)}getRouteBranch(a){let l=this.routeBranchCache.get(a);return l||(l=y0(a),this.routeBranchCache.set(a,l)),l}matchRoutesInternal(a,l){var _,S;const[s,r,o]=this.getMatchedRoutes(a.pathname);let f=s,h=!1;(o?o.path!=="/"&&r["**"]:Jn(a.pathname))&&(this.options.notFoundRoute?f=[...f,this.options.notFoundRoute]:h=!0);const d=h?AS(this.options.notFoundMode,f):void 0,p=new Array(f.length),g=this._committed,b=(w,E)=>{const j=g[E];return(j==null?void 0:j.routeId)===w.id?j:w===this.options.notFoundRoute?g.find(R=>R.routeId===w.id):void 0};let y;for(let w=0;w{const S=_(p.preSearchFilters?p.preSearchFilters.reduce((w,E)=>E(w),y):y);return p.postSearchFilters?p.postSearchFilters.reduce((w,E)=>E(w),S):S};o.push(b)}const g=p.validateSearch;if(r&&g){const b=({search:y,next:_,meta:S})=>{const w=_(y);try{const E=Gu(g,w);if(S&&E)for(const j in E)j in w||(S.defaulted||(S.defaulted=new Map)).set(j,E[j]);return{...w,...E}}catch{}return w};o.push(b)}}const f=(d,p,g)=>{if(d>=o.length){if(!l.search)return{};if(l.search===!0)return p;const y=zi(l.search,p);return g&&(g.explicit=y),y}const b=(y,_)=>{if(_){const S=g||{};return{search:f(d+1,y,S),meta:S}}return f(d+1,y,g)};return o[d]({search:p,next:b,meta:g})};return f(0,a)}function AS(a,l){if(a!=="root"){let s;for(let r=l.length-1;r>=0;r--){const o=l[r];if(o.options.notFoundComponent)return o.id;s||(s=o.children&&o.id)}if(s)return s}return hi}function gy(a,l){if(a===!1||a===null)return Object.create(null);if((a??!0)===!0)return l;const s=Object.assign(Object.create(null),l);return Object.assign(s,zi(a,s))}function py(a,l){var r;const s=((r=a.options.params)==null?void 0:r.parse)??a.options.parseParams;s&&Object.assign(l,s(l))}function td(a,l){var s,r;return(r=(s=a.options[l])==null?void 0:s.preload)==null?void 0:r.call(s)}function CS(a,l){const s=td(a,"component");let r=td(a,"pendingComponent");return l&&(r?r=r.then(l):l()),s&&r?Promise.all([s,r]).then(()=>{}):s??r}function mi(a,l,s){const r=()=>l===!1?void 0:l?td(a,l):CS(a,s),o=a._lazy;if(o)return o===!0?r():o.then(r);if(!a.lazyFn)return r();const f=a.lazyFn().then(h=>{{const{id:d,...p}=h.options;Object.assign(a.options,p),a._lazy=!0}},h=>{throw a._lazy=void 0,h});return a._lazy=f,f.then(r)}function Sd(a){const l=a.findIndex(s=>s.status!=="success"||s._notFound)+1;return l&&l{const o=()=>r(l);l.addEventListener("abort",o,{once:!0}),Promise.resolve(a).then(s,r).finally(()=>l.removeEventListener("abort",o))})}function xl(a,l){return a.routesById[l.routeId]}function Is(a,l,s){return S0(a)?[Vt,a]:Ni(a)?(a.routeId||(a.routeId=s),[tc,a]):l?(typeof(a==null?void 0:a.then)=="function"&&(a=new Error("A Promise was thrown",{cause:a})),[$n,a]):[Sn,a]}function _d(a,l){var r,o;let s=Is(l,!0,a.id);if(s[0]!==$n)return s;try{(o=(r=a.options).onError)==null||o.call(r,s[1])}catch(f){s=Is(f,!0,a.id)}return s}function Ks(a,l,s,r,o){return o[0].signal.aborted?qa:jd(a,l,s,_d(s,r),o)}async function RS(a,l,s,r,o,f){var b,y;const[h,d]=l,p=s[0].signal,g=!!s[3];for(let _=s[6]??0;_a.navigate({...D,_fromLocation:h}),buildLocation:a.buildLocation,cause:g?"preload":S.cause,abortController:s[0],preload:g,matches:d,routeId:w.id};try{const D=S._ctx||(S._ctx=w.options.context?w.options.context({...j,deps:S.loaderDeps,context:E})||{}:void 0);S.context={...E,...D}}catch(D){return Fn(a,S),[_,Ks(a,l,w,D,s)]}if(p.aborted)return[_,qa];const R=S.paramsError??S.searchError;if(R!==void 0)return Fn(a,S),[_,Ks(a,l,w,R,s)];const z=w.options.beforeLoad;if(!z)continue;const L=S.status;_>=f&&(S.status="pending",(y=s[7])==null||y.call(s));try{er(a,S,"beforeLoad",s[0]);const D=await bl(z({...j,search:S.search,context:S.context,...a.options.additionalContext}),p);if(p.aborted)return[_,qa];const Z=jd(a,l,w,Is(D,!1,w.id),s);if(Z[0]!==Sn)return Fn(a,S),[_,Z];S.context={...S.context,...D}}catch(D){return Fn(a,S),[_,Ks(a,l,w,D,s)]}finally{S.status=L,er(a,S,!1,s[0])}}o()}function wd(a,l,s){var r;if(!(!s||--s[2])){if(((r=a._flights)==null?void 0:r.get(l.id))===s){const o=a._tx;if(o&&!o[0].signal.aborted&&!o[3].includes(l)&&o[3].some(f=>f.id===l.id)&&o[3].some(f=>f.isFetching==="beforeLoad"))return;a._flights.delete(l.id)}return s[1]}}function Fn(a,l){var r;const s=l._flight;l._flight=void 0,(r=wd(a,l,s))==null||r.abort()}function zt(a,l,s,r){var f;const o=[];for(const h of l)if(!(s!=null&&s.includes(h))){const d=h._flight;if(h._flight=void 0,r&&(d==null?void 0:d[2])===1&&((f=a._flights)==null?void 0:f.get(h.id))===d&&(s!=null&&s.some(p=>p.id===h.id)))d[2]=0;else{const p=wd(a,h,d);p&&o.push(p)}}for(const h of o)h.abort()}function Ed(a){for(const l of a){const s=l._flight;s&&s[2]++}}function er(a,l,s,r){var h;if(l.isFetching=s,r&&((h=a._tx)==null?void 0:h[0])!==r)return;const o=a.stores.byRoute.get(l.routeId),f=o==null?void 0:o.get();(f==null?void 0:f.id)===l.id&&o.set({...f,isFetching:s})}function w0(a,l,s,r,o,f,h){const d=l[0];return{params:s.params,location:d,navigate:p=>a.navigate({...p,_fromLocation:d}),cause:h?"preload":s.cause,abortController:o,preload:h,deps:s.loaderDeps,parentMatchPromise:f,context:s.context,route:r,...a.options.additionalContext}}async function yy(a,l,s,r,o,f,h){const d=h[0],p=d.signal;if(p.aborted)return qa;if(!o)return[Sn,void 0];let g=s._flight;er(a,s,"loader",d);try{if(!g){const b=new AbortController;g=[Promise.resolve().then(()=>o(w0(a,l,s,r,b,f,!!h[3]))).then(y=>Is(y,!1,r.id),y=>Is(y,!0,r.id)).then(y=>{var _;return y[0]!==Sn&&((_=a._flights)==null?void 0:_.get(s.id))===g&&(a._flights.delete(s.id),g[2]||b.abort()),y[0]===$n&&g[2]?_d(r,y[1]):y}),b,1],(a._flights??(a._flights=new Map)).set(s.id,g)}return s._flight=g,s.abortController=g[1],jd(a,l,r,await bl(g[0],p),h)}catch(b){if(b!==p||!p.aborted)throw b;return Fn(a,s),qa}finally{er(a,s,!1,d)}}function vy(a,l,s){l[0]!==Vt&&(a.status="success",a.error=void 0,l[0]===Sn?(a.loaderData=l[1],a.invalid=!1,a.updatedAt=Date.now(),a.preload=s):a.invalid=!0)}function zS(a,l,s){const r=a._cache.get(l.id);if(r!==s||a._committed.some(f=>f.id===l.id&&f._flight===l._flight))return;const o={...l,_notFound:void 0,context:{}};o._flight&&o._flight[2]++,a._cache.set(l.id,o),r&&Fn(a,r)}function by(a,l){return l[0]===$n||l[0]===tc?{...a,status:l[0]===$n?"error":"notFound",error:l[1],_flight:void 0}:a}function NS(a,l,s,r,o,f,h){var I,fe;const d=l[1][s],p=xl(a,d),g=!!f[3],b=a._cache.get(d.id);let y,_=!1,S;try{if(d.status==="success"&&(y=p.options.shouldReload,typeof y=="function"&&(y=y(w0(a,l,d,p,f[0],o,g))),f[0].signal.aborted&&(S=qa)),!S)if(d.status!=="success")_=!0;else{const F=g||d.preload?p.options.preloadStaleTime??a.options.defaultPreloadStaleTime??3e4:p.options.staleTime??a.options.defaultStaleTime??0;_=!!(d.invalid||y||y===void 0&&Date.now()-d.updatedAt>=F&&(f[5]||d.cause==="enter"||f[2].some(ae=>ae.routeId===d.routeId&&ae.id!==d.id)))}}catch(F){d.invalid=!0,Fn(a,d),S=Ks(a,l,p,F,f)}const w=p.options.loader,E=typeof w=="function",j=E?w:w==null?void 0:w.handler,R=!g||p.options.preload!==!1;let z=R&&w?(I=a._flights)==null?void 0:I.get(d.id):void 0;z===d._flight||S?z=void 0:z&&!_&&!g&&y===void 0?_=!0:_||(z=void 0);const L=!!(w&&_&&d.status==="success"&&!g&&!f[4]&&((E?void 0:w.staleReloadMode)??a.options.defaultStaleReloadMode)!=="blocking"),D=_&&R,Z=D&&!L&&(d.status!=="success"||!!w),G=s>=h?f[7]:void 0,K=p.lazyFn&&p._lazy!==!0?G:void 0;if(D&&!w&&(d.invalid=!1,d.updatedAt=Date.now()),z&&z[2]++,Z){const F=d._flight;d._flight=z,(fe=wd(a,d,F))==null||fe.abort(),s>=h&&(d.status="pending"),G==null||G()}D||(d.isFetching=!1);const J=(S?Promise.resolve(S):Z?yy(a,l,d,p,j,o,f):Promise.resolve([Sn,d.loaderData])).then(F=>(Z&&(vy(d,F,g),F[0]===Sn&&(w&&!f[0].signal.aborted&&zS(a,d,b),s>=h&&(d.status="pending"))),F)),Q=bl(Promise.resolve().then(()=>mi(p,void 0,K)),f[0].signal).then(()=>{},F=>l[1].some((ae,B)=>B<=s&&(ae.status==="error"||ae.status==="notFound"||ae._notFound))?void 0:[s,Ks(a,l,p,F,f)]).then(F=>J.then(ae=>(Z&&!F&&ae[0]===Sn&&d.status==="pending"&&!f[0].signal.aborted&&(d.status="success",G==null||G()),F)));if(r.push([s,J,Q]),!L)return J.then(F=>by(d,F));const P={...d,status:"pending",preload:!1,_flight:z};d.invalid=!1,d.isFetching="loader";const ee=yy(a,l,P,p,j,o,f).then(F=>(d.isFetching=!1,vy(P,F,!1),F));return(l[2]??(l[2]=[])).push([s,ee,Q,P]),ee.then(F=>by(P,F))}async function nd(a,l,s,r,o=0){const f=s==null?void 0:s[1][1];let h=f!=null&&f.routeId?l.findIndex(d=>d.routeId===f.routeId):(s==null?void 0:s[0])??l.length-1;h<0&&(h=0);for(let d=h;d>=0;d--){const p=xl(a,l[d]);try{const g=mi(p,!1);g&&await bl(g,r)}catch(g){if(g===r&&r.aborted)throw g}if(p.options.notFoundComponent)return d}return f!=null&&f.routeId?h:o}function vl(a,l){l[2]&&(zt(a,l[2].map(s=>s[3])),l[2]=void 0)}async function xy(a,l,s,r){let o;try{await Promise.all(a.map(f=>f[1].then(async h=>{const d=f[0];if(!(r&&d>=await r)){if(h[0]>=Vt)throw[d,h];!o&&h[0]!==Sn&&(o=[d,h],await Promise.all((s??[]).map(p=>{if(!(p[0]<=d))return p[1].then(g=>{if(g[0]===Vt)throw[p[0],g]})})))}})))}catch(f){return f}return l??o}function jd(a,l,s,r,o,f){for(;r[0]===Vt;){const h=r[1],d=h.options;if(d.reloadDocument?o[3]:o[1]>=20)return r;try{return d.href&&d.reloadDocument?(a.resolveRedirect(h),r):[Vt,h,a.buildLocation({...d,_fromLocation:l[0],_includeValidateSearch:!0})]}catch(p){r=f?[$n,p]:_d(s,p),f=!0}}return r}async function E0(a,l,s,r,o,f){const h=l[1];let d=await o,p=!1;const g=h.findIndex(S=>S._notFound),b=S=>S[1][0]===tc?nd(a,h,S,r.signal):S[0];let y=g<0?h.length:g;if(((d==null?void 0:d[1][0])??0)>=Vt)y=0;else if(d){y=d[2]??(d[2]=await b(d));for(const S of s){if(S[0]>=y)break;const w=await S[1];if(w[0]!==Sn&&w[0]=y)break;const w=await S[2];if(w){d=w;break}}if(((d==null?void 0:d[1][0])??0)>=Vt){const S=d[1];if(S[0]!==Vt||S[1].options.reloadDocument||S[2])return vl(a,l),S;p=!0,d=[0,[$n,new Error("Too many redirects")]]}const _=d?d[2]??await b(d):g;if(_>=0){const S=d==null?void 0:d[1],w=S==null?void 0:S[0],E=h[_],j=S==null?void 0:S[1],R=()=>{S&&(E._notFound=void 0,w===$n?E.status="error":(j.routeId=E.routeId,E.routeId===a.routeTree.id?(E.status="success",E._notFound=!0):E.status="notFound"),E.error=j,E.isFetching=!1)};R(),S||f==null||f();const z=xl(a,E);try{await bl(S?Promise.resolve().then(()=>mi(z,w===$n?"errorComponent":"notFoundComponent")):Promise.all([mi(z),mi(z,"notFoundComponent")]),r.signal)}catch(L){if(L===r.signal&&r.signal.aborted)return vl(a,l),qa}S?p&&(r.abort(),await Promise.all([...s.map(L=>L[1]),...s.map(L=>L[2]),...(l[2]??[]).map(L=>L[1])]),vl(a,l),zt(a,h),R()):E.status="success"}return l}async function j0(a,l,s,r=0,o=l[1].length){var h,d;const f=l[1];for(let p=r;pz._notFound);if(a.options.notFoundMode!=="root"&&g>=0){const z=await nd(a,s,void 0,f,g);s[g]._notFound=void 0,s[z]._notFound=!0,g=z}let b=g<0?s.length:g+1,y=0;for(;y{for(let z=S;z=Vt&&(b=0);E()}if(!f.aborted&&!r[3]){const z=[];for(const[L,D]of a._flights??[])D[2]||(a._flights.delete(L),z.push(D[1]));for(const L of z)L.abort()}const R=E0(a,o,_,r[0],xy(_,j,o[2]),r[7]);(d=o[2])!=null&&d.length&&(o[3]=xy(o[2],void 0,void 0,R.then(z=>Ps(z)?0:Sd(s).length,()=>0))),h=await R}catch(p){if(vl(a,o),p===f&&f.aborted)return qa;throw p}return Ps(h)?h:j0(a,h,f,r[6]===s.length?r[6]:0)}function ad(a,l){var f,h;if(a._tx!==l)return;const s=l[3],r=a.stores.matches.get();let o=a._pending;for(let d=0;d0){o[3]=setTimeout(()=>ad(a,l),z);return}o[2]=0}const j=s.map(z=>({...z,_flight:void 0}));j[d].status="pending";const R=o[4]=a.startTransition(()=>a.stores.setMatches(j),j).then(z=>(z&&a._pending===o&&o[4]===R&&!o[2]&&(o[2]=Date.now()+w),z));return}}function Bs(a,l){var r;const s=a._pending;(a._tx===l||!((r=a._tx)!=null&&r[3].some(o=>o.id===(s==null?void 0:s[1]))))&&(clearTimeout(s==null?void 0:s[3]),a._pending=void 0)}async function Sy(a,l){const s=a._pending;if(!s)return;clearTimeout(s[3]);const r=s[2]-Date.now();if(!s[4]||r<=0||!Sd(l[3]).some(f=>f.id===s[1]))return;let o;try{await bl(new Promise(f=>{o=setTimeout(f,r)}),l[0].signal)}catch{}clearTimeout(o)}function M0(a,l){a._committed=l,a.stores.setMatches(l)}function DS(a,l,s,r){const o=a._committed,f=a._cache;for(const p of s)p.preload=!1,r&&(p._assetEnd=void 0);const h=Sd(s).length,d=new Map;{const p=Date.now();for(const g of[...o,...f.values()]){if(g.status!=="success"||s.some((y,_)=>y.id===g.id&&(_=(g.preload?b.options.preloadGcTime??a.options.defaultPreloadGcTime??3e5:b.options.gcTime??a.options.defaultGcTime??3e5)||d.set(g.id,f.get(g.id)===g?g:{...g,_flight:void 0,isFetching:!1,context:{}})}}l[3]=[],a._cache=d,M0(a,s),zt(a,[...f.values(),...o],[...s,...d.values()]),ES(a,o,s,l)}async function Uu(a,l){let s=a._tx;for(;s&&s!==l;){if(await s[5],a._tx===s)return;s=a._tx}}function A0(a,l,s){const r=s[1].options,o=s[2];if(!o)return a.navigate({...r,replace:!0,ignoreBlocker:!0});if(r.reloadDocument)return a.navigate({href:o.publicHref,reloadDocument:!0,replace:!0,ignoreBlocker:!0});o._redirects=l[1]+1,a._pendingLocation=o;const f=a.commitLocation({...o,viewTransition:r.viewTransition,replace:!0,resetScroll:r.resetScroll,hashScrollIntoView:r.hashScrollIntoView,ignoreBlocker:!0});return queueMicrotask(()=>{a._pendingLocation===o&&(a._pendingLocation=void 0)}),f}async function OS(a,l,s,r,o){const f=s.map(p=>({...p}));Ed(f);for(const p of r)Fn(a,f[p[0]]),f[p[0]]=p[3];const h=[l[2],f];let d;try{d=await E0(a,h,r,l[0],o)}catch(p){throw zt(a,f),p}if(Ps(d)){zt(a,f),d[0]===Vt&&a._tx===l&&a._committed===s&&await A0(a,l,d);return}if(await j0(a,d,l[0].signal),a._tx!==l||a._committed!==s){zt(a,f);return}for(const p of f){const g=a._cache.get(p.id);g!=null&&g._flight&&g._flight===p._flight&&(a._cache.delete(p.id),Fn(a,g))}M0(a,f),zt(a,s,f)}async function kS(a,l,s,r,o,f){const h=await T0(a,l[2],l[3],[l[0],l[1],a._committed,void 0,o,s,f,r]);if(Ps(h)){const y=h[0]===Vt&&a._tx===l;if((!y||h[1].options.reloadDocument)&&Bs(a,l),zt(a,l[3]),l[3]=[],!y)return;if(a._tx!==l){Bs(a,l);return}await A0(a,l,h);return}const d=h[1];if(a._tx===l&&await Sy(a,l),a._tx!==l){Bs(a,l),zt(a,d),vl(a,h);return}const p=l[2],g=ec(p,a.stores.resolvedLocation.get()),b=h[2];await a.startViewTransition(async()=>{var S;if(a._tx===l&&await Sy(a,l),a._tx!==l){Bs(a,l),zt(a,d),vl(a,h);return}const y=()=>{Bs(a,l),DS(a,l,d,f),a._tx===l&&(a.emit({type:"onLoad",...g}),a._tx===l&&a.emit({type:"onBeforeRouteMount",...g}))},_=await a.startTransition(y,d);if(a._tx!==l){vl(a,h);return}b!=null&&b.length&&OS(a,l,d,b,h[3]).catch(console.error),a.batch(()=>{a.stores.resolvedLocation.set(p),a.stores.status.set("idle"),a._tx===l&&a.emit({type:"onResolved",...g}),_&&a._tx===l&&a.emit({type:"onRendered",...g})}),a._tx===l&&((S=a._commitPromise)==null||S.resolve(),a._commitPromise=void 0)})}async function US(a,l){var D;const s=a._tx,r=a.stores.resolvedLocation.get(),o=r??a.stores.location.get(),f=a.latestLocation,h=a._pendingLocation,d=(h==null?void 0:h.href)===f.href?h._redirects??0:0,p=a._handoff,g=p==null?void 0:p[0](),b=new AbortController,y=a._preflight;if(a._preflight=b,g||p==null||p[1](),y==null||y.abort(),!b.signal.aborted){const Z=ec(f,r);a.emit({type:"onBeforeNavigate",...Z}),b.signal.aborted||a.emit({type:"onBeforeLoad",...Z})}if(b.signal.aborted){await Uu(a,s);return}const _=o.href===f.href;let S=b;const w=a.matchRoutes(f,{_controller:b});Ed(w);const E=g?p[1](w):void 0;if(E?S=g:g==null||g.abort(),b.signal.aborted){zt(a,w),await Uu(a,s);return}a._preflight=void 0;let j;const R=()=>kS(a,L,_,()=>ad(a,L),l==null?void 0:l.sync,E),z=l!=null&&l.sync?new Promise(Z=>j=Z):Promise.resolve().then(R).then(),L=[S,d,f,w,Date.now(),z];if(a._tx=L,s){for(const Z of a.stores.matches.get()){if(a._tx!==L)break;Z.isFetching&&er(a,Z,!1)}s[0].abort(),zt(a,s[3],L[3],!0)}if(a._tx!==L){zt(a,L[3]),L[3]=[],j==null||j(),await Uu(a,L);return}a.batch(()=>{a.stores.status.set("pending"),a.stores.location.set(f)}),(E||!a._committed.length&&((D=w[0])==null?void 0:D.status)!=="success"&&!w.some(Z=>Z._notFound))&&ad(a,L),j==null||j(R()),await z,await Uu(a,L)}async function LS(a,l){let s=a.buildLocation(l);for(let r=0;;r++){const o=a._committed,f=new AbortController;let h,d,p;try{try{h=a.matchRoutes(s,{_controller:f}),Ed(h),d=(a._preloads??(a._preloads=new Map)).set(f,h),p=await T0(a,s,h,[f,r,o,!0])}finally{d&&(d=d.delete(f),zt(a,h)),f.abort()}if(!Ps(p))return p[1];if(!d||p.length<3)return;s=p[2]}catch(g){Ni(g)||console.error(g);return}}}const BS="Error preloading route! ☝️";var C0=class{get to(){return this._to}get id(){return this._id}get path(){return this._path}get fullPath(){return this._fullPath}constructor(a){if(this.init=l=>{var p,g;this.originalIndex=l.originalIndex;const s=this.options,r=!(s!=null&&s.path)&&!(s!=null&&s.id);this.parentRoute=(g=(p=this.options).getParentRoute)==null?void 0:g.call(p),r?this._path=hi:this.parentRoute||vd();let o=r?hi:s==null?void 0:s.path;o&&o!=="/"&&(o=v0(o));const f=(s==null?void 0:s.id)||o;let h=r?hi:Bu([this.parentRoute.id==="__root__"?"":this.parentRoute.id,f]);o==="__root__"&&(o="/"),h!=="__root__"&&(h=Bu(["/",h]));const d=h==="__root__"?"/":Bu([this.parentRoute.fullPath,o]);this._path=o,this._id=h,this._fullPath=d,this._to=Jn(d)},this.addChildren=l=>this._addFileChildren(l),this._addFileChildren=l=>(Array.isArray(l)&&(this.children=l),typeof l=="object"&&l!==null&&(this.children=Object.values(l)),this),this._addFileTypes=()=>this,this.updateLoader=l=>(Object.assign(this.options,l),this),this.update=l=>(Object.assign(this.options,l),this),this.lazy=l=>(this.lazyFn=l,this),this.redirect=l=>x0({from:this.fullPath,...l}),this.options=a||{},this.isRoot=!(a!=null&&a.getParentRoute),a!=null&&a.id&&(a!=null&&a.path))throw new Error("Route cannot have both an 'id' and a 'path' option.")}},HS=class extends C0{constructor(a){super(a)}},Td=class extends $.Component{constructor(...a){super(...a),this.state={error:null},this.reset=()=>{this.setState({error:null})}}static getDerivedStateFromProps(a,l){const s=a.getResetKey();return l.error&&l.resetKey!==s?{resetKey:s,error:null}:{resetKey:s}}static getDerivedStateFromError(a){return{error:a}}componentDidCatch(a,l){var s,r;(r=(s=this.props).onCatch)==null||r.call(s,a,l)}render(){const a=this.state.error;return a?$.createElement(this.props.errorComponent??qS,{error:a,reset:this.reset}):this.props.children}};function qS({error:a}){const[l,s]=$.useState(!1);return v.jsxs("div",{style:{padding:".5rem",maxWidth:"100%"},children:[v.jsxs("div",{style:{display:"flex",alignItems:"center",gap:".5rem"},children:[v.jsx("strong",{style:{fontSize:"1rem"},children:"Something went wrong!"}),v.jsx("button",{style:{appearance:"none",fontSize:".6em",border:"1px solid currentColor",padding:".1rem .2rem",fontWeight:"bold",borderRadius:".25rem"},onClick:()=>s(r=>!r),children:l?"Hide Error":"Show Error"})]}),v.jsx("div",{style:{height:".25rem"}}),l?v.jsx("div",{children:v.jsx("pre",{style:{fontSize:".7em",border:"1px solid red",borderRadius:".25rem",padding:".3rem",color:"red",overflow:"auto"},children:a.message?v.jsx("code",{children:a.message}):null})}):null]})}function GS({children:a,fallback:l=null}){return v.jsx(cn.Fragment,{children:R0()?a:l})}function R0(){return cn.useSyncExternalStore(QS,()=>!0,()=>!1)}function QS(){return()=>{}}var z0=$.createContext(null);function on(a){return $.useContext(z0)}var nc=$.createContext(void 0),VS=$.createContext(void 0),Je=(a=>(a[a.None=0]="None",a[a.Mutable=1]="Mutable",a[a.Watching=2]="Watching",a[a.RecursedCheck=4]="RecursedCheck",a[a.Recursed=8]="Recursed",a[a.Dirty=16]="Dirty",a[a.Pending=32]="Pending",a))(Je||{});function YS({update:a,notify:l,unwatched:s}){return{link:r,unlink:o,propagate:f,checkDirty:h,shallowPropagate:d};function r(g,b,y){const _=b.depsTail;if(_!==void 0&&_.dep===g)return;const S=_!==void 0?_.nextDep:b.deps;if(S!==void 0&&S.dep===g){S.version=y,b.depsTail=S;return}const w=g.subsTail;if(w!==void 0&&w.version===y&&w.sub===b)return;const E=b.depsTail=g.subsTail={version:y,dep:g,sub:b,prevDep:_,nextDep:S,prevSub:w,nextSub:void 0};S!==void 0&&(S.prevDep=E),_!==void 0?_.nextDep=E:b.deps=E,w!==void 0?w.nextSub=E:g.subs=E}function o(g,b=g.sub){const y=g.dep,_=g.prevDep,S=g.nextDep,w=g.nextSub,E=g.prevSub;return S!==void 0?S.prevDep=_:b.depsTail=_,_!==void 0?_.nextDep=S:b.deps=S,w!==void 0?w.prevSub=E:y.subsTail=E,E!==void 0?E.nextSub=w:(y.subs=w)===void 0&&s(y),S}function f(g){let b=g.nextSub,y;e:do{const _=g.sub;let S=_.flags;if(S&60?S&12?S&4?!(S&48)&&p(g,_)?(_.flags=S|40,S&=1):S=0:_.flags=S&-9|32:S=0:_.flags=S|32,S&2&&l(_),S&1){const w=_.subs;if(w!==void 0){const E=(g=w).nextSub;E!==void 0&&(y={value:b,prev:y},b=E);continue}}if((g=b)!==void 0){b=g.nextSub;continue}for(;y!==void 0;)if(g=y.value,y=y.prev,g!==void 0){b=g.nextSub;continue e}break}while(!0)}function h(g,b){let y,_=0,S=!1;e:do{const w=g.dep,E=w.flags;if(b.flags&16)S=!0;else if((E&17)===17){if(a(w)){const j=w.subs;j.nextSub!==void 0&&d(j),S=!0}}else if((E&33)===33){(g.nextSub!==void 0||g.prevSub!==void 0)&&(y={value:g,prev:y}),g=w.deps,b=w,++_;continue}if(!S){const j=g.nextDep;if(j!==void 0){g=j;continue}}for(;_--;){const j=b.subs,R=j.nextSub!==void 0;if(R?(g=y.value,y=y.prev):g=j,S){if(a(b)){R&&d(j),b=g.sub;continue}S=!1}else b.flags&=-33;b=g.sub;const z=g.nextDep;if(z!==void 0){g=z;continue e}}return S}while(!0)}function d(g){do{const b=g.sub,y=b.flags;(y&48)===32&&(b.flags=y|16,(y&6)===2&&l(b))}while((g=g.nextSub)!==void 0)}function p(g,b){let y=b.depsTail;for(;y!==void 0;){if(y===g)return!0;y=y.prevDep}return!1}}function KS(a,l,s){var f,h,d;const r=typeof a=="object",o=r?a:void 0;return{next:(f=r?a.next:a)==null?void 0:f.bind(o),error:(h=r?a.error:l)==null?void 0:h.bind(o),complete:(d=r?a.complete:s)==null?void 0:d.bind(o)}}const ld=[];let Qu=0;const{link:_y,unlink:XS,propagate:ZS,checkDirty:N0,shallowPropagate:wy}=YS({update(a){return a._update()},notify(a){ld[id++]=a,a.flags&=~Je.Watching},unwatched(a){a.depsTail!==void 0&&(a.depsTail=void 0,a.flags=Je.Mutable|Je.Dirty,$u(a))}});let Lu=0,id=0,pn,sd=0;function JS(a){try{++sd,a()}finally{--sd||D0()}}function $u(a){const l=a.depsTail;let s=l!==void 0?l.nextDep:a.deps;for(;s!==void 0;)s=XS(s,a)}function D0(){if(!(sd>0)){for(;Lu{var g;o.get(),d.current?(g=h.next)==null||g.call(h,o._snapshot):d.current=!0});return{unsubscribe:()=>{p.stop()}}},_update(f){const h=pn,d=(l==null?void 0:l.compare)??Object.is;if(s)pn=o,++Qu,o.depsTail=void 0;else if(f===void 0)return!1;s&&(o.flags=Je.Mutable|Je.RecursedCheck);try{const p=o._snapshot,g=typeof f=="function"?f(p):f===void 0&&s?r(p):f;return p===void 0||!d(p,g)?(o._snapshot=g,!0):!1}finally{pn=h,s&&(o.flags&=~Je.RecursedCheck),$u(o)}}};return s?(o.flags=Je.Mutable|Je.Dirty,o.get=function(){const f=o.flags;if(f&Je.Dirty||f&Je.Pending&&N0(o.deps,o)){if(o._update()){const h=o.subs;h!==void 0&&wy(h)}}else f&Je.Pending&&(o.flags=f&~Je.Pending);return pn!==void 0&&_y(o,pn,Qu),o._snapshot}):o.set=function(f){if(o._update(f)){const h=o.subs;h!==void 0&&(ZS(h),wy(h),D0())}},o}function FS(a){const l=()=>{const r=pn;pn=s,++Qu,s.depsTail=void 0,s.flags=Je.Watching|Je.RecursedCheck;try{return a()}finally{pn=r,s.flags&=~Je.RecursedCheck,$u(s)}},s={deps:void 0,depsTail:void 0,subs:void 0,subsTail:void 0,flags:Je.Watching|Je.RecursedCheck,notify(){const r=this.flags;r&Je.Dirty||r&Je.Pending&&N0(this.deps,this)?l():this.flags=Je.Watching},stop(){this.flags=Je.None,this.depsTail=void 0,$u(this)}};return l(),s}var Af={exports:{}},Cf={},Rf={exports:{}},zf={};/** + * @license React + * use-sync-external-store-shim.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var jy;function $S(){if(jy)return zf;jy=1;var a=rr();function l(y,_){return y===_&&(y!==0||1/y===1/_)||y!==y&&_!==_}var s=typeof Object.is=="function"?Object.is:l,r=a.useState,o=a.useEffect,f=a.useLayoutEffect,h=a.useDebugValue;function d(y,_){var S=_(),w=r({inst:{value:S,getSnapshot:_}}),E=w[0].inst,j=w[1];return f(function(){E.value=S,E.getSnapshot=_,p(E)&&j({inst:E})},[y,S,_]),o(function(){return p(E)&&j({inst:E}),y(function(){p(E)&&j({inst:E})})},[y]),h(S),S}function p(y){var _=y.getSnapshot;y=y.value;try{var S=_();return!s(y,S)}catch{return!0}}function g(y,_){return _()}var b=typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?g:d;return zf.useSyncExternalStore=a.useSyncExternalStore!==void 0?a.useSyncExternalStore:b,zf}var Ty;function WS(){return Ty||(Ty=1,Rf.exports=$S()),Rf.exports}/** + * @license React + * use-sync-external-store-shim/with-selector.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var My;function PS(){if(My)return Cf;My=1;var a=rr(),l=WS();function s(g,b){return g===b&&(g!==0||1/g===1/b)||g!==g&&b!==b}var r=typeof Object.is=="function"?Object.is:s,o=l.useSyncExternalStore,f=a.useRef,h=a.useEffect,d=a.useMemo,p=a.useDebugValue;return Cf.useSyncExternalStoreWithSelector=function(g,b,y,_,S){var w=f(null);if(w.current===null){var E={hasValue:!1,value:null};w.current=E}else E=w.current;w=d(function(){function R(G){if(!z){if(z=!0,L=G,G=_(G),S!==void 0&&E.hasValue){var K=E.value;if(S(K,G))return D=K}return D=G}if(K=D,r(L,G))return K;var J=_(G);return S!==void 0&&S(K,J)?(L=G,K):(L=G,D=J)}var z=!1,L,D,Z=y===void 0?null:y;return[function(){return R(b())},Z===null?void 0:function(){return R(Z())}]},[b,y,_,S]);var j=o(g,w[0],w[1]);return h(function(){E.hasValue=!0,E.value=j},[j]),p(j),j},Cf}var Ay;function IS(){return Ay||(Ay=1,Af.exports=PS()),Af.exports}var e2=IS();function t2(a,l){return a===l}function Wn(a,l,s=t2){const r=$.useCallback(h=>{if(!a)return()=>{};const{unsubscribe:d}=a.subscribe(h);return d},[a]),o=$.useCallback(()=>a==null?void 0:a.get(),[a]);return e2.useSyncExternalStoreWithSelector(r,o,o,l,s)}var Cy={};function O0(a,l){const s=$.useRef();return r=>{const o=a!=null&&a.select?a.select(r):r;return(a==null?void 0:a.structuralSharing)??l.options.defaultStructuralSharing?s.current=ul(s.current,o):o}}function Sl(a){const l=on(),s=$.useContext(a.from?VS:nc),r=a.from??s,o=l.stores.getMatchStore(r),f=O0(a,l),h=Wn(o,d=>d?f(d):Cy);if(h!==Cy)return h;(a.shouldThrow??!0)&&vd()}function k0(a){return Sl({from:a.from,strict:a.strict,structuralSharing:a.structuralSharing,select:l=>a.select?a.select(l.loaderData):l.loaderData})}function U0(a){const{select:l,...s}=a;return Sl({...s,select:r=>l?l(r.loaderDeps):r.loaderDeps})}function L0(a){return Sl({from:a.from,shouldThrow:a.shouldThrow,structuralSharing:a.structuralSharing,strict:a.strict,select:l=>{const s=a.strict===!1?l.params:l._strictParams;return a.select?a.select(s):s}})}function B0(a){return Sl({from:a.from,strict:a.strict,shouldThrow:a.shouldThrow,structuralSharing:a.structuralSharing,select:l=>a.select?a.select(l.search):l.search})}function cr(a){const l=on();return $.useCallback(s=>l.navigate({...s,from:s.from??(a==null?void 0:a.from)}),[a==null?void 0:a.from,l])}function H0(a){return Sl({...a,select:l=>a.select?a.select(l.context):l.context})}function Nf(a){const l=$.useRef(a);return Ba(l.current,a,{ignoreUndefined:!1})||(l.current=a),l.current}function n2(a,l){return a[0]===l[0]&&a[1]===l[1]&&a[2]===l[2]}function a2(a,l,s){if(a!=null&&a.external)return Ku(a.href,s)?void 0:a.href;if(!o2(l)&&!(typeof l!="string"||l.indexOf(":")===-1))try{return new URL(l),Ku(l,s)?void 0:l}catch{}}function l2(a,l,s,r,o,f){if(f)return!1;if(s!=null&&s.exact){if(!tS(a.pathname,l.pathname,r))return!1}else{const h=Zu(a.pathname,r),d=Zu(l.pathname,r);if(!(h.startsWith(d)&&(h.length===d.length||h[d.length]==="/")))return!1}return((s==null?void 0:s.includeSearch)??!0)&&!Ba(a.search,l.search,{partial:!(s!=null&&s.exact),ignoreUndefined:!(s!=null&&s.explicitUndefined)})?!1:s!=null&&s.includeHash?o&&a.hash===l.hash:!0}function i2(a,l){const s=on(),r=Lx(l),{activeProps:o,inactiveProps:f,activeOptions:h,to:d,preload:p,preloadDelay:g,preloadIntentProximity:b,hashScrollIntoView:y,replace:_,startTransition:S,resetScroll:w,viewTransition:E,children:j,target:R,disabled:z,style:L,className:D,onClick:Z,onBlur:G,onFocus:K,onMouseEnter:J,onMouseLeave:Q,onTouchStart:P,ignoreBlocker:ee,params:I,search:fe,hash:F,state:ae,mask:B,reloadDocument:W,unsafeRelative:te,from:be,_fromLocation:me,...M}=a,X=R0(),ne=Nf(a.search),se=Nf(a.params),de=Nf(h),ge=$.useMemo(()=>a,[s,a.from,a._fromLocation,a.hash,a.to,ne,se,a.state,a.mask,a.unsafeRelative]),Ae=$.useCallback(it=>{const Fe=s.buildLocation({_fromLocation:it,...ge}),jn=c2(Fe.maskedLocation?Fe.maskedLocation.publicHref:Fe.publicHref,Fe.maskedLocation?Fe.maskedLocation.external:Fe.external,s.history,z),Qi=a2(jn,d,s.protocolAllowlist);return[jn==null?void 0:jn.href,Qi,l2(it,Fe,de,s.basepath,X,Qi!==void 0)]},[de,z,X,ge,s,d]),[ot,Qe,_n]=Wn(s.stores.location,Ae,n2),wn=_n?zi(o,{})??s2:Df,Pn=_n?Df:zi(f,{})??Df,Bi=[D,wn.className,Pn.className].filter(Boolean).join(" "),fn=(L||wn.style||Pn.style)&&{...L,...wn.style,...Pn.style},wl=$.useRef(!1),an=a.reloadDocument||Qe||z?!1:p??s.options.defaultPreload,Hi=g??s.options.defaultPreloadDelay??0,En=$.useCallback(()=>{s.preloadRoute(ge).catch(it=>{console.warn(it),console.warn(BS)})},[s,ge]),Ga=$.useCallback(it=>{if(!it){Of(r);return}if(!(it.isIntersecting??an==="intent")){it.isIntersecting===!1&&Of(r);return}if(!Hi){En();return}Xs.has(r)||Xs.set(r,setTimeout(()=>{Xs.delete(r),En()},Hi))},[En,r,an,Hi]);Ux(r,Ga,an!=="viewport"),$.useEffect(()=>{wl.current||an==="render"&&(En(),wl.current=!0)},[En,an]);const qi=it=>{const Fe=it.currentTarget.getAttribute("target"),jn=R!==void 0?R:Fe;!z&&!(it.metaKey||it.altKey||it.ctrlKey||it.shiftKey)&&!it.defaultPrevented&&(!jn||jn==="_self")&&it.button===0&&(it.preventDefault(),s.navigate({...ge,replace:_,resetScroll:w,hashScrollIntoView:y,startTransition:S,viewTransition:E,ignoreBlocker:ee}))};if(Qe)return{...M,ref:r,href:Qe,...j&&{children:j},...R&&{target:R},...z&&{disabled:z},...L&&{style:L},...D&&{className:D},...Z&&{onClick:Z},...G&&{onBlur:G},...K&&{onFocus:K},...J&&{onMouseEnter:J},...Q&&{onMouseLeave:Q},...P&&{onTouchStart:P}};const Gi=()=>{an==="intent"&&En()},dr=()=>{an==="intent"&&Of(r)};return{...M,...wn,...Pn,href:ot,ref:r,onClick:ui([Z,qi]),onBlur:ui([G,dr]),onFocus:ui([K,Ga]),onMouseEnter:ui([J,Ga]),onMouseLeave:ui([Q,dr]),onTouchStart:ui([P,Gi]),disabled:!!z,target:R,...fn&&{style:fn},...Bi&&{className:Bi},...z&&r2,..._n&&u2}}var Df={},s2={className:"active"},r2={role:"link","aria-disabled":!0},u2={"data-status":"active","aria-current":"page"},Xs=new WeakMap,Of=a=>{clearTimeout(Xs.get(a)),Xs.delete(a)},ui=a=>l=>{for(const s of a)if(s){if(l.defaultPrevented)return;s(l)}};function c2(a,l,s,r){if(!r)return l?{href:a,external:!0}:{href:s.createHref(a)||"/",external:!1}}function o2(a){if(typeof a!="string")return!1;const l=a.charCodeAt(0);return l===47?a.charCodeAt(1)!==47:l===46}var ac=$.forwardRef((a,l)=>{const{_asChild:s,...r}=a,{type:o,...f}=i2(r,l),h=typeof r.children=="function"?r.children({isActive:f["data-status"]==="active"}):r.children;if(!s){const{disabled:d,...p}=f;return $.createElement("a",p,h)}return $.createElement(s,f,h)}),f2=class extends C0{constructor(a){super(a),this.useMatch=l=>Sl({select:l==null?void 0:l.select,from:this.id,structuralSharing:l==null?void 0:l.structuralSharing}),this.useRouteContext=l=>H0({...l,from:this.id}),this.useSearch=l=>B0({select:l==null?void 0:l.select,structuralSharing:l==null?void 0:l.structuralSharing,from:this.id}),this.useParams=l=>L0({select:l==null?void 0:l.select,structuralSharing:l==null?void 0:l.structuralSharing,from:this.id}),this.useLoaderDeps=l=>U0({...l,from:this.id}),this.useLoaderData=l=>k0({...l,from:this.id}),this.useNavigate=()=>cr({from:this.fullPath}),this.Link=cn.forwardRef((l,s)=>v.jsx(ac,{ref:s,from:this.fullPath,...l}))}};function Oi(a){return new f2(a)}var d2=class extends HS{constructor(a){super(a),this.useMatch=l=>Sl({select:l==null?void 0:l.select,from:this.id,structuralSharing:l==null?void 0:l.structuralSharing}),this.useRouteContext=l=>H0({...l,from:this.id}),this.useSearch=l=>B0({select:l==null?void 0:l.select,structuralSharing:l==null?void 0:l.structuralSharing,from:this.id}),this.useParams=l=>L0({select:l==null?void 0:l.select,structuralSharing:l==null?void 0:l.structuralSharing,from:this.id}),this.useLoaderDeps=l=>U0({...l,from:this.id}),this.useLoaderData=l=>k0({...l,from:this.id}),this.useNavigate=()=>cr({from:this.fullPath}),this.Link=cn.forwardRef((l,s)=>v.jsx(ac,{ref:s,from:this.fullPath,...l}))}};function h2(a){return new d2(a)}function m2(a){const l=on(),s=`not-found-${Wn(l.stores.location,r=>r.pathname)}-${Wn(l.stores.status,r=>r)}`;return v.jsx(Td,{getResetKey:()=>s,onCatch:(r,o)=>{var f;if(Ni(r))(f=a.onCatch)==null||f.call(a,r,o);else throw r},errorComponent:({error:r})=>{var o;if(Ni(r))return(o=a.fallback)==null?void 0:o.call(a,r);throw r},children:a.children})}function g2(){return v.jsx("p",{children:"Not Found"})}function oi(a){return v.jsx(v.Fragment,{children:a.children})}function q0(a,l,s){return l.options.notFoundComponent?v.jsx(l.options.notFoundComponent,{...s}):a.options.defaultNotFoundComponent?v.jsx(a.options.defaultNotFoundComponent,{...s}):v.jsx(g2,{})}function lc(a,l){const s=(l==null?void 0:l.options.pendingComponent)??a.options.defaultPendingComponent;return s?v.jsx(s,{}):null}var p2=(a,l)=>a[0]===l[0]&&a[1]===l[1],G0=(a,l,s)=>!l.isRoot||l.options.shellComponent||l.options.wrapInSuspense||s===!1||s==="data-only"||!a.ssr,Q0=$.memo(function({routeId:l}){const s=on();return v.jsx(y2,{router:s,match:Wn(s.stores.getMatchStore(l),r=>r)})});function y2({router:a,match:l}){var y,_;const s=a.routesById[l.routeId],r=lc(a,s),o=s.options.errorComponent??a.options.defaultErrorComponent,f=s.options.onCatch??a.options.defaultOnCatch,h=s.isRoot?s.options.notFoundComponent??((y=a.options.notFoundRoute)==null?void 0:y.options.component):s.options.notFoundComponent,d=l.ssr===!1||l.ssr==="data-only",p=G0(a,s,l.ssr)&&(s.options.wrapInSuspense??r??(((_=s.options.errorComponent)==null?void 0:_.preload)||d))?$.Suspense:oi,g=o?Td:oi,b=h?m2:oi;return v.jsxs(s.isRoot?s.options.shellComponent??oi:oi,{children:[v.jsx(nc.Provider,{value:l.routeId,children:v.jsx(p,{fallback:r,children:v.jsx(g,{getResetKey:()=>l,errorComponent:o,onCatch:(S,w)=>{if(Ni(S))throw S.routeId??(S.routeId=l.routeId),S;f==null||f(S,w)},children:v.jsx(b,{fallback:S=>{if(S.routeId??(S.routeId=l.routeId),S.routeId!==l.routeId)throw S;return $.createElement(h,S)},children:d?v.jsx(GS,{fallback:r,children:v.jsx(Ry,{match:l})}):v.jsx(Ry,{match:l})})})})}),null]})}var Ry=$.memo(function({match:l}){const s=on(),r=l.routeId,o=s.routesById[r],f=$.useMemo(()=>{var p;const d=(p=o.options.remountDeps??s.options.defaultRemountDeps)==null?void 0:p({routeId:r,loaderDeps:l.loaderDeps,params:l._strictParams,search:l._strictSearch});return d?JSON.stringify(d):void 0},[r,l.loaderDeps,l._strictParams,l._strictSearch,o.options.remountDeps,s.options.defaultRemountDeps]),h=$.useMemo(()=>{const d=o.options.component??s.options.defaultComponent;return d?v.jsx(d,{},f):v.jsx(V0,{})},[f,o.options.component,s.options.defaultComponent]);if(l.status==="pending"){if(s.ssr&&!G0(s,o,l.ssr))return h;if(s._tx)throw s._tx[5];return lc(s,o)}if(l.status==="notFound")return q0(s,o,l.error);if(l.status==="error")throw l.error;return h}),V0=$.memo(function(){const l=on(),s=$.useContext(nc);let r,o,f;{const d=l.stores.getMatchStore(s);[r,o]=Wn(d,p=>[!!p._notFound,p.error],p2),f=Wn(l.stores.ids,p=>p[p.indexOf(s)+1])}if(r)return q0(l,l.routesById[s],o);if(!f)return null;const h=v.jsx(Q0,{routeId:f});return s===hi?v.jsx($.Suspense,{fallback:lc(l),children:h}):h});function Y0(a,l){const s=a[1];a.length=0,s==null||s(l)}function v2({t:a}){const l=on(),s=l._rendered??(l._rendered=[]);return l.startTransition=(r,o)=>new Promise(f=>{Y0(s,!1),s.push(o,f),a(l),$.startTransition(r)}),o0(()=>{const r=l.history.subscribe(l.load);l.updateLatestLocation();const o=l.latestLocation,f=l.buildLocation({to:o.pathname,search:!0,params:!0,hash:!0,state:!0,_includeValidateSearch:!0});if(Jn(o.publicHref)!==Jn(f.publicHref))return l.commitLocation({...f,replace:!0,ignoreBlocker:!0}),r;const h=l.stores.resolvedLocation.get();return(h==null?void 0:h.href)===o.href&&h.state.__TSR_key===o.state.__TSR_key?s.push(l.stores.matches.get(),d=>{d&&l.emit({type:"onRendered",...ec(h,h)})}):l._tx||l.load({sync:!0}).catch(console.error),r},[l,l.history]),null}function b2(){const a=on(),l=a.routesById[hi],s=lc(a,l),r=a.ssr?oi:$.Suspense,o=v.jsxs(v.Fragment,{children:[v.jsx(v2,{t:$.useState()[1]}),v.jsx(r,{fallback:s,children:v.jsx(x2,{})})]});return a.options.InnerWrap?v.jsx(a.options.InnerWrap,{children:o}):o}function x2(){const a=on(),l=a._rendered,s=Wn(a.stores.matches,h=>l[0]??h),r=s[0],o=r==null?void 0:r.routeId;o0(()=>{l[0]===s&&Y0(l,!0)},[l,s]);const f=o?v.jsx(Q0,{routeId:o}):null;return v.jsx(nc.Provider,{value:o,children:a.options.disableGlobalCatchBoundary?f:v.jsx(Td,{getResetKey:()=>r,onCatch:void 0,children:f})})}var S2=a=>({createMutableStore:Ey,createReadonlyStore:Ey,batch:JS}),_2=a=>new w2(a),w2=class extends jS{constructor(a){super(a,S2)}};function E2({router:a,children:l,...s}){d0(s)&&a.update({...a.options,...s,context:{...a.options.context,...s.context}});const r=v.jsx(z0.Provider,{value:a,children:l});return a.options.Wrap?v.jsx(a.options.Wrap,{children:r}):r}function j2({router:a,...l}){return v.jsx(E2,{router:a,...l,children:v.jsx(b2,{})})}function zy(a){const l=on({warn:(a==null?void 0:a.router)===void 0}),s=(a==null?void 0:a.router)||l;return Wn(s.stores.__store,O0(a,s))}const T2="modulepreload",M2=function(a){return"/"+a},Ny={},nn=function(l,s,r){let o=Promise.resolve();if(s&&s.length>0){let h=function(g){return Promise.all(g.map(b=>Promise.resolve(b).then(y=>({status:"fulfilled",value:y}),y=>({status:"rejected",reason:y}))))};document.getElementsByTagName("link");const d=document.querySelector("meta[property=csp-nonce]"),p=(d==null?void 0:d.nonce)||(d==null?void 0:d.getAttribute("nonce"));o=h(s.map(g=>{if(g=M2(g),g in Ny)return;Ny[g]=!0;const b=g.endsWith(".css"),y=b?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${g}"]${y}`))return;const _=document.createElement("link");if(_.rel=b?"stylesheet":T2,b||(_.as="script"),_.crossOrigin="",_.href=g,p&&_.setAttribute("nonce",p),document.head.appendChild(_),b)return new Promise((S,w)=>{_.addEventListener("load",S),_.addEventListener("error",()=>w(new Error(`Unable to preload CSS for ${g}`)))})}))}function f(h){const d=new Event("vite:preloadError",{cancelable:!0});if(d.payload=h,window.dispatchEvent(d),!d.defaultPrevented)throw h}return o.then(h=>{for(const d of h||[])d.status==="rejected"&&f(d.reason);return l().catch(f)})};/** + * @license lucide-react v0.460.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const A2=a=>a.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),K0=(...a)=>a.filter((l,s,r)=>!!l&&l.trim()!==""&&r.indexOf(l)===s).join(" ").trim();/** + * @license lucide-react v0.460.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */var C2={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};/** + * @license lucide-react v0.460.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const R2=$.forwardRef(({color:a="currentColor",size:l=24,strokeWidth:s=2,absoluteStrokeWidth:r,className:o="",children:f,iconNode:h,...d},p)=>$.createElement("svg",{ref:p,...C2,width:l,height:l,stroke:a,strokeWidth:r?Number(s)*24/Number(l):s,className:K0("lucide",o),...d},[...h.map(([g,b])=>$.createElement(g,b)),...Array.isArray(f)?f:[f]]));/** + * @license lucide-react v0.460.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Me=(a,l)=>{const s=$.forwardRef(({className:r,...o},f)=>$.createElement(R2,{ref:f,iconNode:l,className:K0(`lucide-${A2(a)}`,r),...o}));return s.displayName=`${a}`,s};/** + * @license lucide-react v0.460.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const z2=Me("Activity",[["path",{d:"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2",key:"169zse"}]]);/** + * @license lucide-react v0.460.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const N2=Me("BookMarked",[["path",{d:"M10 2v8l3-3 3 3V2",key:"sqw3rj"}],["path",{d:"M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H19a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1H6.5a1 1 0 0 1 0-5H20",key:"k3hazp"}]]);/** + * @license lucide-react v0.460.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const rd=Me("Bot",[["path",{d:"M12 8V4H8",key:"hb8ula"}],["rect",{width:"16",height:"12",x:"4",y:"8",rx:"2",key:"enze0r"}],["path",{d:"M2 14h2",key:"vft8re"}],["path",{d:"M20 14h2",key:"4cs60a"}],["path",{d:"M15 13v2",key:"1xurst"}],["path",{d:"M9 13v2",key:"rq6x2g"}]]);/** + * @license lucide-react v0.460.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const X0=Me("Boxes",[["path",{d:"M2.97 12.92A2 2 0 0 0 2 14.63v3.24a2 2 0 0 0 .97 1.71l3 1.8a2 2 0 0 0 2.06 0L12 19v-5.5l-5-3-4.03 2.42Z",key:"lc1i9w"}],["path",{d:"m7 16.5-4.74-2.85",key:"1o9zyk"}],["path",{d:"m7 16.5 5-3",key:"va8pkn"}],["path",{d:"M7 16.5v5.17",key:"jnp8gn"}],["path",{d:"M12 13.5V19l3.97 2.38a2 2 0 0 0 2.06 0l3-1.8a2 2 0 0 0 .97-1.71v-3.24a2 2 0 0 0-.97-1.71L17 10.5l-5 3Z",key:"8zsnat"}],["path",{d:"m17 16.5-5-3",key:"8arw3v"}],["path",{d:"m17 16.5 4.74-2.85",key:"8rfmw"}],["path",{d:"M17 16.5v5.17",key:"k6z78m"}],["path",{d:"M7.97 4.42A2 2 0 0 0 7 6.13v4.37l5 3 5-3V6.13a2 2 0 0 0-.97-1.71l-3-1.8a2 2 0 0 0-2.06 0l-3 1.8Z",key:"1xygjf"}],["path",{d:"M12 8 7.26 5.15",key:"1vbdud"}],["path",{d:"m12 8 4.74-2.85",key:"3rx089"}],["path",{d:"M12 13.5V8",key:"1io7kd"}]]);/** + * @license lucide-react v0.460.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const D2=Me("Brain",[["path",{d:"M12 5a3 3 0 1 0-5.997.125 4 4 0 0 0-2.526 5.77 4 4 0 0 0 .556 6.588A4 4 0 1 0 12 18Z",key:"l5xja"}],["path",{d:"M12 5a3 3 0 1 1 5.997.125 4 4 0 0 1 2.526 5.77 4 4 0 0 1-.556 6.588A4 4 0 1 1 12 18Z",key:"ep3f8r"}],["path",{d:"M15 13a4.5 4.5 0 0 1-3-4 4.5 4.5 0 0 1-3 4",key:"1p4c4q"}],["path",{d:"M17.599 6.5a3 3 0 0 0 .399-1.375",key:"tmeiqw"}],["path",{d:"M6.003 5.125A3 3 0 0 0 6.401 6.5",key:"105sqy"}],["path",{d:"M3.477 10.896a4 4 0 0 1 .585-.396",key:"ql3yin"}],["path",{d:"M19.938 10.5a4 4 0 0 1 .585.396",key:"1qfode"}],["path",{d:"M6 18a4 4 0 0 1-1.967-.516",key:"2e4loj"}],["path",{d:"M19.967 17.484A4 4 0 0 1 18 18",key:"159ez6"}]]);/** + * @license lucide-react v0.460.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const O2=Me("Check",[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]]);/** + * @license lucide-react v0.460.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const k2=Me("ChevronLeft",[["path",{d:"m15 18-6-6 6-6",key:"1wnfg3"}]]);/** + * @license lucide-react v0.460.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Wu=Me("ChevronRight",[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]]);/** + * @license lucide-react v0.460.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const U2=Me("CircleCheck",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);/** + * @license lucide-react v0.460.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Z0=Me("CircleHelp",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3",key:"1u773s"}],["path",{d:"M12 17h.01",key:"p32p05"}]]);/** + * @license lucide-react v0.460.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const L2=Me("CircleX",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m15 9-6 6",key:"1uzhvr"}],["path",{d:"m9 9 6 6",key:"z0biqf"}]]);/** + * @license lucide-react v0.460.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const B2=Me("Command",[["path",{d:"M15 6v12a3 3 0 1 0 3-3H6a3 3 0 1 0 3 3V6a3 3 0 1 0-3 3h12a3 3 0 1 0-3-3",key:"11bfej"}]]);/** + * @license lucide-react v0.460.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const H2=Me("Cpu",[["rect",{width:"16",height:"16",x:"4",y:"4",rx:"2",key:"14l7u7"}],["rect",{width:"6",height:"6",x:"9",y:"9",rx:"1",key:"5aljv4"}],["path",{d:"M15 2v2",key:"13l42r"}],["path",{d:"M15 20v2",key:"15mkzm"}],["path",{d:"M2 15h2",key:"1gxd5l"}],["path",{d:"M2 9h2",key:"1bbxkp"}],["path",{d:"M20 15h2",key:"19e6y8"}],["path",{d:"M20 9h2",key:"19tzq7"}],["path",{d:"M9 2v2",key:"165o2o"}],["path",{d:"M9 20v2",key:"i2bqo8"}]]);/** + * @license lucide-react v0.460.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const q2=Me("Eye",[["path",{d:"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0",key:"1nclc0"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);/** + * @license lucide-react v0.460.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const G2=Me("Gauge",[["path",{d:"m12 14 4-4",key:"9kzdfg"}],["path",{d:"M3.34 19a10 10 0 1 1 17.32 0",key:"19p75a"}]]);/** + * @license lucide-react v0.460.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Q2=Me("HardDrive",[["line",{x1:"22",x2:"2",y1:"12",y2:"12",key:"1y58io"}],["path",{d:"M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z",key:"oot6mr"}],["line",{x1:"6",x2:"6.01",y1:"16",y2:"16",key:"sgf278"}],["line",{x1:"10",x2:"10.01",y1:"16",y2:"16",key:"1l4acy"}]]);/** + * @license lucide-react v0.460.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const V2=Me("HeartPulse",[["path",{d:"M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z",key:"c3ymky"}],["path",{d:"M3.22 12H9.5l.5-1 2 4.5 2-7 1.5 3.5h5.27",key:"1uw2ng"}]]);/** + * @license lucide-react v0.460.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Y2=Me("History",[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}],["path",{d:"M12 7v5l4 2",key:"1fdv2h"}]]);/** + * @license lucide-react v0.460.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const K2=Me("Info",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 16v-4",key:"1dtifu"}],["path",{d:"M12 8h.01",key:"e9boi3"}]]);/** + * @license lucide-react v0.460.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const X2=Me("LayoutDashboard",[["rect",{width:"7",height:"9",x:"3",y:"3",rx:"1",key:"10lvy0"}],["rect",{width:"7",height:"5",x:"14",y:"3",rx:"1",key:"16une8"}],["rect",{width:"7",height:"9",x:"14",y:"12",rx:"1",key:"1hutg5"}],["rect",{width:"7",height:"5",x:"3",y:"16",rx:"1",key:"ldoo1y"}]]);/** + * @license lucide-react v0.460.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Z2=Me("Library",[["path",{d:"m16 6 4 14",key:"ji33uf"}],["path",{d:"M12 6v14",key:"1n7gus"}],["path",{d:"M8 8v12",key:"1gg7y9"}],["path",{d:"M4 4v16",key:"6qkkli"}]]);/** + * @license lucide-react v0.460.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const J0=Me("Lightbulb",[["path",{d:"M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5",key:"1gvzjb"}],["path",{d:"M9 18h6",key:"x1upvd"}],["path",{d:"M10 22h4",key:"ceow96"}]]);/** + * @license lucide-react v0.460.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Md=Me("LoaderCircle",[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]]);/** + * @license lucide-react v0.460.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const J2=Me("Menu",[["line",{x1:"4",x2:"20",y1:"12",y2:"12",key:"1e0a9i"}],["line",{x1:"4",x2:"20",y1:"6",y2:"6",key:"1owob3"}],["line",{x1:"4",x2:"20",y1:"18",y2:"18",key:"yk5zj1"}]]);/** + * @license lucide-react v0.460.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const F2=Me("Mic",[["path",{d:"M12 2a3 3 0 0 0-3 3v7a3 3 0 0 0 6 0V5a3 3 0 0 0-3-3Z",key:"131961"}],["path",{d:"M19 10v2a7 7 0 0 1-14 0v-2",key:"1vc78b"}],["line",{x1:"12",x2:"12",y1:"19",y2:"22",key:"x3vr5v"}]]);/** + * @license lucide-react v0.460.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ad=Me("Plug",[["path",{d:"M12 22v-5",key:"1ega77"}],["path",{d:"M9 8V2",key:"14iosj"}],["path",{d:"M15 8V2",key:"18g5xt"}],["path",{d:"M18 8v5a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4V8Z",key:"osxo6l"}]]);/** + * @license lucide-react v0.460.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const $2=Me("RotateCcw",[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}]]);/** + * @license lucide-react v0.460.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const F0=Me("Server",[["rect",{width:"20",height:"8",x:"2",y:"2",rx:"2",ry:"2",key:"ngkwjq"}],["rect",{width:"20",height:"8",x:"2",y:"14",rx:"2",ry:"2",key:"iecqi9"}],["line",{x1:"6",x2:"6.01",y1:"6",y2:"6",key:"16zg32"}],["line",{x1:"6",x2:"6.01",y1:"18",y2:"18",key:"nzw8ys"}]]);/** + * @license lucide-react v0.460.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Cd=Me("ShieldAlert",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"M12 8v4",key:"1got3b"}],["path",{d:"M12 16h.01",key:"1drbdi"}]]);/** + * @license lucide-react v0.460.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const W2=Me("SlidersHorizontal",[["line",{x1:"21",x2:"14",y1:"4",y2:"4",key:"obuewd"}],["line",{x1:"10",x2:"3",y1:"4",y2:"4",key:"1q6298"}],["line",{x1:"21",x2:"12",y1:"12",y2:"12",key:"1iu8h1"}],["line",{x1:"8",x2:"3",y1:"12",y2:"12",key:"ntss68"}],["line",{x1:"21",x2:"16",y1:"20",y2:"20",key:"14d8ph"}],["line",{x1:"12",x2:"3",y1:"20",y2:"20",key:"m0wm8r"}],["line",{x1:"14",x2:"14",y1:"2",y2:"6",key:"14e1ph"}],["line",{x1:"8",x2:"8",y1:"10",y2:"14",key:"1i6ji0"}],["line",{x1:"16",x2:"16",y1:"18",y2:"22",key:"1lctlv"}]]);/** + * @license lucide-react v0.460.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const P2=Me("Sparkles",[["path",{d:"M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z",key:"4pj2yx"}],["path",{d:"M20 3v4",key:"1olli1"}],["path",{d:"M22 5h-4",key:"1gvqau"}],["path",{d:"M4 17v2",key:"vumght"}],["path",{d:"M5 18H3",key:"zchphs"}]]);/** + * @license lucide-react v0.460.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const I2=Me("SquareTerminal",[["path",{d:"m7 11 2-2-2-2",key:"1lz0vl"}],["path",{d:"M11 13h4",key:"1p7l4v"}],["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2",key:"1m3agn"}]]);/** + * @license lucide-react v0.460.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Pu=Me("TriangleAlert",[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]]);/** + * @license lucide-react v0.460.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const e3=Me("Wrench",[["path",{d:"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z",key:"cbrjhi"}]]);/** + * @license lucide-react v0.460.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Rd=Me("X",[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]]),tr=[{id:"dashboard",pfad:"/cockpit",label:"Cockpit",hint:"Deine Box auf einen Blick",icon:X2,group:"Operativ"},{id:"ideen",pfad:"/ideen",label:"Ideen",hint:"Schreib hin, was entstehen soll",icon:J0,group:"Operativ"},{id:"skills",pfad:"/skills",label:"Skills & Jobs",hint:"Autonome Skills manuell auslösen",icon:rd,group:"Operativ"},{id:"chronik",pfad:"/chronik",label:"Chronik",hint:"Was die Box von allein getan hat + Zeitmaschine",icon:Y2,group:"Operativ"},{id:"wissen",pfad:"/wissen",label:"Wissen",hint:"Lucys Wissens-Vault (Traum-Notizen)",icon:Z2,group:"Wissen"},{id:"connect",pfad:"/verbinden",label:"Verbinden",hint:"IDE-/Agent-Configs erzeugen",icon:Ad,group:"Werkzeuge"},{id:"konsole",pfad:"/konsole",label:"Konsole",hint:"Direkte Box-Shell (SSH-artig)",icon:I2,group:"Werkzeuge"},{id:"guide",pfad:"/anleitung",label:"Anleitung",hint:"Einrichten & Vibe-Coding",icon:Z0,group:"Werkzeuge"},{id:"models",pfad:"/modelle",label:"Modelle",hint:"Speicher, laden & Rollen",icon:X0,group:"Wartung"},{id:"agent",pfad:"/agent",label:"Hermes",hint:"Agent-Status & Verdrahtung",icon:rd,group:"Wartung"}];function $0(a){return[...tr].sort((l,s)=>s.pfad.length-l.pfad.length).find(l=>a===l.pfad||a.startsWith(l.pfad+"/"))}const Dy=a=>{let l;const s=new Set,r=(g,b)=>{const y=typeof g=="function"?g(l):g;if(!Object.is(y,l)){const _=l;l=b??(typeof y!="object"||y===null)?y:Object.assign({},l,y),s.forEach(S=>S(l,_))}},o=()=>l,d={setState:r,getState:o,getInitialState:()=>p,subscribe:g=>(s.add(g),()=>s.delete(g))},p=l=a(r,o,d);return d},t3=(a=>a?Dy(a):Dy),n3=a=>a;function a3(a,l=n3){const s=cn.useSyncExternalStore(a.subscribe,cn.useCallback(()=>l(a.getState()),[a,l]),cn.useCallback(()=>l(a.getInitialState()),[a,l]));return cn.useDebugValue(s),s}const l3=a=>{const l=t3(a),s=r=>a3(l,r);return Object.assign(s,l),s},i3=(a=>l3);function s3(a,l){let s;try{s=a()}catch{return}return{getItem:o=>{var f;const h=p=>p===null?null:JSON.parse(p,void 0),d=(f=s.getItem(o))!=null?f:null;return d instanceof Promise?d.then(h):h(d)},setItem:(o,f)=>s.setItem(o,JSON.stringify(f,void 0)),removeItem:o=>s.removeItem(o)}}const ud=a=>l=>{try{const s=a(l);return s instanceof Promise?s:{then(r){return ud(r)(s)},catch(r){return this}}}catch(s){return{then(r){return this},catch(r){return ud(r)(s)}}}},r3=(a,l)=>(s,r,o)=>{let f={storage:s3(()=>window.localStorage),partialize:j=>j,version:0,merge:(j,R)=>({...R,...j}),...l},h=!1,d=0;const p=new Set,g=new Set;let b=f.storage;if(!b)return a((...j)=>{console.warn(`[zustand persist middleware] Unable to update item '${f.name}', the given storage is currently unavailable.`),s(...j)},r,o);const y=()=>{const j=f.partialize({...r()});return b.setItem(f.name,{state:j,version:f.version})},_=o.setState;o.setState=(j,R)=>(_(j,R),y());const S=a((...j)=>(s(...j),y()),r,o);o.getInitialState=()=>S;let w;const E=()=>{var j,R;if(!b)return;const z=++d;h=!1,p.forEach(D=>{var Z;return D((Z=r())!=null?Z:S)});const L=((R=f.onRehydrateStorage)==null?void 0:R.call(f,(j=r())!=null?j:S))||void 0;return ud(b.getItem.bind(b))(f.name).then(D=>{if(D)if(typeof D.version=="number"&&D.version!==f.version){if(f.migrate){const Z=f.migrate(D.state,D.version);return Z instanceof Promise?Z.then(G=>[!0,G]):[!0,Z]}console.error("State loaded from storage couldn't be migrated since no migrate function was provided")}else return[!1,D.state];return[!1,void 0]}).then(D=>{var Z;if(z!==d)return;const[G,K]=D;if(w=f.merge(K,(Z=r())!=null?Z:S),s(w,!0),G)return y()}).then(()=>{z===d&&(L==null||L(r(),void 0),w=r(),h=!0,g.forEach(D=>D(w)))}).catch(D=>{z===d&&(L==null||L(void 0,D))})};return o.persist={setOptions:j=>{f={...f,...j},j.storage&&(b=j.storage)},clearStorage:()=>{++d,b==null||b.removeItem(f.name)},getOptions:()=>f,rehydrate:()=>E(),hasHydrated:()=>h,onHydrate:j=>(p.add(j),()=>{p.delete(j)}),onFinishHydration:j=>(g.add(j),()=>{g.delete(j)})},f.skipHydration||E(),w||S},u3=r3;let c3=0;const Yt=i3()(u3(a=>({ui:{schieneEingeklappt:!1,paletteOffen:!1,expertenmodus:!1},strom:{lage:"getrennt",letztesEreignis:null},meldungen:[],schieneUmschalten:()=>a(l=>({ui:{...l.ui,schieneEingeklappt:!l.ui.schieneEingeklappt}})),palette:l=>a(s=>({ui:{...s.ui,paletteOffen:l}})),expertenmodus:l=>a(s=>({ui:{...s.ui,expertenmodus:l}})),stromLage:l=>a(s=>({strom:{...s.strom,lage:l}})),stromEreignis:()=>a(l=>({strom:{...l.strom,letztesEreignis:Date.now()}})),melden:(l,s)=>a(r=>({meldungen:[...r.meldungen,{id:`m${++c3}`,art:l,text:s,seit:Date.now()}].slice(-6)})),meldungWeg:l=>a(s=>({meldungen:s.meldungen.filter(r=>r.id!==l)}))}),{name:"mc_ui",partialize:a=>({ui:{schieneEingeklappt:a.ui.schieneEingeklappt,expertenmodus:a.ui.expertenmodus}}),merge:(a,l)=>{const s=a;return{...l,ui:{...l.ui,...(s==null?void 0:s.ui)??{}}}}})),o3=()=>Yt(a=>a.ui.expertenmodus),f3=()=>Yt(a=>a.ui.schieneEingeklappt),d3=()=>Yt(a=>a.ui.paletteOffen),h3=()=>Yt(a=>a.strom.lage),m3=()=>Yt(a=>a.meldungen),Oy=(a,l)=>Yt.getState().melden(a,l),kf=a=>Yt.getState().stromLage(a),g3=()=>Yt.getState().stromEreignis();function W0(a){var l,s,r="";if(typeof a=="string"||typeof a=="number")r+=a;else if(typeof a=="object")if(Array.isArray(a)){var o=a.length;for(l=0;l{const l=b3(a),{conflictingClassGroups:s,conflictingClassGroupModifiers:r}=a;return{getClassGroupId:h=>{const d=h.split(zd);return d[0]===""&&d.length!==1&&d.shift(),P0(d,l)||v3(h)},getConflictingClassGroupIds:(h,d)=>{const p=s[h]||[];return d&&r[h]?[...p,...r[h]]:p}}},P0=(a,l)=>{var h;if(a.length===0)return l.classGroupId;const s=a[0],r=l.nextPart.get(s),o=r?P0(a.slice(1),r):void 0;if(o)return o;if(l.validators.length===0)return;const f=a.join(zd);return(h=l.validators.find(({validator:d})=>d(f)))==null?void 0:h.classGroupId},ky=/^\[(.+)\]$/,v3=a=>{if(ky.test(a)){const l=ky.exec(a)[1],s=l==null?void 0:l.substring(0,l.indexOf(":"));if(s)return"arbitrary.."+s}},b3=a=>{const{theme:l,prefix:s}=a,r={nextPart:new Map,validators:[]};return S3(Object.entries(a.classGroups),s).forEach(([f,h])=>{cd(h,r,f,l)}),r},cd=(a,l,s,r)=>{a.forEach(o=>{if(typeof o=="string"){const f=o===""?l:Uy(l,o);f.classGroupId=s;return}if(typeof o=="function"){if(x3(o)){cd(o(r),l,s,r);return}l.validators.push({validator:o,classGroupId:s});return}Object.entries(o).forEach(([f,h])=>{cd(h,Uy(l,f),s,r)})})},Uy=(a,l)=>{let s=a;return l.split(zd).forEach(r=>{s.nextPart.has(r)||s.nextPart.set(r,{nextPart:new Map,validators:[]}),s=s.nextPart.get(r)}),s},x3=a=>a.isThemeGetter,S3=(a,l)=>l?a.map(([s,r])=>{const o=r.map(f=>typeof f=="string"?l+f:typeof f=="object"?Object.fromEntries(Object.entries(f).map(([h,d])=>[l+h,d])):f);return[s,o]}):a,_3=a=>{if(a<1)return{get:()=>{},set:()=>{}};let l=0,s=new Map,r=new Map;const o=(f,h)=>{s.set(f,h),l++,l>a&&(l=0,r=s,s=new Map)};return{get(f){let h=s.get(f);if(h!==void 0)return h;if((h=r.get(f))!==void 0)return o(f,h),h},set(f,h){s.has(f)?s.set(f,h):o(f,h)}}},I0="!",w3=a=>{const{separator:l,experimentalParseClassName:s}=a,r=l.length===1,o=l[0],f=l.length,h=d=>{const p=[];let g=0,b=0,y;for(let j=0;jb?y-b:void 0;return{modifiers:p,hasImportantModifier:S,baseClassName:w,maybePostfixModifierPosition:E}};return s?d=>s({className:d,parseClassName:h}):h},E3=a=>{if(a.length<=1)return a;const l=[];let s=[];return a.forEach(r=>{r[0]==="["?(l.push(...s.sort(),r),s=[]):s.push(r)}),l.push(...s.sort()),l},j3=a=>({cache:_3(a.cacheSize),parseClassName:w3(a),...y3(a)}),T3=/\s+/,M3=(a,l)=>{const{parseClassName:s,getClassGroupId:r,getConflictingClassGroupIds:o}=l,f=[],h=a.trim().split(T3);let d="";for(let p=h.length-1;p>=0;p-=1){const g=h[p],{modifiers:b,hasImportantModifier:y,baseClassName:_,maybePostfixModifierPosition:S}=s(g);let w=!!S,E=r(w?_.substring(0,S):_);if(!E){if(!w){d=g+(d.length>0?" "+d:d);continue}if(E=r(_),!E){d=g+(d.length>0?" "+d:d);continue}w=!1}const j=E3(b).join(":"),R=y?j+I0:j,z=R+E;if(f.includes(z))continue;f.push(z);const L=o(E,w);for(let D=0;D0?" "+d:d)}return d};function A3(){let a=0,l,s,r="";for(;a{if(typeof a=="string")return a;let l,s="";for(let r=0;ry(b),a());return s=j3(g),r=s.cache.get,o=s.cache.set,f=d,d(p)}function d(p){const g=r(p);if(g)return g;const b=M3(p,s);return o(p,b),b}return function(){return f(A3.apply(null,arguments))}}const Ke=a=>{const l=s=>s[a]||[];return l.isThemeGetter=!0,l},tv=/^\[(?:([a-z-]+):)?(.+)\]$/i,R3=/^\d+\/\d+$/,z3=new Set(["px","full","screen"]),N3=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,D3=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,O3=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/,k3=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,U3=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,Yn=a=>gi(a)||z3.has(a)||R3.test(a),Ea=a=>ki(a,"length",Y3),gi=a=>!!a&&!Number.isNaN(Number(a)),Uf=a=>ki(a,"number",gi),Hs=a=>!!a&&Number.isInteger(Number(a)),L3=a=>a.endsWith("%")&&gi(a.slice(0,-1)),ve=a=>tv.test(a),ja=a=>N3.test(a),B3=new Set(["length","size","percentage"]),H3=a=>ki(a,B3,nv),q3=a=>ki(a,"position",nv),G3=new Set(["image","url"]),Q3=a=>ki(a,G3,X3),V3=a=>ki(a,"",K3),qs=()=>!0,ki=(a,l,s)=>{const r=tv.exec(a);return r?r[1]?typeof l=="string"?r[1]===l:l.has(r[1]):s(r[2]):!1},Y3=a=>D3.test(a)&&!O3.test(a),nv=()=>!1,K3=a=>k3.test(a),X3=a=>U3.test(a),Z3=()=>{const a=Ke("colors"),l=Ke("spacing"),s=Ke("blur"),r=Ke("brightness"),o=Ke("borderColor"),f=Ke("borderRadius"),h=Ke("borderSpacing"),d=Ke("borderWidth"),p=Ke("contrast"),g=Ke("grayscale"),b=Ke("hueRotate"),y=Ke("invert"),_=Ke("gap"),S=Ke("gradientColorStops"),w=Ke("gradientColorStopPositions"),E=Ke("inset"),j=Ke("margin"),R=Ke("opacity"),z=Ke("padding"),L=Ke("saturate"),D=Ke("scale"),Z=Ke("sepia"),G=Ke("skew"),K=Ke("space"),J=Ke("translate"),Q=()=>["auto","contain","none"],P=()=>["auto","hidden","clip","visible","scroll"],ee=()=>["auto",ve,l],I=()=>[ve,l],fe=()=>["",Yn,Ea],F=()=>["auto",gi,ve],ae=()=>["bottom","center","left","left-bottom","left-top","right","right-bottom","right-top","top"],B=()=>["solid","dashed","dotted","double","none"],W=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],te=()=>["start","end","center","between","around","evenly","stretch"],be=()=>["","0",ve],me=()=>["auto","avoid","all","avoid-page","page","left","right","column"],M=()=>[gi,ve];return{cacheSize:500,separator:":",theme:{colors:[qs],spacing:[Yn,Ea],blur:["none","",ja,ve],brightness:M(),borderColor:[a],borderRadius:["none","","full",ja,ve],borderSpacing:I(),borderWidth:fe(),contrast:M(),grayscale:be(),hueRotate:M(),invert:be(),gap:I(),gradientColorStops:[a],gradientColorStopPositions:[L3,Ea],inset:ee(),margin:ee(),opacity:M(),padding:I(),saturate:M(),scale:M(),sepia:be(),skew:M(),space:I(),translate:I()},classGroups:{aspect:[{aspect:["auto","square","video",ve]}],container:["container"],columns:[{columns:[ja]}],"break-after":[{"break-after":me()}],"break-before":[{"break-before":me()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:[...ae(),ve]}],overflow:[{overflow:P()}],"overflow-x":[{"overflow-x":P()}],"overflow-y":[{"overflow-y":P()}],overscroll:[{overscroll:Q()}],"overscroll-x":[{"overscroll-x":Q()}],"overscroll-y":[{"overscroll-y":Q()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:[E]}],"inset-x":[{"inset-x":[E]}],"inset-y":[{"inset-y":[E]}],start:[{start:[E]}],end:[{end:[E]}],top:[{top:[E]}],right:[{right:[E]}],bottom:[{bottom:[E]}],left:[{left:[E]}],visibility:["visible","invisible","collapse"],z:[{z:["auto",Hs,ve]}],basis:[{basis:ee()}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["wrap","wrap-reverse","nowrap"]}],flex:[{flex:["1","auto","initial","none",ve]}],grow:[{grow:be()}],shrink:[{shrink:be()}],order:[{order:["first","last","none",Hs,ve]}],"grid-cols":[{"grid-cols":[qs]}],"col-start-end":[{col:["auto",{span:["full",Hs,ve]},ve]}],"col-start":[{"col-start":F()}],"col-end":[{"col-end":F()}],"grid-rows":[{"grid-rows":[qs]}],"row-start-end":[{row:["auto",{span:[Hs,ve]},ve]}],"row-start":[{"row-start":F()}],"row-end":[{"row-end":F()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":["auto","min","max","fr",ve]}],"auto-rows":[{"auto-rows":["auto","min","max","fr",ve]}],gap:[{gap:[_]}],"gap-x":[{"gap-x":[_]}],"gap-y":[{"gap-y":[_]}],"justify-content":[{justify:["normal",...te()]}],"justify-items":[{"justify-items":["start","end","center","stretch"]}],"justify-self":[{"justify-self":["auto","start","end","center","stretch"]}],"align-content":[{content:["normal",...te(),"baseline"]}],"align-items":[{items:["start","end","center","baseline","stretch"]}],"align-self":[{self:["auto","start","end","center","stretch","baseline"]}],"place-content":[{"place-content":[...te(),"baseline"]}],"place-items":[{"place-items":["start","end","center","baseline","stretch"]}],"place-self":[{"place-self":["auto","start","end","center","stretch"]}],p:[{p:[z]}],px:[{px:[z]}],py:[{py:[z]}],ps:[{ps:[z]}],pe:[{pe:[z]}],pt:[{pt:[z]}],pr:[{pr:[z]}],pb:[{pb:[z]}],pl:[{pl:[z]}],m:[{m:[j]}],mx:[{mx:[j]}],my:[{my:[j]}],ms:[{ms:[j]}],me:[{me:[j]}],mt:[{mt:[j]}],mr:[{mr:[j]}],mb:[{mb:[j]}],ml:[{ml:[j]}],"space-x":[{"space-x":[K]}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":[K]}],"space-y-reverse":["space-y-reverse"],w:[{w:["auto","min","max","fit","svw","lvw","dvw",ve,l]}],"min-w":[{"min-w":[ve,l,"min","max","fit"]}],"max-w":[{"max-w":[ve,l,"none","full","min","max","fit","prose",{screen:[ja]},ja]}],h:[{h:[ve,l,"auto","min","max","fit","svh","lvh","dvh"]}],"min-h":[{"min-h":[ve,l,"min","max","fit","svh","lvh","dvh"]}],"max-h":[{"max-h":[ve,l,"min","max","fit","svh","lvh","dvh"]}],size:[{size:[ve,l,"auto","min","max","fit"]}],"font-size":[{text:["base",ja,Ea]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:["thin","extralight","light","normal","medium","semibold","bold","extrabold","black",Uf]}],"font-family":[{font:[qs]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractions"],tracking:[{tracking:["tighter","tight","normal","wide","wider","widest",ve]}],"line-clamp":[{"line-clamp":["none",gi,Uf]}],leading:[{leading:["none","tight","snug","normal","relaxed","loose",Yn,ve]}],"list-image":[{"list-image":["none",ve]}],"list-style-type":[{list:["none","disc","decimal",ve]}],"list-style-position":[{list:["inside","outside"]}],"placeholder-color":[{placeholder:[a]}],"placeholder-opacity":[{"placeholder-opacity":[R]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"text-color":[{text:[a]}],"text-opacity":[{"text-opacity":[R]}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...B(),"wavy"]}],"text-decoration-thickness":[{decoration:["auto","from-font",Yn,Ea]}],"underline-offset":[{"underline-offset":["auto",Yn,ve]}],"text-decoration-color":[{decoration:[a]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:I()}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",ve]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",ve]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-opacity":[{"bg-opacity":[R]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:[...ae(),q3]}],"bg-repeat":[{bg:["no-repeat",{repeat:["","x","y","round","space"]}]}],"bg-size":[{bg:["auto","cover","contain",H3]}],"bg-image":[{bg:["none",{"gradient-to":["t","tr","r","br","b","bl","l","tl"]},Q3]}],"bg-color":[{bg:[a]}],"gradient-from-pos":[{from:[w]}],"gradient-via-pos":[{via:[w]}],"gradient-to-pos":[{to:[w]}],"gradient-from":[{from:[S]}],"gradient-via":[{via:[S]}],"gradient-to":[{to:[S]}],rounded:[{rounded:[f]}],"rounded-s":[{"rounded-s":[f]}],"rounded-e":[{"rounded-e":[f]}],"rounded-t":[{"rounded-t":[f]}],"rounded-r":[{"rounded-r":[f]}],"rounded-b":[{"rounded-b":[f]}],"rounded-l":[{"rounded-l":[f]}],"rounded-ss":[{"rounded-ss":[f]}],"rounded-se":[{"rounded-se":[f]}],"rounded-ee":[{"rounded-ee":[f]}],"rounded-es":[{"rounded-es":[f]}],"rounded-tl":[{"rounded-tl":[f]}],"rounded-tr":[{"rounded-tr":[f]}],"rounded-br":[{"rounded-br":[f]}],"rounded-bl":[{"rounded-bl":[f]}],"border-w":[{border:[d]}],"border-w-x":[{"border-x":[d]}],"border-w-y":[{"border-y":[d]}],"border-w-s":[{"border-s":[d]}],"border-w-e":[{"border-e":[d]}],"border-w-t":[{"border-t":[d]}],"border-w-r":[{"border-r":[d]}],"border-w-b":[{"border-b":[d]}],"border-w-l":[{"border-l":[d]}],"border-opacity":[{"border-opacity":[R]}],"border-style":[{border:[...B(),"hidden"]}],"divide-x":[{"divide-x":[d]}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":[d]}],"divide-y-reverse":["divide-y-reverse"],"divide-opacity":[{"divide-opacity":[R]}],"divide-style":[{divide:B()}],"border-color":[{border:[o]}],"border-color-x":[{"border-x":[o]}],"border-color-y":[{"border-y":[o]}],"border-color-s":[{"border-s":[o]}],"border-color-e":[{"border-e":[o]}],"border-color-t":[{"border-t":[o]}],"border-color-r":[{"border-r":[o]}],"border-color-b":[{"border-b":[o]}],"border-color-l":[{"border-l":[o]}],"divide-color":[{divide:[o]}],"outline-style":[{outline:["",...B()]}],"outline-offset":[{"outline-offset":[Yn,ve]}],"outline-w":[{outline:[Yn,Ea]}],"outline-color":[{outline:[a]}],"ring-w":[{ring:fe()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:[a]}],"ring-opacity":[{"ring-opacity":[R]}],"ring-offset-w":[{"ring-offset":[Yn,Ea]}],"ring-offset-color":[{"ring-offset":[a]}],shadow:[{shadow:["","inner","none",ja,V3]}],"shadow-color":[{shadow:[qs]}],opacity:[{opacity:[R]}],"mix-blend":[{"mix-blend":[...W(),"plus-lighter","plus-darker"]}],"bg-blend":[{"bg-blend":W()}],filter:[{filter:["","none"]}],blur:[{blur:[s]}],brightness:[{brightness:[r]}],contrast:[{contrast:[p]}],"drop-shadow":[{"drop-shadow":["","none",ja,ve]}],grayscale:[{grayscale:[g]}],"hue-rotate":[{"hue-rotate":[b]}],invert:[{invert:[y]}],saturate:[{saturate:[L]}],sepia:[{sepia:[Z]}],"backdrop-filter":[{"backdrop-filter":["","none"]}],"backdrop-blur":[{"backdrop-blur":[s]}],"backdrop-brightness":[{"backdrop-brightness":[r]}],"backdrop-contrast":[{"backdrop-contrast":[p]}],"backdrop-grayscale":[{"backdrop-grayscale":[g]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[b]}],"backdrop-invert":[{"backdrop-invert":[y]}],"backdrop-opacity":[{"backdrop-opacity":[R]}],"backdrop-saturate":[{"backdrop-saturate":[L]}],"backdrop-sepia":[{"backdrop-sepia":[Z]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":[h]}],"border-spacing-x":[{"border-spacing-x":[h]}],"border-spacing-y":[{"border-spacing-y":[h]}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["none","all","","colors","opacity","shadow","transform",ve]}],duration:[{duration:M()}],ease:[{ease:["linear","in","out","in-out",ve]}],delay:[{delay:M()}],animate:[{animate:["none","spin","ping","pulse","bounce",ve]}],transform:[{transform:["","gpu","none"]}],scale:[{scale:[D]}],"scale-x":[{"scale-x":[D]}],"scale-y":[{"scale-y":[D]}],rotate:[{rotate:[Hs,ve]}],"translate-x":[{"translate-x":[J]}],"translate-y":[{"translate-y":[J]}],"skew-x":[{"skew-x":[G]}],"skew-y":[{"skew-y":[G]}],"transform-origin":[{origin:["center","top","top-right","right","bottom-right","bottom","bottom-left","left","top-left",ve]}],accent:[{accent:["auto",a]}],appearance:[{appearance:["none","auto"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",ve]}],"caret-color":[{caret:[a]}],"pointer-events":[{"pointer-events":["none","auto"]}],resize:[{resize:["none","y","x",""]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scroll-m":[{"scroll-m":I()}],"scroll-mx":[{"scroll-mx":I()}],"scroll-my":[{"scroll-my":I()}],"scroll-ms":[{"scroll-ms":I()}],"scroll-me":[{"scroll-me":I()}],"scroll-mt":[{"scroll-mt":I()}],"scroll-mr":[{"scroll-mr":I()}],"scroll-mb":[{"scroll-mb":I()}],"scroll-ml":[{"scroll-ml":I()}],"scroll-p":[{"scroll-p":I()}],"scroll-px":[{"scroll-px":I()}],"scroll-py":[{"scroll-py":I()}],"scroll-ps":[{"scroll-ps":I()}],"scroll-pe":[{"scroll-pe":I()}],"scroll-pt":[{"scroll-pt":I()}],"scroll-pr":[{"scroll-pr":I()}],"scroll-pb":[{"scroll-pb":I()}],"scroll-pl":[{"scroll-pl":I()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",ve]}],fill:[{fill:[a,"none"]}],"stroke-w":[{stroke:[Yn,Ea,Uf]}],stroke:[{stroke:[a,"none"]}],sr:["sr-only","not-sr-only"],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-s","border-w-e","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-s","border-color-e","border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]}}},J3=C3(Z3);function qe(...a){return J3(p3(a))}function h5(a){return a?a.replace(/127\.0\.0\.1|localhost/g,"192.168.178.151"):""}function F3(){const a=o3(),l=Yt(s=>s.expertenmodus);return v.jsxs("div",{className:"flex items-center rounded-md border border-border/40 bg-background/40 p-0.5",role:"group","aria-label":"Ansichtsmodus",title:"Einfach zeigt nur das Wichtigste. Experte zeigt alle technischen Details.",children:[v.jsxs("button",{onClick:()=>l(!1),"aria-pressed":!a,className:qe("flex items-center gap-1 rounded px-2 py-1 text-xs font-semibold transition-all cursor-pointer",a?"text-muted-foreground hover:text-foreground":"bg-primary/15 text-primary shadow-sm"),children:[v.jsx(P2,{className:"h-3.5 w-3.5"})," Einfach"]}),v.jsxs("button",{onClick:()=>l(!0),"aria-pressed":a,className:qe("flex items-center gap-1 rounded px-2 py-1 text-xs font-semibold transition-all cursor-pointer",a?"bg-primary/15 text-primary shadow-sm":"text-muted-foreground hover:text-foreground"),children:[v.jsx(W2,{className:"h-3.5 w-3.5"})," Experte"]})]})}let pi=[],yi=[];const od=new Set,av=()=>od.forEach(a=>a());function Nd(a){return od.add(a),()=>{od.delete(a)}}function lv(a){pi=[...pi,a].slice(-120),av()}function iv(a){yi=[...yi,a].slice(-120),av()}let sv=null;const rv=()=>$.useSyncExternalStore(Nd,()=>pi),uv=()=>$.useSyncExternalStore(Nd,()=>yi),cv=()=>$.useSyncExternalStore(Nd,()=>sv);let Gs=null;function $3(a){const l=Date.now();if(sv=a,lv({t:l,cpu:a.cpu??0,ram:a.ram??0,gpu:a.gpu,disk:a.disk}),Gs){const s=Math.max((l-Gs.t)/1e3,.001);iv({t:l,prompt:Math.max(0,(a.tok_p-Gs.p)/s),completion:Math.max(0,(a.tok_c-Gs.c)/s)})}Gs={p:a.tok_p,c:a.tok_c,t:l}}function W3(){const{data:a,dataUpdatedAt:l}=fr(),{data:s,dataUpdatedAt:r}=Od(),o=$.useRef(null);$.useEffect(()=>{var h,d,p,g;if(!a)return;const f=Date.now();pi.length&&f-pi[pi.length-1].t<1e3||lv({t:f,cpu:((h=a.cpu)==null?void 0:h.percent)??0,ram:((d=a.ram)==null?void 0:d.percent)??0,gpu:((p=a.gpu)==null?void 0:p.busy_percent)??null,disk:((g=a.disk)==null?void 0:g.percent)??null})},[l]),$.useEffect(()=>{if(!s)return;const f=Date.now(),h=s.prompt_tokens,d=s.completion_tokens;if(o.current){const p=Math.max((f-o.current.t)/1e3,.001);(!yi.length||f-yi[yi.length-1].t>=1e3)&&iv({t:f,prompt:Math.max(0,(h-o.current.p)/p),completion:Math.max(0,(d-o.current.c)/p)})}o.current={p:h,c:d,t:f}},[r])}let Ys=!1;const ov=()=>Ys;function P3(){const a=yd();$.useEffect(()=>{const l=new EventSource("/api/stream");let s=!1;return l.onopen=()=>{Ys=!0,kf("live"),s&&Oy("erfolg","Verbindung zur Zentrale ist wieder da."),s=!0,a.invalidateQueries()},l.onerror=()=>{Ys&&(Ys=!1,kf("nachlauf"),Oy("warnung","Verbindung zur Zentrale verloren — die Anzeigen laufen im Nachlauf."),a.invalidateQueries())},l.addEventListener("invalidate",r=>{var o;try{const f=((o=JSON.parse(r.data))==null?void 0:o.keys)??[];for(const h of f)a.invalidateQueries({queryKey:[h]});g3()}catch{}}),l.addEventListener("metrik",r=>{try{$3(JSON.parse(r.data))}catch{}}),()=>{Ys=!1,kf("getrennt"),l.close()}},[a])}class I3 extends Error{constructor(s,r,o){super(o||`${s} ${r}`);Ru(this,"status");Ru(this,"detail");this.name="ApiError",this.status=s,this.detail=o}}async function e_(a){try{const l=await a.text();if(!l)return null;try{const s=JSON.parse(l),r=(s==null?void 0:s.detail)??(s==null?void 0:s.err)??(s==null?void 0:s.message);return typeof r=="string"&&r.trim()?r.trim():Array.isArray(r)&&r.length&&r.map(o=>o==null?void 0:o.msg).filter(Boolean).join("; ")||null}catch{return l.slice(0,200).split(` +`)[0].trim()||null}}catch{return null}}async function ke(a,l){const s=await fetch(a,{...l,headers:{"Content-Type":"application/json",...l==null?void 0:l.headers}});if(!s.ok)throw new I3(s.status,s.statusText,await e_(s));return s.json()}const m5=(a,l,s=!1,r=!0)=>ke("/api/groups",{method:"PUT",body:JSON.stringify({group:a,members:l,swap:s,persist:r})}),g5=a=>ke("/api/routing/policy",{method:"PUT",body:JSON.stringify(a)}),Ge={health:["health"],systemStatus:["system-status"],services:["services"],models:["models"],groups:["groups"],routing:["routing"],routingPolicy:["routing-policy"],jobs:["jobs"],tokenStats:["token-stats"],agentStatus:["agent-status"],agentAktivitaet:["agent-aktivitaet"],hermesBrain:["hermes-brain"],updates:["updates"],discover:["discover"],drafts:a=>["drafts",a??""],connect:a=>["connect",a??""],connectHealth:["connect-health"],memoryGraph:["memory-graph"],voiceTrace:["voice-trace"],ideen:["ideen"],chronik:["chronik"],wissen:["wissen"],zeitmaschine:["zeitmaschine"],reminders:["reminders"]},St={graph:3e3,schnell:8e3,normal:1e4,gemuetlich:3e4,traege:6e4},or=a=>()=>ov()?a*5:a,fv=a=>()=>ov()?6e4:a,t_=(a=St.gemuetlich)=>Xe({queryKey:Ge.ideen,queryFn:()=>ke("/api/ideen"),refetchInterval:or(a)}),p5=(a,l=!1)=>Xe({queryKey:["ideen-log",a],queryFn:()=>ke(`/api/ideen/${a}/log`),enabled:l,refetchInterval:4e3,staleTime:0}),y5=(a=150,l=St.gemuetlich)=>Xe({queryKey:[...Ge.chronik,a],queryFn:()=>ke(`/api/chronik?limit=${a}`),refetchInterval:or(l),select:s=>s.items??[]}),v5=()=>Xe({queryKey:Ge.wissen,queryFn:()=>ke("/api/wissen")}),b5=(a=St.traege,l=!0)=>Xe({queryKey:Ge.zeitmaschine,queryFn:()=>ke("/api/zeitmaschine"),refetchInterval:a,enabled:l}),n_=(a=12,l=St.schnell)=>Xe({queryKey:Ge.voiceTrace,queryFn:()=>ke(`/api/voice/trace?limit=${a}`),refetchInterval:l,select:s=>s.turns??[]}),x5=(a=!0)=>Xe({queryKey:Ge.memoryGraph,queryFn:()=>ke("/api/wissen/graph"),enabled:a,staleTime:60*1e3}),Dd=()=>Xe({queryKey:Ge.health,queryFn:()=>ke("/api/health"),refetchInterval:St.normal}),fr=(a=St.graph)=>Xe({queryKey:Ge.systemStatus,queryFn:()=>ke("/api/system/status"),refetchInterval:fv(a)}),dv=(a,l=!0)=>Xe({queryKey:["metrics-history",a],queryFn:()=>ke(`/api/system/history?minutes=${a}`),enabled:l,refetchInterval:6e4}),hv=(a=St.normal)=>Xe({queryKey:Ge.services,queryFn:()=>ke("/api/system/services"),refetchInterval:a}),mv=(a=St.schnell)=>Xe({queryKey:Ge.models,queryFn:()=>ke("/api/models"),refetchInterval:or(a)}),S5=(a=St.normal)=>Xe({queryKey:Ge.groups,queryFn:()=>ke("/api/groups"),refetchInterval:a}),a_=(a=St.normal)=>Xe({queryKey:Ge.routing,queryFn:()=>ke("/api/routing"),refetchInterval:a}),_5=()=>Xe({queryKey:Ge.routingPolicy,queryFn:()=>ke("/api/routing/policy")}),w5=(a=3e3,l=!0)=>Xe({queryKey:Ge.jobs,queryFn:()=>ke("/api/jobs"),refetchInterval:or(a),enabled:l,select:s=>s.jobs??[]}),Od=(a=St.graph)=>Xe({queryKey:Ge.tokenStats,queryFn:()=>ke("/api/system/token-stats"),refetchInterval:fv(a)}),l_=(a=St.normal)=>Xe({queryKey:Ge.agentStatus,queryFn:()=>ke("/api/agent/status"),refetchInterval:a}),E5=(a=St.gemuetlich)=>Xe({queryKey:Ge.agentAktivitaet,queryFn:()=>ke("/api/agent/aktivitaet?limit=80"),refetchInterval:or(a)}),j5=(a=St.traege)=>Xe({queryKey:Ge.hermesBrain,queryFn:()=>ke("/api/agent/brain"),refetchInterval:a}),i_=(a=St.traege)=>Xe({queryKey:Ge.updates,queryFn:()=>ke("/api/maintenance/updates"),refetchInterval:a}),T5=()=>Xe({queryKey:Ge.discover,queryFn:()=>ke("/api/discover")}),M5=a=>Xe({queryKey:Ge.drafts(a),queryFn:()=>ke(`/api/models/drafts?target=${encodeURIComponent(a??"")}`),enabled:!!a}),A5=a=>Xe({queryKey:Ge.connect(a),queryFn:()=>ke(a?`/api/connect?${a}`:"/api/connect")}),s_=()=>Xe({queryKey:Ge.connectHealth,queryFn:()=>ke("/api/connect/health"),refetchInterval:15e3});function C5(a,...l){for(const s of l)a.invalidateQueries({queryKey:s})}function xn(a){return(a/1024**3).toFixed(1)}function R5(a){return a?a>1024**3?`${(a/1024**3).toFixed(1)} GB`:`${(a/1024**2).toFixed(0)} MB`:""}function z5(a){if(!a)return"—";const l=a/1024**3;return l>=1?`${l.toFixed(1)} GB`:`${(a/1024**2).toFixed(0)} MB`}function N5(a){if(!a)return"";const l=Math.floor(a/60);return l>0?`${l} min`:`${a} s`}function D5(a){return a?`${Math.round(a/1024)}k`:"—"}function O5(a){return a?new Date(a*1e3).toLocaleString("de-DE",{day:"2-digit",month:"2-digit",hour:"2-digit",minute:"2-digit"}):"—"}function r_(a){if(a==null||a<0)return null;const l=Math.floor(a/86400),s=Math.floor(a%86400/3600),r=Math.floor(a%3600/60);return l>0?`${l} T ${s} Std`:s>0?`${s} Std ${r} min`:`${r} min`}function Ly({werte:a,farbe:l,breite:s=56,hoehe:r=14}){if(a.length<2)return v.jsx("div",{style:{width:s,height:r},"aria-hidden":"true"});const o=Math.max(...a,1),f=s/(a.length-1),h=a.map((d,p)=>`${p===0?"M":"L"}${(p*f).toFixed(1)},${(r-d/o*r).toFixed(1)}`).join(" ");return v.jsx("svg",{width:s,height:r,viewBox:`0 0 ${s} ${r}`,"aria-hidden":"true",className:"shrink-0",children:v.jsx("path",{d:h,fill:"none",stroke:l,strokeWidth:"1.25",strokeLinejoin:"round",strokeLinecap:"round"})})}function ci({children:a,titel:l,className:s}){return v.jsx("div",{title:l,className:qe("flex shrink-0 items-center gap-1.5 border-r border-border/30 px-3",s),children:a})}function u_(){var K,J,Q,P,ee,I,fe,F,ae,B;const{data:a,isError:l}=Dd(),{data:s}=fr(),{data:r}=a_(),{data:o}=Od(),f=rv(),h=uv(),d=h3(),p=!l&&!!(a!=null&&a.engine_reachable),g=p&&(a!=null&&a.brain?a.brain.ready:!0),b=((K=a==null?void 0:a.brain)==null?void 0:K.role)??((Q=(J=r==null?void 0:r.lanes)==null?void 0:J[0])==null?void 0:Q.name)??null,y=cv(),_=(y==null?void 0:y.cpu)??((P=s==null?void 0:s.cpu)==null?void 0:P.percent)??0,S=(y==null?void 0:y.gpu)??((ee=s==null?void 0:s.gpu)==null?void 0:ee.busy_percent)??null,w=(y==null?void 0:y.ram)??((I=s==null?void 0:s.ram)==null?void 0:I.percent)??0,E=(y==null?void 0:y.ram_used)??((fe=s==null?void 0:s.ram)==null?void 0:fe.used),j=(y==null?void 0:y.ram_total)??((F=s==null?void 0:s.ram)==null?void 0:F.total),R=Math.max((y==null?void 0:y.temp_cpu)??((ae=s==null?void 0:s.temp)==null?void 0:ae.cpu)??0,(y==null?void 0:y.temp_gpu)??((B=s==null?void 0:s.temp)==null?void 0:B.gpu)??0),z=h.length?h[h.length-1].completion:0,L=r_((y==null?void 0:y.uptime_s)??(s==null?void 0:s.uptime_s)),D=l?"getrennt":d==="live"?"live":"nachlauf",G={live:{punkt:"bg-emerald-500",text:"Live",titel:"Ereignisstrom steht — Änderungen erscheinen sofort."},nachlauf:{punkt:"bg-amber-500",text:"Nachlauf",titel:"Kein Ereignisstrom — die Zahlen stimmen, sie kommen im Takt statt sofort."},getrennt:{punkt:"bg-red-500",text:"Getrennt",titel:"Die Zentrale antwortet nicht — die Zahlen sind veraltet."}}[D];return v.jsxs("footer",{className:"flex h-11 shrink-0 items-stretch overflow-x-auto border-t border-border/40 bg-card/40 font-mono text-[11px] backdrop-blur-sm scrollbar-thin","aria-label":"Zustand der Box",children:[v.jsxs(ac,{to:"/agent",className:"flex shrink-0 items-center gap-2.5 border-r border-border/30 px-3 transition-colors hover:bg-accent/50",children:[v.jsxs("span",{className:"flex items-center gap-1.5",title:p?"Motor (Engine) läuft":"Motor (Engine) läuft nicht",children:[v.jsx("span",{className:qe("h-2 w-2 rounded-full",p?"bg-emerald-500":"bg-red-500"),"aria-hidden":"true"}),v.jsx("span",{className:p?"text-muted-foreground":"font-semibold text-red-400",children:"Motor"})]}),v.jsxs("span",{className:"flex items-center gap-1.5",title:g?"Lucys Hirn ist bereit":"Lucys Hirn ist nicht bereit",children:[v.jsx("span",{className:qe("h-2 w-2 rounded-full",g?"bg-emerald-500":"bg-amber-500"),"aria-hidden":"true"}),v.jsx("span",{className:g?"text-muted-foreground":"font-semibold text-amber-400",children:"Hirn"})]})]}),v.jsxs(ci,{titel:"Aktive Rolle und aktueller Ausgabe-Durchsatz",children:[v.jsx("span",{className:"font-semibold text-primary",children:b??"—"}),v.jsx("span",{className:"tabular-nums text-muted-foreground",children:z>0?`${z.toFixed(0)} t/s`:"leerlauf"}),v.jsx(Ly,{werte:h.map(W=>W.completion),farbe:"hsl(172 72% 50%)"})]}),v.jsxs(ci,{titel:E!=null&&j!=null?`Geteilter Speicher (Unified Memory): ${xn(E)} von ${xn(j)} GB belegt`:"Speicher",children:[v.jsx("span",{className:"text-muted-foreground",children:"Speicher"}),v.jsx("div",{className:"h-2 w-24 overflow-hidden rounded-sm border border-border/50 bg-background/60","aria-hidden":"true",children:v.jsx("div",{className:qe("h-full transition-[width] duration-500",w>90?"bg-red-500":w>75?"bg-amber-500":"bg-primary"),style:{width:`${Math.min(100,w)}%`}})}),v.jsx("span",{className:"tabular-nums text-foreground",children:E!=null&&j!=null?`${xn(E)}/${xn(j)} GB`:"—"})]}),v.jsxs(ci,{titel:"Auslastung von Prozessor und Grafikeinheit",children:[v.jsx("span",{className:"text-muted-foreground",children:"CPU"}),v.jsxs("span",{className:"tabular-nums text-foreground",children:[Math.round(_)," %"]}),v.jsx(Ly,{werte:f.map(W=>W.cpu),farbe:"hsl(199 89% 58%)"}),S!=null&&v.jsxs(v.Fragment,{children:[v.jsx("span",{className:"ml-1 text-muted-foreground",children:"GPU"}),v.jsxs("span",{className:"tabular-nums text-foreground",children:[Math.round(S)," %"]})]})]}),R>0&&v.jsxs(ci,{titel:"Höchste gemessene Temperatur (Prozessor oder Grafikeinheit)",children:[v.jsx("span",{className:"text-muted-foreground",children:"Temp"}),v.jsxs("span",{className:qe("tabular-nums",R>=85?"font-semibold text-amber-400":"text-foreground"),children:[Math.round(R)," °C"]})]}),L&&v.jsxs(ci,{titel:"Betriebszeit seit dem letzten Neustart der Box",children:[v.jsx("span",{className:"text-muted-foreground",children:"Läuft seit"}),v.jsx("span",{className:"tabular-nums text-foreground",children:L})]}),o&&v.jsx(ci,{titel:"Seit Beginn verarbeitete Token und die damit gesparten Cloud-Kosten",children:v.jsxs("span",{className:"tabular-nums text-muted-foreground",children:[o.total_tokens.toLocaleString("de-DE")," Token · ",o.saved_eur.toFixed(0)," € gespart"]})}),v.jsxs("div",{className:"ml-auto flex shrink-0 items-center gap-1.5 px-3",title:G.titel,children:[v.jsx("span",{className:qe("h-2 w-2 rounded-full",G.punkt,D==="live"&&"animate-pulse"),"aria-hidden":"true"}),v.jsx("span",{className:"text-muted-foreground",children:G.text})]})]})}const c_=6e3,o_={info:{rand:"border-sky-500/40",farbe:"text-sky-300",Icon:K2},erfolg:{rand:"border-emerald-500/40",farbe:"text-emerald-300",Icon:U2},warnung:{rand:"border-amber-500/40",farbe:"text-amber-300",Icon:Pu},fehler:{rand:"border-red-500/40",farbe:"text-red-300",Icon:L2}};function f_(){const a=m3(),l=Yt(s=>s.meldungWeg);return $.useEffect(()=>{const s=a.filter(r=>r.art!=="fehler").map(r=>window.setTimeout(()=>l(r.id),Math.max(1e3,c_-(Date.now()-r.seit))));return()=>s.forEach(window.clearTimeout)},[a,l]),v.jsx("div",{className:"pointer-events-none fixed bottom-4 right-4 z-[70] flex w-full max-w-sm flex-col gap-2",role:"status","aria-live":"polite","aria-atomic":"false",children:a.map(s=>{const{rand:r,farbe:o,Icon:f}=o_[s.art];return v.jsxs("div",{className:qe("pointer-events-auto flex items-start gap-2.5 rounded-lg border bg-card/95 px-3.5 py-2.5 shadow-xl backdrop-blur",r),"aria-live":s.art==="fehler"?"assertive":"polite",children:[v.jsx(f,{className:qe("mt-0.5 h-4 w-4 shrink-0",o),"aria-hidden":"true"}),v.jsx("p",{className:"flex-1 text-xs leading-relaxed text-foreground",children:s.text}),v.jsx("button",{onClick:()=>l(s.id),"aria-label":"Meldung schließen",className:"shrink-0 cursor-pointer rounded p-0.5 text-muted-foreground transition-colors hover:text-foreground",children:v.jsx(Rd,{className:"h-3.5 w-3.5","aria-hidden":"true"})})]},s.id)})})}const d_=$.lazy(()=>nn(()=>import("./SystemDrawer-CpUj62ev.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9])).then(a=>({default:a.SystemDrawer}))),h_=$.lazy(()=>nn(()=>import("./CommandPalette-CUaikJDv.js"),__vite__mapDeps([10,11,8,1,3,2])).then(a=>({default:a.CommandPalette})));function m_(){return v.jsx("div",{className:"flex h-64 items-center justify-center text-muted-foreground",children:v.jsx(Md,{className:"h-5 w-5 animate-spin","aria-label":"Lädt …"})})}const g_=/Mac|iPhone|iPad/.test(navigator.platform);function p_(){W3(),P3();const a=cr(),l=zy({select:E=>E.location.pathname}),s=zy({select:E=>E.location.search.system}),r=f3(),o=Yt(E=>E.schieneUmschalten),f=d3(),h=Yt(E=>E.palette),[d,p]=$.useState(!1),[g,b]=$.useState(!1);$.useEffect(()=>{f&&b(!0)},[f]),$.useEffect(()=>{const E=j=>{(j.metaKey||j.ctrlKey)&&j.key.toLowerCase()==="k"&&(j.preventDefault(),h(!Yt.getState().ui.paletteOffen))};return document.addEventListener("keydown",E),()=>document.removeEventListener("keydown",E)},[h]);const y=$.useCallback(E=>{a({to:".",search:j=>({...j,system:E}),replace:!0})},[a]),{data:_,isError:S}=Dd();$.useEffect(()=>{document.documentElement.classList.add("dark")},[]),$.useEffect(()=>{p(!1)},[l]);const w=$0(l);return v.jsxs("div",{className:"flex h-full relative",children:[v.jsx("div",{className:"fixed inset-0 -z-50 pointer-events-none",style:{backgroundColor:"hsl(224,30%,6%)",backgroundImage:["radial-gradient(45% 40% at 12% 8%, hsl(172 72% 50% / 0.10), transparent 70%)","radial-gradient(50% 45% at 88% 92%, hsl(270 70% 60% / 0.10), transparent 70%)","radial-gradient(40% 35% at 75% 30%, hsl(239 70% 62% / 0.07), transparent 70%)"].join(", ")}}),v.jsx(f_,{}),v.jsxs($.Suspense,{fallback:null,children:[g&&v.jsx(h_,{}),s&&v.jsx(d_,{open:!0,onClose:()=>y(void 0),defaultTab:s==="logs"?"logs":"maintenance"})]}),v.jsx("aside",{className:qe("hidden md:flex shrink-0 flex-col border-r border-border/40 bg-card/45 backdrop-blur-md transition-all duration-300 ease-in-out",r?"w-16":"w-60"),children:v.jsx(By,{collapsed:r,onToggleCollapse:o,pfad:l,health:_,backendDown:S})}),v.jsxs("div",{className:qe("md:hidden fixed inset-0 z-50 transition-opacity duration-200",d?"opacity-100":"pointer-events-none opacity-0"),"aria-hidden":!d,children:[v.jsx("div",{className:"absolute inset-0 bg-black/60",onClick:()=>p(!1)}),v.jsx("aside",{className:qe("absolute inset-y-0 left-0 flex w-72 max-w-[85vw] flex-col border-r border-border/40 bg-[hsl(224,28%,8%)] transition-transform duration-300 ease-in-out",d?"translate-x-0":"-translate-x-full"),children:v.jsx(By,{collapsed:!1,onClose:()=>p(!1),pfad:l,health:_,backendDown:S})})]}),v.jsxs("div",{className:"flex min-w-0 flex-1 flex-col",children:[v.jsxs("header",{className:"flex h-14 shrink-0 items-center justify-between gap-3 border-b border-border/40 px-4 md:px-6 bg-card/20 backdrop-blur-sm",children:[v.jsxs("div",{className:"flex min-w-0 items-center gap-3",children:[v.jsx("button",{onClick:()=>p(!0),className:"md:hidden p-1.5 -ml-1 rounded-md hover:bg-accent text-muted-foreground transition-colors cursor-pointer","aria-label":"Navigation öffnen",children:v.jsx(J2,{className:"h-5 w-5","aria-hidden":"true"})}),v.jsx("div",{className:"truncate text-xs font-medium text-muted-foreground tracking-wide uppercase font-sans",children:w==null?void 0:w.hint})]}),v.jsxs("div",{className:"flex shrink-0 items-center gap-2",children:[v.jsx(F3,{}),v.jsx("a",{href:"https://git.tobisniceshomelab.ddnsfree.com/Hitonabi/mission-control-v2/src/branch/main/docs/BEDIENUNG.md",target:"_blank",rel:"noopener",className:"hidden sm:flex h-8 items-center rounded-md border border-border/40 bg-background/40 px-2.5 text-xs text-muted-foreground hover:bg-accent hover:text-accent-foreground transition-all cursor-pointer font-semibold",title:"Bedien-Anleitung",children:"Hilfe"}),v.jsxs("button",{onClick:()=>h(!0),className:"flex items-center gap-2 rounded-md border border-border/40 bg-background/40 px-2.5 py-1.5 text-xs text-muted-foreground hover:bg-accent hover:text-accent-foreground transition-all cursor-pointer",children:[v.jsx(B2,{className:"h-3.5 w-3.5"}),v.jsx("span",{className:"hidden sm:inline",children:"Suchen"}),v.jsx("kbd",{className:"hidden sm:inline rounded bg-muted px-1.5 py-0.5 font-mono text-[9px]",children:g_?"⌘K":"Strg+K"})]})]})]}),v.jsx("main",{className:"flex-1 overflow-y-auto scrollbar-thin",children:v.jsx("div",{className:"mx-auto w-full max-w-[1600px] p-4 md:p-6",children:v.jsx($.Suspense,{fallback:v.jsx(m_,{}),children:v.jsx(V0,{})})})}),v.jsx(u_,{})]})]})}function By({collapsed:a,onToggleCollapse:l,onClose:s,pfad:r,health:o,backendDown:f}){var p,g,b,y,_;const h=$0(r),{data:d}=fr();return v.jsxs(v.Fragment,{children:[v.jsxs("div",{className:qe("flex items-center py-4 border-b border-border/40 shrink-0",a?"flex-col gap-3 px-2":"justify-between px-5"),children:[v.jsxs("div",{className:"flex items-center gap-2 overflow-hidden",children:[v.jsx("div",{className:"h-7 w-7 rounded-lg bg-primary shadow-md shadow-primary/20 shrink-0"}),!a&&v.jsxs("div",{className:"leading-tight",children:[v.jsx("div",{className:"text-sm font-semibold tracking-wide font-space",children:"Mission Control"}),v.jsx("div",{className:"text-xs text-muted-foreground",children:"2.0"})]})]}),l&&v.jsx("button",{onClick:l,className:"p-1 rounded-md hover:bg-accent text-muted-foreground transition-colors cursor-pointer","aria-label":a?"Seitenleiste ausklappen":"Seitenleiste einklappen",title:a?"Maximieren":"Minimieren",children:a?v.jsx(Wu,{className:"h-4 w-4","aria-hidden":"true"}):v.jsx(k2,{className:"h-4 w-4","aria-hidden":"true"})}),s&&v.jsx("button",{onClick:s,className:"p-1 rounded-md hover:bg-accent text-muted-foreground transition-colors cursor-pointer","aria-label":"Navigation schließen",children:v.jsx(Rd,{className:"h-4 w-4","aria-hidden":"true"})})]}),v.jsx("nav",{className:"flex-1 space-y-1 px-3 py-4 overflow-y-auto",children:(()=>{let S=null;return tr.map(w=>{const E=w.group!==S;S=w.group;const j=(h==null?void 0:h.id)===w.id;return v.jsxs("div",{className:"space-y-1",children:[E&&(a?S!==tr[0].group&&v.jsx("div",{className:"my-3 border-t border-border/30"}):v.jsx("div",{className:"mt-5 mb-1.5 px-3 text-[10px] font-bold uppercase tracking-widest text-muted-foreground/40 first:mt-0 select-none",children:w.group})),v.jsxs(ac,{to:w.pfad,onClick:s,"aria-current":j?"page":void 0,className:qe("flex w-full items-center rounded-md text-sm transition-all cursor-pointer",a?"justify-center p-2.5":"gap-3 px-3 py-2",j?a?"nav-active-collapsed":"nav-active":"text-muted-foreground hover:bg-accent hover:text-accent-foreground"),title:a?w.label:void 0,"aria-label":a?w.label:void 0,children:[v.jsx(w.icon,{className:"h-4.5 w-4.5 shrink-0","aria-hidden":"true"}),!a&&v.jsx("span",{className:"truncate",children:w.label})]})]},w.id)})})()}),v.jsx("div",{className:qe("py-3 text-xs text-muted-foreground border-t border-border/40 shrink-0",a?"px-2 text-center":"px-5"),children:a?v.jsx("div",{className:"flex justify-center",children:v.jsx("span",{className:qe("h-2.5 w-2.5 rounded-full ring-2 ring-black/40",f||!o?"bg-red-500":o.engine_reachable?o.brain&&!o.brain.ready?"bg-amber-500 animate-pulse":"bg-emerald-500 animate-pulse":"bg-amber-500"),title:f?"Zentrale antwortet nicht — Anzeigen evtl. veraltet":o?o.engine_reachable?o.brain&&!o.brain.ready?`Hirn offline (${o.brain.model??"fast"})`:"Engine + Hirn online":"Engine offline":"Backend offline"})}):v.jsxs("div",{className:"space-y-2 text-left",children:[f?v.jsxs("span",{className:"flex items-center gap-2 text-red-400",children:[v.jsx("span",{className:"h-2 w-2 rounded-full bg-red-500 animate-pulse"}),v.jsx("span",{className:"truncate",children:"Zentrale antwortet nicht"})]}):o?v.jsxs(v.Fragment,{children:[v.jsxs("span",{className:"flex items-center gap-2",children:[v.jsx("span",{className:qe("h-2 w-2 rounded-full animate-pulse",o.engine_reachable?"bg-emerald-500":"bg-amber-500")}),v.jsxs("span",{className:"truncate",children:["Engine ",o.engine_reachable?"online":"offline"]})]}),o.brain&&!o.brain.ready&&v.jsxs("span",{className:"flex items-center gap-2 text-amber-400",title:`Agent-Hirn '${o.brain.model??"fast"}' lädt nicht/abgestürzt`,children:[v.jsx("span",{className:"h-2 w-2 rounded-full bg-amber-500 animate-pulse"}),v.jsxs("span",{className:"truncate",children:["Hirn offline",o.brain.model?` (${o.brain.model})`:""]})]})]}):v.jsxs("span",{className:"flex items-center gap-2",children:[v.jsx("span",{className:"h-2 w-2 rounded-full bg-red-500"})," ",v.jsx("span",{className:"truncate",children:"Backend offline"})]}),(d==null?void 0:d.versions)&&v.jsxs("div",{className:"space-y-1 text-[9px] text-muted-foreground/60 mt-2 pt-2 border-t border-border/30",children:[v.jsxs("div",{className:"truncate",title:d.versions.mc2?`${d.versions.mc2.branch}-${d.versions.mc2.hash}${d.versions.mc2.dirty?"*":""} (${d.versions.mc2.date})`:"nicht gefunden",children:[v.jsx("strong",{children:"MC2:"})," ",d.versions.mc2?`${d.versions.mc2.hash}${d.versions.mc2.dirty?"*":""}`:"—"]}),v.jsxs("div",{className:"truncate",title:((p=d.versions.engine)==null?void 0:p.type)==="git"?`${d.versions.engine.branch}-${d.versions.engine.hash}${d.versions.engine.dirty?"*":""} (${d.versions.engine.date})`:((g=d.versions.engine)==null?void 0:g.version_text)||"unbekannt",children:[v.jsx("strong",{children:"Engine:"})," ",((b=d.versions.engine)==null?void 0:b.type)==="git"?`${d.versions.engine.hash}${d.versions.engine.dirty?"*":""}`:((_=(y=d.versions.engine)==null?void 0:y.version_text)==null?void 0:_.split(" ").pop())||"—"]}),v.jsxs("div",{className:"truncate",title:d.versions.hermes_agent?`${d.versions.hermes_agent.branch}-${d.versions.hermes_agent.hash}${d.versions.hermes_agent.dirty?"*":""} (${d.versions.hermes_agent.date})`:"nicht gefunden",children:[v.jsx("strong",{children:"Hermes Agent:"})," ",d.versions.hermes_agent?`${d.versions.hermes_agent.hash}${d.versions.hermes_agent.dirty?"*":""}`:"—"]})]})]})})]})}function Ui({titel:a,text:l,fehler:s,onErneut:r}){const o=s instanceof Error?s.stack||s.message:s?String(s):null;return v.jsx("div",{className:"flex min-h-[50vh] items-center justify-center p-6",children:v.jsxs("div",{className:"mc-card max-w-lg space-y-4 p-6",children:[v.jsxs("div",{className:"flex items-center gap-2.5",children:[v.jsx(Pu,{className:"h-5 w-5 shrink-0 text-amber-400","aria-hidden":"true"}),v.jsx("h1",{className:"font-space text-lg font-bold tracking-tight",children:a})]}),v.jsx("p",{className:"text-sm leading-relaxed text-muted-foreground",children:l}),v.jsxs("div",{className:"flex flex-wrap gap-2 pt-1",children:[r&&v.jsxs("button",{onClick:r,className:"flex h-9 cursor-pointer items-center gap-1.5 rounded-lg bg-primary px-4 text-xs font-semibold text-primary-foreground transition-colors hover:bg-primary/90",children:[v.jsx($2,{className:"h-3.5 w-3.5","aria-hidden":"true"})," Erneut versuchen"]}),v.jsx("a",{href:"/cockpit",className:"flex h-9 items-center rounded-lg border border-border/60 bg-background/20 px-4 text-xs font-semibold text-muted-foreground transition-colors hover:bg-accent",children:"Zum Cockpit"})]}),o&&v.jsxs("details",{className:"pt-1",children:[v.jsx("summary",{className:"cursor-pointer text-[11px] font-semibold uppercase tracking-wider text-muted-foreground/70 hover:text-foreground",children:"Technische Einzelheiten"}),v.jsx("pre",{className:"scrollbar-thin mt-2 max-h-52 overflow-auto rounded-lg border border-border/40 bg-background/40 p-3 font-mono text-[10px] leading-relaxed text-muted-foreground",children:o})]})]})})}function y_(){var J,Q,P,ee,I,fe;const{data:a,isError:l}=Dd(),{data:s,isError:r}=hv(),{data:o}=mv(),{data:f}=fr(),h=l||r,d=!!a&&!!s,p=F=>{var ae;return(ae=s==null?void 0:s.services.find(B=>B.unit===F))==null?void 0:ae.ok},g=F=>!!(s!=null&&s.services.some(ae=>ae.unit===F)),b=a==null?void 0:a.engine_reachable,y=(J=a==null?void 0:a.brain)==null?void 0:J.ready,_=((Q=a==null?void 0:a.brain)==null?void 0:Q.model)||((P=o==null?void 0:o.models.find(F=>F.role==="hermes"))==null?void 0:P.name)||"",S=[];h&&S.push({id:"mc2",label:"Steuerpult (MC2)",icon:F0,critical:!0,status:"down",detail:"Die Zentrale antwortet nicht — alle Anzeigen hier können veraltet sein. Läuft die Box? Deploy aktiv?"}),S.push((()=>{const F={id:"brain",label:"Lucys Hirn",icon:D2,critical:!0};return d?b===!1?{...F,status:"down",detail:"Die Motor-Maschine (Engine) läuft nicht — Lucy kann gerade gar nicht denken.",repair:{kind:"restart",service:"llama-swap",label:"Motor neu starten",needsSudo:!0}}:y===!1?{...F,status:"down",detail:"Lucys Hirn ist gerade eingeschlafen — einmal aufwecken.",repair:_?{kind:"loadModel",model:_,label:"Hirn aufwecken"}:void 0}:{...F,status:"ok",detail:"Wach und ansprechbar."}:{...F,status:"loading",detail:"Wird geprüft …"}})()),S.push((()=>{const F={id:"vision",label:"Lucys Augen",icon:q2,critical:!1};if(!d||!o)return{...F,status:"loading",detail:"Wird geprüft …"};const ae=o.models.find(W=>W.role==="vision");return ae?(o.running??[]).includes(ae.name)?{...F,status:"ok",detail:"Sieht gerade zu (geladen, solange Lucy sie nutzt)."}:{...F,status:"ok",detail:"Augen ruhen — sie laden von selbst, sobald Lucy startet oder ein Bild kommt.",repair:{kind:"loadModel",model:ae.name,label:"Augen wecken"}}:{...F,status:"warn",detail:"Kein Augen-Modell eingerichtet — Lucy kann keine Bilder ansehen."}})()),S.push((()=>{const F={id:"memory",label:"Lucys Gedächtnis",icon:N2,critical:!0},ae=p("hermes-gateway");return!d||ae===void 0?{...F,status:"loading",detail:"Wird geprüft …"}:ae?{...F,status:"ok",detail:"Hermes-Natives Gedächtnis aktiv (SQLite & Embeddings)."}:{...F,status:"down",detail:"Lucy kann sich gerade nichts merken — das Gateway antwortet nicht.",repair:{kind:"restart",service:"hermes-gateway",label:"Gateway neu starten"}}})()),S.push((()=>{const F={id:"gateway",label:"Verbindung (Gateway)",icon:Ad,critical:!0},ae=a?a.gateway_reachable:p("mc2-gateway");if(!d||ae===void 0)return{...F,status:"loading",detail:"Wird geprüft …"};const B=g("mc2-gateway")?"mc2-gateway":"mission-control-2";return ae?{...F,status:"ok",detail:"Apps und IDEs können Lucy erreichen."}:{...F,status:"down",detail:"Der Modell-Gateway antwortet nicht — Lucy und die IDEs erreichen kein Modell.",repair:{kind:"restart",service:B,label:"Gateway neu starten"}}})()),S.push((()=>{const F={id:"steward",label:"Wächter (Steward)",icon:Cd,critical:!1};return d?g("mc2-steward")?p("mc2-steward")?{...F,status:"ok",detail:"Wacht über Warm-Set, Dienste und Gedächtnis."}:{...F,status:"warn",detail:"Der Wächter schläft — niemand meldet gerade Ausfälle oder wärmt Modelle nach.",repair:{kind:"restart",service:"mc2-steward",label:"Wächter neu starten"}}:{...F,status:"ok",detail:"Auf dieser Installation nicht eingerichtet."}:{...F,status:"loading",detail:"Wird geprüft …"}})()),S.push((()=>{const F={id:"agent",label:"Lucys Agent (Hermes)",icon:rd,critical:!0},ae=p("hermes-gateway");return!d||ae===void 0?{...F,status:"loading",detail:"Wird geprüft …"}:ae?{...F,status:"ok",detail:"Lucy ist bereit zu reden und zu handeln."}:{...F,status:"down",detail:"Lucys Agent ist offline — sie reagiert gerade nicht.",repair:{kind:"restart",service:"hermes-gateway",label:"Agent neu starten"}}})()),S.push((()=>{const F={id:"voice",label:"Lucys Stimme",icon:F2,critical:!1},ae=p("voice-service");return!d||ae===void 0?{...F,status:"loading",detail:"Wird geprüft …"}:ae?{...F,status:"ok",detail:"Lucy kann hören und sprechen."}:{...F,status:"warn",detail:"Sprechen ist gerade aus — Tippen geht weiter normal.",repair:{kind:"restart",service:"voice-service",label:"Stimme neu starten"}}})());const w=((ee=f==null?void 0:f.ram)==null?void 0:ee.total)??0,E=((I=f==null?void 0:f.ram)==null?void 0:I.used)??0,j=((fe=f==null?void 0:f.ram)==null?void 0:fe.percent)??(w>0?Math.min(100,E/w*100):0),R=1024**3,z=w?j>=93?{status:"full",usedGb:E/R,totalGb:w/R,pct:j,text:"Speicher fast voll — Lucy könnte langsamer werden."}:j>=85?{status:"warn",usedGb:E/R,totalGb:w/R,pct:j,text:"Speicher gut gefüllt — noch okay."}:{status:"ok",usedGb:E/R,totalGb:w/R,pct:j,text:"Genug Speicher frei."}:{status:"unknown",usedGb:0,totalGb:0,pct:0,text:"Speicher-Auslastung unbekannt."},L=S.some(F=>F.status==="loading"),D=S.filter(F=>F.critical&&F.status==="down"),Z=S.filter(F=>F.status==="warn"||!F.critical&&F.status==="down"),G=z.status==="full";return{verdict:L&&!D.length?"loading":D.length?"problem":Z.length||G?"warn":"gut",checks:S,memory:z,problems:D,warns:Z,unreachable:h}}function v_({type:a,title:l,message:s,defaultValue:r,autoValue:o,autoLabel:f,onConfirm:h,onCancel:d}){const p=$.useRef(null);return v.jsx("div",{className:"fixed inset-0 z-[99] bg-black/60 backdrop-blur-sm flex items-center justify-center p-4 overscroll-contain",role:"dialog","aria-modal":"true","aria-label":l,children:v.jsxs("div",{className:"w-full max-w-sm rounded-2xl border border-border/80 bg-card p-6 shadow-2xl space-y-4 animate-in fade-in zoom-in-95 duration-200",children:[v.jsxs("div",{className:"flex items-center justify-between border-b border-border/20 pb-2",children:[v.jsx("h3",{className:"text-xs font-bold uppercase tracking-wider text-primary",children:l}),v.jsx("button",{onClick:d||(()=>h()),"aria-label":"Schließen",className:"p-1 rounded hover:bg-accent text-muted-foreground hover:text-foreground cursor-pointer",children:v.jsx(Rd,{className:"h-4 w-4","aria-hidden":"true"})})]}),v.jsx("p",{className:"max-h-72 overflow-y-auto whitespace-pre-line text-xs text-muted-foreground leading-relaxed scrollbar-thin",children:s}),a==="prompt"&&v.jsxs("div",{className:"flex gap-2",children:[v.jsx("input",{ref:p,type:"text",defaultValue:r,"aria-label":l,className:"flex-1 h-9 px-3 text-xs bg-background/40 border border-border/60 rounded-lg outline-none focus:border-primary transition-colors text-foreground",autoFocus:!0,onKeyDown:g=>{var b;g.key==="Enter"&&h((b=p.current)==null?void 0:b.value)}}),o!==void 0&&v.jsx("button",{type:"button",onClick:()=>{p.current&&(p.current.value=o)},title:"Setup-bewussten Optimalwert eintragen",className:"h-9 px-3 shrink-0 text-xs font-semibold text-primary border border-primary/50 bg-primary/10 hover:bg-primary/20 rounded-lg transition-colors cursor-pointer",children:f||"Auto"})]}),v.jsxs("div",{className:"flex justify-end gap-3 pt-2",children:[(a==="confirm"||a==="prompt")&&v.jsx("button",{onClick:d,className:"h-8 px-4 flex items-center justify-center text-xs font-semibold text-muted-foreground border border-border/60 bg-background/20 hover:bg-accent rounded-lg transition-colors cursor-pointer",children:"Abbrechen"}),v.jsx("button",{onClick:()=>{var b;const g=a==="prompt"?(b=p.current)==null?void 0:b.value:void 0;h(g)},className:"h-8 px-4 flex items-center justify-center text-xs font-semibold text-primary-foreground bg-primary hover:bg-primary/95 rounded-lg transition-colors cursor-pointer",children:a==="confirm"?"Ja, fortfahren":a==="prompt"?"Übernehmen":"OK"})]})]})})}function b_(){const[a,l]=$.useState(null),s=$.useCallback(()=>l(null),[]),r=$.useCallback((d,p,g)=>{l({type:"alert",title:d,message:p,onConfirm:()=>{l(null),g==null||g()}})},[]),o=$.useCallback((d,p,g,b)=>{l({type:"confirm",title:d,message:p,onConfirm:()=>{l(null),g()},onCancel:()=>{l(null),b==null||b()}})},[]),f=$.useCallback((d,p,g,b,y,_)=>{l({type:"prompt",title:d,message:p,defaultValue:g,autoValue:_==null?void 0:_.autoValue,autoLabel:_==null?void 0:_.autoLabel,onConfirm:S=>{l(null),b(S)},onCancel:()=>{l(null),y==null||y()}})},[]),h=a?v.jsx(v_,{...a}):null;return{showAlert:r,showConfirm:o,showPrompt:f,close:s,dialogElement:h}}const x_={ok:"bg-emerald-500",warn:"bg-amber-500",alert:"bg-red-500",muted:"bg-muted-foreground/40",loading:"bg-muted-foreground/40 animate-pulse"},S_={ok:"hover:border-emerald-500/40",warn:"hover:border-amber-500/50",alert:"hover:border-red-500/50",muted:"hover:border-primary/40",loading:"hover:border-border/60"};function Qs({icon:a,title:l,value:s,unit:r,tone:o="muted",hint:f,onClick:h}){return v.jsxs("button",{onClick:h,className:qe("group relative flex flex-col items-start mc-card p-5 text-left cursor-pointer",S_[o]),children:[v.jsxs("div",{className:"mb-4 flex w-full items-center justify-between",children:[v.jsx("span",{className:"flex h-10 w-10 items-center justify-center rounded-xl border border-border/40 bg-background/30 text-foreground/80 transition-colors group-hover:text-primary",children:v.jsx(a,{className:"h-5 w-5"})}),v.jsx("span",{className:qe("h-2.5 w-2.5 rounded-full ring-2 ring-black/40",x_[o]),title:f})]}),v.jsxs("div",{className:"flex items-baseline gap-1.5",children:[v.jsx("span",{className:"text-2xl font-bold tracking-tight text-foreground font-space tabular-nums",children:s}),r&&v.jsx("span",{className:"text-xs font-medium text-muted-foreground",children:r})]}),v.jsxs("div",{className:"mt-1 flex w-full items-center justify-between",children:[v.jsx("span",{className:"text-sm font-semibold text-foreground/90",children:l}),v.jsx(Wu,{className:"h-4 w-4 text-muted-foreground/40 transition-all group-hover:translate-x-0.5 group-hover:text-primary"})]}),f&&v.jsx("span",{className:"mt-0.5 text-[11px] text-muted-foreground",children:f})]})}function __(){const{data:a,error:l}=fr(),s=cv(),r=rv();return{sys:$.useMemo(()=>{var f,h;return!a||!s?a:{...a,cpu:{...a.cpu,percent:s.cpu??a.cpu.percent},ram:{...a.ram,percent:s.ram??a.ram.percent,used:s.ram_used??a.ram.used,total:s.ram_total??a.ram.total},gpu:a.gpu?{...a.gpu,busy_percent:s.gpu??a.gpu.busy_percent}:a.gpu,disk:a.disk?{...a.disk,percent:s.disk??a.disk.percent}:a.disk,temp:{cpu:s.temp_cpu??((f=a.temp)==null?void 0:f.cpu),gpu:s.temp_gpu??((h=a.temp)==null?void 0:h.gpu)},uptime_s:s.uptime_s??a.uptime_s}},[a,s]),hist:r,error:l}}const w_=$.lazy(()=>nn(()=>import("./LiveAreaChartImpl-CUepOhWM.js"),__vite__mapDeps([12,13,11])));function gv(a){return v.jsx($.Suspense,{fallback:v.jsx(E_,{height:a.height??176}),children:v.jsx(w_,{...a})})}function E_({height:a}){return v.jsx("div",{style:{height:a},className:"flex w-full items-end","aria-hidden":"true",children:v.jsx("div",{className:"h-px w-full bg-border/40"})})}const pv={"1h":60,"24h":1440},Hy={live:"Live","1h":"1 h","24h":"24 h"};function yv({value:a,onChange:l}){return v.jsx("div",{className:"flex rounded-lg border border-border/40 bg-background/30 p-0.5",children:Object.keys(Hy).map(s=>v.jsx("button",{onClick:()=>l(s),className:qe("rounded-md px-2 py-0.5 text-[9px] font-bold uppercase tracking-wide transition-all cursor-pointer",a===s?"bg-primary text-primary-foreground":"text-muted-foreground hover:text-foreground"),children:Hy[s]},s))})}const j_=[{key:"cpu",label:"CPU",color:"#2dd4bf"},{key:"ram",label:"RAM",color:"#38bdf8"},{key:"gpu",label:"GPU",color:"#a78bfa"},{key:"disk",label:"Disk",color:"#fbbf24"}];function T_(){var b,y,_,S;const{sys:a,hist:l}=__(),[s,r]=$.useState("live"),o=dv(s==="live"?60:pv[s],s!=="live"),f=$.useMemo(()=>{var w;return s==="live"?l:(((w=o.data)==null?void 0:w.points)??[]).map(E=>({t:E.t*1e3,cpu:E.cpu,ram:E.ram,gpu:E.gpu,disk:E.disk}))},[s,l,o.data]),h=!!(a!=null&&a.gpu&&a.gpu.busy_percent!=null&&a.gpu.gtt_used!=null&&a.gpu.gtt_total!=null),d=j_.filter(w=>w.key!=="gpu"||h),p={cpu:(b=a==null?void 0:a.cpu)==null?void 0:b.percent,ram:(y=a==null?void 0:a.ram)==null?void 0:y.percent,gpu:h?a.gpu.busy_percent:null,disk:(_=a==null?void 0:a.disk)==null?void 0:_.percent},g={cpu:(S=a==null?void 0:a.cpu)!=null&&S.cores?`${a.cpu.cores} Cores`:"",ram:a?`${xn(a.ram.used)}/${xn(a.ram.total)} GB`:"",gpu:h?`${xn(a.gpu.gtt_used)}/${xn(a.gpu.gtt_total)} GB`:"",disk:a!=null&&a.disk?`${xn(a.disk.used)}/${xn(a.disk.total)} GB`:""};return v.jsxs("div",{className:"flex flex-col justify-between mc-card p-5",children:[v.jsxs("div",{children:[v.jsxs("div",{className:"mb-3 flex items-center gap-2",children:[v.jsx(H2,{className:"h-4.5 w-4.5 text-primary"}),v.jsx("h2",{className:"text-sm font-semibold uppercase tracking-wide text-foreground",children:"System-Status"}),s==="live"&&v.jsxs("span",{className:"ml-1 inline-flex items-center gap-1 text-[10px] font-medium text-muted-foreground/70",children:[v.jsx("span",{className:"h-1.5 w-1.5 rounded-full bg-emerald-500 animate-pulse"})," live"]}),v.jsx("div",{className:"ml-auto",children:v.jsx(yv,{value:s,onChange:r})})]}),a?v.jsxs(v.Fragment,{children:[v.jsx("div",{className:"mb-2 grid grid-cols-2 gap-x-4 gap-y-1.5",children:d.map(w=>v.jsxs("div",{className:"flex min-w-0 items-center gap-1.5",children:[v.jsx("span",{className:"h-2 w-2 shrink-0 rounded-full",style:{background:w.color}}),v.jsx("span",{className:"shrink-0 text-[11px] font-semibold uppercase tracking-wider text-muted-foreground",children:w.label}),v.jsxs("span",{className:"shrink-0 font-mono text-xs font-bold tabular-nums text-foreground",children:[Math.round(p[w.key]??0),"%"]}),g[w.key]&&v.jsx("span",{className:"truncate font-mono text-[10px] text-muted-foreground/60",children:g[w.key]})]},w.key))}),s!=="live"&&f.length===0&&v.jsx("div",{className:"flex h-44 items-center justify-center text-xs text-muted-foreground",children:o.isLoading?"Verlauf wird geladen …":"Noch kein Verlauf — der Sammler baut die Historie gerade erst auf."}),(s==="live"||f.length>0)&&v.jsx(gv,{data:f,series:d,unit:"%",yMode:"percent",height:176,showTime:!0})]}):v.jsx("div",{className:"flex h-44 items-center justify-center text-xs text-muted-foreground",children:"Lade Systemdaten…"})]}),(a==null?void 0:a.temp)&&(a.temp.cpu||a.temp.gpu)&&v.jsxs("div",{className:"mt-3 flex gap-4 border-t border-border/30 pt-3 font-mono text-xs text-muted-foreground/80",children:[a.temp.cpu!=null&&v.jsxs("span",{children:["CPU Temp: ",a.temp.cpu," °C"]}),a.temp.gpu!=null&&v.jsxs("span",{children:["GPU Temp: ",a.temp.gpu," °C"]})]})]})}const Di=[{key:"stt_ms",label:"STT",color:"#f59e0b"},{key:"vision_ms",label:"Sehen",color:"#a78bfa"},{key:"hirn_ms",label:"Hirn",color:"#2dd4bf"},{key:"gen_ms",label:"Antwort",color:"#60a5fa"}],Zs=a=>a==null?"–":`${(a/1e3).toLocaleString("de-DE",{minimumFractionDigits:1,maximumFractionDigits:1})} s`;function M_(a){const l=Math.max(0,Date.now()/1e3-a);return l<60?`vor ${Math.round(l)} s`:l<3600?`vor ${Math.round(l/60)} min`:`vor ${Math.round(l/3600)} h`}function fd(a){return Di.reduce((l,s)=>l+(a[s.key]??0),0)}function A_(a){let l=null;for(const s of Di){const r=a[s.key];r!=null&&(l==null||r>l.ms)&&(l={label:s.label,color:s.color,ms:r})}return l}function C_({t:a,scale:l}){const s=Di.map(r=>`${r.label} ${Zs(a[r.key])}`).join(" · ");return v.jsxs("div",{className:"flex items-center gap-2.5",children:[v.jsx("span",{className:"w-14 shrink-0 text-right font-mono text-[10px] text-muted-foreground/60",children:M_(a.ts)}),v.jsxs("div",{className:"relative h-4 flex-1 overflow-hidden rounded-sm bg-muted/25",title:s,children:[v.jsx("div",{className:"absolute inset-0 flex",children:Di.map(r=>{const o=a[r.key];return!o||o<=0?null:v.jsx("div",{style:{width:`${o/l*100}%`,background:r.color},className:"h-full first:rounded-l-sm"},r.key)})}),a.error&&v.jsx("div",{className:"absolute inset-0 flex items-center justify-center bg-rose-500/15 text-[10px] font-semibold text-rose-300",children:"Fehler"})]}),v.jsx("span",{className:"w-12 shrink-0 text-right font-mono text-[11px] font-semibold tabular-nums text-foreground",children:a.error?"–":Zs(fd(a))})]})}function R_(){const{data:a}=n_(12),l=a??[],s=Math.max(1,...l.map(f=>fd(f))),r=l[0],o=r?A_(r):null;return v.jsxs("div",{className:"mc-card p-5",children:[v.jsxs("div",{className:"mb-3 flex items-start justify-between gap-3",children:[v.jsxs("div",{children:[v.jsxs("div",{className:"flex items-center gap-2",children:[v.jsx(G2,{className:"h-4.5 w-4.5 text-primary"}),v.jsx("h2",{className:"text-sm font-semibold uppercase tracking-wide text-foreground",children:"Latenz je Turn"}),v.jsxs("span",{className:"ml-1 inline-flex items-center gap-1 text-[10px] font-medium text-muted-foreground/70",children:[v.jsx("span",{className:"h-1.5 w-1.5 rounded-full bg-emerald-500 animate-pulse"})," live"]})]}),r?v.jsxs("div",{className:"mt-2 flex items-baseline gap-2",children:[v.jsx("span",{className:`font-space text-3xl font-bold tracking-tight tabular-nums ${r.error?"text-rose-400":"text-foreground"}`,children:r.error?"Fehler":Zs(fd(r))}),v.jsxs("span",{className:"text-xs text-muted-foreground",children:["letzter Turn",!r.error&&o&&v.jsxs(v.Fragment,{children:[" · Täter: ",v.jsx("span",{style:{color:o.color},className:"font-semibold",children:o.label})," ",Zs(o.ms)]})]})]}):v.jsx("div",{className:"mt-2 text-xs text-muted-foreground",children:"Noch kein Voice-Turn aufgezeichnet."}),r&&!r.error&&v.jsx("div",{className:"mt-0.5 font-mono text-[11px] text-muted-foreground/70",children:Di.filter(f=>r[f.key]!=null).map(f=>`${f.label} ${Zs(r[f.key])}`).join(" · ")})]}),v.jsx("div",{className:"flex shrink-0 flex-col items-end gap-1 pt-1",children:Di.map(f=>v.jsxs("div",{className:"flex items-center gap-1.5",children:[v.jsx("span",{className:"h-2 w-2 rounded-full",style:{background:f.color}}),v.jsx("span",{className:"text-[11px] font-semibold uppercase tracking-wider text-muted-foreground",children:f.label})]},f.key))})]}),l.length>0?v.jsx("div",{className:"space-y-1.5",children:l.map(f=>v.jsx(C_,{t:f,scale:s},f.id))}):v.jsx("div",{className:"flex h-[120px] items-center justify-center px-6 text-center text-xs text-muted-foreground",children:"Sprich einmal mit Lucy — dann erscheint hier der Zeit-Wasserfall pro Turn, damit man den einen Hänger sofort sieht."}),v.jsx("div",{className:"mt-3 border-t border-border/30 pt-2 text-[10px] leading-relaxed text-muted-foreground/70",children:'„Hirn" = Zeit bis zum ersten Wort (Agent + Gedächtnis-Suche + Modell); Tool-Runden stecken in „Antwort". Reine Telegram-Turns laufen an MC2 vorbei und erscheinen hier nicht.'})]})}const qy=[{key:"prompt",label:"Prompt",color:"#f59e0b"},{key:"completion",label:"Antwort",color:"#2dd4bf"}];function z_(){const{data:a}=Od(),l=uv(),[s,r]=$.useState("live"),o=dv(s==="live"?60:pv[s],s!=="live"),f=$.useMemo(()=>{var b;if(s==="live")return l;const p=((b=o.data)==null?void 0:b.points)??[],g=[];for(let y=1;yv.jsxs("div",{className:"flex items-center gap-1.5",children:[v.jsx("span",{className:"h-2 w-2 rounded-full",style:{background:p.color}}),v.jsx("span",{className:"text-[11px] font-semibold uppercase tracking-wider text-muted-foreground",children:p.label}),v.jsx("span",{className:"font-mono text-xs font-bold tabular-nums text-foreground",children:Math.round((h==null?void 0:h[p.key])??0)})]},p.key))})]})]}),s!=="live"&&f.length===0?v.jsx("div",{className:"flex h-[150px] items-center justify-center text-xs text-muted-foreground",children:o.isLoading?"Verlauf wird geladen …":"Noch kein Verlauf — der Sammler baut die Historie gerade erst auf."}):a?v.jsx(gv,{data:f,series:qy,unit:" tok/s",yMode:"auto",height:150,showTime:!0}):v.jsx("div",{className:"flex h-[150px] items-center justify-center text-xs text-muted-foreground",children:"Lade Durchsatz…"}),v.jsx("div",{className:"mt-2 border-t border-border/30 pt-2 text-[10px] text-muted-foreground/70",children:"Durchsatz aus dem Gateway abgeleitet (Prefill vs. Generierung). Flach bei Leerlauf."})]})}function kd(){const a=cr();return l=>a({to:".",search:s=>({...s,system:l})})}function N_({onNavigate:a}){var F,ae,B,W;const l=kd(),{data:s}=mv(),{data:r}=hv(),{data:o}=i_(),{data:f}=l_(),{data:h}=s_(),{data:d}=t_(),p=y_(),{showAlert:g,dialogElement:b}=b_(),y=yd(),[_,S]=$.useState({});async function w(te,be){S(me=>({...me,[te]:!0}));try{if(be.kind==="loadModel")await ke(`/api/models/${encodeURIComponent(be.model)}/load`,{method:"POST"});else{const me=await ke("/api/maintenance/restart",{method:"POST",body:JSON.stringify({service:be.service})});me.ok||g("Reparatur nicht ganz geklappt",(me.err||"Unbekannter Fehler")+(be.needsSudo?` + +Tipp: Dafür wird evtl. das Box-Passwort gebraucht (oben rechts hinterlegen).`:""))}y.invalidateQueries({queryKey:Ge.health}),y.invalidateQueries({queryKey:Ge.services}),y.invalidateQueries({queryKey:Ge.models})}catch(me){g("Reparatur fehlgeschlagen",String((me==null?void 0:me.message)||me))}finally{S(me=>({...me,[te]:!1}))}}const E=((F=s==null?void 0:s.running)==null?void 0:F.length)??0,j=(r==null?void 0:r.services.filter(te=>te.ok).length)??0,R=(r==null?void 0:r.services.length)??0,z=R-j,L=(o?(o.os>0?1:0)+(o.engine>0?1:0)+(o.swap>0?1:0)+(o.models>0?1:0):0)+(((ae=o==null?void 0:o.components)==null?void 0:ae.filter(te=>te.update===!0).length)??0),D=d!=null&&d.available?d.items.filter(te=>te.status!=="done").length:0,Z=d!=null&&d.available?d.items.filter(te=>te.status==="blocked").length:0,G=h?[h.gateway,h.memory,h.desktop_gateway]:[],K=G.filter(te=>te==null?void 0:te.ok).length,J=h?h.gateway.ok?h.memory.ok?h.desktop_gateway.ok?"":"Desktop-Gateway":"Gedächtnis-Leitung":"Modell-Leitung":"",Q=(B=s==null?void 0:s.models)==null?void 0:B.find(te=>te.role==="hermes"),P=Q!=null&&Q.name?(W=Q.name.split("/").pop())==null?void 0:W.replace(/\.gguf$/i,""):"",ee=r==null?void 0:r.services.filter(te=>!te.ok).map(te=>te.name).join(", "),I=o?[o.os>0&&"OS",o.engine>0&&"Engine",o.swap>0&&"Swap",o.models>0&&"Modelle"].filter(Boolean):[],fe=I.length>0?I.join(" + "):"";return v.jsxs("div",{className:"space-y-6",children:[v.jsxs("div",{children:[v.jsx("h1",{className:"bg-gradient-to-r from-foreground via-foreground to-primary bg-clip-text font-space text-2xl font-bold tracking-tight text-transparent",children:"Cockpit"}),v.jsx("p",{className:"text-sm text-muted-foreground",children:"Deine Box auf einen Blick — Details hinter jeder Kachel."})]}),v.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-3 gap-6 items-start",children:[v.jsxs("div",{className:"lg:col-span-2 space-y-6",children:[v.jsx(D_,{verdict:p.verdict,memory:p.memory,warns:p.warns,problems:p.problems}),v.jsxs("section",{children:[v.jsx(Lf,{children:"Leistung"}),v.jsx("div",{className:"grid gap-4 md:grid-cols-1",children:v.jsx(T_,{})}),v.jsx("div",{className:"mt-4",children:v.jsx(R_,{})}),v.jsx("div",{className:"mt-4",children:v.jsx(z_,{})})]}),v.jsxs("section",{children:[v.jsx(Lf,{children:"Bereiche"}),v.jsxs("div",{className:"grid gap-4 grid-cols-2 md:grid-cols-3",children:[v.jsx(Qs,{icon:J0,title:"Ideen",value:d!=null&&d.available?D:"—",unit:"offen",tone:d?Z>0?"warn":"ok":"loading",hint:Z>0?`${Z} Idee${Z===1?"":"n"} wartet auf deine Antwort`:D>0?`${D} in Arbeit oder wartend`:"Nichts offen",onClick:()=>a("ideen")}),v.jsx(Qs,{icon:X0,title:"Modelle",value:E,unit:"warm",tone:E>0?"ok":"muted",hint:P?`Hirn: ${P}`:"Kein Hermes-Modell geladen",onClick:()=>a("models")}),v.jsx(Qs,{icon:F0,title:"Dienste",value:r?`${j}/${R}`:"…",unit:"laufen",tone:r?z>0?"warn":"ok":"loading",hint:ee?`Ausfall: ${ee}`:"Alle Dienste online",onClick:()=>l("wartung")}),v.jsx(Qs,{icon:Cd,title:"Updates",value:o?L>0?L:"0":"…",unit:L>0?"bereit":"aktuell",tone:o?L>0?"warn":"ok":"loading",hint:L>0?`Verfügbar: ${fe}`:"Alles auf dem neuesten Stand",onClick:()=>l("wartung")}),v.jsx(Qs,{icon:Ad,title:"Verbinden",value:h?`${K}/${G.length}`:"…",unit:"Leitungen",tone:h?K===G.length?"ok":"warn":"loading",hint:J?`Gestört: ${J}`:"Hermes Desktop & IDEs bereit",onClick:()=>a("connect")})]})]})]}),v.jsxs("div",{className:"space-y-6",children:[v.jsx(O_,{problems:p.problems,pendingCount:L,blockedIdeen:Z,busy:_,onRepair:w,onNavigate:a}),v.jsxs("section",{children:[v.jsx(Lf,{children:"Werkzeuge & Diagnose"}),v.jsx(k_,{agent:f,svcErrors:z,onNavigate:a})]})]})]}),b]})}function Lf({children:a}){return v.jsx("p",{className:"mb-2 ml-0.5 text-[11px] font-semibold uppercase tracking-wider text-muted-foreground/60",children:a})}function D_({verdict:a,memory:l,warns:s,problems:r}){const o=s.length?`${s[0].label}: ${s[0].detail}${s.length>1?` (+${s.length-1} weitere)`:""}`:l.status==="full"?l.text:"Nichts Schlimmes — nur ein Hinweis.",f=r.length?`${r[0].label}: ${r[0].detail}${r.length>1?` (+${r.length-1} weitere)`:""}`:"Ein wichtiger Dienst hakt.",h={loading:{ring:"border-border/60 bg-card/45",icon:Md,iconCls:"text-muted-foreground animate-spin",title:"Box wird geprüft …",sub:"Einen Moment."},gut:{ring:"border-emerald-500/40 bg-emerald-500/5",icon:V2,iconCls:"text-emerald-400",title:"Box gesund",sub:"Alle wichtigen Dienste laufen."},warn:{ring:"border-amber-500/40 bg-amber-500/5",icon:Pu,iconCls:"text-amber-400",title:"Kleinigkeit an der Box",sub:o},problem:{ring:"border-red-500/50 bg-red-500/5",icon:Pu,iconCls:"text-red-400",title:"Box braucht Hilfe",sub:f}}[a],d=h.icon,p={ok:"text-emerald-400",warn:"text-amber-400",full:"text-red-400",unknown:"text-muted-foreground"}[l.status],g={ok:"bg-emerald-500",warn:"bg-amber-500",full:"bg-red-500",unknown:"bg-muted-foreground/40"}[l.status];return v.jsxs("div",{className:qe("flex flex-col gap-4 rounded-2xl border p-5 shadow-lg shadow-black/15 backdrop-blur-md transition-colors sm:flex-row sm:items-center sm:justify-between h-full",h.ring),children:[v.jsxs("div",{className:"flex items-center gap-3",children:[v.jsx("div",{className:"flex h-11 w-11 shrink-0 items-center justify-center rounded-xl border border-border/40 bg-background/30",children:v.jsx(d,{className:qe("h-6 w-6",h.iconCls)})}),v.jsxs("div",{className:"min-w-0",children:[v.jsx("h2",{className:"text-base font-bold tracking-tight text-foreground",children:h.title}),v.jsx("p",{className:"text-xs text-muted-foreground",children:h.sub})]})]}),v.jsxs("div",{className:"w-full max-w-[16rem] rounded-xl border border-border/30 bg-background/20 p-3",children:[v.jsxs("div",{className:"mb-1.5 flex items-center justify-between text-[11px]",children:[v.jsxs("span",{className:"flex items-center gap-1.5 font-semibold uppercase tracking-wider text-muted-foreground",children:[v.jsx(Q2,{className:"h-3.5 w-3.5"})," Speicher"]}),v.jsx("span",{className:qe("font-mono font-bold",p),children:l.status==="unknown"?"—":`${l.usedGb.toFixed(1)} / ${l.totalGb.toFixed(1)} GB`})]}),v.jsx("div",{className:"h-2 w-full overflow-hidden rounded-full border border-border/30 bg-background/50",children:v.jsx("div",{className:qe("h-full rounded-full transition-all duration-500",g),style:{width:`${l.pct}%`}})})]})]})}function O_({problems:a,pendingCount:l,blockedIdeen:s,busy:r,onRepair:o,onNavigate:f}){const h=kd(),d=l>0,p=s>0,g=a.length===0&&!d&&!p;return v.jsx("div",{className:"h-full flex flex-col justify-between",children:g?v.jsxs("div",{className:"flex items-center gap-3 rounded-2xl border border-emerald-500/25 bg-emerald-500/5 p-4 h-full",children:[v.jsx(O2,{className:"h-5 w-5 shrink-0 text-emerald-400"}),v.jsxs("div",{children:[v.jsx("p",{className:"text-sm font-semibold text-foreground",children:"Nichts zu tun"}),v.jsx("p",{className:"text-xs text-muted-foreground",children:"Alles läuft. Du musst gerade nichts abnicken."})]})]}):v.jsxs("div",{className:"space-y-2 h-full flex flex-col justify-center",children:[a.map(b=>v.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center justify-between gap-3 rounded-2xl border border-red-500/25 bg-red-500/5 p-4",children:[v.jsxs("div",{className:"flex min-w-0 items-center gap-3 w-full",children:[v.jsx("span",{className:"flex h-9 w-9 shrink-0 items-center justify-center rounded-lg border border-red-500/30 bg-background/30 text-red-300",children:v.jsx(b.icon,{className:"h-4.5 w-4.5"})}),v.jsxs("div",{className:"min-w-0 flex-1",children:[v.jsx("p",{className:"text-sm font-bold text-foreground",children:b.label}),v.jsx("p",{className:"truncate text-xs text-muted-foreground",children:b.detail})]})]}),b.repair&&v.jsxs("button",{onClick:()=>b.repair&&o(b.id,b.repair),disabled:!!r[b.id],className:"flex h-9 shrink-0 items-center gap-1.5 rounded-lg border border-red-500/40 bg-red-500/10 px-3 text-[11px] font-bold uppercase tracking-wide text-red-300 transition-all hover:bg-red-500/20 cursor-pointer disabled:opacity-60 w-full sm:w-auto justify-center",children:[r[b.id]?v.jsx(Md,{className:"h-3.5 w-3.5 animate-spin"}):v.jsx(e3,{className:"h-3.5 w-3.5"}),b.repair.label]})]},b.id)),p&&v.jsxs("button",{onClick:()=>f("ideen"),className:"flex w-full items-center justify-between gap-3 rounded-2xl border border-red-500/30 bg-red-500/5 p-4 text-left transition-all hover:bg-red-500/10 cursor-pointer",children:[v.jsxs("div",{className:"flex items-center gap-3",children:[v.jsx("span",{className:"flex h-9 w-9 shrink-0 items-center justify-center rounded-lg border border-red-500/30 bg-background/30 text-red-300",children:v.jsx(Z0,{className:"h-4.5 w-4.5"})}),v.jsxs("div",{children:[v.jsxs("p",{className:"text-sm font-bold text-foreground",children:[s," Karte",s===1?"":"n"," braucht deine Antwort"]}),v.jsx("p",{className:"text-xs text-muted-foreground",children:"Die Box hängt an einer Frage und wartet auf dich."})]})]}),v.jsx(Wu,{className:"h-4 w-4 shrink-0 text-red-300/70"})]}),d&&v.jsxs("button",{onClick:()=>h("wartung"),className:"flex w-full items-center justify-between gap-3 rounded-2xl border border-amber-500/30 bg-amber-500/5 p-4 text-left transition-all hover:bg-amber-500/10 cursor-pointer",children:[v.jsxs("div",{className:"flex items-center gap-3",children:[v.jsx("span",{className:"flex h-9 w-9 shrink-0 items-center justify-center rounded-lg border border-amber-500/30 bg-background/30 text-amber-300",children:v.jsx(Cd,{className:"h-4.5 w-4.5"})}),v.jsxs("div",{children:[v.jsxs("p",{className:"text-sm font-bold text-foreground",children:[l," Update",l===1?"":"s"," bereit"]}),v.jsx("p",{className:"text-xs text-muted-foreground",children:"Ansehen und entscheiden."})]})]}),v.jsx(Wu,{className:"h-4 w-4 shrink-0 text-amber-300/70"})]})]})})}function k_({agent:a,svcErrors:l,onNavigate:s}){const r=kd(),o=[{label:"Hermes Agent",status:a?a.gateway_reachable?"Bereit":"Offline":"…",tone:a?a.gateway_reachable?"ok":"alert":"loading",action:()=>s("agent")},{label:"Konsole (Box-Shell)",status:a?a.box_console_reachable?"Bereit":"Offline":"…",tone:a?a.box_console_reachable?"ok":"warn":"loading",action:()=>s("konsole")},{label:"Systemlogs & Diagnose",status:l>0?`${l} Fehler`:"Keine Fehler",tone:l>0?"alert":"ok",action:()=>r("logs")},{label:"Wissens-Vault",status:"Öffnen",tone:"muted",action:()=>s("wissen")},{label:"Chronik & Zeitmaschine",status:"Öffnen",tone:"muted",action:()=>s("chronik")}];return v.jsx("div",{className:"rounded-2xl border border-border/60 bg-card/30 p-4 space-y-3 shadow-sm",children:v.jsx("div",{className:"divide-y divide-border/20",children:o.map((f,h)=>{const d={loading:"bg-muted-foreground/45 animate-pulse",ok:"bg-emerald-500 shadow-[0_0_8px_rgba(16,185,129,0.4)]",warn:"bg-amber-500 shadow-[0_0_8px_rgba(245,158,11,0.4)]",alert:"bg-red-500 shadow-[0_0_8px_rgba(239,68,68,0.4)]",muted:"bg-muted-foreground/30"}[f.tone];return v.jsxs("button",{onClick:f.action,className:"w-full py-2.5 px-1.5 flex items-center justify-between text-left hover:bg-card/45 rounded-lg transition-all group cursor-pointer text-xs",children:[v.jsx("span",{className:"text-muted-foreground group-hover:text-foreground transition-colors font-medium",children:f.label}),v.jsxs("div",{className:"flex items-center gap-2",children:[v.jsx("span",{className:qe("text-[10px] font-semibold font-mono",f.tone==="ok"?"text-emerald-400":f.tone==="warn"?"text-amber-400":f.tone==="alert"?"text-red-400":"text-muted-foreground/60"),children:f.status}),v.jsx("span",{className:qe("h-1.5 w-1.5 rounded-full",d)})]})]},h)})})})}const U_=$.lazy(()=>nn(()=>import("./ModelsView-dw81nBmA.js"),__vite__mapDeps([14,15,16,17,3,9,18,19])).then(a=>({default:a.ModelsView}))),L_=$.lazy(()=>nn(()=>import("./ConnectView-CdvOrseN.js"),__vite__mapDeps([20,5,18])).then(a=>({default:a.ConnectView}))),B_=$.lazy(()=>nn(()=>import("./AgentView-Ddy3G6Cn.js"),__vite__mapDeps([21,22,6,7,4])).then(a=>({default:a.AgentView}))),H_=$.lazy(()=>nn(()=>import("./KonsoleView-CSxygCPx.js"),__vite__mapDeps([23,7,1])).then(a=>({default:a.KonsoleView}))),q_=$.lazy(()=>nn(()=>import("./GuideView-CxJU6Qxs.js"),__vite__mapDeps([24,17,19,4])).then(a=>({default:a.GuideView}))),G_=$.lazy(()=>nn(()=>import("./IdeenAnsicht-Cy8yw2ZX.js"),__vite__mapDeps([25,22,16,1,2,19,18,6])).then(a=>({default:a.IdeenView}))),Q_=$.lazy(()=>nn(()=>import("./SkillsView-DqlZxdwQ.js"),__vite__mapDeps([26,15])).then(a=>({default:a.SkillsView}))),V_=$.lazy(()=>nn(()=>import("./ChronikView-79MqWZGv.js"),__vite__mapDeps([27,3])).then(a=>({default:a.ChronikView}))),Y_=$.lazy(()=>nn(()=>import("./WissenView-BoYalgKN.js"),__vite__mapDeps([28,13,1,3,2])).then(a=>({default:a.WissenView}))),K_=a=>{const l=a.system;return l==="wartung"||l==="logs"?{system:l}:{}},_l=h2({component:p_,validateSearch:K_,notFoundComponent:()=>v.jsx(Ui,{titel:"Diese Seite gibt es nicht",text:"Der Link zeigt auf eine Ansicht, die Mission Control nicht kennt. Vielleicht stammt er aus einer älteren Fassung."})}),X_=Oi({getParentRoute:()=>_l,path:"/",beforeLoad:()=>{throw x0({to:"/cockpit"})}});function Li(a,l){return Oi({getParentRoute:()=>_l,path:a,component:l,errorComponent:({error:s,reset:r})=>v.jsx(Ui,{titel:"Diese Ansicht ist abgestürzt",text:"Der Rest von Mission Control läuft weiter. Erneut versuchen — oder in eine andere Ansicht wechseln.",fehler:s,onErneut:r})})}function Z_(){const a=cr();return v.jsx(N_,{onNavigate:l=>{const s=tr.find(r=>r.id===l);s&&a({to:s.pfad})}})}const J_=Li("/cockpit",()=>v.jsx(Z_,{})),F_=Li("/skills",()=>v.jsx(Q_,{})),$_=Oi({getParentRoute:()=>_l,path:"/chronik",validateSearch:a=>typeof a.q=="string"&&a.q?{q:a.q}:{},component:()=>v.jsx(V_,{}),errorComponent:({error:a,reset:l})=>v.jsx(Ui,{titel:"Die Chronik ist abgestürzt",text:"Der Rest läuft weiter.",fehler:a,onErneut:l})}),W_=Li("/verbinden",()=>v.jsx(L_,{})),P_=Li("/konsole",()=>v.jsx(H_,{})),I_=Li("/anleitung",()=>v.jsx(q_,{})),e5=Li("/agent",()=>v.jsx(B_,{})),t5=Oi({getParentRoute:()=>_l,path:"/ideen",validateSearch:a=>typeof a.offen=="string"&&a.offen?{offen:a.offen}:{},component:()=>v.jsx(G_,{}),errorComponent:({error:a,reset:l})=>v.jsx(Ui,{titel:"Die Ideen-Ansicht ist abgestürzt",text:"Der Rest läuft weiter.",fehler:a,onErneut:l})}),n5=Oi({getParentRoute:()=>_l,path:"/wissen",validateSearch:a=>({...typeof a.datei=="string"&&a.datei?{datei:a.datei}:{},...typeof a.suche=="string"&&a.suche?{suche:a.suche}:{}}),component:()=>v.jsx(Y_,{}),errorComponent:({error:a,reset:l})=>v.jsx(Ui,{titel:"Die Wissens-Ansicht ist abgestürzt",text:"Der Rest läuft weiter.",fehler:a,onErneut:l})}),a5=Oi({getParentRoute:()=>_l,path:"/modelle",validateSearch:a=>{const l=a.reiter;return l==="werkbank"||l==="routing"||l==="discover"?{reiter:l}:{}},component:()=>v.jsx(U_,{}),errorComponent:({error:a,reset:l})=>v.jsx(Ui,{titel:"Der Modell-Manager ist abgestürzt",text:"Der Rest läuft weiter.",fehler:a,onErneut:l})}),l5=_l.addChildren([X_,J_,t5,F_,$_,n5,W_,P_,I_,a5,e5]),i5=_2({routeTree:l5,scrollRestoration:!0,defaultPreload:!1});class s5 extends cn.Component{constructor(){super(...arguments);Ru(this,"state",{error:null})}static getDerivedStateFromError(s){return{error:s}}componentDidCatch(s,r){console.error("Unbehandelter UI-Fehler:",s,r.componentStack)}render(){return this.state.error?v.jsx("div",{className:"min-h-screen flex items-center justify-center bg-neutral-950 text-neutral-200 p-8",children:v.jsxs("div",{className:"max-w-lg space-y-4 text-center",children:[v.jsx("div",{className:"text-2xl",children:"Da ist etwas schiefgelaufen."}),v.jsx("div",{className:"text-sm text-neutral-400 break-all",children:this.state.error.message}),v.jsx("button",{className:"px-4 py-2 rounded-lg bg-neutral-800 hover:bg-neutral-700 border border-neutral-700",onClick:()=>window.location.reload(),children:"Neu laden"})]})}):this.props.children}}const r5=Object.fromEntries(tr.map(a=>[a.id,a.pfad]));function u5(){const a=window.location.hash.replace(/^#\/?/,"");if(!a)return;const l=r5[a];l&&window.history.replaceState(null,"",l+window.location.search)}const Bf="mc_neuladen_wegen_version";function c5(){window.addEventListener("vite:preloadError",a=>{sessionStorage.getItem(Bf)||(a.preventDefault(),sessionStorage.setItem(Bf,"1"),window.location.reload())}),window.addEventListener("load",()=>{window.setTimeout(()=>sessionStorage.removeItem(Bf),5e3)})}u5();c5();const o5=new _x({defaultOptions:{queries:{retry:1,refetchOnWindowFocus:!1,staleTime:5e3}}});$1.createRoot(document.getElementById("root")).render(v.jsx(cn.StrictMode,{children:v.jsx(s5,{children:v.jsx(wx,{client:o5,children:v.jsx(j2,{router:i5})})})}));export{J0 as $,B0 as A,D2 as B,O2 as C,A5 as D,q2 as E,s_ as F,Wu as G,Q2 as H,K2 as I,U2 as J,L2 as K,Md as L,E5 as M,z2 as N,l_ as O,h5 as P,rd as Q,$2 as R,I2 as S,Pu as T,Oy as U,C5 as V,e3 as W,Rd as X,F0 as Y,X0 as Z,Ad as _,_5 as a,G2 as a0,P2 as a1,t_ as a2,p5 as a3,Z0 as a4,O5 as a5,ur as a6,qf as a7,Js as a8,bx as a9,pt as aa,Rt as ab,t0 as ac,Xe as ad,w5 as ae,N5 as af,y5 as ag,Y2 as ah,Cd as ai,V2 as aj,b5 as ak,cn as al,Wy as am,v5 as an,x5 as ao,Z2 as ap,hv as aq,d5 as ar,tr as as,d3 as at,Yt as au,p3 as av,e2 as aw,rr as ax,X1 as ay,qe as b,Me as c,g5 as d,N2 as e,mv as f,S5 as g,fr as h,j5 as i,v as j,b_ as k,z5 as l,M5 as m,ke as n,xn as o,o3 as p,Ge as q,$ as r,m5 as s,H2 as t,yd as u,D5 as v,T5 as w,i_ as x,R5 as y,cr as z}; diff --git a/frontend/dist/assets/index-GVsa8kqq.js b/frontend/dist/assets/index-GVsa8kqq.js deleted file mode 100644 index 34422b9..0000000 --- a/frontend/dist/assets/index-GVsa8kqq.js +++ /dev/null @@ -1 +0,0 @@ -import{aA as r}from"./index-l6kyKCL9.js";var o=r();export{o as r}; diff --git a/frontend/dist/assets/index-l6kyKCL9.js b/frontend/dist/assets/index-l6kyKCL9.js deleted file mode 100644 index f405435..0000000 --- a/frontend/dist/assets/index-l6kyKCL9.js +++ /dev/null @@ -1,269 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/SystemDrawer-C9kOlIQQ.js","assets/refresh-cw-BV1qZMSR.js","assets/file-text-nO0jfgun.js","assets/search-C1Zs6OOf.js","assets/shield-CVm2T_f5.js","assets/arrow-right-DSSXd-8y.js","assets/clock-QfyF1ur_.js","assets/external-link-ClFd8iN1.js","assets/cloud-download-YEWUSwEY.js","assets/power-DcJoPDeQ.js","assets/CommandPalette-lAUVtU0H.js","assets/index-GVsa8kqq.js","assets/LiveAreaChartImpl-Cl5sD7ID.js","assets/string-DoZi9Vij.js","assets/ModelsView-Cwn5DMTg.js","assets/JobsBar-HflSaqor.js","assets/code-xml-QQtsFWSM.js","assets/zap-CnZftvep.js","assets/chevron-down-C5keVSfm.js","assets/layers-BFKjGswj.js","assets/ConnectView-Cs6CoHdG.js","assets/AgentView-fp_5ftXX.js","assets/SectionLabel-zEOM9wM3.js","assets/KonsoleView-BFFWN-AY.js","assets/GuideView-DJzyVTu7.js","assets/AuftragsbuchView-BElnexXf.js","assets/hammer-Cl-GywsD.js","assets/IdeenAnsicht-DewuOeHX.js","assets/SkillsView-C1JOUS_h.js","assets/ChronikView-CVJajeyU.js","assets/WissenView-1g9-Kr_d.js"])))=>i.map(i=>d[i]); -var L1=Object.defineProperty;var kp=a=>{throw TypeError(a)};var B1=(a,l,s)=>l in a?L1(a,l,{enumerable:!0,configurable:!0,writable:!0,value:s}):a[l]=s;var zu=(a,l,s)=>B1(a,typeof l!="symbol"?l+"":l,s),bf=(a,l,s)=>l.has(a)||kp("Cannot "+s);var C=(a,l,s)=>(bf(a,l,"read from private field"),s?s.call(a):l.get(a)),oe=(a,l,s)=>l.has(a)?kp("Cannot add the same private member more than once"):l instanceof WeakSet?l.add(a):l.set(a,s),ae=(a,l,s,r)=>(bf(a,l,"write to private field"),r?r.call(a,s):l.set(a,s),s),Ee=(a,l,s)=>(bf(a,l,"access private method"),s);var Nu=(a,l,s,r)=>({set _(o){ae(a,l,o,s)},get _(){return C(a,l,r)}});function H1(a,l){for(var s=0;sr[o]})}}}return Object.freeze(Object.defineProperty(a,Symbol.toStringTag,{value:"Module"}))}(function(){const l=document.createElement("link").relList;if(l&&l.supports&&l.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))r(o);new MutationObserver(o=>{for(const f of o)if(f.type==="childList")for(const h of f.addedNodes)h.tagName==="LINK"&&h.rel==="modulepreload"&&r(h)}).observe(document,{childList:!0,subtree:!0});function s(o){const f={};return o.integrity&&(f.integrity=o.integrity),o.referrerPolicy&&(f.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?f.credentials="include":o.crossOrigin==="anonymous"?f.credentials="omit":f.credentials="same-origin",f}function r(o){if(o.ep)return;o.ep=!0;const f=s(o);fetch(o.href,f)}})();function Py(a){return a&&a.__esModule&&Object.prototype.hasOwnProperty.call(a,"default")?a.default:a}var xf={exports:{}},Us={};/** - * @license React - * react-jsx-runtime.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var Up;function q1(){if(Up)return Us;Up=1;var a=Symbol.for("react.transitional.element"),l=Symbol.for("react.fragment");function s(r,o,f){var h=null;if(f!==void 0&&(h=""+f),o.key!==void 0&&(h=""+o.key),"key"in o){f={};for(var d in o)d!=="key"&&(f[d]=o[d])}else f=o;return o=f.ref,{$$typeof:a,type:r,key:h,ref:o!==void 0?o:null,props:f}}return Us.Fragment=l,Us.jsx=s,Us.jsxs=s,Us}var Lp;function G1(){return Lp||(Lp=1,xf.exports=q1()),xf.exports}var v=G1(),Sf={exports:{}},me={};/** - * @license React - * react.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var Bp;function Q1(){if(Bp)return me;Bp=1;var a=Symbol.for("react.transitional.element"),l=Symbol.for("react.portal"),s=Symbol.for("react.fragment"),r=Symbol.for("react.strict_mode"),o=Symbol.for("react.profiler"),f=Symbol.for("react.consumer"),h=Symbol.for("react.context"),d=Symbol.for("react.forward_ref"),p=Symbol.for("react.suspense"),g=Symbol.for("react.memo"),b=Symbol.for("react.lazy"),y=Symbol.for("react.activity"),S=Symbol.iterator;function _(M){return M===null||typeof M!="object"?null:(M=S&&M[S]||M["@@iterator"],typeof M=="function"?M:null)}var w={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},E=Object.assign,j={};function R(M,Z,te){this.props=M,this.context=Z,this.refs=j,this.updater=te||w}R.prototype.isReactComponent={},R.prototype.setState=function(M,Z){if(typeof M!="object"&&typeof M!="function"&&M!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,M,Z,"setState")},R.prototype.forceUpdate=function(M){this.updater.enqueueForceUpdate(this,M,"forceUpdate")};function z(){}z.prototype=R.prototype;function L(M,Z,te){this.props=M,this.context=Z,this.refs=j,this.updater=te||w}var D=L.prototype=new z;D.constructor=L,E(D,R.prototype),D.isPureReactComponent=!0;var X=Array.isArray;function q(){}var Y={H:null,A:null,T:null,S:null},J=Object.prototype.hasOwnProperty;function Q(M,Z,te){var ie=te.ref;return{$$typeof:a,type:M,key:Z,ref:ie!==void 0?ie:null,props:te}}function P(M,Z){return Q(M.type,Z,M.props)}function ee(M){return typeof M=="object"&&M!==null&&M.$$typeof===a}function I(M){var Z={"=":"=0",":":"=2"};return"$"+M.replace(/[=:]/g,function(te){return Z[te]})}var de=/\/+/g;function $(M,Z){return typeof M=="object"&&M!==null&&M.key!=null?I(""+M.key):Z.toString(36)}function ne(M){switch(M.status){case"fulfilled":return M.value;case"rejected":throw M.reason;default:switch(typeof M.status=="string"?M.then(q,q):(M.status="pending",M.then(function(Z){M.status==="pending"&&(M.status="fulfilled",M.value=Z)},function(Z){M.status==="pending"&&(M.status="rejected",M.reason=Z)})),M.status){case"fulfilled":return M.value;case"rejected":throw M.reason}}throw M}function B(M,Z,te,ie,he){var ge=typeof M;(ge==="undefined"||ge==="boolean")&&(M=null);var Ae=!1;if(M===null)Ae=!0;else switch(ge){case"bigint":case"string":case"number":Ae=!0;break;case"object":switch(M.$$typeof){case a:case l:Ae=!0;break;case b:return Ae=M._init,B(Ae(M._payload),Z,te,ie,he)}}if(Ae)return he=he(M),Ae=ie===""?"."+$(M,0):ie,X(he)?(te="",Ae!=null&&(te=Ae.replace(de,"$&/")+"/"),B(he,Z,te,"",function(_n){return _n})):he!=null&&(ee(he)&&(he=P(he,te+(he.key==null||M&&M.key===he.key?"":(""+he.key).replace(de,"$&/")+"/")+Ae)),Z.push(he)),1;Ae=0;var ot=ie===""?".":ie+":";if(X(M))for(var Ve=0;Ve>>1,Se=B[ce];if(0>>1;ceo(te,re))ieo(he,te)?(B[ce]=he,B[ie]=re,ce=ie):(B[ce]=te,B[Z]=re,ce=Z);else if(ieo(he,re))B[ce]=he,B[ie]=re,ce=ie;else break e}}return W}function o(B,W){var re=B.sortIndex-W.sortIndex;return re!==0?re:B.id-W.id}if(a.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var f=performance;a.unstable_now=function(){return f.now()}}else{var h=Date,d=h.now();a.unstable_now=function(){return h.now()-d}}var p=[],g=[],b=1,y=null,S=3,_=!1,w=!1,E=!1,j=!1,R=typeof setTimeout=="function"?setTimeout:null,z=typeof clearTimeout=="function"?clearTimeout:null,L=typeof setImmediate<"u"?setImmediate:null;function D(B){for(var W=s(g);W!==null;){if(W.callback===null)r(g);else if(W.startTime<=B)r(g),W.sortIndex=W.expirationTime,l(p,W);else break;W=s(g)}}function X(B){if(E=!1,D(B),!w)if(s(p)!==null)w=!0,q||(q=!0,I());else{var W=s(g);W!==null&&ne(X,W.startTime-B)}}var q=!1,Y=-1,J=5,Q=-1;function P(){return j?!0:!(a.unstable_now()-QB&&P());){var ce=y.callback;if(typeof ce=="function"){y.callback=null,S=y.priorityLevel;var Se=ce(y.expirationTime<=B);if(B=a.unstable_now(),typeof Se=="function"){y.callback=Se,D(B),W=!0;break t}y===s(p)&&r(p),D(B)}else r(p);y=s(p)}if(y!==null)W=!0;else{var M=s(g);M!==null&&ne(X,M.startTime-B),W=!1}}break e}finally{y=null,S=re,_=!1}W=void 0}}finally{W?I():q=!1}}}var I;if(typeof L=="function")I=function(){L(ee)};else if(typeof MessageChannel<"u"){var de=new MessageChannel,$=de.port2;de.port1.onmessage=ee,I=function(){$.postMessage(null)}}else I=function(){R(ee,0)};function ne(B,W){Y=R(function(){B(a.unstable_now())},W)}a.unstable_IdlePriority=5,a.unstable_ImmediatePriority=1,a.unstable_LowPriority=4,a.unstable_NormalPriority=3,a.unstable_Profiling=null,a.unstable_UserBlockingPriority=2,a.unstable_cancelCallback=function(B){B.callback=null},a.unstable_forceFrameRate=function(B){0>B||125ce?(B.sortIndex=re,l(g,B),s(p)===null&&B===s(g)&&(E?(z(Y),Y=-1):E=!0,ne(X,re-ce))):(B.sortIndex=Se,l(p,B),w||_||(w=!0,q||(q=!0,I()))),B},a.unstable_shouldYield=P,a.unstable_wrapCallback=function(B){var W=S;return function(){var re=S;S=W;try{return B.apply(this,arguments)}finally{S=re}}}})(Ef)),Ef}var Gp;function Y1(){return Gp||(Gp=1,wf.exports=V1()),wf.exports}var jf={exports:{}},yt={};/** - * @license React - * react-dom.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var Qp;function K1(){if(Qp)return yt;Qp=1;var a=cr();function l(p){var g="https://react.dev/errors/"+p;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(a)}catch(l){console.error(l)}}return a(),jf.exports=K1(),jf.exports}/** - * @license React - * react-dom-client.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var Yp;function Z1(){if(Yp)return Ls;Yp=1;var a=Y1(),l=cr(),s=X1();function r(e){var t="https://react.dev/errors/"+e;if(1Se||(e.current=ce[Se],ce[Se]=null,Se--)}function te(e,t){Se++,ce[Se]=e.current,e.current=t}var ie=M(null),he=M(null),ge=M(null),Ae=M(null);function ot(e,t){switch(te(ge,t),te(he,e),te(ie,null),t.nodeType){case 9:case 11:e=(e=t.documentElement)&&(e=e.namespaceURI)?lp(e):0;break;default:if(e=t.tagName,t=t.namespaceURI)t=lp(t),e=ip(t,e);else switch(e){case"svg":e=1;break;case"math":e=2;break;default:e=0}}Z(ie),te(ie,e)}function Ve(){Z(ie),Z(he),Z(ge)}function _n(e){e.memoizedState!==null&&te(Ae,e);var t=ie.current,n=ip(t,e.type);t!==n&&(te(he,e),te(ie,n))}function wn(e){he.current===e&&(Z(ie),Z(he)),Ae.current===e&&(Z(Ae),Ns._currentValue=re)}var Pn,Hi;function fn(e){if(Pn===void 0)try{throw Error()}catch(n){var t=n.stack.trim().match(/\n( *(at )?)/);Pn=t&&t[1]||"",Hi=-1)":-1u||T[i]!==k[u]){var G=` -`+T[i].replace(" at new "," at ");return e.displayName&&G.includes("")&&(G=G.replace("",e.displayName)),G}while(1<=i&&0<=u);break}}}finally{El=!1,Error.prepareStackTrace=n}return(n=e?e.displayName||e.name:"")?fn(n):""}function qi(e,t){switch(e.tag){case 26:case 27:case 5:return fn(e.type);case 16:return fn("Lazy");case 13:return e.child!==t&&t!==null?fn("Suspense Fallback"):fn("Suspense");case 19:return fn("SuspenseList");case 0:case 15:return an(e.type,!1);case 11:return an(e.type.render,!1);case 1:return an(e.type,!0);case 31:return fn("Activity");default:return""}}function En(e){try{var t="",n=null;do t+=qi(e,n),n=e,e=e.return;while(e);return t}catch(i){return` -Error generating stack: `+i.message+` -`+i.stack}}var Ga=Object.prototype.hasOwnProperty,Gi=a.unstable_scheduleCallback,Qi=a.unstable_cancelCallback,hr=a.unstable_shouldYield,it=a.unstable_requestPaint,Fe=a.unstable_now,jn=a.unstable_getCurrentPriorityLevel,Vi=a.unstable_ImmediatePriority,Ld=a.unstable_UserBlockingPriority,mr=a.unstable_NormalPriority,vv=a.unstable_LowPriority,Bd=a.unstable_IdlePriority,bv=a.log,xv=a.unstable_setDisableYieldValue,Yi=null,Nt=null;function In(e){if(typeof bv=="function"&&xv(e),Nt&&typeof Nt.setStrictMode=="function")try{Nt.setStrictMode(Yi,e)}catch{}}var Dt=Math.clz32?Math.clz32:wv,Sv=Math.log,_v=Math.LN2;function wv(e){return e>>>=0,e===0?32:31-(Sv(e)/_v|0)|0}var gr=256,pr=262144,yr=4194304;function Qa(e){var t=e&42;if(t!==0)return t;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:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return e&261888;case 262144:case 524288:case 1048576:case 2097152:return e&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return e&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return e}}function vr(e,t,n){var i=e.pendingLanes;if(i===0)return 0;var u=0,c=e.suspendedLanes,m=e.pingedLanes;e=e.warmLanes;var x=i&134217727;return x!==0?(i=x&~c,i!==0?u=Qa(i):(m&=x,m!==0?u=Qa(m):n||(n=x&~e,n!==0&&(u=Qa(n))))):(x=i&~c,x!==0?u=Qa(x):m!==0?u=Qa(m):n||(n=i&~e,n!==0&&(u=Qa(n)))),u===0?0:t!==0&&t!==u&&(t&c)===0&&(c=u&-u,n=t&-t,c>=n||c===32&&(n&4194048)!==0)?t:u}function Ki(e,t){return(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&t)===0}function Ev(e,t){switch(e){case 1:case 2:case 4:case 8:case 64:return t+250;case 16:case 32: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 t+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function Hd(){var e=yr;return yr<<=1,(yr&62914560)===0&&(yr=4194304),e}function ic(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function Xi(e,t){e.pendingLanes|=t,t!==268435456&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function jv(e,t,n,i,u,c){var m=e.pendingLanes;e.pendingLanes=n,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=n,e.entangledLanes&=n,e.errorRecoveryDisabledLanes&=n,e.shellSuspendCounter=0;var x=e.entanglements,T=e.expirationTimes,k=e.hiddenUpdates;for(n=m&~n;0"u")return null;try{return e.activeElement||e.body}catch{return e.body}}var zv=/[\n"\\]/g;function Zt(e){return e.replace(zv,function(t){return"\\"+t.charCodeAt(0).toString(16)+" "})}function fc(e,t,n,i,u,c,m,x){e.name="",m!=null&&typeof m!="function"&&typeof m!="symbol"&&typeof m!="boolean"?e.type=m:e.removeAttribute("type"),t!=null?m==="number"?(t===0&&e.value===""||e.value!=t)&&(e.value=""+Xt(t)):e.value!==""+Xt(t)&&(e.value=""+Xt(t)):m!=="submit"&&m!=="reset"||e.removeAttribute("value"),t!=null?dc(e,m,Xt(t)):n!=null?dc(e,m,Xt(n)):i!=null&&e.removeAttribute("value"),u==null&&c!=null&&(e.defaultChecked=!!c),u!=null&&(e.checked=u&&typeof u!="function"&&typeof u!="symbol"),x!=null&&typeof x!="function"&&typeof x!="symbol"&&typeof x!="boolean"?e.name=""+Xt(x):e.removeAttribute("name")}function Pd(e,t,n,i,u,c,m,x){if(c!=null&&typeof c!="function"&&typeof c!="symbol"&&typeof c!="boolean"&&(e.type=c),t!=null||n!=null){if(!(c!=="submit"&&c!=="reset"||t!=null)){oc(e);return}n=n!=null?""+Xt(n):"",t=t!=null?""+Xt(t):n,x||t===e.value||(e.value=t),e.defaultValue=t}i=i??u,i=typeof i!="function"&&typeof i!="symbol"&&!!i,e.checked=x?e.checked:!!i,e.defaultChecked=!!i,m!=null&&typeof m!="function"&&typeof m!="symbol"&&typeof m!="boolean"&&(e.name=m),oc(e)}function dc(e,t,n){t==="number"&&Sr(e.ownerDocument)===e||e.defaultValue===""+n||(e.defaultValue=""+n)}function Rl(e,t,n,i){if(e=e.options,t){t={};for(var u=0;u"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),yc=!1;if(An)try{var $i={};Object.defineProperty($i,"passive",{get:function(){yc=!0}}),window.addEventListener("test",$i,$i),window.removeEventListener("test",$i,$i)}catch{yc=!1}var ta=null,vc=null,wr=null;function ih(){if(wr)return wr;var e,t=vc,n=t.length,i,u="value"in ta?ta.value:ta.textContent,c=u.length;for(e=0;e=Ii),fh=" ",dh=!1;function hh(e,t){switch(e){case"keyup":return ib.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function mh(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var Ol=!1;function rb(e,t){switch(e){case"compositionend":return mh(t);case"keypress":return t.which!==32?null:(dh=!0,fh);case"textInput":return e=t.data,e===fh&&dh?null:e;default:return null}}function ub(e,t){if(Ol)return e==="compositionend"||!wc&&hh(e,t)?(e=ih(),wr=vc=ta=null,Ol=!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:n,offset:t-e};e=i}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=_h(n)}}function Eh(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?Eh(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function jh(e){e=e!=null&&e.ownerDocument!=null&&e.ownerDocument.defaultView!=null?e.ownerDocument.defaultView:window;for(var t=Sr(e.document);t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href=="string"}catch{n=!1}if(n)e=t.contentWindow;else break;t=Sr(e.document)}return t}function Tc(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")}var pb=An&&"documentMode"in document&&11>=document.documentMode,kl=null,Mc=null,as=null,Ac=!1;function Th(e,t,n){var i=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;Ac||kl==null||kl!==Sr(i)||(i=kl,"selectionStart"in i&&Tc(i)?i={start:i.selectionStart,end:i.selectionEnd}:(i=(i.ownerDocument&&i.ownerDocument.defaultView||window).getSelection(),i={anchorNode:i.anchorNode,anchorOffset:i.anchorOffset,focusNode:i.focusNode,focusOffset:i.focusOffset}),as&&ns(as,i)||(as=i,i=pu(Mc,"onSelect"),0>=m,u-=m,dn=1<<32-Dt(t)+u|n<ye?(we=se,se=null):we=se.sibling;var Re=U(N,se,O[ye],V);if(Re===null){se===null&&(se=we);break}e&&se&&Re.alternate===null&&t(N,se),A=c(Re,A,ye),Ce===null?ue=Re:Ce.sibling=Re,Ce=Re,se=we}if(ye===O.length)return n(N,se),Te&&Rn(N,ye),ue;if(se===null){for(;yeye?(we=se,se=null):we=se.sibling;var wa=U(N,se,Re.value,V);if(wa===null){se===null&&(se=we);break}e&&se&&wa.alternate===null&&t(N,se),A=c(wa,A,ye),Ce===null?ue=wa:Ce.sibling=wa,Ce=wa,se=we}if(Re.done)return n(N,se),Te&&Rn(N,ye),ue;if(se===null){for(;!Re.done;ye++,Re=O.next())Re=K(N,Re.value,V),Re!==null&&(A=c(Re,A,ye),Ce===null?ue=Re:Ce.sibling=Re,Ce=Re);return Te&&Rn(N,ye),ue}for(se=i(se);!Re.done;ye++,Re=O.next())Re=H(se,N,ye,Re.value,V),Re!==null&&(e&&Re.alternate!==null&&se.delete(Re.key===null?ye:Re.key),A=c(Re,A,ye),Ce===null?ue=Re:Ce.sibling=Re,Ce=Re);return e&&se.forEach(function(U1){return t(N,U1)}),Te&&Rn(N,ye),ue}function Be(N,A,O,V){if(typeof O=="object"&&O!==null&&O.type===E&&O.key===null&&(O=O.props.children),typeof O=="object"&&O!==null){switch(O.$$typeof){case _:e:{for(var ue=O.key;A!==null;){if(A.key===ue){if(ue=O.type,ue===E){if(A.tag===7){n(N,A.sibling),V=u(A,O.props.children),V.return=N,N=V;break e}}else if(A.elementType===ue||typeof ue=="object"&&ue!==null&&ue.$$typeof===J&&Ia(ue)===A.type){n(N,A.sibling),V=u(A,O.props),cs(V,O),V.return=N,N=V;break e}n(N,A);break}else t(N,A);A=A.sibling}O.type===E?(V=Ja(O.props.children,N.mode,V,O.key),V.return=N,N=V):(V=Dr(O.type,O.key,O.props,null,N.mode,V),cs(V,O),V.return=N,N=V)}return m(N);case w:e:{for(ue=O.key;A!==null;){if(A.key===ue)if(A.tag===4&&A.stateNode.containerInfo===O.containerInfo&&A.stateNode.implementation===O.implementation){n(N,A.sibling),V=u(A,O.children||[]),V.return=N,N=V;break e}else{n(N,A);break}else t(N,A);A=A.sibling}V=kc(O,N.mode,V),V.return=N,N=V}return m(N);case J:return O=Ia(O),Be(N,A,O,V)}if(ne(O))return le(N,A,O,V);if(I(O)){if(ue=I(O),typeof ue!="function")throw Error(r(150));return O=ue.call(O),fe(N,A,O,V)}if(typeof O.then=="function")return Be(N,A,qr(O),V);if(O.$$typeof===L)return Be(N,A,Ur(N,O),V);Gr(N,O)}return typeof O=="string"&&O!==""||typeof O=="number"||typeof O=="bigint"?(O=""+O,A!==null&&A.tag===6?(n(N,A.sibling),V=u(A,O),V.return=N,N=V):(n(N,A),V=Oc(O,N.mode,V),V.return=N,N=V),m(N)):n(N,A)}return function(N,A,O,V){try{us=0;var ue=Be(N,A,O,V);return Xl=null,ue}catch(se){if(se===Kl||se===Br)throw se;var Ce=kt(29,se,null,N.mode);return Ce.lanes=V,Ce.return=N,Ce}finally{}}}var tl=Fh(!0),$h=Fh(!1),sa=!1;function Zc(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function Jc(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,callbacks:null})}function ra(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function ua(e,t,n){var i=e.updateQueue;if(i===null)return null;if(i=i.shared,(ze&2)!==0){var u=i.pending;return u===null?t.next=t:(t.next=u.next,u.next=t),i.pending=t,t=Nr(e),Dh(e,null,n),t}return zr(e,i,t,n),Nr(e)}function os(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,(n&4194048)!==0)){var i=t.lanes;i&=e.pendingLanes,n|=i,t.lanes=n,Gd(e,n)}}function Fc(e,t){var n=e.updateQueue,i=e.alternate;if(i!==null&&(i=i.updateQueue,n===i)){var u=null,c=null;if(n=n.firstBaseUpdate,n!==null){do{var m={lane:n.lane,tag:n.tag,payload:n.payload,callback:null,next:null};c===null?u=c=m:c=c.next=m,n=n.next}while(n!==null);c===null?u=c=t:c=c.next=t}else u=c=t;n={baseState:i.baseState,firstBaseUpdate:u,lastBaseUpdate:c,shared:i.shared,callbacks:i.callbacks},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}var $c=!1;function fs(){if($c){var e=Yl;if(e!==null)throw e}}function ds(e,t,n,i){$c=!1;var u=e.updateQueue;sa=!1;var c=u.firstBaseUpdate,m=u.lastBaseUpdate,x=u.shared.pending;if(x!==null){u.shared.pending=null;var T=x,k=T.next;T.next=null,m===null?c=k:m.next=k,m=T;var G=e.alternate;G!==null&&(G=G.updateQueue,x=G.lastBaseUpdate,x!==m&&(x===null?G.firstBaseUpdate=k:x.next=k,G.lastBaseUpdate=T))}if(c!==null){var K=u.baseState;m=0,G=k=T=null,x=c;do{var U=x.lane&-536870913,H=U!==x.lane;if(H?(_e&U)===U:(i&U)===U){U!==0&&U===Vl&&($c=!0),G!==null&&(G=G.next={lane:0,tag:x.tag,payload:x.payload,callback:null,next:null});e:{var le=e,fe=x;U=t;var Be=n;switch(fe.tag){case 1:if(le=fe.payload,typeof le=="function"){K=le.call(Be,K,U);break e}K=le;break e;case 3:le.flags=le.flags&-65537|128;case 0:if(le=fe.payload,U=typeof le=="function"?le.call(Be,K,U):le,U==null)break e;K=y({},K,U);break e;case 2:sa=!0}}U=x.callback,U!==null&&(e.flags|=64,H&&(e.flags|=8192),H=u.callbacks,H===null?u.callbacks=[U]:H.push(U))}else H={lane:U,tag:x.tag,payload:x.payload,callback:x.callback,next:null},G===null?(k=G=H,T=K):G=G.next=H,m|=U;if(x=x.next,x===null){if(x=u.shared.pending,x===null)break;H=x,x=H.next,H.next=null,u.lastBaseUpdate=H,u.shared.pending=null}}while(!0);G===null&&(T=K),u.baseState=T,u.firstBaseUpdate=k,u.lastBaseUpdate=G,c===null&&(u.shared.lanes=0),ha|=m,e.lanes=m,e.memoizedState=K}}function Wh(e,t){if(typeof e!="function")throw Error(r(191,e));e.call(t)}function Ph(e,t){var n=e.callbacks;if(n!==null)for(e.callbacks=null,e=0;ec?c:8;var m=B.T,x={};B.T=x,po(e,!1,t,n);try{var T=u(),k=B.S;if(k!==null&&k(x,T),T!==null&&typeof T=="object"&&typeof T.then=="function"){var G=jb(T,i);gs(e,t,G,qt(e))}else gs(e,t,i,qt(e))}catch(K){gs(e,t,{then:function(){},status:"rejected",reason:K},qt())}finally{W.p=c,m!==null&&x.types!==null&&(m.types=x.types),B.T=m}}function zb(){}function mo(e,t,n,i){if(e.tag!==5)throw Error(r(476));var u=Rm(e).queue;Cm(e,u,t,re,n===null?zb:function(){return zm(e),n(i)})}function Rm(e){var t=e.memoizedState;if(t!==null)return t;t={memoizedState:re,baseState:re,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:On,lastRenderedState:re},next:null};var n={};return t.next={memoizedState:n,baseState:n,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:On,lastRenderedState:n},next:null},e.memoizedState=t,e=e.alternate,e!==null&&(e.memoizedState=t),t}function zm(e){var t=Rm(e);t.next===null&&(t=e.alternate.memoizedState),gs(e,t.next.queue,{},qt())}function go(){return ht(Ns)}function Nm(){return et().memoizedState}function Dm(){return et().memoizedState}function Nb(e){for(var t=e.return;t!==null;){switch(t.tag){case 24:case 3:var n=qt();e=ra(n);var i=ua(t,e,n);i!==null&&(At(i,t,n),os(i,t,n)),t={cache:Vc()},e.payload=t;return}t=t.return}}function Db(e,t,n){var i=qt();n={lane:i,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null},Wr(e)?km(t,n):(n=Nc(e,t,n,i),n!==null&&(At(n,e,i),Um(n,t,i)))}function Om(e,t,n){var i=qt();gs(e,t,n,i)}function gs(e,t,n,i){var u={lane:i,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null};if(Wr(e))km(t,u);else{var c=e.alternate;if(e.lanes===0&&(c===null||c.lanes===0)&&(c=t.lastRenderedReducer,c!==null))try{var m=t.lastRenderedState,x=c(m,n);if(u.hasEagerState=!0,u.eagerState=x,Ot(x,m))return zr(e,t,u,0),He===null&&Rr(),!1}catch{}finally{}if(n=Nc(e,t,u,i),n!==null)return At(n,e,i),Um(n,t,i),!0}return!1}function po(e,t,n,i){if(i={lane:2,revertLane:Jo(),gesture:null,action:i,hasEagerState:!1,eagerState:null,next:null},Wr(e)){if(t)throw Error(r(479))}else t=Nc(e,n,i,2),t!==null&&At(t,e,2)}function Wr(e){var t=e.alternate;return e===pe||t!==null&&t===pe}function km(e,t){Jl=Yr=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function Um(e,t,n){if((n&4194048)!==0){var i=t.lanes;i&=e.pendingLanes,n|=i,t.lanes=n,Gd(e,n)}}var ps={readContext:ht,use:Zr,useCallback:$e,useContext:$e,useEffect:$e,useImperativeHandle:$e,useLayoutEffect:$e,useInsertionEffect:$e,useMemo:$e,useReducer:$e,useRef:$e,useState:$e,useDebugValue:$e,useDeferredValue:$e,useTransition:$e,useSyncExternalStore:$e,useId:$e,useHostTransitionStatus:$e,useFormState:$e,useActionState:$e,useOptimistic:$e,useMemoCache:$e,useCacheRefresh:$e};ps.useEffectEvent=$e;var Lm={readContext:ht,use:Zr,useCallback:function(e,t){return xt().memoizedState=[e,t===void 0?null:t],e},useContext:ht,useEffect:xm,useImperativeHandle:function(e,t,n){n=n!=null?n.concat([e]):null,Fr(4194308,4,Em.bind(null,t,e),n)},useLayoutEffect:function(e,t){return Fr(4194308,4,e,t)},useInsertionEffect:function(e,t){Fr(4,2,e,t)},useMemo:function(e,t){var n=xt();t=t===void 0?null:t;var i=e();if(nl){In(!0);try{e()}finally{In(!1)}}return n.memoizedState=[i,t],i},useReducer:function(e,t,n){var i=xt();if(n!==void 0){var u=n(t);if(nl){In(!0);try{n(t)}finally{In(!1)}}}else u=t;return i.memoizedState=i.baseState=u,e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:u},i.queue=e,e=e.dispatch=Db.bind(null,pe,e),[i.memoizedState,e]},useRef:function(e){var t=xt();return e={current:e},t.memoizedState=e},useState:function(e){e=uo(e);var t=e.queue,n=Om.bind(null,pe,t);return t.dispatch=n,[e.memoizedState,n]},useDebugValue:fo,useDeferredValue:function(e,t){var n=xt();return ho(n,e,t)},useTransition:function(){var e=uo(!1);return e=Cm.bind(null,pe,e.queue,!0,!1),xt().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,t,n){var i=pe,u=xt();if(Te){if(n===void 0)throw Error(r(407));n=n()}else{if(n=t(),He===null)throw Error(r(349));(_e&127)!==0||lm(i,t,n)}u.memoizedState=n;var c={value:n,getSnapshot:t};return u.queue=c,xm(sm.bind(null,i,c,e),[e]),i.flags|=2048,$l(9,{destroy:void 0},im.bind(null,i,c,n,t),null),n},useId:function(){var e=xt(),t=He.identifierPrefix;if(Te){var n=hn,i=dn;n=(i&~(1<<32-Dt(i)-1)).toString(32)+n,t="_"+t+"R_"+n,n=Kr++,0<\/script>",c=c.removeChild(c.firstChild);break;case"select":c=typeof i.is=="string"?m.createElement("select",{is:i.is}):m.createElement("select"),i.multiple?c.multiple=!0:i.size&&(c.size=i.size);break;default:c=typeof i.is=="string"?m.createElement(u,{is:i.is}):m.createElement(u)}}c[ft]=t,c[_t]=i;e:for(m=t.child;m!==null;){if(m.tag===5||m.tag===6)c.appendChild(m.stateNode);else if(m.tag!==4&&m.tag!==27&&m.child!==null){m.child.return=m,m=m.child;continue}if(m===t)break e;for(;m.sibling===null;){if(m.return===null||m.return===t)break e;m=m.return}m.sibling.return=m.return,m=m.sibling}t.stateNode=c;e:switch(gt(c,u,i),u){case"button":case"input":case"select":case"textarea":i=!!i.autoFocus;break e;case"img":i=!0;break e;default:i=!1}i&&Un(t)}}return Ke(t),Ro(t,t.type,e===null?null:e.memoizedProps,t.pendingProps,n),null;case 6:if(e&&t.stateNode!=null)e.memoizedProps!==i&&Un(t);else{if(typeof i!="string"&&t.stateNode===null)throw Error(r(166));if(e=ge.current,Gl(t)){if(e=t.stateNode,n=t.memoizedProps,i=null,u=dt,u!==null)switch(u.tag){case 27:case 5:i=u.memoizedProps}e[ft]=t,e=!!(e.nodeValue===n||i!==null&&i.suppressHydrationWarning===!0||np(e.nodeValue,n)),e||la(t,!0)}else e=yu(e).createTextNode(i),e[ft]=t,t.stateNode=e}return Ke(t),null;case 31:if(n=t.memoizedState,e===null||e.memoizedState!==null){if(i=Gl(t),n!==null){if(e===null){if(!i)throw Error(r(318));if(e=t.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(r(557));e[ft]=t}else Fa(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;Ke(t),e=!1}else n=Hc(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=n),e=!0;if(!e)return t.flags&256?(Lt(t),t):(Lt(t),null);if((t.flags&128)!==0)throw Error(r(558))}return Ke(t),null;case 13:if(i=t.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(u=Gl(t),i!==null&&i.dehydrated!==null){if(e===null){if(!u)throw Error(r(318));if(u=t.memoizedState,u=u!==null?u.dehydrated:null,!u)throw Error(r(317));u[ft]=t}else Fa(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;Ke(t),u=!1}else u=Hc(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=u),u=!0;if(!u)return t.flags&256?(Lt(t),t):(Lt(t),null)}return Lt(t),(t.flags&128)!==0?(t.lanes=n,t):(n=i!==null,e=e!==null&&e.memoizedState!==null,n&&(i=t.child,u=null,i.alternate!==null&&i.alternate.memoizedState!==null&&i.alternate.memoizedState.cachePool!==null&&(u=i.alternate.memoizedState.cachePool.pool),c=null,i.memoizedState!==null&&i.memoizedState.cachePool!==null&&(c=i.memoizedState.cachePool.pool),c!==u&&(i.flags|=2048)),n!==e&&n&&(t.child.flags|=8192),nu(t,t.updateQueue),Ke(t),null);case 4:return Ve(),e===null&&Po(t.stateNode.containerInfo),Ke(t),null;case 10:return Nn(t.type),Ke(t),null;case 19:if(Z(Ie),i=t.memoizedState,i===null)return Ke(t),null;if(u=(t.flags&128)!==0,c=i.rendering,c===null)if(u)vs(i,!1);else{if(We!==0||e!==null&&(e.flags&128)!==0)for(e=t.child;e!==null;){if(c=Vr(e),c!==null){for(t.flags|=128,vs(i,!1),e=c.updateQueue,t.updateQueue=e,nu(t,e),t.subtreeFlags=0,e=n,n=t.child;n!==null;)Oh(n,e),n=n.sibling;return te(Ie,Ie.current&1|2),Te&&Rn(t,i.treeForkCount),t.child}e=e.sibling}i.tail!==null&&Fe()>ru&&(t.flags|=128,u=!0,vs(i,!1),t.lanes=4194304)}else{if(!u)if(e=Vr(c),e!==null){if(t.flags|=128,u=!0,e=e.updateQueue,t.updateQueue=e,nu(t,e),vs(i,!0),i.tail===null&&i.tailMode==="hidden"&&!c.alternate&&!Te)return Ke(t),null}else 2*Fe()-i.renderingStartTime>ru&&n!==536870912&&(t.flags|=128,u=!0,vs(i,!1),t.lanes=4194304);i.isBackwards?(c.sibling=t.child,t.child=c):(e=i.last,e!==null?e.sibling=c:t.child=c,i.last=c)}return i.tail!==null?(e=i.tail,i.rendering=e,i.tail=e.sibling,i.renderingStartTime=Fe(),e.sibling=null,n=Ie.current,te(Ie,u?n&1|2:n&1),Te&&Rn(t,i.treeForkCount),e):(Ke(t),null);case 22:case 23:return Lt(t),Pc(),i=t.memoizedState!==null,e!==null?e.memoizedState!==null!==i&&(t.flags|=8192):i&&(t.flags|=8192),i?(n&536870912)!==0&&(t.flags&128)===0&&(Ke(t),t.subtreeFlags&6&&(t.flags|=8192)):Ke(t),n=t.updateQueue,n!==null&&nu(t,n.retryQueue),n=null,e!==null&&e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(n=e.memoizedState.cachePool.pool),i=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(i=t.memoizedState.cachePool.pool),i!==n&&(t.flags|=2048),e!==null&&Z(Pa),null;case 24:return n=null,e!==null&&(n=e.memoizedState.cache),t.memoizedState.cache!==n&&(t.flags|=2048),Nn(tt),Ke(t),null;case 25:return null;case 30:return null}throw Error(r(156,t.tag))}function Bb(e,t){switch(Lc(t),t.tag){case 1:return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return Nn(tt),Ve(),e=t.flags,(e&65536)!==0&&(e&128)===0?(t.flags=e&-65537|128,t):null;case 26:case 27:case 5:return wn(t),null;case 31:if(t.memoizedState!==null){if(Lt(t),t.alternate===null)throw Error(r(340));Fa()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 13:if(Lt(t),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(r(340));Fa()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return Z(Ie),null;case 4:return Ve(),null;case 10:return Nn(t.type),null;case 22:case 23:return Lt(t),Pc(),e!==null&&Z(Pa),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 24:return Nn(tt),null;case 25:return null;default:return null}}function rg(e,t){switch(Lc(t),t.tag){case 3:Nn(tt),Ve();break;case 26:case 27:case 5:wn(t);break;case 4:Ve();break;case 31:t.memoizedState!==null&&Lt(t);break;case 13:Lt(t);break;case 19:Z(Ie);break;case 10:Nn(t.type);break;case 22:case 23:Lt(t),Pc(),e!==null&&Z(Pa);break;case 24:Nn(tt)}}function bs(e,t){try{var n=t.updateQueue,i=n!==null?n.lastEffect:null;if(i!==null){var u=i.next;n=u;do{if((n.tag&e)===e){i=void 0;var c=n.create,m=n.inst;i=c(),m.destroy=i}n=n.next}while(n!==u)}}catch(x){ke(t,t.return,x)}}function fa(e,t,n){try{var i=t.updateQueue,u=i!==null?i.lastEffect:null;if(u!==null){var c=u.next;i=c;do{if((i.tag&e)===e){var m=i.inst,x=m.destroy;if(x!==void 0){m.destroy=void 0,u=t;var T=n,k=x;try{k()}catch(G){ke(u,T,G)}}}i=i.next}while(i!==c)}}catch(G){ke(t,t.return,G)}}function ug(e){var t=e.updateQueue;if(t!==null){var n=e.stateNode;try{Ph(t,n)}catch(i){ke(e,e.return,i)}}}function cg(e,t,n){n.props=al(e.type,e.memoizedProps),n.state=e.memoizedState;try{n.componentWillUnmount()}catch(i){ke(e,t,i)}}function xs(e,t){try{var n=e.ref;if(n!==null){switch(e.tag){case 26:case 27:case 5:var i=e.stateNode;break;case 30:i=e.stateNode;break;default:i=e.stateNode}typeof n=="function"?e.refCleanup=n(i):n.current=i}}catch(u){ke(e,t,u)}}function mn(e,t){var n=e.ref,i=e.refCleanup;if(n!==null)if(typeof i=="function")try{i()}catch(u){ke(e,t,u)}finally{e.refCleanup=null,e=e.alternate,e!=null&&(e.refCleanup=null)}else if(typeof n=="function")try{n(null)}catch(u){ke(e,t,u)}else n.current=null}function og(e){var t=e.type,n=e.memoizedProps,i=e.stateNode;try{e:switch(t){case"button":case"input":case"select":case"textarea":n.autoFocus&&i.focus();break e;case"img":n.src?i.src=n.src:n.srcSet&&(i.srcset=n.srcSet)}}catch(u){ke(e,e.return,u)}}function zo(e,t,n){try{var i=e.stateNode;s1(i,e.type,n,t),i[_t]=t}catch(u){ke(e,e.return,u)}}function fg(e){return e.tag===5||e.tag===3||e.tag===26||e.tag===27&&va(e.type)||e.tag===4}function No(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||fg(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.tag===27&&va(e.type)||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 Do(e,t,n){var i=e.tag;if(i===5||i===6)e=e.stateNode,t?(n.nodeType===9?n.body:n.nodeName==="HTML"?n.ownerDocument.body:n).insertBefore(e,t):(t=n.nodeType===9?n.body:n.nodeName==="HTML"?n.ownerDocument.body:n,t.appendChild(e),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=Mn));else if(i!==4&&(i===27&&va(e.type)&&(n=e.stateNode,t=null),e=e.child,e!==null))for(Do(e,t,n),e=e.sibling;e!==null;)Do(e,t,n),e=e.sibling}function au(e,t,n){var i=e.tag;if(i===5||i===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(i!==4&&(i===27&&va(e.type)&&(n=e.stateNode),e=e.child,e!==null))for(au(e,t,n),e=e.sibling;e!==null;)au(e,t,n),e=e.sibling}function dg(e){var t=e.stateNode,n=e.memoizedProps;try{for(var i=e.type,u=t.attributes;u.length;)t.removeAttributeNode(u[0]);gt(t,i,n),t[ft]=e,t[_t]=n}catch(c){ke(e,e.return,c)}}var Ln=!1,lt=!1,Oo=!1,hg=typeof WeakSet=="function"?WeakSet:Set,ut=null;function Hb(e,t){if(e=e.containerInfo,tf=Eu,e=jh(e),Tc(e)){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{n=(n=e.ownerDocument)&&n.defaultView||window;var i=n.getSelection&&n.getSelection();if(i&&i.rangeCount!==0){n=i.anchorNode;var u=i.anchorOffset,c=i.focusNode;i=i.focusOffset;try{n.nodeType,c.nodeType}catch{n=null;break e}var m=0,x=-1,T=-1,k=0,G=0,K=e,U=null;t:for(;;){for(var H;K!==n||u!==0&&K.nodeType!==3||(x=m+u),K!==c||i!==0&&K.nodeType!==3||(T=m+i),K.nodeType===3&&(m+=K.nodeValue.length),(H=K.firstChild)!==null;)U=K,K=H;for(;;){if(K===e)break t;if(U===n&&++k===u&&(x=m),U===c&&++G===i&&(T=m),(H=K.nextSibling)!==null)break;K=U,U=K.parentNode}K=H}n=x===-1||T===-1?null:{start:x,end:T}}else n=null}n=n||{start:0,end:0}}else n=null;for(nf={focusedElem:e,selectionRange:n},Eu=!1,ut=t;ut!==null;)if(t=ut,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,ut=e;else for(;ut!==null;){switch(t=ut,c=t.alternate,e=t.flags,t.tag){case 0:if((e&4)!==0&&(e=t.updateQueue,e=e!==null?e.events:null,e!==null))for(n=0;n title"))),gt(c,i,n),c[ft]=e,rt(c),i=c;break e;case"link":var m=bp("link","href",u).get(i+(n.href||""));if(m){for(var x=0;xBe&&(m=Be,Be=fe,fe=m);var N=wh(x,fe),A=wh(x,Be);if(N&&A&&(H.rangeCount!==1||H.anchorNode!==N.node||H.anchorOffset!==N.offset||H.focusNode!==A.node||H.focusOffset!==A.offset)){var O=K.createRange();O.setStart(N.node,N.offset),H.removeAllRanges(),fe>Be?(H.addRange(O),H.extend(A.node,A.offset)):(O.setEnd(A.node,A.offset),H.addRange(O))}}}}for(K=[],H=x;H=H.parentNode;)H.nodeType===1&&K.push({element:H,left:H.scrollLeft,top:H.scrollTop});for(typeof x.focus=="function"&&x.focus(),x=0;xn?32:n,B.T=null,n=Go,Go=null;var c=ga,m=Qn;if(st=0,ti=ga=null,Qn=0,(ze&6)!==0)throw Error(r(331));var x=ze;if(ze|=4,Eg(c.current),Sg(c,c.current,m,n),ze=x,Ts(0,!1),Nt&&typeof Nt.onPostCommitFiberRoot=="function")try{Nt.onPostCommitFiberRoot(Yi,c)}catch{}return!0}finally{W.p=u,B.T=i,Qg(e,t)}}function Yg(e,t,n){t=Ft(n,t),t=xo(e.stateNode,t,2),e=ua(e,t,2),e!==null&&(Xi(e,2),gn(e))}function ke(e,t,n){if(e.tag===3)Yg(e,e,n);else for(;t!==null;){if(t.tag===3){Yg(t,e,n);break}else if(t.tag===1){var i=t.stateNode;if(typeof t.type.getDerivedStateFromError=="function"||typeof i.componentDidCatch=="function"&&(ma===null||!ma.has(i))){e=Ft(n,e),n=Km(2),i=ua(t,n,2),i!==null&&(Xm(n,i,t,e),Xi(i,2),gn(i));break}}t=t.return}}function Ko(e,t,n){var i=e.pingCache;if(i===null){i=e.pingCache=new Qb;var u=new Set;i.set(t,u)}else u=i.get(t),u===void 0&&(u=new Set,i.set(t,u));u.has(n)||(Lo=!0,u.add(n),e=Zb.bind(null,e,t,n),t.then(e,e))}function Zb(e,t,n){var i=e.pingCache;i!==null&&i.delete(t),e.pingedLanes|=e.suspendedLanes&n,e.warmLanes&=~n,He===e&&(_e&n)===n&&(We===4||We===3&&(_e&62914560)===_e&&300>Fe()-su?(ze&2)===0&&ni(e,0):Bo|=n,ei===_e&&(ei=0)),gn(e)}function Kg(e,t){t===0&&(t=Hd()),e=Za(e,t),e!==null&&(Xi(e,t),gn(e))}function Jb(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),Kg(e,n)}function Fb(e,t){var n=0;switch(e.tag){case 31:case 13:var i=e.stateNode,u=e.memoizedState;u!==null&&(n=u.retryLane);break;case 19:i=e.stateNode;break;case 22:i=e.stateNode._retryCache;break;default:throw Error(r(314))}i!==null&&i.delete(t),Kg(e,n)}function $b(e,t){return Gi(e,t)}var hu=null,li=null,Xo=!1,mu=!1,Zo=!1,ya=0;function gn(e){e!==li&&e.next===null&&(li===null?hu=li=e:li=li.next=e),mu=!0,Xo||(Xo=!0,Pb())}function Ts(e,t){if(!Zo&&mu){Zo=!0;do for(var n=!1,i=hu;i!==null;){if(e!==0){var u=i.pendingLanes;if(u===0)var c=0;else{var m=i.suspendedLanes,x=i.pingedLanes;c=(1<<31-Dt(42|e)+1)-1,c&=u&~(m&~x),c=c&201326741?c&201326741|1:c?c|2:0}c!==0&&(n=!0,Fg(i,c))}else c=_e,c=vr(i,i===He?c:0,i.cancelPendingCommit!==null||i.timeoutHandle!==-1),(c&3)===0||Ki(i,c)||(n=!0,Fg(i,c));i=i.next}while(n);Zo=!1}}function Wb(){Xg()}function Xg(){mu=Xo=!1;var e=0;ya!==0&&u1()&&(e=ya);for(var t=Fe(),n=null,i=hu;i!==null;){var u=i.next,c=Zg(i,t);c===0?(i.next=null,n===null?hu=u:n.next=u,u===null&&(li=n)):(n=i,(e!==0||(c&3)!==0)&&(mu=!0)),i=u}st!==0&&st!==5||Ts(e),ya!==0&&(ya=0)}function Zg(e,t){for(var n=e.suspendedLanes,i=e.pingedLanes,u=e.expirationTimes,c=e.pendingLanes&-62914561;0x)break;var G=T.transferSize,K=T.initiatorType;G&&ap(K)&&(T=T.responseEnd,m+=G*(T"u"?null:document;function gp(e,t,n){var i=ii;if(i&&typeof t=="string"&&t){var u=Zt(t);u='link[rel="'+e+'"][href="'+u+'"]',typeof n=="string"&&(u+='[crossorigin="'+n+'"]'),mp.has(u)||(mp.add(u),e={rel:e,crossOrigin:n,href:t},i.querySelector(u)===null&&(t=i.createElement("link"),gt(t,"link",e),rt(t),i.head.appendChild(t)))}}function y1(e){Vn.D(e),gp("dns-prefetch",e,null)}function v1(e,t){Vn.C(e,t),gp("preconnect",e,t)}function b1(e,t,n){Vn.L(e,t,n);var i=ii;if(i&&e&&t){var u='link[rel="preload"][as="'+Zt(t)+'"]';t==="image"&&n&&n.imageSrcSet?(u+='[imagesrcset="'+Zt(n.imageSrcSet)+'"]',typeof n.imageSizes=="string"&&(u+='[imagesizes="'+Zt(n.imageSizes)+'"]')):u+='[href="'+Zt(e)+'"]';var c=u;switch(t){case"style":c=si(e);break;case"script":c=ri(e)}tn.has(c)||(e=y({rel:"preload",href:t==="image"&&n&&n.imageSrcSet?void 0:e,as:t},n),tn.set(c,e),i.querySelector(u)!==null||t==="style"&&i.querySelector(Rs(c))||t==="script"&&i.querySelector(zs(c))||(t=i.createElement("link"),gt(t,"link",e),rt(t),i.head.appendChild(t)))}}function x1(e,t){Vn.m(e,t);var n=ii;if(n&&e){var i=t&&typeof t.as=="string"?t.as:"script",u='link[rel="modulepreload"][as="'+Zt(i)+'"][href="'+Zt(e)+'"]',c=u;switch(i){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":c=ri(e)}if(!tn.has(c)&&(e=y({rel:"modulepreload",href:e},t),tn.set(c,e),n.querySelector(u)===null)){switch(i){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(n.querySelector(zs(c)))return}i=n.createElement("link"),gt(i,"link",e),rt(i),n.head.appendChild(i)}}}function S1(e,t,n){Vn.S(e,t,n);var i=ii;if(i&&e){var u=Al(i).hoistableStyles,c=si(e);t=t||"default";var m=u.get(c);if(!m){var x={loading:0,preload:null};if(m=i.querySelector(Rs(c)))x.loading=5;else{e=y({rel:"stylesheet",href:e,"data-precedence":t},n),(n=tn.get(c))&&of(e,n);var T=m=i.createElement("link");rt(T),gt(T,"link",e),T._p=new Promise(function(k,G){T.onload=k,T.onerror=G}),T.addEventListener("load",function(){x.loading|=1}),T.addEventListener("error",function(){x.loading|=2}),x.loading|=4,bu(m,t,i)}m={type:"stylesheet",instance:m,count:1,state:x},u.set(c,m)}}}function _1(e,t){Vn.X(e,t);var n=ii;if(n&&e){var i=Al(n).hoistableScripts,u=ri(e),c=i.get(u);c||(c=n.querySelector(zs(u)),c||(e=y({src:e,async:!0},t),(t=tn.get(u))&&ff(e,t),c=n.createElement("script"),rt(c),gt(c,"link",e),n.head.appendChild(c)),c={type:"script",instance:c,count:1,state:null},i.set(u,c))}}function w1(e,t){Vn.M(e,t);var n=ii;if(n&&e){var i=Al(n).hoistableScripts,u=ri(e),c=i.get(u);c||(c=n.querySelector(zs(u)),c||(e=y({src:e,async:!0,type:"module"},t),(t=tn.get(u))&&ff(e,t),c=n.createElement("script"),rt(c),gt(c,"link",e),n.head.appendChild(c)),c={type:"script",instance:c,count:1,state:null},i.set(u,c))}}function pp(e,t,n,i){var u=(u=ge.current)?vu(u):null;if(!u)throw Error(r(446));switch(e){case"meta":case"title":return null;case"style":return typeof n.precedence=="string"&&typeof n.href=="string"?(t=si(n.href),n=Al(u).hoistableStyles,i=n.get(t),i||(i={type:"style",instance:null,count:0,state:null},n.set(t,i)),i):{type:"void",instance:null,count:0,state:null};case"link":if(n.rel==="stylesheet"&&typeof n.href=="string"&&typeof n.precedence=="string"){e=si(n.href);var c=Al(u).hoistableStyles,m=c.get(e);if(m||(u=u.ownerDocument||u,m={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},c.set(e,m),(c=u.querySelector(Rs(e)))&&!c._p&&(m.instance=c,m.state.loading=5),tn.has(e)||(n={rel:"preload",as:"style",href:n.href,crossOrigin:n.crossOrigin,integrity:n.integrity,media:n.media,hrefLang:n.hrefLang,referrerPolicy:n.referrerPolicy},tn.set(e,n),c||E1(u,e,n,m.state))),t&&i===null)throw Error(r(528,""));return m}if(t&&i!==null)throw Error(r(529,""));return null;case"script":return t=n.async,n=n.src,typeof n=="string"&&t&&typeof t!="function"&&typeof t!="symbol"?(t=ri(n),n=Al(u).hoistableScripts,i=n.get(t),i||(i={type:"script",instance:null,count:0,state:null},n.set(t,i)),i):{type:"void",instance:null,count:0,state:null};default:throw Error(r(444,e))}}function si(e){return'href="'+Zt(e)+'"'}function Rs(e){return'link[rel="stylesheet"]['+e+"]"}function yp(e){return y({},e,{"data-precedence":e.precedence,precedence:null})}function E1(e,t,n,i){e.querySelector('link[rel="preload"][as="style"]['+t+"]")?i.loading=1:(t=e.createElement("link"),i.preload=t,t.addEventListener("load",function(){return i.loading|=1}),t.addEventListener("error",function(){return i.loading|=2}),gt(t,"link",n),rt(t),e.head.appendChild(t))}function ri(e){return'[src="'+Zt(e)+'"]'}function zs(e){return"script[async]"+e}function vp(e,t,n){if(t.count++,t.instance===null)switch(t.type){case"style":var i=e.querySelector('style[data-href~="'+Zt(n.href)+'"]');if(i)return t.instance=i,rt(i),i;var u=y({},n,{"data-href":n.href,"data-precedence":n.precedence,href:null,precedence:null});return i=(e.ownerDocument||e).createElement("style"),rt(i),gt(i,"style",u),bu(i,n.precedence,e),t.instance=i;case"stylesheet":u=si(n.href);var c=e.querySelector(Rs(u));if(c)return t.state.loading|=4,t.instance=c,rt(c),c;i=yp(n),(u=tn.get(u))&&of(i,u),c=(e.ownerDocument||e).createElement("link"),rt(c);var m=c;return m._p=new Promise(function(x,T){m.onload=x,m.onerror=T}),gt(c,"link",i),t.state.loading|=4,bu(c,n.precedence,e),t.instance=c;case"script":return c=ri(n.src),(u=e.querySelector(zs(c)))?(t.instance=u,rt(u),u):(i=n,(u=tn.get(c))&&(i=y({},n),ff(i,u)),e=e.ownerDocument||e,u=e.createElement("script"),rt(u),gt(u,"link",i),e.head.appendChild(u),t.instance=u);case"void":return null;default:throw Error(r(443,t.type))}else t.type==="stylesheet"&&(t.state.loading&4)===0&&(i=t.instance,t.state.loading|=4,bu(i,n.precedence,e));return t.instance}function bu(e,t,n){for(var i=n.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),u=i.length?i[i.length-1]:null,c=u,m=0;m title"):null)}function j1(e,t,n){if(n===1||t.itemProp!=null)return!1;switch(e){case"meta":case"title":return!0;case"style":if(typeof t.precedence!="string"||typeof t.href!="string"||t.href==="")break;return!0;case"link":if(typeof t.rel!="string"||typeof t.href!="string"||t.href===""||t.onLoad||t.onError)break;switch(t.rel){case"stylesheet":return e=t.disabled,typeof t.precedence=="string"&&e==null;default:return!0}case"script":if(t.async&&typeof t.async!="function"&&typeof t.async!="symbol"&&!t.onLoad&&!t.onError&&t.src&&typeof t.src=="string")return!0}return!1}function Sp(e){return!(e.type==="stylesheet"&&(e.state.loading&3)===0)}function T1(e,t,n,i){if(n.type==="stylesheet"&&(typeof i.media!="string"||matchMedia(i.media).matches!==!1)&&(n.state.loading&4)===0){if(n.instance===null){var u=si(i.href),c=t.querySelector(Rs(u));if(c){t=c._p,t!==null&&typeof t=="object"&&typeof t.then=="function"&&(e.count++,e=Su.bind(e),t.then(e,e)),n.state.loading|=4,n.instance=c,rt(c);return}c=t.ownerDocument||t,i=yp(i),(u=tn.get(u))&&of(i,u),c=c.createElement("link"),rt(c);var m=c;m._p=new Promise(function(x,T){m.onload=x,m.onerror=T}),gt(c,"link",i),n.instance=c}e.stylesheets===null&&(e.stylesheets=new Map),e.stylesheets.set(n,t),(t=n.state.preload)&&(n.state.loading&3)===0&&(e.count++,n=Su.bind(e),t.addEventListener("load",n),t.addEventListener("error",n))}}var df=0;function M1(e,t){return e.stylesheets&&e.count===0&&wu(e,e.stylesheets),0df?50:800)+t);return e.unsuspend=n,function(){e.unsuspend=null,clearTimeout(i),clearTimeout(u)}}:null}function Su(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)wu(this,this.stylesheets);else if(this.unsuspend){var e=this.unsuspend;this.unsuspend=null,e()}}}var _u=null;function wu(e,t){e.stylesheets=null,e.unsuspend!==null&&(e.count++,_u=new Map,t.forEach(A1,e),_u=null,Su.call(e))}function A1(e,t){if(!(t.state.loading&4)){var n=_u.get(e);if(n)var i=n.get(null);else{n=new Map,_u.set(e,n);for(var u=e.querySelectorAll("link[data-precedence],style[data-precedence]"),c=0;c"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(a)}catch(l){console.error(l)}}return a(),_f.exports=Z1(),_f.exports}var F1=J1();const $1=Py(F1);var or=class{constructor(){this.listeners=new Set,this.subscribe=this.subscribe.bind(this)}subscribe(a){return this.listeners.add(a),this.onSubscribe(),()=>{this.listeners.delete(a),this.onUnsubscribe()}}hasListeners(){return this.listeners.size>0}onSubscribe(){}onUnsubscribe(){}},cl,Aa,bi,Qy,W1=(Qy=class extends or{constructor(){super();oe(this,cl);oe(this,Aa);oe(this,bi);ae(this,bi,l=>{if(typeof window<"u"&&window.addEventListener){const s=()=>l();return window.addEventListener("visibilitychange",s,!1),()=>{window.removeEventListener("visibilitychange",s)}}})}onSubscribe(){C(this,Aa)||this.setEventListener(C(this,bi))}onUnsubscribe(){var l;this.hasListeners()||((l=C(this,Aa))==null||l.call(this),ae(this,Aa,void 0))}setEventListener(l){var s;ae(this,bi,l),(s=C(this,Aa))==null||s.call(this),ae(this,Aa,l(r=>{typeof r=="boolean"?this.setFocused(r):this.onFocus()}))}setFocused(l){C(this,cl)!==l&&(ae(this,cl,l),this.onFocus())}onFocus(){const l=this.isFocused();this.listeners.forEach(s=>{s(l)})}isFocused(){var l;return typeof C(this,cl)=="boolean"?C(this,cl):((l=globalThis.document)==null?void 0:l.visibilityState)!=="hidden"}},cl=new WeakMap,Aa=new WeakMap,bi=new WeakMap,Qy),hd=new W1,P1={setTimeout:(a,l)=>setTimeout(a,l),clearTimeout:a=>clearTimeout(a),setInterval:(a,l)=>setInterval(a,l),clearInterval:a=>clearInterval(a)},Ca,dd,Vy,I1=(Vy=class{constructor(){oe(this,Ca,P1);oe(this,dd,!1)}setTimeoutProvider(a){ae(this,Ca,a)}setTimeout(a,l){return C(this,Ca).setTimeout(a,l)}clearTimeout(a){C(this,Ca).clearTimeout(a)}setInterval(a,l){return C(this,Ca).setInterval(a,l)}clearInterval(a){C(this,Ca).clearInterval(a)}},Ca=new WeakMap,dd=new WeakMap,Vy),rl=new I1;function ex(a){setTimeout(a,0)}var tx=typeof window>"u"||"Deno"in globalThis;function Rt(){}function nx(a,l){return typeof a=="function"?a(l):a}function Hf(a){return typeof a=="number"&&a>=0&&a!==1/0}function Iy(a,l){return Math.max(a+(l||0)-Date.now(),0)}function La(a,l){return typeof a=="function"?a(l):a}function Qt(a,l){return typeof a=="function"?a(l):a}function Xp(a,l){const{type:s="all",exact:r,fetchStatus:o,predicate:f,queryKey:h,stale:d}=a;if(h){if(r){if(l.queryHash!==md(h,l.options))return!1}else if(!Ws(l.queryKey,h))return!1}if(s!=="all"){const p=l.isActive();if(s==="active"&&!p||s==="inactive"&&p)return!1}return!(typeof d=="boolean"&&l.isStale()!==d||o&&o!==l.state.fetchStatus||f&&!f(l))}function Zp(a,l){const{exact:s,status:r,predicate:o,mutationKey:f}=a;if(f){if(!l.options.mutationKey)return!1;if(s){if($s(l.options.mutationKey)!==$s(f))return!1}else if(!Ws(l.options.mutationKey,f))return!1}return!(r&&l.state.status!==r||o&&!o(l))}function md(a,l){return((l==null?void 0:l.queryKeyHashFn)||$s)(a)}function $s(a){return JSON.stringify(a,(l,s)=>Gf(s)?Object.keys(s).sort().reduce((r,o)=>(r[o]=s[o],r),{}):s)}function Ws(a,l){return a===l?!0:typeof a!=typeof l?!1:a&&l&&typeof a=="object"&&typeof l=="object"?Object.keys(l).every(s=>Ws(a[s],l[s])):!1}var ax=Object.prototype.hasOwnProperty;function e0(a,l,s=0){if(a===l)return a;if(s>500)return l;const r=Jp(a)&&Jp(l);if(!r&&!(Gf(a)&&Gf(l)))return l;const f=(r?a:Object.keys(a)).length,h=r?l:Object.keys(l),d=h.length,p=r?new Array(d):{};let g=0;for(let b=0;b{rl.setTimeout(l,a)})}function Qf(a,l,s){return typeof s.structuralSharing=="function"?s.structuralSharing(a,l):s.structuralSharing!==!1?e0(a,l):l}function ix(a,l,s=0){const r=[...a,l];return s&&r.length>s?r.slice(1):r}function sx(a,l,s=0){const r=[l,...a];return s&&r.length>s?r.slice(0,-1):r}var gd=Symbol();function t0(a,l){return!a.queryFn&&(l!=null&&l.initialPromise)?()=>l.initialPromise:!a.queryFn||a.queryFn===gd?()=>Promise.reject(new Error(`Missing queryFn: '${a.queryHash}'`)):a.queryFn}function n0(a,l){return typeof a=="function"?a(...l):!!a}function rx(a,l,s){let r=!1,o;return Object.defineProperty(a,"signal",{enumerable:!0,get:()=>(o??(o=l()),r||(r=!0,o.aborted?s():o.addEventListener("abort",s,{once:!0})),o)}),a}var Ps=(()=>{let a=()=>tx;return{isServer(){return a()},setIsServer(l){a=l}}})();function Vf(){let a,l;const s=new Promise((o,f)=>{a=o,l=f});s.status="pending",s.catch(()=>{});function r(o){Object.assign(s,o),delete s.resolve,delete s.reject}return s.resolve=o=>{r({status:"fulfilled",value:o}),a(o)},s.reject=o=>{r({status:"rejected",reason:o}),l(o)},s}var ux=ex;function cx(){let a=[],l=0,s=d=>{d()},r=d=>{d()},o=ux;const f=d=>{l?a.push(d):o(()=>{s(d)})},h=()=>{const d=a;a=[],d.length&&o(()=>{r(()=>{d.forEach(p=>{s(p)})})})};return{batch:d=>{let p;l++;try{p=d()}finally{l--,l||h()}return p},batchCalls:d=>(...p)=>{f(()=>{d(...p)})},schedule:f,setNotifyFunction:d=>{s=d},setBatchNotifyFunction:d=>{r=d},setScheduler:d=>{o=d}}}var pt=cx(),xi,Ra,Si,Yy,ox=(Yy=class extends or{constructor(){super();oe(this,xi,!0);oe(this,Ra);oe(this,Si);ae(this,Si,l=>{if(typeof window<"u"&&window.addEventListener){const s=()=>l(!0),r=()=>l(!1);return window.addEventListener("online",s,!1),window.addEventListener("offline",r,!1),()=>{window.removeEventListener("online",s),window.removeEventListener("offline",r)}}})}onSubscribe(){C(this,Ra)||this.setEventListener(C(this,Si))}onUnsubscribe(){var l;this.hasListeners()||((l=C(this,Ra))==null||l.call(this),ae(this,Ra,void 0))}setEventListener(l){var s;ae(this,Si,l),(s=C(this,Ra))==null||s.call(this),ae(this,Ra,l(this.setOnline.bind(this)))}setOnline(l){C(this,xi)!==l&&(ae(this,xi,l),this.listeners.forEach(r=>{r(l)}))}isOnline(){return C(this,xi)}},xi=new WeakMap,Ra=new WeakMap,Si=new WeakMap,Yy),Yu=new ox;function fx(a){return Math.min(1e3*2**a,3e4)}function a0(a){return(a??"online")==="online"?Yu.isOnline():!0}var Yf=class extends Error{constructor(a){super("CancelledError"),this.revert=a==null?void 0:a.revert,this.silent=a==null?void 0:a.silent}};function l0(a){let l=!1,s=0,r;const o=Vf(),f=()=>o.status!=="pending",h=E=>{var j;if(!f()){const R=new Yf(E);S(R),(j=a.onCancel)==null||j.call(a,R)}},d=()=>{l=!0},p=()=>{l=!1},g=()=>hd.isFocused()&&(a.networkMode==="always"||Yu.isOnline())&&a.canRun(),b=()=>a0(a.networkMode)&&a.canRun(),y=E=>{f()||(r==null||r(),o.resolve(E))},S=E=>{f()||(r==null||r(),o.reject(E))},_=()=>new Promise(E=>{var j;r=R=>{(f()||g())&&E(R)},(j=a.onPause)==null||j.call(a)}).then(()=>{var E;r=void 0,f()||(E=a.onContinue)==null||E.call(a)}),w=()=>{if(f())return;let E;const j=s===0?a.initialPromise:void 0;try{E=j??a.fn()}catch(R){E=Promise.reject(R)}Promise.resolve(E).then(y).catch(R=>{var q;if(f())return;const z=a.retry??(Ps.isServer()?0:3),L=a.retryDelay??fx,D=typeof L=="function"?L(s,R):L,X=z===!0||typeof z=="number"&&sg()?void 0:_()).then(()=>{l?S(R):w()})})};return{promise:o,status:()=>o.status,cancel:h,continue:()=>(r==null||r(),o),cancelRetry:d,continueRetry:p,canStart:b,start:()=>(b()?w():_().then(w),o)}}var ol,Ky,i0=(Ky=class{constructor(){oe(this,ol)}destroy(){this.clearGcTimeout()}scheduleGc(){this.clearGcTimeout(),Hf(this.gcTime)&&ae(this,ol,rl.setTimeout(()=>{this.optionalRemove()},this.gcTime))}updateGcTime(a){this.gcTime=Math.max(this.gcTime||0,a??(Ps.isServer()?1/0:300*1e3))}clearGcTimeout(){C(this,ol)!==void 0&&(rl.clearTimeout(C(this,ol)),ae(this,ol,void 0))}},ol=new WeakMap,Ky);function dx(a){return{onFetch:(l,s)=>{var b,y,S,_,w;const r=l.options,o=(S=(y=(b=l.fetchOptions)==null?void 0:b.meta)==null?void 0:y.fetchMore)==null?void 0:S.direction,f=((_=l.state.data)==null?void 0:_.pages)||[],h=((w=l.state.data)==null?void 0:w.pageParams)||[];let d={pages:[],pageParams:[]},p=0;const g=async()=>{let E=!1;const j=L=>{rx(L,()=>l.signal,()=>E=!0)},R=t0(l.options,l.fetchOptions),z=async(L,D,X)=>{if(E)return Promise.reject(l.signal.reason);if(D==null&&L.pages.length)return Promise.resolve(L);const Y=(()=>{const ee={client:l.client,queryKey:l.queryKey,pageParam:D,direction:X?"backward":"forward",meta:l.options.meta};return j(ee),ee})(),J=await R(Y),{maxPages:Q}=l.options,P=X?sx:ix;return{pages:P(L.pages,J,Q),pageParams:P(L.pageParams,D,Q)}};if(o&&f.length){const L=o==="backward",D=L?hx:$p,X={pages:f,pageParams:h},q=D(r,X);d=await z(X,q,L)}else{const L=a??f.length;do{const D=p===0?h[0]??r.initialPageParam:$p(r,d);if(p>0&&D==null)break;d=await z(d,D),p++}while(p{var E,j;return(j=(E=l.options).persister)==null?void 0:j.call(E,g,{client:l.client,queryKey:l.queryKey,meta:l.options.meta,signal:l.signal},s)}:l.fetchFn=g}}}function $p(a,{pages:l,pageParams:s}){const r=l.length-1;return l.length>0?a.getNextPageParam(l[r],l,s[r],s):void 0}function hx(a,{pages:l,pageParams:s}){var r;return l.length>0?(r=a.getPreviousPageParam)==null?void 0:r.call(a,l[0],l,s[0],s):void 0}var _i,fl,wi,nn,dl,ct,lr,hl,Gt,s0,Kn,Xy,mx=(Xy=class extends i0{constructor(l){super();oe(this,Gt);oe(this,_i);oe(this,fl);oe(this,wi);oe(this,nn);oe(this,dl);oe(this,ct);oe(this,lr);oe(this,hl);ae(this,hl,!1),ae(this,lr,l.defaultOptions),this.setOptions(l.options),this.observers=[],ae(this,dl,l.client),ae(this,nn,C(this,dl).getQueryCache()),this.queryKey=l.queryKey,this.queryHash=l.queryHash,ae(this,fl,Pp(this.options)),this.state=l.state??C(this,fl),this.scheduleGc()}get meta(){return this.options.meta}get queryType(){return C(this,_i)}get promise(){var l;return(l=C(this,ct))==null?void 0:l.promise}setOptions(l){if(this.options={...C(this,lr),...l},l!=null&&l._type&&ae(this,_i,l._type),this.updateGcTime(this.options.gcTime),this.state&&this.state.data===void 0){const s=Pp(this.options);s.data!==void 0&&(this.setState(Wp(s.data,s.dataUpdatedAt)),ae(this,fl,s))}}optionalRemove(){!this.observers.length&&this.state.fetchStatus==="idle"&&C(this,nn).remove(this)}setData(l,s){const r=Qf(this.state.data,l,this.options);return Ee(this,Gt,Kn).call(this,{data:r,type:"success",dataUpdatedAt:s==null?void 0:s.updatedAt,manual:s==null?void 0:s.manual}),r}setState(l){Ee(this,Gt,Kn).call(this,{type:"setState",state:l})}cancel(l){var r,o;const s=(r=C(this,ct))==null?void 0:r.promise;return(o=C(this,ct))==null||o.cancel(l),s?s.then(Rt).catch(Rt):Promise.resolve()}destroy(){super.destroy(),this.cancel({silent:!0})}get resetState(){return C(this,fl)}reset(){this.destroy(),this.setState(this.resetState)}isActive(){return this.observers.some(l=>Qt(l.options.enabled,this)!==!1)}isDisabled(){return this.getObserversCount()>0?!this.isActive():this.options.queryFn===gd||!this.isFetched()}isFetched(){return this.state.dataUpdateCount+this.state.errorUpdateCount>0}isStatic(){return this.getObserversCount()>0?this.observers.some(l=>La(l.options.staleTime,this)==="static"):!1}isStale(){return this.getObserversCount()>0?this.observers.some(l=>l.getCurrentResult().isStale):this.state.data===void 0||this.state.isInvalidated}isStaleByTime(l=0){return this.state.data===void 0?!0:l==="static"?!1:this.state.isInvalidated?!0:!Iy(this.state.dataUpdatedAt,l)}onFocus(){var s;const l=this.observers.find(r=>r.shouldFetchOnWindowFocus());l==null||l.refetch({cancelRefetch:!1}),(s=C(this,ct))==null||s.continue()}onOnline(){var s;const l=this.observers.find(r=>r.shouldFetchOnReconnect());l==null||l.refetch({cancelRefetch:!1}),(s=C(this,ct))==null||s.continue()}addObserver(l){this.observers.includes(l)||(this.observers.push(l),this.clearGcTimeout(),C(this,nn).notify({type:"observerAdded",query:this,observer:l}))}removeObserver(l){this.observers.includes(l)&&(this.observers=this.observers.filter(s=>s!==l),this.observers.length||(C(this,ct)&&(C(this,hl)||Ee(this,Gt,s0).call(this)?C(this,ct).cancel({revert:!0}):C(this,ct).cancelRetry()),this.scheduleGc()),C(this,nn).notify({type:"observerRemoved",query:this,observer:l}))}getObserversCount(){return this.observers.length}invalidate(){this.state.isInvalidated||Ee(this,Gt,Kn).call(this,{type:"invalidate"})}async fetch(l,s){var g,b,y,S,_,w,E,j,R,z,L;if(this.state.fetchStatus!=="idle"&&((g=C(this,ct))==null?void 0:g.status())!=="rejected"){if(this.state.data!==void 0&&(s!=null&&s.cancelRefetch))this.cancel({silent:!0});else if(C(this,ct))return C(this,ct).continueRetry(),C(this,ct).promise}if(l&&this.setOptions(l),!this.options.queryFn){const D=this.observers.find(X=>X.options.queryFn);D&&this.setOptions(D.options)}const r=new AbortController,o=D=>{Object.defineProperty(D,"signal",{enumerable:!0,get:()=>(ae(this,hl,!0),r.signal)})},f=()=>{const D=t0(this.options,s),q=(()=>{const Y={client:C(this,dl),queryKey:this.queryKey,meta:this.meta};return o(Y),Y})();return ae(this,hl,!1),this.options.persister?this.options.persister(D,q,this):D(q)},d=(()=>{const D={fetchOptions:s,options:this.options,queryKey:this.queryKey,client:C(this,dl),state:this.state,fetchFn:f};return o(D),D})(),p=C(this,_i)==="infinite"?dx(this.options.pages):this.options.behavior;p==null||p.onFetch(d,this),ae(this,wi,this.state),(this.state.fetchStatus==="idle"||this.state.fetchMeta!==((b=d.fetchOptions)==null?void 0:b.meta))&&Ee(this,Gt,Kn).call(this,{type:"fetch",meta:(y=d.fetchOptions)==null?void 0:y.meta}),ae(this,ct,l0({initialPromise:s==null?void 0:s.initialPromise,fn:d.fetchFn,onCancel:D=>{D instanceof Yf&&D.revert&&this.setState({...C(this,wi),fetchStatus:"idle"}),r.abort()},onFail:(D,X)=>{Ee(this,Gt,Kn).call(this,{type:"failed",failureCount:D,error:X})},onPause:()=>{Ee(this,Gt,Kn).call(this,{type:"pause"})},onContinue:()=>{Ee(this,Gt,Kn).call(this,{type:"continue"})},retry:d.options.retry,retryDelay:d.options.retryDelay,networkMode:d.options.networkMode,canRun:()=>!0}));try{const D=await C(this,ct).start();if(D===void 0)throw new Error(`${this.queryHash} data is undefined`);return this.setData(D),(_=(S=C(this,nn).config).onSuccess)==null||_.call(S,D,this),(E=(w=C(this,nn).config).onSettled)==null||E.call(w,D,this.state.error,this),D}catch(D){if(D instanceof Yf){if(D.silent)return C(this,ct).promise;if(D.revert){if(this.state.data===void 0)throw D;return this.state.data}}throw Ee(this,Gt,Kn).call(this,{type:"error",error:D}),(R=(j=C(this,nn).config).onError)==null||R.call(j,D,this),(L=(z=C(this,nn).config).onSettled)==null||L.call(z,this.state.data,D,this),D}finally{this.scheduleGc()}}},_i=new WeakMap,fl=new WeakMap,wi=new WeakMap,nn=new WeakMap,dl=new WeakMap,ct=new WeakMap,lr=new WeakMap,hl=new WeakMap,Gt=new WeakSet,s0=function(){return this.state.fetchStatus==="paused"&&this.state.status==="pending"},Kn=function(l){const s=r=>{switch(l.type){case"failed":return{...r,fetchFailureCount:l.failureCount,fetchFailureReason:l.error};case"pause":return{...r,fetchStatus:"paused"};case"continue":return{...r,fetchStatus:"fetching"};case"fetch":return{...r,...r0(r.data,this.options),fetchMeta:l.meta??null};case"success":const o={...r,...Wp(l.data,l.dataUpdatedAt),dataUpdateCount:r.dataUpdateCount+1,...!l.manual&&{fetchStatus:"idle",fetchFailureCount:0,fetchFailureReason:null}};return ae(this,wi,l.manual?o:void 0),o;case"error":const f=l.error;return{...r,error:f,errorUpdateCount:r.errorUpdateCount+1,errorUpdatedAt:Date.now(),fetchFailureCount:r.fetchFailureCount+1,fetchFailureReason:f,fetchStatus:"idle",status:"error",isInvalidated:!0};case"invalidate":return{...r,isInvalidated:!0};case"setState":return{...r,...l.state}}};this.state=s(this.state),pt.batch(()=>{this.observers.forEach(r=>{r.onQueryUpdate()}),C(this,nn).notify({query:this,type:"updated",action:l})})},Xy);function r0(a,l){return{fetchFailureCount:0,fetchFailureReason:null,fetchStatus:a0(l.networkMode)?"fetching":"paused",...a===void 0&&{error:null,status:"pending"}}}function Wp(a,l){return{data:a,dataUpdatedAt:l??Date.now(),error:null,isInvalidated:!1,status:"success"}}function Pp(a){const l=typeof a.initialData=="function"?a.initialData():a.initialData,s=l!==void 0,r=s?typeof a.initialDataUpdatedAt=="function"?a.initialDataUpdatedAt():a.initialDataUpdatedAt:0;return{data:l,dataUpdateCount:0,dataUpdatedAt:s?r??Date.now():0,error:null,errorUpdateCount:0,errorUpdatedAt:0,fetchFailureCount:0,fetchFailureReason:null,fetchMeta:null,isInvalidated:!1,status:s?"success":"pending",fetchStatus:"idle"}}var Ct,Me,ir,St,ml,Ei,Xn,za,sr,ji,Ti,gl,pl,Na,Mi,Ne,Ys,Kf,Xf,Zf,Jf,Ff,$f,Wf,u0,Zy,gx=(Zy=class extends or{constructor(l,s){super();oe(this,Ne);oe(this,Ct);oe(this,Me);oe(this,ir);oe(this,St);oe(this,ml);oe(this,Ei);oe(this,Xn);oe(this,za);oe(this,sr);oe(this,ji);oe(this,Ti);oe(this,gl);oe(this,pl);oe(this,Na);oe(this,Mi,new Set);this.options=s,ae(this,Ct,l),ae(this,za,null),ae(this,Xn,Vf()),this.bindMethods(),this.setOptions(s)}bindMethods(){this.refetch=this.refetch.bind(this)}onSubscribe(){this.listeners.size===1&&(C(this,Me).addObserver(this),Ip(C(this,Me),this.options)?Ee(this,Ne,Ys).call(this):this.updateResult(),Ee(this,Ne,Jf).call(this))}onUnsubscribe(){this.hasListeners()||this.destroy()}shouldFetchOnReconnect(){return Pf(C(this,Me),this.options,this.options.refetchOnReconnect)}shouldFetchOnWindowFocus(){return Pf(C(this,Me),this.options,this.options.refetchOnWindowFocus)}destroy(){this.listeners=new Set,Ee(this,Ne,Ff).call(this),Ee(this,Ne,$f).call(this),C(this,Me).removeObserver(this)}setOptions(l){const s=this.options,r=C(this,Me);if(this.options=C(this,Ct).defaultQueryOptions(l),this.options.enabled!==void 0&&typeof this.options.enabled!="boolean"&&typeof this.options.enabled!="function"&&typeof Qt(this.options.enabled,C(this,Me))!="boolean")throw new Error("Expected enabled to be a boolean or a callback that returns a boolean");Ee(this,Ne,Wf).call(this),C(this,Me).setOptions(this.options),s._defaulted&&!qf(this.options,s)&&C(this,Ct).getQueryCache().notify({type:"observerOptionsUpdated",query:C(this,Me),observer:this});const o=this.hasListeners();o&&ey(C(this,Me),r,this.options,s)&&Ee(this,Ne,Ys).call(this),this.updateResult(),o&&(C(this,Me)!==r||Qt(this.options.enabled,C(this,Me))!==Qt(s.enabled,C(this,Me))||La(this.options.staleTime,C(this,Me))!==La(s.staleTime,C(this,Me)))&&Ee(this,Ne,Kf).call(this);const f=Ee(this,Ne,Xf).call(this);o&&(C(this,Me)!==r||Qt(this.options.enabled,C(this,Me))!==Qt(s.enabled,C(this,Me))||f!==C(this,Na))&&Ee(this,Ne,Zf).call(this,f)}getOptimisticResult(l){const s=C(this,Ct).getQueryCache().build(C(this,Ct),l),r=this.createResult(s,l);return yx(this,r)&&(ae(this,St,r),ae(this,Ei,this.options),ae(this,ml,C(this,Me).state)),r}getCurrentResult(){return C(this,St)}trackResult(l,s){return new Proxy(l,{get:(r,o)=>(this.trackProp(o),s==null||s(o),o==="promise"&&(this.trackProp("data"),!this.options.experimental_prefetchInRender&&C(this,Xn).status==="pending"&&C(this,Xn).reject(new Error("experimental_prefetchInRender feature flag is not enabled"))),Reflect.get(r,o))})}trackProp(l){C(this,Mi).add(l)}getCurrentQuery(){return C(this,Me)}refetch({...l}={}){return this.fetch({...l})}fetchOptimistic(l){const s=C(this,Ct).defaultQueryOptions(l),r=C(this,Ct).getQueryCache().build(C(this,Ct),s);return r.fetch().then(()=>this.createResult(r,s))}fetch(l){return Ee(this,Ne,Ys).call(this,{...l,cancelRefetch:l.cancelRefetch??!0}).then(()=>(this.updateResult(),C(this,St)))}createResult(l,s){var Q;const r=C(this,Me),o=this.options,f=C(this,St),h=C(this,ml),d=C(this,Ei),g=l!==r?l.state:C(this,ir),{state:b}=l;let y={...b},S=!1,_;if(s._optimisticResults){const P=this.hasListeners(),ee=!P&&Ip(l,s),I=P&&ey(l,r,s,o);(ee||I)&&(y={...y,...r0(b.data,l.options)}),s._optimisticResults==="isRestoring"&&(y.fetchStatus="idle")}let{error:w,errorUpdatedAt:E,status:j}=y;_=y.data;let R=!1;if(s.placeholderData!==void 0&&_===void 0&&j==="pending"){let P;f!=null&&f.isPlaceholderData&&s.placeholderData===(d==null?void 0:d.placeholderData)?(P=f.data,R=!0):P=typeof s.placeholderData=="function"?s.placeholderData((Q=C(this,Ti))==null?void 0:Q.state.data,C(this,Ti)):s.placeholderData,P!==void 0&&(j="success",_=Qf(f==null?void 0:f.data,P,s),S=!0)}if(s.select&&_!==void 0&&!R)if(f&&_===(h==null?void 0:h.data)&&s.select===C(this,sr))_=C(this,ji);else try{ae(this,sr,s.select),_=s.select(_),_=Qf(f==null?void 0:f.data,_,s),ae(this,ji,_),ae(this,za,null)}catch(P){ae(this,za,P)}C(this,za)&&(w=C(this,za),_=C(this,ji),E=Date.now(),j="error");const z=y.fetchStatus==="fetching",L=j==="pending",D=j==="error",X=L&&z,q=_!==void 0,J={status:j,fetchStatus:y.fetchStatus,isPending:L,isSuccess:j==="success",isError:D,isInitialLoading:X,isLoading:X,data:_,dataUpdatedAt:y.dataUpdatedAt,error:w,errorUpdatedAt:E,failureCount:y.fetchFailureCount,failureReason:y.fetchFailureReason,errorUpdateCount:y.errorUpdateCount,isFetched:l.isFetched(),isFetchedAfterMount:y.dataUpdateCount>g.dataUpdateCount||y.errorUpdateCount>g.errorUpdateCount,isFetching:z,isRefetching:z&&!L,isLoadingError:D&&!q,isPaused:y.fetchStatus==="paused",isPlaceholderData:S,isRefetchError:D&&q,isStale:pd(l,s),refetch:this.refetch,promise:C(this,Xn),isEnabled:Qt(s.enabled,l)!==!1};if(this.options.experimental_prefetchInRender){const P=J.data!==void 0,ee=J.status==="error"&&!P,I=ne=>{ee?ne.reject(J.error):P&&ne.resolve(J.data)},de=()=>{const ne=ae(this,Xn,J.promise=Vf());I(ne)},$=C(this,Xn);switch($.status){case"pending":l.queryHash===r.queryHash&&I($);break;case"fulfilled":(ee||J.data!==$.value)&&de();break;case"rejected":(!ee||J.error!==$.reason)&&de();break}}return J}updateResult(){const l=C(this,St),s=this.createResult(C(this,Me),this.options);if(ae(this,ml,C(this,Me).state),ae(this,Ei,this.options),C(this,ml).data!==void 0&&ae(this,Ti,C(this,Me)),qf(s,l))return;ae(this,St,s);const r=()=>{if(!l)return!0;const{notifyOnChangeProps:o}=this.options,f=typeof o=="function"?o():o;if(f==="all"||!f&&!C(this,Mi).size)return!0;const h=new Set(f??C(this,Mi));return this.options.throwOnError&&h.add("error"),Object.keys(C(this,St)).some(d=>{const p=d;return C(this,St)[p]!==l[p]&&h.has(p)})};Ee(this,Ne,u0).call(this,{listeners:r()})}onQueryUpdate(){this.updateResult(),this.hasListeners()&&Ee(this,Ne,Jf).call(this)}},Ct=new WeakMap,Me=new WeakMap,ir=new WeakMap,St=new WeakMap,ml=new WeakMap,Ei=new WeakMap,Xn=new WeakMap,za=new WeakMap,sr=new WeakMap,ji=new WeakMap,Ti=new WeakMap,gl=new WeakMap,pl=new WeakMap,Na=new WeakMap,Mi=new WeakMap,Ne=new WeakSet,Ys=function(l){Ee(this,Ne,Wf).call(this);let s=C(this,Me).fetch(this.options,l);return l!=null&&l.throwOnError||(s=s.catch(Rt)),s},Kf=function(){Ee(this,Ne,Ff).call(this);const l=La(this.options.staleTime,C(this,Me));if(Ps.isServer()||C(this,St).isStale||!Hf(l))return;const r=Iy(C(this,St).dataUpdatedAt,l)+1;ae(this,gl,rl.setTimeout(()=>{C(this,St).isStale||this.updateResult()},r))},Xf=function(){return(typeof this.options.refetchInterval=="function"?this.options.refetchInterval(C(this,Me)):this.options.refetchInterval)??!1},Zf=function(l){Ee(this,Ne,$f).call(this),ae(this,Na,l),!(Ps.isServer()||Qt(this.options.enabled,C(this,Me))===!1||!Hf(C(this,Na))||C(this,Na)===0)&&ae(this,pl,rl.setInterval(()=>{(this.options.refetchIntervalInBackground||hd.isFocused())&&Ee(this,Ne,Ys).call(this)},C(this,Na)))},Jf=function(){Ee(this,Ne,Kf).call(this),Ee(this,Ne,Zf).call(this,Ee(this,Ne,Xf).call(this))},Ff=function(){C(this,gl)!==void 0&&(rl.clearTimeout(C(this,gl)),ae(this,gl,void 0))},$f=function(){C(this,pl)!==void 0&&(rl.clearInterval(C(this,pl)),ae(this,pl,void 0))},Wf=function(){const l=C(this,Ct).getQueryCache().build(C(this,Ct),this.options);if(l===C(this,Me))return;const s=C(this,Me);ae(this,Me,l),ae(this,ir,l.state),this.hasListeners()&&(s==null||s.removeObserver(this),l.addObserver(this))},u0=function(l){pt.batch(()=>{l.listeners&&this.listeners.forEach(s=>{s(C(this,St))}),C(this,Ct).getQueryCache().notify({query:C(this,Me),type:"observerResultsUpdated"})})},Zy);function px(a,l){return Qt(l.enabled,a)!==!1&&a.state.data===void 0&&!(a.state.status==="error"&&Qt(l.retryOnMount,a)===!1)}function Ip(a,l){return px(a,l)||a.state.data!==void 0&&Pf(a,l,l.refetchOnMount)}function Pf(a,l,s){if(Qt(l.enabled,a)!==!1&&La(l.staleTime,a)!=="static"){const r=typeof s=="function"?s(a):s;return r==="always"||r!==!1&&pd(a,l)}return!1}function ey(a,l,s,r){return(a!==l||Qt(r.enabled,a)===!1)&&(!s.suspense||a.state.status!=="error")&&pd(a,s)}function pd(a,l){return Qt(l.enabled,a)!==!1&&a.isStaleByTime(La(l.staleTime,a))}function yx(a,l){return!qf(a.getCurrentResult(),l)}var rr,yn,vt,yl,vn,Ta,Jy,vx=(Jy=class extends i0{constructor(l){super();oe(this,vn);oe(this,rr);oe(this,yn);oe(this,vt);oe(this,yl);ae(this,rr,l.client),this.mutationId=l.mutationId,ae(this,vt,l.mutationCache),ae(this,yn,[]),this.state=l.state||bx(),this.setOptions(l.options),this.scheduleGc()}setOptions(l){this.options=l,this.updateGcTime(this.options.gcTime)}get meta(){return this.options.meta}addObserver(l){C(this,yn).includes(l)||(C(this,yn).push(l),this.clearGcTimeout(),C(this,vt).notify({type:"observerAdded",mutation:this,observer:l}))}removeObserver(l){ae(this,yn,C(this,yn).filter(s=>s!==l)),this.scheduleGc(),C(this,vt).notify({type:"observerRemoved",mutation:this,observer:l})}optionalRemove(){C(this,yn).length||(this.state.status==="pending"?this.scheduleGc():C(this,vt).remove(this))}continue(){var l;return((l=C(this,yl))==null?void 0:l.continue())??this.execute(this.state.variables)}async execute(l){var h,d,p,g,b,y,S,_,w,E,j,R,z,L,D,X,q,Y;const s=()=>{Ee(this,vn,Ta).call(this,{type:"continue"})},r={client:C(this,rr),meta:this.options.meta,mutationKey:this.options.mutationKey};ae(this,yl,l0({fn:()=>this.options.mutationFn?this.options.mutationFn(l,r):Promise.reject(new Error("No mutationFn found")),onFail:(J,Q)=>{Ee(this,vn,Ta).call(this,{type:"failed",failureCount:J,error:Q})},onPause:()=>{Ee(this,vn,Ta).call(this,{type:"pause"})},onContinue:s,retry:this.options.retry??0,retryDelay:this.options.retryDelay,networkMode:this.options.networkMode,canRun:()=>C(this,vt).canRun(this)}));const o=this.state.status==="pending",f=!C(this,yl).canStart();try{if(o)s();else{Ee(this,vn,Ta).call(this,{type:"pending",variables:l,isPaused:f}),C(this,vt).config.onMutate&&await C(this,vt).config.onMutate(l,this,r);const Q=await((d=(h=this.options).onMutate)==null?void 0:d.call(h,l,r));Q!==this.state.context&&Ee(this,vn,Ta).call(this,{type:"pending",context:Q,variables:l,isPaused:f})}const J=await C(this,yl).start();return await((g=(p=C(this,vt).config).onSuccess)==null?void 0:g.call(p,J,l,this.state.context,this,r)),await((y=(b=this.options).onSuccess)==null?void 0:y.call(b,J,l,this.state.context,r)),await((_=(S=C(this,vt).config).onSettled)==null?void 0:_.call(S,J,null,this.state.variables,this.state.context,this,r)),await((E=(w=this.options).onSettled)==null?void 0:E.call(w,J,null,l,this.state.context,r)),Ee(this,vn,Ta).call(this,{type:"success",data:J}),J}catch(J){try{await((R=(j=C(this,vt).config).onError)==null?void 0:R.call(j,J,l,this.state.context,this,r))}catch(Q){Promise.reject(Q)}try{await((L=(z=this.options).onError)==null?void 0:L.call(z,J,l,this.state.context,r))}catch(Q){Promise.reject(Q)}try{await((X=(D=C(this,vt).config).onSettled)==null?void 0:X.call(D,void 0,J,this.state.variables,this.state.context,this,r))}catch(Q){Promise.reject(Q)}try{await((Y=(q=this.options).onSettled)==null?void 0:Y.call(q,void 0,J,l,this.state.context,r))}catch(Q){Promise.reject(Q)}throw Ee(this,vn,Ta).call(this,{type:"error",error:J}),J}finally{C(this,vt).runNext(this)}}},rr=new WeakMap,yn=new WeakMap,vt=new WeakMap,yl=new WeakMap,vn=new WeakSet,Ta=function(l){const s=r=>{switch(l.type){case"failed":return{...r,failureCount:l.failureCount,failureReason:l.error};case"pause":return{...r,isPaused:!0};case"continue":return{...r,isPaused:!1};case"pending":return{...r,context:l.context,data:void 0,failureCount:0,failureReason:null,error:null,isPaused:l.isPaused,status:"pending",variables:l.variables,submittedAt:Date.now()};case"success":return{...r,data:l.data,failureCount:0,failureReason:null,error:null,status:"success",isPaused:!1};case"error":return{...r,data:void 0,error:l.error,failureCount:r.failureCount+1,failureReason:l.error,isPaused:!1,status:"error"}}};this.state=s(this.state),pt.batch(()=>{C(this,yn).forEach(r=>{r.onMutationUpdate(l)}),C(this,vt).notify({mutation:this,type:"updated",action:l})})},Jy);function bx(){return{context:void 0,data:void 0,error:null,failureCount:0,failureReason:null,isPaused:!1,status:"idle",variables:void 0,submittedAt:0}}var Zn,un,ur,Fy,xx=(Fy=class extends or{constructor(l={}){super();oe(this,Zn);oe(this,un);oe(this,ur);this.config=l,ae(this,Zn,new Set),ae(this,un,new Map),ae(this,ur,0)}build(l,s,r){const o=new vx({client:l,mutationCache:this,mutationId:++Nu(this,ur)._,options:l.defaultMutationOptions(s),state:r});return this.add(o),o}add(l){C(this,Zn).add(l);const s=Du(l);if(typeof s=="string"){const r=C(this,un).get(s);r?r.push(l):C(this,un).set(s,[l])}this.notify({type:"added",mutation:l})}remove(l){if(C(this,Zn).delete(l)){const s=Du(l);if(typeof s=="string"){const r=C(this,un).get(s);if(r)if(r.length>1){const o=r.indexOf(l);o!==-1&&r.splice(o,1)}else r[0]===l&&C(this,un).delete(s)}}this.notify({type:"removed",mutation:l})}canRun(l){const s=Du(l);if(typeof s=="string"){const r=C(this,un).get(s),o=r==null?void 0:r.find(f=>f.state.status==="pending");return!o||o===l}else return!0}runNext(l){var r;const s=Du(l);if(typeof s=="string"){const o=(r=C(this,un).get(s))==null?void 0:r.find(f=>f!==l&&f.state.isPaused);return(o==null?void 0:o.continue())??Promise.resolve()}else return Promise.resolve()}clear(){pt.batch(()=>{C(this,Zn).forEach(l=>{this.notify({type:"removed",mutation:l})}),C(this,Zn).clear(),C(this,un).clear()})}getAll(){return Array.from(C(this,Zn))}find(l){const s={exact:!0,...l};return this.getAll().find(r=>Zp(s,r))}findAll(l={}){return this.getAll().filter(s=>Zp(l,s))}notify(l){pt.batch(()=>{this.listeners.forEach(s=>{s(l)})})}resumePausedMutations(){const l=this.getAll().filter(s=>s.state.isPaused);return pt.batch(()=>Promise.all(l.map(s=>s.continue().catch(Rt))))}},Zn=new WeakMap,un=new WeakMap,ur=new WeakMap,Fy);function Du(a){var l;return(l=a.options.scope)==null?void 0:l.id}var bn,$y,Sx=($y=class extends or{constructor(l={}){super();oe(this,bn);this.config=l,ae(this,bn,new Map)}build(l,s,r){const o=s.queryKey,f=s.queryHash??md(o,s);let h=this.get(f);return h||(h=new mx({client:l,queryKey:o,queryHash:f,options:l.defaultQueryOptions(s),state:r,defaultOptions:l.getQueryDefaults(o)}),this.add(h)),h}add(l){C(this,bn).has(l.queryHash)||(C(this,bn).set(l.queryHash,l),this.notify({type:"added",query:l}))}remove(l){const s=C(this,bn).get(l.queryHash);s&&(l.destroy(),s===l&&C(this,bn).delete(l.queryHash),this.notify({type:"removed",query:l}))}clear(){pt.batch(()=>{this.getAll().forEach(l=>{this.remove(l)})})}get(l){return C(this,bn).get(l)}getAll(){return[...C(this,bn).values()]}find(l){const s={exact:!0,...l};return this.getAll().find(r=>Xp(s,r))}findAll(l={}){const s=this.getAll();return Object.keys(l).length>0?s.filter(r=>Xp(l,r)):s}notify(l){pt.batch(()=>{this.listeners.forEach(s=>{s(l)})})}onFocus(){pt.batch(()=>{this.getAll().forEach(l=>{l.onFocus()})})}onOnline(){pt.batch(()=>{this.getAll().forEach(l=>{l.onOnline()})})}},bn=new WeakMap,$y),Pe,Da,Oa,Ai,Ci,ka,Ri,zi,Wy,_x=(Wy=class{constructor(a={}){oe(this,Pe);oe(this,Da);oe(this,Oa);oe(this,Ai);oe(this,Ci);oe(this,ka);oe(this,Ri);oe(this,zi);ae(this,Pe,a.queryCache||new Sx),ae(this,Da,a.mutationCache||new xx),ae(this,Oa,a.defaultOptions||{}),ae(this,Ai,new Map),ae(this,Ci,new Map),ae(this,ka,0)}mount(){Nu(this,ka)._++,C(this,ka)===1&&(ae(this,Ri,hd.subscribe(async a=>{a&&(await this.resumePausedMutations(),C(this,Pe).onFocus())})),ae(this,zi,Yu.subscribe(async a=>{a&&(await this.resumePausedMutations(),C(this,Pe).onOnline())})))}unmount(){var a,l;Nu(this,ka)._--,C(this,ka)===0&&((a=C(this,Ri))==null||a.call(this),ae(this,Ri,void 0),(l=C(this,zi))==null||l.call(this),ae(this,zi,void 0))}isFetching(a){return C(this,Pe).findAll({...a,fetchStatus:"fetching"}).length}isMutating(a){return C(this,Da).findAll({...a,status:"pending"}).length}getQueryData(a){var s;const l=this.defaultQueryOptions({queryKey:a});return(s=C(this,Pe).get(l.queryHash))==null?void 0:s.state.data}ensureQueryData(a){const l=this.defaultQueryOptions(a),s=C(this,Pe).build(this,l),r=s.state.data;return r===void 0?this.fetchQuery(a):(a.revalidateIfStale&&s.isStaleByTime(La(l.staleTime,s))&&this.prefetchQuery(l),Promise.resolve(r))}getQueriesData(a){return C(this,Pe).findAll(a).map(({queryKey:l,state:s})=>{const r=s.data;return[l,r]})}setQueryData(a,l,s){const r=this.defaultQueryOptions({queryKey:a}),o=C(this,Pe).get(r.queryHash),f=o==null?void 0:o.state.data,h=nx(l,f);if(h!==void 0)return C(this,Pe).build(this,r).setData(h,{...s,manual:!0})}setQueriesData(a,l,s){return pt.batch(()=>C(this,Pe).findAll(a).map(({queryKey:r})=>[r,this.setQueryData(r,l,s)]))}getQueryState(a){var s;const l=this.defaultQueryOptions({queryKey:a});return(s=C(this,Pe).get(l.queryHash))==null?void 0:s.state}removeQueries(a){const l=C(this,Pe);pt.batch(()=>{l.findAll(a).forEach(s=>{l.remove(s)})})}resetQueries(a,l){const s=C(this,Pe);return pt.batch(()=>(s.findAll(a).forEach(r=>{r.reset()}),this.refetchQueries({type:"active",...a},l)))}cancelQueries(a,l={}){const s={revert:!0,...l},r=pt.batch(()=>C(this,Pe).findAll(a).map(o=>o.cancel(s)));return Promise.all(r).then(Rt).catch(Rt)}invalidateQueries(a,l={}){return pt.batch(()=>(C(this,Pe).findAll(a).forEach(s=>{s.invalidate()}),(a==null?void 0:a.refetchType)==="none"?Promise.resolve():this.refetchQueries({...a,type:(a==null?void 0:a.refetchType)??(a==null?void 0:a.type)??"active"},l)))}refetchQueries(a,l={}){const s={...l,cancelRefetch:l.cancelRefetch??!0},r=pt.batch(()=>C(this,Pe).findAll(a).filter(o=>!o.isDisabled()&&!o.isStatic()).map(o=>{let f=o.fetch(void 0,s);return s.throwOnError||(f=f.catch(Rt)),o.state.fetchStatus==="paused"?Promise.resolve():f}));return Promise.all(r).then(Rt)}fetchQuery(a){const l=this.defaultQueryOptions(a);l.retry===void 0&&(l.retry=!1);const s=C(this,Pe).build(this,l);return s.isStaleByTime(La(l.staleTime,s))?s.fetch(l):Promise.resolve(s.state.data)}prefetchQuery(a){return this.fetchQuery(a).then(Rt).catch(Rt)}fetchInfiniteQuery(a){return a._type="infinite",this.fetchQuery(a)}prefetchInfiniteQuery(a){return this.fetchInfiniteQuery(a).then(Rt).catch(Rt)}ensureInfiniteQueryData(a){return a._type="infinite",this.ensureQueryData(a)}resumePausedMutations(){return Yu.isOnline()?C(this,Da).resumePausedMutations():Promise.resolve()}getQueryCache(){return C(this,Pe)}getMutationCache(){return C(this,Da)}getDefaultOptions(){return C(this,Oa)}setDefaultOptions(a){ae(this,Oa,a)}setQueryDefaults(a,l){C(this,Ai).set($s(a),{queryKey:a,defaultOptions:l})}getQueryDefaults(a){const l=[...C(this,Ai).values()],s={};return l.forEach(r=>{Ws(a,r.queryKey)&&Object.assign(s,r.defaultOptions)}),s}setMutationDefaults(a,l){C(this,Ci).set($s(a),{mutationKey:a,defaultOptions:l})}getMutationDefaults(a){const l=[...C(this,Ci).values()],s={};return l.forEach(r=>{Ws(a,r.mutationKey)&&Object.assign(s,r.defaultOptions)}),s}defaultQueryOptions(a){if(a._defaulted)return a;const l={...C(this,Oa).queries,...this.getQueryDefaults(a.queryKey),...a,_defaulted:!0};return l.queryHash||(l.queryHash=md(l.queryKey,l)),l.refetchOnReconnect===void 0&&(l.refetchOnReconnect=l.networkMode!=="always"),l.throwOnError===void 0&&(l.throwOnError=!!l.suspense),!l.networkMode&&l.persister&&(l.networkMode="offlineFirst"),l.queryFn===gd&&(l.enabled=!1),l}defaultMutationOptions(a){return a!=null&&a._defaulted?a:{...C(this,Oa).mutations,...(a==null?void 0:a.mutationKey)&&this.getMutationDefaults(a.mutationKey),...a,_defaulted:!0}}clear(){C(this,Pe).clear(),C(this,Da).clear()}},Pe=new WeakMap,Da=new WeakMap,Oa=new WeakMap,Ai=new WeakMap,Ci=new WeakMap,ka=new WeakMap,Ri=new WeakMap,zi=new WeakMap,Wy),c0=F.createContext(void 0),yd=a=>{const l=F.useContext(c0);if(!l)throw new Error("No QueryClient set, use QueryClientProvider to set one");return l},wx=({client:a,children:l})=>(F.useEffect(()=>(a.mount(),()=>{a.unmount()}),[a]),v.jsx(c0.Provider,{value:a,children:l})),o0=F.createContext(!1),Ex=()=>F.useContext(o0);o0.Provider;function jx(){let a=!1;return{clearReset:()=>{a=!1},reset:()=>{a=!0},isReset:()=>a}}var Tx=F.createContext(jx()),Mx=()=>F.useContext(Tx),Ax=(a,l,s)=>{const r=s!=null&&s.state.error&&typeof a.throwOnError=="function"?n0(a.throwOnError,[s.state.error,s]):a.throwOnError;(a.suspense||a.experimental_prefetchInRender||r)&&(l.isReset()||(a.retryOnMount=!1))},Cx=a=>{F.useEffect(()=>{a.clearReset()},[a])},Rx=({result:a,errorResetBoundary:l,throwOnError:s,query:r,suspense:o})=>a.isError&&!l.isReset()&&!a.isFetching&&r&&(o&&a.data===void 0||n0(s,[a.error,r])),zx=a=>{if(a.suspense){const s=o=>o==="static"?o:Math.max(o??1e3,1e3),r=a.staleTime;a.staleTime=typeof r=="function"?(...o)=>s(r(...o)):s(r),typeof a.gcTime=="number"&&(a.gcTime=Math.max(a.gcTime,1e3))}},Nx=(a,l)=>a.isLoading&&a.isFetching&&!l,Dx=(a,l)=>(a==null?void 0:a.suspense)&&l.isPending,ty=(a,l,s)=>l.fetchOptimistic(a).catch(()=>{s.clearReset()});function Ox(a,l,s){var _,w,E,j;const r=Ex(),o=Mx(),f=yd(),h=f.defaultQueryOptions(a);(w=(_=f.getDefaultOptions().queries)==null?void 0:_._experimental_beforeQuery)==null||w.call(_,h);const d=f.getQueryCache().get(h.queryHash),p=a.subscribed!==!1;h._optimisticResults=r?"isRestoring":p?"optimistic":void 0,zx(h),Ax(h,o,d),Cx(o);const g=!f.getQueryCache().get(h.queryHash),[b]=F.useState(()=>new l(f,h)),y=b.getOptimisticResult(h),S=!r&&p;if(F.useSyncExternalStore(F.useCallback(R=>{const z=S?b.subscribe(pt.batchCalls(R)):Rt;return b.updateResult(),z},[b,S]),()=>b.getCurrentResult(),()=>b.getCurrentResult()),F.useEffect(()=>{b.setOptions(h)},[h,b]),Dx(h,y))throw ty(h,b,o);if(Rx({result:y,errorResetBoundary:o,throwOnError:h.throwOnError,query:d,suspense:h.suspense}))throw y.error;if((j=(E=f.getDefaultOptions().queries)==null?void 0:E._experimental_afterQuery)==null||j.call(E,h,y),h.experimental_prefetchInRender&&!Ps.isServer()&&Nx(y,r)){const R=g?ty(h,b,o):d==null?void 0:d.promise;R==null||R.catch(Rt).finally(()=>{b.updateResult()})}return h.notifyOnChangeProps?y:b.trackResult(y)}function Qe(a,l){return Ox(a,gx)}const kx=!1;var f0=F.useLayoutEffect;function Ux(a,l,s){F.useEffect(()=>{if(!a.current||s||typeof IntersectionObserver!="function")return()=>l();const r=new IntersectionObserver(o=>{l(o.pop())},{rootMargin:"100px"});return r.observe(a.current),()=>{r.disconnect(),l()}},[l,s,a])}function Lx(a){const l=F.useRef(null);return F.useImperativeHandle(a,()=>l.current,[]),l}function Is(a){return a[a.length-1]}function Ni(a,l){return typeof a=="function"?a(l):a}const d0=Object.prototype.hasOwnProperty,Bx=Object.prototype.propertyIsEnumerable;function h0(a){for(const l in a)if(d0.call(a,l))return!0;return!1}const Hx=()=>Object.create(null),sl=(a,l)=>ul(a,l,Hx);function ul(a,l,s=()=>({}),r=0){if(a===l)return a;if(r>500)return l;const o=l,f=ly(a)&&ly(o);if(!f&&!(Ku(a)&&Ku(o)))return o;const h=f?a:ny(a);if(!h)return o;const d=f?o:ny(o);if(!d)return o;const p=h.length,g=d.length,b=f?new Array(g):s();let y=0;for(let S=0;S"u")return!0;const s=l.prototype;return!(!ay(s)||!s.hasOwnProperty("isPrototypeOf"))}function ay(a){return Object.prototype.toString.call(a)==="[object Object]"}function ly(a){return Array.isArray(a)&&a.length===Object.keys(a).length}function Ba(a,l,s){if(a===l)return!0;if(typeof a!=typeof l)return!1;if(Array.isArray(a)&&Array.isArray(l)){if(a.length!==l.length)return!1;for(let r=0,o=a.length;ro||!Ba(a[h],l[h],s)))return!1;return o===f}return!1}const qx=/[\x00-\x1f\x7f"<>`{}]/g;function Gx(a){return a.replace(qx,l=>"%"+l.charCodeAt(0).toString(16).toUpperCase().padStart(2,"0"))}function iy(a){let l;try{l=decodeURI(a)}catch{l=a.replaceAll(/%[0-9A-F]{2}/gi,s=>{try{return decodeURI(s)}catch{return s}})}return Gx(l)}const Qx=["http:","https:","mailto:","tel:"];function Xu(a,l){if(!a)return!1;try{const s=new URL(a);return!l.has(s.protocol)}catch{return!1}}function Bs(a){if(!a)return{path:a,handledProtocolRelativeURL:!1};if(!/[%\\\x00-\x1f\x7f]/.test(a)&&!a.startsWith("//"))return{path:a,handledProtocolRelativeURL:!1};const l=/%25|%5C/gi;let s=0,r="",o;for(;(o=l.exec(a))!==null;)r+=iy(a.slice(s,o.index))+o[0],s=l.lastIndex;r=r+iy(s?a.slice(s):a);let f=!1;return r.startsWith("//")&&(f=!0,r="/"+r.replace(/^\/+/,"")),{path:r,handledProtocolRelativeURL:f}}function Vx(a){return/\s|[^\u0000-\u007F]/.test(a)?a.replace(/\s|[^\u0000-\u007F]/gu,encodeURIComponent):a}function Yx(a,l){if(a===l)return!0;if(a.length!==l.length)return!1;for(let s=0;s{f.next&&(f.prev?(f.prev.next=f.next,f.next.prev=f.prev,f.next=void 0,r&&(r.next=f,f.prev=r)):(f.next.prev=void 0,s=f.next,f.next=void 0,r&&(f.prev=r,r.next=f)),r=f)};return{get(f){const h=l.get(f);if(h)return o(h),h.value},set(f,h){if(l.size>=a&&s){const p=s;l.delete(p.key),p.next&&(s=p.next,p.next.prev=void 0),p===r&&(r=void 0)}const d=l.get(f);if(d)d.value=h,o(d);else{const p={key:f,value:h,prev:r};r&&(r.next=p),r=p,s||(s=p),l.set(f,p)}},clear(){l.clear(),s=void 0,r=void 0}}}const Ua=4,m0=5;function g0(a,l,s=new Uint16Array(6)){const r=a.indexOf("/",l),o=r===-1?a.length:r,f=a.substring(l,o);if(!f||!f.includes("$"))return s[0]=0,s[1]=l,s[2]=l,s[3]=o,s[4]=o,s[5]=o,s;if(f==="$"){const p=a.length;return s[0]=2,s[1]=l,s[2]=l,s[3]=p,s[4]=p,s[5]=p,s}if(f.charCodeAt(0)===36)return s[0]=1,s[1]=l,s[2]=l+1,s[3]=o,s[4]=o,s[5]=o,s;const h=f.indexOf("{");let d;if(h!==-1&&h+1!ee.parse&&ee.caseSensitive===J&&ee.prefix===q&&ee.suffix===Y));if(P)z=P;else{const ee=Kx(X,y,J,q,Y);z=ee,ee.parent=o,ee.depth=f;let I;X===1?I=o.dynamic??(o.dynamic=[]):X===3?I=o.optional??(o.optional=[]):I=o.wildcard??(o.wildcard=[]),I.push(ee),I.length===2&&(h==null||h.push(I))}break}}o=z}if(E&&s.children&&!s.isRoot&&s.id&&s.id.charCodeAt(s.id.lastIndexOf("/")+1)===95){const R=di(y);R.kind=m0,R.parent=o,f++,R.depth=f,o.pathless??(o.pathless=[]),o.pathless.push(R),o=R}const j=(s.path||!s.children)&&!s.isRoot;if(j&&y.endsWith("/")){const R=di(y);R.kind=Ua,R.parent=o,f++,R.depth=f,o.index=R,o=R}o.parse=E??null,o.priority=((b=S==null?void 0:S.params)==null?void 0:b.priority)??0,j&&!o.route&&(o.route=s,o.fullPath=y)}if(s.children)for(const y of s.children)Iu(a,l,y,p,o,f,h,d)}function p0(a,l){if(a.parse&&!l.parse)return-1;if(!a.parse&&l.parse)return 1;if(a.parse&&l.parse&&(a.priority||l.priority))return l.priority-a.priority;if(a.prefix&&l.prefix&&a.prefix!==l.prefix){if(a.prefix.startsWith(l.prefix))return-1;if(l.prefix.startsWith(a.prefix))return 1}if(a.suffix&&l.suffix&&a.suffix!==l.suffix){if(a.suffix.endsWith(l.suffix))return-1;if(l.suffix.endsWith(a.suffix))return 1}return a.prefix&&!l.prefix?-1:!a.prefix&&l.prefix?1:a.suffix&&!l.suffix?-1:!a.suffix&&l.suffix?1:a.caseSensitive&&!l.caseSensitive?-1:!a.caseSensitive&&l.caseSensitive?1:0}function di(a){return{kind:0,depth:0,pathless:null,index:null,static:null,staticInsensitive:null,dynamic:null,optional:null,wildcard:null,route:null,fullPath:a,parent:null,parse:null,priority:0}}function Kx(a,l,s,r,o){return{kind:a,depth:0,pathless:null,index:null,static:null,staticInsensitive:null,dynamic:null,optional:null,wildcard:null,route:null,fullPath:l,parent:null,parse:null,priority:0,caseSensitive:s,prefix:r,suffix:o}}function Xx(a,l){const s=di("/"),r=new Uint16Array(6),o=[];for(const f of a)Iu(!1,r,f,1,s,0,o);for(const f of o)f.sort(p0);l.masksTree=s,l.flatCache=Zu(1e3)}function Zx(a,l){a||(a="/");const s=l.flatCache.get(a);if(s!==void 0)return s;const r=bd(a,l.masksTree);return l.flatCache.set(a,r),r}function Jx(a,l,s,r,o){a||(a="/"),r||(r="/");const f=l?`case\0${a}`:a;let h=o.singleCache.get(f);return h||(h=di("/"),Iu(l,new Uint16Array(6),{from:a},1,h,0),o.singleCache.set(f,h)),bd(r,h,s)}function Fx(a,l,s=!1){const r=s?a:`nofuzz\0${a}`,o=l.matchCache.get(r);if(o!==void 0)return o;a||(a="/");let f;try{f=bd(a,l.segmentTree,s)}catch(h){if(h instanceof URIError)f=null;else throw h}return f&&(f.branch=v0(f.route)),l.matchCache.set(r,f),f}function $x(a){return a==="/"?a:a.replace(/\/{1,}$/,"")}function Wx(a,l=!1,s){const r=di(a.fullPath),o=new Uint16Array(6),f=[],h={},d={};let p=0;Iu(l,o,a,1,r,0,f,g=>{if(s==null||s(g,p),g.id in h&&vd(),h[g.id]=g,p!==0&&g.path){const b=$x(g.fullPath);(!d[b]||g.fullPath.endsWith("/"))&&(d[b]=g)}p++});for(const g of f)g.sort(p0);return{processedTree:{segmentTree:r,singleCache:Zu(1e3),matchCache:Zu(1e3),flatCache:null,masksTree:null},routesById:h,routesByPath:d}}function bd(a,l,s=!1){const r=a.split("/"),o=Ix(a,r,l,s);if(!o)return null;const[f]=y0(a,r,o);return{route:o.node.route,rawParams:f}}function y0(a,l,s){var b,y,S,_;const r=Px(s.node);let o=null;const f=Object.create(null);let h=((b=s.extract)==null?void 0:b.part)??0,d=((y=s.extract)==null?void 0:y.node)??0,p=((S=s.extract)==null?void 0:S.path)??0,g=((_=s.extract)==null?void 0:_.segment)??0;for(;d=0;q--){const Y=y.wildcard[q],{prefix:J,suffix:Q}=Y;if(!(J&&(L||!(Y.caseSensitive?D:X??(X=D.toLowerCase())).startsWith(J)))){if(Q){if(L)continue;const P=l.slice(S).join("/"),ee=P.slice(-Q.length);if((Y.caseSensitive?ee:ee.toLowerCase())!==Q||P.length-Q.length=0;Y--){const J=y.optional[Y];d.push({node:J,index:S,skipped:q,statics:w,dynamics:E,optionals:j,extract:R,rawParams:z})}if(!L)for(let Y=y.optional.length-1;Y>=0;Y--){const J=y.optional[Y],{prefix:Q,suffix:P}=J;if(Q||P){const ee=J.caseSensitive?D:X??(X=D.toLowerCase());if(Q&&!ee.startsWith(Q)||P&&ee.indexOf(P,ee.length-P.length)=0;q--){const Y=y.dynamic[q],{prefix:J,suffix:Q}=Y;if(J||Q){const P=Y.caseSensitive?D:X??(X=D.toLowerCase());if(J&&!P.startsWith(J)||Q&&P.indexOf(Q,P.length-Q.length)=0;q--){const Y=y.pathless[q];d.push({node:Y,index:S,skipped:_,statics:w,dynamics:E,optionals:j,extract:R,rawParams:z})}}if(g)return g;if(r&&p){let b=p.index;for(let S=0;Sa.statics||l.statics===a.statics&&(l.dynamics>a.dynamics||l.dynamics===a.dynamics&&(l.optionals>a.optionals||l.optionals===a.optionals&&((l.node.kind===Ua)>(a.node.kind===Ua)||l.node.kind===Ua==(a.node.kind===Ua)&&l.node.depth>a.node.depth))):!0}function Hu(a){return qu(a.filter(l=>l!==void 0).join("/"))}function qu(a){return a.replace(/\/{2,}/g,"/")}function b0(a){return a==="/"?a:a.replace(/^\/{1,}/,"")}function Jn(a){const l=a.length;return l>1&&a[l-1]==="/"?a.replace(/\/{1,}$/,""):a}function x0(a){return Jn(b0(a))}function Ju(a,l){return a!=null&&a.endsWith("/")&&a!=="/"&&a!==`${l}/`?a.slice(0,-1):a}function tS(a,l,s){return Ju(a,s)===Ju(l,s)}function nS({base:a,to:l,trailingSlash:s="never",cache:r}){if(l.includes("//")&&(l=qu(l)),l.startsWith("/"))return l.length===1||s==="preserve"?l:s==="always"?l.endsWith("/")?l:`${l}/`:l.endsWith("/")?l.slice(0,-1):l;const o=l===".";let f;if(r){f=o?a:a+"\0"+l;const g=r.get(f);if(g)return g}let h;if(o)h=a.split("/");else{for(a.includes("//")&&(a=qu(a)),h=a.split("/");h.length>1&&Is(h)==="";)h.pop();const g=l.split("/");for(let b=0,y=g.length;b1?h.pop():h=[""]:S==="."||h.push(S)}}h.length>1&&(Is(h)===""?s==="never"&&h.pop():s==="always"&&h.push(""));const d=h.join("/"),p=(o?qu(d):d)||"/";return f&&r&&r.set(f,p),p}function aS(a){const l=new Map(a.map(o=>[encodeURIComponent(o),o])),s=Array.from(l.keys()).map(o=>o.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join("|"),r=new RegExp(s,"g");return o=>o.replace(r,f=>l.get(f)??f)}function Tf(a,l,s){const r=l[a];return typeof r!="string"?r:a==="_splat"?/^[a-zA-Z0-9\-._~!/]*$/.test(r)?r:r.split("/").map(o=>uy(o,s)).join("/"):uy(r,s)}function ry({path:a,params:l,decoder:s,...r}){let o=!1;const f=Object.create(null);if(!a||a==="/")return{interpolatedPath:"/",usedParams:f,isMissingParams:o};if(!a.includes("$"))return{interpolatedPath:a,usedParams:f,isMissingParams:o};const h=a.length;let d=0,p,g="";for(;da.state.__TSR_key||a.href;function cS(a){const l=a.getAttribute(cy);if(l)return`[${cy}="${l}"]`;let s="",r=a,o;for(;o=r.parentNode;){let f=1,h=r;for(;h=h.previousElementSibling;)f++;const d=`${r.localName}:nth-child(${f})`;s=s?`${d} > ${s}`:d,r=o}return s}let Uu=!1;const Gu="window";function If(a){try{return typeof a=="function"?a():document.querySelector(a)}catch{}}function oy(a){const l=new Set;for(const s of a){if(s===Gu)continue;const r=If(s);r&&l.add(r)}return l}function oS(a,l){const s=a.options.scrollRestoration,r=a._scroll;s&&(r.restoring=!0);const o=a.options.getScrollRestorationKey||uS,f=new Set,h=d=>{const p=Ma[d]||(Ma[d]={});for(const g of f)g===document?p[Gu]={scrollX,scrollY}:g.isConnected&&(p[cS(g)]={scrollX:g.scrollLeft,scrollY:g.scrollTop})};s&&!r.restoration&&(r.restoration=!0,Uu=!1,history.scrollRestoration="manual",document.addEventListener("scroll",d=>{Uu||f.add(d.target)},!0),a.subscribe("onBeforeLoad",d=>{d.fromLocation&&h(o(d.fromLocation)),f.clear()}),addEventListener("pagehide",()=>{h(o(a.stores.resolvedLocation.get()??a.stores.location.get())),rS()})),!r.reset&&(r.reset=!0,a.subscribe("onRendered",d=>{var E;const p=a.options.scrollRestorationBehavior,g=a.options.scrollToTopSelectors,b=r.next,y=r.hash;let S;if(f.clear(),r.next=!0,r.hash=!1,typeof a.options.scrollRestoration=="function"&&!a.options.scrollRestoration({location:a.latestLocation}))return;const _=o(d.toLocation),w=d.fromLocation&&o(d.fromLocation);if(r.restoring&&w&&w!==_){const j=Ma[w];if(j){let R=Ma[_];for(const z in j){if(z===Gu){if(b)continue}else{const L=If(z);if(!L||b&&g&&(S??(S=oy(g)),S.has(L)))continue}R||(R=Ma[_]={}),R[z]??(R[z]=j[z])}}}Uu=!0;try{const j=d.toLocation.hash,R=d.toLocation.state.__hashScrollIntoViewOptions??!0;let z=!1;if(b){!j&&g&&(S??(S=oy(g)));const L=j&&R&&y,D=r.restoring?Ma[_]:void 0;if(D)for(const X in D){const{scrollX:q,scrollY:Y}=D[X];if(X===Gu){if(L)continue;scrollTo({top:Y,left:q,behavior:p}),z=!0}else{const J=If(X);J&&(J.scrollLeft=q,J.scrollTop=Y,S==null||S.delete(J))}}if(!j){const X={top:0,left:0,behavior:p};if(z||scrollTo(X),S)for(const q of S)q.scrollTo(X)}}!z&&j&&R&&((E=document.getElementById(j))==null||E.scrollIntoView(R))}finally{Uu=!1}}))}function fS(a,l=String){const s=new URLSearchParams;for(const r in a){const o=a[r];o!==void 0&&s.set(r,l(o))}return s.toString()}function Mf(a){return a?a==="false"?!1:a==="true"?!0:+a*0===0&&+a+""===a?+a:a:""}function dS(a){const l=new URLSearchParams(a),s=Object.create(null);for(const[r,o]of l.entries()){const f=s[r];f==null?s[r]=Mf(o):Array.isArray(f)?f.push(Mf(o)):s[r]=[f,Mf(o)]}return s}const hS=/^(?:\s|["[{\d-]|fa|nu|tr)/,mS=pS(JSON.parse),gS=yS(JSON.stringify,JSON.parse);function pS(a){return l=>{l[0]==="?"&&(l=l.substring(1));const s=dS(l);for(const r in s){const o=s[r];if(typeof o=="string")try{s[r]=a(o)}catch{}}return s}}function yS(a,l){const s=l===JSON.parse;function r(o){if(o&&typeof o=="object")try{return a(o)}catch{}else if(l&&typeof o=="string"){if(s&&!hS.test(o))return o;try{return l(o),a(o)}catch{}}return o}return o=>{const f=fS(o,r);return f?`?${f}`:""}}const mi="__root__";function S0(a){if(a.statusCode=a.statusCode||a.code||307,!a.reloadDocument&&typeof a.href=="string")try{new URL(a.href),a.reloadDocument=!0}catch{}const l=new Headers(a.headers);a.href&&l.get("Location")===null&&l.set("Location",a.href);const s=new Response(null,{status:a.statusCode,headers:l});if(s.options=a,a.throw)throw s;return s}function _0(a){return a instanceof Response&&!!a.options}function vS(a){return{input:({url:l})=>{for(const s of a)l=ed(s,l);return l},output:({url:l})=>{for(let s=a.length-1;s>=0;s--)l=w0(a[s],l);return l}}}function bS(a){const l=x0(a.basepath),s=`/${l}`,r=a.caseSensitive?s:s.toLowerCase(),o=`${r}/`;return{input:({url:f})=>{const h=a.caseSensitive?f.pathname:f.pathname.toLowerCase();return h===r?f.pathname="/":h.startsWith(o)&&(f.pathname=f.pathname.slice(s.length)),f},output:({url:f})=>(f.pathname=Hu(["/",l,f.pathname]),f)}}function ed(a,l){var r;const s=(r=a==null?void 0:a.input)==null?void 0:r.call(a,{url:l});if(s){if(typeof s=="string")return new URL(s);if(s instanceof URL)return s}return l}function w0(a,l){var r;const s=(r=a==null?void 0:a.output)==null?void 0:r.call(a,{url:l});if(s){if(typeof s=="string")return new URL(s);if(s instanceof URL)return s}return l}function xS(a,l){const{createMutableStore:s,createReadonlyStore:r,batch:o}=l,f=new Map,h=s("idle"),d=s(a),p=s(void 0),g=s([]),b=r(()=>g.get().map(E=>f.get(E).get())),y=r(()=>({status:h.get(),isLoading:h.get()==="pending",matches:b.get(),location:d.get(),resolvedLocation:p.get()}));function S(E){let j=f.get(E);return j||(j=s(void 0),f.set(E,j)),j}const _={status:h,location:d,resolvedLocation:p,ids:g,matches:b,byRoute:f,__store:y,getMatchStore:S,setMatches:w};function w(E){const j=g.get(),R=E.map(z=>z.routeId);o(()=>{Yx(j,R)||g.set(R);for(const z of j)R.includes(z)||f.get(z).set(()=>{});for(const z of E){const L=S(z.routeId);L.get()!==z&&L.set(z)}})}return _}var Ha="__TSR_index",fy="popstate",dy="beforeunload";function SS(a){let l=a.getLocation();const s=new Set,r=h=>{l=a.getLocation(),s.forEach(d=>d({location:l,action:h}))},o=h=>{a.notifyOnIndexChange??!0?r(h):l=a.getLocation()},f=async({task:h,navigateOpts:d,...p})=>{var y,S;if((d==null?void 0:d.ignoreBlocker)??!1){h();return}const g=((y=a.getBlockers)==null?void 0:y.call(a))??[],b=p.type==="PUSH"||p.type==="REPLACE";if(typeof document<"u"&&g.length&&b)for(const _ of g){const w=Fu(p.path,p.state);if(await _.blockerFn({currentLocation:l,nextLocation:w,action:p.type})){(S=a.onBlocked)==null||S.call(a);return}}h()};return{get location(){return l},get length(){return a.getLength()},subscribers:s,subscribe:h=>(s.add(h),()=>{s.delete(h)}),push:(h,d,p)=>{const g=l.state[Ha];d=hy(g+1,d),f({task:()=>{a.pushState(h,d),r({type:"PUSH"})},navigateOpts:p,type:"PUSH",path:h,state:d})},replace:(h,d,p)=>{const g=l.state[Ha];d=hy(g,d),f({task:()=>{a.replaceState(h,d),r({type:"REPLACE"})},navigateOpts:p,type:"REPLACE",path:h,state:d})},go:(h,d)=>{f({task:()=>{a.go(h),o({type:"GO",index:h})},navigateOpts:d,type:"GO"})},back:h=>{f({task:()=>{a.back((h==null?void 0:h.ignoreBlocker)??!1),o({type:"BACK"})},navigateOpts:h,type:"BACK"})},forward:h=>{f({task:()=>{a.forward((h==null?void 0:h.ignoreBlocker)??!1),o({type:"FORWARD"})},navigateOpts:h,type:"FORWARD"})},canGoBack:()=>l.state[Ha]!==0,createHref:h=>a.createHref(h),block:h=>{var p;if(!a.setBlockers)return()=>{};const d=((p=a.getBlockers)==null?void 0:p.call(a))??[];return a.setBlockers([...d,h]),()=>{var b,y;const g=((b=a.getBlockers)==null?void 0:b.call(a))??[];(y=a.setBlockers)==null||y.call(a,g.filter(S=>S!==h))}},flush:()=>{var h;return(h=a.flush)==null?void 0:h.call(a)},destroy:()=>{var h;return(h=a.destroy)==null?void 0:h.call(a)},notify:r}}function hy(a,l){l||(l={});const s=xd();return{...l,key:s,__TSR_key:s,[Ha]:a}}function _S(a){var Y,J;const l=typeof document<"u"?window:void 0,s=l.history.pushState,r=l.history.replaceState;let o=[];const f=()=>o,h=Q=>o=Q,d=(Q=>Q),p=(()=>Fu(`${l.location.pathname}${l.location.search}${l.location.hash}`,l.history.state));if(!((Y=l.history.state)!=null&&Y.__TSR_key)&&!((J=l.history.state)!=null&&J.key)){const Q=xd();l.history.replaceState({[Ha]:0,key:Q,__TSR_key:Q},"")}let g=p(),b,y=!1,S=!1,_=!1,w=!1;const E=()=>g;let j;const R=()=>{j&&(q._ignoreSubscribers=!0,(j[2]?l.history.pushState:l.history.replaceState)(j[1],"",j[0]),q._ignoreSubscribers=!1,j=void 0,b=void 0)},z=(Q,P,ee)=>{const I=d(P),de=!!j;de||(b=g),g=Fu(P,ee),j=[I,ee,(j==null?void 0:j[2])||Q],de||queueMicrotask(()=>R())},L=Q=>{g=p(),q.notify({type:Q})},D=async()=>{if(S){S=!1;return}const Q=p(),P=Q.state[Ha]-g.state[Ha],ee=P===1,I=P===-1,de=!ee&&!I||y;y=!1;const $=de?"GO":I?"BACK":"FORWARD",ne=de?{type:"GO",index:P}:{type:I?"BACK":"FORWARD"};if(_)_=!1;else{const B=f();if(typeof document<"u"&&B.length){for(const W of B)if(await W.blockerFn({currentLocation:g,nextLocation:Q,action:$})){S=!0,l.history.go(1),q.notify(ne);return}}}g=p(),q.notify(ne)},X=Q=>{if(w){w=!1;return}let P=!1;const ee=f();if(typeof document<"u"&&ee.length)for(const I of ee){const de=I.enableBeforeUnload??!0;if(de===!0){P=!0;break}if(typeof de=="function"&&de()===!0){P=!0;break}}if(P)return Q.preventDefault(),Q.returnValue=""},q=SS({getLocation:E,getLength:()=>l.history.length,pushState:(Q,P)=>z(!0,Q,P),replaceState:(Q,P)=>z(!1,Q,P),back:Q=>(Q&&(_=!0),w=!0,l.history.back()),forward:Q=>{Q&&(_=!0),w=!0,l.history.forward()},go:Q=>{y=!0,l.history.go(Q)},createHref:Q=>d(Q),flush:R,destroy:()=>{l.history.pushState=s,l.history.replaceState=r,l.removeEventListener(dy,X,{capture:!0}),l.removeEventListener(fy,D)},onBlocked:()=>{b&&g!==b&&(g=b)},getBlockers:f,setBlockers:h,notifyOnIndexChange:!1});return l.addEventListener(dy,X,{capture:!0}),l.addEventListener(fy,D),l.history.pushState=function(...Q){const P=s.apply(l.history,Q);return q._ignoreSubscribers||L("PUSH"),P},l.history.replaceState=function(...Q){const P=r.apply(l.history,Q);return q._ignoreSubscribers||L("REPLACE"),P},q}function wS(a){let l=a.replace(/[\x00-\x1f\x7f]/g,"");return l.startsWith("//")&&(l="/"+l.replace(/^\/+/,"")),l}function Fu(a,l){const s=wS(a),r=s.indexOf("#"),o=s.indexOf("?"),f=xd();return{href:s,pathname:s.substring(0,r>0?o>0?Math.min(r,o):r:o>0?o:s.length),hash:r>-1?s.substring(r):"",search:o>-1?s.slice(o,r===-1?void 0:r):"",state:l||{[Ha]:0,key:f,__TSR_key:f}}}function xd(){return(Math.random()+1).toString(36).substring(7)}function my(a){var l,s;return a.options.loader||a.options.beforeLoad||a.lazyFn||((l=a.options.component)==null?void 0:l.preload)||((s=a.options.pendingComponent)==null?void 0:s.preload)}function ec(a,l){return{fromLocation:l,toLocation:a,pathChanged:(l==null?void 0:l.pathname)!==a.pathname,hrefChanged:(l==null?void 0:l.href)!==a.href,hashChanged:(l==null?void 0:l.hash)!==a.hash}}function gy({key:a,__TSR_key:l,__TSR_index:s,__hashScrollIntoViewOptions:r,...o}){return o}function ES(a,l,s,r){var o,f,h,d;for(const p of l){if(r&&a._tx!==r)return;s.some(g=>g.routeId===p.routeId)||(f=(o=a.routesById[p.routeId].options).onLeave)==null||f.call(o,p)}for(const p of s){if(r&&a._tx!==r)return;(d=(h=a.routesById[p.routeId].options)[l.some(g=>g.routeId===p.routeId)?"onStay":"onEnter"])==null||d.call(h,p)}}var jS=class{constructor(a,l){this.tempLocationKey=`${Math.round(Math.random()*1e7)}`,this._scroll={next:!0},this.subscribers=new Set,this._cache=new Map,this._committed=[],this.routeBranchCache=new WeakMap,this.lightweightCache=new WeakMap,this.startTransition=async s=>(s(),!1),this.update=s=>{const r=this.options,o=this.basepath??(r==null?void 0:r.basepath)??"/",f=this.basepath===void 0,h=r==null?void 0:r.rewrite;if(this.options={...r,...s},this.isServer=this.options.isServer??kx??typeof document>"u",this.protocolAllowlist=new Set(this.options.protocolAllowlist),this.options.pathParamsAllowedCharacters&&(this.pathParamsDecoder=aS(this.options.pathParamsAllowedCharacters)),(!this.history||this.options.history&&this.options.history!==this.history)&&(this.options.history?this.history=this.options.history:this.history=_S()),this.origin=this.options.origin,this.origin||(window!=null&&window.origin&&window.origin!=="null"?this.origin=window.origin:this.origin="http://localhost"),this.history&&this.updateLatestLocation(),this.options.routeTree!==this.routeTree){this.routeTree=this.options.routeTree;let g;this.resolvePathCache=Zu(1e3),g=this.buildRouteTree(),this.setRoutes(g)}if(!this.stores&&this.latestLocation){const g=this.getStoreConfig(this);this.batch=g.batch,this.stores=xS(this.latestLocation,g),oS(this)}const d=this.options.basepath??"/",p=this.options.rewrite;if(f||o!==d||h!==p){this.basepath=d;const g=[],b=x0(d);b&&b!=="/"&&g.push(bS({basepath:d})),p&&g.push(p),this.rewrite=g.length===0?void 0:g.length===1?g[0]:vS(g),this.history&&this.updateLatestLocation(),this.stores&&this.stores.location.set(this.latestLocation)}},this.updateLatestLocation=()=>{this.latestLocation=this.parseLocation(this.history.location,this.latestLocation)},this.buildRouteTree=()=>{const s=Wx(this.routeTree,this.options.caseSensitive,(r,o)=>{r.init({originalIndex:o})});return this.options.routeMasks&&Xx(this.options.routeMasks,s.processedTree),s},this.subscribe=(s,r)=>{const o={eventType:s,fn:r};return this.subscribers.add(o),()=>{this.subscribers.delete(o)}},this.emit=s=>{for(const r of this.subscribers)if(r.eventType===s.type)try{r.fn(s)}catch(o){console.error(o)}},this.parseLocation=(s,r)=>{const o=({pathname:p,search:g,hash:b,href:y,state:S})=>{if(!this.rewrite&&!/[ \x00-\x1f\x7f\u0080-\uffff]/.test(p)){const R=this.options.parseSearch(g),z=this.options.stringifySearch(R);return{href:p+z+b,publicHref:p+z+b,pathname:Bs(p).path,external:!1,searchStr:z,search:sl(r==null?void 0:r.search,R),hash:Bs(b.slice(1)).path,state:ul(r==null?void 0:r.state,S)}}const _=new URL(y,this.origin),w=ed(this.rewrite,_),E=this.options.parseSearch(w.search),j=this.options.stringifySearch(E);return w.search=j,{href:w.href.replace(w.origin,""),publicHref:y,pathname:Bs(w.pathname).path,external:!!this.rewrite&&w.origin!==this.origin,searchStr:j,search:sl(r==null?void 0:r.search,E),hash:Bs(w.hash.slice(1)).path,state:ul(r==null?void 0:r.state,S)}},f=o(s),{__tempLocation:h,__tempKey:d}=f.state;if(h&&(!d||d===this.tempLocationKey)){const p=o(h);return p.state.key=f.state.key,p.state.__TSR_key=f.state.__TSR_key,delete p.state.__tempLocation,{...p,maskedLocation:f}}return f},this.resolvePathWithBase=(s,r)=>nS({base:s,to:r,trailingSlash:this.options.trailingSlash,cache:this.resolvePathCache}),this.matchRoutes=(s,r,o)=>typeof s=="string"?this.matchRoutesInternal({pathname:s,search:r},o):this.matchRoutesInternal(s,r),this.getMatchedRoutes=s=>{const r=Object.create(null),o=Fx(Jn(s),this.processedTree,!0);return o&&Object.assign(r,o.rawParams),[(o==null?void 0:o.branch)||[this.routesById.__root__],r,o==null?void 0:o.route]},this.buildLocation=s=>{const r=(f={})=>{var Q,P;if(f.href){const ee=Fu(f.href,{});f={...f,to:ed(this.rewrite,new URL(ee.pathname,this.origin)).pathname,search:this.options.parseSearch(ee.search),hash:ee.hash.slice(1)}}const h=f._fromLocation||this._pendingLocation||this.latestLocation,d=this.matchRoutesLightweight(h);f.from;const p=f.unsafeRelative==="path"?h.pathname:f.from??d[1],g=d[2],b=d[3],y=this.resolvePathWithBase(p,f.to?`${f.to}`:".");let S=py(f.params,b);const _=this.routesByPath[Jn(y)];let w;if(_)w=this.getRouteBranch(_);else if(y.includes("$"))w=[];else{const[ee,I,de]=this.getMatchedRoutes(y);w=ee,this.options.notFoundRoute&&(!de||de.path!=="/"&&I["**"])&&(w=[...w,this.options.notFoundRoute])}if(w.length&&h0(S))for(const ee of w){const I=((Q=ee.options.params)==null?void 0:Q.stringify)??ee.options.stringifyParams;if(I){S===b&&(S=Object.assign(Object.create(null),S));try{Object.assign(S,I(S))}catch{}}}const E=s.leaveParams?y:Bs(ry({path:y,params:S,decoder:this.pathParamsDecoder,server:this.isServer}).interpolatedPath).path;let j=g;if(s._includeValidateSearch&&((P=this.options.search)!=null&&P.strict)){const ee={};w.forEach(I=>{if(I.options.validateSearch)try{Object.assign(ee,Qu(I.options.validateSearch,{...ee,...j}))}catch{}}),j=ee}j=MS(j,f,w,s._includeValidateSearch),j=sl(g,j);const R=this.options.stringifySearch(j),z=f.hash===!0?h.hash:f.hash?Ni(f.hash,h.hash):void 0,L=z?`#${z}`:"";let D=f.state===!0?h.state:f.state?Ni(f.state,h.state):{};f.state&&(D=ul(h.state,D));const X=`${E}${R}${L}`;let q,Y,J=!1;if(this.rewrite){const ee=new URL(X,this.origin),I=w0(this.rewrite,ee);q=ee.href.replace(ee.origin,""),I.origin!==this.origin?(Y=I.href,J=!0):Y=I.pathname+I.search+I.hash}else q=Vx(X),Y=q;return{publicHref:Y,href:q,pathname:E,search:j,searchStr:R,state:D,hash:z??"",external:J,unmaskOnReload:f.unmaskOnReload}},o=r(s);if(s.mask)o.maskedLocation=r({from:s.from,...s.mask});else if(this.options.routeMasks){const f=Zx(o.pathname,this.processedTree);if(f){const h=Object.assign(Object.create(null),f.rawParams),{from:d,params:p,...g}=f.route,b=py(p,h);o.maskedLocation=r({from:s.from,...g,params:b})}}return o},this.commitLocation=async({viewTransition:s,ignoreBlocker:r,...o})=>{let f;const h=Jn(this.latestLocation.href)===Jn(o.href)&&Ba(gy(o.state),gy(this.latestLocation.state)),d=this._commitPromise;let p;const g=new Promise(b=>{p=b});if(g.resolve=()=>{p(),d==null||d.resolve()},this._commitPromise=g,h)this.load();else{let{maskedLocation:b,hashScrollIntoView:y,...S}=o;b&&(S={...b,state:{...b.state,__tempKey:void 0,__tempLocation:{...S,search:S.searchStr,state:{...S.state,__tempKey:void 0,__tempLocation:void 0,__TSR_key:void 0,key:void 0}}}},(S.unmaskOnReload??this.options.unmaskOnReload??!1)&&(S.state.__tempKey=this.tempLocationKey)),S.state.__hashScrollIntoViewOptions=y??this.options.defaultHashScrollIntoView??!0,this.shouldViewTransition=s,f=o.replace?"REPLACE":"PUSH",this.history[f==="REPLACE"?"replace":"push"](S.publicHref,S.state,{ignoreBlocker:r}),this.history.subscribers.size||this.load({action:{type:f}})}return this._scroll.next=o.resetScroll??!0,this._commitPromise},this.buildAndCommitLocation=({replace:s,resetScroll:r,hashScrollIntoView:o,viewTransition:f,ignoreBlocker:h,...d}={})=>{const p=this.buildLocation({...d,_includeValidateSearch:!0});this._pendingLocation=p;const g=this.commitLocation({...p,viewTransition:f,replace:s,resetScroll:r,hashScrollIntoView:o,ignoreBlocker:h});return queueMicrotask(()=>{this._pendingLocation===p&&(this._pendingLocation=void 0)}),g},this.navigate=async({to:s,reloadDocument:r,href:o,publicHref:f,...h})=>{var p,g;let d=!1;if(o)try{new URL(`${o}`),d=!0}catch{}if(d&&!r&&(r=!0),r){if(s!==void 0||!o){const y=this.buildLocation({to:s,...h});o=o??y.publicHref,f=f??y.publicHref}const b=!d&&f?f:o;if(Xu(b,this.protocolAllowlist))return;if(!h.ignoreBlocker){const y=((g=(p=this.history).getBlockers)==null?void 0:g.call(p))??[];for(const S of y)if(S!=null&&S.blockerFn&&await S.blockerFn({currentLocation:this.latestLocation,nextLocation:this.latestLocation,action:"PUSH"}))return}h.replace?window.location.replace(b):window.location.href=b;return}return this.buildAndCommitLocation({...h,href:o,to:s,_isNavigate:!0})},this.load=async s=>{this.updateLatestLocation(),s!=null&&s.action&&(this._scroll.hash=s.action.type==="PUSH"||s.action.type==="REPLACE"),await US(this,s)},this.startViewTransition=s=>{var o,f;const r=this.shouldViewTransition??this.options.defaultViewTransition;if(this.shouldViewTransition=void 0,r&&typeof document.startViewTransition=="function"){let h;if(typeof r=="object"&&((f=(o=window.CSS)==null?void 0:o.supports)!=null&&f.call(o,"selector(:active-view-transition-type(a))"))){const d=this.latestLocation,p=this.stores.resolvedLocation.get(),g=typeof r.types=="function"?r.types(ec(d,p)):r.types;if(g===!1)return s();h={update:s,types:g}}else h=s;return document.startViewTransition(h).updateCallbackDone}return s()},this.invalidate=s=>{var g,b;const r=this._committed,o=s==null?void 0:s.filter,f=this._preloads,h=new Set([...r,...this._cache.values(),...[...(f==null?void 0:f.values())??[]].flat(),...((g=this._tx)==null?void 0:g[3])??[]].filter(y=>!o||o(y)).map(y=>y.id)),d=[];for(const[y,S]of f??[])S.some(_=>h.has(_.id))&&(f.delete(y),d.push(y));const p=y=>{if(h.has(y.id)){const S=this.routesById[y.routeId],_={...y,invalid:!0,...(s!=null&&s.forcePending||y.status==="error"||y.status==="notFound")&&my(S)?{status:"pending",error:void 0}:void 0};return y._flight=void 0,_}return y};this._committed=r.map(p);for(const[y,S]of this._cache)h.has(y)&&(S.invalid=!0,s!=null&&s.forcePending&&(S.status="pending"));for(const y of h)(b=this._flights)==null||b.delete(y);for(const y of d)y.abort();return this.shouldViewTransition=!1,this.load({sync:s==null?void 0:s.sync})},this.resolveRedirect=s=>{const r=s.headers.get("Location");if(s.options.href){if(r)try{const o=new URL(r);if(this.origin&&o.origin===this.origin){const f=o.pathname+o.search+o.hash;s.options.href=f,s.headers.set("Location",f)}}catch{}}else{const o=this.buildLocation(s.options).publicHref||"/";s.options.href=o,s.headers.set("Location",o)}if(s.options.href&&Xu(s.options.href,this.protocolAllowlist))throw new Error("Redirect blocked: unsafe protocol");return s.headers.get("Location")||s.headers.set("Location",s.options.href),s},this.clearCache=s=>{var g;const r=this._cache,o=this._preloads,f=s==null?void 0:s.filter,h=[],d=[];for(const[b,y]of r)(!f||f(y))&&(d.push(b),h.push(y));const p=[];for(const[b,y]of o??[])(!f||y.some(f))&&(p.push(b),h.push(...y));for(const b of d)r.delete(b);for(const b of p)o.delete(b);for(const b of h){const y=b._flight;b._flight=void 0,y&&!--y[2]&&(((g=this._flights)==null?void 0:g.get(b.id))===y&&this._flights.delete(b.id),p.push(y[1]))}for(const b of p)b.abort()},this.loadRouteChunk=gi,this.preloadRoute=s=>LS(this,s),this.matchRoute=(s,r)=>{const o={...s,to:s.to?this.resolvePathWithBase(s.from||"",s.to):void 0,params:s.params||{},leaveParams:!0},f=this.buildLocation(o),h=this.stores.status.get()==="pending";if(r!=null&&r.pending&&!h)return!1;const d=(r==null?void 0:r.pending)??!h?this.latestLocation:this.stores.resolvedLocation.get()||this.stores.location.get(),p=Jx(f.pathname,(r==null?void 0:r.caseSensitive)??!1,(r==null?void 0:r.fuzzy)??!1,d.pathname,this.processedTree);return!p||s.params&&!Ba(p.rawParams,s.params,{partial:!0})?!1:(r==null?void 0:r.includeSearch)??!0?Ba(d.search,f.search,{partial:!0})?p.rawParams:!1:p.rawParams},this.getStoreConfig=l,this.update({defaultPreloadDelay:50,defaultPendingMs:1e3,defaultPendingMinMs:500,context:void 0,...a,caseSensitive:a.caseSensitive??!1,notFoundMode:a.notFoundMode??"fuzzy",stringifySearch:a.stringifySearch??gS,parseSearch:a.parseSearch??mS,protocolAllowlist:a.protocolAllowlist??Qx}),self.__TSR_ROUTER__=this}isShell(){return!!this.options.isShell}get state(){return this.stores.__store.get()}setRoutes({routesById:a,routesByPath:l,processedTree:s}){this.routesById=a,this.routesByPath=l,this.processedTree=s;const r=this.options.notFoundRoute;r&&(r.init({originalIndex:99999999999}),this.routesById[r.id]=r)}getRouteBranch(a){let l=this.routeBranchCache.get(a);return l||(l=v0(a),this.routeBranchCache.set(a,l)),l}matchRoutesInternal(a,l){var S,_;const[s,r,o]=this.getMatchedRoutes(a.pathname);let f=s,h=!1;(o?o.path!=="/"&&r["**"]:Jn(a.pathname))&&(this.options.notFoundRoute?f=[...f,this.options.notFoundRoute]:h=!0);const d=h?AS(this.options.notFoundMode,f):void 0,p=new Array(f.length),g=this._committed,b=(w,E)=>{const j=g[E];return(j==null?void 0:j.routeId)===w.id?j:w===this.options.notFoundRoute?g.find(R=>R.routeId===w.id):void 0};let y;for(let w=0;w{const _=S(p.preSearchFilters?p.preSearchFilters.reduce((w,E)=>E(w),y):y);return p.postSearchFilters?p.postSearchFilters.reduce((w,E)=>E(w),_):_};o.push(b)}const g=p.validateSearch;if(r&&g){const b=({search:y,next:S,meta:_})=>{const w=S(y);try{const E=Qu(g,w);if(_&&E)for(const j in E)j in w||(_.defaulted||(_.defaulted=new Map)).set(j,E[j]);return{...w,...E}}catch{}return w};o.push(b)}}const f=(d,p,g)=>{if(d>=o.length){if(!l.search)return{};if(l.search===!0)return p;const y=Ni(l.search,p);return g&&(g.explicit=y),y}const b=(y,S)=>{if(S){const _=g||{};return{search:f(d+1,y,_),meta:_}}return f(d+1,y,g)};return o[d]({search:p,next:b,meta:g})};return f(0,a)}function AS(a,l){if(a!=="root"){let s;for(let r=l.length-1;r>=0;r--){const o=l[r];if(o.options.notFoundComponent)return o.id;s||(s=o.children&&o.id)}if(s)return s}return mi}function py(a,l){if(a===!1||a===null)return Object.create(null);if((a??!0)===!0)return l;const s=Object.assign(Object.create(null),l);return Object.assign(s,Ni(a,s))}function yy(a,l){var r;const s=((r=a.options.params)==null?void 0:r.parse)??a.options.parseParams;s&&Object.assign(l,s(l))}function td(a,l){var s,r;return(r=(s=a.options[l])==null?void 0:s.preload)==null?void 0:r.call(s)}function CS(a,l){const s=td(a,"component");let r=td(a,"pendingComponent");return l&&(r?r=r.then(l):l()),s&&r?Promise.all([s,r]).then(()=>{}):s??r}function gi(a,l,s){const r=()=>l===!1?void 0:l?td(a,l):CS(a,s),o=a._lazy;if(o)return o===!0?r():o.then(r);if(!a.lazyFn)return r();const f=a.lazyFn().then(h=>{{const{id:d,...p}=h.options;Object.assign(a.options,p),a._lazy=!0}},h=>{throw a._lazy=void 0,h});return a._lazy=f,f.then(r)}function Sd(a){const l=a.findIndex(s=>s.status!=="success"||s._notFound)+1;return l&&l{const o=()=>r(l);l.addEventListener("abort",o,{once:!0}),Promise.resolve(a).then(s,r).finally(()=>l.removeEventListener("abort",o))})}function xl(a,l){return a.routesById[l.routeId]}function tr(a,l,s){return _0(a)?[Vt,a]:Di(a)?(a.routeId||(a.routeId=s),[tc,a]):l?(typeof(a==null?void 0:a.then)=="function"&&(a=new Error("A Promise was thrown",{cause:a})),[$n,a]):[Sn,a]}function _d(a,l){var r,o;let s=tr(l,!0,a.id);if(s[0]!==$n)return s;try{(o=(r=a.options).onError)==null||o.call(r,s[1])}catch(f){s=tr(f,!0,a.id)}return s}function Xs(a,l,s,r,o){return o[0].signal.aborted?qa:jd(a,l,s,_d(s,r),o)}async function RS(a,l,s,r,o,f){var b,y;const[h,d]=l,p=s[0].signal,g=!!s[3];for(let S=s[6]??0;Sa.navigate({...D,_fromLocation:h}),buildLocation:a.buildLocation,cause:g?"preload":_.cause,abortController:s[0],preload:g,matches:d,routeId:w.id};try{const D=_._ctx||(_._ctx=w.options.context?w.options.context({...j,deps:_.loaderDeps,context:E})||{}:void 0);_.context={...E,...D}}catch(D){return Fn(a,_),[S,Xs(a,l,w,D,s)]}if(p.aborted)return[S,qa];const R=_.paramsError??_.searchError;if(R!==void 0)return Fn(a,_),[S,Xs(a,l,w,R,s)];const z=w.options.beforeLoad;if(!z)continue;const L=_.status;S>=f&&(_.status="pending",(y=s[7])==null||y.call(s));try{nr(a,_,"beforeLoad",s[0]);const D=await bl(z({...j,search:_.search,context:_.context,...a.options.additionalContext}),p);if(p.aborted)return[S,qa];const X=jd(a,l,w,tr(D,!1,w.id),s);if(X[0]!==Sn)return Fn(a,_),[S,X];_.context={..._.context,...D}}catch(D){return Fn(a,_),[S,Xs(a,l,w,D,s)]}finally{_.status=L,nr(a,_,!1,s[0])}}o()}function wd(a,l,s){var r;if(!(!s||--s[2])){if(((r=a._flights)==null?void 0:r.get(l.id))===s){const o=a._tx;if(o&&!o[0].signal.aborted&&!o[3].includes(l)&&o[3].some(f=>f.id===l.id)&&o[3].some(f=>f.isFetching==="beforeLoad"))return;a._flights.delete(l.id)}return s[1]}}function Fn(a,l){var r;const s=l._flight;l._flight=void 0,(r=wd(a,l,s))==null||r.abort()}function zt(a,l,s,r){var f;const o=[];for(const h of l)if(!(s!=null&&s.includes(h))){const d=h._flight;if(h._flight=void 0,r&&(d==null?void 0:d[2])===1&&((f=a._flights)==null?void 0:f.get(h.id))===d&&(s!=null&&s.some(p=>p.id===h.id)))d[2]=0;else{const p=wd(a,h,d);p&&o.push(p)}}for(const h of o)h.abort()}function Ed(a){for(const l of a){const s=l._flight;s&&s[2]++}}function nr(a,l,s,r){var h;if(l.isFetching=s,r&&((h=a._tx)==null?void 0:h[0])!==r)return;const o=a.stores.byRoute.get(l.routeId),f=o==null?void 0:o.get();(f==null?void 0:f.id)===l.id&&o.set({...f,isFetching:s})}function E0(a,l,s,r,o,f,h){const d=l[0];return{params:s.params,location:d,navigate:p=>a.navigate({...p,_fromLocation:d}),cause:h?"preload":s.cause,abortController:o,preload:h,deps:s.loaderDeps,parentMatchPromise:f,context:s.context,route:r,...a.options.additionalContext}}async function vy(a,l,s,r,o,f,h){const d=h[0],p=d.signal;if(p.aborted)return qa;if(!o)return[Sn,void 0];let g=s._flight;nr(a,s,"loader",d);try{if(!g){const b=new AbortController;g=[Promise.resolve().then(()=>o(E0(a,l,s,r,b,f,!!h[3]))).then(y=>tr(y,!1,r.id),y=>tr(y,!0,r.id)).then(y=>{var S;return y[0]!==Sn&&((S=a._flights)==null?void 0:S.get(s.id))===g&&(a._flights.delete(s.id),g[2]||b.abort()),y[0]===$n&&g[2]?_d(r,y[1]):y}),b,1],(a._flights??(a._flights=new Map)).set(s.id,g)}return s._flight=g,s.abortController=g[1],jd(a,l,r,await bl(g[0],p),h)}catch(b){if(b!==p||!p.aborted)throw b;return Fn(a,s),qa}finally{nr(a,s,!1,d)}}function by(a,l,s){l[0]!==Vt&&(a.status="success",a.error=void 0,l[0]===Sn?(a.loaderData=l[1],a.invalid=!1,a.updatedAt=Date.now(),a.preload=s):a.invalid=!0)}function zS(a,l,s){const r=a._cache.get(l.id);if(r!==s||a._committed.some(f=>f.id===l.id&&f._flight===l._flight))return;const o={...l,_notFound:void 0,context:{}};o._flight&&o._flight[2]++,a._cache.set(l.id,o),r&&Fn(a,r)}function xy(a,l){return l[0]===$n||l[0]===tc?{...a,status:l[0]===$n?"error":"notFound",error:l[1],_flight:void 0}:a}function NS(a,l,s,r,o,f,h){var I,de;const d=l[1][s],p=xl(a,d),g=!!f[3],b=a._cache.get(d.id);let y,S=!1,_;try{if(d.status==="success"&&(y=p.options.shouldReload,typeof y=="function"&&(y=y(E0(a,l,d,p,f[0],o,g))),f[0].signal.aborted&&(_=qa)),!_)if(d.status!=="success")S=!0;else{const $=g||d.preload?p.options.preloadStaleTime??a.options.defaultPreloadStaleTime??3e4:p.options.staleTime??a.options.defaultStaleTime??0;S=!!(d.invalid||y||y===void 0&&Date.now()-d.updatedAt>=$&&(f[5]||d.cause==="enter"||f[2].some(ne=>ne.routeId===d.routeId&&ne.id!==d.id)))}}catch($){d.invalid=!0,Fn(a,d),_=Xs(a,l,p,$,f)}const w=p.options.loader,E=typeof w=="function",j=E?w:w==null?void 0:w.handler,R=!g||p.options.preload!==!1;let z=R&&w?(I=a._flights)==null?void 0:I.get(d.id):void 0;z===d._flight||_?z=void 0:z&&!S&&!g&&y===void 0?S=!0:S||(z=void 0);const L=!!(w&&S&&d.status==="success"&&!g&&!f[4]&&((E?void 0:w.staleReloadMode)??a.options.defaultStaleReloadMode)!=="blocking"),D=S&&R,X=D&&!L&&(d.status!=="success"||!!w),q=s>=h?f[7]:void 0,Y=p.lazyFn&&p._lazy!==!0?q:void 0;if(D&&!w&&(d.invalid=!1,d.updatedAt=Date.now()),z&&z[2]++,X){const $=d._flight;d._flight=z,(de=wd(a,d,$))==null||de.abort(),s>=h&&(d.status="pending"),q==null||q()}D||(d.isFetching=!1);const J=(_?Promise.resolve(_):X?vy(a,l,d,p,j,o,f):Promise.resolve([Sn,d.loaderData])).then($=>(X&&(by(d,$,g),$[0]===Sn&&(w&&!f[0].signal.aborted&&zS(a,d,b),s>=h&&(d.status="pending"))),$)),Q=bl(Promise.resolve().then(()=>gi(p,void 0,Y)),f[0].signal).then(()=>{},$=>l[1].some((ne,B)=>B<=s&&(ne.status==="error"||ne.status==="notFound"||ne._notFound))?void 0:[s,Xs(a,l,p,$,f)]).then($=>J.then(ne=>(X&&!$&&ne[0]===Sn&&d.status==="pending"&&!f[0].signal.aborted&&(d.status="success",q==null||q()),$)));if(r.push([s,J,Q]),!L)return J.then($=>xy(d,$));const P={...d,status:"pending",preload:!1,_flight:z};d.invalid=!1,d.isFetching="loader";const ee=vy(a,l,P,p,j,o,f).then($=>(d.isFetching=!1,by(P,$,!1),$));return(l[2]??(l[2]=[])).push([s,ee,Q,P]),ee.then($=>xy(P,$))}async function nd(a,l,s,r,o=0){const f=s==null?void 0:s[1][1];let h=f!=null&&f.routeId?l.findIndex(d=>d.routeId===f.routeId):(s==null?void 0:s[0])??l.length-1;h<0&&(h=0);for(let d=h;d>=0;d--){const p=xl(a,l[d]);try{const g=gi(p,!1);g&&await bl(g,r)}catch(g){if(g===r&&r.aborted)throw g}if(p.options.notFoundComponent)return d}return f!=null&&f.routeId?h:o}function vl(a,l){l[2]&&(zt(a,l[2].map(s=>s[3])),l[2]=void 0)}async function Sy(a,l,s,r){let o;try{await Promise.all(a.map(f=>f[1].then(async h=>{const d=f[0];if(!(r&&d>=await r)){if(h[0]>=Vt)throw[d,h];!o&&h[0]!==Sn&&(o=[d,h],await Promise.all((s??[]).map(p=>{if(!(p[0]<=d))return p[1].then(g=>{if(g[0]===Vt)throw[p[0],g]})})))}})))}catch(f){return f}return l??o}function jd(a,l,s,r,o,f){for(;r[0]===Vt;){const h=r[1],d=h.options;if(d.reloadDocument?o[3]:o[1]>=20)return r;try{return d.href&&d.reloadDocument?(a.resolveRedirect(h),r):[Vt,h,a.buildLocation({...d,_fromLocation:l[0],_includeValidateSearch:!0})]}catch(p){r=f?[$n,p]:_d(s,p),f=!0}}return r}async function j0(a,l,s,r,o,f){const h=l[1];let d=await o,p=!1;const g=h.findIndex(_=>_._notFound),b=_=>_[1][0]===tc?nd(a,h,_,r.signal):_[0];let y=g<0?h.length:g;if(((d==null?void 0:d[1][0])??0)>=Vt)y=0;else if(d){y=d[2]??(d[2]=await b(d));for(const _ of s){if(_[0]>=y)break;const w=await _[1];if(w[0]!==Sn&&w[0]=y)break;const w=await _[2];if(w){d=w;break}}if(((d==null?void 0:d[1][0])??0)>=Vt){const _=d[1];if(_[0]!==Vt||_[1].options.reloadDocument||_[2])return vl(a,l),_;p=!0,d=[0,[$n,new Error("Too many redirects")]]}const S=d?d[2]??await b(d):g;if(S>=0){const _=d==null?void 0:d[1],w=_==null?void 0:_[0],E=h[S],j=_==null?void 0:_[1],R=()=>{_&&(E._notFound=void 0,w===$n?E.status="error":(j.routeId=E.routeId,E.routeId===a.routeTree.id?(E.status="success",E._notFound=!0):E.status="notFound"),E.error=j,E.isFetching=!1)};R(),_||f==null||f();const z=xl(a,E);try{await bl(_?Promise.resolve().then(()=>gi(z,w===$n?"errorComponent":"notFoundComponent")):Promise.all([gi(z),gi(z,"notFoundComponent")]),r.signal)}catch(L){if(L===r.signal&&r.signal.aborted)return vl(a,l),qa}_?p&&(r.abort(),await Promise.all([...s.map(L=>L[1]),...s.map(L=>L[2]),...(l[2]??[]).map(L=>L[1])]),vl(a,l),zt(a,h),R()):E.status="success"}return l}async function T0(a,l,s,r=0,o=l[1].length){var h,d;const f=l[1];for(let p=r;pz._notFound);if(a.options.notFoundMode!=="root"&&g>=0){const z=await nd(a,s,void 0,f,g);s[g]._notFound=void 0,s[z]._notFound=!0,g=z}let b=g<0?s.length:g+1,y=0;for(;y{for(let z=_;z=Vt&&(b=0);E()}if(!f.aborted&&!r[3]){const z=[];for(const[L,D]of a._flights??[])D[2]||(a._flights.delete(L),z.push(D[1]));for(const L of z)L.abort()}const R=j0(a,o,S,r[0],Sy(S,j,o[2]),r[7]);(d=o[2])!=null&&d.length&&(o[3]=Sy(o[2],void 0,void 0,R.then(z=>er(z)?0:Sd(s).length,()=>0))),h=await R}catch(p){if(vl(a,o),p===f&&f.aborted)return qa;throw p}return er(h)?h:T0(a,h,f,r[6]===s.length?r[6]:0)}function ad(a,l){var f,h;if(a._tx!==l)return;const s=l[3],r=a.stores.matches.get();let o=a._pending;for(let d=0;d0){o[3]=setTimeout(()=>ad(a,l),z);return}o[2]=0}const j=s.map(z=>({...z,_flight:void 0}));j[d].status="pending";const R=o[4]=a.startTransition(()=>a.stores.setMatches(j),j).then(z=>(z&&a._pending===o&&o[4]===R&&!o[2]&&(o[2]=Date.now()+w),z));return}}function Hs(a,l){var r;const s=a._pending;(a._tx===l||!((r=a._tx)!=null&&r[3].some(o=>o.id===(s==null?void 0:s[1]))))&&(clearTimeout(s==null?void 0:s[3]),a._pending=void 0)}async function _y(a,l){const s=a._pending;if(!s)return;clearTimeout(s[3]);const r=s[2]-Date.now();if(!s[4]||r<=0||!Sd(l[3]).some(f=>f.id===s[1]))return;let o;try{await bl(new Promise(f=>{o=setTimeout(f,r)}),l[0].signal)}catch{}clearTimeout(o)}function A0(a,l){a._committed=l,a.stores.setMatches(l)}function DS(a,l,s,r){const o=a._committed,f=a._cache;for(const p of s)p.preload=!1,r&&(p._assetEnd=void 0);const h=Sd(s).length,d=new Map;{const p=Date.now();for(const g of[...o,...f.values()]){if(g.status!=="success"||s.some((y,S)=>y.id===g.id&&(S=(g.preload?b.options.preloadGcTime??a.options.defaultPreloadGcTime??3e5:b.options.gcTime??a.options.defaultGcTime??3e5)||d.set(g.id,f.get(g.id)===g?g:{...g,_flight:void 0,isFetching:!1,context:{}})}}l[3]=[],a._cache=d,A0(a,s),zt(a,[...f.values(),...o],[...s,...d.values()]),ES(a,o,s,l)}async function Lu(a,l){let s=a._tx;for(;s&&s!==l;){if(await s[5],a._tx===s)return;s=a._tx}}function C0(a,l,s){const r=s[1].options,o=s[2];if(!o)return a.navigate({...r,replace:!0,ignoreBlocker:!0});if(r.reloadDocument)return a.navigate({href:o.publicHref,reloadDocument:!0,replace:!0,ignoreBlocker:!0});o._redirects=l[1]+1,a._pendingLocation=o;const f=a.commitLocation({...o,viewTransition:r.viewTransition,replace:!0,resetScroll:r.resetScroll,hashScrollIntoView:r.hashScrollIntoView,ignoreBlocker:!0});return queueMicrotask(()=>{a._pendingLocation===o&&(a._pendingLocation=void 0)}),f}async function OS(a,l,s,r,o){const f=s.map(p=>({...p}));Ed(f);for(const p of r)Fn(a,f[p[0]]),f[p[0]]=p[3];const h=[l[2],f];let d;try{d=await j0(a,h,r,l[0],o)}catch(p){throw zt(a,f),p}if(er(d)){zt(a,f),d[0]===Vt&&a._tx===l&&a._committed===s&&await C0(a,l,d);return}if(await T0(a,d,l[0].signal),a._tx!==l||a._committed!==s){zt(a,f);return}for(const p of f){const g=a._cache.get(p.id);g!=null&&g._flight&&g._flight===p._flight&&(a._cache.delete(p.id),Fn(a,g))}A0(a,f),zt(a,s,f)}async function kS(a,l,s,r,o,f){const h=await M0(a,l[2],l[3],[l[0],l[1],a._committed,void 0,o,s,f,r]);if(er(h)){const y=h[0]===Vt&&a._tx===l;if((!y||h[1].options.reloadDocument)&&Hs(a,l),zt(a,l[3]),l[3]=[],!y)return;if(a._tx!==l){Hs(a,l);return}await C0(a,l,h);return}const d=h[1];if(a._tx===l&&await _y(a,l),a._tx!==l){Hs(a,l),zt(a,d),vl(a,h);return}const p=l[2],g=ec(p,a.stores.resolvedLocation.get()),b=h[2];await a.startViewTransition(async()=>{var _;if(a._tx===l&&await _y(a,l),a._tx!==l){Hs(a,l),zt(a,d),vl(a,h);return}const y=()=>{Hs(a,l),DS(a,l,d,f),a._tx===l&&(a.emit({type:"onLoad",...g}),a._tx===l&&a.emit({type:"onBeforeRouteMount",...g}))},S=await a.startTransition(y,d);if(a._tx!==l){vl(a,h);return}b!=null&&b.length&&OS(a,l,d,b,h[3]).catch(console.error),a.batch(()=>{a.stores.resolvedLocation.set(p),a.stores.status.set("idle"),a._tx===l&&a.emit({type:"onResolved",...g}),S&&a._tx===l&&a.emit({type:"onRendered",...g})}),a._tx===l&&((_=a._commitPromise)==null||_.resolve(),a._commitPromise=void 0)})}async function US(a,l){var D;const s=a._tx,r=a.stores.resolvedLocation.get(),o=r??a.stores.location.get(),f=a.latestLocation,h=a._pendingLocation,d=(h==null?void 0:h.href)===f.href?h._redirects??0:0,p=a._handoff,g=p==null?void 0:p[0](),b=new AbortController,y=a._preflight;if(a._preflight=b,g||p==null||p[1](),y==null||y.abort(),!b.signal.aborted){const X=ec(f,r);a.emit({type:"onBeforeNavigate",...X}),b.signal.aborted||a.emit({type:"onBeforeLoad",...X})}if(b.signal.aborted){await Lu(a,s);return}const S=o.href===f.href;let _=b;const w=a.matchRoutes(f,{_controller:b});Ed(w);const E=g?p[1](w):void 0;if(E?_=g:g==null||g.abort(),b.signal.aborted){zt(a,w),await Lu(a,s);return}a._preflight=void 0;let j;const R=()=>kS(a,L,S,()=>ad(a,L),l==null?void 0:l.sync,E),z=l!=null&&l.sync?new Promise(X=>j=X):Promise.resolve().then(R).then(),L=[_,d,f,w,Date.now(),z];if(a._tx=L,s){for(const X of a.stores.matches.get()){if(a._tx!==L)break;X.isFetching&&nr(a,X,!1)}s[0].abort(),zt(a,s[3],L[3],!0)}if(a._tx!==L){zt(a,L[3]),L[3]=[],j==null||j(),await Lu(a,L);return}a.batch(()=>{a.stores.status.set("pending"),a.stores.location.set(f)}),(E||!a._committed.length&&((D=w[0])==null?void 0:D.status)!=="success"&&!w.some(X=>X._notFound))&&ad(a,L),j==null||j(R()),await z,await Lu(a,L)}async function LS(a,l){let s=a.buildLocation(l);for(let r=0;;r++){const o=a._committed,f=new AbortController;let h,d,p;try{try{h=a.matchRoutes(s,{_controller:f}),Ed(h),d=(a._preloads??(a._preloads=new Map)).set(f,h),p=await M0(a,s,h,[f,r,o,!0])}finally{d&&(d=d.delete(f),zt(a,h)),f.abort()}if(!er(p))return p[1];if(!d||p.length<3)return;s=p[2]}catch(g){Di(g)||console.error(g);return}}}const BS="Error preloading route! ☝️";var R0=class{get to(){return this._to}get id(){return this._id}get path(){return this._path}get fullPath(){return this._fullPath}constructor(a){if(this.init=l=>{var p,g;this.originalIndex=l.originalIndex;const s=this.options,r=!(s!=null&&s.path)&&!(s!=null&&s.id);this.parentRoute=(g=(p=this.options).getParentRoute)==null?void 0:g.call(p),r?this._path=mi:this.parentRoute||vd();let o=r?mi:s==null?void 0:s.path;o&&o!=="/"&&(o=b0(o));const f=(s==null?void 0:s.id)||o;let h=r?mi:Hu([this.parentRoute.id==="__root__"?"":this.parentRoute.id,f]);o==="__root__"&&(o="/"),h!=="__root__"&&(h=Hu(["/",h]));const d=h==="__root__"?"/":Hu([this.parentRoute.fullPath,o]);this._path=o,this._id=h,this._fullPath=d,this._to=Jn(d)},this.addChildren=l=>this._addFileChildren(l),this._addFileChildren=l=>(Array.isArray(l)&&(this.children=l),typeof l=="object"&&l!==null&&(this.children=Object.values(l)),this),this._addFileTypes=()=>this,this.updateLoader=l=>(Object.assign(this.options,l),this),this.update=l=>(Object.assign(this.options,l),this),this.lazy=l=>(this.lazyFn=l,this),this.redirect=l=>S0({from:this.fullPath,...l}),this.options=a||{},this.isRoot=!(a!=null&&a.getParentRoute),a!=null&&a.id&&(a!=null&&a.path))throw new Error("Route cannot have both an 'id' and a 'path' option.")}},HS=class extends R0{constructor(a){super(a)}},Td=class extends F.Component{constructor(...a){super(...a),this.state={error:null},this.reset=()=>{this.setState({error:null})}}static getDerivedStateFromProps(a,l){const s=a.getResetKey();return l.error&&l.resetKey!==s?{resetKey:s,error:null}:{resetKey:s}}static getDerivedStateFromError(a){return{error:a}}componentDidCatch(a,l){var s,r;(r=(s=this.props).onCatch)==null||r.call(s,a,l)}render(){const a=this.state.error;return a?F.createElement(this.props.errorComponent??qS,{error:a,reset:this.reset}):this.props.children}};function qS({error:a}){const[l,s]=F.useState(!1);return v.jsxs("div",{style:{padding:".5rem",maxWidth:"100%"},children:[v.jsxs("div",{style:{display:"flex",alignItems:"center",gap:".5rem"},children:[v.jsx("strong",{style:{fontSize:"1rem"},children:"Something went wrong!"}),v.jsx("button",{style:{appearance:"none",fontSize:".6em",border:"1px solid currentColor",padding:".1rem .2rem",fontWeight:"bold",borderRadius:".25rem"},onClick:()=>s(r=>!r),children:l?"Hide Error":"Show Error"})]}),v.jsx("div",{style:{height:".25rem"}}),l?v.jsx("div",{children:v.jsx("pre",{style:{fontSize:".7em",border:"1px solid red",borderRadius:".25rem",padding:".3rem",color:"red",overflow:"auto"},children:a.message?v.jsx("code",{children:a.message}):null})}):null]})}function GS({children:a,fallback:l=null}){return v.jsx(cn.Fragment,{children:z0()?a:l})}function z0(){return cn.useSyncExternalStore(QS,()=>!0,()=>!1)}function QS(){return()=>{}}var N0=F.createContext(null);function on(a){return F.useContext(N0)}var nc=F.createContext(void 0),VS=F.createContext(void 0),Je=(a=>(a[a.None=0]="None",a[a.Mutable=1]="Mutable",a[a.Watching=2]="Watching",a[a.RecursedCheck=4]="RecursedCheck",a[a.Recursed=8]="Recursed",a[a.Dirty=16]="Dirty",a[a.Pending=32]="Pending",a))(Je||{});function YS({update:a,notify:l,unwatched:s}){return{link:r,unlink:o,propagate:f,checkDirty:h,shallowPropagate:d};function r(g,b,y){const S=b.depsTail;if(S!==void 0&&S.dep===g)return;const _=S!==void 0?S.nextDep:b.deps;if(_!==void 0&&_.dep===g){_.version=y,b.depsTail=_;return}const w=g.subsTail;if(w!==void 0&&w.version===y&&w.sub===b)return;const E=b.depsTail=g.subsTail={version:y,dep:g,sub:b,prevDep:S,nextDep:_,prevSub:w,nextSub:void 0};_!==void 0&&(_.prevDep=E),S!==void 0?S.nextDep=E:b.deps=E,w!==void 0?w.nextSub=E:g.subs=E}function o(g,b=g.sub){const y=g.dep,S=g.prevDep,_=g.nextDep,w=g.nextSub,E=g.prevSub;return _!==void 0?_.prevDep=S:b.depsTail=S,S!==void 0?S.nextDep=_:b.deps=_,w!==void 0?w.prevSub=E:y.subsTail=E,E!==void 0?E.nextSub=w:(y.subs=w)===void 0&&s(y),_}function f(g){let b=g.nextSub,y;e:do{const S=g.sub;let _=S.flags;if(_&60?_&12?_&4?!(_&48)&&p(g,S)?(S.flags=_|40,_&=1):_=0:S.flags=_&-9|32:_=0:S.flags=_|32,_&2&&l(S),_&1){const w=S.subs;if(w!==void 0){const E=(g=w).nextSub;E!==void 0&&(y={value:b,prev:y},b=E);continue}}if((g=b)!==void 0){b=g.nextSub;continue}for(;y!==void 0;)if(g=y.value,y=y.prev,g!==void 0){b=g.nextSub;continue e}break}while(!0)}function h(g,b){let y,S=0,_=!1;e:do{const w=g.dep,E=w.flags;if(b.flags&16)_=!0;else if((E&17)===17){if(a(w)){const j=w.subs;j.nextSub!==void 0&&d(j),_=!0}}else if((E&33)===33){(g.nextSub!==void 0||g.prevSub!==void 0)&&(y={value:g,prev:y}),g=w.deps,b=w,++S;continue}if(!_){const j=g.nextDep;if(j!==void 0){g=j;continue}}for(;S--;){const j=b.subs,R=j.nextSub!==void 0;if(R?(g=y.value,y=y.prev):g=j,_){if(a(b)){R&&d(j),b=g.sub;continue}_=!1}else b.flags&=-33;b=g.sub;const z=g.nextDep;if(z!==void 0){g=z;continue e}}return _}while(!0)}function d(g){do{const b=g.sub,y=b.flags;(y&48)===32&&(b.flags=y|16,(y&6)===2&&l(b))}while((g=g.nextSub)!==void 0)}function p(g,b){let y=b.depsTail;for(;y!==void 0;){if(y===g)return!0;y=y.prevDep}return!1}}function KS(a,l,s){var f,h,d;const r=typeof a=="object",o=r?a:void 0;return{next:(f=r?a.next:a)==null?void 0:f.bind(o),error:(h=r?a.error:l)==null?void 0:h.bind(o),complete:(d=r?a.complete:s)==null?void 0:d.bind(o)}}const ld=[];let Vu=0;const{link:wy,unlink:XS,propagate:ZS,checkDirty:D0,shallowPropagate:Ey}=YS({update(a){return a._update()},notify(a){ld[id++]=a,a.flags&=~Je.Watching},unwatched(a){a.depsTail!==void 0&&(a.depsTail=void 0,a.flags=Je.Mutable|Je.Dirty,Wu(a))}});let Bu=0,id=0,pn,sd=0;function JS(a){try{++sd,a()}finally{--sd||O0()}}function Wu(a){const l=a.depsTail;let s=l!==void 0?l.nextDep:a.deps;for(;s!==void 0;)s=XS(s,a)}function O0(){if(!(sd>0)){for(;Bu{var g;o.get(),d.current?(g=h.next)==null||g.call(h,o._snapshot):d.current=!0});return{unsubscribe:()=>{p.stop()}}},_update(f){const h=pn,d=(l==null?void 0:l.compare)??Object.is;if(s)pn=o,++Vu,o.depsTail=void 0;else if(f===void 0)return!1;s&&(o.flags=Je.Mutable|Je.RecursedCheck);try{const p=o._snapshot,g=typeof f=="function"?f(p):f===void 0&&s?r(p):f;return p===void 0||!d(p,g)?(o._snapshot=g,!0):!1}finally{pn=h,s&&(o.flags&=~Je.RecursedCheck),Wu(o)}}};return s?(o.flags=Je.Mutable|Je.Dirty,o.get=function(){const f=o.flags;if(f&Je.Dirty||f&Je.Pending&&D0(o.deps,o)){if(o._update()){const h=o.subs;h!==void 0&&Ey(h)}}else f&Je.Pending&&(o.flags=f&~Je.Pending);return pn!==void 0&&wy(o,pn,Vu),o._snapshot}):o.set=function(f){if(o._update(f)){const h=o.subs;h!==void 0&&(ZS(h),Ey(h),O0())}},o}function FS(a){const l=()=>{const r=pn;pn=s,++Vu,s.depsTail=void 0,s.flags=Je.Watching|Je.RecursedCheck;try{return a()}finally{pn=r,s.flags&=~Je.RecursedCheck,Wu(s)}},s={deps:void 0,depsTail:void 0,subs:void 0,subsTail:void 0,flags:Je.Watching|Je.RecursedCheck,notify(){const r=this.flags;r&Je.Dirty||r&Je.Pending&&D0(this.deps,this)?l():this.flags=Je.Watching},stop(){this.flags=Je.None,this.depsTail=void 0,Wu(this)}};return l(),s}var Af={exports:{}},Cf={},Rf={exports:{}},zf={};/** - * @license React - * use-sync-external-store-shim.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var Ty;function $S(){if(Ty)return zf;Ty=1;var a=cr();function l(y,S){return y===S&&(y!==0||1/y===1/S)||y!==y&&S!==S}var s=typeof Object.is=="function"?Object.is:l,r=a.useState,o=a.useEffect,f=a.useLayoutEffect,h=a.useDebugValue;function d(y,S){var _=S(),w=r({inst:{value:_,getSnapshot:S}}),E=w[0].inst,j=w[1];return f(function(){E.value=_,E.getSnapshot=S,p(E)&&j({inst:E})},[y,_,S]),o(function(){return p(E)&&j({inst:E}),y(function(){p(E)&&j({inst:E})})},[y]),h(_),_}function p(y){var S=y.getSnapshot;y=y.value;try{var _=S();return!s(y,_)}catch{return!0}}function g(y,S){return S()}var b=typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?g:d;return zf.useSyncExternalStore=a.useSyncExternalStore!==void 0?a.useSyncExternalStore:b,zf}var My;function WS(){return My||(My=1,Rf.exports=$S()),Rf.exports}/** - * @license React - * use-sync-external-store-shim/with-selector.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var Ay;function PS(){if(Ay)return Cf;Ay=1;var a=cr(),l=WS();function s(g,b){return g===b&&(g!==0||1/g===1/b)||g!==g&&b!==b}var r=typeof Object.is=="function"?Object.is:s,o=l.useSyncExternalStore,f=a.useRef,h=a.useEffect,d=a.useMemo,p=a.useDebugValue;return Cf.useSyncExternalStoreWithSelector=function(g,b,y,S,_){var w=f(null);if(w.current===null){var E={hasValue:!1,value:null};w.current=E}else E=w.current;w=d(function(){function R(q){if(!z){if(z=!0,L=q,q=S(q),_!==void 0&&E.hasValue){var Y=E.value;if(_(Y,q))return D=Y}return D=q}if(Y=D,r(L,q))return Y;var J=S(q);return _!==void 0&&_(Y,J)?(L=q,Y):(L=q,D=J)}var z=!1,L,D,X=y===void 0?null:y;return[function(){return R(b())},X===null?void 0:function(){return R(X())}]},[b,y,S,_]);var j=o(g,w[0],w[1]);return h(function(){E.hasValue=!0,E.value=j},[j]),p(j),j},Cf}var Cy;function IS(){return Cy||(Cy=1,Af.exports=PS()),Af.exports}var e2=IS();function t2(a,l){return a===l}function Wn(a,l,s=t2){const r=F.useCallback(h=>{if(!a)return()=>{};const{unsubscribe:d}=a.subscribe(h);return d},[a]),o=F.useCallback(()=>a==null?void 0:a.get(),[a]);return e2.useSyncExternalStoreWithSelector(r,o,o,l,s)}var Ry={};function k0(a,l){const s=F.useRef();return r=>{const o=a!=null&&a.select?a.select(r):r;return(a==null?void 0:a.structuralSharing)??l.options.defaultStructuralSharing?s.current=ul(s.current,o):o}}function Sl(a){const l=on(),s=F.useContext(a.from?VS:nc),r=a.from??s,o=l.stores.getMatchStore(r),f=k0(a,l),h=Wn(o,d=>d?f(d):Ry);if(h!==Ry)return h;(a.shouldThrow??!0)&&vd()}function U0(a){return Sl({from:a.from,strict:a.strict,structuralSharing:a.structuralSharing,select:l=>a.select?a.select(l.loaderData):l.loaderData})}function L0(a){const{select:l,...s}=a;return Sl({...s,select:r=>l?l(r.loaderDeps):r.loaderDeps})}function B0(a){return Sl({from:a.from,shouldThrow:a.shouldThrow,structuralSharing:a.structuralSharing,strict:a.strict,select:l=>{const s=a.strict===!1?l.params:l._strictParams;return a.select?a.select(s):s}})}function H0(a){return Sl({from:a.from,strict:a.strict,shouldThrow:a.shouldThrow,structuralSharing:a.structuralSharing,select:l=>a.select?a.select(l.search):l.search})}function fr(a){const l=on();return F.useCallback(s=>l.navigate({...s,from:s.from??(a==null?void 0:a.from)}),[a==null?void 0:a.from,l])}function q0(a){return Sl({...a,select:l=>a.select?a.select(l.context):l.context})}function Nf(a){const l=F.useRef(a);return Ba(l.current,a,{ignoreUndefined:!1})||(l.current=a),l.current}function n2(a,l){return a[0]===l[0]&&a[1]===l[1]&&a[2]===l[2]}function a2(a,l,s){if(a!=null&&a.external)return Xu(a.href,s)?void 0:a.href;if(!o2(l)&&!(typeof l!="string"||l.indexOf(":")===-1))try{return new URL(l),Xu(l,s)?void 0:l}catch{}}function l2(a,l,s,r,o,f){if(f)return!1;if(s!=null&&s.exact){if(!tS(a.pathname,l.pathname,r))return!1}else{const h=Ju(a.pathname,r),d=Ju(l.pathname,r);if(!(h.startsWith(d)&&(h.length===d.length||h[d.length]==="/")))return!1}return((s==null?void 0:s.includeSearch)??!0)&&!Ba(a.search,l.search,{partial:!(s!=null&&s.exact),ignoreUndefined:!(s!=null&&s.explicitUndefined)})?!1:s!=null&&s.includeHash?o&&a.hash===l.hash:!0}function i2(a,l){const s=on(),r=Lx(l),{activeProps:o,inactiveProps:f,activeOptions:h,to:d,preload:p,preloadDelay:g,preloadIntentProximity:b,hashScrollIntoView:y,replace:S,startTransition:_,resetScroll:w,viewTransition:E,children:j,target:R,disabled:z,style:L,className:D,onClick:X,onBlur:q,onFocus:Y,onMouseEnter:J,onMouseLeave:Q,onTouchStart:P,ignoreBlocker:ee,params:I,search:de,hash:$,state:ne,mask:B,reloadDocument:W,unsafeRelative:re,from:ce,_fromLocation:Se,...M}=a,Z=z0(),te=Nf(a.search),ie=Nf(a.params),he=Nf(h),ge=F.useMemo(()=>a,[s,a.from,a._fromLocation,a.hash,a.to,te,ie,a.state,a.mask,a.unsafeRelative]),Ae=F.useCallback(it=>{const Fe=s.buildLocation({_fromLocation:it,...ge}),jn=c2(Fe.maskedLocation?Fe.maskedLocation.publicHref:Fe.publicHref,Fe.maskedLocation?Fe.maskedLocation.external:Fe.external,s.history,z),Vi=a2(jn,d,s.protocolAllowlist);return[jn==null?void 0:jn.href,Vi,l2(it,Fe,he,s.basepath,Z,Vi!==void 0)]},[he,z,Z,ge,s,d]),[ot,Ve,_n]=Wn(s.stores.location,Ae,n2),wn=_n?Ni(o,{})??s2:Df,Pn=_n?Df:Ni(f,{})??Df,Hi=[D,wn.className,Pn.className].filter(Boolean).join(" "),fn=(L||wn.style||Pn.style)&&{...L,...wn.style,...Pn.style},El=F.useRef(!1),an=a.reloadDocument||Ve||z?!1:p??s.options.defaultPreload,qi=g??s.options.defaultPreloadDelay??0,En=F.useCallback(()=>{s.preloadRoute(ge).catch(it=>{console.warn(it),console.warn(BS)})},[s,ge]),Ga=F.useCallback(it=>{if(!it){Of(r);return}if(!(it.isIntersecting??an==="intent")){it.isIntersecting===!1&&Of(r);return}if(!qi){En();return}Zs.has(r)||Zs.set(r,setTimeout(()=>{Zs.delete(r),En()},qi))},[En,r,an,qi]);Ux(r,Ga,an!=="viewport"),F.useEffect(()=>{El.current||an==="render"&&(En(),El.current=!0)},[En,an]);const Gi=it=>{const Fe=it.currentTarget.getAttribute("target"),jn=R!==void 0?R:Fe;!z&&!(it.metaKey||it.altKey||it.ctrlKey||it.shiftKey)&&!it.defaultPrevented&&(!jn||jn==="_self")&&it.button===0&&(it.preventDefault(),s.navigate({...ge,replace:S,resetScroll:w,hashScrollIntoView:y,startTransition:_,viewTransition:E,ignoreBlocker:ee}))};if(Ve)return{...M,ref:r,href:Ve,...j&&{children:j},...R&&{target:R},...z&&{disabled:z},...L&&{style:L},...D&&{className:D},...X&&{onClick:X},...q&&{onBlur:q},...Y&&{onFocus:Y},...J&&{onMouseEnter:J},...Q&&{onMouseLeave:Q},...P&&{onTouchStart:P}};const Qi=()=>{an==="intent"&&En()},hr=()=>{an==="intent"&&Of(r)};return{...M,...wn,...Pn,href:ot,ref:r,onClick:ci([X,Gi]),onBlur:ci([q,hr]),onFocus:ci([Y,Ga]),onMouseEnter:ci([J,Ga]),onMouseLeave:ci([Q,hr]),onTouchStart:ci([P,Qi]),disabled:!!z,target:R,...fn&&{style:fn},...Hi&&{className:Hi},...z&&r2,..._n&&u2}}var Df={},s2={className:"active"},r2={role:"link","aria-disabled":!0},u2={"data-status":"active","aria-current":"page"},Zs=new WeakMap,Of=a=>{clearTimeout(Zs.get(a)),Zs.delete(a)},ci=a=>l=>{for(const s of a)if(s){if(l.defaultPrevented)return;s(l)}};function c2(a,l,s,r){if(!r)return l?{href:a,external:!0}:{href:s.createHref(a)||"/",external:!1}}function o2(a){if(typeof a!="string")return!1;const l=a.charCodeAt(0);return l===47?a.charCodeAt(1)!==47:l===46}var ac=F.forwardRef((a,l)=>{const{_asChild:s,...r}=a,{type:o,...f}=i2(r,l),h=typeof r.children=="function"?r.children({isActive:f["data-status"]==="active"}):r.children;if(!s){const{disabled:d,...p}=f;return F.createElement("a",p,h)}return F.createElement(s,f,h)}),f2=class extends R0{constructor(a){super(a),this.useMatch=l=>Sl({select:l==null?void 0:l.select,from:this.id,structuralSharing:l==null?void 0:l.structuralSharing}),this.useRouteContext=l=>q0({...l,from:this.id}),this.useSearch=l=>H0({select:l==null?void 0:l.select,structuralSharing:l==null?void 0:l.structuralSharing,from:this.id}),this.useParams=l=>B0({select:l==null?void 0:l.select,structuralSharing:l==null?void 0:l.structuralSharing,from:this.id}),this.useLoaderDeps=l=>L0({...l,from:this.id}),this.useLoaderData=l=>U0({...l,from:this.id}),this.useNavigate=()=>fr({from:this.fullPath}),this.Link=cn.forwardRef((l,s)=>v.jsx(ac,{ref:s,from:this.fullPath,...l}))}};function ki(a){return new f2(a)}var d2=class extends HS{constructor(a){super(a),this.useMatch=l=>Sl({select:l==null?void 0:l.select,from:this.id,structuralSharing:l==null?void 0:l.structuralSharing}),this.useRouteContext=l=>q0({...l,from:this.id}),this.useSearch=l=>H0({select:l==null?void 0:l.select,structuralSharing:l==null?void 0:l.structuralSharing,from:this.id}),this.useParams=l=>B0({select:l==null?void 0:l.select,structuralSharing:l==null?void 0:l.structuralSharing,from:this.id}),this.useLoaderDeps=l=>L0({...l,from:this.id}),this.useLoaderData=l=>U0({...l,from:this.id}),this.useNavigate=()=>fr({from:this.fullPath}),this.Link=cn.forwardRef((l,s)=>v.jsx(ac,{ref:s,from:this.fullPath,...l}))}};function h2(a){return new d2(a)}function m2(a){const l=on(),s=`not-found-${Wn(l.stores.location,r=>r.pathname)}-${Wn(l.stores.status,r=>r)}`;return v.jsx(Td,{getResetKey:()=>s,onCatch:(r,o)=>{var f;if(Di(r))(f=a.onCatch)==null||f.call(a,r,o);else throw r},errorComponent:({error:r})=>{var o;if(Di(r))return(o=a.fallback)==null?void 0:o.call(a,r);throw r},children:a.children})}function g2(){return v.jsx("p",{children:"Not Found"})}function fi(a){return v.jsx(v.Fragment,{children:a.children})}function G0(a,l,s){return l.options.notFoundComponent?v.jsx(l.options.notFoundComponent,{...s}):a.options.defaultNotFoundComponent?v.jsx(a.options.defaultNotFoundComponent,{...s}):v.jsx(g2,{})}function lc(a,l){const s=(l==null?void 0:l.options.pendingComponent)??a.options.defaultPendingComponent;return s?v.jsx(s,{}):null}var p2=(a,l)=>a[0]===l[0]&&a[1]===l[1],Q0=(a,l,s)=>!l.isRoot||l.options.shellComponent||l.options.wrapInSuspense||s===!1||s==="data-only"||!a.ssr,V0=F.memo(function({routeId:l}){const s=on();return v.jsx(y2,{router:s,match:Wn(s.stores.getMatchStore(l),r=>r)})});function y2({router:a,match:l}){var y,S;const s=a.routesById[l.routeId],r=lc(a,s),o=s.options.errorComponent??a.options.defaultErrorComponent,f=s.options.onCatch??a.options.defaultOnCatch,h=s.isRoot?s.options.notFoundComponent??((y=a.options.notFoundRoute)==null?void 0:y.options.component):s.options.notFoundComponent,d=l.ssr===!1||l.ssr==="data-only",p=Q0(a,s,l.ssr)&&(s.options.wrapInSuspense??r??(((S=s.options.errorComponent)==null?void 0:S.preload)||d))?F.Suspense:fi,g=o?Td:fi,b=h?m2:fi;return v.jsxs(s.isRoot?s.options.shellComponent??fi:fi,{children:[v.jsx(nc.Provider,{value:l.routeId,children:v.jsx(p,{fallback:r,children:v.jsx(g,{getResetKey:()=>l,errorComponent:o,onCatch:(_,w)=>{if(Di(_))throw _.routeId??(_.routeId=l.routeId),_;f==null||f(_,w)},children:v.jsx(b,{fallback:_=>{if(_.routeId??(_.routeId=l.routeId),_.routeId!==l.routeId)throw _;return F.createElement(h,_)},children:d?v.jsx(GS,{fallback:r,children:v.jsx(zy,{match:l})}):v.jsx(zy,{match:l})})})})}),null]})}var zy=F.memo(function({match:l}){const s=on(),r=l.routeId,o=s.routesById[r],f=F.useMemo(()=>{var p;const d=(p=o.options.remountDeps??s.options.defaultRemountDeps)==null?void 0:p({routeId:r,loaderDeps:l.loaderDeps,params:l._strictParams,search:l._strictSearch});return d?JSON.stringify(d):void 0},[r,l.loaderDeps,l._strictParams,l._strictSearch,o.options.remountDeps,s.options.defaultRemountDeps]),h=F.useMemo(()=>{const d=o.options.component??s.options.defaultComponent;return d?v.jsx(d,{},f):v.jsx(Y0,{})},[f,o.options.component,s.options.defaultComponent]);if(l.status==="pending"){if(s.ssr&&!Q0(s,o,l.ssr))return h;if(s._tx)throw s._tx[5];return lc(s,o)}if(l.status==="notFound")return G0(s,o,l.error);if(l.status==="error")throw l.error;return h}),Y0=F.memo(function(){const l=on(),s=F.useContext(nc);let r,o,f;{const d=l.stores.getMatchStore(s);[r,o]=Wn(d,p=>[!!p._notFound,p.error],p2),f=Wn(l.stores.ids,p=>p[p.indexOf(s)+1])}if(r)return G0(l,l.routesById[s],o);if(!f)return null;const h=v.jsx(V0,{routeId:f});return s===mi?v.jsx(F.Suspense,{fallback:lc(l),children:h}):h});function K0(a,l){const s=a[1];a.length=0,s==null||s(l)}function v2({t:a}){const l=on(),s=l._rendered??(l._rendered=[]);return l.startTransition=(r,o)=>new Promise(f=>{K0(s,!1),s.push(o,f),a(l),F.startTransition(r)}),f0(()=>{const r=l.history.subscribe(l.load);l.updateLatestLocation();const o=l.latestLocation,f=l.buildLocation({to:o.pathname,search:!0,params:!0,hash:!0,state:!0,_includeValidateSearch:!0});if(Jn(o.publicHref)!==Jn(f.publicHref))return l.commitLocation({...f,replace:!0,ignoreBlocker:!0}),r;const h=l.stores.resolvedLocation.get();return(h==null?void 0:h.href)===o.href&&h.state.__TSR_key===o.state.__TSR_key?s.push(l.stores.matches.get(),d=>{d&&l.emit({type:"onRendered",...ec(h,h)})}):l._tx||l.load({sync:!0}).catch(console.error),r},[l,l.history]),null}function b2(){const a=on(),l=a.routesById[mi],s=lc(a,l),r=a.ssr?fi:F.Suspense,o=v.jsxs(v.Fragment,{children:[v.jsx(v2,{t:F.useState()[1]}),v.jsx(r,{fallback:s,children:v.jsx(x2,{})})]});return a.options.InnerWrap?v.jsx(a.options.InnerWrap,{children:o}):o}function x2(){const a=on(),l=a._rendered,s=Wn(a.stores.matches,h=>l[0]??h),r=s[0],o=r==null?void 0:r.routeId;f0(()=>{l[0]===s&&K0(l,!0)},[l,s]);const f=o?v.jsx(V0,{routeId:o}):null;return v.jsx(nc.Provider,{value:o,children:a.options.disableGlobalCatchBoundary?f:v.jsx(Td,{getResetKey:()=>r,onCatch:void 0,children:f})})}var S2=a=>({createMutableStore:jy,createReadonlyStore:jy,batch:JS}),_2=a=>new w2(a),w2=class extends jS{constructor(a){super(a,S2)}};function E2({router:a,children:l,...s}){h0(s)&&a.update({...a.options,...s,context:{...a.options.context,...s.context}});const r=v.jsx(N0.Provider,{value:a,children:l});return a.options.Wrap?v.jsx(a.options.Wrap,{children:r}):r}function j2({router:a,...l}){return v.jsx(E2,{router:a,...l,children:v.jsx(b2,{})})}function Ny(a){const l=on({warn:(a==null?void 0:a.router)===void 0}),s=(a==null?void 0:a.router)||l;return Wn(s.stores.__store,k0(a,s))}const T2="modulepreload",M2=function(a){return"/"+a},Dy={},Kt=function(l,s,r){let o=Promise.resolve();if(s&&s.length>0){let h=function(g){return Promise.all(g.map(b=>Promise.resolve(b).then(y=>({status:"fulfilled",value:y}),y=>({status:"rejected",reason:y}))))};document.getElementsByTagName("link");const d=document.querySelector("meta[property=csp-nonce]"),p=(d==null?void 0:d.nonce)||(d==null?void 0:d.getAttribute("nonce"));o=h(s.map(g=>{if(g=M2(g),g in Dy)return;Dy[g]=!0;const b=g.endsWith(".css"),y=b?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${g}"]${y}`))return;const S=document.createElement("link");if(S.rel=b?"stylesheet":T2,b||(S.as="script"),S.crossOrigin="",S.href=g,p&&S.setAttribute("nonce",p),document.head.appendChild(S),b)return new Promise((_,w)=>{S.addEventListener("load",_),S.addEventListener("error",()=>w(new Error(`Unable to preload CSS for ${g}`)))})}))}function f(h){const d=new Event("vite:preloadError",{cancelable:!0});if(d.payload=h,window.dispatchEvent(d),!d.defaultPrevented)throw h}return o.then(h=>{for(const d of h||[])d.status==="rejected"&&f(d.reason);return l().catch(f)})};/** - * @license lucide-react v0.460.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const A2=a=>a.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),X0=(...a)=>a.filter((l,s,r)=>!!l&&l.trim()!==""&&r.indexOf(l)===s).join(" ").trim();/** - * @license lucide-react v0.460.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */var C2={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};/** - * @license lucide-react v0.460.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const R2=F.forwardRef(({color:a="currentColor",size:l=24,strokeWidth:s=2,absoluteStrokeWidth:r,className:o="",children:f,iconNode:h,...d},p)=>F.createElement("svg",{ref:p,...C2,width:l,height:l,stroke:a,strokeWidth:r?Number(s)*24/Number(l):s,className:X0("lucide",o),...d},[...h.map(([g,b])=>F.createElement(g,b)),...Array.isArray(f)?f:[f]]));/** - * @license lucide-react v0.460.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const je=(a,l)=>{const s=F.forwardRef(({className:r,...o},f)=>F.createElement(R2,{ref:f,iconNode:l,className:X0(`lucide-${A2(a)}`,r),...o}));return s.displayName=`${a}`,s};/** - * @license lucide-react v0.460.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const z2=je("Activity",[["path",{d:"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2",key:"169zse"}]]);/** - * @license lucide-react v0.460.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const N2=je("BookMarked",[["path",{d:"M10 2v8l3-3 3 3V2",key:"sqw3rj"}],["path",{d:"M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H19a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1H6.5a1 1 0 0 1 0-5H20",key:"k3hazp"}]]);/** - * @license lucide-react v0.460.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const rd=je("Bot",[["path",{d:"M12 8V4H8",key:"hb8ula"}],["rect",{width:"16",height:"12",x:"4",y:"8",rx:"2",key:"enze0r"}],["path",{d:"M2 14h2",key:"vft8re"}],["path",{d:"M20 14h2",key:"4cs60a"}],["path",{d:"M15 13v2",key:"1xurst"}],["path",{d:"M9 13v2",key:"rq6x2g"}]]);/** - * @license lucide-react v0.460.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Z0=je("Boxes",[["path",{d:"M2.97 12.92A2 2 0 0 0 2 14.63v3.24a2 2 0 0 0 .97 1.71l3 1.8a2 2 0 0 0 2.06 0L12 19v-5.5l-5-3-4.03 2.42Z",key:"lc1i9w"}],["path",{d:"m7 16.5-4.74-2.85",key:"1o9zyk"}],["path",{d:"m7 16.5 5-3",key:"va8pkn"}],["path",{d:"M7 16.5v5.17",key:"jnp8gn"}],["path",{d:"M12 13.5V19l3.97 2.38a2 2 0 0 0 2.06 0l3-1.8a2 2 0 0 0 .97-1.71v-3.24a2 2 0 0 0-.97-1.71L17 10.5l-5 3Z",key:"8zsnat"}],["path",{d:"m17 16.5-5-3",key:"8arw3v"}],["path",{d:"m17 16.5 4.74-2.85",key:"8rfmw"}],["path",{d:"M17 16.5v5.17",key:"k6z78m"}],["path",{d:"M7.97 4.42A2 2 0 0 0 7 6.13v4.37l5 3 5-3V6.13a2 2 0 0 0-.97-1.71l-3-1.8a2 2 0 0 0-2.06 0l-3 1.8Z",key:"1xygjf"}],["path",{d:"M12 8 7.26 5.15",key:"1vbdud"}],["path",{d:"m12 8 4.74-2.85",key:"3rx089"}],["path",{d:"M12 13.5V8",key:"1io7kd"}]]);/** - * @license lucide-react v0.460.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const D2=je("Brain",[["path",{d:"M12 5a3 3 0 1 0-5.997.125 4 4 0 0 0-2.526 5.77 4 4 0 0 0 .556 6.588A4 4 0 1 0 12 18Z",key:"l5xja"}],["path",{d:"M12 5a3 3 0 1 1 5.997.125 4 4 0 0 1 2.526 5.77 4 4 0 0 1-.556 6.588A4 4 0 1 1 12 18Z",key:"ep3f8r"}],["path",{d:"M15 13a4.5 4.5 0 0 1-3-4 4.5 4.5 0 0 1-3 4",key:"1p4c4q"}],["path",{d:"M17.599 6.5a3 3 0 0 0 .399-1.375",key:"tmeiqw"}],["path",{d:"M6.003 5.125A3 3 0 0 0 6.401 6.5",key:"105sqy"}],["path",{d:"M3.477 10.896a4 4 0 0 1 .585-.396",key:"ql3yin"}],["path",{d:"M19.938 10.5a4 4 0 0 1 .585.396",key:"1qfode"}],["path",{d:"M6 18a4 4 0 0 1-1.967-.516",key:"2e4loj"}],["path",{d:"M19.967 17.484A4 4 0 0 1 18 18",key:"159ez6"}]]);/** - * @license lucide-react v0.460.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const O2=je("Check",[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]]);/** - * @license lucide-react v0.460.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const k2=je("ChevronLeft",[["path",{d:"m15 18-6-6 6-6",key:"1wnfg3"}]]);/** - * @license lucide-react v0.460.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Js=je("ChevronRight",[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]]);/** - * @license lucide-react v0.460.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const U2=je("CircleCheck",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);/** - * @license lucide-react v0.460.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const J0=je("CircleHelp",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3",key:"1u773s"}],["path",{d:"M12 17h.01",key:"p32p05"}]]);/** - * @license lucide-react v0.460.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const L2=je("CircleX",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m15 9-6 6",key:"1uzhvr"}],["path",{d:"m9 9 6 6",key:"z0biqf"}]]);/** - * @license lucide-react v0.460.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const B2=je("Command",[["path",{d:"M15 6v12a3 3 0 1 0 3-3H6a3 3 0 1 0 3 3V6a3 3 0 1 0-3 3h12a3 3 0 1 0-3-3",key:"11bfej"}]]);/** - * @license lucide-react v0.460.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const H2=je("Cpu",[["rect",{width:"16",height:"16",x:"4",y:"4",rx:"2",key:"14l7u7"}],["rect",{width:"6",height:"6",x:"9",y:"9",rx:"1",key:"5aljv4"}],["path",{d:"M15 2v2",key:"13l42r"}],["path",{d:"M15 20v2",key:"15mkzm"}],["path",{d:"M2 15h2",key:"1gxd5l"}],["path",{d:"M2 9h2",key:"1bbxkp"}],["path",{d:"M20 15h2",key:"19e6y8"}],["path",{d:"M20 9h2",key:"19tzq7"}],["path",{d:"M9 2v2",key:"165o2o"}],["path",{d:"M9 20v2",key:"i2bqo8"}]]);/** - * @license lucide-react v0.460.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const q2=je("Eye",[["path",{d:"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0",key:"1nclc0"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);/** - * @license lucide-react v0.460.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const G2=je("Gauge",[["path",{d:"m12 14 4-4",key:"9kzdfg"}],["path",{d:"M3.34 19a10 10 0 1 1 17.32 0",key:"19p75a"}]]);/** - * @license lucide-react v0.460.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Q2=je("HardDrive",[["line",{x1:"22",x2:"2",y1:"12",y2:"12",key:"1y58io"}],["path",{d:"M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z",key:"oot6mr"}],["line",{x1:"6",x2:"6.01",y1:"16",y2:"16",key:"sgf278"}],["line",{x1:"10",x2:"10.01",y1:"16",y2:"16",key:"1l4acy"}]]);/** - * @license lucide-react v0.460.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const V2=je("HeartPulse",[["path",{d:"M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z",key:"c3ymky"}],["path",{d:"M3.22 12H9.5l.5-1 2 4.5 2-7 1.5 3.5h5.27",key:"1uw2ng"}]]);/** - * @license lucide-react v0.460.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Y2=je("History",[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}],["path",{d:"M12 7v5l4 2",key:"1fdv2h"}]]);/** - * @license lucide-react v0.460.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Md=je("Inbox",[["polyline",{points:"22 12 16 12 14 15 10 15 8 12 2 12",key:"o97t9d"}],["path",{d:"M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z",key:"oot6mr"}]]);/** - * @license lucide-react v0.460.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const K2=je("Info",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 16v-4",key:"1dtifu"}],["path",{d:"M12 8h.01",key:"e9boi3"}]]);/** - * @license lucide-react v0.460.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const X2=je("LayoutDashboard",[["rect",{width:"7",height:"9",x:"3",y:"3",rx:"1",key:"10lvy0"}],["rect",{width:"7",height:"5",x:"14",y:"3",rx:"1",key:"16une8"}],["rect",{width:"7",height:"9",x:"14",y:"12",rx:"1",key:"1hutg5"}],["rect",{width:"7",height:"5",x:"3",y:"16",rx:"1",key:"ldoo1y"}]]);/** - * @license lucide-react v0.460.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Z2=je("Library",[["path",{d:"m16 6 4 14",key:"ji33uf"}],["path",{d:"M12 6v14",key:"1n7gus"}],["path",{d:"M8 8v12",key:"1gg7y9"}],["path",{d:"M4 4v16",key:"6qkkli"}]]);/** - * @license lucide-react v0.460.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const J2=je("Lightbulb",[["path",{d:"M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5",key:"1gvzjb"}],["path",{d:"M9 18h6",key:"x1upvd"}],["path",{d:"M10 22h4",key:"ceow96"}]]);/** - * @license lucide-react v0.460.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Ad=je("LoaderCircle",[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]]);/** - * @license lucide-react v0.460.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const F2=je("Menu",[["line",{x1:"4",x2:"20",y1:"12",y2:"12",key:"1e0a9i"}],["line",{x1:"4",x2:"20",y1:"6",y2:"6",key:"1owob3"}],["line",{x1:"4",x2:"20",y1:"18",y2:"18",key:"yk5zj1"}]]);/** - * @license lucide-react v0.460.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const $2=je("Mic",[["path",{d:"M12 2a3 3 0 0 0-3 3v7a3 3 0 0 0 6 0V5a3 3 0 0 0-3-3Z",key:"131961"}],["path",{d:"M19 10v2a7 7 0 0 1-14 0v-2",key:"1vc78b"}],["line",{x1:"12",x2:"12",y1:"19",y2:"22",key:"x3vr5v"}]]);/** - * @license lucide-react v0.460.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Cd=je("Plug",[["path",{d:"M12 22v-5",key:"1ega77"}],["path",{d:"M9 8V2",key:"14iosj"}],["path",{d:"M15 8V2",key:"18g5xt"}],["path",{d:"M18 8v5a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4V8Z",key:"osxo6l"}]]);/** - * @license lucide-react v0.460.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const W2=je("RotateCcw",[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}]]);/** - * @license lucide-react v0.460.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const F0=je("Server",[["rect",{width:"20",height:"8",x:"2",y:"2",rx:"2",ry:"2",key:"ngkwjq"}],["rect",{width:"20",height:"8",x:"2",y:"14",rx:"2",ry:"2",key:"iecqi9"}],["line",{x1:"6",x2:"6.01",y1:"6",y2:"6",key:"16zg32"}],["line",{x1:"6",x2:"6.01",y1:"18",y2:"18",key:"nzw8ys"}]]);/** - * @license lucide-react v0.460.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Rd=je("ShieldAlert",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"M12 8v4",key:"1got3b"}],["path",{d:"M12 16h.01",key:"1drbdi"}]]);/** - * @license lucide-react v0.460.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const P2=je("SlidersHorizontal",[["line",{x1:"21",x2:"14",y1:"4",y2:"4",key:"obuewd"}],["line",{x1:"10",x2:"3",y1:"4",y2:"4",key:"1q6298"}],["line",{x1:"21",x2:"12",y1:"12",y2:"12",key:"1iu8h1"}],["line",{x1:"8",x2:"3",y1:"12",y2:"12",key:"ntss68"}],["line",{x1:"21",x2:"16",y1:"20",y2:"20",key:"14d8ph"}],["line",{x1:"12",x2:"3",y1:"20",y2:"20",key:"m0wm8r"}],["line",{x1:"14",x2:"14",y1:"2",y2:"6",key:"14e1ph"}],["line",{x1:"8",x2:"8",y1:"10",y2:"14",key:"1i6ji0"}],["line",{x1:"16",x2:"16",y1:"18",y2:"22",key:"1lctlv"}]]);/** - * @license lucide-react v0.460.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const I2=je("Sparkles",[["path",{d:"M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z",key:"4pj2yx"}],["path",{d:"M20 3v4",key:"1olli1"}],["path",{d:"M22 5h-4",key:"1gvqau"}],["path",{d:"M4 17v2",key:"vumght"}],["path",{d:"M5 18H3",key:"zchphs"}]]);/** - * @license lucide-react v0.460.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const e3=je("SquareTerminal",[["path",{d:"m7 11 2-2-2-2",key:"1lz0vl"}],["path",{d:"M11 13h4",key:"1p7l4v"}],["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2",key:"1m3agn"}]]);/** - * @license lucide-react v0.460.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Pu=je("TriangleAlert",[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]]);/** - * @license lucide-react v0.460.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const t3=je("Wrench",[["path",{d:"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z",key:"cbrjhi"}]]);/** - * @license lucide-react v0.460.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const zd=je("X",[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]]),ar=[{id:"dashboard",pfad:"/cockpit",label:"Cockpit",hint:"Deine Box auf einen Blick",icon:X2,group:"Operativ"},{id:"ideen",pfad:"/ideen",label:"Ideen",hint:"Schreib hin, was entstehen soll",icon:J2,group:"Operativ"},{id:"auftraege",pfad:"/auftraege",label:"Auftragsbuch",hint:"Vorschläge der Box — annehmen oder ablehnen",icon:Md,group:"Operativ"},{id:"skills",pfad:"/skills",label:"Skills & Jobs",hint:"Autonome Skills manuell auslösen",icon:rd,group:"Operativ"},{id:"chronik",pfad:"/chronik",label:"Chronik",hint:"Was die Box von allein getan hat + Zeitmaschine",icon:Y2,group:"Operativ"},{id:"wissen",pfad:"/wissen",label:"Wissen",hint:"Lucys Wissens-Vault (Traum-Notizen)",icon:Z2,group:"Wissen"},{id:"connect",pfad:"/verbinden",label:"Verbinden",hint:"IDE-/Agent-Configs erzeugen",icon:Cd,group:"Werkzeuge"},{id:"konsole",pfad:"/konsole",label:"Konsole",hint:"Direkte Box-Shell (SSH-artig)",icon:e3,group:"Werkzeuge"},{id:"guide",pfad:"/anleitung",label:"Anleitung",hint:"Einrichten & Vibe-Coding",icon:J0,group:"Werkzeuge"},{id:"models",pfad:"/modelle",label:"Modelle",hint:"Speicher, laden & Rollen",icon:Z0,group:"Wartung"},{id:"agent",pfad:"/agent",label:"Hermes",hint:"Agent-Status & Verdrahtung",icon:rd,group:"Wartung"}];function $0(a){return[...ar].sort((l,s)=>s.pfad.length-l.pfad.length).find(l=>a===l.pfad||a.startsWith(l.pfad+"/"))}const Oy=a=>{let l;const s=new Set,r=(g,b)=>{const y=typeof g=="function"?g(l):g;if(!Object.is(y,l)){const S=l;l=b??(typeof y!="object"||y===null)?y:Object.assign({},l,y),s.forEach(_=>_(l,S))}},o=()=>l,d={setState:r,getState:o,getInitialState:()=>p,subscribe:g=>(s.add(g),()=>s.delete(g))},p=l=a(r,o,d);return d},n3=(a=>a?Oy(a):Oy),a3=a=>a;function l3(a,l=a3){const s=cn.useSyncExternalStore(a.subscribe,cn.useCallback(()=>l(a.getState()),[a,l]),cn.useCallback(()=>l(a.getInitialState()),[a,l]));return cn.useDebugValue(s),s}const i3=a=>{const l=n3(a),s=r=>l3(l,r);return Object.assign(s,l),s},s3=(a=>i3);function r3(a,l){let s;try{s=a()}catch{return}return{getItem:o=>{var f;const h=p=>p===null?null:JSON.parse(p,void 0),d=(f=s.getItem(o))!=null?f:null;return d instanceof Promise?d.then(h):h(d)},setItem:(o,f)=>s.setItem(o,JSON.stringify(f,void 0)),removeItem:o=>s.removeItem(o)}}const ud=a=>l=>{try{const s=a(l);return s instanceof Promise?s:{then(r){return ud(r)(s)},catch(r){return this}}}catch(s){return{then(r){return this},catch(r){return ud(r)(s)}}}},u3=(a,l)=>(s,r,o)=>{let f={storage:r3(()=>window.localStorage),partialize:j=>j,version:0,merge:(j,R)=>({...R,...j}),...l},h=!1,d=0;const p=new Set,g=new Set;let b=f.storage;if(!b)return a((...j)=>{console.warn(`[zustand persist middleware] Unable to update item '${f.name}', the given storage is currently unavailable.`),s(...j)},r,o);const y=()=>{const j=f.partialize({...r()});return b.setItem(f.name,{state:j,version:f.version})},S=o.setState;o.setState=(j,R)=>(S(j,R),y());const _=a((...j)=>(s(...j),y()),r,o);o.getInitialState=()=>_;let w;const E=()=>{var j,R;if(!b)return;const z=++d;h=!1,p.forEach(D=>{var X;return D((X=r())!=null?X:_)});const L=((R=f.onRehydrateStorage)==null?void 0:R.call(f,(j=r())!=null?j:_))||void 0;return ud(b.getItem.bind(b))(f.name).then(D=>{if(D)if(typeof D.version=="number"&&D.version!==f.version){if(f.migrate){const X=f.migrate(D.state,D.version);return X instanceof Promise?X.then(q=>[!0,q]):[!0,X]}console.error("State loaded from storage couldn't be migrated since no migrate function was provided")}else return[!1,D.state];return[!1,void 0]}).then(D=>{var X;if(z!==d)return;const[q,Y]=D;if(w=f.merge(Y,(X=r())!=null?X:_),s(w,!0),q)return y()}).then(()=>{z===d&&(L==null||L(r(),void 0),w=r(),h=!0,g.forEach(D=>D(w)))}).catch(D=>{z===d&&(L==null||L(void 0,D))})};return o.persist={setOptions:j=>{f={...f,...j},j.storage&&(b=j.storage)},clearStorage:()=>{++d,b==null||b.removeItem(f.name)},getOptions:()=>f,rehydrate:()=>E(),hasHydrated:()=>h,onHydrate:j=>(p.add(j),()=>{p.delete(j)}),onFinishHydration:j=>(g.add(j),()=>{g.delete(j)})},f.skipHydration||E(),w||_},c3=u3;let o3=0;const Yt=s3()(c3(a=>({ui:{schieneEingeklappt:!1,paletteOffen:!1,expertenmodus:!1},strom:{lage:"getrennt",letztesEreignis:null},meldungen:[],schieneUmschalten:()=>a(l=>({ui:{...l.ui,schieneEingeklappt:!l.ui.schieneEingeklappt}})),palette:l=>a(s=>({ui:{...s.ui,paletteOffen:l}})),expertenmodus:l=>a(s=>({ui:{...s.ui,expertenmodus:l}})),stromLage:l=>a(s=>({strom:{...s.strom,lage:l}})),stromEreignis:()=>a(l=>({strom:{...l.strom,letztesEreignis:Date.now()}})),melden:(l,s)=>a(r=>({meldungen:[...r.meldungen,{id:`m${++o3}`,art:l,text:s,seit:Date.now()}].slice(-6)})),meldungWeg:l=>a(s=>({meldungen:s.meldungen.filter(r=>r.id!==l)}))}),{name:"mc_ui",partialize:a=>({ui:{schieneEingeklappt:a.ui.schieneEingeklappt,expertenmodus:a.ui.expertenmodus}}),merge:(a,l)=>{const s=a;return{...l,ui:{...l.ui,...(s==null?void 0:s.ui)??{}}}}})),f3=()=>Yt(a=>a.ui.expertenmodus),d3=()=>Yt(a=>a.ui.schieneEingeklappt),h3=()=>Yt(a=>a.ui.paletteOffen),m3=()=>Yt(a=>a.strom.lage),g3=()=>Yt(a=>a.meldungen),ky=(a,l)=>Yt.getState().melden(a,l),kf=a=>Yt.getState().stromLage(a),p3=()=>Yt.getState().stromEreignis();function W0(a){var l,s,r="";if(typeof a=="string"||typeof a=="number")r+=a;else if(typeof a=="object")if(Array.isArray(a)){var o=a.length;for(l=0;l{const l=x3(a),{conflictingClassGroups:s,conflictingClassGroupModifiers:r}=a;return{getClassGroupId:h=>{const d=h.split(Nd);return d[0]===""&&d.length!==1&&d.shift(),P0(d,l)||b3(h)},getConflictingClassGroupIds:(h,d)=>{const p=s[h]||[];return d&&r[h]?[...p,...r[h]]:p}}},P0=(a,l)=>{var h;if(a.length===0)return l.classGroupId;const s=a[0],r=l.nextPart.get(s),o=r?P0(a.slice(1),r):void 0;if(o)return o;if(l.validators.length===0)return;const f=a.join(Nd);return(h=l.validators.find(({validator:d})=>d(f)))==null?void 0:h.classGroupId},Uy=/^\[(.+)\]$/,b3=a=>{if(Uy.test(a)){const l=Uy.exec(a)[1],s=l==null?void 0:l.substring(0,l.indexOf(":"));if(s)return"arbitrary.."+s}},x3=a=>{const{theme:l,prefix:s}=a,r={nextPart:new Map,validators:[]};return _3(Object.entries(a.classGroups),s).forEach(([f,h])=>{cd(h,r,f,l)}),r},cd=(a,l,s,r)=>{a.forEach(o=>{if(typeof o=="string"){const f=o===""?l:Ly(l,o);f.classGroupId=s;return}if(typeof o=="function"){if(S3(o)){cd(o(r),l,s,r);return}l.validators.push({validator:o,classGroupId:s});return}Object.entries(o).forEach(([f,h])=>{cd(h,Ly(l,f),s,r)})})},Ly=(a,l)=>{let s=a;return l.split(Nd).forEach(r=>{s.nextPart.has(r)||s.nextPart.set(r,{nextPart:new Map,validators:[]}),s=s.nextPart.get(r)}),s},S3=a=>a.isThemeGetter,_3=(a,l)=>l?a.map(([s,r])=>{const o=r.map(f=>typeof f=="string"?l+f:typeof f=="object"?Object.fromEntries(Object.entries(f).map(([h,d])=>[l+h,d])):f);return[s,o]}):a,w3=a=>{if(a<1)return{get:()=>{},set:()=>{}};let l=0,s=new Map,r=new Map;const o=(f,h)=>{s.set(f,h),l++,l>a&&(l=0,r=s,s=new Map)};return{get(f){let h=s.get(f);if(h!==void 0)return h;if((h=r.get(f))!==void 0)return o(f,h),h},set(f,h){s.has(f)?s.set(f,h):o(f,h)}}},I0="!",E3=a=>{const{separator:l,experimentalParseClassName:s}=a,r=l.length===1,o=l[0],f=l.length,h=d=>{const p=[];let g=0,b=0,y;for(let j=0;jb?y-b:void 0;return{modifiers:p,hasImportantModifier:_,baseClassName:w,maybePostfixModifierPosition:E}};return s?d=>s({className:d,parseClassName:h}):h},j3=a=>{if(a.length<=1)return a;const l=[];let s=[];return a.forEach(r=>{r[0]==="["?(l.push(...s.sort(),r),s=[]):s.push(r)}),l.push(...s.sort()),l},T3=a=>({cache:w3(a.cacheSize),parseClassName:E3(a),...v3(a)}),M3=/\s+/,A3=(a,l)=>{const{parseClassName:s,getClassGroupId:r,getConflictingClassGroupIds:o}=l,f=[],h=a.trim().split(M3);let d="";for(let p=h.length-1;p>=0;p-=1){const g=h[p],{modifiers:b,hasImportantModifier:y,baseClassName:S,maybePostfixModifierPosition:_}=s(g);let w=!!_,E=r(w?S.substring(0,_):S);if(!E){if(!w){d=g+(d.length>0?" "+d:d);continue}if(E=r(S),!E){d=g+(d.length>0?" "+d:d);continue}w=!1}const j=j3(b).join(":"),R=y?j+I0:j,z=R+E;if(f.includes(z))continue;f.push(z);const L=o(E,w);for(let D=0;D0?" "+d:d)}return d};function C3(){let a=0,l,s,r="";for(;a{if(typeof a=="string")return a;let l,s="";for(let r=0;ry(b),a());return s=T3(g),r=s.cache.get,o=s.cache.set,f=d,d(p)}function d(p){const g=r(p);if(g)return g;const b=A3(p,s);return o(p,b),b}return function(){return f(C3.apply(null,arguments))}}const Xe=a=>{const l=s=>s[a]||[];return l.isThemeGetter=!0,l},tv=/^\[(?:([a-z-]+):)?(.+)\]$/i,z3=/^\d+\/\d+$/,N3=new Set(["px","full","screen"]),D3=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,O3=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,k3=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/,U3=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,L3=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,Yn=a=>pi(a)||N3.has(a)||z3.test(a),Ea=a=>Ui(a,"length",K3),pi=a=>!!a&&!Number.isNaN(Number(a)),Uf=a=>Ui(a,"number",pi),qs=a=>!!a&&Number.isInteger(Number(a)),B3=a=>a.endsWith("%")&&pi(a.slice(0,-1)),ve=a=>tv.test(a),ja=a=>D3.test(a),H3=new Set(["length","size","percentage"]),q3=a=>Ui(a,H3,nv),G3=a=>Ui(a,"position",nv),Q3=new Set(["image","url"]),V3=a=>Ui(a,Q3,Z3),Y3=a=>Ui(a,"",X3),Gs=()=>!0,Ui=(a,l,s)=>{const r=tv.exec(a);return r?r[1]?typeof l=="string"?r[1]===l:l.has(r[1]):s(r[2]):!1},K3=a=>O3.test(a)&&!k3.test(a),nv=()=>!1,X3=a=>U3.test(a),Z3=a=>L3.test(a),J3=()=>{const a=Xe("colors"),l=Xe("spacing"),s=Xe("blur"),r=Xe("brightness"),o=Xe("borderColor"),f=Xe("borderRadius"),h=Xe("borderSpacing"),d=Xe("borderWidth"),p=Xe("contrast"),g=Xe("grayscale"),b=Xe("hueRotate"),y=Xe("invert"),S=Xe("gap"),_=Xe("gradientColorStops"),w=Xe("gradientColorStopPositions"),E=Xe("inset"),j=Xe("margin"),R=Xe("opacity"),z=Xe("padding"),L=Xe("saturate"),D=Xe("scale"),X=Xe("sepia"),q=Xe("skew"),Y=Xe("space"),J=Xe("translate"),Q=()=>["auto","contain","none"],P=()=>["auto","hidden","clip","visible","scroll"],ee=()=>["auto",ve,l],I=()=>[ve,l],de=()=>["",Yn,Ea],$=()=>["auto",pi,ve],ne=()=>["bottom","center","left","left-bottom","left-top","right","right-bottom","right-top","top"],B=()=>["solid","dashed","dotted","double","none"],W=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],re=()=>["start","end","center","between","around","evenly","stretch"],ce=()=>["","0",ve],Se=()=>["auto","avoid","all","avoid-page","page","left","right","column"],M=()=>[pi,ve];return{cacheSize:500,separator:":",theme:{colors:[Gs],spacing:[Yn,Ea],blur:["none","",ja,ve],brightness:M(),borderColor:[a],borderRadius:["none","","full",ja,ve],borderSpacing:I(),borderWidth:de(),contrast:M(),grayscale:ce(),hueRotate:M(),invert:ce(),gap:I(),gradientColorStops:[a],gradientColorStopPositions:[B3,Ea],inset:ee(),margin:ee(),opacity:M(),padding:I(),saturate:M(),scale:M(),sepia:ce(),skew:M(),space:I(),translate:I()},classGroups:{aspect:[{aspect:["auto","square","video",ve]}],container:["container"],columns:[{columns:[ja]}],"break-after":[{"break-after":Se()}],"break-before":[{"break-before":Se()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:[...ne(),ve]}],overflow:[{overflow:P()}],"overflow-x":[{"overflow-x":P()}],"overflow-y":[{"overflow-y":P()}],overscroll:[{overscroll:Q()}],"overscroll-x":[{"overscroll-x":Q()}],"overscroll-y":[{"overscroll-y":Q()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:[E]}],"inset-x":[{"inset-x":[E]}],"inset-y":[{"inset-y":[E]}],start:[{start:[E]}],end:[{end:[E]}],top:[{top:[E]}],right:[{right:[E]}],bottom:[{bottom:[E]}],left:[{left:[E]}],visibility:["visible","invisible","collapse"],z:[{z:["auto",qs,ve]}],basis:[{basis:ee()}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["wrap","wrap-reverse","nowrap"]}],flex:[{flex:["1","auto","initial","none",ve]}],grow:[{grow:ce()}],shrink:[{shrink:ce()}],order:[{order:["first","last","none",qs,ve]}],"grid-cols":[{"grid-cols":[Gs]}],"col-start-end":[{col:["auto",{span:["full",qs,ve]},ve]}],"col-start":[{"col-start":$()}],"col-end":[{"col-end":$()}],"grid-rows":[{"grid-rows":[Gs]}],"row-start-end":[{row:["auto",{span:[qs,ve]},ve]}],"row-start":[{"row-start":$()}],"row-end":[{"row-end":$()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":["auto","min","max","fr",ve]}],"auto-rows":[{"auto-rows":["auto","min","max","fr",ve]}],gap:[{gap:[S]}],"gap-x":[{"gap-x":[S]}],"gap-y":[{"gap-y":[S]}],"justify-content":[{justify:["normal",...re()]}],"justify-items":[{"justify-items":["start","end","center","stretch"]}],"justify-self":[{"justify-self":["auto","start","end","center","stretch"]}],"align-content":[{content:["normal",...re(),"baseline"]}],"align-items":[{items:["start","end","center","baseline","stretch"]}],"align-self":[{self:["auto","start","end","center","stretch","baseline"]}],"place-content":[{"place-content":[...re(),"baseline"]}],"place-items":[{"place-items":["start","end","center","baseline","stretch"]}],"place-self":[{"place-self":["auto","start","end","center","stretch"]}],p:[{p:[z]}],px:[{px:[z]}],py:[{py:[z]}],ps:[{ps:[z]}],pe:[{pe:[z]}],pt:[{pt:[z]}],pr:[{pr:[z]}],pb:[{pb:[z]}],pl:[{pl:[z]}],m:[{m:[j]}],mx:[{mx:[j]}],my:[{my:[j]}],ms:[{ms:[j]}],me:[{me:[j]}],mt:[{mt:[j]}],mr:[{mr:[j]}],mb:[{mb:[j]}],ml:[{ml:[j]}],"space-x":[{"space-x":[Y]}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":[Y]}],"space-y-reverse":["space-y-reverse"],w:[{w:["auto","min","max","fit","svw","lvw","dvw",ve,l]}],"min-w":[{"min-w":[ve,l,"min","max","fit"]}],"max-w":[{"max-w":[ve,l,"none","full","min","max","fit","prose",{screen:[ja]},ja]}],h:[{h:[ve,l,"auto","min","max","fit","svh","lvh","dvh"]}],"min-h":[{"min-h":[ve,l,"min","max","fit","svh","lvh","dvh"]}],"max-h":[{"max-h":[ve,l,"min","max","fit","svh","lvh","dvh"]}],size:[{size:[ve,l,"auto","min","max","fit"]}],"font-size":[{text:["base",ja,Ea]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:["thin","extralight","light","normal","medium","semibold","bold","extrabold","black",Uf]}],"font-family":[{font:[Gs]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractions"],tracking:[{tracking:["tighter","tight","normal","wide","wider","widest",ve]}],"line-clamp":[{"line-clamp":["none",pi,Uf]}],leading:[{leading:["none","tight","snug","normal","relaxed","loose",Yn,ve]}],"list-image":[{"list-image":["none",ve]}],"list-style-type":[{list:["none","disc","decimal",ve]}],"list-style-position":[{list:["inside","outside"]}],"placeholder-color":[{placeholder:[a]}],"placeholder-opacity":[{"placeholder-opacity":[R]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"text-color":[{text:[a]}],"text-opacity":[{"text-opacity":[R]}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...B(),"wavy"]}],"text-decoration-thickness":[{decoration:["auto","from-font",Yn,Ea]}],"underline-offset":[{"underline-offset":["auto",Yn,ve]}],"text-decoration-color":[{decoration:[a]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:I()}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",ve]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",ve]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-opacity":[{"bg-opacity":[R]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:[...ne(),G3]}],"bg-repeat":[{bg:["no-repeat",{repeat:["","x","y","round","space"]}]}],"bg-size":[{bg:["auto","cover","contain",q3]}],"bg-image":[{bg:["none",{"gradient-to":["t","tr","r","br","b","bl","l","tl"]},V3]}],"bg-color":[{bg:[a]}],"gradient-from-pos":[{from:[w]}],"gradient-via-pos":[{via:[w]}],"gradient-to-pos":[{to:[w]}],"gradient-from":[{from:[_]}],"gradient-via":[{via:[_]}],"gradient-to":[{to:[_]}],rounded:[{rounded:[f]}],"rounded-s":[{"rounded-s":[f]}],"rounded-e":[{"rounded-e":[f]}],"rounded-t":[{"rounded-t":[f]}],"rounded-r":[{"rounded-r":[f]}],"rounded-b":[{"rounded-b":[f]}],"rounded-l":[{"rounded-l":[f]}],"rounded-ss":[{"rounded-ss":[f]}],"rounded-se":[{"rounded-se":[f]}],"rounded-ee":[{"rounded-ee":[f]}],"rounded-es":[{"rounded-es":[f]}],"rounded-tl":[{"rounded-tl":[f]}],"rounded-tr":[{"rounded-tr":[f]}],"rounded-br":[{"rounded-br":[f]}],"rounded-bl":[{"rounded-bl":[f]}],"border-w":[{border:[d]}],"border-w-x":[{"border-x":[d]}],"border-w-y":[{"border-y":[d]}],"border-w-s":[{"border-s":[d]}],"border-w-e":[{"border-e":[d]}],"border-w-t":[{"border-t":[d]}],"border-w-r":[{"border-r":[d]}],"border-w-b":[{"border-b":[d]}],"border-w-l":[{"border-l":[d]}],"border-opacity":[{"border-opacity":[R]}],"border-style":[{border:[...B(),"hidden"]}],"divide-x":[{"divide-x":[d]}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":[d]}],"divide-y-reverse":["divide-y-reverse"],"divide-opacity":[{"divide-opacity":[R]}],"divide-style":[{divide:B()}],"border-color":[{border:[o]}],"border-color-x":[{"border-x":[o]}],"border-color-y":[{"border-y":[o]}],"border-color-s":[{"border-s":[o]}],"border-color-e":[{"border-e":[o]}],"border-color-t":[{"border-t":[o]}],"border-color-r":[{"border-r":[o]}],"border-color-b":[{"border-b":[o]}],"border-color-l":[{"border-l":[o]}],"divide-color":[{divide:[o]}],"outline-style":[{outline:["",...B()]}],"outline-offset":[{"outline-offset":[Yn,ve]}],"outline-w":[{outline:[Yn,Ea]}],"outline-color":[{outline:[a]}],"ring-w":[{ring:de()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:[a]}],"ring-opacity":[{"ring-opacity":[R]}],"ring-offset-w":[{"ring-offset":[Yn,Ea]}],"ring-offset-color":[{"ring-offset":[a]}],shadow:[{shadow:["","inner","none",ja,Y3]}],"shadow-color":[{shadow:[Gs]}],opacity:[{opacity:[R]}],"mix-blend":[{"mix-blend":[...W(),"plus-lighter","plus-darker"]}],"bg-blend":[{"bg-blend":W()}],filter:[{filter:["","none"]}],blur:[{blur:[s]}],brightness:[{brightness:[r]}],contrast:[{contrast:[p]}],"drop-shadow":[{"drop-shadow":["","none",ja,ve]}],grayscale:[{grayscale:[g]}],"hue-rotate":[{"hue-rotate":[b]}],invert:[{invert:[y]}],saturate:[{saturate:[L]}],sepia:[{sepia:[X]}],"backdrop-filter":[{"backdrop-filter":["","none"]}],"backdrop-blur":[{"backdrop-blur":[s]}],"backdrop-brightness":[{"backdrop-brightness":[r]}],"backdrop-contrast":[{"backdrop-contrast":[p]}],"backdrop-grayscale":[{"backdrop-grayscale":[g]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[b]}],"backdrop-invert":[{"backdrop-invert":[y]}],"backdrop-opacity":[{"backdrop-opacity":[R]}],"backdrop-saturate":[{"backdrop-saturate":[L]}],"backdrop-sepia":[{"backdrop-sepia":[X]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":[h]}],"border-spacing-x":[{"border-spacing-x":[h]}],"border-spacing-y":[{"border-spacing-y":[h]}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["none","all","","colors","opacity","shadow","transform",ve]}],duration:[{duration:M()}],ease:[{ease:["linear","in","out","in-out",ve]}],delay:[{delay:M()}],animate:[{animate:["none","spin","ping","pulse","bounce",ve]}],transform:[{transform:["","gpu","none"]}],scale:[{scale:[D]}],"scale-x":[{"scale-x":[D]}],"scale-y":[{"scale-y":[D]}],rotate:[{rotate:[qs,ve]}],"translate-x":[{"translate-x":[J]}],"translate-y":[{"translate-y":[J]}],"skew-x":[{"skew-x":[q]}],"skew-y":[{"skew-y":[q]}],"transform-origin":[{origin:["center","top","top-right","right","bottom-right","bottom","bottom-left","left","top-left",ve]}],accent:[{accent:["auto",a]}],appearance:[{appearance:["none","auto"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",ve]}],"caret-color":[{caret:[a]}],"pointer-events":[{"pointer-events":["none","auto"]}],resize:[{resize:["none","y","x",""]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scroll-m":[{"scroll-m":I()}],"scroll-mx":[{"scroll-mx":I()}],"scroll-my":[{"scroll-my":I()}],"scroll-ms":[{"scroll-ms":I()}],"scroll-me":[{"scroll-me":I()}],"scroll-mt":[{"scroll-mt":I()}],"scroll-mr":[{"scroll-mr":I()}],"scroll-mb":[{"scroll-mb":I()}],"scroll-ml":[{"scroll-ml":I()}],"scroll-p":[{"scroll-p":I()}],"scroll-px":[{"scroll-px":I()}],"scroll-py":[{"scroll-py":I()}],"scroll-ps":[{"scroll-ps":I()}],"scroll-pe":[{"scroll-pe":I()}],"scroll-pt":[{"scroll-pt":I()}],"scroll-pr":[{"scroll-pr":I()}],"scroll-pb":[{"scroll-pb":I()}],"scroll-pl":[{"scroll-pl":I()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",ve]}],fill:[{fill:[a,"none"]}],"stroke-w":[{stroke:[Yn,Ea,Uf]}],stroke:[{stroke:[a,"none"]}],sr:["sr-only","not-sr-only"],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-s","border-w-e","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-s","border-color-e","border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]}}},F3=R3(J3);function qe(...a){return F3(y3(a))}function y5(a){return a?a.replace(/127\.0\.0\.1|localhost/g,"192.168.178.151"):""}function $3(){const a=f3(),l=Yt(s=>s.expertenmodus);return v.jsxs("div",{className:"flex items-center rounded-md border border-border/40 bg-background/40 p-0.5",role:"group","aria-label":"Ansichtsmodus",title:"Einfach zeigt nur das Wichtigste. Experte zeigt alle technischen Details.",children:[v.jsxs("button",{onClick:()=>l(!1),"aria-pressed":!a,className:qe("flex items-center gap-1 rounded px-2 py-1 text-xs font-semibold transition-all cursor-pointer",a?"text-muted-foreground hover:text-foreground":"bg-primary/15 text-primary shadow-sm"),children:[v.jsx(I2,{className:"h-3.5 w-3.5"})," Einfach"]}),v.jsxs("button",{onClick:()=>l(!0),"aria-pressed":a,className:qe("flex items-center gap-1 rounded px-2 py-1 text-xs font-semibold transition-all cursor-pointer",a?"bg-primary/15 text-primary shadow-sm":"text-muted-foreground hover:text-foreground"),children:[v.jsx(P2,{className:"h-3.5 w-3.5"})," Experte"]})]})}let yi=[],vi=[];const od=new Set,av=()=>od.forEach(a=>a());function Dd(a){return od.add(a),()=>{od.delete(a)}}function lv(a){yi=[...yi,a].slice(-120),av()}function iv(a){vi=[...vi,a].slice(-120),av()}let sv=null;const rv=()=>F.useSyncExternalStore(Dd,()=>yi),uv=()=>F.useSyncExternalStore(Dd,()=>vi),cv=()=>F.useSyncExternalStore(Dd,()=>sv);let Qs=null;function W3(a){const l=Date.now();if(sv=a,lv({t:l,cpu:a.cpu??0,ram:a.ram??0,gpu:a.gpu,disk:a.disk}),Qs){const s=Math.max((l-Qs.t)/1e3,.001);iv({t:l,prompt:Math.max(0,(a.tok_p-Qs.p)/s),completion:Math.max(0,(a.tok_c-Qs.c)/s)})}Qs={p:a.tok_p,c:a.tok_c,t:l}}function P3(){const{data:a,dataUpdatedAt:l}=dr(),{data:s,dataUpdatedAt:r}=kd(),o=F.useRef(null);F.useEffect(()=>{var h,d,p,g;if(!a)return;const f=Date.now();yi.length&&f-yi[yi.length-1].t<1e3||lv({t:f,cpu:((h=a.cpu)==null?void 0:h.percent)??0,ram:((d=a.ram)==null?void 0:d.percent)??0,gpu:((p=a.gpu)==null?void 0:p.busy_percent)??null,disk:((g=a.disk)==null?void 0:g.percent)??null})},[l]),F.useEffect(()=>{if(!s)return;const f=Date.now(),h=s.prompt_tokens,d=s.completion_tokens;if(o.current){const p=Math.max((f-o.current.t)/1e3,.001);(!vi.length||f-vi[vi.length-1].t>=1e3)&&iv({t:f,prompt:Math.max(0,(h-o.current.p)/p),completion:Math.max(0,(d-o.current.c)/p)})}o.current={p:h,c:d,t:f}},[r])}let Ks=!1;const ov=()=>Ks;function I3(){const a=yd();F.useEffect(()=>{const l=new EventSource("/api/stream");let s=!1;return l.onopen=()=>{Ks=!0,kf("live"),s&&ky("erfolg","Verbindung zur Zentrale ist wieder da."),s=!0,a.invalidateQueries()},l.onerror=()=>{Ks&&(Ks=!1,kf("nachlauf"),ky("warnung","Verbindung zur Zentrale verloren — die Anzeigen laufen im Nachlauf."),a.invalidateQueries())},l.addEventListener("invalidate",r=>{var o;try{const f=((o=JSON.parse(r.data))==null?void 0:o.keys)??[];for(const h of f)a.invalidateQueries({queryKey:[h]});p3()}catch{}}),l.addEventListener("metrik",r=>{try{W3(JSON.parse(r.data))}catch{}}),()=>{Ks=!1,kf("getrennt"),l.close()}},[a])}class e_ extends Error{constructor(s,r,o){super(o||`${s} ${r}`);zu(this,"status");zu(this,"detail");this.name="ApiError",this.status=s,this.detail=o}}async function t_(a){try{const l=await a.text();if(!l)return null;try{const s=JSON.parse(l),r=(s==null?void 0:s.detail)??(s==null?void 0:s.err)??(s==null?void 0:s.message);return typeof r=="string"&&r.trim()?r.trim():Array.isArray(r)&&r.length&&r.map(o=>o==null?void 0:o.msg).filter(Boolean).join("; ")||null}catch{return l.slice(0,200).split(` -`)[0].trim()||null}}catch{return null}}async function De(a,l){const s=await fetch(a,{...l,headers:{"Content-Type":"application/json",...l==null?void 0:l.headers}});if(!s.ok)throw new e_(s.status,s.statusText,await t_(s));return s.json()}const v5=(a,l,s=!1,r=!0)=>De("/api/groups",{method:"PUT",body:JSON.stringify({group:a,members:l,swap:s,persist:r})}),b5=a=>De("/api/routing/policy",{method:"PUT",body:JSON.stringify(a)}),Ge={health:["health"],systemStatus:["system-status"],services:["services"],models:["models"],groups:["groups"],routing:["routing"],routingPolicy:["routing-policy"],jobs:["jobs"],tokenStats:["token-stats"],agentStatus:["agent-status"],agentAktivitaet:["agent-aktivitaet"],hermesBrain:["hermes-brain"],updates:["updates"],discover:["discover"],drafts:a=>["drafts",a??""],connect:a=>["connect",a??""],connectHealth:["connect-health"],memoryGraph:["memory-graph"],voiceTrace:["voice-trace"],auftragsbuch:["auftragsbuch"],ideen:["ideen"],chronik:["chronik"],wissen:["wissen"],zeitmaschine:["zeitmaschine"],reminders:["reminders"]},bt={graph:3e3,schnell:8e3,normal:1e4,gemuetlich:3e4,traege:6e4},Li=a=>()=>ov()?a*5:a,fv=a=>()=>ov()?6e4:a,n_=(a=bt.schnell)=>Qe({queryKey:Ge.auftragsbuch,queryFn:()=>De("/api/auftragsbuch"),refetchInterval:Li(a)}),a_=(a=bt.gemuetlich)=>Qe({queryKey:Ge.ideen,queryFn:()=>De("/api/ideen"),refetchInterval:Li(a)}),x5=(a,l=!1)=>Qe({queryKey:["ideen-log",a],queryFn:()=>De(`/api/ideen/${a}/log`),enabled:l,refetchInterval:4e3,staleTime:0}),S5=(a=150,l=bt.gemuetlich)=>Qe({queryKey:[...Ge.chronik,a],queryFn:()=>De(`/api/chronik?limit=${a}`),refetchInterval:Li(l),select:s=>s.items??[]}),_5=()=>Qe({queryKey:Ge.wissen,queryFn:()=>De("/api/wissen")}),w5=(a=bt.traege,l=!0)=>Qe({queryKey:Ge.zeitmaschine,queryFn:()=>De("/api/zeitmaschine"),refetchInterval:a,enabled:l}),l_=(a=12,l=bt.schnell)=>Qe({queryKey:Ge.voiceTrace,queryFn:()=>De(`/api/voice/trace?limit=${a}`),refetchInterval:l,select:s=>s.turns??[]}),E5=(a=!0)=>Qe({queryKey:Ge.memoryGraph,queryFn:()=>De("/api/wissen/graph"),enabled:a,staleTime:60*1e3}),Od=()=>Qe({queryKey:Ge.health,queryFn:()=>De("/api/health"),refetchInterval:bt.normal}),dr=(a=bt.graph)=>Qe({queryKey:Ge.systemStatus,queryFn:()=>De("/api/system/status"),refetchInterval:fv(a)}),dv=(a,l=!0)=>Qe({queryKey:["metrics-history",a],queryFn:()=>De(`/api/system/history?minutes=${a}`),enabled:l,refetchInterval:6e4}),hv=(a=bt.normal)=>Qe({queryKey:Ge.services,queryFn:()=>De("/api/system/services"),refetchInterval:a}),mv=(a=bt.schnell)=>Qe({queryKey:Ge.models,queryFn:()=>De("/api/models"),refetchInterval:Li(a)}),j5=(a=bt.normal)=>Qe({queryKey:Ge.groups,queryFn:()=>De("/api/groups"),refetchInterval:a}),i_=(a=bt.normal)=>Qe({queryKey:Ge.routing,queryFn:()=>De("/api/routing"),refetchInterval:a}),T5=()=>Qe({queryKey:Ge.routingPolicy,queryFn:()=>De("/api/routing/policy")}),M5=(a=3e3,l=!0)=>Qe({queryKey:Ge.jobs,queryFn:()=>De("/api/jobs"),refetchInterval:Li(a),enabled:l,select:s=>s.jobs??[]}),kd=(a=bt.graph)=>Qe({queryKey:Ge.tokenStats,queryFn:()=>De("/api/system/token-stats"),refetchInterval:fv(a)}),s_=(a=bt.normal)=>Qe({queryKey:Ge.agentStatus,queryFn:()=>De("/api/agent/status"),refetchInterval:a}),A5=(a=bt.gemuetlich)=>Qe({queryKey:Ge.agentAktivitaet,queryFn:()=>De("/api/agent/aktivitaet?limit=80"),refetchInterval:Li(a)}),C5=(a=bt.traege)=>Qe({queryKey:Ge.hermesBrain,queryFn:()=>De("/api/agent/brain"),refetchInterval:a}),r_=(a=bt.traege)=>Qe({queryKey:Ge.updates,queryFn:()=>De("/api/maintenance/updates"),refetchInterval:a}),R5=()=>Qe({queryKey:Ge.discover,queryFn:()=>De("/api/discover")}),z5=a=>Qe({queryKey:Ge.drafts(a),queryFn:()=>De(`/api/models/drafts?target=${encodeURIComponent(a??"")}`),enabled:!!a}),N5=a=>Qe({queryKey:Ge.connect(a),queryFn:()=>De(a?`/api/connect?${a}`:"/api/connect")}),u_=()=>Qe({queryKey:Ge.connectHealth,queryFn:()=>De("/api/connect/health"),refetchInterval:15e3});function D5(a,...l){for(const s of l)a.invalidateQueries({queryKey:s})}function xn(a){return(a/1024**3).toFixed(1)}function O5(a){return a?a>1024**3?`${(a/1024**3).toFixed(1)} GB`:`${(a/1024**2).toFixed(0)} MB`:""}function k5(a){if(!a)return"—";const l=a/1024**3;return l>=1?`${l.toFixed(1)} GB`:`${(a/1024**2).toFixed(0)} MB`}function U5(a){if(!a)return"";const l=Math.floor(a/60);return l>0?`${l} min`:`${a} s`}function L5(a){return a?`${Math.round(a/1024)}k`:"—"}function B5(a){return a?new Date(a*1e3).toLocaleString("de-DE",{day:"2-digit",month:"2-digit",hour:"2-digit",minute:"2-digit"}):"—"}function c_(a){if(a==null||a<0)return null;const l=Math.floor(a/86400),s=Math.floor(a%86400/3600),r=Math.floor(a%3600/60);return l>0?`${l} T ${s} Std`:s>0?`${s} Std ${r} min`:`${r} min`}function By({werte:a,farbe:l,breite:s=56,hoehe:r=14}){if(a.length<2)return v.jsx("div",{style:{width:s,height:r},"aria-hidden":"true"});const o=Math.max(...a,1),f=s/(a.length-1),h=a.map((d,p)=>`${p===0?"M":"L"}${(p*f).toFixed(1)},${(r-d/o*r).toFixed(1)}`).join(" ");return v.jsx("svg",{width:s,height:r,viewBox:`0 0 ${s} ${r}`,"aria-hidden":"true",className:"shrink-0",children:v.jsx("path",{d:h,fill:"none",stroke:l,strokeWidth:"1.25",strokeLinejoin:"round",strokeLinecap:"round"})})}function oi({children:a,titel:l,className:s}){return v.jsx("div",{title:l,className:qe("flex shrink-0 items-center gap-1.5 border-r border-border/30 px-3",s),children:a})}function o_(){var Y,J,Q,P,ee,I,de,$,ne,B;const{data:a,isError:l}=Od(),{data:s}=dr(),{data:r}=i_(),{data:o}=kd(),f=rv(),h=uv(),d=m3(),p=!l&&!!(a!=null&&a.engine_reachable),g=p&&(a!=null&&a.brain?a.brain.ready:!0),b=((Y=a==null?void 0:a.brain)==null?void 0:Y.role)??((Q=(J=r==null?void 0:r.lanes)==null?void 0:J[0])==null?void 0:Q.name)??null,y=cv(),S=(y==null?void 0:y.cpu)??((P=s==null?void 0:s.cpu)==null?void 0:P.percent)??0,_=(y==null?void 0:y.gpu)??((ee=s==null?void 0:s.gpu)==null?void 0:ee.busy_percent)??null,w=(y==null?void 0:y.ram)??((I=s==null?void 0:s.ram)==null?void 0:I.percent)??0,E=(y==null?void 0:y.ram_used)??((de=s==null?void 0:s.ram)==null?void 0:de.used),j=(y==null?void 0:y.ram_total)??(($=s==null?void 0:s.ram)==null?void 0:$.total),R=Math.max((y==null?void 0:y.temp_cpu)??((ne=s==null?void 0:s.temp)==null?void 0:ne.cpu)??0,(y==null?void 0:y.temp_gpu)??((B=s==null?void 0:s.temp)==null?void 0:B.gpu)??0),z=h.length?h[h.length-1].completion:0,L=c_((y==null?void 0:y.uptime_s)??(s==null?void 0:s.uptime_s)),D=l?"getrennt":d==="live"?"live":"nachlauf",q={live:{punkt:"bg-emerald-500",text:"Live",titel:"Ereignisstrom steht — Änderungen erscheinen sofort."},nachlauf:{punkt:"bg-amber-500",text:"Nachlauf",titel:"Kein Ereignisstrom — die Zahlen stimmen, sie kommen im Takt statt sofort."},getrennt:{punkt:"bg-red-500",text:"Getrennt",titel:"Die Zentrale antwortet nicht — die Zahlen sind veraltet."}}[D];return v.jsxs("footer",{className:"flex h-11 shrink-0 items-stretch overflow-x-auto border-t border-border/40 bg-card/40 font-mono text-[11px] backdrop-blur-sm scrollbar-thin","aria-label":"Zustand der Box",children:[v.jsxs(ac,{to:"/agent",className:"flex shrink-0 items-center gap-2.5 border-r border-border/30 px-3 transition-colors hover:bg-accent/50",children:[v.jsxs("span",{className:"flex items-center gap-1.5",title:p?"Motor (Engine) läuft":"Motor (Engine) läuft nicht",children:[v.jsx("span",{className:qe("h-2 w-2 rounded-full",p?"bg-emerald-500":"bg-red-500"),"aria-hidden":"true"}),v.jsx("span",{className:p?"text-muted-foreground":"font-semibold text-red-400",children:"Motor"})]}),v.jsxs("span",{className:"flex items-center gap-1.5",title:g?"Lucys Hirn ist bereit":"Lucys Hirn ist nicht bereit",children:[v.jsx("span",{className:qe("h-2 w-2 rounded-full",g?"bg-emerald-500":"bg-amber-500"),"aria-hidden":"true"}),v.jsx("span",{className:g?"text-muted-foreground":"font-semibold text-amber-400",children:"Hirn"})]})]}),v.jsxs(oi,{titel:"Aktive Rolle und aktueller Ausgabe-Durchsatz",children:[v.jsx("span",{className:"font-semibold text-primary",children:b??"—"}),v.jsx("span",{className:"tabular-nums text-muted-foreground",children:z>0?`${z.toFixed(0)} t/s`:"leerlauf"}),v.jsx(By,{werte:h.map(W=>W.completion),farbe:"hsl(172 72% 50%)"})]}),v.jsxs(oi,{titel:E!=null&&j!=null?`Geteilter Speicher (Unified Memory): ${xn(E)} von ${xn(j)} GB belegt`:"Speicher",children:[v.jsx("span",{className:"text-muted-foreground",children:"Speicher"}),v.jsx("div",{className:"h-2 w-24 overflow-hidden rounded-sm border border-border/50 bg-background/60","aria-hidden":"true",children:v.jsx("div",{className:qe("h-full transition-[width] duration-500",w>90?"bg-red-500":w>75?"bg-amber-500":"bg-primary"),style:{width:`${Math.min(100,w)}%`}})}),v.jsx("span",{className:"tabular-nums text-foreground",children:E!=null&&j!=null?`${xn(E)}/${xn(j)} GB`:"—"})]}),v.jsxs(oi,{titel:"Auslastung von Prozessor und Grafikeinheit",children:[v.jsx("span",{className:"text-muted-foreground",children:"CPU"}),v.jsxs("span",{className:"tabular-nums text-foreground",children:[Math.round(S)," %"]}),v.jsx(By,{werte:f.map(W=>W.cpu),farbe:"hsl(199 89% 58%)"}),_!=null&&v.jsxs(v.Fragment,{children:[v.jsx("span",{className:"ml-1 text-muted-foreground",children:"GPU"}),v.jsxs("span",{className:"tabular-nums text-foreground",children:[Math.round(_)," %"]})]})]}),R>0&&v.jsxs(oi,{titel:"Höchste gemessene Temperatur (Prozessor oder Grafikeinheit)",children:[v.jsx("span",{className:"text-muted-foreground",children:"Temp"}),v.jsxs("span",{className:qe("tabular-nums",R>=85?"font-semibold text-amber-400":"text-foreground"),children:[Math.round(R)," °C"]})]}),L&&v.jsxs(oi,{titel:"Betriebszeit seit dem letzten Neustart der Box",children:[v.jsx("span",{className:"text-muted-foreground",children:"Läuft seit"}),v.jsx("span",{className:"tabular-nums text-foreground",children:L})]}),o&&v.jsx(oi,{titel:"Seit Beginn verarbeitete Token und die damit gesparten Cloud-Kosten",children:v.jsxs("span",{className:"tabular-nums text-muted-foreground",children:[o.total_tokens.toLocaleString("de-DE")," Token · ",o.saved_eur.toFixed(0)," € gespart"]})}),v.jsxs("div",{className:"ml-auto flex shrink-0 items-center gap-1.5 px-3",title:q.titel,children:[v.jsx("span",{className:qe("h-2 w-2 rounded-full",q.punkt,D==="live"&&"animate-pulse"),"aria-hidden":"true"}),v.jsx("span",{className:"text-muted-foreground",children:q.text})]})]})}const f_=6e3,d_={info:{rand:"border-sky-500/40",farbe:"text-sky-300",Icon:K2},erfolg:{rand:"border-emerald-500/40",farbe:"text-emerald-300",Icon:U2},warnung:{rand:"border-amber-500/40",farbe:"text-amber-300",Icon:Pu},fehler:{rand:"border-red-500/40",farbe:"text-red-300",Icon:L2}};function h_(){const a=g3(),l=Yt(s=>s.meldungWeg);return F.useEffect(()=>{const s=a.filter(r=>r.art!=="fehler").map(r=>window.setTimeout(()=>l(r.id),Math.max(1e3,f_-(Date.now()-r.seit))));return()=>s.forEach(window.clearTimeout)},[a,l]),v.jsx("div",{className:"pointer-events-none fixed bottom-4 right-4 z-[70] flex w-full max-w-sm flex-col gap-2",role:"status","aria-live":"polite","aria-atomic":"false",children:a.map(s=>{const{rand:r,farbe:o,Icon:f}=d_[s.art];return v.jsxs("div",{className:qe("pointer-events-auto flex items-start gap-2.5 rounded-lg border bg-card/95 px-3.5 py-2.5 shadow-xl backdrop-blur",r),"aria-live":s.art==="fehler"?"assertive":"polite",children:[v.jsx(f,{className:qe("mt-0.5 h-4 w-4 shrink-0",o),"aria-hidden":"true"}),v.jsx("p",{className:"flex-1 text-xs leading-relaxed text-foreground",children:s.text}),v.jsx("button",{onClick:()=>l(s.id),"aria-label":"Meldung schließen",className:"shrink-0 cursor-pointer rounded p-0.5 text-muted-foreground transition-colors hover:text-foreground",children:v.jsx(zd,{className:"h-3.5 w-3.5","aria-hidden":"true"})})]},s.id)})})}const m_=F.lazy(()=>Kt(()=>import("./SystemDrawer-C9kOlIQQ.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9])).then(a=>({default:a.SystemDrawer}))),g_=F.lazy(()=>Kt(()=>import("./CommandPalette-lAUVtU0H.js"),__vite__mapDeps([10,11,8,1,3,2])).then(a=>({default:a.CommandPalette})));function p_(){return v.jsx("div",{className:"flex h-64 items-center justify-center text-muted-foreground",children:v.jsx(Ad,{className:"h-5 w-5 animate-spin","aria-label":"Lädt …"})})}const y_=/Mac|iPhone|iPad/.test(navigator.platform);function v_(){P3(),I3();const a=fr(),l=Ny({select:E=>E.location.pathname}),s=Ny({select:E=>E.location.search.system}),r=d3(),o=Yt(E=>E.schieneUmschalten),f=h3(),h=Yt(E=>E.palette),[d,p]=F.useState(!1),[g,b]=F.useState(!1);F.useEffect(()=>{f&&b(!0)},[f]),F.useEffect(()=>{const E=j=>{(j.metaKey||j.ctrlKey)&&j.key.toLowerCase()==="k"&&(j.preventDefault(),h(!Yt.getState().ui.paletteOffen))};return document.addEventListener("keydown",E),()=>document.removeEventListener("keydown",E)},[h]);const y=F.useCallback(E=>{a({to:".",search:j=>({...j,system:E}),replace:!0})},[a]),{data:S,isError:_}=Od();F.useEffect(()=>{document.documentElement.classList.add("dark")},[]),F.useEffect(()=>{p(!1)},[l]);const w=$0(l);return v.jsxs("div",{className:"flex h-full relative",children:[v.jsx("div",{className:"fixed inset-0 -z-50 pointer-events-none",style:{backgroundColor:"hsl(224,30%,6%)",backgroundImage:["radial-gradient(45% 40% at 12% 8%, hsl(172 72% 50% / 0.10), transparent 70%)","radial-gradient(50% 45% at 88% 92%, hsl(270 70% 60% / 0.10), transparent 70%)","radial-gradient(40% 35% at 75% 30%, hsl(239 70% 62% / 0.07), transparent 70%)"].join(", ")}}),v.jsx(h_,{}),v.jsxs(F.Suspense,{fallback:null,children:[g&&v.jsx(g_,{}),s&&v.jsx(m_,{open:!0,onClose:()=>y(void 0),defaultTab:s==="logs"?"logs":"maintenance"})]}),v.jsx("aside",{className:qe("hidden md:flex shrink-0 flex-col border-r border-border/40 bg-card/45 backdrop-blur-md transition-all duration-300 ease-in-out",r?"w-16":"w-60"),children:v.jsx(Hy,{collapsed:r,onToggleCollapse:o,pfad:l,health:S,backendDown:_})}),v.jsxs("div",{className:qe("md:hidden fixed inset-0 z-50 transition-opacity duration-200",d?"opacity-100":"pointer-events-none opacity-0"),"aria-hidden":!d,children:[v.jsx("div",{className:"absolute inset-0 bg-black/60",onClick:()=>p(!1)}),v.jsx("aside",{className:qe("absolute inset-y-0 left-0 flex w-72 max-w-[85vw] flex-col border-r border-border/40 bg-[hsl(224,28%,8%)] transition-transform duration-300 ease-in-out",d?"translate-x-0":"-translate-x-full"),children:v.jsx(Hy,{collapsed:!1,onClose:()=>p(!1),pfad:l,health:S,backendDown:_})})]}),v.jsxs("div",{className:"flex min-w-0 flex-1 flex-col",children:[v.jsxs("header",{className:"flex h-14 shrink-0 items-center justify-between gap-3 border-b border-border/40 px-4 md:px-6 bg-card/20 backdrop-blur-sm",children:[v.jsxs("div",{className:"flex min-w-0 items-center gap-3",children:[v.jsx("button",{onClick:()=>p(!0),className:"md:hidden p-1.5 -ml-1 rounded-md hover:bg-accent text-muted-foreground transition-colors cursor-pointer","aria-label":"Navigation öffnen",children:v.jsx(F2,{className:"h-5 w-5","aria-hidden":"true"})}),v.jsx("div",{className:"truncate text-xs font-medium text-muted-foreground tracking-wide uppercase font-sans",children:w==null?void 0:w.hint})]}),v.jsxs("div",{className:"flex shrink-0 items-center gap-2",children:[v.jsx($3,{}),v.jsx("a",{href:"https://git.tobisniceshomelab.ddnsfree.com/Hitonabi/mission-control-v2/src/branch/main/docs/BEDIENUNG.md",target:"_blank",rel:"noopener",className:"hidden sm:flex h-8 items-center rounded-md border border-border/40 bg-background/40 px-2.5 text-xs text-muted-foreground hover:bg-accent hover:text-accent-foreground transition-all cursor-pointer font-semibold",title:"Bedien-Anleitung",children:"Hilfe"}),v.jsxs("button",{onClick:()=>h(!0),className:"flex items-center gap-2 rounded-md border border-border/40 bg-background/40 px-2.5 py-1.5 text-xs text-muted-foreground hover:bg-accent hover:text-accent-foreground transition-all cursor-pointer",children:[v.jsx(B2,{className:"h-3.5 w-3.5"}),v.jsx("span",{className:"hidden sm:inline",children:"Suchen"}),v.jsx("kbd",{className:"hidden sm:inline rounded bg-muted px-1.5 py-0.5 font-mono text-[9px]",children:y_?"⌘K":"Strg+K"})]})]})]}),v.jsx("main",{className:"flex-1 overflow-y-auto scrollbar-thin",children:v.jsx("div",{className:"mx-auto w-full max-w-[1600px] p-4 md:p-6",children:v.jsx(F.Suspense,{fallback:v.jsx(p_,{}),children:v.jsx(Y0,{})})})}),v.jsx(o_,{})]})]})}function Hy({collapsed:a,onToggleCollapse:l,onClose:s,pfad:r,health:o,backendDown:f}){var p,g,b,y,S;const h=$0(r),{data:d}=dr();return v.jsxs(v.Fragment,{children:[v.jsxs("div",{className:qe("flex items-center py-4 border-b border-border/40 shrink-0",a?"flex-col gap-3 px-2":"justify-between px-5"),children:[v.jsxs("div",{className:"flex items-center gap-2 overflow-hidden",children:[v.jsx("div",{className:"h-7 w-7 rounded-lg bg-primary shadow-md shadow-primary/20 shrink-0"}),!a&&v.jsxs("div",{className:"leading-tight",children:[v.jsx("div",{className:"text-sm font-semibold tracking-wide font-space",children:"Mission Control"}),v.jsx("div",{className:"text-xs text-muted-foreground",children:"2.0"})]})]}),l&&v.jsx("button",{onClick:l,className:"p-1 rounded-md hover:bg-accent text-muted-foreground transition-colors cursor-pointer","aria-label":a?"Seitenleiste ausklappen":"Seitenleiste einklappen",title:a?"Maximieren":"Minimieren",children:a?v.jsx(Js,{className:"h-4 w-4","aria-hidden":"true"}):v.jsx(k2,{className:"h-4 w-4","aria-hidden":"true"})}),s&&v.jsx("button",{onClick:s,className:"p-1 rounded-md hover:bg-accent text-muted-foreground transition-colors cursor-pointer","aria-label":"Navigation schließen",children:v.jsx(zd,{className:"h-4 w-4","aria-hidden":"true"})})]}),v.jsx("nav",{className:"flex-1 space-y-1 px-3 py-4 overflow-y-auto",children:(()=>{let _=null;return ar.map(w=>{const E=w.group!==_;_=w.group;const j=(h==null?void 0:h.id)===w.id;return v.jsxs("div",{className:"space-y-1",children:[E&&(a?_!==ar[0].group&&v.jsx("div",{className:"my-3 border-t border-border/30"}):v.jsx("div",{className:"mt-5 mb-1.5 px-3 text-[10px] font-bold uppercase tracking-widest text-muted-foreground/40 first:mt-0 select-none",children:w.group})),v.jsxs(ac,{to:w.pfad,onClick:s,"aria-current":j?"page":void 0,className:qe("flex w-full items-center rounded-md text-sm transition-all cursor-pointer",a?"justify-center p-2.5":"gap-3 px-3 py-2",j?a?"nav-active-collapsed":"nav-active":"text-muted-foreground hover:bg-accent hover:text-accent-foreground"),title:a?w.label:void 0,"aria-label":a?w.label:void 0,children:[v.jsx(w.icon,{className:"h-4.5 w-4.5 shrink-0","aria-hidden":"true"}),!a&&v.jsx("span",{className:"truncate",children:w.label})]})]},w.id)})})()}),v.jsx("div",{className:qe("py-3 text-xs text-muted-foreground border-t border-border/40 shrink-0",a?"px-2 text-center":"px-5"),children:a?v.jsx("div",{className:"flex justify-center",children:v.jsx("span",{className:qe("h-2.5 w-2.5 rounded-full ring-2 ring-black/40",f||!o?"bg-red-500":o.engine_reachable?o.brain&&!o.brain.ready?"bg-amber-500 animate-pulse":"bg-emerald-500 animate-pulse":"bg-amber-500"),title:f?"Zentrale antwortet nicht — Anzeigen evtl. veraltet":o?o.engine_reachable?o.brain&&!o.brain.ready?`Hirn offline (${o.brain.model??"fast"})`:"Engine + Hirn online":"Engine offline":"Backend offline"})}):v.jsxs("div",{className:"space-y-2 text-left",children:[f?v.jsxs("span",{className:"flex items-center gap-2 text-red-400",children:[v.jsx("span",{className:"h-2 w-2 rounded-full bg-red-500 animate-pulse"}),v.jsx("span",{className:"truncate",children:"Zentrale antwortet nicht"})]}):o?v.jsxs(v.Fragment,{children:[v.jsxs("span",{className:"flex items-center gap-2",children:[v.jsx("span",{className:qe("h-2 w-2 rounded-full animate-pulse",o.engine_reachable?"bg-emerald-500":"bg-amber-500")}),v.jsxs("span",{className:"truncate",children:["Engine ",o.engine_reachable?"online":"offline"]})]}),o.brain&&!o.brain.ready&&v.jsxs("span",{className:"flex items-center gap-2 text-amber-400",title:`Agent-Hirn '${o.brain.model??"fast"}' lädt nicht/abgestürzt`,children:[v.jsx("span",{className:"h-2 w-2 rounded-full bg-amber-500 animate-pulse"}),v.jsxs("span",{className:"truncate",children:["Hirn offline",o.brain.model?` (${o.brain.model})`:""]})]})]}):v.jsxs("span",{className:"flex items-center gap-2",children:[v.jsx("span",{className:"h-2 w-2 rounded-full bg-red-500"})," ",v.jsx("span",{className:"truncate",children:"Backend offline"})]}),(d==null?void 0:d.versions)&&v.jsxs("div",{className:"space-y-1 text-[9px] text-muted-foreground/60 mt-2 pt-2 border-t border-border/30",children:[v.jsxs("div",{className:"truncate",title:d.versions.mc2?`${d.versions.mc2.branch}-${d.versions.mc2.hash}${d.versions.mc2.dirty?"*":""} (${d.versions.mc2.date})`:"nicht gefunden",children:[v.jsx("strong",{children:"MC2:"})," ",d.versions.mc2?`${d.versions.mc2.hash}${d.versions.mc2.dirty?"*":""}`:"—"]}),v.jsxs("div",{className:"truncate",title:((p=d.versions.engine)==null?void 0:p.type)==="git"?`${d.versions.engine.branch}-${d.versions.engine.hash}${d.versions.engine.dirty?"*":""} (${d.versions.engine.date})`:((g=d.versions.engine)==null?void 0:g.version_text)||"unbekannt",children:[v.jsx("strong",{children:"Engine:"})," ",((b=d.versions.engine)==null?void 0:b.type)==="git"?`${d.versions.engine.hash}${d.versions.engine.dirty?"*":""}`:((S=(y=d.versions.engine)==null?void 0:y.version_text)==null?void 0:S.split(" ").pop())||"—"]}),v.jsxs("div",{className:"truncate",title:d.versions.hermes_agent?`${d.versions.hermes_agent.branch}-${d.versions.hermes_agent.hash}${d.versions.hermes_agent.dirty?"*":""} (${d.versions.hermes_agent.date})`:"nicht gefunden",children:[v.jsx("strong",{children:"Hermes Agent:"})," ",d.versions.hermes_agent?`${d.versions.hermes_agent.hash}${d.versions.hermes_agent.dirty?"*":""}`:"—"]})]})]})})]})}function Bi({titel:a,text:l,fehler:s,onErneut:r}){const o=s instanceof Error?s.stack||s.message:s?String(s):null;return v.jsx("div",{className:"flex min-h-[50vh] items-center justify-center p-6",children:v.jsxs("div",{className:"mc-card max-w-lg space-y-4 p-6",children:[v.jsxs("div",{className:"flex items-center gap-2.5",children:[v.jsx(Pu,{className:"h-5 w-5 shrink-0 text-amber-400","aria-hidden":"true"}),v.jsx("h1",{className:"font-space text-lg font-bold tracking-tight",children:a})]}),v.jsx("p",{className:"text-sm leading-relaxed text-muted-foreground",children:l}),v.jsxs("div",{className:"flex flex-wrap gap-2 pt-1",children:[r&&v.jsxs("button",{onClick:r,className:"flex h-9 cursor-pointer items-center gap-1.5 rounded-lg bg-primary px-4 text-xs font-semibold text-primary-foreground transition-colors hover:bg-primary/90",children:[v.jsx(W2,{className:"h-3.5 w-3.5","aria-hidden":"true"})," Erneut versuchen"]}),v.jsx("a",{href:"/cockpit",className:"flex h-9 items-center rounded-lg border border-border/60 bg-background/20 px-4 text-xs font-semibold text-muted-foreground transition-colors hover:bg-accent",children:"Zum Cockpit"})]}),o&&v.jsxs("details",{className:"pt-1",children:[v.jsx("summary",{className:"cursor-pointer text-[11px] font-semibold uppercase tracking-wider text-muted-foreground/70 hover:text-foreground",children:"Technische Einzelheiten"}),v.jsx("pre",{className:"scrollbar-thin mt-2 max-h-52 overflow-auto rounded-lg border border-border/40 bg-background/40 p-3 font-mono text-[10px] leading-relaxed text-muted-foreground",children:o})]})]})})}function b_(){var J,Q,P,ee,I,de;const{data:a,isError:l}=Od(),{data:s,isError:r}=hv(),{data:o}=mv(),{data:f}=dr(),h=l||r,d=!!a&&!!s,p=$=>{var ne;return(ne=s==null?void 0:s.services.find(B=>B.unit===$))==null?void 0:ne.ok},g=$=>!!(s!=null&&s.services.some(ne=>ne.unit===$)),b=a==null?void 0:a.engine_reachable,y=(J=a==null?void 0:a.brain)==null?void 0:J.ready,S=((Q=a==null?void 0:a.brain)==null?void 0:Q.model)||((P=o==null?void 0:o.models.find($=>$.role==="hermes"))==null?void 0:P.name)||"",_=[];h&&_.push({id:"mc2",label:"Steuerpult (MC2)",icon:F0,critical:!0,status:"down",detail:"Die Zentrale antwortet nicht — alle Anzeigen hier können veraltet sein. Läuft die Box? Deploy aktiv?"}),_.push((()=>{const $={id:"brain",label:"Lucys Hirn",icon:D2,critical:!0};return d?b===!1?{...$,status:"down",detail:"Die Motor-Maschine (Engine) läuft nicht — Lucy kann gerade gar nicht denken.",repair:{kind:"restart",service:"llama-swap",label:"Motor neu starten",needsSudo:!0}}:y===!1?{...$,status:"down",detail:"Lucys Hirn ist gerade eingeschlafen — einmal aufwecken.",repair:S?{kind:"loadModel",model:S,label:"Hirn aufwecken"}:void 0}:{...$,status:"ok",detail:"Wach und ansprechbar."}:{...$,status:"loading",detail:"Wird geprüft …"}})()),_.push((()=>{const $={id:"vision",label:"Lucys Augen",icon:q2,critical:!1};if(!d||!o)return{...$,status:"loading",detail:"Wird geprüft …"};const ne=o.models.find(W=>W.role==="vision");return ne?(o.running??[]).includes(ne.name)?{...$,status:"ok",detail:"Sieht gerade zu (geladen, solange Lucy sie nutzt)."}:{...$,status:"ok",detail:"Augen ruhen — sie laden von selbst, sobald Lucy startet oder ein Bild kommt.",repair:{kind:"loadModel",model:ne.name,label:"Augen wecken"}}:{...$,status:"warn",detail:"Kein Augen-Modell eingerichtet — Lucy kann keine Bilder ansehen."}})()),_.push((()=>{const $={id:"memory",label:"Lucys Gedächtnis",icon:N2,critical:!0},ne=p("hermes-gateway");return!d||ne===void 0?{...$,status:"loading",detail:"Wird geprüft …"}:ne?{...$,status:"ok",detail:"Hermes-Natives Gedächtnis aktiv (SQLite & Embeddings)."}:{...$,status:"down",detail:"Lucy kann sich gerade nichts merken — das Gateway antwortet nicht.",repair:{kind:"restart",service:"hermes-gateway",label:"Gateway neu starten"}}})()),_.push((()=>{const $={id:"gateway",label:"Verbindung (Gateway)",icon:Cd,critical:!0},ne=a?a.gateway_reachable:p("mc2-gateway");if(!d||ne===void 0)return{...$,status:"loading",detail:"Wird geprüft …"};const B=g("mc2-gateway")?"mc2-gateway":"mission-control-2";return ne?{...$,status:"ok",detail:"Apps und IDEs können Lucy erreichen."}:{...$,status:"down",detail:"Der Modell-Gateway antwortet nicht — Lucy und die IDEs erreichen kein Modell.",repair:{kind:"restart",service:B,label:"Gateway neu starten"}}})()),_.push((()=>{const $={id:"steward",label:"Wächter (Steward)",icon:Rd,critical:!1};return d?g("mc2-steward")?p("mc2-steward")?{...$,status:"ok",detail:"Wacht über Warm-Set, Dienste und Gedächtnis."}:{...$,status:"warn",detail:"Der Wächter schläft — niemand meldet gerade Ausfälle oder wärmt Modelle nach.",repair:{kind:"restart",service:"mc2-steward",label:"Wächter neu starten"}}:{...$,status:"ok",detail:"Auf dieser Installation nicht eingerichtet."}:{...$,status:"loading",detail:"Wird geprüft …"}})()),_.push((()=>{const $={id:"agent",label:"Lucys Agent (Hermes)",icon:rd,critical:!0},ne=p("hermes-gateway");return!d||ne===void 0?{...$,status:"loading",detail:"Wird geprüft …"}:ne?{...$,status:"ok",detail:"Lucy ist bereit zu reden und zu handeln."}:{...$,status:"down",detail:"Lucys Agent ist offline — sie reagiert gerade nicht.",repair:{kind:"restart",service:"hermes-gateway",label:"Agent neu starten"}}})()),_.push((()=>{const $={id:"voice",label:"Lucys Stimme",icon:$2,critical:!1},ne=p("voice-service");return!d||ne===void 0?{...$,status:"loading",detail:"Wird geprüft …"}:ne?{...$,status:"ok",detail:"Lucy kann hören und sprechen."}:{...$,status:"warn",detail:"Sprechen ist gerade aus — Tippen geht weiter normal.",repair:{kind:"restart",service:"voice-service",label:"Stimme neu starten"}}})());const w=((ee=f==null?void 0:f.ram)==null?void 0:ee.total)??0,E=((I=f==null?void 0:f.ram)==null?void 0:I.used)??0,j=((de=f==null?void 0:f.ram)==null?void 0:de.percent)??(w>0?Math.min(100,E/w*100):0),R=1024**3,z=w?j>=93?{status:"full",usedGb:E/R,totalGb:w/R,pct:j,text:"Speicher fast voll — Lucy könnte langsamer werden."}:j>=85?{status:"warn",usedGb:E/R,totalGb:w/R,pct:j,text:"Speicher gut gefüllt — noch okay."}:{status:"ok",usedGb:E/R,totalGb:w/R,pct:j,text:"Genug Speicher frei."}:{status:"unknown",usedGb:0,totalGb:0,pct:0,text:"Speicher-Auslastung unbekannt."},L=_.some($=>$.status==="loading"),D=_.filter($=>$.critical&&$.status==="down"),X=_.filter($=>$.status==="warn"||!$.critical&&$.status==="down"),q=z.status==="full";return{verdict:L&&!D.length?"loading":D.length?"problem":X.length||q?"warn":"gut",checks:_,memory:z,problems:D,warns:X,unreachable:h}}function x_({type:a,title:l,message:s,defaultValue:r,autoValue:o,autoLabel:f,onConfirm:h,onCancel:d}){const p=F.useRef(null);return v.jsx("div",{className:"fixed inset-0 z-[99] bg-black/60 backdrop-blur-sm flex items-center justify-center p-4 overscroll-contain",role:"dialog","aria-modal":"true","aria-label":l,children:v.jsxs("div",{className:"w-full max-w-sm rounded-2xl border border-border/80 bg-card p-6 shadow-2xl space-y-4 animate-in fade-in zoom-in-95 duration-200",children:[v.jsxs("div",{className:"flex items-center justify-between border-b border-border/20 pb-2",children:[v.jsx("h3",{className:"text-xs font-bold uppercase tracking-wider text-primary",children:l}),v.jsx("button",{onClick:d||(()=>h()),"aria-label":"Schließen",className:"p-1 rounded hover:bg-accent text-muted-foreground hover:text-foreground cursor-pointer",children:v.jsx(zd,{className:"h-4 w-4","aria-hidden":"true"})})]}),v.jsx("p",{className:"max-h-72 overflow-y-auto whitespace-pre-line text-xs text-muted-foreground leading-relaxed scrollbar-thin",children:s}),a==="prompt"&&v.jsxs("div",{className:"flex gap-2",children:[v.jsx("input",{ref:p,type:"text",defaultValue:r,"aria-label":l,className:"flex-1 h-9 px-3 text-xs bg-background/40 border border-border/60 rounded-lg outline-none focus:border-primary transition-colors text-foreground",autoFocus:!0,onKeyDown:g=>{var b;g.key==="Enter"&&h((b=p.current)==null?void 0:b.value)}}),o!==void 0&&v.jsx("button",{type:"button",onClick:()=>{p.current&&(p.current.value=o)},title:"Setup-bewussten Optimalwert eintragen",className:"h-9 px-3 shrink-0 text-xs font-semibold text-primary border border-primary/50 bg-primary/10 hover:bg-primary/20 rounded-lg transition-colors cursor-pointer",children:f||"Auto"})]}),v.jsxs("div",{className:"flex justify-end gap-3 pt-2",children:[(a==="confirm"||a==="prompt")&&v.jsx("button",{onClick:d,className:"h-8 px-4 flex items-center justify-center text-xs font-semibold text-muted-foreground border border-border/60 bg-background/20 hover:bg-accent rounded-lg transition-colors cursor-pointer",children:"Abbrechen"}),v.jsx("button",{onClick:()=>{var b;const g=a==="prompt"?(b=p.current)==null?void 0:b.value:void 0;h(g)},className:"h-8 px-4 flex items-center justify-center text-xs font-semibold text-primary-foreground bg-primary hover:bg-primary/95 rounded-lg transition-colors cursor-pointer",children:a==="confirm"?"Ja, fortfahren":a==="prompt"?"Übernehmen":"OK"})]})]})})}function S_(){const[a,l]=F.useState(null),s=F.useCallback(()=>l(null),[]),r=F.useCallback((d,p,g)=>{l({type:"alert",title:d,message:p,onConfirm:()=>{l(null),g==null||g()}})},[]),o=F.useCallback((d,p,g,b)=>{l({type:"confirm",title:d,message:p,onConfirm:()=>{l(null),g()},onCancel:()=>{l(null),b==null||b()}})},[]),f=F.useCallback((d,p,g,b,y,S)=>{l({type:"prompt",title:d,message:p,defaultValue:g,autoValue:S==null?void 0:S.autoValue,autoLabel:S==null?void 0:S.autoLabel,onConfirm:_=>{l(null),b(_)},onCancel:()=>{l(null),y==null||y()}})},[]),h=a?v.jsx(x_,{...a}):null;return{showAlert:r,showConfirm:o,showPrompt:f,close:s,dialogElement:h}}const __={ok:"bg-emerald-500",warn:"bg-amber-500",alert:"bg-red-500",muted:"bg-muted-foreground/40",loading:"bg-muted-foreground/40 animate-pulse"},w_={ok:"hover:border-emerald-500/40",warn:"hover:border-amber-500/50",alert:"hover:border-red-500/50",muted:"hover:border-primary/40",loading:"hover:border-border/60"};function Vs({icon:a,title:l,value:s,unit:r,tone:o="muted",hint:f,onClick:h}){return v.jsxs("button",{onClick:h,className:qe("group relative flex flex-col items-start mc-card p-5 text-left cursor-pointer",w_[o]),children:[v.jsxs("div",{className:"mb-4 flex w-full items-center justify-between",children:[v.jsx("span",{className:"flex h-10 w-10 items-center justify-center rounded-xl border border-border/40 bg-background/30 text-foreground/80 transition-colors group-hover:text-primary",children:v.jsx(a,{className:"h-5 w-5"})}),v.jsx("span",{className:qe("h-2.5 w-2.5 rounded-full ring-2 ring-black/40",__[o]),title:f})]}),v.jsxs("div",{className:"flex items-baseline gap-1.5",children:[v.jsx("span",{className:"text-2xl font-bold tracking-tight text-foreground font-space tabular-nums",children:s}),r&&v.jsx("span",{className:"text-xs font-medium text-muted-foreground",children:r})]}),v.jsxs("div",{className:"mt-1 flex w-full items-center justify-between",children:[v.jsx("span",{className:"text-sm font-semibold text-foreground/90",children:l}),v.jsx(Js,{className:"h-4 w-4 text-muted-foreground/40 transition-all group-hover:translate-x-0.5 group-hover:text-primary"})]}),f&&v.jsx("span",{className:"mt-0.5 text-[11px] text-muted-foreground",children:f})]})}function E_(){const{data:a,error:l}=dr(),s=cv(),r=rv();return{sys:F.useMemo(()=>{var f,h;return!a||!s?a:{...a,cpu:{...a.cpu,percent:s.cpu??a.cpu.percent},ram:{...a.ram,percent:s.ram??a.ram.percent,used:s.ram_used??a.ram.used,total:s.ram_total??a.ram.total},gpu:a.gpu?{...a.gpu,busy_percent:s.gpu??a.gpu.busy_percent}:a.gpu,disk:a.disk?{...a.disk,percent:s.disk??a.disk.percent}:a.disk,temp:{cpu:s.temp_cpu??((f=a.temp)==null?void 0:f.cpu),gpu:s.temp_gpu??((h=a.temp)==null?void 0:h.gpu)},uptime_s:s.uptime_s??a.uptime_s}},[a,s]),hist:r,error:l}}const j_=F.lazy(()=>Kt(()=>import("./LiveAreaChartImpl-Cl5sD7ID.js"),__vite__mapDeps([12,13,11])));function gv(a){return v.jsx(F.Suspense,{fallback:v.jsx(T_,{height:a.height??176}),children:v.jsx(j_,{...a})})}function T_({height:a}){return v.jsx("div",{style:{height:a},className:"flex w-full items-end","aria-hidden":"true",children:v.jsx("div",{className:"h-px w-full bg-border/40"})})}const pv={"1h":60,"24h":1440},qy={live:"Live","1h":"1 h","24h":"24 h"};function yv({value:a,onChange:l}){return v.jsx("div",{className:"flex rounded-lg border border-border/40 bg-background/30 p-0.5",children:Object.keys(qy).map(s=>v.jsx("button",{onClick:()=>l(s),className:qe("rounded-md px-2 py-0.5 text-[9px] font-bold uppercase tracking-wide transition-all cursor-pointer",a===s?"bg-primary text-primary-foreground":"text-muted-foreground hover:text-foreground"),children:qy[s]},s))})}const M_=[{key:"cpu",label:"CPU",color:"#2dd4bf"},{key:"ram",label:"RAM",color:"#38bdf8"},{key:"gpu",label:"GPU",color:"#a78bfa"},{key:"disk",label:"Disk",color:"#fbbf24"}];function A_(){var b,y,S,_;const{sys:a,hist:l}=E_(),[s,r]=F.useState("live"),o=dv(s==="live"?60:pv[s],s!=="live"),f=F.useMemo(()=>{var w;return s==="live"?l:(((w=o.data)==null?void 0:w.points)??[]).map(E=>({t:E.t*1e3,cpu:E.cpu,ram:E.ram,gpu:E.gpu,disk:E.disk}))},[s,l,o.data]),h=!!(a!=null&&a.gpu&&a.gpu.busy_percent!=null&&a.gpu.gtt_used!=null&&a.gpu.gtt_total!=null),d=M_.filter(w=>w.key!=="gpu"||h),p={cpu:(b=a==null?void 0:a.cpu)==null?void 0:b.percent,ram:(y=a==null?void 0:a.ram)==null?void 0:y.percent,gpu:h?a.gpu.busy_percent:null,disk:(S=a==null?void 0:a.disk)==null?void 0:S.percent},g={cpu:(_=a==null?void 0:a.cpu)!=null&&_.cores?`${a.cpu.cores} Cores`:"",ram:a?`${xn(a.ram.used)}/${xn(a.ram.total)} GB`:"",gpu:h?`${xn(a.gpu.gtt_used)}/${xn(a.gpu.gtt_total)} GB`:"",disk:a!=null&&a.disk?`${xn(a.disk.used)}/${xn(a.disk.total)} GB`:""};return v.jsxs("div",{className:"flex flex-col justify-between mc-card p-5",children:[v.jsxs("div",{children:[v.jsxs("div",{className:"mb-3 flex items-center gap-2",children:[v.jsx(H2,{className:"h-4.5 w-4.5 text-primary"}),v.jsx("h2",{className:"text-sm font-semibold uppercase tracking-wide text-foreground",children:"System-Status"}),s==="live"&&v.jsxs("span",{className:"ml-1 inline-flex items-center gap-1 text-[10px] font-medium text-muted-foreground/70",children:[v.jsx("span",{className:"h-1.5 w-1.5 rounded-full bg-emerald-500 animate-pulse"})," live"]}),v.jsx("div",{className:"ml-auto",children:v.jsx(yv,{value:s,onChange:r})})]}),a?v.jsxs(v.Fragment,{children:[v.jsx("div",{className:"mb-2 grid grid-cols-2 gap-x-4 gap-y-1.5",children:d.map(w=>v.jsxs("div",{className:"flex min-w-0 items-center gap-1.5",children:[v.jsx("span",{className:"h-2 w-2 shrink-0 rounded-full",style:{background:w.color}}),v.jsx("span",{className:"shrink-0 text-[11px] font-semibold uppercase tracking-wider text-muted-foreground",children:w.label}),v.jsxs("span",{className:"shrink-0 font-mono text-xs font-bold tabular-nums text-foreground",children:[Math.round(p[w.key]??0),"%"]}),g[w.key]&&v.jsx("span",{className:"truncate font-mono text-[10px] text-muted-foreground/60",children:g[w.key]})]},w.key))}),s!=="live"&&f.length===0&&v.jsx("div",{className:"flex h-44 items-center justify-center text-xs text-muted-foreground",children:o.isLoading?"Verlauf wird geladen …":"Noch kein Verlauf — der Sammler baut die Historie gerade erst auf."}),(s==="live"||f.length>0)&&v.jsx(gv,{data:f,series:d,unit:"%",yMode:"percent",height:176,showTime:!0})]}):v.jsx("div",{className:"flex h-44 items-center justify-center text-xs text-muted-foreground",children:"Lade Systemdaten…"})]}),(a==null?void 0:a.temp)&&(a.temp.cpu||a.temp.gpu)&&v.jsxs("div",{className:"mt-3 flex gap-4 border-t border-border/30 pt-3 font-mono text-xs text-muted-foreground/80",children:[a.temp.cpu!=null&&v.jsxs("span",{children:["CPU Temp: ",a.temp.cpu," °C"]}),a.temp.gpu!=null&&v.jsxs("span",{children:["GPU Temp: ",a.temp.gpu," °C"]})]})]})}const Oi=[{key:"stt_ms",label:"STT",color:"#f59e0b"},{key:"vision_ms",label:"Sehen",color:"#a78bfa"},{key:"hirn_ms",label:"Hirn",color:"#2dd4bf"},{key:"gen_ms",label:"Antwort",color:"#60a5fa"}],Fs=a=>a==null?"–":`${(a/1e3).toLocaleString("de-DE",{minimumFractionDigits:1,maximumFractionDigits:1})} s`;function C_(a){const l=Math.max(0,Date.now()/1e3-a);return l<60?`vor ${Math.round(l)} s`:l<3600?`vor ${Math.round(l/60)} min`:`vor ${Math.round(l/3600)} h`}function fd(a){return Oi.reduce((l,s)=>l+(a[s.key]??0),0)}function R_(a){let l=null;for(const s of Oi){const r=a[s.key];r!=null&&(l==null||r>l.ms)&&(l={label:s.label,color:s.color,ms:r})}return l}function z_({t:a,scale:l}){const s=Oi.map(r=>`${r.label} ${Fs(a[r.key])}`).join(" · ");return v.jsxs("div",{className:"flex items-center gap-2.5",children:[v.jsx("span",{className:"w-14 shrink-0 text-right font-mono text-[10px] text-muted-foreground/60",children:C_(a.ts)}),v.jsxs("div",{className:"relative h-4 flex-1 overflow-hidden rounded-sm bg-muted/25",title:s,children:[v.jsx("div",{className:"absolute inset-0 flex",children:Oi.map(r=>{const o=a[r.key];return!o||o<=0?null:v.jsx("div",{style:{width:`${o/l*100}%`,background:r.color},className:"h-full first:rounded-l-sm"},r.key)})}),a.error&&v.jsx("div",{className:"absolute inset-0 flex items-center justify-center bg-rose-500/15 text-[10px] font-semibold text-rose-300",children:"Fehler"})]}),v.jsx("span",{className:"w-12 shrink-0 text-right font-mono text-[11px] font-semibold tabular-nums text-foreground",children:a.error?"–":Fs(fd(a))})]})}function N_(){const{data:a}=l_(12),l=a??[],s=Math.max(1,...l.map(f=>fd(f))),r=l[0],o=r?R_(r):null;return v.jsxs("div",{className:"mc-card p-5",children:[v.jsxs("div",{className:"mb-3 flex items-start justify-between gap-3",children:[v.jsxs("div",{children:[v.jsxs("div",{className:"flex items-center gap-2",children:[v.jsx(G2,{className:"h-4.5 w-4.5 text-primary"}),v.jsx("h2",{className:"text-sm font-semibold uppercase tracking-wide text-foreground",children:"Latenz je Turn"}),v.jsxs("span",{className:"ml-1 inline-flex items-center gap-1 text-[10px] font-medium text-muted-foreground/70",children:[v.jsx("span",{className:"h-1.5 w-1.5 rounded-full bg-emerald-500 animate-pulse"})," live"]})]}),r?v.jsxs("div",{className:"mt-2 flex items-baseline gap-2",children:[v.jsx("span",{className:`font-space text-3xl font-bold tracking-tight tabular-nums ${r.error?"text-rose-400":"text-foreground"}`,children:r.error?"Fehler":Fs(fd(r))}),v.jsxs("span",{className:"text-xs text-muted-foreground",children:["letzter Turn",!r.error&&o&&v.jsxs(v.Fragment,{children:[" · Täter: ",v.jsx("span",{style:{color:o.color},className:"font-semibold",children:o.label})," ",Fs(o.ms)]})]})]}):v.jsx("div",{className:"mt-2 text-xs text-muted-foreground",children:"Noch kein Voice-Turn aufgezeichnet."}),r&&!r.error&&v.jsx("div",{className:"mt-0.5 font-mono text-[11px] text-muted-foreground/70",children:Oi.filter(f=>r[f.key]!=null).map(f=>`${f.label} ${Fs(r[f.key])}`).join(" · ")})]}),v.jsx("div",{className:"flex shrink-0 flex-col items-end gap-1 pt-1",children:Oi.map(f=>v.jsxs("div",{className:"flex items-center gap-1.5",children:[v.jsx("span",{className:"h-2 w-2 rounded-full",style:{background:f.color}}),v.jsx("span",{className:"text-[11px] font-semibold uppercase tracking-wider text-muted-foreground",children:f.label})]},f.key))})]}),l.length>0?v.jsx("div",{className:"space-y-1.5",children:l.map(f=>v.jsx(z_,{t:f,scale:s},f.id))}):v.jsx("div",{className:"flex h-[120px] items-center justify-center px-6 text-center text-xs text-muted-foreground",children:"Sprich einmal mit Lucy — dann erscheint hier der Zeit-Wasserfall pro Turn, damit man den einen Hänger sofort sieht."}),v.jsx("div",{className:"mt-3 border-t border-border/30 pt-2 text-[10px] leading-relaxed text-muted-foreground/70",children:'„Hirn" = Zeit bis zum ersten Wort (Agent + Gedächtnis-Suche + Modell); Tool-Runden stecken in „Antwort". Reine Telegram-Turns laufen an MC2 vorbei und erscheinen hier nicht.'})]})}const Gy=[{key:"prompt",label:"Prompt",color:"#f59e0b"},{key:"completion",label:"Antwort",color:"#2dd4bf"}];function D_(){const{data:a}=kd(),l=uv(),[s,r]=F.useState("live"),o=dv(s==="live"?60:pv[s],s!=="live"),f=F.useMemo(()=>{var b;if(s==="live")return l;const p=((b=o.data)==null?void 0:b.points)??[],g=[];for(let y=1;yv.jsxs("div",{className:"flex items-center gap-1.5",children:[v.jsx("span",{className:"h-2 w-2 rounded-full",style:{background:p.color}}),v.jsx("span",{className:"text-[11px] font-semibold uppercase tracking-wider text-muted-foreground",children:p.label}),v.jsx("span",{className:"font-mono text-xs font-bold tabular-nums text-foreground",children:Math.round((h==null?void 0:h[p.key])??0)})]},p.key))})]})]}),s!=="live"&&f.length===0?v.jsx("div",{className:"flex h-[150px] items-center justify-center text-xs text-muted-foreground",children:o.isLoading?"Verlauf wird geladen …":"Noch kein Verlauf — der Sammler baut die Historie gerade erst auf."}):a?v.jsx(gv,{data:f,series:Gy,unit:" tok/s",yMode:"auto",height:150,showTime:!0}):v.jsx("div",{className:"flex h-[150px] items-center justify-center text-xs text-muted-foreground",children:"Lade Durchsatz…"}),v.jsx("div",{className:"mt-2 border-t border-border/30 pt-2 text-[10px] text-muted-foreground/70",children:"Durchsatz aus dem Gateway abgeleitet (Prefill vs. Generierung). Flach bei Leerlauf."})]})}function Ud(){const a=fr();return l=>a({to:".",search:s=>({...s,system:l})})}function O_({onNavigate:a}){var ne,B,W,re;const l=Ud(),{data:s}=mv(),{data:r}=hv(),{data:o}=r_(),{data:f}=s_(),{data:h}=u_(),{data:d}=n_(),{data:p}=a_(),g=b_(),{showAlert:b,dialogElement:y}=S_(),S=yd(),[_,w]=F.useState({});async function E(ce,Se){w(M=>({...M,[ce]:!0}));try{if(Se.kind==="loadModel")await De(`/api/models/${encodeURIComponent(Se.model)}/load`,{method:"POST"});else{const M=await De("/api/maintenance/restart",{method:"POST",body:JSON.stringify({service:Se.service})});M.ok||b("Reparatur nicht ganz geklappt",(M.err||"Unbekannter Fehler")+(Se.needsSudo?` - -Tipp: Dafür wird evtl. das Box-Passwort gebraucht (oben rechts hinterlegen).`:""))}S.invalidateQueries({queryKey:Ge.health}),S.invalidateQueries({queryKey:Ge.services}),S.invalidateQueries({queryKey:Ge.models})}catch(M){b("Reparatur fehlgeschlagen",String((M==null?void 0:M.message)||M))}finally{w(M=>({...M,[ce]:!1}))}}const j=((ne=s==null?void 0:s.running)==null?void 0:ne.length)??0,R=(r==null?void 0:r.services.filter(ce=>ce.ok).length)??0,z=(r==null?void 0:r.services.length)??0,L=z-R,D=(o?(o.os>0?1:0)+(o.engine>0?1:0)+(o.swap>0?1:0)+(o.models>0?1:0):0)+(((B=o==null?void 0:o.components)==null?void 0:B.filter(ce=>ce.update===!0).length)??0),X=d!=null&&d.available?d.open_count:0,q=p!=null&&p.available?p.items.filter(ce=>ce.status==="blocked").length:0,Y=h?[h.gateway,h.memory,h.desktop_gateway]:[],J=Y.filter(ce=>ce==null?void 0:ce.ok).length,Q=h?h.gateway.ok?h.memory.ok?h.desktop_gateway.ok?"":"Desktop-Gateway":"Gedächtnis-Leitung":"Modell-Leitung":"",P=(W=s==null?void 0:s.models)==null?void 0:W.find(ce=>ce.role==="hermes"),ee=P!=null&&P.name?(re=P.name.split("/").pop())==null?void 0:re.replace(/\.gguf$/i,""):"",I=r==null?void 0:r.services.filter(ce=>!ce.ok).map(ce=>ce.name).join(", "),de=o?[o.os>0&&"OS",o.engine>0&&"Engine",o.swap>0&&"Swap",o.models>0&&"Modelle"].filter(Boolean):[],$=de.length>0?de.join(" + "):"";return v.jsxs("div",{className:"space-y-6",children:[v.jsxs("div",{children:[v.jsx("h1",{className:"bg-gradient-to-r from-foreground via-foreground to-primary bg-clip-text font-space text-2xl font-bold tracking-tight text-transparent",children:"Cockpit"}),v.jsx("p",{className:"text-sm text-muted-foreground",children:"Deine Box auf einen Blick — Details hinter jeder Kachel."})]}),v.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-3 gap-6 items-start",children:[v.jsxs("div",{className:"lg:col-span-2 space-y-6",children:[v.jsx(k_,{verdict:g.verdict,memory:g.memory,warns:g.warns,problems:g.problems}),v.jsxs("section",{children:[v.jsx(Lf,{children:"Leistung"}),v.jsx("div",{className:"grid gap-4 md:grid-cols-1",children:v.jsx(A_,{})}),v.jsx("div",{className:"mt-4",children:v.jsx(N_,{})}),v.jsx("div",{className:"mt-4",children:v.jsx(D_,{})})]}),v.jsxs("section",{children:[v.jsx(Lf,{children:"Bereiche"}),v.jsxs("div",{className:"grid gap-4 grid-cols-2 md:grid-cols-3",children:[v.jsx(Vs,{icon:Md,title:"Auftragsbuch",value:d!=null&&d.available?X:"—",unit:X===1?"Vorschlag":"Vorschläge",tone:d?q>0||X>0?"warn":"ok":"loading",hint:q>0?`${q} Karte${q===1?"":"n"} wartet auf deine Antwort`:X>0?`${X} offene Patches`:"Keine ausstehenden Vorschläge",onClick:()=>a("auftraege")}),v.jsx(Vs,{icon:Z0,title:"Modelle",value:j,unit:"warm",tone:j>0?"ok":"muted",hint:ee?`Hirn: ${ee}`:"Kein Hermes-Modell geladen",onClick:()=>a("models")}),v.jsx(Vs,{icon:F0,title:"Dienste",value:r?`${R}/${z}`:"…",unit:"laufen",tone:r?L>0?"warn":"ok":"loading",hint:I?`Ausfall: ${I}`:"Alle Dienste online",onClick:()=>l("wartung")}),v.jsx(Vs,{icon:Rd,title:"Updates",value:o?D>0?D:"0":"…",unit:D>0?"bereit":"aktuell",tone:o?D>0?"warn":"ok":"loading",hint:D>0?`Verfügbar: ${$}`:"Alles auf dem neuesten Stand",onClick:()=>l("wartung")}),v.jsx(Vs,{icon:Cd,title:"Verbinden",value:h?`${J}/${Y.length}`:"…",unit:"Leitungen",tone:h?J===Y.length?"ok":"warn":"loading",hint:Q?`Gestört: ${Q}`:"Hermes Desktop & IDEs bereit",onClick:()=>a("connect")})]})]})]}),v.jsxs("div",{className:"space-y-6",children:[v.jsx(U_,{problems:g.problems,pendingCount:D,openAuftraege:X,blockedIdeen:q,busy:_,onRepair:E,onNavigate:a}),v.jsxs("section",{children:[v.jsx(Lf,{children:"Werkzeuge & Diagnose"}),v.jsx(L_,{agent:f,svcErrors:L,onNavigate:a})]})]})]}),y]})}function Lf({children:a}){return v.jsx("p",{className:"mb-2 ml-0.5 text-[11px] font-semibold uppercase tracking-wider text-muted-foreground/60",children:a})}function k_({verdict:a,memory:l,warns:s,problems:r}){const o=s.length?`${s[0].label}: ${s[0].detail}${s.length>1?` (+${s.length-1} weitere)`:""}`:l.status==="full"?l.text:"Nichts Schlimmes — nur ein Hinweis.",f=r.length?`${r[0].label}: ${r[0].detail}${r.length>1?` (+${r.length-1} weitere)`:""}`:"Ein wichtiger Dienst hakt.",h={loading:{ring:"border-border/60 bg-card/45",icon:Ad,iconCls:"text-muted-foreground animate-spin",title:"Box wird geprüft …",sub:"Einen Moment."},gut:{ring:"border-emerald-500/40 bg-emerald-500/5",icon:V2,iconCls:"text-emerald-400",title:"Box gesund",sub:"Alle wichtigen Dienste laufen."},warn:{ring:"border-amber-500/40 bg-amber-500/5",icon:Pu,iconCls:"text-amber-400",title:"Kleinigkeit an der Box",sub:o},problem:{ring:"border-red-500/50 bg-red-500/5",icon:Pu,iconCls:"text-red-400",title:"Box braucht Hilfe",sub:f}}[a],d=h.icon,p={ok:"text-emerald-400",warn:"text-amber-400",full:"text-red-400",unknown:"text-muted-foreground"}[l.status],g={ok:"bg-emerald-500",warn:"bg-amber-500",full:"bg-red-500",unknown:"bg-muted-foreground/40"}[l.status];return v.jsxs("div",{className:qe("flex flex-col gap-4 rounded-2xl border p-5 shadow-lg shadow-black/15 backdrop-blur-md transition-colors sm:flex-row sm:items-center sm:justify-between h-full",h.ring),children:[v.jsxs("div",{className:"flex items-center gap-3",children:[v.jsx("div",{className:"flex h-11 w-11 shrink-0 items-center justify-center rounded-xl border border-border/40 bg-background/30",children:v.jsx(d,{className:qe("h-6 w-6",h.iconCls)})}),v.jsxs("div",{className:"min-w-0",children:[v.jsx("h2",{className:"text-base font-bold tracking-tight text-foreground",children:h.title}),v.jsx("p",{className:"text-xs text-muted-foreground",children:h.sub})]})]}),v.jsxs("div",{className:"w-full max-w-[16rem] rounded-xl border border-border/30 bg-background/20 p-3",children:[v.jsxs("div",{className:"mb-1.5 flex items-center justify-between text-[11px]",children:[v.jsxs("span",{className:"flex items-center gap-1.5 font-semibold uppercase tracking-wider text-muted-foreground",children:[v.jsx(Q2,{className:"h-3.5 w-3.5"})," Speicher"]}),v.jsx("span",{className:qe("font-mono font-bold",p),children:l.status==="unknown"?"—":`${l.usedGb.toFixed(1)} / ${l.totalGb.toFixed(1)} GB`})]}),v.jsx("div",{className:"h-2 w-full overflow-hidden rounded-full border border-border/30 bg-background/50",children:v.jsx("div",{className:qe("h-full rounded-full transition-all duration-500",g),style:{width:`${l.pct}%`}})})]})]})}function U_({problems:a,pendingCount:l,openAuftraege:s,blockedIdeen:r,busy:o,onRepair:f,onNavigate:h}){const d=Ud(),p=l>0,g=s>0,b=r>0,y=a.length===0&&!p&&!g&&!b;return v.jsx("div",{className:"h-full flex flex-col justify-between",children:y?v.jsxs("div",{className:"flex items-center gap-3 rounded-2xl border border-emerald-500/25 bg-emerald-500/5 p-4 h-full",children:[v.jsx(O2,{className:"h-5 w-5 shrink-0 text-emerald-400"}),v.jsxs("div",{children:[v.jsx("p",{className:"text-sm font-semibold text-foreground",children:"Nichts zu tun"}),v.jsx("p",{className:"text-xs text-muted-foreground",children:"Alles läuft. Du musst gerade nichts abnicken."})]})]}):v.jsxs("div",{className:"space-y-2 h-full flex flex-col justify-center",children:[a.map(S=>v.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center justify-between gap-3 rounded-2xl border border-red-500/25 bg-red-500/5 p-4",children:[v.jsxs("div",{className:"flex min-w-0 items-center gap-3 w-full",children:[v.jsx("span",{className:"flex h-9 w-9 shrink-0 items-center justify-center rounded-lg border border-red-500/30 bg-background/30 text-red-300",children:v.jsx(S.icon,{className:"h-4.5 w-4.5"})}),v.jsxs("div",{className:"min-w-0 flex-1",children:[v.jsx("p",{className:"text-sm font-bold text-foreground",children:S.label}),v.jsx("p",{className:"truncate text-xs text-muted-foreground",children:S.detail})]})]}),S.repair&&v.jsxs("button",{onClick:()=>S.repair&&f(S.id,S.repair),disabled:!!o[S.id],className:"flex h-9 shrink-0 items-center gap-1.5 rounded-lg border border-red-500/40 bg-red-500/10 px-3 text-[11px] font-bold uppercase tracking-wide text-red-300 transition-all hover:bg-red-500/20 cursor-pointer disabled:opacity-60 w-full sm:w-auto justify-center",children:[o[S.id]?v.jsx(Ad,{className:"h-3.5 w-3.5 animate-spin"}):v.jsx(t3,{className:"h-3.5 w-3.5"}),S.repair.label]})]},S.id)),b&&v.jsxs("button",{onClick:()=>h("auftraege"),className:"flex w-full items-center justify-between gap-3 rounded-2xl border border-red-500/30 bg-red-500/5 p-4 text-left transition-all hover:bg-red-500/10 cursor-pointer",children:[v.jsxs("div",{className:"flex items-center gap-3",children:[v.jsx("span",{className:"flex h-9 w-9 shrink-0 items-center justify-center rounded-lg border border-red-500/30 bg-background/30 text-red-300",children:v.jsx(J0,{className:"h-4.5 w-4.5"})}),v.jsxs("div",{children:[v.jsxs("p",{className:"text-sm font-bold text-foreground",children:[r," Karte",r===1?"":"n"," braucht deine Antwort"]}),v.jsx("p",{className:"text-xs text-muted-foreground",children:"Die Box hängt an einer Frage und wartet auf dich."})]})]}),v.jsx(Js,{className:"h-4 w-4 shrink-0 text-red-300/70"})]}),g&&v.jsxs("button",{onClick:()=>h("auftraege"),className:"flex w-full items-center justify-between gap-3 rounded-2xl border border-primary/30 bg-primary/5 p-4 text-left transition-all hover:bg-primary/10 cursor-pointer",children:[v.jsxs("div",{className:"flex items-center gap-3",children:[v.jsx("span",{className:"flex h-9 w-9 shrink-0 items-center justify-center rounded-lg border border-primary/30 bg-background/30 text-primary",children:v.jsx(Md,{className:"h-4.5 w-4.5"})}),v.jsxs("div",{children:[v.jsxs("p",{className:"text-sm font-bold text-foreground",children:[s," Vorschl",s===1?"ag":"äge"," im Auftragsbuch"]}),v.jsx("p",{className:"text-xs text-muted-foreground",children:"Annehmen oder ablehnen."})]})]}),v.jsx(Js,{className:"h-4 w-4 shrink-0 text-primary/70"})]}),p&&v.jsxs("button",{onClick:()=>d("wartung"),className:"flex w-full items-center justify-between gap-3 rounded-2xl border border-amber-500/30 bg-amber-500/5 p-4 text-left transition-all hover:bg-amber-500/10 cursor-pointer",children:[v.jsxs("div",{className:"flex items-center gap-3",children:[v.jsx("span",{className:"flex h-9 w-9 shrink-0 items-center justify-center rounded-lg border border-amber-500/30 bg-background/30 text-amber-300",children:v.jsx(Rd,{className:"h-4.5 w-4.5"})}),v.jsxs("div",{children:[v.jsxs("p",{className:"text-sm font-bold text-foreground",children:[l," Update",l===1?"":"s"," bereit"]}),v.jsx("p",{className:"text-xs text-muted-foreground",children:"Ansehen und entscheiden."})]})]}),v.jsx(Js,{className:"h-4 w-4 shrink-0 text-amber-300/70"})]})]})})}function L_({agent:a,svcErrors:l,onNavigate:s}){const r=Ud(),o=[{label:"Hermes Agent",status:a?a.gateway_reachable?"Bereit":"Offline":"…",tone:a?a.gateway_reachable?"ok":"alert":"loading",action:()=>s("agent")},{label:"Konsole (Box-Shell)",status:a?a.box_console_reachable?"Bereit":"Offline":"…",tone:a?a.box_console_reachable?"ok":"warn":"loading",action:()=>s("konsole")},{label:"Systemlogs & Diagnose",status:l>0?`${l} Fehler`:"Keine Fehler",tone:l>0?"alert":"ok",action:()=>r("logs")},{label:"Wissens-Vault",status:"Öffnen",tone:"muted",action:()=>s("wissen")},{label:"Chronik & Zeitmaschine",status:"Öffnen",tone:"muted",action:()=>s("chronik")}];return v.jsx("div",{className:"rounded-2xl border border-border/60 bg-card/30 p-4 space-y-3 shadow-sm",children:v.jsx("div",{className:"divide-y divide-border/20",children:o.map((f,h)=>{const d={loading:"bg-muted-foreground/45 animate-pulse",ok:"bg-emerald-500 shadow-[0_0_8px_rgba(16,185,129,0.4)]",warn:"bg-amber-500 shadow-[0_0_8px_rgba(245,158,11,0.4)]",alert:"bg-red-500 shadow-[0_0_8px_rgba(239,68,68,0.4)]",muted:"bg-muted-foreground/30"}[f.tone];return v.jsxs("button",{onClick:f.action,className:"w-full py-2.5 px-1.5 flex items-center justify-between text-left hover:bg-card/45 rounded-lg transition-all group cursor-pointer text-xs",children:[v.jsx("span",{className:"text-muted-foreground group-hover:text-foreground transition-colors font-medium",children:f.label}),v.jsxs("div",{className:"flex items-center gap-2",children:[v.jsx("span",{className:qe("text-[10px] font-semibold font-mono",f.tone==="ok"?"text-emerald-400":f.tone==="warn"?"text-amber-400":f.tone==="alert"?"text-red-400":"text-muted-foreground/60"),children:f.status}),v.jsx("span",{className:qe("h-1.5 w-1.5 rounded-full",d)})]})]},h)})})})}const B_=F.lazy(()=>Kt(()=>import("./ModelsView-Cwn5DMTg.js"),__vite__mapDeps([14,15,16,17,3,9,18,19])).then(a=>({default:a.ModelsView}))),H_=F.lazy(()=>Kt(()=>import("./ConnectView-Cs6CoHdG.js"),__vite__mapDeps([20,5,18])).then(a=>({default:a.ConnectView}))),q_=F.lazy(()=>Kt(()=>import("./AgentView-fp_5ftXX.js"),__vite__mapDeps([21,22,6,7,4])).then(a=>({default:a.AgentView}))),G_=F.lazy(()=>Kt(()=>import("./KonsoleView-BFFWN-AY.js"),__vite__mapDeps([23,7,1])).then(a=>({default:a.KonsoleView}))),Q_=F.lazy(()=>Kt(()=>import("./GuideView-DJzyVTu7.js"),__vite__mapDeps([24,17,19,4])).then(a=>({default:a.GuideView}))),V_=F.lazy(()=>Kt(()=>import("./AuftragsbuchView-BElnexXf.js"),__vite__mapDeps([25,22,1,5,6,18,26])).then(a=>({default:a.AuftragsbuchView}))),Y_=F.lazy(()=>Kt(()=>import("./IdeenAnsicht-DewuOeHX.js"),__vite__mapDeps([27,22,16,26,1,2,19,18,6])).then(a=>({default:a.IdeenView}))),K_=F.lazy(()=>Kt(()=>import("./SkillsView-C1JOUS_h.js"),__vite__mapDeps([28,15])).then(a=>({default:a.SkillsView}))),X_=F.lazy(()=>Kt(()=>import("./ChronikView-CVJajeyU.js"),__vite__mapDeps([29,3])).then(a=>({default:a.ChronikView}))),Z_=F.lazy(()=>Kt(()=>import("./WissenView-1g9-Kr_d.js"),__vite__mapDeps([30,13,1,3,2])).then(a=>({default:a.WissenView}))),J_=a=>{const l=a.system;return l==="wartung"||l==="logs"?{system:l}:{}},_l=h2({component:v_,validateSearch:J_,notFoundComponent:()=>v.jsx(Bi,{titel:"Diese Seite gibt es nicht",text:"Der Link zeigt auf eine Ansicht, die Mission Control nicht kennt. Vielleicht stammt er aus einer älteren Fassung."})}),F_=ki({getParentRoute:()=>_l,path:"/",beforeLoad:()=>{throw S0({to:"/cockpit"})}});function wl(a,l){return ki({getParentRoute:()=>_l,path:a,component:l,errorComponent:({error:s,reset:r})=>v.jsx(Bi,{titel:"Diese Ansicht ist abgestürzt",text:"Der Rest von Mission Control läuft weiter. Erneut versuchen — oder in eine andere Ansicht wechseln.",fehler:s,onErneut:r})})}function $_(){const a=fr();return v.jsx(O_,{onNavigate:l=>{const s=ar.find(r=>r.id===l);s&&a({to:s.pfad})}})}const W_=wl("/cockpit",()=>v.jsx($_,{})),P_=wl("/auftraege",()=>v.jsx(V_,{})),I_=wl("/skills",()=>v.jsx(K_,{})),e5=ki({getParentRoute:()=>_l,path:"/chronik",validateSearch:a=>typeof a.q=="string"&&a.q?{q:a.q}:{},component:()=>v.jsx(X_,{}),errorComponent:({error:a,reset:l})=>v.jsx(Bi,{titel:"Die Chronik ist abgestürzt",text:"Der Rest läuft weiter.",fehler:a,onErneut:l})}),t5=wl("/verbinden",()=>v.jsx(H_,{})),n5=wl("/konsole",()=>v.jsx(G_,{})),a5=wl("/anleitung",()=>v.jsx(Q_,{})),l5=wl("/agent",()=>v.jsx(q_,{})),i5=ki({getParentRoute:()=>_l,path:"/ideen",validateSearch:a=>typeof a.offen=="string"&&a.offen?{offen:a.offen}:{},component:()=>v.jsx(Y_,{}),errorComponent:({error:a,reset:l})=>v.jsx(Bi,{titel:"Die Ideen-Ansicht ist abgestürzt",text:"Der Rest läuft weiter.",fehler:a,onErneut:l})}),s5=ki({getParentRoute:()=>_l,path:"/wissen",validateSearch:a=>({...typeof a.datei=="string"&&a.datei?{datei:a.datei}:{},...typeof a.suche=="string"&&a.suche?{suche:a.suche}:{}}),component:()=>v.jsx(Z_,{}),errorComponent:({error:a,reset:l})=>v.jsx(Bi,{titel:"Die Wissens-Ansicht ist abgestürzt",text:"Der Rest läuft weiter.",fehler:a,onErneut:l})}),r5=ki({getParentRoute:()=>_l,path:"/modelle",validateSearch:a=>{const l=a.reiter;return l==="werkbank"||l==="routing"||l==="discover"?{reiter:l}:{}},component:()=>v.jsx(B_,{}),errorComponent:({error:a,reset:l})=>v.jsx(Bi,{titel:"Der Modell-Manager ist abgestürzt",text:"Der Rest läuft weiter.",fehler:a,onErneut:l})}),u5=_l.addChildren([F_,W_,i5,P_,I_,e5,s5,t5,n5,a5,r5,l5]),c5=_2({routeTree:u5,scrollRestoration:!0,defaultPreload:!1});class o5 extends cn.Component{constructor(){super(...arguments);zu(this,"state",{error:null})}static getDerivedStateFromError(s){return{error:s}}componentDidCatch(s,r){console.error("Unbehandelter UI-Fehler:",s,r.componentStack)}render(){return this.state.error?v.jsx("div",{className:"min-h-screen flex items-center justify-center bg-neutral-950 text-neutral-200 p-8",children:v.jsxs("div",{className:"max-w-lg space-y-4 text-center",children:[v.jsx("div",{className:"text-2xl",children:"Da ist etwas schiefgelaufen."}),v.jsx("div",{className:"text-sm text-neutral-400 break-all",children:this.state.error.message}),v.jsx("button",{className:"px-4 py-2 rounded-lg bg-neutral-800 hover:bg-neutral-700 border border-neutral-700",onClick:()=>window.location.reload(),children:"Neu laden"})]})}):this.props.children}}const f5=Object.fromEntries(ar.map(a=>[a.id,a.pfad]));function d5(){const a=window.location.hash.replace(/^#\/?/,"");if(!a)return;const l=f5[a];l&&window.history.replaceState(null,"",l+window.location.search)}const Bf="mc_neuladen_wegen_version";function h5(){window.addEventListener("vite:preloadError",a=>{sessionStorage.getItem(Bf)||(a.preventDefault(),sessionStorage.setItem(Bf,"1"),window.location.reload())}),window.addEventListener("load",()=>{window.setTimeout(()=>sessionStorage.removeItem(Bf),5e3)})}d5();h5();const m5=new _x({defaultOptions:{queries:{retry:1,refetchOnWindowFocus:!1,staleTime:5e3}}});$1.createRoot(document.getElementById("root")).render(v.jsx(cn.StrictMode,{children:v.jsx(o5,{children:v.jsx(wx,{client:m5,children:v.jsx(j2,{router:c5})})})}));export{J2 as $,H0 as A,D2 as B,O2 as C,N5 as D,q2 as E,u_ as F,Js as G,Q2 as H,K2 as I,U2 as J,L2 as K,Ad as L,A5 as M,z2 as N,s_ as O,y5 as P,rd as Q,W2 as R,e3 as S,Pu as T,ky as U,D5 as V,t3 as W,zd as X,F0 as Y,Z0 as Z,Cd as _,T5 as a,G2 as a0,I2 as a1,n_ as a2,a_ as a3,B5 as a4,Md as a5,x5 as a6,J0 as a7,or as a8,qf as a9,X1 as aA,$s as aa,bx as ab,pt as ac,Rt as ad,n0 as ae,Qe as af,M5 as ag,U5 as ah,S5 as ai,Y2 as aj,Rd as ak,V2 as al,w5 as am,cn as an,Py as ao,_5 as ap,E5 as aq,Z2 as ar,hv as as,p5 as at,ar as au,h3 as av,Yt as aw,y3 as ax,e2 as ay,cr as az,qe as b,je as c,b5 as d,N2 as e,mv as f,j5 as g,dr as h,C5 as i,v as j,S_ as k,k5 as l,z5 as m,De as n,xn as o,f3 as p,Ge as q,F as r,v5 as s,H2 as t,yd as u,L5 as v,R5 as w,r_ as x,O5 as y,fr as z}; diff --git a/frontend/dist/assets/layers-BFKjGswj.js b/frontend/dist/assets/layers-CcL78b5Q.js similarity index 91% rename from frontend/dist/assets/layers-BFKjGswj.js rename to frontend/dist/assets/layers-CcL78b5Q.js index 267e4e9..a89524f 100644 --- a/frontend/dist/assets/layers-BFKjGswj.js +++ b/frontend/dist/assets/layers-CcL78b5Q.js @@ -1,4 +1,4 @@ -import{c as a}from"./index-l6kyKCL9.js";/** +import{c as a}from"./index-DMY9lUCb.js";/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. diff --git a/frontend/dist/assets/power-DcJoPDeQ.js b/frontend/dist/assets/power-DsvD9qMX.js similarity index 87% rename from frontend/dist/assets/power-DcJoPDeQ.js rename to frontend/dist/assets/power-DsvD9qMX.js index 9e8674b..5e20d7c 100644 --- a/frontend/dist/assets/power-DcJoPDeQ.js +++ b/frontend/dist/assets/power-DsvD9qMX.js @@ -1,4 +1,4 @@ -import{c as o}from"./index-l6kyKCL9.js";/** +import{c as o}from"./index-DMY9lUCb.js";/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. diff --git a/frontend/dist/assets/refresh-cw-BV1qZMSR.js b/frontend/dist/assets/refresh-cw-hAcZthO8.js similarity index 91% rename from frontend/dist/assets/refresh-cw-BV1qZMSR.js rename to frontend/dist/assets/refresh-cw-hAcZthO8.js index 2a0cc75..d933701 100644 --- a/frontend/dist/assets/refresh-cw-BV1qZMSR.js +++ b/frontend/dist/assets/refresh-cw-hAcZthO8.js @@ -1,4 +1,4 @@ -import{c as e}from"./index-l6kyKCL9.js";/** +import{c as e}from"./index-DMY9lUCb.js";/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. diff --git a/frontend/dist/assets/search-C1Zs6OOf.js b/frontend/dist/assets/search-D_8DnBvS.js similarity index 88% rename from frontend/dist/assets/search-C1Zs6OOf.js rename to frontend/dist/assets/search-D_8DnBvS.js index 87e5dc6..ec131ce 100644 --- a/frontend/dist/assets/search-C1Zs6OOf.js +++ b/frontend/dist/assets/search-D_8DnBvS.js @@ -1,4 +1,4 @@ -import{c}from"./index-l6kyKCL9.js";/** +import{c}from"./index-DMY9lUCb.js";/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. diff --git a/frontend/dist/assets/shield-CVm2T_f5.js b/frontend/dist/assets/shield-BtE9Fxv6.js similarity index 90% rename from frontend/dist/assets/shield-CVm2T_f5.js rename to frontend/dist/assets/shield-BtE9Fxv6.js index 8f3ec7f..2faa645 100644 --- a/frontend/dist/assets/shield-CVm2T_f5.js +++ b/frontend/dist/assets/shield-BtE9Fxv6.js @@ -1,4 +1,4 @@ -import{c as a}from"./index-l6kyKCL9.js";/** +import{c as a}from"./index-DMY9lUCb.js";/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. diff --git a/frontend/dist/assets/zap-CnZftvep.js b/frontend/dist/assets/zap-2yha4rs4.js similarity index 96% rename from frontend/dist/assets/zap-CnZftvep.js rename to frontend/dist/assets/zap-2yha4rs4.js index be13d2d..be71403 100644 --- a/frontend/dist/assets/zap-CnZftvep.js +++ b/frontend/dist/assets/zap-2yha4rs4.js @@ -1,4 +1,4 @@ -import{c as a}from"./index-l6kyKCL9.js";/** +import{c as a}from"./index-DMY9lUCb.js";/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. diff --git a/frontend/dist/index.html b/frontend/dist/index.html index 891bf63..f8d1578 100644 --- a/frontend/dist/index.html +++ b/frontend/dist/index.html @@ -7,7 +7,7 @@ Mission Control 2.0 - + diff --git a/frontend/src/app/router.tsx b/frontend/src/app/router.tsx index 9346fcc..715b2f8 100644 --- a/frontend/src/app/router.tsx +++ b/frontend/src/app/router.tsx @@ -25,7 +25,6 @@ const ConnectView = lazy(() => import("@/views/ConnectView").then((m) => ({ defa const AgentView = lazy(() => import("@/views/AgentView").then((m) => ({ default: m.AgentView }))) const KonsoleView = lazy(() => import("@/views/KonsoleView").then((m) => ({ default: m.KonsoleView }))) const GuideView = lazy(() => import("@/views/GuideView").then((m) => ({ default: m.GuideView }))) -const AuftragsbuchView = lazy(() => import("@/views/AuftragsbuchView").then((m) => ({ default: m.AuftragsbuchView }))) const IdeenView = lazy(() => import("@/features/ideen/IdeenAnsicht").then((m) => ({ default: m.IdeenView }))) const SkillsView = lazy(() => import("@/views/SkillsView").then((m) => ({ default: m.SkillsView }))) const ChronikView = lazy(() => import("@/views/ChronikView").then((m) => ({ default: m.ChronikView }))) @@ -99,7 +98,6 @@ function CockpitSeite() { } const cockpitRoute = ansicht("/cockpit", () => ) -const auftraegeRoute = ansicht("/auftraege", () => ) const skillsRoute = ansicht("/skills", () => ) /** Chronik: `?q=` filtert den Verlauf — Ziel der „Finden"-Einträge der Palette (P6). */ export interface ChronikSuche { @@ -178,7 +176,6 @@ export const routeTree = rootRoute.addChildren([ indexRoute, cockpitRoute, ideenRoute, - auftraegeRoute, skillsRoute, chronikRoute, wissenRoute, diff --git a/frontend/src/features/ideen/IdeenAnsicht.tsx b/frontend/src/features/ideen/IdeenAnsicht.tsx index 02c86ee..e706069 100644 --- a/frontend/src/features/ideen/IdeenAnsicht.tsx +++ b/frontend/src/features/ideen/IdeenAnsicht.tsx @@ -481,7 +481,7 @@ function IdeenSection() { setModus("box")} k={{ id: "box", icon: Hammer, titel: "Die Box, allein", - text: "Für dein Heimlabor. Das Ergebnis kommt als Patch-Vorschlag ins Auftragsbuch." }} /> + text: "Für dein Heimlabor. Das Ergebnis kommt als Branch nach Gitea — mergen tust du." }} /> diff --git a/frontend/src/lib/api.ts b/frontend/src/lib/api.ts index 3d80708..3c3d8a3 100644 --- a/frontend/src/lib/api.ts +++ b/frontend/src/lib/api.ts @@ -490,46 +490,6 @@ export interface ModelsResp { running?: string[] } -// ── Auftragsbuch (Vorschlags-Inbox) ────────────────────────────────────────── -export interface AuftragStatus { - state: "laeuft" | "eingespielt" | "fehlgeschlagen" | "rollback" | "zurueckgerollt" | "kritisch" | "abgelehnt" - detail: string - ts: number -} -export interface AuftragItem { - repo?: "mc2" | "lucy" // Quelle: Box-Stack (mc2) oder Lucy-Desktop (Annahme baut am PC) - branch: string - kind: string // wartung | orchestrator | doku | feature - subject: string - body: string - author: string - ts: number | null - ahead: number - behind: number - shortstat: string - files: { status: string; path: string }[] - files_truncated: boolean - frontend_ohne_build: boolean // Frontend-Quelltext ohne dist → Box kann nicht bauen - verwaist?: boolean // kein gemeinsamer Ursprung mit main (kaputt aufgesetzt) → Merge unmöglich - leer?: boolean // Diff gegen main ist leer → bringt nichts (schon in main / am Repo vorbei) - status: AuftragStatus | null - ci_status?: "success" | "failure" | "pending" | "skipped" | null - // Empfehlungs-Stempel des nächtlichen Karten-Gutachters (Meinung, kein Gate). - empfehlung: { empfehlung: "ANNEHMEN" | "ABLEHNEN" | "UNKLAR"; satz: string; richter: string } | null -} -export interface SkillKandidat { - file: string - title: string - preview: string - mtime: number -} -export interface AuftragsbuchResp { - available: boolean - items: AuftragItem[] - skill_kandidaten: SkillKandidat[] - open_count: number -} - // ── Ideen-Queue (natives Hermes-Kanban) ────────────────────────────────────── export interface IdeenItem { id: string diff --git a/frontend/src/lib/queries.ts b/frontend/src/lib/queries.ts index ef78ef3..c3366e8 100644 --- a/frontend/src/lib/queries.ts +++ b/frontend/src/lib/queries.ts @@ -8,7 +8,6 @@ import { api, type AgentStatus, type AktivitaetResp, - type AuftragsbuchResp, type ChronikResp, type ConnectResp, type ConnectHealth, @@ -56,7 +55,6 @@ export const qk = { connectHealth: ["connect-health"] as const, memoryGraph: ["memory-graph"] as const, voiceTrace: ["voice-trace"] as const, - auftragsbuch: ["auftragsbuch"] as const, ideen: ["ideen"] as const, chronik: ["chronik"] as const, wissen: ["wissen"] as const, @@ -71,7 +69,7 @@ export const qk = { // Intervalle mehr (mehrere Beobachter = kleinstes Intervall gewinnt). const TAKT = { graph: 3_000, // System + Token: seit P4 nur noch Rueckfall/Randdaten (siehe unten) - schnell: 8_000, // „fühlt sich live an": Modelle, Voice-Trace, Auftragsbuch + schnell: 8_000, // „fühlt sich live an": Modelle, Voice-Trace normal: 10_000, // Dienste, Routing, Agent-Status, Health gemuetlich: 30_000, // Chronik, Ideen traege: 60_000, // Updates-Check, Reminders, Zeitmaschine, HF-Abfragen @@ -96,15 +94,6 @@ const relax = (ms: number) => () => (sseVerbunden() ? ms * 5 : ms) // 3 s → 60 s ist eine Zwanzigstel-Last; abschalten hätte diese Felder einfrieren lassen. const langsamWennStrom = (ms: number) => () => (sseVerbunden() ? 60_000 : ms) -// Auftragsbuch: Vorschlags-Inbox (Branches + Skill-Kandidaten). Pollt, damit laufende -// Annahme-Läufe (Status aus der JSON-Datei des Runners) live sichtbar werden. -export const useAuftragsbuch = (refetchInterval: number = TAKT.schnell) => - useQuery({ - queryKey: qk.auftragsbuch, - queryFn: () => api("/api/auftragsbuch"), - refetchInterval: relax(refetchInterval), - }) - // Ideen-Queue (natives Hermes-Kanban): das Backend cached ~15 s, öfter pollen lohnt nicht. export const useIdeen = (refetchInterval: number = TAKT.gemuetlich) => useQuery({ diff --git a/frontend/src/nav.ts b/frontend/src/nav.ts index 8d132a2..6c084ea 100644 --- a/frontend/src/nav.ts +++ b/frontend/src/nav.ts @@ -1,7 +1,6 @@ import { LayoutDashboard, Boxes, - Inbox, History, Library, Plug, @@ -12,7 +11,7 @@ import { type LucideIcon, } from "lucide-react" -export type ViewId = "dashboard" | "ideen" | "auftraege" | "skills" | "models" | "wissen" | "chronik" | "connect" | "agent" | "konsole" | "guide" +export type ViewId = "dashboard" | "ideen" | "skills" | "models" | "wissen" | "chronik" | "connect" | "agent" | "konsole" | "guide" export type NavGroup = "Operativ" | "Wissen" | "Werkzeuge" | "Wartung" @@ -35,7 +34,6 @@ export const NAV: NavItem[] = [ // Hinweis bewusst kurz: die App zeigt ihn oben in Großbuchstaben, direkt über der // Seitenüberschrift „Ideen" — ein langer Satz stand dort dreifach gedoppelt. { id: "ideen", pfad: "/ideen", label: "Ideen", hint: "Schreib hin, was entstehen soll", icon: Lightbulb, group: "Operativ" }, - { id: "auftraege", pfad: "/auftraege", label: "Auftragsbuch", hint: "Vorschläge der Box — annehmen oder ablehnen", icon: Inbox, group: "Operativ" }, { id: "skills", pfad: "/skills", label: "Skills & Jobs", hint: "Autonome Skills manuell auslösen", icon: Bot, group: "Operativ" }, { id: "chronik", pfad: "/chronik", label: "Chronik", hint: "Was die Box von allein getan hat + Zeitmaschine", icon: History, group: "Operativ" }, { id: "wissen", pfad: "/wissen", label: "Wissen", hint: "Lucys Wissens-Vault (Traum-Notizen)", icon: Library, group: "Wissen" }, diff --git a/frontend/src/views/AuftragsbuchView.tsx b/frontend/src/views/AuftragsbuchView.tsx deleted file mode 100644 index 90bf0d3..0000000 --- a/frontend/src/views/AuftragsbuchView.tsx +++ /dev/null @@ -1,425 +0,0 @@ -import { useState } from "react" -import { - Inbox, Check, X, GitBranch, FileDiff, Loader2, AlertTriangle, Sparkles, - ChevronDown, ChevronRight, Clock, Hammer, RefreshCw, Lightbulb, ArrowRight, -} from "lucide-react" -import { useNavigate } from "@tanstack/react-router" -import { api, type AuftragItem, type SkillKandidat } from "@/lib/api" -import { useAuftragsbuch, useIdeen, useQueryClient, qk } from "@/lib/queries" -import { useDialog } from "@/lib/useDialog" -import { cn } from "@/lib/utils" -import { fmtWhen } from "@/lib/format" -import { SectionLabel } from "@/components/ui/SectionLabel" - -// Auftragsbuch = die Vorschlags-Inbox der Box. Werkstatt/Orchestrator liefern propose-only- -// Branches, der Traum liefert Skill-Kandidaten — hier fällt die Entscheidung per Klick. -// Annehmen (Branch) = Merge→Push→Deploy→Health mit Auto-Rollback; alles detached auf der Box. - -const KIND_LABEL: Record = { - wartung: "Werkstatt", - orchestrator: "Orchestrator", - doku: "Doku", - feature: "Feature", -} - -const STATE_UI: Record = { - laeuft: { label: "wird eingespielt …", cls: "text-sky-300 border-sky-500/40 bg-sky-500/10", spin: true }, - rollback: { label: "Rollback läuft …", cls: "text-amber-300 border-amber-500/40 bg-amber-500/10", spin: true }, - eingespielt: { label: "eingespielt ✓", cls: "text-emerald-300 border-emerald-500/40 bg-emerald-500/10" }, - fehlgeschlagen: { label: "fehlgeschlagen", cls: "text-red-300 border-red-500/40 bg-red-500/10" }, - zurueckgerollt: { label: "zurückgerollt", cls: "text-amber-300 border-amber-500/40 bg-amber-500/10" }, - kritisch: { label: "KRITISCH — Box prüfen", cls: "text-red-200 border-red-500/60 bg-red-500/20" }, - abgelehnt: { label: "abgelehnt", cls: "text-muted-foreground border-border/60 bg-background/30" }, -} - - -export function AuftragsbuchView() { - const navigate = useNavigate() - const { data, isLoading, refetch, isFetching } = useAuftragsbuch() - // Geteilter Cache mit der IdeenSection — hier nur fürs ehrliche "Nichts zu entscheiden"- - // Banner (eine hängende Karte direkt darunter widerspräche dem grünen Häkchen). - const { data: ideenData } = useIdeen() - const qc = useQueryClient() - const { showAlert, showConfirm, dialogElement } = useDialog() - const [busy, setBusy] = useState>({}) - - const reload = () => qc.invalidateQueries({ queryKey: qk.auftragsbuch }) - - async function act(key: string, path: string, body: object, done?: string) { - setBusy((b) => ({ ...b, [key]: true })) - try { - await api(path, { method: "POST", body: JSON.stringify(body) }) - if (done) showAlert("Erledigt", done) - reload() - } catch (e: any) { - showAlert("Das hat nicht geklappt", String(e?.message || e)) - } finally { - setBusy((b) => ({ ...b, [key]: false })) - } - } - - const items = data?.items ?? [] - const kandidaten = data?.skill_kandidaten ?? [] - // Hängende Ideen leben seit 25.07. auf der eigenen Ideen-Seite. Das grüne „Nichts zu - // entscheiden" darf trotzdem nicht behaupten, alles sei erledigt — es zeigt jetzt einen - // Querverweis statt die Karte selbst (vorher stand sie direkt darunter). - const blockedIdeen = ideenData?.available ? ideenData.items.filter((i) => i.status === "blocked").length : 0 - const empty = items.length === 0 && kandidaten.length === 0 - - return ( -
-
-
-

- Auftragsbuch -

-

- Was die Box gebaut oder sich ausgedacht hat — du entscheidest. Annehmen spielt es mit Fangnetz ein (Health-Check, automatischer Rollback). -

-
- -
- - {data && !data.available && ( -
- Das Auftragsbuch lebt auf der Box (liest die Gitea-Branches dort). Im lokalen Dev-Modus ist hier nichts zu sehen. -
- )} - - {isLoading && ( -
- Vorschläge werden geladen … -
- )} - - {data?.available && empty && ( -
- -
-

Nichts zu entscheiden

-

Keine offenen Vorschläge. Werkstatt, Orchestrator und Traum melden sich hier, sobald es etwas gibt.

-
-
- )} - - {blockedIdeen > 0 && ( - - )} - - {items.length > 0 && ( -
- Patch-Vorschläge ({items.length}) - {items.map((it) => ( - - ))} -
- )} - - {kandidaten.length > 0 && ( -
- Skill-Kandidaten aus dem Traum ({kandidaten.length}) - {kandidaten.map((k) => ( - - ))} -
- )} - - {dialogElement} -
- ) -} - - -function StateBadge({ item }: { item: AuftragItem }) { - const st = item.status - if (!st) return null - const ui = STATE_UI[st.state] - if (!ui) return null - return ( - - {ui.spin && } - {ui.label} - - ) -} - -function CIAmpelBadge({ item }: { item: AuftragItem }) { - const ci = item.ci_status - if (!ci) return null - - if (ci === "success") { - return CI Grün - } - if (ci === "failure") { - return CI Rot - } - if (ci === "pending") { - return CI Läuft - } - return null -} - -function ProposalCard({ - item, busy, onAct, showConfirm, -}: { - item: AuftragItem - busy: Record - onAct: (key: string, path: string, body: object, done?: string) => void - showConfirm: (title: string, msg: string, ok: () => void) => void -}) { - const [open, setOpen] = useState(false) - const [diff, setDiff] = useState(null) - const [diffLoading, setDiffLoading] = useState(false) - // Ablehnen mit Grund: der Grund ist das Lern-Gedächtnis des Kreislaufs (Radar/Specifier - // bekommen ihn als „nie wieder vorschlagen"-Material) — deshalb ein kleines Inline-Feld. - const [rejecting, setRejecting] = useState(false) - const [grund, setGrund] = useState("") - const running = item.status?.state === "laeuft" || item.status?.state === "rollback" - const decided = item.status?.state === "eingespielt" - // Lucy-Karten (Desktop-App): Annehmen baut am PC (dist) statt auf der Box zu deployen. - const repo = item.repo ?? "mc2" - const isLucy = repo === "lucy" - const k = `${repo}:${item.branch}` - - async function loadDiff() { - const next = !open - setOpen(next) - if (next && diff === null) { - setDiffLoading(true) - try { - const r = await api<{ diff: string; truncated: boolean }>(`/api/auftragsbuch/diff?branch=${encodeURIComponent(item.branch)}&repo=${repo}`) - setDiff(r.diff + (r.truncated ? "\n… (gekürzt)" : "")) - } catch (e: any) { - setDiff(`(Diff nicht ladbar: ${e?.message || e})`) - } finally { - setDiffLoading(false) - } - } - } - - return ( -
-
-
-
- - {KIND_LABEL[item.kind] ?? item.kind} - - {isLucy && ( - - Lucy - - )} - {item.branch} - {fmtWhen(item.ts)} - - -
-

{item.subject || "(ohne Titel)"}

- {item.body &&

{item.body}

} - {item.empfehlung && ( -

- - Empfehlung: {item.empfehlung.empfehlung === "ANNEHMEN" ? "Annehmen" : item.empfehlung.empfehlung === "ABLEHNEN" ? "Ablehnen" : "Unklar"}. {item.empfehlung.satz} -

- )} -
- - {!running && !decided && ( -
- {!item.verwaist && ( - - )} - -
- )} -
- - {rejecting && !running && !decided && ( -
-

- Der Branch '{item.branch}' wird auf Gitea gelöscht (die Arbeit bleibt in der Historie). - Sag der Box kurz warum — dann schlägt sie dir so etwas nicht wieder vor. -

- setGrund(e.target.value)} - placeholder={"Grund (optional) — z. B. „gibt es schon“ oder „will ich nicht“"} - maxLength={400} - className="w-full rounded-lg border border-border/60 bg-background/60 px-2.5 py-1.5 text-xs text-foreground placeholder:text-muted-foreground/50 focus:border-red-400/50 focus:outline-none" - /> -
- - -
-
- )} - - {item.status && (running || !decided) && item.status.detail && ( -

{item.status.detail}

- )} - - {item.verwaist && ( -

- Kaputt aufgesetzt: Dieser Branch hat keinen gemeinsamen Ursprung mit main (der Werkstatt-Worker - hat nicht richtig geklont) — Annehmen ist technisch unmöglich, deshalb fehlt der Knopf. - Am besten ablehnen mit Grund; die Idee kann danach frisch in die Queue. -

- )} - -
- {item.ahead} Commit{item.ahead === 1 ? "" : "s"} - {item.shortstat && {item.shortstat.trim()}} - {item.verwaist && ( - - kein gemeinsamer Ursprung - - )} - {item.leer && ( - - Diff leer — bringt nichts - - )} - {item.behind > 0 && !item.verwaist && ( - - {item.behind} hinter main - - )} - {item.frontend_ohne_build && ( - - Frontend ohne Build - - )} -
- -
- - {open && ( -
-
- {item.files.map((f) => ( - - {f.status} {f.path} - - ))} - {item.files_truncated && } -
-
- {diffLoading - ? Diff wird geladen … - :
{
-                    (diff ?? "").split("\n").map((ln, i) => (
-                      {ln || " "}
-                    ))
-                  }
} -
-
- )} -
-
- ) -} - -function KandidatCard({ - k, busy, onAct, showConfirm, -}: { - k: SkillKandidat - busy: Record - onAct: (key: string, path: string, body: object, done?: string) => void - showConfirm: (title: string, msg: string, ok: () => void) => void -}) { - const [open, setOpen] = useState(false) - return ( -
-
-
-
- Traum-Idee - {k.file} - {fmtWhen(k.mtime)} -
-

{k.title}

-
-
- - -
-
- - {open && ( -
{k.preview}
- )} -
- ) -} diff --git a/frontend/src/views/GuideView.tsx b/frontend/src/views/GuideView.tsx index e69b3dc..7dcc926 100644 --- a/frontend/src/views/GuideView.tsx +++ b/frontend/src/views/GuideView.tsx @@ -168,9 +168,9 @@ export function GuideView() { Hermes Desktop für richtige Projekte und Telegram für unterwegs. In der Box denken die Modelle, das Gedächtnis lernt automatisch mit — und nachts arbeitet sie allein: Sie träumt, inventarisiert sich selbst, - entwickelt Ideen zu fertigen Vorschlägen und legt sie dir als Karten ins Auftragsbuch. - Nichts geht live ohne deinen Klick — und wenn nach einer Annahme - etwas rot wird, baut die Box es selbst zurück. + entwickelt Ideen zu Konzepten. Gebaut wird am PC in der IDE, jede Änderung geht als Branch nach Gitea. + Nichts geht live ohne deinen Merge — die Ampel-CI muss grün sein, + danach spielt deploy.sh den Stand ein.

@@ -379,8 +379,8 @@ description: Treibt Entwicklung mit strikter TDD-Praxis Reden tust du mit ihm über Hermes Desktop (am PC, remote via /hermes-ui), die Konsole (Box-Shell im Browser), Telegram — oder per Stimme über Lucy. Er hat MCP-Server für Gedächtnis, Stack-Steuerung, Web-Fetch und - PC-Steuerung (Executor auf deinem Windows-PC). Nachts betreibt er Werkstatt & - Radar-Crons — alles Gebaute landet als Karte im Auftragsbuch. + PC-Steuerung (Executor auf deinem Windows-PC). Nachts betreibt er Radar-Crons + und meldet Funde in Chronik, Briefkasten und Telegram. Status & Verdrahtung im Hermes-Tab. @@ -445,7 +445,7 @@ description: Treibt Entwicklung mit strikter TDD-Praxis
  • Backup: PBS-Backup-Zentrum (Sicherung auf den Proxmox-Server) + tägliche Tarball-Sicherung; Restore echt durchgespielt (restore.sh, Doku in docs/BACKUP.md).
  • Updates: git-basierter Update-Check; Update-Buttons mit anschließendem Gehirn-Check (rot, falls ein Update das Gedächtnis zerschießt).
  • -
  • Annahme-Sicherheit: jede Auftragsbuch-Annahme läuft mit Health-Check — wird's rot, baut die Box automatisch zurück (Auto-Revert).
  • +
  • Deploy-Sicherheit: deploy.sh sichert vorher und prüft danach die Gesundheit; die Zeitmaschine in der Chronik ist der Rückweg.
  • Dienste & Gefahrenzone: Restart/Logs pro Dienst, kritische Eingriffe getrennt.

Erreichbar über das System-Icon → Tab „Wartung".

diff --git a/frontend/src/views/cockpit/CockpitView.tsx b/frontend/src/views/cockpit/CockpitView.tsx index cb52707..9bac094 100644 --- a/frontend/src/views/cockpit/CockpitView.tsx +++ b/frontend/src/views/cockpit/CockpitView.tsx @@ -2,13 +2,13 @@ import { useState } from "react" import { Boxes, Server, ShieldAlert, Plug, HeartPulse, AlertTriangle, Loader2, Wrench, Check, HardDrive, ChevronRight, - Inbox, HelpCircle, + Lightbulb, HelpCircle, } from "lucide-react" import { useNavigate } from "@tanstack/react-router" import { api } from "@/lib/api" import { useModels, useServices, useUpdates, useAgentStatus, useConnectHealth, - useAuftragsbuch, useIdeen, useQueryClient, qk, + useIdeen, useQueryClient, qk, } from "@/lib/queries" import { useLucyHealth, type Repair } from "@/lib/useLucyHealth" import { useDialog } from "@/lib/useDialog" @@ -37,7 +37,6 @@ export function CockpitView({ onNavigate }: { onNavigate: (v: string) => void }) const { data: updates } = useUpdates() const { data: agent } = useAgentStatus() const { data: connect } = useConnectHealth() - const { data: auftraege } = useAuftragsbuch() const { data: ideen } = useIdeen() const health = useLucyHealth() @@ -75,9 +74,8 @@ export function CockpitView({ onNavigate }: { onNavigate: (v: string) => void }) const pendingCount = (updates ? (updates.os > 0 ? 1 : 0) + (updates.engine > 0 ? 1 : 0) + (updates.swap > 0 ? 1 : 0) + (updates.models > 0 ? 1 : 0) : 0) + (updates?.components?.filter((c) => c.update === true).length ?? 0) - const openAuftraege = auftraege?.available ? auftraege.open_count : 0 - // Hängende Karten warten auf DEINE Antwort — bisher sah das Cockpit sie gar nicht - // („Nichts zu tun" trotz roter Karte im Auftragsbuch, Review 15.07.). + // Hängende Ideen warten auf DEINE Antwort — das Cockpit muss sie zeigen (Review 15.07.). + const openIdeen = ideen?.available ? ideen.items.filter((i) => i.status !== "done").length : 0 const blockedIdeen = ideen?.available ? ideen.items.filter((i) => i.status === "blocked").length : 0 // Verbinden: die drei Leitungen (Modell-Gateway · Gedächtnis · Desktop-Gateway). @@ -136,13 +134,13 @@ export function CockpitView({ onNavigate }: { onNavigate: (v: string) => void }) Bereiche
0 || openAuftraege > 0 ? "warn" : "ok"} + icon={Lightbulb} title="Ideen" value={ideen?.available ? openIdeen : "—"} + unit="offen" + tone={!ideen ? "loading" : blockedIdeen > 0 ? "warn" : "ok"} hint={blockedIdeen > 0 - ? `${blockedIdeen} Karte${blockedIdeen === 1 ? "" : "n"} wartet auf deine Antwort` - : openAuftraege > 0 ? `${openAuftraege} offene Patches` : "Keine ausstehenden Vorschläge"} - onClick={() => onNavigate("auftraege")} + ? `${blockedIdeen} Idee${blockedIdeen === 1 ? "" : "n"} wartet auf deine Antwort` + : openIdeen > 0 ? `${openIdeen} in Arbeit oder wartend` : "Nichts offen"} + onClick={() => onNavigate("ideen")} /> void }) ["problems"] pendingCount: number - openAuftraege: number blockedIdeen: number busy: Record onRepair: (id: string, r: Repair) => void @@ -272,9 +268,8 @@ function NeedsYou({ }) { const openDrawer = useSchublade() const hasUpdates = pendingCount > 0 - const hasAuftraege = openAuftraege > 0 const hasBlocked = blockedIdeen > 0 - const nothing = problems.length === 0 && !hasUpdates && !hasAuftraege && !hasBlocked + const nothing = problems.length === 0 && !hasUpdates && !hasBlocked return (
@@ -313,7 +308,7 @@ function NeedsYou({ ))} {hasBlocked && ( )} - {hasAuftraege && ( - - )} {hasUpdates && (