diff --git a/backend/routers/models.py b/backend/routers/models.py index 193de3c..cb4a0b6 100644 --- a/backend/routers/models.py +++ b/backend/routers/models.py @@ -5,8 +5,8 @@ from fastapi import APIRouter, HTTPException from pydantic import BaseModel from config import HF_DOWNLOAD_ENV, MODELS_DIR -from services import catalog, discover, hf, jobengine, llamaswap -from services.fit import evaluate_fit, extract_params_b, max_ctx_for +from services import budget, discover, hf, jobengine, llamaswap +from services.fit import evaluate_fit, max_ctx_for router = APIRouter(prefix="/api") @@ -31,19 +31,22 @@ def discover_models(force: bool = False) -> dict: @router.get("/fit") -def fit(params_b: float = 0, quant: str = "Q4_K_M", ctx: int = 8192, name: str = "") -> dict: +def fit(params_b: float = 0, quant: str = "Q4_K_M", ctx: int = 8192, + name: str = "", role: str = "") -> dict: """Hardware-Fit-Vorschau. params_b<=0 → aus KATALOG (echte Metadaten, MoE-bewusst) - oder sonst aus dem Namen geschätzt. So liefert die 'Erweiterte Ansicht' eine - Ampel/t-s-Schätzung für beliebige HF-Repos, bevor heruntergeladen wird.""" + oder sonst aus dem Namen geschätzt. assigned_ctx = der ctx, der TATSÄCHLICH vergeben + würde: SETUP-BEWUSST (neben Hirn/warmem Set), nicht nur gegen den Gesamt-RAM. + So sieht die 'Erweiterte Ansicht' vor dem Download Ampel + echten ctx.""" ram = _ram_gb() - pb = params_b - if pb <= 0: - meta = catalog.meta_for_name(name) if name else None - pb = float(meta["total_params_b"]) if (meta and meta.get("total_params_b")) else extract_params_b(name) + pb = params_b if params_b > 0 else budget.params_b_for(name) + saw = budget.setup_aware_ctx(pb, quant, role=role or None) return { "params_b": round(pb, 1), "fit": evaluate_fit(pb, quant, ctx, ram, name=name), - "optimal_ctx": max_ctx_for(pb, quant, ram), + "optimal_ctx": max_ctx_for(pb, quant, ram), # Roh-Obergrenze (Modell allein) + "assigned_ctx": saw["ctx"], # setup-bewusst vergeben + "budget": {"gtt_gb": saw["gtt_gb"], "reserved_gb": saw["reserved_gb"], + "budget_gb": saw["budget_gb"], "mode": saw["mode"]}, "sys_ram_gb": round(ram, 1), } @@ -108,8 +111,8 @@ def install(req: InstallReq) -> dict: ctx = req.ctx if ctx is None: - ram = _ram_gb() - ctx = max_ctx_for(extract_params_b(repo), req.quant, ram) + # SETUP-BEWUSST: größter ctx, der neben Hirn/warmem Set passt (nicht nur Modell allein). + ctx = budget.setup_aware_ctx(budget.params_b_for(repo), req.quant, role=req.role)["ctx"] # Sofort registrieren (Datei kommt gleich) — robust gegen -watch-config. try: diff --git a/backend/services/agent.py b/backend/services/agent.py index 91d357b..0cffabd 100644 --- a/backend/services/agent.py +++ b/backend/services/agent.py @@ -25,19 +25,6 @@ def _hermes_version(name: str) -> float | None: return float(m.group(1)) if m else None -def _gtt_budget_gb() -> float: - """GPU-adressierbarer Speicher (GTT) in GB — die harte Obergrenze. Liest - amdgpu.gttsize aus /proc/cmdline, sonst RAM minus OS-Reserve.""" - try: - with open("/proc/cmdline") as f: - m = re.search(r"amdgpu\.gttsize=(\d+)", f.read()) - if m: - return round(int(m.group(1)) / 1024.0, 1) - except Exception: - pass - return round(psutil.virtual_memory().total / (1024 ** 3) - 6.0, 1) - - def hermes_brain_info() -> dict: """Aktuelles Agent-Hirn (hermes-Rolle) + bestes verfügbares NousResearch-Hermes-Modell, das auf diese Hardware passt. Für den Modell-Manager: Brain sichtbar + updatebar, @@ -93,42 +80,27 @@ def hermes_brain_info() -> dict: # größte on-demand-Modell daneben lädt? (Brain muss immer resident sein.) budget = None try: - from services.fit import QUANT_BYTES_PER_PARAM, estimate_memory_gb + from services.budget import footprint_gb, gtt_budget_gb + from services.fit import estimate_memory_gb groups = llamaswap.list_groups() persist = set() for g in groups.values(): if isinstance(g, dict) and g.get("persist"): persist.update(g.get("members") or []) - def _foot(m: dict) -> float: - """Loaded-Footprint = Gewichte + kalibrierter KV-Anteil. Params robust aus dem - MAXIMUM von Namens-Schätzung und Dateigröße (deckt beides ab: 'Coder-Next' ohne - Größe im Namen → aus Datei; Split-GGUFs wie heavy → aus Namen, da size_bytes nur - den ersten Teil zählt).""" - caps = m.get("capabilities") or {} - quant = m.get("quant") or "Q4_K_M" - ctx = int(m.get("ctx") or 32768) - bpp = QUANT_BYTES_PER_PARAM.get(quant.upper(), 0.55) - size_gb = (m.get("size_bytes") or 0) / (1024 ** 3) - pb_size = (size_gb / bpp) if size_gb > 1.0 else 0.0 # Split-Teil → ignoriert - pb = max(float(caps.get("params_b") or 0), pb_size, 7.0) - weights = max(pb * bpp, size_gb) - kv = estimate_memory_gb(pb, quant, ctx) - pb * bpp - return weights + max(kv, 0.0) - cur_name = cur["name"] if cur else None brain_ctx = int((cur.get("ctx") if cur else None) or 32768) if best: brain_gb = estimate_memory_gb(float(best["params_b"]), "Q4_K_M", brain_ctx) elif cur: - brain_gb = _foot(cur) + brain_gb = footprint_gb(cur) else: brain_gb = 0.0 # voller Always-Warm-Footprint (alle persist, Brain=Empfehlung) — nur Info - warm = brain_gb + sum(_foot(m) for m in models + warm = brain_gb + sum(footprint_gb(m) for m in models if m["name"] in persist and m["name"] != cur_name) - largest_od = max((_foot(m) for m in models if m["name"] not in persist), default=0.0) - gtt = _gtt_budget_gb() + largest_od = max((footprint_gb(m) for m in models if m["name"] not in persist), default=0.0) + gtt = gtt_budget_gb() # Brain muss immer resident sein → passt Brain + größtes on-demand zusammen? # (fast/vision dürfen beim Laden eines großen Modells verdrängt werden.) budget = { diff --git a/backend/services/budget.py b/backend/services/budget.py new file mode 100644 index 0000000..eff4b26 --- /dev/null +++ b/backend/services/budget.py @@ -0,0 +1,124 @@ +""" +Speicher-Budget & SETUP-BEWUSSTE ctx-Vergabe — EINE Quelle der Wahrheit. + +Modelliert die auf der Box VERIFIZIERTE Residenz-Realität (llama-swap, Ein-Gruppen- +Residenz, GTT ~124 GB): + • Das Agent-Hirn (Rolle `hermes`) ist IMMER resident. + • Weitere persist-Mitglieder (fast/vision) dürfen verdrängt werden, wenn ein großes + on-demand-Modell lädt. +Daraus folgt, wie viel Speicher NEBEN einem Zielmodell reserviert bleiben muss — +und damit der größte Kontext, der wirklich passt (nicht nur für das Modell allein). + +Vorher rechnete nur der Hirn-Wechsel (agent.py) setup-bewusst; die allgemeine +ctx-Vergabe nahm den Gesamt-RAM in Isolation. Dieses Modul vereint beides. +""" + +import re + +import psutil + +from services.fit import ( + QUANT_BYTES_PER_PARAM, + estimate_memory_gb, + extract_params_b, + max_ctx_in_budget, +) + +HEADROOM_GB = 4.0 # OS/Treiber/Fragmentierung + + +def gtt_budget_gb() -> float: + """GPU-adressierbarer Speicher (GTT) in GB — die harte Obergrenze. Liest + amdgpu.gttsize aus /proc/cmdline, sonst RAM minus OS-Reserve.""" + try: + with open("/proc/cmdline") as f: + m = re.search(r"amdgpu\.gttsize=(\d+)", f.read()) + if m: + return round(int(m.group(1)) / 1024.0, 1) + except Exception: + pass + return round(psutil.virtual_memory().total / (1024 ** 3) - 6.0, 1) + + +def footprint_gb(model: dict) -> float: + """Loaded-Footprint eines Modells = Gewichte + kalibrierter KV-Anteil. Params robust + aus dem MAXIMUM von Namens-Schätzung und Dateigröße (deckt 'Coder-Next' ohne Größe im + Namen sowie Split-GGUFs ab, deren size_bytes nur den ersten Teil zählt).""" + caps = model.get("capabilities") or {} + quant = model.get("quant") or "Q4_K_M" + ctx = int(model.get("ctx") or 32768) + bpp = QUANT_BYTES_PER_PARAM.get(quant.upper(), 0.55) + size_gb = (model.get("size_bytes") or 0) / (1024 ** 3) + pb_size = (size_gb / bpp) if size_gb > 1.0 else 0.0 # Split-Teil → ignoriert + pb = max(float(caps.get("params_b") or 0), pb_size, 7.0) + weights = max(pb * bpp, size_gb) + kv = estimate_memory_gb(pb, quant, ctx) - pb * bpp + return weights + max(kv, 0.0) + + +def params_b_for(name: str) -> float: + """Parameter (Mrd.) für einen Modell-/Repo-Namen: KATALOG (echte Metadaten) zuerst, + sonst Namens-Schätzung. Gemeinsam für Fit-Vorschau und ctx-Vergabe.""" + from services import catalog + meta = catalog.meta_for_name(name) if name else None + if meta and meta.get("total_params_b"): + return float(meta["total_params_b"]) + return extract_params_b(name) + + +def _persist_members(groups: dict) -> set: + out: set = set() + for g in (groups or {}).values(): + if isinstance(g, dict) and g.get("persist"): + out.update(g.get("members") or []) + return out + + +def reserved_gb(role: str | None) -> dict: + """Speicher, der NEBEN einem Zielmodell der gegebenen Rolle resident bleiben muss — + gemäß verifizierter Box-Residenz. Liest die aktuelle llama-swap-Config, passt sich + also der echten Gruppen-/persist-Konfiguration an (nicht hartkodiert). + + - Rolle `hermes` (das Hirn): muss mit dem GRÖSSTEN on-demand-Modell koexistieren. + - Rolle, deren aktueller Träger im warmen (persist) Set liegt (z.B. fast/vision): + koexistiert mit Hirn + den ÜBRIGEN warmen Mitgliedern. + - sonst (heavy/coder/scout/keine): on-demand → verdrängt fast/vision, nur das Hirn bleibt. + """ + from services import llamaswap + models = llamaswap.list_models() + groups = llamaswap.list_groups() + persist = _persist_members(groups) + brain = next((m for m in models if (m.get("role") == "hermes")), None) + brain_name = brain["name"] if brain else None + brain_gb = footprint_gb(brain) if brain else 0.0 + role = (role or "").strip().lower() + + if role == "hermes": + reserved = max((footprint_gb(m) for m in models if m["name"] not in persist), + default=0.0) + return {"reserved_gb": reserved, "mode": "brain", "brain_gb": brain_gb} + + holder = next((m for m in models if (m.get("role") == role)), None) if role else None + warm = bool(holder and holder["name"] in persist) + if warm: + others = sum(footprint_gb(m) for m in models + if m["name"] in persist and m["name"] not in {brain_name, holder["name"]}) + return {"reserved_gb": brain_gb + others, "mode": "warm", "brain_gb": brain_gb} + + return {"reserved_gb": brain_gb, "mode": "ondemand", "brain_gb": brain_gb} + + +def setup_aware_ctx(params_b: float, quant: str, role: str | None = None) -> dict: + """Größter Kontext, der für ein Modell (params_b/quant) der gegebenen Rolle NEBEN dem + bestehenden Setup passt. Gibt ctx + die Budget-Herleitung zurück (für UI/Transparenz).""" + gtt = gtt_budget_gb() + r = reserved_gb(role) + budget = max(gtt - r["reserved_gb"] - HEADROOM_GB, 0.0) + ctx = max_ctx_in_budget(params_b, quant, budget) + return { + "ctx": ctx, + "gtt_gb": gtt, + "reserved_gb": round(r["reserved_gb"], 1), + "budget_gb": round(budget, 1), + "mode": r["mode"], + } diff --git a/backend/services/fit.py b/backend/services/fit.py index ba388ab..8ddd44a 100644 --- a/backend/services/fit.py +++ b/backend/services/fit.py @@ -72,12 +72,13 @@ def extract_params_b(name: str) -> float: _NICE_CTX = [2048, 4096, 8192, 16384, 32768, 49152, 65536, 98304, 131072] -def max_ctx_for(params_b: float, quant: str, sys_ram_gb: float) -> int: - """Größter 'schöner' Kontext, der komfortabel passt (80 % des nutzbaren RAM).""" +def max_ctx_in_budget(params_b: float, quant: str, budget_gb: float) -> int: + """Größter 'schöner' Kontext, dessen Gewichte + KV in budget_gb passen. + Budget-basierter Kern → wird von der setup-bewussten ctx-Vergabe + (services.budget) mit dem ECHTEN freien Budget gefüttert.""" bpp = QUANT_BYTES_PER_PARAM.get(quant.upper(), 0.65) weights = params_b * bpp - usable = max(sys_ram_gb - 4.0, 0) * 0.8 - ctx_budget = usable - weights + ctx_budget = budget_gb - weights if ctx_budget <= 0: return 2048 per_8k = (max(params_b, 7) / 7) * 0.8 @@ -89,6 +90,13 @@ def max_ctx_for(params_b: float, quant: str, sys_ram_gb: float) -> int: return best +def max_ctx_for(params_b: float, quant: str, sys_ram_gb: float) -> int: + """Roh-Obergrenze: größter Kontext für dieses Modell ALLEIN gegen den + Gesamt-RAM (80 % nutzbar). Ignoriert bewusst das übrige Setup — + setup-bewusst rechnet services.budget.setup_aware_ctx.""" + return max_ctx_in_budget(params_b, quant, max(sys_ram_gb - 4.0, 0) * 0.8) + + def recommend_ctx(params_b: float, quant: str, sys_ram_gb: float) -> dict: ctx = max_ctx_for(params_b, quant, sys_ram_gb) k = ctx // 1024 diff --git a/frontend/dist/assets/index-CXYyTK29.js b/frontend/dist/assets/index-CXYyTK29.js deleted file mode 100644 index 0e24b05..0000000 --- a/frontend/dist/assets/index-CXYyTK29.js +++ /dev/null @@ -1,397 +0,0 @@ -var cp=s=>{throw TypeError(s)};var jd=(s,o,a)=>o.has(s)||cp("Cannot "+a);var N=(s,o,a)=>(jd(s,o,"read from private field"),a?a.call(s):o.get(s)),be=(s,o,a)=>o.has(s)?cp("Cannot add the same private member more than once"):o instanceof WeakSet?o.add(s):o.set(s,a),oe=(s,o,a,d)=>(jd(s,o,"write to private field"),d?d.call(s,a):o.set(s,a),a),Me=(s,o,a)=>(jd(s,o,"access private method"),a);var ma=(s,o,a,d)=>({set _(u){oe(s,o,u,a)},get _(){return N(s,o,d)}});function jg(s,o){for(var a=0;ad[u]})}}}return Object.freeze(Object.defineProperty(s,Symbol.toStringTag,{value:"Module"}))}(function(){const o=document.createElement("link").relList;if(o&&o.supports&&o.supports("modulepreload"))return;for(const u of document.querySelectorAll('link[rel="modulepreload"]'))d(u);new MutationObserver(u=>{for(const f of u)if(f.type==="childList")for(const h of f.addedNodes)h.tagName==="LINK"&&h.rel==="modulepreload"&&d(h)}).observe(document,{childList:!0,subtree:!0});function a(u){const f={};return u.integrity&&(f.integrity=u.integrity),u.referrerPolicy&&(f.referrerPolicy=u.referrerPolicy),u.crossOrigin==="use-credentials"?f.credentials="include":u.crossOrigin==="anonymous"?f.credentials="omit":f.credentials="same-origin",f}function d(u){if(u.ep)return;u.ep=!0;const f=a(u);fetch(u.href,f)}})();function pm(s){return s&&s.__esModule&&Object.prototype.hasOwnProperty.call(s,"default")?s.default:s}var kd={exports:{}},To={},Nd={exports:{}},Ee={};/** - * @license React - * react.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var up;function kg(){if(up)return Ee;up=1;var s=Symbol.for("react.element"),o=Symbol.for("react.portal"),a=Symbol.for("react.fragment"),d=Symbol.for("react.strict_mode"),u=Symbol.for("react.profiler"),f=Symbol.for("react.provider"),h=Symbol.for("react.context"),p=Symbol.for("react.forward_ref"),v=Symbol.for("react.suspense"),x=Symbol.for("react.memo"),b=Symbol.for("react.lazy"),w=Symbol.iterator;function P(M){return M===null||typeof M!="object"?null:(M=w&&M[w]||M["@@iterator"],typeof M=="function"?M:null)}var R={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},D=Object.assign,E={};function k(M,S,Z){this.props=M,this.context=S,this.refs=E,this.updater=Z||R}k.prototype.isReactComponent={},k.prototype.setState=function(M,S){if(typeof M!="object"&&typeof M!="function"&&M!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,M,S,"setState")},k.prototype.forceUpdate=function(M){this.updater.enqueueForceUpdate(this,M,"forceUpdate")};function C(){}C.prototype=k.prototype;function I(M,S,Z){this.props=M,this.context=S,this.refs=E,this.updater=Z||R}var B=I.prototype=new C;B.constructor=I,D(B,k.prototype),B.isPureReactComponent=!0;var z=Array.isArray,$=Object.prototype.hasOwnProperty,L={current:null},H={key:!0,ref:!0,__self:!0,__source:!0};function re(M,S,Z){var ee,W={},ie=null,pe=null;if(S!=null)for(ee in S.ref!==void 0&&(pe=S.ref),S.key!==void 0&&(ie=""+S.key),S)$.call(S,ee)&&!H.hasOwnProperty(ee)&&(W[ee]=S[ee]);var we=arguments.length-2;if(we===1)W.children=Z;else if(1>>1,S=Y[M];if(0>>1;Mu(W,J))ieu(pe,W)?(Y[M]=pe,Y[ie]=J,M=ie):(Y[M]=W,Y[ee]=J,M=ee);else if(ieu(pe,J))Y[M]=pe,Y[ie]=J,M=ie;else break e}}return ce}function u(Y,ce){var J=Y.sortIndex-ce.sortIndex;return J!==0?J:Y.id-ce.id}if(typeof performance=="object"&&typeof performance.now=="function"){var f=performance;s.unstable_now=function(){return f.now()}}else{var h=Date,p=h.now();s.unstable_now=function(){return h.now()-p}}var v=[],x=[],b=1,w=null,P=3,R=!1,D=!1,E=!1,k=typeof setTimeout=="function"?setTimeout:null,C=typeof clearTimeout=="function"?clearTimeout:null,I=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function B(Y){for(var ce=a(x);ce!==null;){if(ce.callback===null)d(x);else if(ce.startTime<=Y)d(x),ce.sortIndex=ce.expirationTime,o(v,ce);else break;ce=a(x)}}function z(Y){if(E=!1,B(Y),!D)if(a(v)!==null)D=!0,Te($);else{var ce=a(x);ce!==null&&_e(z,ce.startTime-Y)}}function $(Y,ce){D=!1,E&&(E=!1,C(re),re=-1),R=!0;var J=P;try{for(B(ce),w=a(v);w!==null&&(!(w.expirationTime>ce)||Y&&!Q());){var M=w.callback;if(typeof M=="function"){w.callback=null,P=w.priorityLevel;var S=M(w.expirationTime<=ce);ce=s.unstable_now(),typeof S=="function"?w.callback=S:w===a(v)&&d(v),B(ce)}else d(v);w=a(v)}if(w!==null)var Z=!0;else{var ee=a(x);ee!==null&&_e(z,ee.startTime-ce),Z=!1}return Z}finally{w=null,P=J,R=!1}}var L=!1,H=null,re=-1,le=5,he=-1;function Q(){return!(s.unstable_now()-heY||125M?(Y.sortIndex=J,o(x,Y),a(v)===null&&Y===a(x)&&(E?(C(re),re=-1):E=!0,_e(z,J-M))):(Y.sortIndex=S,o(v,Y),D||R||(D=!0,Te($))),Y},s.unstable_shouldYield=Q,s.unstable_wrapCallback=function(Y){var ce=P;return function(){var J=P;P=ce;try{return Y.apply(this,arguments)}finally{P=J}}}})(Ed)),Ed}var xp;function Eg(){return xp||(xp=1,Cd.exports=Cg()),Cd.exports}/** - * @license React - * react-dom.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var gp;function _g(){if(gp)return jt;gp=1;var s=fc(),o=Eg();function a(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),v=Object.prototype.hasOwnProperty,x=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,b={},w={};function P(e){return v.call(w,e)?!0:v.call(b,e)?!1:x.test(e)?w[e]=!0:(b[e]=!0,!1)}function R(e,t,n,l){if(n!==null&&n.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return l?!1:n!==null?!n.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function D(e,t,n,l){if(t===null||typeof t>"u"||R(e,t,n,l))return!0;if(l)return!1;if(n!==null)switch(n.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function E(e,t,n,l,i,c,m){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=l,this.attributeNamespace=i,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=c,this.removeEmptyString=m}var k={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){k[e]=new E(e,0,!1,e,null,!1,!1)}),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];k[t]=new E(t,1,!1,e[1],null,!1,!1)}),["contentEditable","draggable","spellCheck","value"].forEach(function(e){k[e]=new E(e,2,!1,e.toLowerCase(),null,!1,!1)}),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){k[e]=new E(e,2,!1,e,null,!1,!1)}),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){k[e]=new E(e,3,!1,e.toLowerCase(),null,!1,!1)}),["checked","multiple","muted","selected"].forEach(function(e){k[e]=new E(e,3,!0,e,null,!1,!1)}),["capture","download"].forEach(function(e){k[e]=new E(e,4,!1,e,null,!1,!1)}),["cols","rows","size","span"].forEach(function(e){k[e]=new E(e,6,!1,e,null,!1,!1)}),["rowSpan","start"].forEach(function(e){k[e]=new E(e,5,!1,e.toLowerCase(),null,!1,!1)});var C=/[\-:]([a-z])/g;function I(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(C,I);k[t]=new E(t,1,!1,e,null,!1,!1)}),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(C,I);k[t]=new E(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)}),["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(C,I);k[t]=new E(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)}),["tabIndex","crossOrigin"].forEach(function(e){k[e]=new E(e,1,!1,e.toLowerCase(),null,!1,!1)}),k.xlinkHref=new E("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach(function(e){k[e]=new E(e,1,!1,e.toLowerCase(),null,!0,!0)});function B(e,t,n,l){var i=k.hasOwnProperty(t)?k[t]:null;(i!==null?i.type!==0:l||!(2y||i[m]!==c[y]){var j=` -`+i[m].replace(" at new "," at ");return e.displayName&&j.includes("")&&(j=j.replace("",e.displayName)),j}while(1<=m&&0<=y);break}}}finally{Z=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?S(e):""}function W(e){switch(e.tag){case 5:return S(e.type);case 16:return S("Lazy");case 13:return S("Suspense");case 19:return S("SuspenseList");case 0:case 2:case 15:return e=ee(e.type,!1),e;case 11:return e=ee(e.type.render,!1),e;case 1:return e=ee(e.type,!0),e;default:return""}}function ie(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case H:return"Fragment";case L:return"Portal";case le:return"Profiler";case re:return"StrictMode";case Ne:return"Suspense";case Ce:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case Q:return(e.displayName||"Context")+".Consumer";case he:return(e._context.displayName||"Context")+".Provider";case ne:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case Oe:return t=e.displayName||null,t!==null?t:ie(e.type)||"Memo";case Te:t=e._payload,e=e._init;try{return ie(e(t))}catch{}}return null}function pe(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=t.render,e=e.displayName||e.name||"",t.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return ie(t);case 8:return t===re?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t}return null}function we(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function U(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function ge(e){var t=U(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),l=""+e[t];if(!e.hasOwnProperty(t)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var i=n.get,c=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return i.call(this)},set:function(m){l=""+m,c.call(this,m)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return l},setValue:function(m){l=""+m},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function xt(e){e._valueTracker||(e._valueTracker=ge(e))}function ol(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),l="";return e&&(l=U(e)?e.checked?"true":"false":e.value),e=l,e!==n?(t.setValue(e),!0):!1}function Gn(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function Vs(e,t){var n=t.checked;return J({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n??e._wrapperState.initialChecked})}function ll(e,t){var n=t.defaultValue==null?"":t.defaultValue,l=t.checked!=null?t.checked:t.defaultChecked;n=we(t.value!=null?t.value:n),e._wrapperState={initialChecked:l,initialValue:n,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function Vn(e,t){t=t.checked,t!=null&&B(e,"checked",t,!1)}function un(e,t){Vn(e,t);var n=we(t.value),l=t.type;if(n!=null)l==="number"?(n===0&&e.value===""||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if(l==="submit"||l==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?Wn(e,t.type,n):t.hasOwnProperty("defaultValue")&&Wn(e,t.type,we(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function Ws(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var l=t.type;if(!(l!=="submit"&&l!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}n=e.name,n!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,n!==""&&(e.name=n)}function Wn(e,t,n){(t!=="number"||Gn(e.ownerDocument)!==e)&&(n==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var Nr=Array.isArray;function dr(e,t,n,l){if(e=e.options,t){t={};for(var i=0;i"+t.valueOf().toString()+"",t=fn.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function Cr(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&n.nodeType===3){n.nodeValue=t;return}}e.textContent=t}var Er={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},O=["Webkit","ms","Moz","O"];Object.keys(Er).forEach(function(e){O.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),Er[t]=Er[e]})});function te(e,t,n){return t==null||typeof t=="boolean"||t===""?"":n||typeof t!="number"||t===0||Er.hasOwnProperty(e)&&Er[e]?(""+t).trim():t+"px"}function je(e,t){e=e.style;for(var n in t)if(t.hasOwnProperty(n)){var l=n.indexOf("--")===0,i=te(n,t[n],l);n==="float"&&(n="cssFloat"),l?e.setProperty(n,i):e[n]=i}}var Ae=J({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function Be(e,t){if(t){if(Ae[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(a(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(a(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(a(61))}if(t.style!=null&&typeof t.style!="object")throw Error(a(62))}}function Yt(e,t){if(e.indexOf("-")===-1)return typeof t.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var pn=null;function mn(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var Ys=null,qn=null,Zn=null;function Cc(e){if(e=bo(e)){if(typeof Ys!="function")throw Error(a(280));var t=e.stateNode;t&&(t=Ml(t),Ys(e.stateNode,e.type,t))}}function Ec(e){qn?Zn?Zn.push(e):Zn=[e]:qn=e}function _c(){if(qn){var e=qn,t=Zn;if(Zn=qn=null,Cc(e),t)for(e=0;e>>=0,e===0?32:31-(Fh(e)/Ih|0)|0}var ul=64,fl=4194304;function to(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function pl(e,t){var n=e.pendingLanes;if(n===0)return 0;var l=0,i=e.suspendedLanes,c=e.pingedLanes,m=n&268435455;if(m!==0){var y=m&~i;y!==0?l=to(y):(c&=m,c!==0&&(l=to(c)))}else m=n&~i,m!==0?l=to(m):c!==0&&(l=to(c));if(l===0)return 0;if(t!==0&&t!==l&&(t&i)===0&&(i=l&-l,c=t&-t,i>=c||i===16&&(c&4194240)!==0))return t;if((l&4)!==0&&(l|=n&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=l;0n;n++)t.push(e);return t}function ro(e,t,n){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-Bt(t),e[t]=n}function Hh(e,t){var n=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var l=e.eventTimes;for(e=e.expirationTimes;0=uo),ru=" ",nu=!1;function su(e,t){switch(e){case"keyup":return gx.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function ou(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var Xn=!1;function yx(e,t){switch(e){case"compositionend":return ou(t);case"keypress":return t.which!==32?null:(nu=!0,ru);case"textInput":return e=t.data,e===ru&&nu?null:e;default:return null}}function bx(e,t){if(Xn)return e==="compositionend"||!ri&&su(e,t)?(e=Zc(),vl=Za=Or=null,Xn=!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=l}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=fu(n)}}function mu(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?mu(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function hu(){for(var e=window,t=Gn();t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href=="string"}catch{n=!1}if(n)e=t.contentWindow;else break;t=Gn(e.document)}return t}function oi(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}function Mx(e){var t=hu(),n=e.focusedElem,l=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&mu(n.ownerDocument.documentElement,n)){if(l!==null&&oi(n)){if(t=l.start,e=l.end,e===void 0&&(e=t),"selectionStart"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if(e=(t=n.ownerDocument||document)&&t.defaultView||window,e.getSelection){e=e.getSelection();var i=n.textContent.length,c=Math.min(l.start,i);l=l.end===void 0?c:Math.min(l.end,i),!e.extend&&c>l&&(i=l,l=c,c=i),i=pu(n,c);var m=pu(n,l);i&&m&&(e.rangeCount!==1||e.anchorNode!==i.node||e.anchorOffset!==i.offset||e.focusNode!==m.node||e.focusOffset!==m.offset)&&(t=t.createRange(),t.setStart(i.node,i.offset),e.removeAllRanges(),c>l?(e.addRange(t),e.extend(m.node,m.offset)):(t.setEnd(m.node,m.offset),e.addRange(t)))}}for(t=[],e=n;e=e.parentNode;)e.nodeType===1&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof n.focus=="function"&&n.focus(),n=0;n=document.documentMode,es=null,li=null,ho=null,ai=!1;function xu(e,t,n){var l=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;ai||es==null||es!==Gn(l)||(l=es,"selectionStart"in l&&oi(l)?l={start:l.selectionStart,end:l.selectionEnd}:(l=(l.ownerDocument&&l.ownerDocument.defaultView||window).getSelection(),l={anchorNode:l.anchorNode,anchorOffset:l.anchorOffset,focusNode:l.focusNode,focusOffset:l.focusOffset}),ho&&mo(ho,l)||(ho=l,l=Cl(li,"onSelect"),0os||(e.current=yi[os],yi[os]=null,os--)}function Fe(e,t){os++,yi[os]=e.current,e.current=t}var zr={},it=Tr(zr),gt=Tr(!1),gn=zr;function ls(e,t){var n=e.type.contextTypes;if(!n)return zr;var l=e.stateNode;if(l&&l.__reactInternalMemoizedUnmaskedChildContext===t)return l.__reactInternalMemoizedMaskedChildContext;var i={},c;for(c in n)i[c]=t[c];return l&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=i),i}function vt(e){return e=e.childContextTypes,e!=null}function Pl(){$e(gt),$e(it)}function Ru(e,t,n){if(it.current!==zr)throw Error(a(168));Fe(it,t),Fe(gt,n)}function Ou(e,t,n){var l=e.stateNode;if(t=t.childContextTypes,typeof l.getChildContext!="function")return n;l=l.getChildContext();for(var i in l)if(!(i in t))throw Error(a(108,pe(e)||"Unknown",i));return J({},n,l)}function Rl(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||zr,gn=it.current,Fe(it,e),Fe(gt,gt.current),!0}function Du(e,t,n){var l=e.stateNode;if(!l)throw Error(a(169));n?(e=Ou(e,t,gn),l.__reactInternalMemoizedMergedChildContext=e,$e(gt),$e(it),Fe(it,e)):$e(gt),Fe(gt,n)}var ur=null,Ol=!1,bi=!1;function Au(e){ur===null?ur=[e]:ur.push(e)}function Ux(e){Ol=!0,Au(e)}function Lr(){if(!bi&&ur!==null){bi=!0;var e=0,t=Le;try{var n=ur;for(Le=1;e>=m,i-=m,fr=1<<32-Bt(t)+i|n<ke?(rt=ye,ye=null):rt=ye.sibling;var De=G(A,ye,T[ke],q);if(De===null){ye===null&&(ye=rt);break}e&&ye&&De.alternate===null&&t(A,ye),_=c(De,_,ke),ve===null?fe=De:ve.sibling=De,ve=De,ye=rt}if(ke===T.length)return n(A,ye),He&&yn(A,ke),fe;if(ye===null){for(;keke?(rt=ye,ye=null):rt=ye.sibling;var Wr=G(A,ye,De.value,q);if(Wr===null){ye===null&&(ye=rt);break}e&&ye&&Wr.alternate===null&&t(A,ye),_=c(Wr,_,ke),ve===null?fe=Wr:ve.sibling=Wr,ve=Wr,ye=rt}if(De.done)return n(A,ye),He&&yn(A,ke),fe;if(ye===null){for(;!De.done;ke++,De=T.next())De=K(A,De.value,q),De!==null&&(_=c(De,_,ke),ve===null?fe=De:ve.sibling=De,ve=De);return He&&yn(A,ke),fe}for(ye=l(A,ye);!De.done;ke++,De=T.next())De=se(ye,A,ke,De.value,q),De!==null&&(e&&De.alternate!==null&&ye.delete(De.key===null?ke:De.key),_=c(De,_,ke),ve===null?fe=De:ve.sibling=De,ve=De);return e&&ye.forEach(function(wg){return t(A,wg)}),He&&yn(A,ke),fe}function Ze(A,_,T,q){if(typeof T=="object"&&T!==null&&T.type===H&&T.key===null&&(T=T.props.children),typeof T=="object"&&T!==null){switch(T.$$typeof){case $:e:{for(var fe=T.key,ve=_;ve!==null;){if(ve.key===fe){if(fe=T.type,fe===H){if(ve.tag===7){n(A,ve.sibling),_=i(ve,T.props.children),_.return=A,A=_;break e}}else if(ve.elementType===fe||typeof fe=="object"&&fe!==null&&fe.$$typeof===Te&&$u(fe)===ve.type){n(A,ve.sibling),_=i(ve,T.props),_.ref=wo(A,ve,T),_.return=A,A=_;break e}n(A,ve);break}else t(A,ve);ve=ve.sibling}T.type===H?(_=En(T.props.children,A.mode,q,T.key),_.return=A,A=_):(q=la(T.type,T.key,T.props,null,A.mode,q),q.ref=wo(A,_,T),q.return=A,A=q)}return m(A);case L:e:{for(ve=T.key;_!==null;){if(_.key===ve)if(_.tag===4&&_.stateNode.containerInfo===T.containerInfo&&_.stateNode.implementation===T.implementation){n(A,_.sibling),_=i(_,T.children||[]),_.return=A,A=_;break e}else{n(A,_);break}else t(A,_);_=_.sibling}_=gd(T,A.mode,q),_.return=A,A=_}return m(A);case Te:return ve=T._init,Ze(A,_,ve(T._payload),q)}if(Nr(T))return de(A,_,T,q);if(ce(T))return ue(A,_,T,q);zl(A,T)}return typeof T=="string"&&T!==""||typeof T=="number"?(T=""+T,_!==null&&_.tag===6?(n(A,_.sibling),_=i(_,T),_.return=A,A=_):(n(A,_),_=xd(T,A.mode,q),_.return=A,A=_),m(A)):n(A,_)}return Ze}var cs=Uu(!0),Bu=Uu(!1),Ll=Tr(null),Fl=null,us=null,Ci=null;function Ei(){Ci=us=Fl=null}function _i(e){var t=Ll.current;$e(Ll),e._currentValue=t}function Mi(e,t,n){for(;e!==null;){var l=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,l!==null&&(l.childLanes|=t)):l!==null&&(l.childLanes&t)!==t&&(l.childLanes|=t),e===n)break;e=e.return}}function fs(e,t){Fl=e,Ci=us=null,e=e.dependencies,e!==null&&e.firstContext!==null&&((e.lanes&t)!==0&&(yt=!0),e.firstContext=null)}function zt(e){var t=e._currentValue;if(Ci!==e)if(e={context:e,memoizedValue:t,next:null},us===null){if(Fl===null)throw Error(a(308));us=e,Fl.dependencies={lanes:0,firstContext:e}}else us=us.next=e;return t}var bn=null;function Pi(e){bn===null?bn=[e]:bn.push(e)}function Hu(e,t,n,l){var i=t.interleaved;return i===null?(n.next=n,Pi(t)):(n.next=i.next,i.next=n),t.interleaved=n,mr(e,l)}function mr(e,t){e.lanes|=t;var n=e.alternate;for(n!==null&&(n.lanes|=t),n=e,e=e.return;e!==null;)e.childLanes|=t,n=e.alternate,n!==null&&(n.childLanes|=t),n=e,e=e.return;return n.tag===3?n.stateNode:null}var Fr=!1;function Ri(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function Gu(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function hr(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function Ir(e,t,n){var l=e.updateQueue;if(l===null)return null;if(l=l.shared,(Re&2)!==0){var i=l.pending;return i===null?t.next=t:(t.next=i.next,i.next=t),l.pending=t,mr(e,n)}return i=l.interleaved,i===null?(t.next=t,Pi(l)):(t.next=i.next,i.next=t),l.interleaved=t,mr(e,n)}function Il(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,(n&4194240)!==0)){var l=t.lanes;l&=e.pendingLanes,n|=l,t.lanes=n,Va(e,n)}}function Vu(e,t){var n=e.updateQueue,l=e.alternate;if(l!==null&&(l=l.updateQueue,n===l)){var i=null,c=null;if(n=n.firstBaseUpdate,n!==null){do{var m={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};c===null?i=c=m:c=c.next=m,n=n.next}while(n!==null);c===null?i=c=t:c=c.next=t}else i=c=t;n={baseState:l.baseState,firstBaseUpdate:i,lastBaseUpdate:c,shared:l.shared,effects:l.effects},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function $l(e,t,n,l){var i=e.updateQueue;Fr=!1;var c=i.firstBaseUpdate,m=i.lastBaseUpdate,y=i.shared.pending;if(y!==null){i.shared.pending=null;var j=y,F=j.next;j.next=null,m===null?c=F:m.next=F,m=j;var V=e.alternate;V!==null&&(V=V.updateQueue,y=V.lastBaseUpdate,y!==m&&(y===null?V.firstBaseUpdate=F:y.next=F,V.lastBaseUpdate=j))}if(c!==null){var K=i.baseState;m=0,V=F=j=null,y=c;do{var G=y.lane,se=y.eventTime;if((l&G)===G){V!==null&&(V=V.next={eventTime:se,lane:0,tag:y.tag,payload:y.payload,callback:y.callback,next:null});e:{var de=e,ue=y;switch(G=t,se=n,ue.tag){case 1:if(de=ue.payload,typeof de=="function"){K=de.call(se,K,G);break e}K=de;break e;case 3:de.flags=de.flags&-65537|128;case 0:if(de=ue.payload,G=typeof de=="function"?de.call(se,K,G):de,G==null)break e;K=J({},K,G);break e;case 2:Fr=!0}}y.callback!==null&&y.lane!==0&&(e.flags|=64,G=i.effects,G===null?i.effects=[y]:G.push(y))}else se={eventTime:se,lane:G,tag:y.tag,payload:y.payload,callback:y.callback,next:null},V===null?(F=V=se,j=K):V=V.next=se,m|=G;if(y=y.next,y===null){if(y=i.shared.pending,y===null)break;G=y,y=G.next,G.next=null,i.lastBaseUpdate=G,i.shared.pending=null}}while(!0);if(V===null&&(j=K),i.baseState=j,i.firstBaseUpdate=F,i.lastBaseUpdate=V,t=i.shared.interleaved,t!==null){i=t;do m|=i.lane,i=i.next;while(i!==t)}else c===null&&(i.shared.lanes=0);kn|=m,e.lanes=m,e.memoizedState=K}}function Wu(e,t,n){if(e=t.effects,t.effects=null,e!==null)for(t=0;tn?n:4,e(!0);var l=zi.transition;zi.transition={};try{e(!1),t()}finally{Le=n,zi.transition=l}}function ff(){return Lt().memoizedState}function Vx(e,t,n){var l=Hr(e);if(n={lane:l,action:n,hasEagerState:!1,eagerState:null,next:null},pf(e))mf(t,n);else if(n=Hu(e,t,n,l),n!==null){var i=mt();Qt(n,e,l,i),hf(n,t,l)}}function Wx(e,t,n){var l=Hr(e),i={lane:l,action:n,hasEagerState:!1,eagerState:null,next:null};if(pf(e))mf(t,i);else{var c=e.alternate;if(e.lanes===0&&(c===null||c.lanes===0)&&(c=t.lastRenderedReducer,c!==null))try{var m=t.lastRenderedState,y=c(m,n);if(i.hasEagerState=!0,i.eagerState=y,Ht(y,m)){var j=t.interleaved;j===null?(i.next=i,Pi(t)):(i.next=j.next,j.next=i),t.interleaved=i;return}}catch{}finally{}n=Hu(e,t,i,l),n!==null&&(i=mt(),Qt(n,e,l,i),hf(n,t,l))}}function pf(e){var t=e.alternate;return e===Ve||t!==null&&t===Ve}function mf(e,t){So=Hl=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function hf(e,t,n){if((n&4194240)!==0){var l=t.lanes;l&=e.pendingLanes,n|=l,t.lanes=n,Va(e,n)}}var Wl={readContext:zt,useCallback:dt,useContext:dt,useEffect:dt,useImperativeHandle:dt,useInsertionEffect:dt,useLayoutEffect:dt,useMemo:dt,useReducer:dt,useRef:dt,useState:dt,useDebugValue:dt,useDeferredValue:dt,useTransition:dt,useMutableSource:dt,useSyncExternalStore:dt,useId:dt,unstable_isNewReconciler:!1},Kx={readContext:zt,useCallback:function(e,t){return tr().memoizedState=[e,t===void 0?null:t],e},useContext:zt,useEffect:nf,useImperativeHandle:function(e,t,n){return n=n!=null?n.concat([e]):null,Gl(4194308,4,lf.bind(null,t,e),n)},useLayoutEffect:function(e,t){return Gl(4194308,4,e,t)},useInsertionEffect:function(e,t){return Gl(4,2,e,t)},useMemo:function(e,t){var n=tr();return t=t===void 0?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var l=tr();return t=n!==void 0?n(t):t,l.memoizedState=l.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},l.queue=e,e=e.dispatch=Vx.bind(null,Ve,e),[l.memoizedState,e]},useRef:function(e){var t=tr();return e={current:e},t.memoizedState=e},useState:tf,useDebugValue:Hi,useDeferredValue:function(e){return tr().memoizedState=e},useTransition:function(){var e=tf(!1),t=e[0];return e=Gx.bind(null,e[1]),tr().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var l=Ve,i=tr();if(He){if(n===void 0)throw Error(a(407));n=n()}else{if(n=t(),tt===null)throw Error(a(349));(jn&30)!==0||Zu(l,t,n)}i.memoizedState=n;var c={value:n,getSnapshot:t};return i.queue=c,nf(Ju.bind(null,l,c,e),[e]),l.flags|=2048,_o(9,Yu.bind(null,l,c,n,t),void 0,null),n},useId:function(){var e=tr(),t=tt.identifierPrefix;if(He){var n=pr,l=fr;n=(l&~(1<<32-Bt(l)-1)).toString(32)+n,t=":"+t+"R"+n,n=Co++,0<\/script>",e=e.removeChild(e.firstChild)):typeof l.is=="string"?e=m.createElement(n,{is:l.is}):(e=m.createElement(n),n==="select"&&(m=e,l.multiple?m.multiple=!0:l.size&&(m.size=l.size))):e=m.createElementNS(e,n),e[Xt]=t,e[yo]=l,Tf(e,t,!1,!1),t.stateNode=e;e:{switch(m=Yt(n,l),n){case"dialog":Ie("cancel",e),Ie("close",e),i=l;break;case"iframe":case"object":case"embed":Ie("load",e),i=l;break;case"video":case"audio":for(i=0;igs&&(t.flags|=128,l=!0,Mo(c,!1),t.lanes=4194304)}else{if(!l)if(e=Ul(m),e!==null){if(t.flags|=128,l=!0,n=e.updateQueue,n!==null&&(t.updateQueue=n,t.flags|=4),Mo(c,!0),c.tail===null&&c.tailMode==="hidden"&&!m.alternate&&!He)return ct(t),null}else 2*qe()-c.renderingStartTime>gs&&n!==1073741824&&(t.flags|=128,l=!0,Mo(c,!1),t.lanes=4194304);c.isBackwards?(m.sibling=t.child,t.child=m):(n=c.last,n!==null?n.sibling=m:t.child=m,c.last=m)}return c.tail!==null?(t=c.tail,c.rendering=t,c.tail=t.sibling,c.renderingStartTime=qe(),t.sibling=null,n=Ge.current,Fe(Ge,l?n&1|2:n&1),t):(ct(t),null);case 22:case 23:return pd(),l=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==l&&(t.flags|=8192),l&&(t.mode&1)!==0?(Pt&1073741824)!==0&&(ct(t),t.subtreeFlags&6&&(t.flags|=8192)):ct(t),null;case 24:return null;case 25:return null}throw Error(a(156,t.tag))}function tg(e,t){switch(ji(t),t.tag){case 1:return vt(t.type)&&Pl(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return ps(),$e(gt),$e(it),Ti(),e=t.flags,(e&65536)!==0&&(e&128)===0?(t.flags=e&-65537|128,t):null;case 5:return Di(t),null;case 13:if($e(Ge),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(a(340));ds()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return $e(Ge),null;case 4:return ps(),null;case 10:return _i(t.type._context),null;case 22:case 23:return pd(),null;case 24:return null;default:return null}}var Zl=!1,ut=!1,rg=typeof WeakSet=="function"?WeakSet:Set,ae=null;function hs(e,t){var n=e.ref;if(n!==null)if(typeof n=="function")try{n(null)}catch(l){We(e,t,l)}else n.current=null}function td(e,t,n){try{n()}catch(l){We(e,t,l)}}var Ff=!1;function ng(e,t){if(pi=xl,e=hu(),oi(e)){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{n=(n=e.ownerDocument)&&n.defaultView||window;var l=n.getSelection&&n.getSelection();if(l&&l.rangeCount!==0){n=l.anchorNode;var i=l.anchorOffset,c=l.focusNode;l=l.focusOffset;try{n.nodeType,c.nodeType}catch{n=null;break e}var m=0,y=-1,j=-1,F=0,V=0,K=e,G=null;t:for(;;){for(var se;K!==n||i!==0&&K.nodeType!==3||(y=m+i),K!==c||l!==0&&K.nodeType!==3||(j=m+l),K.nodeType===3&&(m+=K.nodeValue.length),(se=K.firstChild)!==null;)G=K,K=se;for(;;){if(K===e)break t;if(G===n&&++F===i&&(y=m),G===c&&++V===l&&(j=m),(se=K.nextSibling)!==null)break;K=G,G=K.parentNode}K=se}n=y===-1||j===-1?null:{start:y,end:j}}else n=null}n=n||{start:0,end:0}}else n=null;for(mi={focusedElem:e,selectionRange:n},xl=!1,ae=t;ae!==null;)if(t=ae,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,ae=e;else for(;ae!==null;){t=ae;try{var de=t.alternate;if((t.flags&1024)!==0)switch(t.tag){case 0:case 11:case 15:break;case 1:if(de!==null){var ue=de.memoizedProps,Ze=de.memoizedState,A=t.stateNode,_=A.getSnapshotBeforeUpdate(t.elementType===t.type?ue:Vt(t.type,ue),Ze);A.__reactInternalSnapshotBeforeUpdate=_}break;case 3:var T=t.stateNode.containerInfo;T.nodeType===1?T.textContent="":T.nodeType===9&&T.documentElement&&T.removeChild(T.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(a(163))}}catch(q){We(t,t.return,q)}if(e=t.sibling,e!==null){e.return=t.return,ae=e;break}ae=t.return}return de=Ff,Ff=!1,de}function Po(e,t,n){var l=t.updateQueue;if(l=l!==null?l.lastEffect:null,l!==null){var i=l=l.next;do{if((i.tag&e)===e){var c=i.destroy;i.destroy=void 0,c!==void 0&&td(t,n,c)}i=i.next}while(i!==l)}}function Yl(e,t){if(t=t.updateQueue,t=t!==null?t.lastEffect:null,t!==null){var n=t=t.next;do{if((n.tag&e)===e){var l=n.create;n.destroy=l()}n=n.next}while(n!==t)}}function rd(e){var t=e.ref;if(t!==null){var n=e.stateNode;switch(e.tag){case 5:e=n;break;default:e=n}typeof t=="function"?t(e):t.current=e}}function If(e){var t=e.alternate;t!==null&&(e.alternate=null,If(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[Xt],delete t[yo],delete t[vi],delete t[Ix],delete t[$x])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function $f(e){return e.tag===5||e.tag===3||e.tag===4}function Uf(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||$f(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function nd(e,t,n){var l=e.tag;if(l===5||l===6)e=e.stateNode,t?n.nodeType===8?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(n.nodeType===8?(t=n.parentNode,t.insertBefore(e,n)):(t=n,t.appendChild(e)),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=_l));else if(l!==4&&(e=e.child,e!==null))for(nd(e,t,n),e=e.sibling;e!==null;)nd(e,t,n),e=e.sibling}function sd(e,t,n){var l=e.tag;if(l===5||l===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(l!==4&&(e=e.child,e!==null))for(sd(e,t,n),e=e.sibling;e!==null;)sd(e,t,n),e=e.sibling}var st=null,Wt=!1;function $r(e,t,n){for(n=n.child;n!==null;)Bf(e,t,n),n=n.sibling}function Bf(e,t,n){if(Jt&&typeof Jt.onCommitFiberUnmount=="function")try{Jt.onCommitFiberUnmount(cl,n)}catch{}switch(n.tag){case 5:ut||hs(n,t);case 6:var l=st,i=Wt;st=null,$r(e,t,n),st=l,Wt=i,st!==null&&(Wt?(e=st,n=n.stateNode,e.nodeType===8?e.parentNode.removeChild(n):e.removeChild(n)):st.removeChild(n.stateNode));break;case 18:st!==null&&(Wt?(e=st,n=n.stateNode,e.nodeType===8?gi(e.parentNode,n):e.nodeType===1&&gi(e,n),ao(e)):gi(st,n.stateNode));break;case 4:l=st,i=Wt,st=n.stateNode.containerInfo,Wt=!0,$r(e,t,n),st=l,Wt=i;break;case 0:case 11:case 14:case 15:if(!ut&&(l=n.updateQueue,l!==null&&(l=l.lastEffect,l!==null))){i=l=l.next;do{var c=i,m=c.destroy;c=c.tag,m!==void 0&&((c&2)!==0||(c&4)!==0)&&td(n,t,m),i=i.next}while(i!==l)}$r(e,t,n);break;case 1:if(!ut&&(hs(n,t),l=n.stateNode,typeof l.componentWillUnmount=="function"))try{l.props=n.memoizedProps,l.state=n.memoizedState,l.componentWillUnmount()}catch(y){We(n,t,y)}$r(e,t,n);break;case 21:$r(e,t,n);break;case 22:n.mode&1?(ut=(l=ut)||n.memoizedState!==null,$r(e,t,n),ut=l):$r(e,t,n);break;default:$r(e,t,n)}}function Hf(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var n=e.stateNode;n===null&&(n=e.stateNode=new rg),t.forEach(function(l){var i=fg.bind(null,e,l);n.has(l)||(n.add(l),l.then(i,i))})}}function Kt(e,t){var n=t.deletions;if(n!==null)for(var l=0;li&&(i=m),l&=~c}if(l=i,l=qe()-l,l=(120>l?120:480>l?480:1080>l?1080:1920>l?1920:3e3>l?3e3:4320>l?4320:1960*og(l/1960))-l,10e?16:e,Br===null)var l=!1;else{if(e=Br,Br=null,ra=0,(Re&6)!==0)throw Error(a(331));var i=Re;for(Re|=4,ae=e.current;ae!==null;){var c=ae,m=c.child;if((ae.flags&16)!==0){var y=c.deletions;if(y!==null){for(var j=0;jqe()-ad?Sn(e,0):ld|=n),wt(e,t)}function rp(e,t){t===0&&((e.mode&1)===0?t=1:(t=fl,fl<<=1,(fl&130023424)===0&&(fl=4194304)));var n=mt();e=mr(e,t),e!==null&&(ro(e,t,n),wt(e,n))}function ug(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),rp(e,n)}function fg(e,t){var n=0;switch(e.tag){case 13:var l=e.stateNode,i=e.memoizedState;i!==null&&(n=i.retryLane);break;case 19:l=e.stateNode;break;default:throw Error(a(314))}l!==null&&l.delete(t),rp(e,n)}var np;np=function(e,t,n){if(e!==null)if(e.memoizedProps!==t.pendingProps||gt.current)yt=!0;else{if((e.lanes&n)===0&&(t.flags&128)===0)return yt=!1,Xx(e,t,n);yt=(e.flags&131072)!==0}else yt=!1,He&&(t.flags&1048576)!==0&&Tu(t,Al,t.index);switch(t.lanes=0,t.tag){case 2:var l=t.type;ql(e,t),e=t.pendingProps;var i=ls(t,it.current);fs(t,n),i=Fi(null,t,l,e,i,n);var c=Ii();return t.flags|=1,typeof i=="object"&&i!==null&&typeof i.render=="function"&&i.$$typeof===void 0?(t.tag=1,t.memoizedState=null,t.updateQueue=null,vt(l)?(c=!0,Rl(t)):c=!1,t.memoizedState=i.state!==null&&i.state!==void 0?i.state:null,Ri(t),i.updater=Kl,t.stateNode=i,i._reactInternals=t,Vi(t,l,e,n),t=qi(null,t,l,!0,c,n)):(t.tag=0,He&&c&&wi(t),pt(null,t,i,n),t=t.child),t;case 16:l=t.elementType;e:{switch(ql(e,t),e=t.pendingProps,i=l._init,l=i(l._payload),t.type=l,i=t.tag=mg(l),e=Vt(l,e),i){case 0:t=Qi(null,t,l,e,n);break e;case 1:t=Mf(null,t,l,e,n);break e;case 11:t=Nf(null,t,l,e,n);break e;case 14:t=Sf(null,t,l,Vt(l.type,e),n);break e}throw Error(a(306,l,""))}return t;case 0:return l=t.type,i=t.pendingProps,i=t.elementType===l?i:Vt(l,i),Qi(e,t,l,i,n);case 1:return l=t.type,i=t.pendingProps,i=t.elementType===l?i:Vt(l,i),Mf(e,t,l,i,n);case 3:e:{if(Pf(t),e===null)throw Error(a(387));l=t.pendingProps,c=t.memoizedState,i=c.element,Gu(e,t),$l(t,l,null,n);var m=t.memoizedState;if(l=m.element,c.isDehydrated)if(c={element:l,isDehydrated:!1,cache:m.cache,pendingSuspenseBoundaries:m.pendingSuspenseBoundaries,transitions:m.transitions},t.updateQueue.baseState=c,t.memoizedState=c,t.flags&256){i=ms(Error(a(423)),t),t=Rf(e,t,l,n,i);break e}else if(l!==i){i=ms(Error(a(424)),t),t=Rf(e,t,l,n,i);break e}else for(Mt=Ar(t.stateNode.containerInfo.firstChild),_t=t,He=!0,Gt=null,n=Bu(t,null,l,n),t.child=n;n;)n.flags=n.flags&-3|4096,n=n.sibling;else{if(ds(),l===i){t=xr(e,t,n);break e}pt(e,t,l,n)}t=t.child}return t;case 5:return Ku(t),e===null&&Ni(t),l=t.type,i=t.pendingProps,c=e!==null?e.memoizedProps:null,m=i.children,hi(l,i)?m=null:c!==null&&hi(l,c)&&(t.flags|=32),_f(e,t),pt(e,t,m,n),t.child;case 6:return e===null&&Ni(t),null;case 13:return Of(e,t,n);case 4:return Oi(t,t.stateNode.containerInfo),l=t.pendingProps,e===null?t.child=cs(t,null,l,n):pt(e,t,l,n),t.child;case 11:return l=t.type,i=t.pendingProps,i=t.elementType===l?i:Vt(l,i),Nf(e,t,l,i,n);case 7:return pt(e,t,t.pendingProps,n),t.child;case 8:return pt(e,t,t.pendingProps.children,n),t.child;case 12:return pt(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(l=t.type._context,i=t.pendingProps,c=t.memoizedProps,m=i.value,Fe(Ll,l._currentValue),l._currentValue=m,c!==null)if(Ht(c.value,m)){if(c.children===i.children&&!gt.current){t=xr(e,t,n);break e}}else for(c=t.child,c!==null&&(c.return=t);c!==null;){var y=c.dependencies;if(y!==null){m=c.child;for(var j=y.firstContext;j!==null;){if(j.context===l){if(c.tag===1){j=hr(-1,n&-n),j.tag=2;var F=c.updateQueue;if(F!==null){F=F.shared;var V=F.pending;V===null?j.next=j:(j.next=V.next,V.next=j),F.pending=j}}c.lanes|=n,j=c.alternate,j!==null&&(j.lanes|=n),Mi(c.return,n,t),y.lanes|=n;break}j=j.next}}else if(c.tag===10)m=c.type===t.type?null:c.child;else if(c.tag===18){if(m=c.return,m===null)throw Error(a(341));m.lanes|=n,y=m.alternate,y!==null&&(y.lanes|=n),Mi(m,n,t),m=c.sibling}else m=c.child;if(m!==null)m.return=c;else for(m=c;m!==null;){if(m===t){m=null;break}if(c=m.sibling,c!==null){c.return=m.return,m=c;break}m=m.return}c=m}pt(e,t,i.children,n),t=t.child}return t;case 9:return i=t.type,l=t.pendingProps.children,fs(t,n),i=zt(i),l=l(i),t.flags|=1,pt(e,t,l,n),t.child;case 14:return l=t.type,i=Vt(l,t.pendingProps),i=Vt(l.type,i),Sf(e,t,l,i,n);case 15:return Cf(e,t,t.type,t.pendingProps,n);case 17:return l=t.type,i=t.pendingProps,i=t.elementType===l?i:Vt(l,i),ql(e,t),t.tag=1,vt(l)?(e=!0,Rl(t)):e=!1,fs(t,n),gf(t,l,i),Vi(t,l,i,n),qi(null,t,l,!0,e,n);case 19:return Af(e,t,n);case 22:return Ef(e,t,n)}throw Error(a(156,t.tag))};function sp(e,t){return zc(e,t)}function pg(e,t,n,l){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=l,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function It(e,t,n,l){return new pg(e,t,n,l)}function hd(e){return e=e.prototype,!(!e||!e.isReactComponent)}function mg(e){if(typeof e=="function")return hd(e)?1:0;if(e!=null){if(e=e.$$typeof,e===ne)return 11;if(e===Oe)return 14}return 2}function Vr(e,t){var n=e.alternate;return n===null?(n=It(e.tag,t,e.key,e.mode),n.elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=e.flags&14680064,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function la(e,t,n,l,i,c){var m=2;if(l=e,typeof e=="function")hd(e)&&(m=1);else if(typeof e=="string")m=5;else e:switch(e){case H:return En(n.children,i,c,t);case re:m=8,i|=8;break;case le:return e=It(12,n,t,i|2),e.elementType=le,e.lanes=c,e;case Ne:return e=It(13,n,t,i),e.elementType=Ne,e.lanes=c,e;case Ce:return e=It(19,n,t,i),e.elementType=Ce,e.lanes=c,e;case _e:return aa(n,i,c,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case he:m=10;break e;case Q:m=9;break e;case ne:m=11;break e;case Oe:m=14;break e;case Te:m=16,l=null;break e}throw Error(a(130,e==null?e:typeof e,""))}return t=It(m,n,t,i),t.elementType=e,t.type=l,t.lanes=c,t}function En(e,t,n,l){return e=It(7,e,l,t),e.lanes=n,e}function aa(e,t,n,l){return e=It(22,e,l,t),e.elementType=_e,e.lanes=n,e.stateNode={isHidden:!1},e}function xd(e,t,n){return e=It(6,e,null,t),e.lanes=n,e}function gd(e,t,n){return t=It(4,e.children!==null?e.children:[],e.key,t),t.lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function hg(e,t,n,l,i){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=Ga(0),this.expirationTimes=Ga(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Ga(0),this.identifierPrefix=l,this.onRecoverableError=i,this.mutableSourceEagerHydrationData=null}function vd(e,t,n,l,i,c,m,y,j){return e=new hg(e,t,n,y,j),t===1?(t=1,c===!0&&(t|=8)):t=0,c=It(3,null,null,t),e.current=c,c.stateNode=e,c.memoizedState={element:l,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},Ri(c),e}function xg(e,t,n){var l=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(s)}catch(o){console.error(o)}}return s(),Sd.exports=_g(),Sd.exports}var yp;function Mg(){if(yp)return ha;yp=1;var s=hm();return ha.createRoot=s.createRoot,ha.hydrateRoot=s.hydrateRoot,ha}var Pg=Mg();const Rg=pm(Pg);var nl=class{constructor(){this.listeners=new Set,this.subscribe=this.subscribe.bind(this)}subscribe(s){return this.listeners.add(s),this.onSubscribe(),()=>{this.listeners.delete(s),this.onUnsubscribe()}}hasListeners(){return this.listeners.size>0}onSubscribe(){}onUnsubscribe(){}},Pn,Yr,Es,nm,Og=(nm=class extends nl{constructor(){super();be(this,Pn);be(this,Yr);be(this,Es);oe(this,Es,o=>{if(typeof window<"u"&&window.addEventListener){const a=()=>o();return window.addEventListener("visibilitychange",a,!1),()=>{window.removeEventListener("visibilitychange",a)}}})}onSubscribe(){N(this,Yr)||this.setEventListener(N(this,Es))}onUnsubscribe(){var o;this.hasListeners()||((o=N(this,Yr))==null||o.call(this),oe(this,Yr,void 0))}setEventListener(o){var a;oe(this,Es,o),(a=N(this,Yr))==null||a.call(this),oe(this,Yr,o(d=>{typeof d=="boolean"?this.setFocused(d):this.onFocus()}))}setFocused(o){N(this,Pn)!==o&&(oe(this,Pn,o),this.onFocus())}onFocus(){const o=this.isFocused();this.listeners.forEach(a=>{a(o)})}isFocused(){var o;return typeof N(this,Pn)=="boolean"?N(this,Pn):((o=globalThis.document)==null?void 0:o.visibilityState)!=="hidden"}},Pn=new WeakMap,Yr=new WeakMap,Es=new WeakMap,nm),mc=new Og,Dg={setTimeout:(s,o)=>setTimeout(s,o),clearTimeout:s=>clearTimeout(s),setInterval:(s,o)=>setInterval(s,o),clearInterval:s=>clearInterval(s)},Jr,uc,sm,Ag=(sm=class{constructor(){be(this,Jr,Dg);be(this,uc,!1)}setTimeoutProvider(s){oe(this,Jr,s)}setTimeout(s,o){return N(this,Jr).setTimeout(s,o)}clearTimeout(s){N(this,Jr).clearTimeout(s)}setInterval(s,o){return N(this,Jr).setInterval(s,o)}clearInterval(s){N(this,Jr).clearInterval(s)}},Jr=new WeakMap,uc=new WeakMap,sm),Mn=new Ag;function Tg(s){setTimeout(s,0)}var zg=typeof window>"u"||"Deno"in globalThis;function Nt(){}function Lg(s,o){return typeof s=="function"?s(o):s}function $d(s){return typeof s=="number"&&s>=0&&s!==1/0}function xm(s,o){return Math.max(s+(o||0)-Date.now(),0)}function on(s,o){return typeof s=="function"?s(o):s}function Ot(s,o){return typeof s=="function"?s(o):s}function bp(s,o){const{type:a="all",exact:d,fetchStatus:u,predicate:f,queryKey:h,stale:p}=s;if(h){if(d){if(o.queryHash!==hc(h,o.options))return!1}else if(!Uo(o.queryKey,h))return!1}if(a!=="all"){const v=o.isActive();if(a==="active"&&!v||a==="inactive"&&v)return!1}return!(typeof p=="boolean"&&o.isStale()!==p||u&&u!==o.state.fetchStatus||f&&!f(o))}function wp(s,o){const{exact:a,status:d,predicate:u,mutationKey:f}=s;if(f){if(!o.options.mutationKey)return!1;if(a){if($o(o.options.mutationKey)!==$o(f))return!1}else if(!Uo(o.options.mutationKey,f))return!1}return!(d&&o.state.status!==d||u&&!u(o))}function hc(s,o){return((o==null?void 0:o.queryKeyHashFn)||$o)(s)}function $o(s){return JSON.stringify(s,(o,a)=>Bd(a)?Object.keys(a).sort().reduce((d,u)=>(d[u]=a[u],d),{}):a)}function Uo(s,o){return s===o?!0:typeof s!=typeof o?!1:s&&o&&typeof s=="object"&&typeof o=="object"?Object.keys(o).every(a=>Uo(s[a],o[a])):!1}var Fg=Object.prototype.hasOwnProperty;function gm(s,o,a=0){if(s===o)return s;if(a>500)return o;const d=jp(s)&&jp(o);if(!d&&!(Bd(s)&&Bd(o)))return o;const f=(d?s:Object.keys(s)).length,h=d?o:Object.keys(o),p=h.length,v=d?new Array(p):{};let x=0;for(let b=0;b{Mn.setTimeout(o,s)})}function Hd(s,o,a){return typeof a.structuralSharing=="function"?a.structuralSharing(s,o):a.structuralSharing!==!1?gm(s,o):o}function $g(s,o,a=0){const d=[...s,o];return a&&d.length>a?d.slice(1):d}function Ug(s,o,a=0){const d=[o,...s];return a&&d.length>a?d.slice(0,-1):d}var xc=Symbol();function vm(s,o){return!s.queryFn&&(o!=null&&o.initialPromise)?()=>o.initialPromise:!s.queryFn||s.queryFn===xc?()=>Promise.reject(new Error(`Missing queryFn: '${s.queryHash}'`)):s.queryFn}function ym(s,o){return typeof s=="function"?s(...o):!!s}function Bg(s,o,a){let d=!1,u;return Object.defineProperty(s,"signal",{enumerable:!0,get:()=>(u??(u=o()),d||(d=!0,u.aborted?a():u.addEventListener("abort",a,{once:!0})),u)}),s}var Bo=(()=>{let s=()=>zg;return{isServer(){return s()},setIsServer(o){s=o}}})();function Gd(){let s,o;const a=new Promise((u,f)=>{s=u,o=f});a.status="pending",a.catch(()=>{});function d(u){Object.assign(a,u),delete a.resolve,delete a.reject}return a.resolve=u=>{d({status:"fulfilled",value:u}),s(u)},a.reject=u=>{d({status:"rejected",reason:u}),o(u)},a}var Hg=Tg;function Gg(){let s=[],o=0,a=p=>{p()},d=p=>{p()},u=Hg;const f=p=>{o?s.push(p):u(()=>{a(p)})},h=()=>{const p=s;s=[],p.length&&u(()=>{d(()=>{p.forEach(v=>{a(v)})})})};return{batch:p=>{let v;o++;try{v=p()}finally{o--,o||h()}return v},batchCalls:p=>(...v)=>{f(()=>{p(...v)})},schedule:f,setNotifyFunction:p=>{a=p},setBatchNotifyFunction:p=>{d=p},setScheduler:p=>{u=p}}}var lt=Gg(),_s,Xr,Ms,om,Vg=(om=class extends nl{constructor(){super();be(this,_s,!0);be(this,Xr);be(this,Ms);oe(this,Ms,o=>{if(typeof window<"u"&&window.addEventListener){const a=()=>o(!0),d=()=>o(!1);return window.addEventListener("online",a,!1),window.addEventListener("offline",d,!1),()=>{window.removeEventListener("online",a),window.removeEventListener("offline",d)}}})}onSubscribe(){N(this,Xr)||this.setEventListener(N(this,Ms))}onUnsubscribe(){var o;this.hasListeners()||((o=N(this,Xr))==null||o.call(this),oe(this,Xr,void 0))}setEventListener(o){var a;oe(this,Ms,o),(a=N(this,Xr))==null||a.call(this),oe(this,Xr,o(this.setOnline.bind(this)))}setOnline(o){N(this,_s)!==o&&(oe(this,_s,o),this.listeners.forEach(d=>{d(o)}))}isOnline(){return N(this,_s)}},_s=new WeakMap,Xr=new WeakMap,Ms=new WeakMap,om),Pa=new Vg;function Wg(s){return Math.min(1e3*2**s,3e4)}function bm(s){return(s??"online")==="online"?Pa.isOnline():!0}var Vd=class extends Error{constructor(s){super("CancelledError"),this.revert=s==null?void 0:s.revert,this.silent=s==null?void 0:s.silent}};function wm(s){let o=!1,a=0,d;const u=Gd(),f=()=>u.status!=="pending",h=E=>{var k;if(!f()){const C=new Vd(E);P(C),(k=s.onCancel)==null||k.call(s,C)}},p=()=>{o=!0},v=()=>{o=!1},x=()=>mc.isFocused()&&(s.networkMode==="always"||Pa.isOnline())&&s.canRun(),b=()=>bm(s.networkMode)&&s.canRun(),w=E=>{f()||(d==null||d(),u.resolve(E))},P=E=>{f()||(d==null||d(),u.reject(E))},R=()=>new Promise(E=>{var k;d=C=>{(f()||x())&&E(C)},(k=s.onPause)==null||k.call(s)}).then(()=>{var E;d=void 0,f()||(E=s.onContinue)==null||E.call(s)}),D=()=>{if(f())return;let E;const k=a===0?s.initialPromise:void 0;try{E=k??s.fn()}catch(C){E=Promise.reject(C)}Promise.resolve(E).then(w).catch(C=>{var L;if(f())return;const I=s.retry??(Bo.isServer()?0:3),B=s.retryDelay??Wg,z=typeof B=="function"?B(a,C):B,$=I===!0||typeof I=="number"&&ax()?void 0:R()).then(()=>{o?P(C):D()})})};return{promise:u,status:()=>u.status,cancel:h,continue:()=>(d==null||d(),u),cancelRetry:p,continueRetry:v,canStart:b,start:()=>(b()?D():R().then(D),u)}}var Rn,lm,jm=(lm=class{constructor(){be(this,Rn)}destroy(){this.clearGcTimeout()}scheduleGc(){this.clearGcTimeout(),$d(this.gcTime)&&oe(this,Rn,Mn.setTimeout(()=>{this.optionalRemove()},this.gcTime))}updateGcTime(s){this.gcTime=Math.max(this.gcTime||0,s??(Bo.isServer()?1/0:300*1e3))}clearGcTimeout(){N(this,Rn)!==void 0&&(Mn.clearTimeout(N(this,Rn)),oe(this,Rn,void 0))}},Rn=new WeakMap,lm);function Kg(s){return{onFetch:(o,a)=>{var b,w,P,R,D;const d=o.options,u=(P=(w=(b=o.fetchOptions)==null?void 0:b.meta)==null?void 0:w.fetchMore)==null?void 0:P.direction,f=((R=o.state.data)==null?void 0:R.pages)||[],h=((D=o.state.data)==null?void 0:D.pageParams)||[];let p={pages:[],pageParams:[]},v=0;const x=async()=>{let E=!1;const k=B=>{Bg(B,()=>o.signal,()=>E=!0)},C=vm(o.options,o.fetchOptions),I=async(B,z,$)=>{if(E)return Promise.reject(o.signal.reason);if(z==null&&B.pages.length)return Promise.resolve(B);const H=(()=>{const Q={client:o.client,queryKey:o.queryKey,pageParam:z,direction:$?"backward":"forward",meta:o.options.meta};return k(Q),Q})(),re=await C(H),{maxPages:le}=o.options,he=$?Ug:$g;return{pages:he(B.pages,re,le),pageParams:he(B.pageParams,z,le)}};if(u&&f.length){const B=u==="backward",z=B?Qg:Np,$={pages:f,pageParams:h},L=z(d,$);p=await I($,L,B)}else{const B=s??f.length;do{const z=v===0?h[0]??d.initialPageParam:Np(d,p);if(v>0&&z==null)break;p=await I(p,z),v++}while(v{var E,k;return(k=(E=o.options).persister)==null?void 0:k.call(E,x,{client:o.client,queryKey:o.queryKey,meta:o.options.meta,signal:o.signal},a)}:o.fetchFn=x}}}function Np(s,{pages:o,pageParams:a}){const d=o.length-1;return o.length>0?s.getNextPageParam(o[d],o,a[d],a):void 0}function Qg(s,{pages:o,pageParams:a}){var d;return o.length>0?(d=s.getPreviousPageParam)==null?void 0:d.call(s,o[0],o,a[0],a):void 0}var Ps,On,Rs,Ut,Dn,nt,Jo,An,Rt,km,yr,am,qg=(am=class extends jm{constructor(o){super();be(this,Rt);be(this,Ps);be(this,On);be(this,Rs);be(this,Ut);be(this,Dn);be(this,nt);be(this,Jo);be(this,An);oe(this,An,!1),oe(this,Jo,o.defaultOptions),this.setOptions(o.options),this.observers=[],oe(this,Dn,o.client),oe(this,Ut,N(this,Dn).getQueryCache()),this.queryKey=o.queryKey,this.queryHash=o.queryHash,oe(this,On,Cp(this.options)),this.state=o.state??N(this,On),this.scheduleGc()}get meta(){return this.options.meta}get queryType(){return N(this,Ps)}get promise(){var o;return(o=N(this,nt))==null?void 0:o.promise}setOptions(o){if(this.options={...N(this,Jo),...o},o!=null&&o._type&&oe(this,Ps,o._type),this.updateGcTime(this.options.gcTime),this.state&&this.state.data===void 0){const a=Cp(this.options);a.data!==void 0&&(this.setState(Sp(a.data,a.dataUpdatedAt)),oe(this,On,a))}}optionalRemove(){!this.observers.length&&this.state.fetchStatus==="idle"&&N(this,Ut).remove(this)}setData(o,a){const d=Hd(this.state.data,o,this.options);return Me(this,Rt,yr).call(this,{data:d,type:"success",dataUpdatedAt:a==null?void 0:a.updatedAt,manual:a==null?void 0:a.manual}),d}setState(o){Me(this,Rt,yr).call(this,{type:"setState",state:o})}cancel(o){var d,u;const a=(d=N(this,nt))==null?void 0:d.promise;return(u=N(this,nt))==null||u.cancel(o),a?a.then(Nt).catch(Nt):Promise.resolve()}destroy(){super.destroy(),this.cancel({silent:!0})}get resetState(){return N(this,On)}reset(){this.destroy(),this.setState(this.resetState)}isActive(){return this.observers.some(o=>Ot(o.options.enabled,this)!==!1)}isDisabled(){return this.getObserversCount()>0?!this.isActive():this.options.queryFn===xc||!this.isFetched()}isFetched(){return this.state.dataUpdateCount+this.state.errorUpdateCount>0}isStatic(){return this.getObserversCount()>0?this.observers.some(o=>on(o.options.staleTime,this)==="static"):!1}isStale(){return this.getObserversCount()>0?this.observers.some(o=>o.getCurrentResult().isStale):this.state.data===void 0||this.state.isInvalidated}isStaleByTime(o=0){return this.state.data===void 0?!0:o==="static"?!1:this.state.isInvalidated?!0:!xm(this.state.dataUpdatedAt,o)}onFocus(){var a;const o=this.observers.find(d=>d.shouldFetchOnWindowFocus());o==null||o.refetch({cancelRefetch:!1}),(a=N(this,nt))==null||a.continue()}onOnline(){var a;const o=this.observers.find(d=>d.shouldFetchOnReconnect());o==null||o.refetch({cancelRefetch:!1}),(a=N(this,nt))==null||a.continue()}addObserver(o){this.observers.includes(o)||(this.observers.push(o),this.clearGcTimeout(),N(this,Ut).notify({type:"observerAdded",query:this,observer:o}))}removeObserver(o){this.observers.includes(o)&&(this.observers=this.observers.filter(a=>a!==o),this.observers.length||(N(this,nt)&&(N(this,An)||Me(this,Rt,km).call(this)?N(this,nt).cancel({revert:!0}):N(this,nt).cancelRetry()),this.scheduleGc()),N(this,Ut).notify({type:"observerRemoved",query:this,observer:o}))}getObserversCount(){return this.observers.length}invalidate(){this.state.isInvalidated||Me(this,Rt,yr).call(this,{type:"invalidate"})}async fetch(o,a){var x,b,w,P,R,D,E,k,C,I,B;if(this.state.fetchStatus!=="idle"&&((x=N(this,nt))==null?void 0:x.status())!=="rejected"){if(this.state.data!==void 0&&(a!=null&&a.cancelRefetch))this.cancel({silent:!0});else if(N(this,nt))return N(this,nt).continueRetry(),N(this,nt).promise}if(o&&this.setOptions(o),!this.options.queryFn){const z=this.observers.find($=>$.options.queryFn);z&&this.setOptions(z.options)}const d=new AbortController,u=z=>{Object.defineProperty(z,"signal",{enumerable:!0,get:()=>(oe(this,An,!0),d.signal)})},f=()=>{const z=vm(this.options,a),L=(()=>{const H={client:N(this,Dn),queryKey:this.queryKey,meta:this.meta};return u(H),H})();return oe(this,An,!1),this.options.persister?this.options.persister(z,L,this):z(L)},p=(()=>{const z={fetchOptions:a,options:this.options,queryKey:this.queryKey,client:N(this,Dn),state:this.state,fetchFn:f};return u(z),z})(),v=N(this,Ps)==="infinite"?Kg(this.options.pages):this.options.behavior;v==null||v.onFetch(p,this),oe(this,Rs,this.state),(this.state.fetchStatus==="idle"||this.state.fetchMeta!==((b=p.fetchOptions)==null?void 0:b.meta))&&Me(this,Rt,yr).call(this,{type:"fetch",meta:(w=p.fetchOptions)==null?void 0:w.meta}),oe(this,nt,wm({initialPromise:a==null?void 0:a.initialPromise,fn:p.fetchFn,onCancel:z=>{z instanceof Vd&&z.revert&&this.setState({...N(this,Rs),fetchStatus:"idle"}),d.abort()},onFail:(z,$)=>{Me(this,Rt,yr).call(this,{type:"failed",failureCount:z,error:$})},onPause:()=>{Me(this,Rt,yr).call(this,{type:"pause"})},onContinue:()=>{Me(this,Rt,yr).call(this,{type:"continue"})},retry:p.options.retry,retryDelay:p.options.retryDelay,networkMode:p.options.networkMode,canRun:()=>!0}));try{const z=await N(this,nt).start();if(z===void 0)throw new Error(`${this.queryHash} data is undefined`);return this.setData(z),(R=(P=N(this,Ut).config).onSuccess)==null||R.call(P,z,this),(E=(D=N(this,Ut).config).onSettled)==null||E.call(D,z,this.state.error,this),z}catch(z){if(z instanceof Vd){if(z.silent)return N(this,nt).promise;if(z.revert){if(this.state.data===void 0)throw z;return this.state.data}}throw Me(this,Rt,yr).call(this,{type:"error",error:z}),(C=(k=N(this,Ut).config).onError)==null||C.call(k,z,this),(B=(I=N(this,Ut).config).onSettled)==null||B.call(I,this.state.data,z,this),z}finally{this.scheduleGc()}}},Ps=new WeakMap,On=new WeakMap,Rs=new WeakMap,Ut=new WeakMap,Dn=new WeakMap,nt=new WeakMap,Jo=new WeakMap,An=new WeakMap,Rt=new WeakSet,km=function(){return this.state.fetchStatus==="paused"&&this.state.status==="pending"},yr=function(o){const a=d=>{switch(o.type){case"failed":return{...d,fetchFailureCount:o.failureCount,fetchFailureReason:o.error};case"pause":return{...d,fetchStatus:"paused"};case"continue":return{...d,fetchStatus:"fetching"};case"fetch":return{...d,...Nm(d.data,this.options),fetchMeta:o.meta??null};case"success":const u={...d,...Sp(o.data,o.dataUpdatedAt),dataUpdateCount:d.dataUpdateCount+1,...!o.manual&&{fetchStatus:"idle",fetchFailureCount:0,fetchFailureReason:null}};return oe(this,Rs,o.manual?u:void 0),u;case"error":const f=o.error;return{...d,error:f,errorUpdateCount:d.errorUpdateCount+1,errorUpdatedAt:Date.now(),fetchFailureCount:d.fetchFailureCount+1,fetchFailureReason:f,fetchStatus:"idle",status:"error",isInvalidated:!0};case"invalidate":return{...d,isInvalidated:!0};case"setState":return{...d,...o.state}}};this.state=a(this.state),lt.batch(()=>{this.observers.forEach(d=>{d.onQueryUpdate()}),N(this,Ut).notify({query:this,type:"updated",action:o})})},am);function Nm(s,o){return{fetchFailureCount:0,fetchFailureReason:null,fetchStatus:bm(o.networkMode)?"fetching":"paused",...s===void 0&&{error:null,status:"pending"}}}function Sp(s,o){return{data:s,dataUpdatedAt:o??Date.now(),error:null,isInvalidated:!1,status:"success"}}function Cp(s){const o=typeof s.initialData=="function"?s.initialData():s.initialData,a=o!==void 0,d=a?typeof s.initialDataUpdatedAt=="function"?s.initialDataUpdatedAt():s.initialDataUpdatedAt:0;return{data:o,dataUpdateCount:0,dataUpdatedAt:a?d??Date.now():0,error:null,errorUpdateCount:0,errorUpdatedAt:0,fetchFailureCount:0,fetchFailureReason:null,fetchMeta:null,isInvalidated:!1,status:a?"success":"pending",fetchStatus:"idle"}}var kt,Pe,Xo,ht,Tn,Os,br,en,el,Ds,As,zn,Ln,tn,Ts,ze,Io,Wd,Kd,Qd,qd,Zd,Yd,Jd,Sm,im,Zg=(im=class extends nl{constructor(o,a){super();be(this,ze);be(this,kt);be(this,Pe);be(this,Xo);be(this,ht);be(this,Tn);be(this,Os);be(this,br);be(this,en);be(this,el);be(this,Ds);be(this,As);be(this,zn);be(this,Ln);be(this,tn);be(this,Ts,new Set);this.options=a,oe(this,kt,o),oe(this,en,null),oe(this,br,Gd()),this.bindMethods(),this.setOptions(a)}bindMethods(){this.refetch=this.refetch.bind(this)}onSubscribe(){this.listeners.size===1&&(N(this,Pe).addObserver(this),Ep(N(this,Pe),this.options)?Me(this,ze,Io).call(this):this.updateResult(),Me(this,ze,qd).call(this))}onUnsubscribe(){this.hasListeners()||this.destroy()}shouldFetchOnReconnect(){return Xd(N(this,Pe),this.options,this.options.refetchOnReconnect)}shouldFetchOnWindowFocus(){return Xd(N(this,Pe),this.options,this.options.refetchOnWindowFocus)}destroy(){this.listeners=new Set,Me(this,ze,Zd).call(this),Me(this,ze,Yd).call(this),N(this,Pe).removeObserver(this)}setOptions(o){const a=this.options,d=N(this,Pe);if(this.options=N(this,kt).defaultQueryOptions(o),this.options.enabled!==void 0&&typeof this.options.enabled!="boolean"&&typeof this.options.enabled!="function"&&typeof Ot(this.options.enabled,N(this,Pe))!="boolean")throw new Error("Expected enabled to be a boolean or a callback that returns a boolean");Me(this,ze,Jd).call(this),N(this,Pe).setOptions(this.options),a._defaulted&&!Ud(this.options,a)&&N(this,kt).getQueryCache().notify({type:"observerOptionsUpdated",query:N(this,Pe),observer:this});const u=this.hasListeners();u&&_p(N(this,Pe),d,this.options,a)&&Me(this,ze,Io).call(this),this.updateResult(),u&&(N(this,Pe)!==d||Ot(this.options.enabled,N(this,Pe))!==Ot(a.enabled,N(this,Pe))||on(this.options.staleTime,N(this,Pe))!==on(a.staleTime,N(this,Pe)))&&Me(this,ze,Wd).call(this);const f=Me(this,ze,Kd).call(this);u&&(N(this,Pe)!==d||Ot(this.options.enabled,N(this,Pe))!==Ot(a.enabled,N(this,Pe))||f!==N(this,tn))&&Me(this,ze,Qd).call(this,f)}getOptimisticResult(o){const a=N(this,kt).getQueryCache().build(N(this,kt),o),d=this.createResult(a,o);return Jg(this,d)&&(oe(this,ht,d),oe(this,Os,this.options),oe(this,Tn,N(this,Pe).state)),d}getCurrentResult(){return N(this,ht)}trackResult(o,a){return new Proxy(o,{get:(d,u)=>(this.trackProp(u),a==null||a(u),u==="promise"&&(this.trackProp("data"),!this.options.experimental_prefetchInRender&&N(this,br).status==="pending"&&N(this,br).reject(new Error("experimental_prefetchInRender feature flag is not enabled"))),Reflect.get(d,u))})}trackProp(o){N(this,Ts).add(o)}getCurrentQuery(){return N(this,Pe)}refetch({...o}={}){return this.fetch({...o})}fetchOptimistic(o){const a=N(this,kt).defaultQueryOptions(o),d=N(this,kt).getQueryCache().build(N(this,kt),a);return d.fetch().then(()=>this.createResult(d,a))}fetch(o){return Me(this,ze,Io).call(this,{...o,cancelRefetch:o.cancelRefetch??!0}).then(()=>(this.updateResult(),N(this,ht)))}createResult(o,a){var le;const d=N(this,Pe),u=this.options,f=N(this,ht),h=N(this,Tn),p=N(this,Os),x=o!==d?o.state:N(this,Xo),{state:b}=o;let w={...b},P=!1,R;if(a._optimisticResults){const he=this.hasListeners(),Q=!he&&Ep(o,a),ne=he&&_p(o,d,a,u);(Q||ne)&&(w={...w,...Nm(b.data,o.options)}),a._optimisticResults==="isRestoring"&&(w.fetchStatus="idle")}let{error:D,errorUpdatedAt:E,status:k}=w;R=w.data;let C=!1;if(a.placeholderData!==void 0&&R===void 0&&k==="pending"){let he;f!=null&&f.isPlaceholderData&&a.placeholderData===(p==null?void 0:p.placeholderData)?(he=f.data,C=!0):he=typeof a.placeholderData=="function"?a.placeholderData((le=N(this,As))==null?void 0:le.state.data,N(this,As)):a.placeholderData,he!==void 0&&(k="success",R=Hd(f==null?void 0:f.data,he,a),P=!0)}if(a.select&&R!==void 0&&!C)if(f&&R===(h==null?void 0:h.data)&&a.select===N(this,el))R=N(this,Ds);else try{oe(this,el,a.select),R=a.select(R),R=Hd(f==null?void 0:f.data,R,a),oe(this,Ds,R),oe(this,en,null)}catch(he){oe(this,en,he)}N(this,en)&&(D=N(this,en),R=N(this,Ds),E=Date.now(),k="error");const I=w.fetchStatus==="fetching",B=k==="pending",z=k==="error",$=B&&I,L=R!==void 0,re={status:k,fetchStatus:w.fetchStatus,isPending:B,isSuccess:k==="success",isError:z,isInitialLoading:$,isLoading:$,data:R,dataUpdatedAt:w.dataUpdatedAt,error:D,errorUpdatedAt:E,failureCount:w.fetchFailureCount,failureReason:w.fetchFailureReason,errorUpdateCount:w.errorUpdateCount,isFetched:o.isFetched(),isFetchedAfterMount:w.dataUpdateCount>x.dataUpdateCount||w.errorUpdateCount>x.errorUpdateCount,isFetching:I,isRefetching:I&&!B,isLoadingError:z&&!L,isPaused:w.fetchStatus==="paused",isPlaceholderData:P,isRefetchError:z&&L,isStale:gc(o,a),refetch:this.refetch,promise:N(this,br),isEnabled:Ot(a.enabled,o)!==!1};if(this.options.experimental_prefetchInRender){const he=re.data!==void 0,Q=re.status==="error"&&!he,ne=Oe=>{Q?Oe.reject(re.error):he&&Oe.resolve(re.data)},Ne=()=>{const Oe=oe(this,br,re.promise=Gd());ne(Oe)},Ce=N(this,br);switch(Ce.status){case"pending":o.queryHash===d.queryHash&&ne(Ce);break;case"fulfilled":(Q||re.data!==Ce.value)&&Ne();break;case"rejected":(!Q||re.error!==Ce.reason)&&Ne();break}}return re}updateResult(){const o=N(this,ht),a=this.createResult(N(this,Pe),this.options);if(oe(this,Tn,N(this,Pe).state),oe(this,Os,this.options),N(this,Tn).data!==void 0&&oe(this,As,N(this,Pe)),Ud(a,o))return;oe(this,ht,a);const d=()=>{if(!o)return!0;const{notifyOnChangeProps:u}=this.options,f=typeof u=="function"?u():u;if(f==="all"||!f&&!N(this,Ts).size)return!0;const h=new Set(f??N(this,Ts));return this.options.throwOnError&&h.add("error"),Object.keys(N(this,ht)).some(p=>{const v=p;return N(this,ht)[v]!==o[v]&&h.has(v)})};Me(this,ze,Sm).call(this,{listeners:d()})}onQueryUpdate(){this.updateResult(),this.hasListeners()&&Me(this,ze,qd).call(this)}},kt=new WeakMap,Pe=new WeakMap,Xo=new WeakMap,ht=new WeakMap,Tn=new WeakMap,Os=new WeakMap,br=new WeakMap,en=new WeakMap,el=new WeakMap,Ds=new WeakMap,As=new WeakMap,zn=new WeakMap,Ln=new WeakMap,tn=new WeakMap,Ts=new WeakMap,ze=new WeakSet,Io=function(o){Me(this,ze,Jd).call(this);let a=N(this,Pe).fetch(this.options,o);return o!=null&&o.throwOnError||(a=a.catch(Nt)),a},Wd=function(){Me(this,ze,Zd).call(this);const o=on(this.options.staleTime,N(this,Pe));if(Bo.isServer()||N(this,ht).isStale||!$d(o))return;const d=xm(N(this,ht).dataUpdatedAt,o)+1;oe(this,zn,Mn.setTimeout(()=>{N(this,ht).isStale||this.updateResult()},d))},Kd=function(){return(typeof this.options.refetchInterval=="function"?this.options.refetchInterval(N(this,Pe)):this.options.refetchInterval)??!1},Qd=function(o){Me(this,ze,Yd).call(this),oe(this,tn,o),!(Bo.isServer()||Ot(this.options.enabled,N(this,Pe))===!1||!$d(N(this,tn))||N(this,tn)===0)&&oe(this,Ln,Mn.setInterval(()=>{(this.options.refetchIntervalInBackground||mc.isFocused())&&Me(this,ze,Io).call(this)},N(this,tn)))},qd=function(){Me(this,ze,Wd).call(this),Me(this,ze,Qd).call(this,Me(this,ze,Kd).call(this))},Zd=function(){N(this,zn)!==void 0&&(Mn.clearTimeout(N(this,zn)),oe(this,zn,void 0))},Yd=function(){N(this,Ln)!==void 0&&(Mn.clearInterval(N(this,Ln)),oe(this,Ln,void 0))},Jd=function(){const o=N(this,kt).getQueryCache().build(N(this,kt),this.options);if(o===N(this,Pe))return;const a=N(this,Pe);oe(this,Pe,o),oe(this,Xo,o.state),this.hasListeners()&&(a==null||a.removeObserver(this),o.addObserver(this))},Sm=function(o){lt.batch(()=>{o.listeners&&this.listeners.forEach(a=>{a(N(this,ht))}),N(this,kt).getQueryCache().notify({query:N(this,Pe),type:"observerResultsUpdated"})})},im);function Yg(s,o){return Ot(o.enabled,s)!==!1&&s.state.data===void 0&&!(s.state.status==="error"&&Ot(o.retryOnMount,s)===!1)}function Ep(s,o){return Yg(s,o)||s.state.data!==void 0&&Xd(s,o,o.refetchOnMount)}function Xd(s,o,a){if(Ot(o.enabled,s)!==!1&&on(o.staleTime,s)!=="static"){const d=typeof a=="function"?a(s):a;return d==="always"||d!==!1&&gc(s,o)}return!1}function _p(s,o,a,d){return(s!==o||Ot(d.enabled,s)===!1)&&(!a.suspense||s.state.status!=="error")&&gc(s,a)}function gc(s,o){return Ot(o.enabled,s)!==!1&&s.isStaleByTime(on(o.staleTime,s))}function Jg(s,o){return!Ud(s.getCurrentResult(),o)}var tl,sr,ft,Fn,or,qr,dm,Xg=(dm=class extends jm{constructor(o){super();be(this,or);be(this,tl);be(this,sr);be(this,ft);be(this,Fn);oe(this,tl,o.client),this.mutationId=o.mutationId,oe(this,ft,o.mutationCache),oe(this,sr,[]),this.state=o.state||e0(),this.setOptions(o.options),this.scheduleGc()}setOptions(o){this.options=o,this.updateGcTime(this.options.gcTime)}get meta(){return this.options.meta}addObserver(o){N(this,sr).includes(o)||(N(this,sr).push(o),this.clearGcTimeout(),N(this,ft).notify({type:"observerAdded",mutation:this,observer:o}))}removeObserver(o){oe(this,sr,N(this,sr).filter(a=>a!==o)),this.scheduleGc(),N(this,ft).notify({type:"observerRemoved",mutation:this,observer:o})}optionalRemove(){N(this,sr).length||(this.state.status==="pending"?this.scheduleGc():N(this,ft).remove(this))}continue(){var o;return((o=N(this,Fn))==null?void 0:o.continue())??this.execute(this.state.variables)}async execute(o){var h,p,v,x,b,w,P,R,D,E,k,C,I,B,z,$,L,H;const a=()=>{Me(this,or,qr).call(this,{type:"continue"})},d={client:N(this,tl),meta:this.options.meta,mutationKey:this.options.mutationKey};oe(this,Fn,wm({fn:()=>this.options.mutationFn?this.options.mutationFn(o,d):Promise.reject(new Error("No mutationFn found")),onFail:(re,le)=>{Me(this,or,qr).call(this,{type:"failed",failureCount:re,error:le})},onPause:()=>{Me(this,or,qr).call(this,{type:"pause"})},onContinue:a,retry:this.options.retry??0,retryDelay:this.options.retryDelay,networkMode:this.options.networkMode,canRun:()=>N(this,ft).canRun(this)}));const u=this.state.status==="pending",f=!N(this,Fn).canStart();try{if(u)a();else{Me(this,or,qr).call(this,{type:"pending",variables:o,isPaused:f}),N(this,ft).config.onMutate&&await N(this,ft).config.onMutate(o,this,d);const le=await((p=(h=this.options).onMutate)==null?void 0:p.call(h,o,d));le!==this.state.context&&Me(this,or,qr).call(this,{type:"pending",context:le,variables:o,isPaused:f})}const re=await N(this,Fn).start();return await((x=(v=N(this,ft).config).onSuccess)==null?void 0:x.call(v,re,o,this.state.context,this,d)),await((w=(b=this.options).onSuccess)==null?void 0:w.call(b,re,o,this.state.context,d)),await((R=(P=N(this,ft).config).onSettled)==null?void 0:R.call(P,re,null,this.state.variables,this.state.context,this,d)),await((E=(D=this.options).onSettled)==null?void 0:E.call(D,re,null,o,this.state.context,d)),Me(this,or,qr).call(this,{type:"success",data:re}),re}catch(re){try{await((C=(k=N(this,ft).config).onError)==null?void 0:C.call(k,re,o,this.state.context,this,d))}catch(le){Promise.reject(le)}try{await((B=(I=this.options).onError)==null?void 0:B.call(I,re,o,this.state.context,d))}catch(le){Promise.reject(le)}try{await(($=(z=N(this,ft).config).onSettled)==null?void 0:$.call(z,void 0,re,this.state.variables,this.state.context,this,d))}catch(le){Promise.reject(le)}try{await((H=(L=this.options).onSettled)==null?void 0:H.call(L,void 0,re,o,this.state.context,d))}catch(le){Promise.reject(le)}throw Me(this,or,qr).call(this,{type:"error",error:re}),re}finally{N(this,ft).runNext(this)}}},tl=new WeakMap,sr=new WeakMap,ft=new WeakMap,Fn=new WeakMap,or=new WeakSet,qr=function(o){const a=d=>{switch(o.type){case"failed":return{...d,failureCount:o.failureCount,failureReason:o.error};case"pause":return{...d,isPaused:!0};case"continue":return{...d,isPaused:!1};case"pending":return{...d,context:o.context,data:void 0,failureCount:0,failureReason:null,error:null,isPaused:o.isPaused,status:"pending",variables:o.variables,submittedAt:Date.now()};case"success":return{...d,data:o.data,failureCount:0,failureReason:null,error:null,status:"success",isPaused:!1};case"error":return{...d,data:void 0,error:o.error,failureCount:d.failureCount+1,failureReason:o.error,isPaused:!1,status:"error"}}};this.state=a(this.state),lt.batch(()=>{N(this,sr).forEach(d=>{d.onMutationUpdate(o)}),N(this,ft).notify({mutation:this,type:"updated",action:o})})},dm);function e0(){return{context:void 0,data:void 0,error:null,failureCount:0,failureReason:null,isPaused:!1,status:"idle",variables:void 0,submittedAt:0}}var wr,qt,rl,cm,t0=(cm=class extends nl{constructor(o={}){super();be(this,wr);be(this,qt);be(this,rl);this.config=o,oe(this,wr,new Set),oe(this,qt,new Map),oe(this,rl,0)}build(o,a,d){const u=new Xg({client:o,mutationCache:this,mutationId:++ma(this,rl)._,options:o.defaultMutationOptions(a),state:d});return this.add(u),u}add(o){N(this,wr).add(o);const a=xa(o);if(typeof a=="string"){const d=N(this,qt).get(a);d?d.push(o):N(this,qt).set(a,[o])}this.notify({type:"added",mutation:o})}remove(o){if(N(this,wr).delete(o)){const a=xa(o);if(typeof a=="string"){const d=N(this,qt).get(a);if(d)if(d.length>1){const u=d.indexOf(o);u!==-1&&d.splice(u,1)}else d[0]===o&&N(this,qt).delete(a)}}this.notify({type:"removed",mutation:o})}canRun(o){const a=xa(o);if(typeof a=="string"){const d=N(this,qt).get(a),u=d==null?void 0:d.find(f=>f.state.status==="pending");return!u||u===o}else return!0}runNext(o){var d;const a=xa(o);if(typeof a=="string"){const u=(d=N(this,qt).get(a))==null?void 0:d.find(f=>f!==o&&f.state.isPaused);return(u==null?void 0:u.continue())??Promise.resolve()}else return Promise.resolve()}clear(){lt.batch(()=>{N(this,wr).forEach(o=>{this.notify({type:"removed",mutation:o})}),N(this,wr).clear(),N(this,qt).clear()})}getAll(){return Array.from(N(this,wr))}find(o){const a={exact:!0,...o};return this.getAll().find(d=>wp(a,d))}findAll(o={}){return this.getAll().filter(a=>wp(o,a))}notify(o){lt.batch(()=>{this.listeners.forEach(a=>{a(o)})})}resumePausedMutations(){const o=this.getAll().filter(a=>a.state.isPaused);return lt.batch(()=>Promise.all(o.map(a=>a.continue().catch(Nt))))}},wr=new WeakMap,qt=new WeakMap,rl=new WeakMap,cm);function xa(s){var o;return(o=s.options.scope)==null?void 0:o.id}var lr,um,r0=(um=class extends nl{constructor(o={}){super();be(this,lr);this.config=o,oe(this,lr,new Map)}build(o,a,d){const u=a.queryKey,f=a.queryHash??hc(u,a);let h=this.get(f);return h||(h=new qg({client:o,queryKey:u,queryHash:f,options:o.defaultQueryOptions(a),state:d,defaultOptions:o.getQueryDefaults(u)}),this.add(h)),h}add(o){N(this,lr).has(o.queryHash)||(N(this,lr).set(o.queryHash,o),this.notify({type:"added",query:o}))}remove(o){const a=N(this,lr).get(o.queryHash);a&&(o.destroy(),a===o&&N(this,lr).delete(o.queryHash),this.notify({type:"removed",query:o}))}clear(){lt.batch(()=>{this.getAll().forEach(o=>{this.remove(o)})})}get(o){return N(this,lr).get(o)}getAll(){return[...N(this,lr).values()]}find(o){const a={exact:!0,...o};return this.getAll().find(d=>bp(a,d))}findAll(o={}){const a=this.getAll();return Object.keys(o).length>0?a.filter(d=>bp(o,d)):a}notify(o){lt.batch(()=>{this.listeners.forEach(a=>{a(o)})})}onFocus(){lt.batch(()=>{this.getAll().forEach(o=>{o.onFocus()})})}onOnline(){lt.batch(()=>{this.getAll().forEach(o=>{o.onOnline()})})}},lr=new WeakMap,um),Ke,rn,nn,zs,Ls,sn,Fs,Is,fm,n0=(fm=class{constructor(s={}){be(this,Ke);be(this,rn);be(this,nn);be(this,zs);be(this,Ls);be(this,sn);be(this,Fs);be(this,Is);oe(this,Ke,s.queryCache||new r0),oe(this,rn,s.mutationCache||new t0),oe(this,nn,s.defaultOptions||{}),oe(this,zs,new Map),oe(this,Ls,new Map),oe(this,sn,0)}mount(){ma(this,sn)._++,N(this,sn)===1&&(oe(this,Fs,mc.subscribe(async s=>{s&&(await this.resumePausedMutations(),N(this,Ke).onFocus())})),oe(this,Is,Pa.subscribe(async s=>{s&&(await this.resumePausedMutations(),N(this,Ke).onOnline())})))}unmount(){var s,o;ma(this,sn)._--,N(this,sn)===0&&((s=N(this,Fs))==null||s.call(this),oe(this,Fs,void 0),(o=N(this,Is))==null||o.call(this),oe(this,Is,void 0))}isFetching(s){return N(this,Ke).findAll({...s,fetchStatus:"fetching"}).length}isMutating(s){return N(this,rn).findAll({...s,status:"pending"}).length}getQueryData(s){var a;const o=this.defaultQueryOptions({queryKey:s});return(a=N(this,Ke).get(o.queryHash))==null?void 0:a.state.data}ensureQueryData(s){const o=this.defaultQueryOptions(s),a=N(this,Ke).build(this,o),d=a.state.data;return d===void 0?this.fetchQuery(s):(s.revalidateIfStale&&a.isStaleByTime(on(o.staleTime,a))&&this.prefetchQuery(o),Promise.resolve(d))}getQueriesData(s){return N(this,Ke).findAll(s).map(({queryKey:o,state:a})=>{const d=a.data;return[o,d]})}setQueryData(s,o,a){const d=this.defaultQueryOptions({queryKey:s}),u=N(this,Ke).get(d.queryHash),f=u==null?void 0:u.state.data,h=Lg(o,f);if(h!==void 0)return N(this,Ke).build(this,d).setData(h,{...a,manual:!0})}setQueriesData(s,o,a){return lt.batch(()=>N(this,Ke).findAll(s).map(({queryKey:d})=>[d,this.setQueryData(d,o,a)]))}getQueryState(s){var a;const o=this.defaultQueryOptions({queryKey:s});return(a=N(this,Ke).get(o.queryHash))==null?void 0:a.state}removeQueries(s){const o=N(this,Ke);lt.batch(()=>{o.findAll(s).forEach(a=>{o.remove(a)})})}resetQueries(s,o){const a=N(this,Ke);return lt.batch(()=>(a.findAll(s).forEach(d=>{d.reset()}),this.refetchQueries({type:"active",...s},o)))}cancelQueries(s,o={}){const a={revert:!0,...o},d=lt.batch(()=>N(this,Ke).findAll(s).map(u=>u.cancel(a)));return Promise.all(d).then(Nt).catch(Nt)}invalidateQueries(s,o={}){return lt.batch(()=>(N(this,Ke).findAll(s).forEach(a=>{a.invalidate()}),(s==null?void 0:s.refetchType)==="none"?Promise.resolve():this.refetchQueries({...s,type:(s==null?void 0:s.refetchType)??(s==null?void 0:s.type)??"active"},o)))}refetchQueries(s,o={}){const a={...o,cancelRefetch:o.cancelRefetch??!0},d=lt.batch(()=>N(this,Ke).findAll(s).filter(u=>!u.isDisabled()&&!u.isStatic()).map(u=>{let f=u.fetch(void 0,a);return a.throwOnError||(f=f.catch(Nt)),u.state.fetchStatus==="paused"?Promise.resolve():f}));return Promise.all(d).then(Nt)}fetchQuery(s){const o=this.defaultQueryOptions(s);o.retry===void 0&&(o.retry=!1);const a=N(this,Ke).build(this,o);return a.isStaleByTime(on(o.staleTime,a))?a.fetch(o):Promise.resolve(a.state.data)}prefetchQuery(s){return this.fetchQuery(s).then(Nt).catch(Nt)}fetchInfiniteQuery(s){return s._type="infinite",this.fetchQuery(s)}prefetchInfiniteQuery(s){return this.fetchInfiniteQuery(s).then(Nt).catch(Nt)}ensureInfiniteQueryData(s){return s._type="infinite",this.ensureQueryData(s)}resumePausedMutations(){return Pa.isOnline()?N(this,rn).resumePausedMutations():Promise.resolve()}getQueryCache(){return N(this,Ke)}getMutationCache(){return N(this,rn)}getDefaultOptions(){return N(this,nn)}setDefaultOptions(s){oe(this,nn,s)}setQueryDefaults(s,o){N(this,zs).set($o(s),{queryKey:s,defaultOptions:o})}getQueryDefaults(s){const o=[...N(this,zs).values()],a={};return o.forEach(d=>{Uo(s,d.queryKey)&&Object.assign(a,d.defaultOptions)}),a}setMutationDefaults(s,o){N(this,Ls).set($o(s),{mutationKey:s,defaultOptions:o})}getMutationDefaults(s){const o=[...N(this,Ls).values()],a={};return o.forEach(d=>{Uo(s,d.mutationKey)&&Object.assign(a,d.defaultOptions)}),a}defaultQueryOptions(s){if(s._defaulted)return s;const o={...N(this,nn).queries,...this.getQueryDefaults(s.queryKey),...s,_defaulted:!0};return o.queryHash||(o.queryHash=hc(o.queryKey,o)),o.refetchOnReconnect===void 0&&(o.refetchOnReconnect=o.networkMode!=="always"),o.throwOnError===void 0&&(o.throwOnError=!!o.suspense),!o.networkMode&&o.persister&&(o.networkMode="offlineFirst"),o.queryFn===xc&&(o.enabled=!1),o}defaultMutationOptions(s){return s!=null&&s._defaulted?s:{...N(this,nn).mutations,...(s==null?void 0:s.mutationKey)&&this.getMutationDefaults(s.mutationKey),...s,_defaulted:!0}}clear(){N(this,Ke).clear(),N(this,rn).clear()}},Ke=new WeakMap,rn=new WeakMap,nn=new WeakMap,zs=new WeakMap,Ls=new WeakMap,sn=new WeakMap,Fs=new WeakMap,Is=new WeakMap,fm),Cm=g.createContext(void 0),cn=s=>{const o=g.useContext(Cm);if(!o)throw new Error("No QueryClient set, use QueryClientProvider to set one");return o},s0=({client:s,children:o})=>(g.useEffect(()=>(s.mount(),()=>{s.unmount()}),[s]),r.jsx(Cm.Provider,{value:s,children:o})),Em=g.createContext(!1),o0=()=>g.useContext(Em);Em.Provider;function l0(){let s=!1;return{clearReset:()=>{s=!1},reset:()=>{s=!0},isReset:()=>s}}var a0=g.createContext(l0()),i0=()=>g.useContext(a0),d0=(s,o,a)=>{const d=a!=null&&a.state.error&&typeof s.throwOnError=="function"?ym(s.throwOnError,[a.state.error,a]):s.throwOnError;(s.suspense||s.experimental_prefetchInRender||d)&&(o.isReset()||(s.retryOnMount=!1))},c0=s=>{g.useEffect(()=>{s.clearReset()},[s])},u0=({result:s,errorResetBoundary:o,throwOnError:a,query:d,suspense:u})=>s.isError&&!o.isReset()&&!s.isFetching&&d&&(u&&s.data===void 0||ym(a,[s.error,d])),f0=s=>{if(s.suspense){const a=u=>u==="static"?u:Math.max(u??1e3,1e3),d=s.staleTime;s.staleTime=typeof d=="function"?(...u)=>a(d(...u)):a(d),typeof s.gcTime=="number"&&(s.gcTime=Math.max(s.gcTime,1e3))}},p0=(s,o)=>s.isLoading&&s.isFetching&&!o,m0=(s,o)=>(s==null?void 0:s.suspense)&&o.isPending,Mp=(s,o,a)=>o.fetchOptimistic(s).catch(()=>{a.clearReset()});function h0(s,o,a){var R,D,E,k;const d=o0(),u=i0(),f=cn(),h=f.defaultQueryOptions(s);(D=(R=f.getDefaultOptions().queries)==null?void 0:R._experimental_beforeQuery)==null||D.call(R,h);const p=f.getQueryCache().get(h.queryHash),v=s.subscribed!==!1;h._optimisticResults=d?"isRestoring":v?"optimistic":void 0,f0(h),d0(h,u,p),c0(u);const x=!f.getQueryCache().get(h.queryHash),[b]=g.useState(()=>new o(f,h)),w=b.getOptimisticResult(h),P=!d&&v;if(g.useSyncExternalStore(g.useCallback(C=>{const I=P?b.subscribe(lt.batchCalls(C)):Nt;return b.updateResult(),I},[b,P]),()=>b.getCurrentResult(),()=>b.getCurrentResult()),g.useEffect(()=>{b.setOptions(h)},[h,b]),m0(h,w))throw Mp(h,b,u);if(u0({result:w,errorResetBoundary:u,throwOnError:h.throwOnError,query:p,suspense:h.suspense}))throw w.error;if((k=(E=f.getDefaultOptions().queries)==null?void 0:E._experimental_afterQuery)==null||k.call(E,h,w),h.experimental_prefetchInRender&&!Bo.isServer()&&p0(w,d)){const C=x?Mp(h,b,u):p==null?void 0:p.promise;C==null||C.catch(Nt).finally(()=>{b.updateResult()})}return h.notifyOnChangeProps?w:b.trackResult(w)}function Ct(s,o){return h0(s,Zg)}/** - * @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=s=>s.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),_m=(...s)=>s.filter((o,a,d)=>!!o&&o.trim()!==""&&d.indexOf(o)===a).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 g0={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 v0=g.forwardRef(({color:s="currentColor",size:o=24,strokeWidth:a=2,absoluteStrokeWidth:d,className:u="",children:f,iconNode:h,...p},v)=>g.createElement("svg",{ref:v,...g0,width:o,height:o,stroke:s,strokeWidth:d?Number(a)*24/Number(o):a,className:_m("lucide",u),...p},[...h.map(([x,b])=>g.createElement(x,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=(s,o)=>{const a=g.forwardRef(({className:d,...u},f)=>g.createElement(v0,{ref:f,iconNode:o,className:_m(`lucide-${x0(s)}`,d),...u}));return a.displayName=`${s}`,a};/** - * @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 Ho=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 Pp=me("ArrowRight",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"m12 5 7 7-7 7",key:"xquz4c"}]]);/** - * @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 Mm=me("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 $s=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 y0=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 Go=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 ir=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 b0=me("ChevronDown",[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]]);/** - * @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 w0=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 j0=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 k0=me("ChevronUp",[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]]);/** - * @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 N0=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 S0=me("Clock",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["polyline",{points:"12 6 12 12 16 14",key:"68esgv"}]]);/** - * @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 ec=me("Code",[["polyline",{points:"16 18 22 12 16 6",key:"z7tu5w"}],["polyline",{points:"8 6 2 12 8 18",key:"1eg1df"}]]);/** - * @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 C0=me("Coins",[["circle",{cx:"8",cy:"8",r:"6",key:"3yglwk"}],["path",{d:"M18.09 10.37A6 6 0 1 1 10.34 18",key:"t5s6rm"}],["path",{d:"M7 6h1v4",key:"1obek4"}],["path",{d:"m16.71 13.88.7.71-2.82 2.82",key:"1rbuyh"}]]);/** - * @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 E0=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 tc=me("Compass",[["path",{d:"m16.24 7.76-1.804 5.411a2 2 0 0 1-1.265 1.265L7.76 16.24l1.804-5.411a2 2 0 0 1 1.265-1.265z",key:"9ktpf1"}],["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]]);/** - * @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 _0=me("Construction",[["rect",{x:"2",y:"6",width:"20",height:"8",rx:"1",key:"1estib"}],["path",{d:"M17 14v7",key:"7m2elx"}],["path",{d:"M7 14v7",key:"1cm7wv"}],["path",{d:"M17 3v3",key:"1v4jwn"}],["path",{d:"M7 3v3",key:"7o6guu"}],["path",{d:"M10 14 2.3 6.3",key:"1023jk"}],["path",{d:"m14 6 7.7 7.7",key:"1s8pl2"}],["path",{d:"m8 6 8 8",key:"hl96qh"}]]);/** - * @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 Pm=me("Copy",[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2",key:"17jyea"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",key:"zix9uf"}]]);/** - * @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 Dt=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 an=me("Download",[["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["polyline",{points:"7 10 12 15 17 10",key:"2ggqvy"}],["line",{x1:"12",x2:"12",y1:"15",y2:"3",key:"1vk2je"}]]);/** - * @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 Ra=me("ExternalLink",[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"M10 14 21 3",key:"gplh6r"}],["path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6",key:"a6xqqp"}]]);/** - * @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 Rp=me("EyeOff",[["path",{d:"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49",key:"ct8e1f"}],["path",{d:"M14.084 14.158a3 3 0 0 1-4.242-4.242",key:"151rxh"}],["path",{d:"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143",key:"13bj9a"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]]);/** - * @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 rc=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 M0=me("FolderOpen",[["path",{d:"m6 14 1.5-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.54 6a2 2 0 0 1-1.95 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H18a2 2 0 0 1 2 2v2",key:"usdka0"}]]);/** - * @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 P0=me("Globe",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20",key:"13o1zl"}],["path",{d:"M2 12h20",key:"9i4pu4"}]]);/** - * @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 Ea=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 R0=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 O0=me("Key",[["path",{d:"m15.5 7.5 2.3 2.3a1 1 0 0 0 1.4 0l2.1-2.1a1 1 0 0 0 0-1.4L19 4",key:"g0fldk"}],["path",{d:"m21 2-9.6 9.6",key:"1j0ho8"}],["circle",{cx:"7.5",cy:"15.5",r:"5.5",key:"yqb3hr"}]]);/** - * @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 Vo=me("Layers",[["path",{d:"m12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83Z",key:"8b97xw"}],["path",{d:"m22 17.65-9.17 4.16a2 2 0 0 1-1.66 0L2 17.65",key:"dd6zsq"}],["path",{d:"m22 12.65-9.17 4.16a2 2 0 0 1-1.66 0L2 12.65",key:"ep9fru"}]]);/** - * @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 D0=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 A0=me("Monitor",[["rect",{width:"20",height:"14",x:"2",y:"3",rx:"2",key:"48i651"}],["line",{x1:"8",x2:"16",y1:"21",y2:"21",key:"1svkeh"}],["line",{x1:"12",x2:"12",y1:"17",y2:"21",key:"vw1qmm"}]]);/** - * @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 T0=me("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 z0=me("PenLine",[["path",{d:"M12 20h9",key:"t2du7b"}],["path",{d:"M16.376 3.622a1 1 0 0 1 3.002 3.002L7.368 18.635a2 2 0 0 1-.855.506l-2.872.838a.5.5 0 0 1-.62-.62l.838-2.872a2 2 0 0 1 .506-.854z",key:"1ykcvy"}]]);/** - * @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 L0=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 Rm=me("Plus",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]]);/** - * @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 Om=me("Power",[["path",{d:"M12 2v10",key:"mnfbl"}],["path",{d:"M18.4 6.6a9 9 0 1 1-12.77.04",key:"obofu9"}]]);/** - * @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 In=me("RefreshCw",[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]]);/** - * @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("Save",[["path",{d:"M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z",key:"1c8476"}],["path",{d:"M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7",key:"1ydtos"}],["path",{d:"M7 3v4a1 1 0 0 0 1 1h7",key:"t51u73"}]]);/** - * @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 I0=me("Scroll",[["path",{d:"M19 17V5a2 2 0 0 0-2-2H4",key:"zz82l3"}],["path",{d:"M8 21h12a2 2 0 0 0 2-2v-1a1 1 0 0 0-1-1H11a1 1 0 0 0-1 1v1a2 2 0 1 1-4 0V5a2 2 0 1 0-4 0v2a1 1 0 0 0 1 1h3",key:"1ph1d7"}]]);/** - * @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 vc=me("Search",[["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}],["path",{d:"m21 21-4.3-4.3",key:"1qie3q"}]]);/** - * @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 $0=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 U0=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 Us=me("Shield",[["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"}]]);/** - * @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 B0=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 Dm=me("Star",[["path",{d:"M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z",key:"r04s7s"}]]);/** - * @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 H0=me("Tag",[["path",{d:"M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z",key:"vktsd0"}],["circle",{cx:"7.5",cy:"7.5",r:".5",fill:"currentColor",key:"kqv944"}]]);/** - * @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 Oa=me("Terminal",[["polyline",{points:"4 17 10 11 4 5",key:"akl6gq"}],["line",{x1:"12",x2:"20",y1:"19",y2:"19",key:"q2wloq"}]]);/** - * @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 nc=me("Trash2",[["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6",key:"4alrt4"}],["path",{d:"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2",key:"v07s0e"}],["line",{x1:"10",x2:"10",y1:"11",y2:"17",key:"1uufr5"}],["line",{x1:"14",x2:"14",y1:"11",y2:"17",key:"xtxkd"}]]);/** - * @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 Wo=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 G0=me("User",[["path",{d:"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2",key:"975kel"}],["circle",{cx:"12",cy:"7",r:"4",key:"17ys0d"}]]);/** - * @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 Ko=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 jr=me("X",[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]]);/** - * @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 Qo=me("Zap",[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",key:"1xq2db"}]]),sc=[{id:"dashboard",label:"Zentrale",hint:"System- & Stack-Status",icon:D0},{id:"models",label:"Modell-Manager",hint:"Verwalten, laden & Gateway-Routing",icon:y0},{id:"system",label:"Diagnose",hint:"Metriken, Dienste, Logs",icon:Dt},{id:"memory",label:"Gedächtnis",hint:"Geteiltes Memory verwalten",icon:Go},{id:"connect",label:"Verbinden",hint:"IDE-/Agent-Configs erzeugen",icon:L0},{id:"agent",label:"Hermes",hint:"Agent-Status & AnythingLLM öffnen",icon:$s},{id:"guide",label:"Anleitung",hint:"Einrichten & Vibe-Coding",icon:N0}];var Op=1,V0=.9,W0=.8,K0=.17,_d=.1,Md=.999,Q0=.9999,q0=.99,Z0=/[\\\/_+.#"@\[\(\{&]/,Y0=/[\\\/_+.#"@\[\(\{&]/g,J0=/[\s-]/,Am=/[\s-]/g;function oc(s,o,a,d,u,f,h){if(f===o.length)return u===s.length?Op:q0;var p=`${u},${f}`;if(h[p]!==void 0)return h[p];for(var v=d.charAt(f),x=a.indexOf(v,u),b=0,w,P,R,D;x>=0;)w=oc(s,o,a,d,x+1,f+1,h),w>b&&(x===u?w*=Op:Z0.test(s.charAt(x-1))?(w*=W0,R=s.slice(u,x-1).match(Y0),R&&u>0&&(w*=Math.pow(Md,R.length))):J0.test(s.charAt(x-1))?(w*=V0,D=s.slice(u,x-1).match(Am),D&&u>0&&(w*=Math.pow(Md,D.length))):(w*=K0,u>0&&(w*=Math.pow(Md,x-u))),s.charAt(x)!==o.charAt(f)&&(w*=Q0)),(w<_d&&a.charAt(x-1)===d.charAt(f+1)||d.charAt(f+1)===d.charAt(f)&&a.charAt(x-1)!==d.charAt(f))&&(P=oc(s,o,a,d,x+1,f+2,h),P*_d>w&&(w=P*_d)),w>b&&(b=w),x=a.indexOf(v,x+1);return h[p]=b,b}function Dp(s){return s.toLowerCase().replace(Am," ")}function X0(s,o,a){return s=a&&a.length>0?`${s+" "+a.join(" ")}`:s,oc(s,o,Dp(s),Dp(o),0,0,{})}function ln(s,o,{checkForDefaultPrevented:a=!0}={}){return function(u){if(s==null||s(u),a===!1||!u.defaultPrevented)return o==null?void 0:o(u)}}function Ap(s,o){if(typeof s=="function")return s(o);s!=null&&(s.current=o)}function Bs(...s){return o=>{let a=!1;const d=s.map(u=>{const f=Ap(u,o);return!a&&typeof f=="function"&&(a=!0),f});if(a)return()=>{for(let u=0;u{var C;const{scope:P,children:R,...D}=w,E=((C=P==null?void 0:P[s])==null?void 0:C[v])||p,k=g.useMemo(()=>D,Object.values(D));return r.jsx(E.Provider,{value:k,children:R})};x.displayName=f+"Provider";function b(w,P){var E;const R=((E=P==null?void 0:P[s])==null?void 0:E[v])||p,D=g.useContext(R);if(D)return D;if(h!==void 0)return h;throw new Error(`\`${w}\` must be used within \`${f}\``)}return[x,b]}const u=()=>{const f=a.map(h=>g.createContext(h));return function(p){const v=(p==null?void 0:p[s])||f;return g.useMemo(()=>({[`__scope${s}`]:{...p,[s]:v}}),[p,v])}};return u.scopeName=s,[d,tv(u,...o)]}function tv(...s){const o=s[0];if(s.length===1)return o;const a=()=>{const d=s.map(u=>({useScope:u(),scopeName:u.scopeName}));return function(f){const h=d.reduce((p,{useScope:v,scopeName:x})=>{const w=v(f)[`__scope${x}`];return{...p,...w}},{});return g.useMemo(()=>({[`__scope${o.scopeName}`]:h}),[h])}};return a.scopeName=o.scopeName,a}var qo=globalThis!=null&&globalThis.document?g.useLayoutEffect:()=>{},rv=pc[" useId ".trim().toString()]||(()=>{}),nv=0;function kr(s){const[o,a]=g.useState(rv());return qo(()=>{a(d=>d??String(nv++))},[s]),o?`radix-${o}`:""}var sv=pc[" useInsertionEffect ".trim().toString()]||qo;function ov({prop:s,defaultProp:o,onChange:a=()=>{},caller:d}){const[u,f,h]=lv({defaultProp:o,onChange:a}),p=s!==void 0,v=p?s:u;{const b=g.useRef(s!==void 0);g.useEffect(()=>{const w=b.current;w!==p&&console.warn(`${d} is changing from ${w?"controlled":"uncontrolled"} to ${p?"controlled":"uncontrolled"}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`),b.current=p},[p,d])}const x=g.useCallback(b=>{var w;if(p){const P=av(b)?b(s):b;P!==s&&((w=h.current)==null||w.call(h,P))}else f(b)},[p,s,f,h]);return[v,x]}function lv({defaultProp:s,onChange:o}){const[a,d]=g.useState(s),u=g.useRef(a),f=g.useRef(o);return sv(()=>{f.current=o},[o]),g.useEffect(()=>{var h;u.current!==a&&((h=f.current)==null||h.call(f,a),u.current=a)},[a,u]),[a,d,f]}function av(s){return typeof s=="function"}var Tm=hm();function zm(s){const o=g.forwardRef((a,d)=>{let{children:u,...f}=a,h=null,p=!1;const v=[];Tp(u)&&typeof ga=="function"&&(u=ga(u._payload)),g.Children.forEach(u,P=>{var R;if(fv(P)){p=!0;const D=P;let E="child"in D.props?D.props.child:D.props.children;Tp(E)&&typeof ga=="function"&&(E=ga(E._payload)),h=dv(D,E),v.push((R=h==null?void 0:h.props)==null?void 0:R.children)}else v.push(P)}),h?h=g.cloneElement(h,void 0,v):!p&&g.Children.count(u)===1&&g.isValidElement(u)&&(h=u);const x=h?uv(h):void 0,b=Un(d,x);if(!h){if(u||u===0)throw new Error(p?xv(s):hv(s));return u}const w=cv(f,h.props??{});return h.type!==g.Fragment&&(w.ref=d?b:x),g.cloneElement(h,w)});return o.displayName=`${s}.Slot`,o}var iv=Symbol.for("radix.slottable"),dv=(s,o)=>{if("child"in s.props){const a=s.props.child;return g.isValidElement(a)?g.cloneElement(a,void 0,s.props.children(a.props.children)):null}return g.isValidElement(o)?o:null};function cv(s,o){const a={...o};for(const d in o){const u=s[d],f=o[d];/^on[A-Z]/.test(d)?u&&f?a[d]=(...p)=>{const v=f(...p);return u(...p),v}:u&&(a[d]=u):d==="style"?a[d]={...u,...f}:d==="className"&&(a[d]=[u,f].filter(Boolean).join(" "))}return{...s,...a}}function uv(s){var d,u;let o=(d=Object.getOwnPropertyDescriptor(s.props,"ref"))==null?void 0:d.get,a=o&&"isReactWarning"in o&&o.isReactWarning;return a?s.ref:(o=(u=Object.getOwnPropertyDescriptor(s,"ref"))==null?void 0:u.get,a=o&&"isReactWarning"in o&&o.isReactWarning,a?s.props.ref:s.props.ref||s.ref)}function fv(s){return g.isValidElement(s)&&typeof s.type=="function"&&"__radixId"in s.type&&s.type.__radixId===iv}var pv=Symbol.for("react.lazy");function Tp(s){return s!=null&&typeof s=="object"&&"$$typeof"in s&&s.$$typeof===pv&&"_payload"in s&&mv(s._payload)}function mv(s){return typeof s=="object"&&s!==null&&"then"in s}var hv=s=>`${s} failed to slot onto its children. Expected a single React element child or \`Slottable\`.`,xv=s=>`${s} failed to slot onto its \`Slottable\`. Expected \`Slottable\` to receive a single React element child.`,ga=pc[" use ".trim().toString()],gv=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],at=gv.reduce((s,o)=>{const a=zm(`Primitive.${o}`),d=g.forwardRef((u,f)=>{const{asChild:h,...p}=u,v=h?a:o;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),r.jsx(v,{...p,ref:f})});return d.displayName=`Primitive.${o}`,{...s,[o]:d}},{});function vv(s,o){s&&Tm.flushSync(()=>s.dispatchEvent(o))}function Zo(s){const o=g.useRef(s);return g.useEffect(()=>{o.current=s}),g.useMemo(()=>((...a)=>{var d;return(d=o.current)==null?void 0:d.call(o,...a)}),[])}function yv(s,o=globalThis==null?void 0:globalThis.document){const a=Zo(s);g.useEffect(()=>{const d=u=>{u.key==="Escape"&&a(u)};return o.addEventListener("keydown",d,{capture:!0}),()=>o.removeEventListener("keydown",d,{capture:!0})},[a,o])}var bv="DismissableLayer",lc="dismissableLayer.update",wv="dismissableLayer.pointerDownOutside",jv="dismissableLayer.focusOutside",zp,yc=g.createContext({layers:new Set,layersWithOutsidePointerEventsDisabled:new Set,branches:new Set,dismissableSurfaces:new Set}),Lm=g.forwardRef((s,o)=>{const{disableOutsidePointerEvents:a=!1,deferPointerDownOutside:d=!1,onEscapeKeyDown:u,onPointerDownOutside:f,onFocusOutside:h,onInteractOutside:p,onDismiss:v,...x}=s,b=g.useContext(yc),[w,P]=g.useState(null),R=(w==null?void 0:w.ownerDocument)??(globalThis==null?void 0:globalThis.document),[,D]=g.useState({}),E=Un(o,le=>P(le)),k=Array.from(b.layers),[C]=[...b.layersWithOutsidePointerEventsDisabled].slice(-1),I=k.indexOf(C),B=w?k.indexOf(w):-1,z=b.layersWithOutsidePointerEventsDisabled.size>0,$=B>=I,L=g.useRef(!1),H=Cv(le=>{const he=le.target;if(!(he instanceof Node))return;const Q=[...b.branches].some(ne=>ne.contains(he));!$||Q||(f==null||f(le),p==null||p(le),le.defaultPrevented||v==null||v())},{ownerDocument:R,deferPointerDownOutside:d,isDeferredPointerDownOutsideRef:L,dismissableSurfaces:b.dismissableSurfaces}),re=Ev(le=>{if(d&&L.current)return;const he=le.target;[...b.branches].some(ne=>ne.contains(he))||(h==null||h(le),p==null||p(le),le.defaultPrevented||v==null||v())},R);return yv(le=>{B===b.layers.size-1&&(u==null||u(le),!le.defaultPrevented&&v&&(le.preventDefault(),v()))},R),g.useEffect(()=>{if(w)return a&&(b.layersWithOutsidePointerEventsDisabled.size===0&&(zp=R.body.style.pointerEvents,R.body.style.pointerEvents="none"),b.layersWithOutsidePointerEventsDisabled.add(w)),b.layers.add(w),Lp(),()=>{a&&(b.layersWithOutsidePointerEventsDisabled.delete(w),b.layersWithOutsidePointerEventsDisabled.size===0&&(R.body.style.pointerEvents=zp))}},[w,R,a,b]),g.useEffect(()=>()=>{w&&(b.layers.delete(w),b.layersWithOutsidePointerEventsDisabled.delete(w),Lp())},[w,b]),g.useEffect(()=>{const le=()=>D({});return document.addEventListener(lc,le),()=>document.removeEventListener(lc,le)},[]),r.jsx(at.div,{...x,ref:E,style:{pointerEvents:z?$?"auto":"none":void 0,...s.style},onFocusCapture:ln(s.onFocusCapture,re.onFocusCapture),onBlurCapture:ln(s.onBlurCapture,re.onBlurCapture),onPointerDownCapture:ln(s.onPointerDownCapture,H.onPointerDownCapture)})});Lm.displayName=bv;var kv="DismissableLayerBranch",Nv=g.forwardRef((s,o)=>{const a=g.useContext(yc),d=g.useRef(null),u=Un(o,d);return g.useEffect(()=>{const f=d.current;if(f)return a.branches.add(f),()=>{a.branches.delete(f)}},[a.branches]),r.jsx(at.div,{...s,ref:u})});Nv.displayName=kv;function Sv(){const s=g.useContext(yc),[o,a]=g.useState(null);return g.useEffect(()=>{if(o)return s.dismissableSurfaces.add(o),()=>{s.dismissableSurfaces.delete(o)}},[o,s.dismissableSurfaces]),a}function Cv(s,o){const{ownerDocument:a=globalThis==null?void 0:globalThis.document,deferPointerDownOutside:d=!1,isDeferredPointerDownOutsideRef:u,dismissableSurfaces:f}=o,h=Zo(s),p=g.useRef(!1),v=g.useRef(!1),x=g.useRef(new Map),b=g.useRef(()=>{});return g.useEffect(()=>{function w(){v.current=!1,u.current=!1,x.current.clear()}function P(){return Array.from(x.current.values()).some(Boolean)}function R(I){if(!v.current)return;const B=I.target;B instanceof Node&&[...f].some($=>$.contains(B))||x.current.set(I.type,!0),I.type==="click"&&window.setTimeout(()=>{v.current&&b.current()},0)}function D(I){v.current&&x.current.set(I.type,!1)}const E=I=>{if(I.target&&!p.current){let B=function(){a.removeEventListener("click",b.current);const $=P();w(),$||Fm(wv,h,z,{discrete:!0})};const z={originalEvent:I};v.current=!0,u.current=d&&I.button===0,x.current.clear(),!d||I.button!==0?B():(a.removeEventListener("click",b.current),b.current=B,a.addEventListener("click",b.current,{once:!0}))}else a.removeEventListener("click",b.current),w();p.current=!1},k=["pointerup","mousedown","mouseup","touchstart","touchend","click"];for(const I of k)a.addEventListener(I,R,!0),a.addEventListener(I,D);const C=window.setTimeout(()=>{a.addEventListener("pointerdown",E)},0);return()=>{window.clearTimeout(C),a.removeEventListener("pointerdown",E),a.removeEventListener("click",b.current);for(const I of k)a.removeEventListener(I,R,!0),a.removeEventListener(I,D)}},[a,h,d,u,f]),{onPointerDownCapture:()=>p.current=!0}}function Ev(s,o=globalThis==null?void 0:globalThis.document){const a=Zo(s),d=g.useRef(!1);return g.useEffect(()=>{const u=f=>{f.target&&!d.current&&Fm(jv,a,{originalEvent:f},{discrete:!1})};return o.addEventListener("focusin",u),()=>o.removeEventListener("focusin",u)},[o,a]),{onFocusCapture:()=>d.current=!0,onBlurCapture:()=>d.current=!1}}function Lp(){const s=new CustomEvent(lc);document.dispatchEvent(s)}function Fm(s,o,a,{discrete:d}){const u=a.originalEvent.target,f=new CustomEvent(s,{bubbles:!1,cancelable:!0,detail:a});o&&u.addEventListener(s,o,{once:!0}),d?vv(u,f):u.dispatchEvent(f)}var Pd="focusScope.autoFocusOnMount",Rd="focusScope.autoFocusOnUnmount",Fp={bubbles:!1,cancelable:!0},_v="FocusScope",Im=g.forwardRef((s,o)=>{const{loop:a=!1,trapped:d=!1,onMountAutoFocus:u,onUnmountAutoFocus:f,...h}=s,[p,v]=g.useState(null),x=Zo(u),b=Zo(f),w=g.useRef(null),P=Un(o,E=>v(E)),R=g.useRef({paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}}).current;g.useEffect(()=>{if(d){let E=function(B){if(R.paused||!p)return;const z=B.target;p.contains(z)?w.current=z:Zr(w.current,{select:!0})},k=function(B){if(R.paused||!p)return;const z=B.relatedTarget;z!==null&&(p.contains(z)||Zr(w.current,{select:!0}))},C=function(B){if(document.activeElement===document.body)for(const $ of B)$.removedNodes.length>0&&Zr(p)};document.addEventListener("focusin",E),document.addEventListener("focusout",k);const I=new MutationObserver(C);return p&&I.observe(p,{childList:!0,subtree:!0}),()=>{document.removeEventListener("focusin",E),document.removeEventListener("focusout",k),I.disconnect()}}},[d,p,R.paused]),g.useEffect(()=>{if(p){$p.add(R);const E=document.activeElement;if(!p.contains(E)){const C=new CustomEvent(Pd,Fp);p.addEventListener(Pd,x),p.dispatchEvent(C),C.defaultPrevented||(Mv(Av($m(p)),{select:!0}),document.activeElement===E&&Zr(p))}return()=>{p.removeEventListener(Pd,x),setTimeout(()=>{const C=new CustomEvent(Rd,Fp);p.addEventListener(Rd,b),p.dispatchEvent(C),C.defaultPrevented||Zr(E??document.body,{select:!0}),p.removeEventListener(Rd,b),$p.remove(R)},0)}}},[p,x,b,R]);const D=g.useCallback(E=>{if(!a&&!d||R.paused)return;const k=E.key==="Tab"&&!E.altKey&&!E.ctrlKey&&!E.metaKey,C=document.activeElement;if(k&&C){const I=E.currentTarget,[B,z]=Pv(I);B&&z?!E.shiftKey&&C===z?(E.preventDefault(),a&&Zr(B,{select:!0})):E.shiftKey&&C===B&&(E.preventDefault(),a&&Zr(z,{select:!0})):C===I&&E.preventDefault()}},[a,d,R.paused]);return r.jsx(at.div,{tabIndex:-1,...h,ref:P,onKeyDown:D})});Im.displayName=_v;function Mv(s,{select:o=!1}={}){const a=document.activeElement;for(const d of s)if(Zr(d,{select:o}),document.activeElement!==a)return}function Pv(s){const o=$m(s),a=Ip(o,s),d=Ip(o.reverse(),s);return[a,d]}function $m(s){const o=[],a=document.createTreeWalker(s,NodeFilter.SHOW_ELEMENT,{acceptNode:d=>{const u=d.tagName==="INPUT"&&d.type==="hidden";return d.disabled||d.hidden||u?NodeFilter.FILTER_SKIP:d.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;a.nextNode();)o.push(a.currentNode);return o}function Ip(s,o){for(const a of s)if(!Rv(a,{upTo:o}))return a}function Rv(s,{upTo:o}){if(getComputedStyle(s).visibility==="hidden")return!0;for(;s;){if(o!==void 0&&s===o)return!1;if(getComputedStyle(s).display==="none")return!0;s=s.parentElement}return!1}function Ov(s){return s instanceof HTMLInputElement&&"select"in s}function Zr(s,{select:o=!1}={}){if(s&&s.focus){const a=document.activeElement;s.focus({preventScroll:!0}),s!==a&&Ov(s)&&o&&s.select()}}var $p=Dv();function Dv(){let s=[];return{add(o){const a=s[0];o!==a&&(a==null||a.pause()),s=Up(s,o),s.unshift(o)},remove(o){var a;s=Up(s,o),(a=s[0])==null||a.resume()}}}function Up(s,o){const a=[...s],d=a.indexOf(o);return d!==-1&&a.splice(d,1),a}function Av(s){return s.filter(o=>o.tagName!=="A")}var Tv="Portal",Um=g.forwardRef((s,o)=>{var p;const{container:a,...d}=s,[u,f]=g.useState(!1);qo(()=>f(!0),[]);const h=a||u&&((p=globalThis==null?void 0:globalThis.document)==null?void 0:p.body);return h?Tm.createPortal(r.jsx(at.div,{...d,ref:o}),h):null});Um.displayName=Tv;function zv(s,o){return g.useReducer((a,d)=>o[a][d]??a,s)}var Aa=s=>{const{present:o,children:a}=s,d=Lv(o),u=typeof a=="function"?a({present:d.isPresent}):g.Children.only(a),f=Fv(d.ref,Iv(u));return typeof a=="function"||d.isPresent?g.cloneElement(u,{ref:f}):null};Aa.displayName="Presence";function Lv(s){const[o,a]=g.useState(),d=g.useRef(null),u=g.useRef(s),f=g.useRef("none"),h=s?"mounted":"unmounted",[p,v]=zv(h,{mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}});return g.useEffect(()=>{const x=va(d.current);f.current=p==="mounted"?x:"none"},[p]),qo(()=>{const x=d.current,b=u.current;if(b!==s){const P=f.current,R=va(x);s?v("MOUNT"):R==="none"||(x==null?void 0:x.display)==="none"?v("UNMOUNT"):v(b&&P!==R?"ANIMATION_OUT":"UNMOUNT"),u.current=s}},[s,v]),qo(()=>{if(o){let x;const b=o.ownerDocument.defaultView??window,w=R=>{const E=va(d.current).includes(CSS.escape(R.animationName));if(R.target===o&&E&&(v("ANIMATION_END"),!u.current)){const k=o.style.animationFillMode;o.style.animationFillMode="forwards",x=b.setTimeout(()=>{o.style.animationFillMode==="forwards"&&(o.style.animationFillMode=k)})}},P=R=>{R.target===o&&(f.current=va(d.current))};return o.addEventListener("animationstart",P),o.addEventListener("animationcancel",w),o.addEventListener("animationend",w),()=>{b.clearTimeout(x),o.removeEventListener("animationstart",P),o.removeEventListener("animationcancel",w),o.removeEventListener("animationend",w)}}else v("ANIMATION_END")},[o,v]),{isPresent:["mounted","unmountSuspended"].includes(p),ref:g.useCallback(x=>{d.current=x?getComputedStyle(x):null,a(x)},[])}}function Bp(s,o){if(typeof s=="function")return s(o);s!=null&&(s.current=o)}function Fv(...s){const o=g.useRef(s);return o.current=s,g.useCallback(a=>{const d=o.current;let u=!1;const f=d.map(h=>{const p=Bp(h,a);return!u&&typeof p=="function"&&(u=!0),p});if(u)return()=>{for(let h=0;h{nr||(nr={start:Hp(),end:Hp()});const{start:s,end:o}=nr;return document.body.firstElementChild!==s&&document.body.insertAdjacentElement("afterbegin",s),document.body.lastElementChild!==o&&document.body.insertAdjacentElement("beforeend",o),ya++,()=>{ya===1&&(nr==null||nr.start.remove(),nr==null||nr.end.remove(),nr=null),ya=Math.max(0,ya-1)}},[])}function Hp(){const s=document.createElement("span");return s.setAttribute("data-radix-focus-guard",""),s.tabIndex=0,s.style.outline="none",s.style.opacity="0",s.style.position="fixed",s.style.pointerEvents="none",s}var ar=function(){return ar=Object.assign||function(o){for(var a,d=1,u=arguments.length;d"u")return ny;var o=sy(s),a=document.documentElement.clientWidth,d=window.innerWidth;return{left:o[0],top:o[1],right:o[2],gap:Math.max(0,d-a+o[2]-o[0])}},ly=Vm(),Ss="data-scroll-locked",ay=function(s,o,a,d){var u=s.left,f=s.top,h=s.right,p=s.gap;return a===void 0&&(a="margin"),` - .`.concat(Bv,` { - overflow: hidden `).concat(d,`; - padding-right: `).concat(p,"px ").concat(d,`; - } - body[`).concat(Ss,`] { - overflow: hidden `).concat(d,`; - overscroll-behavior: contain; - `).concat([o&&"position: relative ".concat(d,";"),a==="margin"&&` - padding-left: `.concat(u,`px; - padding-top: `).concat(f,`px; - padding-right: `).concat(h,`px; - margin-left:0; - margin-top:0; - margin-right: `).concat(p,"px ").concat(d,`; - `),a==="padding"&&"padding-right: ".concat(p,"px ").concat(d,";")].filter(Boolean).join(""),` - } - - .`).concat(_a,` { - right: `).concat(p,"px ").concat(d,`; - } - - .`).concat(Ma,` { - margin-right: `).concat(p,"px ").concat(d,`; - } - - .`).concat(_a," .").concat(_a,` { - right: 0 `).concat(d,`; - } - - .`).concat(Ma," .").concat(Ma,` { - margin-right: 0 `).concat(d,`; - } - - body[`).concat(Ss,`] { - `).concat(Hv,": ").concat(p,`px; - } -`)},Vp=function(){var s=parseInt(document.body.getAttribute(Ss)||"0",10);return isFinite(s)?s:0},iy=function(){g.useEffect(function(){return document.body.setAttribute(Ss,(Vp()+1).toString()),function(){var s=Vp()-1;s<=0?document.body.removeAttribute(Ss):document.body.setAttribute(Ss,s.toString())}},[])},dy=function(s){var o=s.noRelative,a=s.noImportant,d=s.gapMode,u=d===void 0?"margin":d;iy();var f=g.useMemo(function(){return oy(u)},[u]);return g.createElement(ly,{styles:ay(f,!o,u,a?"":"!important")})},ac=!1;if(typeof window<"u")try{var ba=Object.defineProperty({},"passive",{get:function(){return ac=!0,!0}});window.addEventListener("test",ba,ba),window.removeEventListener("test",ba,ba)}catch{ac=!1}var ys=ac?{passive:!1}:!1,cy=function(s){return s.tagName==="TEXTAREA"},Wm=function(s,o){if(!(s instanceof Element))return!1;var a=window.getComputedStyle(s);return a[o]!=="hidden"&&!(a.overflowY===a.overflowX&&!cy(s)&&a[o]==="visible")},uy=function(s){return Wm(s,"overflowY")},fy=function(s){return Wm(s,"overflowX")},Wp=function(s,o){var a=o.ownerDocument,d=o;do{typeof ShadowRoot<"u"&&d instanceof ShadowRoot&&(d=d.host);var u=Km(s,d);if(u){var f=Qm(s,d),h=f[1],p=f[2];if(h>p)return!0}d=d.parentNode}while(d&&d!==a.body);return!1},py=function(s){var o=s.scrollTop,a=s.scrollHeight,d=s.clientHeight;return[o,a,d]},my=function(s){var o=s.scrollLeft,a=s.scrollWidth,d=s.clientWidth;return[o,a,d]},Km=function(s,o){return s==="v"?uy(o):fy(o)},Qm=function(s,o){return s==="v"?py(o):my(o)},hy=function(s,o){return s==="h"&&o==="rtl"?-1:1},xy=function(s,o,a,d,u){var f=hy(s,window.getComputedStyle(o).direction),h=f*d,p=a.target,v=o.contains(p),x=!1,b=h>0,w=0,P=0;do{if(!p)break;var R=Qm(s,p),D=R[0],E=R[1],k=R[2],C=E-k-f*D;(D||C)&&Km(s,p)&&(w+=C,P+=D);var I=p.parentNode;p=I&&I.nodeType===Node.DOCUMENT_FRAGMENT_NODE?I.host:I}while(!v&&p!==document.body||v&&(o.contains(p)||o===p));return(b&&Math.abs(w)<1||!b&&Math.abs(P)<1)&&(x=!0),x},wa=function(s){return"changedTouches"in s?[s.changedTouches[0].clientX,s.changedTouches[0].clientY]:[0,0]},Kp=function(s){return[s.deltaX,s.deltaY]},Qp=function(s){return s&&"current"in s?s.current:s},gy=function(s,o){return s[0]===o[0]&&s[1]===o[1]},vy=function(s){return` - .block-interactivity-`.concat(s,` {pointer-events: none;} - .allow-interactivity-`).concat(s,` {pointer-events: all;} -`)},yy=0,bs=[];function by(s){var o=g.useRef([]),a=g.useRef([0,0]),d=g.useRef(),u=g.useState(yy++)[0],f=g.useState(Vm)[0],h=g.useRef(s);g.useEffect(function(){h.current=s},[s]),g.useEffect(function(){if(s.inert){document.body.classList.add("block-interactivity-".concat(u));var E=Uv([s.lockRef.current],(s.shards||[]).map(Qp),!0).filter(Boolean);return E.forEach(function(k){return k.classList.add("allow-interactivity-".concat(u))}),function(){document.body.classList.remove("block-interactivity-".concat(u)),E.forEach(function(k){return k.classList.remove("allow-interactivity-".concat(u))})}}},[s.inert,s.lockRef.current,s.shards]);var p=g.useCallback(function(E,k){if("touches"in E&&E.touches.length===2||E.type==="wheel"&&E.ctrlKey)return!h.current.allowPinchZoom;var C=wa(E),I=a.current,B="deltaX"in E?E.deltaX:I[0]-C[0],z="deltaY"in E?E.deltaY:I[1]-C[1],$,L=E.target,H=Math.abs(B)>Math.abs(z)?"h":"v";if("touches"in E&&H==="h"&&L.type==="range")return!1;var re=window.getSelection(),le=re&&re.anchorNode,he=le?le===L||le.contains(L):!1;if(he)return!1;var Q=Wp(H,L);if(!Q)return!0;if(Q?$=H:($=H==="v"?"h":"v",Q=Wp(H,L)),!Q)return!1;if(!d.current&&"changedTouches"in E&&(B||z)&&(d.current=$),!$)return!0;var ne=d.current||$;return xy(ne,k,E,ne==="h"?B:z)},[]),v=g.useCallback(function(E){var k=E;if(!(!bs.length||bs[bs.length-1]!==f)){var C="deltaY"in k?Kp(k):wa(k),I=o.current.filter(function($){return $.name===k.type&&($.target===k.target||k.target===$.shadowParent)&&gy($.delta,C)})[0];if(I&&I.should){k.cancelable&&k.preventDefault();return}if(!I){var B=(h.current.shards||[]).map(Qp).filter(Boolean).filter(function($){return $.contains(k.target)}),z=B.length>0?p(k,B[0]):!h.current.noIsolation;z&&k.cancelable&&k.preventDefault()}}},[]),x=g.useCallback(function(E,k,C,I){var B={name:E,delta:k,target:C,should:I,shadowParent:wy(C)};o.current.push(B),setTimeout(function(){o.current=o.current.filter(function(z){return z!==B})},1)},[]),b=g.useCallback(function(E){a.current=wa(E),d.current=void 0},[]),w=g.useCallback(function(E){x(E.type,Kp(E),E.target,p(E,s.lockRef.current))},[]),P=g.useCallback(function(E){x(E.type,wa(E),E.target,p(E,s.lockRef.current))},[]);g.useEffect(function(){return bs.push(f),s.setCallbacks({onScrollCapture:w,onWheelCapture:w,onTouchMoveCapture:P}),document.addEventListener("wheel",v,ys),document.addEventListener("touchmove",v,ys),document.addEventListener("touchstart",b,ys),function(){bs=bs.filter(function(E){return E!==f}),document.removeEventListener("wheel",v,ys),document.removeEventListener("touchmove",v,ys),document.removeEventListener("touchstart",b,ys)}},[]);var R=s.removeScrollBar,D=s.inert;return g.createElement(g.Fragment,null,D?g.createElement(f,{styles:vy(u)}):null,R?g.createElement(dy,{noRelative:s.noRelative,gapMode:s.gapMode}):null)}function wy(s){for(var o=null;s!==null;)s instanceof ShadowRoot&&(o=s.host,s=s.host),s=s.parentNode;return o}const jy=Zv(Gm,by);var qm=g.forwardRef(function(s,o){return g.createElement(Ta,ar({},s,{ref:o,sideCar:jy}))});qm.classNames=Ta.classNames;var ky=function(s){if(typeof document>"u")return null;var o=Array.isArray(s)?s[0]:s;return o.ownerDocument.body},ws=new WeakMap,ja=new WeakMap,ka={},Td=0,Zm=function(s){return s&&(s.host||Zm(s.parentNode))},Ny=function(s,o){return o.map(function(a){if(s.contains(a))return a;var d=Zm(a);return d&&s.contains(d)?d:(console.error("aria-hidden",a,"in not contained inside",s,". Doing nothing"),null)}).filter(function(a){return!!a})},Sy=function(s,o,a,d){var u=Ny(o,Array.isArray(s)?s:[s]);ka[a]||(ka[a]=new WeakMap);var f=ka[a],h=[],p=new Set,v=new Set(u),x=function(w){!w||p.has(w)||(p.add(w),x(w.parentNode))};u.forEach(x);var b=function(w){!w||v.has(w)||Array.prototype.forEach.call(w.children,function(P){if(p.has(P))b(P);else try{var R=P.getAttribute(d),D=R!==null&&R!=="false",E=(ws.get(P)||0)+1,k=(f.get(P)||0)+1;ws.set(P,E),f.set(P,k),h.push(P),E===1&&D&&ja.set(P,!0),k===1&&P.setAttribute(a,"true"),D||P.setAttribute(d,"true")}catch(C){console.error("aria-hidden: cannot operate on ",P,C)}})};return b(o),p.clear(),Td++,function(){h.forEach(function(w){var P=ws.get(w)-1,R=f.get(w)-1;ws.set(w,P),f.set(w,R),P||(ja.has(w)||w.removeAttribute(d),ja.delete(w)),R||w.removeAttribute(a)}),Td--,Td||(ws=new WeakMap,ws=new WeakMap,ja=new WeakMap,ka={})}},Cy=function(s,o,a){a===void 0&&(a="data-aria-hidden");var d=Array.from(Array.isArray(s)?s:[s]),u=ky(s);return u?(d.push.apply(d,Array.from(u.querySelectorAll("[aria-live], script"))),Sy(d,u,a,"aria-hidden")):function(){return null}},za="Dialog",[Ym]=ev(za),[Ey,Zt]=Ym(za),Jm=s=>{const{__scopeDialog:o,children:a,open:d,defaultOpen:u,onOpenChange:f,modal:h=!0}=s,p=g.useRef(null),v=g.useRef(null),[x,b]=ov({prop:d,defaultProp:u??!1,onChange:f,caller:za});return r.jsx(Ey,{scope:o,triggerRef:p,contentRef:v,contentId:kr(),titleId:kr(),descriptionId:kr(),open:x,onOpenChange:b,onOpenToggle:g.useCallback(()=>b(w=>!w),[b]),modal:h,children:a})};Jm.displayName=za;var Xm="DialogTrigger",_y=g.forwardRef((s,o)=>{const{__scopeDialog:a,...d}=s,u=Zt(Xm,a),f=Un(o,u.triggerRef);return r.jsx(at.button,{type:"button","aria-haspopup":"dialog","aria-expanded":u.open,"aria-controls":u.open?u.contentId:void 0,"data-state":wc(u.open),...d,ref:f,onClick:ln(s.onClick,u.onOpenToggle)})});_y.displayName=Xm;var bc="DialogPortal",[My,eh]=Ym(bc,{forceMount:void 0}),th=s=>{const{__scopeDialog:o,forceMount:a,children:d,container:u}=s,f=Zt(bc,o);return r.jsx(My,{scope:o,forceMount:a,children:g.Children.map(d,h=>r.jsx(Aa,{present:a||f.open,children:r.jsx(Um,{asChild:!0,container:u,children:h})}))})};th.displayName=bc;var Da="DialogOverlay",rh=g.forwardRef((s,o)=>{const a=eh(Da,s.__scopeDialog),{forceMount:d=a.forceMount,...u}=s,f=Zt(Da,s.__scopeDialog);return f.modal?r.jsx(Aa,{present:d||f.open,children:r.jsx(Ry,{...u,ref:o})}):null});rh.displayName=Da;var Py=zm("DialogOverlay.RemoveScroll"),Ry=g.forwardRef((s,o)=>{const{__scopeDialog:a,...d}=s,u=Zt(Da,a),f=Sv(),h=Un(o,f);return r.jsx(qm,{as:Py,allowPinchZoom:!0,shards:[u.contentRef],children:r.jsx(at.div,{"data-state":wc(u.open),...d,ref:h,style:{pointerEvents:"auto",...d.style}})})}),Hs="DialogContent",nh=g.forwardRef((s,o)=>{const a=eh(Hs,s.__scopeDialog),{forceMount:d=a.forceMount,...u}=s,f=Zt(Hs,s.__scopeDialog);return r.jsx(Aa,{present:d||f.open,children:f.modal?r.jsx(Oy,{...u,ref:o}):r.jsx(Dy,{...u,ref:o})})});nh.displayName=Hs;var Oy=g.forwardRef((s,o)=>{const a=Zt(Hs,s.__scopeDialog),d=g.useRef(null),u=Un(o,a.contentRef,d);return g.useEffect(()=>{const f=d.current;if(f)return Cy(f)},[]),r.jsx(sh,{...s,ref:u,trapFocus:a.open,disableOutsidePointerEvents:a.open,onCloseAutoFocus:ln(s.onCloseAutoFocus,f=>{var h;f.preventDefault(),(h=a.triggerRef.current)==null||h.focus()}),onPointerDownOutside:ln(s.onPointerDownOutside,f=>{const h=f.detail.originalEvent,p=h.button===0&&h.ctrlKey===!0;(h.button===2||p)&&f.preventDefault()}),onFocusOutside:ln(s.onFocusOutside,f=>f.preventDefault())})}),Dy=g.forwardRef((s,o)=>{const a=Zt(Hs,s.__scopeDialog),d=g.useRef(!1),u=g.useRef(!1);return r.jsx(sh,{...s,ref:o,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:f=>{var h,p;(h=s.onCloseAutoFocus)==null||h.call(s,f),f.defaultPrevented||(d.current||(p=a.triggerRef.current)==null||p.focus(),f.preventDefault()),d.current=!1,u.current=!1},onInteractOutside:f=>{var v,x;(v=s.onInteractOutside)==null||v.call(s,f),f.defaultPrevented||(d.current=!0,f.detail.originalEvent.type==="pointerdown"&&(u.current=!0));const h=f.target;((x=a.triggerRef.current)==null?void 0:x.contains(h))&&f.preventDefault(),f.detail.originalEvent.type==="focusin"&&u.current&&f.preventDefault()}})}),sh=g.forwardRef((s,o)=>{const{__scopeDialog:a,trapFocus:d,onOpenAutoFocus:u,onCloseAutoFocus:f,...h}=s,p=Zt(Hs,a);return $v(),r.jsx(r.Fragment,{children:r.jsx(Im,{asChild:!0,loop:!0,trapped:d,onMountAutoFocus:u,onUnmountAutoFocus:f,children:r.jsx(Lm,{role:"dialog",id:p.contentId,"aria-describedby":p.descriptionId,"aria-labelledby":p.titleId,"data-state":wc(p.open),...h,ref:o,deferPointerDownOutside:!0,onDismiss:()=>p.onOpenChange(!1)})})})}),oh="DialogTitle",Ay=g.forwardRef((s,o)=>{const{__scopeDialog:a,...d}=s,u=Zt(oh,a);return r.jsx(at.h2,{id:u.titleId,...d,ref:o})});Ay.displayName=oh;var lh="DialogDescription",Ty=g.forwardRef((s,o)=>{const{__scopeDialog:a,...d}=s,u=Zt(lh,a);return r.jsx(at.p,{id:u.descriptionId,...d,ref:o})});Ty.displayName=lh;var ah="DialogClose",zy=g.forwardRef((s,o)=>{const{__scopeDialog:a,...d}=s,u=Zt(ah,a);return r.jsx(at.button,{type:"button",...d,ref:o,onClick:ln(s.onClick,()=>u.onOpenChange(!1))})});zy.displayName=ah;function wc(s){return s?"open":"closed"}var zo='[cmdk-group=""]',zd='[cmdk-group-items=""]',Ly='[cmdk-group-heading=""]',ih='[cmdk-item=""]',qp=`${ih}:not([aria-disabled="true"])`,ic="cmdk-item-select",ks="data-value",Fy=(s,o,a)=>X0(s,o,a),dh=g.createContext(void 0),sl=()=>g.useContext(dh),ch=g.createContext(void 0),jc=()=>g.useContext(ch),uh=g.createContext(void 0),fh=g.forwardRef((s,o)=>{let a=Ns(()=>{var S,Z;return{search:"",value:(Z=(S=s.value)!=null?S:s.defaultValue)!=null?Z:"",selectedItemId:void 0,filtered:{count:0,items:new Map,groups:new Set}}}),d=Ns(()=>new Set),u=Ns(()=>new Map),f=Ns(()=>new Map),h=Ns(()=>new Set),p=ph(s),{label:v,children:x,value:b,onValueChange:w,filter:P,shouldFilter:R,loop:D,disablePointerSelection:E=!1,vimBindings:k=!0,...C}=s,I=kr(),B=kr(),z=kr(),$=g.useRef(null),L=qy();$n(()=>{if(b!==void 0){let S=b.trim();a.current.value=S,H.emit()}},[b]),$n(()=>{L(6,Ne)},[]);let H=g.useMemo(()=>({subscribe:S=>(h.current.add(S),()=>h.current.delete(S)),snapshot:()=>a.current,setState:(S,Z,ee)=>{var W,ie,pe,we;if(!Object.is(a.current[S],Z)){if(a.current[S]=Z,S==="search")ne(),he(),L(1,Q);else if(S==="value"){if(document.activeElement.hasAttribute("cmdk-input")||document.activeElement.hasAttribute("cmdk-root")){let U=document.getElementById(z);U?U.focus():(W=document.getElementById(I))==null||W.focus()}if(L(7,()=>{var U;a.current.selectedItemId=(U=Ce())==null?void 0:U.id,H.emit()}),ee||L(5,Ne),((ie=p.current)==null?void 0:ie.value)!==void 0){let U=Z??"";(we=(pe=p.current).onValueChange)==null||we.call(pe,U);return}}H.emit()}},emit:()=>{h.current.forEach(S=>S())}}),[]),re=g.useMemo(()=>({value:(S,Z,ee)=>{var W;Z!==((W=f.current.get(S))==null?void 0:W.value)&&(f.current.set(S,{value:Z,keywords:ee}),a.current.filtered.items.set(S,le(Z,ee)),L(2,()=>{he(),H.emit()}))},item:(S,Z)=>(d.current.add(S),Z&&(u.current.has(Z)?u.current.get(Z).add(S):u.current.set(Z,new Set([S]))),L(3,()=>{ne(),he(),a.current.value||Q(),H.emit()}),()=>{f.current.delete(S),d.current.delete(S),a.current.filtered.items.delete(S);let ee=Ce();L(4,()=>{ne(),(ee==null?void 0:ee.getAttribute("id"))===S&&Q(),H.emit()})}),group:S=>(u.current.has(S)||u.current.set(S,new Set),()=>{f.current.delete(S),u.current.delete(S)}),filter:()=>p.current.shouldFilter,label:v||s["aria-label"],getDisablePointerSelection:()=>p.current.disablePointerSelection,listId:I,inputId:z,labelId:B,listInnerRef:$}),[]);function le(S,Z){var ee,W;let ie=(W=(ee=p.current)==null?void 0:ee.filter)!=null?W:Fy;return S?ie(S,a.current.search,Z):0}function he(){if(!a.current.search||p.current.shouldFilter===!1)return;let S=a.current.filtered.items,Z=[];a.current.filtered.groups.forEach(W=>{let ie=u.current.get(W),pe=0;ie.forEach(we=>{let U=S.get(we);pe=Math.max(U,pe)}),Z.push([W,pe])});let ee=$.current;Oe().sort((W,ie)=>{var pe,we;let U=W.getAttribute("id"),ge=ie.getAttribute("id");return((pe=S.get(ge))!=null?pe:0)-((we=S.get(U))!=null?we:0)}).forEach(W=>{let ie=W.closest(zd);ie?ie.appendChild(W.parentElement===ie?W:W.closest(`${zd} > *`)):ee.appendChild(W.parentElement===ee?W:W.closest(`${zd} > *`))}),Z.sort((W,ie)=>ie[1]-W[1]).forEach(W=>{var ie;let pe=(ie=$.current)==null?void 0:ie.querySelector(`${zo}[${ks}="${encodeURIComponent(W[0])}"]`);pe==null||pe.parentElement.appendChild(pe)})}function Q(){let S=Oe().find(ee=>ee.getAttribute("aria-disabled")!=="true"),Z=S==null?void 0:S.getAttribute(ks);H.setState("value",Z||void 0)}function ne(){var S,Z,ee,W;if(!a.current.search||p.current.shouldFilter===!1){a.current.filtered.count=d.current.size;return}a.current.filtered.groups=new Set;let ie=0;for(let pe of d.current){let we=(Z=(S=f.current.get(pe))==null?void 0:S.value)!=null?Z:"",U=(W=(ee=f.current.get(pe))==null?void 0:ee.keywords)!=null?W:[],ge=le(we,U);a.current.filtered.items.set(pe,ge),ge>0&&ie++}for(let[pe,we]of u.current)for(let U of we)if(a.current.filtered.items.get(U)>0){a.current.filtered.groups.add(pe);break}a.current.filtered.count=ie}function Ne(){var S,Z,ee;let W=Ce();W&&(((S=W.parentElement)==null?void 0:S.firstChild)===W&&((ee=(Z=W.closest(zo))==null?void 0:Z.querySelector(Ly))==null||ee.scrollIntoView({block:"nearest"})),W.scrollIntoView({block:"nearest"}))}function Ce(){var S;return(S=$.current)==null?void 0:S.querySelector(`${ih}[aria-selected="true"]`)}function Oe(){var S;return Array.from(((S=$.current)==null?void 0:S.querySelectorAll(qp))||[])}function Te(S){let Z=Oe()[S];Z&&H.setState("value",Z.getAttribute(ks))}function _e(S){var Z;let ee=Ce(),W=Oe(),ie=W.findIndex(we=>we===ee),pe=W[ie+S];(Z=p.current)!=null&&Z.loop&&(pe=ie+S<0?W[W.length-1]:ie+S===W.length?W[0]:W[ie+S]),pe&&H.setState("value",pe.getAttribute(ks))}function Y(S){let Z=Ce(),ee=Z==null?void 0:Z.closest(zo),W;for(;ee&&!W;)ee=S>0?Ky(ee,zo):Qy(ee,zo),W=ee==null?void 0:ee.querySelector(qp);W?H.setState("value",W.getAttribute(ks)):_e(S)}let ce=()=>Te(Oe().length-1),J=S=>{S.preventDefault(),S.metaKey?ce():S.altKey?Y(1):_e(1)},M=S=>{S.preventDefault(),S.metaKey?Te(0):S.altKey?Y(-1):_e(-1)};return g.createElement(at.div,{ref:o,tabIndex:-1,...C,"cmdk-root":"",onKeyDown:S=>{var Z;(Z=C.onKeyDown)==null||Z.call(C,S);let ee=S.nativeEvent.isComposing||S.keyCode===229;if(!(S.defaultPrevented||ee))switch(S.key){case"n":case"j":{k&&S.ctrlKey&&J(S);break}case"ArrowDown":{J(S);break}case"p":case"k":{k&&S.ctrlKey&&M(S);break}case"ArrowUp":{M(S);break}case"Home":{S.preventDefault(),Te(0);break}case"End":{S.preventDefault(),ce();break}case"Enter":{S.preventDefault();let W=Ce();if(W){let ie=new Event(ic);W.dispatchEvent(ie)}}}}},g.createElement("label",{"cmdk-label":"",htmlFor:re.inputId,id:re.labelId,style:Yy},v),La(s,S=>g.createElement(ch.Provider,{value:H},g.createElement(dh.Provider,{value:re},S))))}),Iy=g.forwardRef((s,o)=>{var a,d;let u=kr(),f=g.useRef(null),h=g.useContext(uh),p=sl(),v=ph(s),x=(d=(a=v.current)==null?void 0:a.forceMount)!=null?d:h==null?void 0:h.forceMount;$n(()=>{if(!x)return p.item(u,h==null?void 0:h.id)},[x]);let b=mh(u,f,[s.value,s.children,f],s.keywords),w=jc(),P=dn(L=>L.value&&L.value===b.current),R=dn(L=>x||p.filter()===!1?!0:L.search?L.filtered.items.get(u)>0:!0);g.useEffect(()=>{let L=f.current;if(!(!L||s.disabled))return L.addEventListener(ic,D),()=>L.removeEventListener(ic,D)},[R,s.onSelect,s.disabled]);function D(){var L,H;E(),(H=(L=v.current).onSelect)==null||H.call(L,b.current)}function E(){w.setState("value",b.current,!0)}if(!R)return null;let{disabled:k,value:C,onSelect:I,forceMount:B,keywords:z,...$}=s;return g.createElement(at.div,{ref:Bs(f,o),...$,id:u,"cmdk-item":"",role:"option","aria-disabled":!!k,"aria-selected":!!P,"data-disabled":!!k,"data-selected":!!P,onPointerMove:k||p.getDisablePointerSelection()?void 0:E,onClick:k?void 0:D},s.children)}),$y=g.forwardRef((s,o)=>{let{heading:a,children:d,forceMount:u,...f}=s,h=kr(),p=g.useRef(null),v=g.useRef(null),x=kr(),b=sl(),w=dn(R=>u||b.filter()===!1?!0:R.search?R.filtered.groups.has(h):!0);$n(()=>b.group(h),[]),mh(h,p,[s.value,s.heading,v]);let P=g.useMemo(()=>({id:h,forceMount:u}),[u]);return g.createElement(at.div,{ref:Bs(p,o),...f,"cmdk-group":"",role:"presentation",hidden:w?void 0:!0},a&&g.createElement("div",{ref:v,"cmdk-group-heading":"","aria-hidden":!0,id:x},a),La(s,R=>g.createElement("div",{"cmdk-group-items":"",role:"group","aria-labelledby":a?x:void 0},g.createElement(uh.Provider,{value:P},R))))}),Uy=g.forwardRef((s,o)=>{let{alwaysRender:a,...d}=s,u=g.useRef(null),f=dn(h=>!h.search);return!a&&!f?null:g.createElement(at.div,{ref:Bs(u,o),...d,"cmdk-separator":"",role:"separator"})}),By=g.forwardRef((s,o)=>{let{onValueChange:a,...d}=s,u=s.value!=null,f=jc(),h=dn(x=>x.search),p=dn(x=>x.selectedItemId),v=sl();return g.useEffect(()=>{s.value!=null&&f.setState("search",s.value)},[s.value]),g.createElement(at.input,{ref:o,...d,"cmdk-input":"",autoComplete:"off",autoCorrect:"off",spellCheck:!1,"aria-autocomplete":"list",role:"combobox","aria-expanded":!0,"aria-controls":v.listId,"aria-labelledby":v.labelId,"aria-activedescendant":p,id:v.inputId,type:"text",value:u?s.value:h,onChange:x=>{u||f.setState("search",x.target.value),a==null||a(x.target.value)}})}),Hy=g.forwardRef((s,o)=>{let{children:a,label:d="Suggestions",...u}=s,f=g.useRef(null),h=g.useRef(null),p=dn(x=>x.selectedItemId),v=sl();return g.useEffect(()=>{if(h.current&&f.current){let x=h.current,b=f.current,w,P=new ResizeObserver(()=>{w=requestAnimationFrame(()=>{let R=x.offsetHeight;b.style.setProperty("--cmdk-list-height",R.toFixed(1)+"px")})});return P.observe(x),()=>{cancelAnimationFrame(w),P.unobserve(x)}}},[]),g.createElement(at.div,{ref:Bs(f,o),...u,"cmdk-list":"",role:"listbox",tabIndex:-1,"aria-activedescendant":p,"aria-label":d,id:v.listId},La(s,x=>g.createElement("div",{ref:Bs(h,v.listInnerRef),"cmdk-list-sizer":""},x)))}),Gy=g.forwardRef((s,o)=>{let{open:a,onOpenChange:d,overlayClassName:u,contentClassName:f,container:h,...p}=s;return g.createElement(Jm,{open:a,onOpenChange:d},g.createElement(th,{container:h},g.createElement(rh,{"cmdk-overlay":"",className:u}),g.createElement(nh,{"aria-label":s.label,"cmdk-dialog":"",className:f},g.createElement(fh,{ref:o,...p}))))}),Vy=g.forwardRef((s,o)=>dn(a=>a.filtered.count===0)?g.createElement(at.div,{ref:o,...s,"cmdk-empty":"",role:"presentation"}):null),Wy=g.forwardRef((s,o)=>{let{progress:a,children:d,label:u="Loading...",...f}=s;return g.createElement(at.div,{ref:o,...f,"cmdk-loading":"",role:"progressbar","aria-valuenow":a,"aria-valuemin":0,"aria-valuemax":100,"aria-label":u},La(s,h=>g.createElement("div",{"aria-hidden":!0},h)))}),js=Object.assign(fh,{List:Hy,Item:Iy,Input:By,Group:$y,Separator:Uy,Dialog:Gy,Empty:Vy,Loading:Wy});function Ky(s,o){let a=s.nextElementSibling;for(;a;){if(a.matches(o))return a;a=a.nextElementSibling}}function Qy(s,o){let a=s.previousElementSibling;for(;a;){if(a.matches(o))return a;a=a.previousElementSibling}}function ph(s){let o=g.useRef(s);return $n(()=>{o.current=s}),o}var $n=typeof window>"u"?g.useEffect:g.useLayoutEffect;function Ns(s){let o=g.useRef();return o.current===void 0&&(o.current=s()),o}function dn(s){let o=jc(),a=()=>s(o.snapshot());return g.useSyncExternalStore(o.subscribe,a,a)}function mh(s,o,a,d=[]){let u=g.useRef(),f=sl();return $n(()=>{var h;let p=(()=>{var x;for(let b of a){if(typeof b=="string")return b.trim();if(typeof b=="object"&&"current"in b)return b.current?(x=b.current.textContent)==null?void 0:x.trim():u.current}})(),v=d.map(x=>x.trim());f.value(s,p,v),(h=o.current)==null||h.setAttribute(ks,p),u.current=p}),u}var qy=()=>{let[s,o]=g.useState(),a=Ns(()=>new Map);return $n(()=>{a.current.forEach(d=>d()),a.current=new Map},[s]),(d,u)=>{a.current.set(d,u),o({})}};function Zy(s){let o=s.type;return typeof o=="function"?o(s.props):"render"in o?o.render(s.props):s}function La({asChild:s,children:o},a){return s&&g.isValidElement(o)?g.cloneElement(Zy(o),{ref:o.ref},a(o.props.children)):a(o)}var Yy={position:"absolute",width:"1px",height:"1px",padding:"0",margin:"-1px",overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",borderWidth:"0"};function Jy({onNavigate:s}){const[o,a]=g.useState(!1);return g.useEffect(()=>{const d=u=>{(u.metaKey||u.ctrlKey)&&u.key.toLowerCase()==="k"&&(u.preventDefault(),a(f=>!f))};return document.addEventListener("keydown",d),()=>document.removeEventListener("keydown",d)},[]),r.jsx(js.Dialog,{open:o,onOpenChange:a,label:"Befehlspalette",className:"fixed inset-0 z-50 flex items-start justify-center bg-black/50 p-4 pt-[12vh]",onClick:()=>a(!1),children:r.jsxs("div",{className:"w-full max-w-lg overflow-hidden rounded-xl border border-border bg-popover text-popover-foreground shadow-2xl",onClick:d=>d.stopPropagation(),children:[r.jsx(js.Input,{autoFocus:!0,placeholder:"Springe zu… (Modelle, Routing, System …)",className:"w-full border-b border-border bg-transparent px-4 py-3 text-sm outline-none placeholder:text-muted-foreground"}),r.jsxs(js.List,{className:"max-h-80 overflow-y-auto p-2",children:[r.jsx(js.Empty,{className:"px-3 py-6 text-center text-sm text-muted-foreground",children:"Nichts gefunden."}),r.jsx(js.Group,{heading:"Bereiche",className:"px-1 py-1 text-xs text-muted-foreground",children:sc.map(d=>r.jsxs(js.Item,{value:`${d.label} ${d.hint}`,onSelect:()=>{s(d.id),a(!1)},className:"flex cursor-pointer items-center gap-3 rounded-md px-3 py-2 text-sm text-foreground aria-selected:bg-accent aria-selected:text-accent-foreground",children:[r.jsx(d.icon,{className:"h-4 w-4 text-primary"}),r.jsx("span",{children:d.label}),r.jsx("span",{className:"ml-auto truncate text-xs text-muted-foreground",children:d.hint})]},d.id))})]})]})})}async function xe(s,o){var v;const a={"Content-Type":"application/json",...o==null?void 0:o.headers},d=localStorage.getItem("mc_sudo_password"),u=localStorage.getItem("mc_hf_token");d&&(a["X-Sudo-Password"]=d);let f=o==null?void 0:o.body;if((((v=o==null?void 0:o.method)==null?void 0:v.toUpperCase())||"GET")==="POST"){if(typeof f=="string")try{const x=JSON.parse(f);let b=!1;d&&!("sudo_password"in x)&&(x.sudo_password=d,b=!0),u&&!("hf_token"in x)&&(x.hf_token=u,b=!0),b&&(f=JSON.stringify(x))}catch{}else if(!f){const x={};d&&(x.sudo_password=d),u&&(x.hf_token=u),Object.keys(x).length>0&&(f=JSON.stringify(x))}}const p=await fetch(s,{...o,headers:a,body:f});if(!p.ok)throw new Error(`${p.status} ${p.statusText}`);return p.json()}const Qe={health:["health"],systemStatus:["system-status"],services:["services"],models:["models"],routing:["routing"],jobs:["jobs"],tokenStats:["token-stats"],agentStatus:["agent-status"],hermesBrain:["hermes-brain"],updates:["updates"],discover:["discover"],drafts:s=>["drafts",s??""],connect:s=>["connect",s??""],memory:(s,o)=>["memory",s??"",o??""]},Xy=()=>Ct({queryKey:Qe.health,queryFn:()=>xe("/api/health"),refetchInterval:1e4}),Fa=(s=5e3)=>Ct({queryKey:Qe.systemStatus,queryFn:()=>xe("/api/system/status"),refetchInterval:s}),eb=(s=3e3)=>Ct({queryKey:Qe.services,queryFn:()=>xe("/api/system/services"),refetchInterval:s}),Bn=(s=4e3)=>Ct({queryKey:Qe.models,queryFn:()=>xe("/api/models"),refetchInterval:s}),tb=(s=4e3)=>Ct({queryKey:Qe.routing,queryFn:()=>xe("/api/routing"),refetchInterval:s}),hh=(s=2e3)=>Ct({queryKey:Qe.jobs,queryFn:()=>xe("/api/jobs"),refetchInterval:s,select:o=>o.jobs??[]}),xh=(s=3e3)=>Ct({queryKey:Qe.tokenStats,queryFn:()=>xe("/api/system/token-stats"),refetchInterval:s}),gh=(s=5e3)=>Ct({queryKey:Qe.agentStatus,queryFn:()=>xe("/api/agent/status"),refetchInterval:s}),rb=(s=6e4)=>Ct({queryKey:Qe.hermesBrain,queryFn:()=>xe("/api/agent/brain"),refetchInterval:s}),kc=s=>Ct({queryKey:Qe.updates,queryFn:()=>xe("/api/maintenance/updates"),refetchInterval:s}),nb=()=>Ct({queryKey:Qe.discover,queryFn:()=>xe("/api/discover")}),sb=s=>Ct({queryKey:Qe.drafts(s),queryFn:()=>xe(`/api/models/drafts?target=${encodeURIComponent(s??"")}`),enabled:!!s}),vh=s=>Ct({queryKey:Qe.connect(s),queryFn:()=>xe(s?`/api/connect?${s}`:"/api/connect")}),yh=s=>Ct({queryKey:Qe.memory(s==null?void 0:s.q,s==null?void 0:s.category),queryFn:()=>{const o=new URLSearchParams;return s!=null&&s.q&&o.set("q",s.q),s!=null&&s.category&&o.set("category",s.category),xe(`/api/memory?${o}`)},select:o=>s!=null&&s.limit?o.slice(0,s.limit):o});function St(s){return(s/1024**3).toFixed(1)}function dc(s){return s?s>1024**3?`${(s/1024**3).toFixed(1)} GB`:`${(s/1024**2).toFixed(0)} MB`:""}function $t(s){if(!s)return"—";const o=s/1024**3;return o>=1?`${o.toFixed(1)} GB`:`${(s/1024**2).toFixed(0)} MB`}function ob(s){if(!s)return"";const o=Math.floor(s/60);return o>0?`${o} min`:`${s} s`}function Zp(s){return s?`${Math.round(s/1024)}k`:"—"}function bh(s){var o,a,d="";if(typeof s=="string"||typeof s=="number")d+=s;else if(typeof s=="object")if(Array.isArray(s)){var u=s.length;for(o=0;o{const o=db(s),{conflictingClassGroups:a,conflictingClassGroupModifiers:d}=s;return{getClassGroupId:h=>{const p=h.split(Nc);return p[0]===""&&p.length!==1&&p.shift(),wh(p,o)||ib(h)},getConflictingClassGroupIds:(h,p)=>{const v=a[h]||[];return p&&d[h]?[...v,...d[h]]:v}}},wh=(s,o)=>{var h;if(s.length===0)return o.classGroupId;const a=s[0],d=o.nextPart.get(a),u=d?wh(s.slice(1),d):void 0;if(u)return u;if(o.validators.length===0)return;const f=s.join(Nc);return(h=o.validators.find(({validator:p})=>p(f)))==null?void 0:h.classGroupId},Yp=/^\[(.+)\]$/,ib=s=>{if(Yp.test(s)){const o=Yp.exec(s)[1],a=o==null?void 0:o.substring(0,o.indexOf(":"));if(a)return"arbitrary.."+a}},db=s=>{const{theme:o,prefix:a}=s,d={nextPart:new Map,validators:[]};return ub(Object.entries(s.classGroups),a).forEach(([f,h])=>{cc(h,d,f,o)}),d},cc=(s,o,a,d)=>{s.forEach(u=>{if(typeof u=="string"){const f=u===""?o:Jp(o,u);f.classGroupId=a;return}if(typeof u=="function"){if(cb(u)){cc(u(d),o,a,d);return}o.validators.push({validator:u,classGroupId:a});return}Object.entries(u).forEach(([f,h])=>{cc(h,Jp(o,f),a,d)})})},Jp=(s,o)=>{let a=s;return o.split(Nc).forEach(d=>{a.nextPart.has(d)||a.nextPart.set(d,{nextPart:new Map,validators:[]}),a=a.nextPart.get(d)}),a},cb=s=>s.isThemeGetter,ub=(s,o)=>o?s.map(([a,d])=>{const u=d.map(f=>typeof f=="string"?o+f:typeof f=="object"?Object.fromEntries(Object.entries(f).map(([h,p])=>[o+h,p])):f);return[a,u]}):s,fb=s=>{if(s<1)return{get:()=>{},set:()=>{}};let o=0,a=new Map,d=new Map;const u=(f,h)=>{a.set(f,h),o++,o>s&&(o=0,d=a,a=new Map)};return{get(f){let h=a.get(f);if(h!==void 0)return h;if((h=d.get(f))!==void 0)return u(f,h),h},set(f,h){a.has(f)?a.set(f,h):u(f,h)}}},jh="!",pb=s=>{const{separator:o,experimentalParseClassName:a}=s,d=o.length===1,u=o[0],f=o.length,h=p=>{const v=[];let x=0,b=0,w;for(let k=0;kb?w-b:void 0;return{modifiers:v,hasImportantModifier:R,baseClassName:D,maybePostfixModifierPosition:E}};return a?p=>a({className:p,parseClassName:h}):h},mb=s=>{if(s.length<=1)return s;const o=[];let a=[];return s.forEach(d=>{d[0]==="["?(o.push(...a.sort(),d),a=[]):a.push(d)}),o.push(...a.sort()),o},hb=s=>({cache:fb(s.cacheSize),parseClassName:pb(s),...ab(s)}),xb=/\s+/,gb=(s,o)=>{const{parseClassName:a,getClassGroupId:d,getConflictingClassGroupIds:u}=o,f=[],h=s.trim().split(xb);let p="";for(let v=h.length-1;v>=0;v-=1){const x=h[v],{modifiers:b,hasImportantModifier:w,baseClassName:P,maybePostfixModifierPosition:R}=a(x);let D=!!R,E=d(D?P.substring(0,R):P);if(!E){if(!D){p=x+(p.length>0?" "+p:p);continue}if(E=d(P),!E){p=x+(p.length>0?" "+p:p);continue}D=!1}const k=mb(b).join(":"),C=w?k+jh:k,I=C+E;if(f.includes(I))continue;f.push(I);const B=u(E,D);for(let z=0;z0?" "+p:p)}return p};function vb(){let s=0,o,a,d="";for(;s{if(typeof s=="string")return s;let o,a="";for(let d=0;dw(b),s());return a=hb(x),d=a.cache.get,u=a.cache.set,f=p,p(v)}function p(v){const x=d(v);if(x)return x;const b=gb(v,a);return u(v,b),b}return function(){return f(vb.apply(null,arguments))}}const Ue=s=>{const o=a=>a[s]||[];return o.isThemeGetter=!0,o},Nh=/^\[(?:([a-z-]+):)?(.+)\]$/i,bb=/^\d+\/\d+$/,wb=new Set(["px","full","screen"]),jb=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,kb=/\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$/,Nb=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/,Sb=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,Cb=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,vr=s=>Cs(s)||wb.has(s)||bb.test(s),Kr=s=>Gs(s,"length",Ab),Cs=s=>!!s&&!Number.isNaN(Number(s)),Ld=s=>Gs(s,"number",Cs),Lo=s=>!!s&&Number.isInteger(Number(s)),Eb=s=>s.endsWith("%")&&Cs(s.slice(0,-1)),Se=s=>Nh.test(s),Qr=s=>jb.test(s),_b=new Set(["length","size","percentage"]),Mb=s=>Gs(s,_b,Sh),Pb=s=>Gs(s,"position",Sh),Rb=new Set(["image","url"]),Ob=s=>Gs(s,Rb,zb),Db=s=>Gs(s,"",Tb),Fo=()=>!0,Gs=(s,o,a)=>{const d=Nh.exec(s);return d?d[1]?typeof o=="string"?d[1]===o:o.has(d[1]):a(d[2]):!1},Ab=s=>kb.test(s)&&!Nb.test(s),Sh=()=>!1,Tb=s=>Sb.test(s),zb=s=>Cb.test(s),Lb=()=>{const s=Ue("colors"),o=Ue("spacing"),a=Ue("blur"),d=Ue("brightness"),u=Ue("borderColor"),f=Ue("borderRadius"),h=Ue("borderSpacing"),p=Ue("borderWidth"),v=Ue("contrast"),x=Ue("grayscale"),b=Ue("hueRotate"),w=Ue("invert"),P=Ue("gap"),R=Ue("gradientColorStops"),D=Ue("gradientColorStopPositions"),E=Ue("inset"),k=Ue("margin"),C=Ue("opacity"),I=Ue("padding"),B=Ue("saturate"),z=Ue("scale"),$=Ue("sepia"),L=Ue("skew"),H=Ue("space"),re=Ue("translate"),le=()=>["auto","contain","none"],he=()=>["auto","hidden","clip","visible","scroll"],Q=()=>["auto",Se,o],ne=()=>[Se,o],Ne=()=>["",vr,Kr],Ce=()=>["auto",Cs,Se],Oe=()=>["bottom","center","left","left-bottom","left-top","right","right-bottom","right-top","top"],Te=()=>["solid","dashed","dotted","double","none"],_e=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],Y=()=>["start","end","center","between","around","evenly","stretch"],ce=()=>["","0",Se],J=()=>["auto","avoid","all","avoid-page","page","left","right","column"],M=()=>[Cs,Se];return{cacheSize:500,separator:":",theme:{colors:[Fo],spacing:[vr,Kr],blur:["none","",Qr,Se],brightness:M(),borderColor:[s],borderRadius:["none","","full",Qr,Se],borderSpacing:ne(),borderWidth:Ne(),contrast:M(),grayscale:ce(),hueRotate:M(),invert:ce(),gap:ne(),gradientColorStops:[s],gradientColorStopPositions:[Eb,Kr],inset:Q(),margin:Q(),opacity:M(),padding:ne(),saturate:M(),scale:M(),sepia:ce(),skew:M(),space:ne(),translate:ne()},classGroups:{aspect:[{aspect:["auto","square","video",Se]}],container:["container"],columns:[{columns:[Qr]}],"break-after":[{"break-after":J()}],"break-before":[{"break-before":J()}],"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:[...Oe(),Se]}],overflow:[{overflow:he()}],"overflow-x":[{"overflow-x":he()}],"overflow-y":[{"overflow-y":he()}],overscroll:[{overscroll:le()}],"overscroll-x":[{"overscroll-x":le()}],"overscroll-y":[{"overscroll-y":le()}],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",Lo,Se]}],basis:[{basis:Q()}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["wrap","wrap-reverse","nowrap"]}],flex:[{flex:["1","auto","initial","none",Se]}],grow:[{grow:ce()}],shrink:[{shrink:ce()}],order:[{order:["first","last","none",Lo,Se]}],"grid-cols":[{"grid-cols":[Fo]}],"col-start-end":[{col:["auto",{span:["full",Lo,Se]},Se]}],"col-start":[{"col-start":Ce()}],"col-end":[{"col-end":Ce()}],"grid-rows":[{"grid-rows":[Fo]}],"row-start-end":[{row:["auto",{span:[Lo,Se]},Se]}],"row-start":[{"row-start":Ce()}],"row-end":[{"row-end":Ce()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":["auto","min","max","fr",Se]}],"auto-rows":[{"auto-rows":["auto","min","max","fr",Se]}],gap:[{gap:[P]}],"gap-x":[{"gap-x":[P]}],"gap-y":[{"gap-y":[P]}],"justify-content":[{justify:["normal",...Y()]}],"justify-items":[{"justify-items":["start","end","center","stretch"]}],"justify-self":[{"justify-self":["auto","start","end","center","stretch"]}],"align-content":[{content:["normal",...Y(),"baseline"]}],"align-items":[{items:["start","end","center","baseline","stretch"]}],"align-self":[{self:["auto","start","end","center","stretch","baseline"]}],"place-content":[{"place-content":[...Y(),"baseline"]}],"place-items":[{"place-items":["start","end","center","baseline","stretch"]}],"place-self":[{"place-self":["auto","start","end","center","stretch"]}],p:[{p:[I]}],px:[{px:[I]}],py:[{py:[I]}],ps:[{ps:[I]}],pe:[{pe:[I]}],pt:[{pt:[I]}],pr:[{pr:[I]}],pb:[{pb:[I]}],pl:[{pl:[I]}],m:[{m:[k]}],mx:[{mx:[k]}],my:[{my:[k]}],ms:[{ms:[k]}],me:[{me:[k]}],mt:[{mt:[k]}],mr:[{mr:[k]}],mb:[{mb:[k]}],ml:[{ml:[k]}],"space-x":[{"space-x":[H]}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":[H]}],"space-y-reverse":["space-y-reverse"],w:[{w:["auto","min","max","fit","svw","lvw","dvw",Se,o]}],"min-w":[{"min-w":[Se,o,"min","max","fit"]}],"max-w":[{"max-w":[Se,o,"none","full","min","max","fit","prose",{screen:[Qr]},Qr]}],h:[{h:[Se,o,"auto","min","max","fit","svh","lvh","dvh"]}],"min-h":[{"min-h":[Se,o,"min","max","fit","svh","lvh","dvh"]}],"max-h":[{"max-h":[Se,o,"min","max","fit","svh","lvh","dvh"]}],size:[{size:[Se,o,"auto","min","max","fit"]}],"font-size":[{text:["base",Qr,Kr]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:["thin","extralight","light","normal","medium","semibold","bold","extrabold","black",Ld]}],"font-family":[{font:[Fo]}],"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",Se]}],"line-clamp":[{"line-clamp":["none",Cs,Ld]}],leading:[{leading:["none","tight","snug","normal","relaxed","loose",vr,Se]}],"list-image":[{"list-image":["none",Se]}],"list-style-type":[{list:["none","disc","decimal",Se]}],"list-style-position":[{list:["inside","outside"]}],"placeholder-color":[{placeholder:[s]}],"placeholder-opacity":[{"placeholder-opacity":[C]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"text-color":[{text:[s]}],"text-opacity":[{"text-opacity":[C]}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...Te(),"wavy"]}],"text-decoration-thickness":[{decoration:["auto","from-font",vr,Kr]}],"underline-offset":[{"underline-offset":["auto",vr,Se]}],"text-decoration-color":[{decoration:[s]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:ne()}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",Se]}],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",Se]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-opacity":[{"bg-opacity":[C]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:[...Oe(),Pb]}],"bg-repeat":[{bg:["no-repeat",{repeat:["","x","y","round","space"]}]}],"bg-size":[{bg:["auto","cover","contain",Mb]}],"bg-image":[{bg:["none",{"gradient-to":["t","tr","r","br","b","bl","l","tl"]},Ob]}],"bg-color":[{bg:[s]}],"gradient-from-pos":[{from:[D]}],"gradient-via-pos":[{via:[D]}],"gradient-to-pos":[{to:[D]}],"gradient-from":[{from:[R]}],"gradient-via":[{via:[R]}],"gradient-to":[{to:[R]}],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:[p]}],"border-w-x":[{"border-x":[p]}],"border-w-y":[{"border-y":[p]}],"border-w-s":[{"border-s":[p]}],"border-w-e":[{"border-e":[p]}],"border-w-t":[{"border-t":[p]}],"border-w-r":[{"border-r":[p]}],"border-w-b":[{"border-b":[p]}],"border-w-l":[{"border-l":[p]}],"border-opacity":[{"border-opacity":[C]}],"border-style":[{border:[...Te(),"hidden"]}],"divide-x":[{"divide-x":[p]}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":[p]}],"divide-y-reverse":["divide-y-reverse"],"divide-opacity":[{"divide-opacity":[C]}],"divide-style":[{divide:Te()}],"border-color":[{border:[u]}],"border-color-x":[{"border-x":[u]}],"border-color-y":[{"border-y":[u]}],"border-color-s":[{"border-s":[u]}],"border-color-e":[{"border-e":[u]}],"border-color-t":[{"border-t":[u]}],"border-color-r":[{"border-r":[u]}],"border-color-b":[{"border-b":[u]}],"border-color-l":[{"border-l":[u]}],"divide-color":[{divide:[u]}],"outline-style":[{outline:["",...Te()]}],"outline-offset":[{"outline-offset":[vr,Se]}],"outline-w":[{outline:[vr,Kr]}],"outline-color":[{outline:[s]}],"ring-w":[{ring:Ne()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:[s]}],"ring-opacity":[{"ring-opacity":[C]}],"ring-offset-w":[{"ring-offset":[vr,Kr]}],"ring-offset-color":[{"ring-offset":[s]}],shadow:[{shadow:["","inner","none",Qr,Db]}],"shadow-color":[{shadow:[Fo]}],opacity:[{opacity:[C]}],"mix-blend":[{"mix-blend":[..._e(),"plus-lighter","plus-darker"]}],"bg-blend":[{"bg-blend":_e()}],filter:[{filter:["","none"]}],blur:[{blur:[a]}],brightness:[{brightness:[d]}],contrast:[{contrast:[v]}],"drop-shadow":[{"drop-shadow":["","none",Qr,Se]}],grayscale:[{grayscale:[x]}],"hue-rotate":[{"hue-rotate":[b]}],invert:[{invert:[w]}],saturate:[{saturate:[B]}],sepia:[{sepia:[$]}],"backdrop-filter":[{"backdrop-filter":["","none"]}],"backdrop-blur":[{"backdrop-blur":[a]}],"backdrop-brightness":[{"backdrop-brightness":[d]}],"backdrop-contrast":[{"backdrop-contrast":[v]}],"backdrop-grayscale":[{"backdrop-grayscale":[x]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[b]}],"backdrop-invert":[{"backdrop-invert":[w]}],"backdrop-opacity":[{"backdrop-opacity":[C]}],"backdrop-saturate":[{"backdrop-saturate":[B]}],"backdrop-sepia":[{"backdrop-sepia":[$]}],"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",Se]}],duration:[{duration:M()}],ease:[{ease:["linear","in","out","in-out",Se]}],delay:[{delay:M()}],animate:[{animate:["none","spin","ping","pulse","bounce",Se]}],transform:[{transform:["","gpu","none"]}],scale:[{scale:[z]}],"scale-x":[{"scale-x":[z]}],"scale-y":[{"scale-y":[z]}],rotate:[{rotate:[Lo,Se]}],"translate-x":[{"translate-x":[re]}],"translate-y":[{"translate-y":[re]}],"skew-x":[{"skew-x":[L]}],"skew-y":[{"skew-y":[L]}],"transform-origin":[{origin:["center","top","top-right","right","bottom-right","bottom","bottom-left","left","top-left",Se]}],accent:[{accent:["auto",s]}],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",Se]}],"caret-color":[{caret:[s]}],"pointer-events":[{"pointer-events":["none","auto"]}],resize:[{resize:["none","y","x",""]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scroll-m":[{"scroll-m":ne()}],"scroll-mx":[{"scroll-mx":ne()}],"scroll-my":[{"scroll-my":ne()}],"scroll-ms":[{"scroll-ms":ne()}],"scroll-me":[{"scroll-me":ne()}],"scroll-mt":[{"scroll-mt":ne()}],"scroll-mr":[{"scroll-mr":ne()}],"scroll-mb":[{"scroll-mb":ne()}],"scroll-ml":[{"scroll-ml":ne()}],"scroll-p":[{"scroll-p":ne()}],"scroll-px":[{"scroll-px":ne()}],"scroll-py":[{"scroll-py":ne()}],"scroll-ps":[{"scroll-ps":ne()}],"scroll-pe":[{"scroll-pe":ne()}],"scroll-pt":[{"scroll-pt":ne()}],"scroll-pr":[{"scroll-pr":ne()}],"scroll-pb":[{"scroll-pb":ne()}],"scroll-pl":[{"scroll-pl":ne()}],"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",Se]}],fill:[{fill:[s,"none"]}],"stroke-w":[{stroke:[vr,Kr,Ld]}],stroke:[{stroke:[s,"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"]}}},Fb=yb(Lb);function X(...s){return Fb(lb(s))}function Yo(s){return s?s.replace(/127\.0\.0\.1|localhost/g,"192.168.178.151"):""}const Ch=["fast","heavy","coder","vision","scout"],Ib={fast:"bg-cyan-500/15 text-cyan-400 border-cyan-500/25",heavy:"bg-amber-500/15 text-amber-400 border-amber-500/25",coder:"bg-violet-500/15 text-violet-400 border-violet-500/25",vision:"bg-pink-500/15 text-pink-400 border-pink-500/25",scout:"bg-teal-500/15 text-teal-400 border-teal-500/25",hermes:"bg-indigo-500/15 text-indigo-400 border-indigo-500/25"},Sc=s=>s&&Ib[s]||"bg-slate-500/15 text-slate-300 border-slate-500/25";function $b({fit:s}){const o={perfect:"bg-emerald-500/15 text-emerald-400 border border-emerald-500/20",marginal:"bg-amber-500/15 text-amber-400 border border-amber-500/20",too_tight:"bg-red-500/15 text-red-400 border border-red-500/20"}[s.level];return r.jsxs("span",{className:X("rounded px-2 py-0.5 text-[10px] font-semibold uppercase tracking-wider font-mono",o),children:[s.text," • ",s.req_gb," GB RAM"]})}function Xp(s){const o=s.toLowerCase();return o.includes("qwen")?{name:"Qwen",color:"bg-purple-500/20 text-purple-300 border-purple-500/30",initial:"Q"}:o.includes("gemma")?{name:"Gemma",color:"bg-blue-500/20 text-blue-300 border-blue-500/30",initial:"G"}:o.includes("llama")?{name:"Llama",color:"bg-red-500/20 text-red-300 border-red-500/30",initial:"🦙"}:o.includes("mistral")||o.includes("mixtral")?{name:"Mistral",color:"bg-orange-500/20 text-orange-300 border-orange-500/30",initial:"M"}:o.includes("deepseek")?{name:"DeepSeek",color:"bg-cyan-500/20 text-cyan-300 border-cyan-500/30",initial:"D"}:o.includes("hermes")||o.includes("nous")?{name:"Hermes",color:"bg-amber-500/20 text-amber-300 border-amber-500/30",initial:"H"}:o.includes("phi")?{name:"Phi",color:"bg-emerald-500/20 text-emerald-300 border-emerald-500/30",initial:"Φ"}:{name:"Other",color:"bg-slate-500/20 text-slate-300 border-slate-500/30",initial:"AI"}}function Ub(){const{data:s}=Bn(2e3),{data:o}=xh(2e3),a=(s==null?void 0:s.models)??[],d=(s==null?void 0:s.running)??[],u=a.filter(v=>d.includes(v.name)),f=g.useRef(null),[h,p]=g.useState(!1);return g.useEffect(()=>{if(!o)return;const v=o.total_tokens;if(f.current!==null&&v>f.current){p(!0);const x=setTimeout(()=>p(!1),4e3);return f.current=v,()=>clearTimeout(x)}f.current=v},[o==null?void 0:o.total_tokens]),r.jsxs("div",{className:"rounded-2xl border border-border/60 bg-card/45 backdrop-blur-md p-5 shadow-lg shadow-black/15",children:[r.jsxs("div",{className:"flex items-center justify-between mb-4",children:[r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx(Ho,{className:"h-4.5 w-4.5 text-primary"}),r.jsx("h2",{className:"text-sm font-semibold tracking-wide uppercase text-foreground",children:"Aktive Modelle (Live)"})]}),r.jsxs("span",{className:X("flex items-center gap-1.5 text-[10px] font-bold uppercase tracking-wider font-mono px-2 py-0.5 rounded-full border transition-colors",h?"bg-emerald-500/10 text-emerald-400 border-emerald-500/30":"bg-background/30 text-muted-foreground/70 border-border/40"),children:[h?r.jsx(Qo,{className:"h-3 w-3 animate-pulse"}):r.jsx(T0,{className:"h-3 w-3"}),h?"Inferenz aktiv":"Idle"]})]}),u.length===0?r.jsx("div",{className:"flex items-center justify-center gap-2 h-20 text-xs text-muted-foreground/70 italic",children:"Kein Modell geladen — Auto-Swap lädt bei Anfrage."}):r.jsx("div",{className:"grid gap-2 sm:grid-cols-2 xl:grid-cols-3",children:u.map(v=>{var x;return r.jsxs("div",{className:"flex items-center justify-between gap-2 p-3 rounded-xl bg-emerald-500/5 border border-emerald-500/20",children:[r.jsxs("div",{className:"min-w-0",children:[r.jsxs("div",{className:"flex items-center gap-1.5",children:[v.role&&r.jsx("span",{className:X("text-[8px] font-semibold uppercase px-1.5 py-0.5 rounded font-mono border tracking-wider shrink-0",Sc(v.role)),children:v.role}),r.jsx("span",{className:"text-xs font-semibold font-mono text-foreground truncate",children:(x=v.name.split("/").pop())==null?void 0:x.replace(/\.gguf$/i,"")})]}),r.jsxs("div",{className:"text-[9px] font-mono text-muted-foreground/70 mt-0.5",children:[$t(v.size_bytes)," im Unified-RAM"]})]}),r.jsxs("span",{className:"flex items-center gap-1 text-[8px] font-semibold text-emerald-400 uppercase tracking-wider font-mono shrink-0",children:[r.jsx("span",{className:X("h-1.5 w-1.5 rounded-full bg-emerald-500",h&&"animate-pulse")})," warm"]})]},v.name)})})]})}function Na({value:s,label:o,detail:a}){const u=2*Math.PI*24,f=u-Math.min(s,100)/100*u,h=s>90?"stroke-red-500":s>75?"stroke-amber-500":"stroke-primary";return r.jsxs("div",{className:"flex flex-col items-center gap-1.5 p-2 bg-background/20 rounded-xl border border-border/40",children:[r.jsxs("div",{className:"relative flex h-16 w-16 items-center justify-center",children:[r.jsxs("svg",{className:"absolute inset-0 h-full w-full -rotate-90",children:[r.jsx("circle",{cx:"32",cy:"32",r:24,className:"stroke-muted fill-none",strokeWidth:"4.5"}),r.jsx("circle",{cx:"32",cy:"32",r:24,className:X("fill-none transition-all duration-700 ease-out",h),strokeWidth:"4.5",strokeDasharray:u,strokeDashoffset:f,strokeLinecap:"round"})]}),r.jsxs("span",{className:"text-xs font-mono font-bold tracking-tight text-foreground",children:[Math.round(s),"%"]})]}),r.jsx("span",{className:"text-[11px] font-semibold text-muted-foreground uppercase tracking-wider",children:o}),a&&r.jsx("span",{className:"text-[10px] font-mono text-muted-foreground/80",children:a})]})}function Bb(){const{data:s}=Fa(3e3);return r.jsxs("div",{className:"md:col-span-2 flex flex-col justify-between rounded-2xl border border-border/60 bg-card/45 backdrop-blur-md p-5 shadow-lg shadow-black/15",children:[r.jsxs("div",{children:[r.jsxs("div",{className:"flex items-center gap-2 mb-4",children:[r.jsx(Dt,{className:"h-4.5 w-4.5 text-primary"}),r.jsx("h2",{className:"text-sm font-semibold tracking-wide uppercase text-foreground",children:"System-Status"})]}),s?r.jsxs("div",{className:"grid grid-cols-2 gap-3 sm:grid-cols-4",children:[r.jsx(Na,{value:s.cpu.percent,label:"CPU",detail:s.cpu.cores?`${s.cpu.cores} Cores`:void 0}),r.jsx(Na,{value:s.ram.percent,label:"RAM",detail:`${St(s.ram.used)} / ${St(s.ram.total)} GB`}),s.gpu&&s.gpu.busy_percent!=null&&s.gpu.gtt_used!=null&&s.gpu.gtt_total!=null&&r.jsx(Na,{value:s.gpu.busy_percent,label:"GPU",detail:`${St(s.gpu.gtt_used)} / ${St(s.gpu.gtt_total)} GB`}),s.disk&&r.jsx(Na,{value:s.disk.percent,label:"Disk",detail:`${St(s.disk.used)} / ${St(s.disk.total)} GB`})]}):r.jsx("div",{className:"h-28 flex items-center justify-center text-xs text-muted-foreground",children:"Lade Systemdaten…"})]}),(s==null?void 0:s.temp)&&(s.temp.cpu||s.temp.gpu)&&r.jsxs("div",{className:"mt-4 flex gap-4 text-xs font-mono text-muted-foreground/80 border-t border-border/30 pt-3",children:[s.temp.cpu!=null&&r.jsxs("span",{children:["CPU Temp: ",s.temp.cpu," °C"]}),s.temp.gpu!=null&&r.jsxs("span",{children:["GPU Temp: ",s.temp.gpu," °C"]})]})]})}function Eh({type:s,title:o,message:a,defaultValue:d,onConfirm:u,onCancel:f}){const h=g.useRef(null);return r.jsx("div",{className:"fixed inset-0 z-[99] bg-black/60 backdrop-blur-sm flex items-center justify-center p-4",children:r.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:[r.jsxs("div",{className:"flex items-center justify-between border-b border-border/20 pb-2",children:[r.jsx("h3",{className:"text-xs font-bold uppercase tracking-wider text-primary",children:o}),r.jsx("button",{onClick:f||(()=>u()),className:"p-1 rounded hover:bg-accent text-muted-foreground hover:text-foreground cursor-pointer",children:r.jsx(jr,{className:"h-4 w-4"})})]}),r.jsx("p",{className:"text-xs text-muted-foreground leading-relaxed",children:a}),s==="prompt"&&r.jsx("input",{ref:h,type:"text",defaultValue:d,className:"w-full 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:p=>{var v;p.key==="Enter"&&u((v=h.current)==null?void 0:v.value)}}),r.jsxs("div",{className:"flex justify-end gap-3 pt-2",children:[(s==="confirm"||s==="prompt")&&r.jsx("button",{onClick:f,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"}),r.jsx("button",{onClick:()=>{var v;const p=s==="prompt"?(v=h.current)==null?void 0:v.value:void 0;u(p)},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:s==="confirm"?"Ja, fortfahren":s==="prompt"?"Übernehmen":"OK"})]})]})})}function Hn(){const[s,o]=g.useState(null),a=g.useCallback(()=>o(null),[]),d=g.useCallback((p,v,x)=>{o({type:"alert",title:p,message:v,onConfirm:()=>{o(null),x==null||x()}})},[]),u=g.useCallback((p,v,x,b)=>{o({type:"confirm",title:p,message:v,onConfirm:()=>{o(null),x()},onCancel:()=>{o(null),b==null||b()}})},[]),f=g.useCallback((p,v,x,b,w)=>{o({type:"prompt",title:p,message:v,defaultValue:x,onConfirm:P=>{o(null),b(P)},onCancel:()=>{o(null),w==null||w()}})},[]),h=s?r.jsx(Eh,{...s}):null;return{showAlert:d,showConfirm:u,showPrompt:f,close:a,dialogElement:h}}function Hb(){var $;const s=cn(),{data:o}=kc(3e3),{data:a=[]}=hh(3e3),{showConfirm:d,dialogElement:u}=Hn(),[f,h]=g.useState(""),[p,v]=g.useState(!1),[x,b]=g.useState(""),[w,P]=g.useState(!1),[R,D]=g.useState({open:!1,actionPath:"",actionLabel:""}),E=()=>{s.invalidateQueries({queryKey:Qe.updates}),s.invalidateQueries({queryKey:Qe.jobs}),s.invalidateQueries({queryKey:Qe.models})};async function k(L,H,re,le){h(`${H} wird ausgeführt...`),v(!0);try{const he={...re},Q=await xe(L,{method:"POST",body:JSON.stringify(he)});if(Q.status==="password_required"||Q.status==="incorrect_password"){D({open:!0,actionPath:L,actionLabel:H,payload:re,error:Q.status==="incorrect_password"?"Falsches Sudo-Passwort. Bitte erneut versuchen.":void 0}),h("");return}Q.job_id?h(`${H} gestartet (Job-ID: ${Q.job_id})`):Q.ok?h(`${H} erfolgreich ausgeführt.`):h(`Fehler: ${Q.err||"Unbekannter Fehler"}`),E()}catch(he){h(`Fehler bei ${H}: ${he.message}`)}finally{v(!1)}}async function C(){P(!0);try{const L={...R.payload,sudo_password:x},H=await xe(R.actionPath,{method:"POST",body:JSON.stringify(L)});if(H.status==="password_required"||H.status==="incorrect_password"){D(re=>({...re,error:"Falsches Sudo-Passwort. Bitte erneut versuchen."}));return}H.job_id?h(`${R.actionLabel} gestartet (Job-ID: ${H.job_id})`):H.ok?h(`${R.actionLabel} erfolgreich ausgeführt.`):h(`Fehler: ${H.err||"Unbekannter Fehler"}`),D({open:!1,actionPath:"",actionLabel:""}),b(""),E()}catch(L){h(`Fehler: ${L.message}`),D({open:!1,actionPath:"",actionLabel:""}),b("")}finally{P(!1)}}async function I(L,H){h(`Upgrade für ${L} wird gestartet...`);try{await xe("/api/models/install",{method:"POST",body:JSON.stringify({repo:L,role:H,quant:"Q4_K_M",jinja:!0})}),h("Upgrade-Download gestartet."),E()}catch(re){h(`Upgrade fehlgeschlagen: ${re.message}`)}}const B=a.find(L=>L.label.includes("OS-Update")&&(L.state==="running"||L.state==="queued")),z=a.find(L=>L.label.includes("Engine-Update")&&(L.state==="running"||L.state==="queued"));return r.jsxs("div",{className:"rounded-2xl border border-border/60 bg-card/45 backdrop-blur-md p-5 shadow-lg shadow-black/15 flex flex-col justify-between",children:[R.open&&r.jsx("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/60 backdrop-blur-sm p-4",children:r.jsxs("div",{className:"w-full max-w-sm rounded-2xl border border-border/60 bg-card/90 backdrop-blur-xl p-5 shadow-2xl space-y-4",children:[r.jsxs("div",{className:"flex items-center justify-between border-b border-border/20 pb-2",children:[r.jsx("span",{className:"text-xs font-bold uppercase tracking-wider text-primary font-space",children:"Sudo-Passwort erforderlich"}),r.jsx("button",{onClick:()=>{D({open:!1,actionPath:"",actionLabel:""}),b("")},className:"p-1 rounded hover:bg-accent text-muted-foreground hover:text-foreground cursor-pointer",children:r.jsx(jr,{className:"h-4 w-4"})})]}),r.jsxs("p",{className:"text-[10px] text-muted-foreground leading-normal",children:["Für die Aktion ",r.jsx("strong",{children:R.actionLabel})," wird das Administrator-Passwort (Sudo) auf der Box benötigt."]}),r.jsxs("div",{className:"space-y-2",children:[r.jsx("input",{type:"password",value:x,onChange:L=>b(L.target.value),placeholder:"Sudo-Passwort eingeben...",className:"w-full h-9 rounded-lg border border-border/60 bg-background/40 px-3 text-xs outline-none focus:ring-1 focus:ring-primary/50 text-foreground",onKeyDown:L=>L.key==="Enter"&&C(),autoFocus:!0}),R.error&&r.jsx("div",{className:"text-[10px] font-semibold text-red-400",children:R.error})]}),r.jsxs("div",{className:"flex gap-2 justify-end",children:[r.jsx("button",{onClick:()=>{D({open:!1,actionPath:"",actionLabel:""}),b("")},className:"h-8 px-3 rounded-lg border border-border/60 bg-background/25 text-[10px] font-bold uppercase hover:bg-accent transition-all cursor-pointer",children:"Abbrechen"}),r.jsx("button",{onClick:C,disabled:!x||w,className:"h-8 px-4 rounded-lg bg-primary text-primary-foreground text-[10px] font-bold uppercase hover:opacity-90 transition-all disabled:opacity-50 cursor-pointer flex items-center justify-center gap-1.5",children:w?"Prüfe...":"Ausführen"})]})]})}),r.jsxs("div",{className:"space-y-4",children:[r.jsxs("div",{className:"flex items-center justify-between flex-wrap gap-2 border-b border-border/20 pb-2",children:[r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx(U0,{className:"h-4.5 w-4.5 text-primary"}),r.jsx("h2",{className:"text-sm font-semibold tracking-wide uppercase text-foreground",children:"Updates & Pflege"})]}),(o==null?void 0:o.last_check)&&r.jsxs("span",{className:"text-[9px] text-muted-foreground/80 font-mono",children:["Zuletzt gesucht: ",new Date(o.last_check*1e3).toLocaleString("de-DE",{day:"2-digit",month:"2-digit",year:"numeric",hour:"2-digit",minute:"2-digit"})]})]}),o?r.jsxs("div",{className:"space-y-3",children:[r.jsxs("div",{className:"space-y-1.5",children:[r.jsxs("div",{className:X("flex items-center justify-between px-3 py-1.5 rounded-lg border text-xs",o.os>0?"border-amber-500/30 bg-amber-500/5 text-amber-400 font-semibold":"border-border/30 bg-background/25 text-muted-foreground"),children:[r.jsx("span",{children:"OS-Pakete"}),r.jsx("span",{className:"font-mono",children:o.os>0?`${o.os} verfügbar`:"aktuell"})]}),r.jsxs("div",{className:X("flex items-center justify-between px-3 py-1.5 rounded-lg border text-xs",o.engine>0?"border-amber-500/30 bg-amber-500/5 text-amber-400 font-semibold":"border-border/30 bg-background/25 text-muted-foreground"),children:[r.jsx("span",{children:"Engine (llama.cpp)"}),r.jsx("span",{className:"font-mono",children:o.engine>0?"Update verfügbar":"aktuell"})]}),r.jsxs("div",{className:X("flex items-center justify-between px-3 py-1.5 rounded-lg border text-xs",o.models>0?"border-primary/30 bg-primary/5 text-primary font-semibold animate-pulse":"border-border/30 bg-background/25 text-muted-foreground"),children:[r.jsx("span",{children:"Modell-Upgrades"}),r.jsx("span",{className:"font-mono",children:o.models>0?`${o.models} verfügbar`:"aktuell"})]}),($=o.components)==null?void 0:$.map(L=>{const H=L.update===!0;return r.jsxs("div",{className:X("flex items-center justify-between px-3 py-1.5 rounded-lg border text-xs",H?"border-amber-500/30 bg-amber-500/5 text-amber-400 font-semibold":"border-border/30 bg-background/25 text-muted-foreground"),children:[r.jsxs("span",{className:"flex items-center gap-1.5",children:[L.name,L.reachable===!1&&r.jsx("span",{className:"text-[8px] font-bold uppercase text-red-400/80",children:"offline"})]}),r.jsx("span",{className:"font-mono text-[10px]",title:L.current?`installiert: ${L.current}`:void 0,children:H?`Update: ${L.latest}`:L.update===!1?"aktuell":L.latest?`neueste: ${L.latest}`:"—"})]},L.key)})]}),r.jsxs("div",{className:"grid grid-cols-2 gap-2 border-t border-border/20 pt-3",children:[r.jsx("button",{onClick:()=>k("/api/maintenance/os-update","OS-Update"),disabled:p||!!B,className:"h-8 px-2 rounded-lg border border-border/60 bg-background/20 text-[10px] font-bold uppercase hover:border-primary/50 hover:bg-background/40 transition-all cursor-pointer disabled:opacity-50 flex items-center justify-center gap-1",children:B?r.jsxs(r.Fragment,{children:[r.jsx(In,{className:"h-3 w-3 animate-spin text-primary"}),r.jsxs("span",{children:["Aktiv (",B.progress??0,"%)"]})]}):r.jsx("span",{children:"OS Update"})}),r.jsx("button",{onClick:()=>k("/api/maintenance/engine-update","Engine-Update"),disabled:p||!!z,className:"h-8 px-2 rounded-lg border border-border/60 bg-background/20 text-[10px] font-bold uppercase hover:border-primary/50 hover:bg-background/40 transition-all cursor-pointer disabled:opacity-50 flex items-center justify-center gap-1",children:z?r.jsxs(r.Fragment,{children:[r.jsx(In,{className:"h-3 w-3 animate-spin text-primary"}),r.jsxs("span",{children:["Aktiv (",z.progress??0,"%)"]})]}):r.jsx("span",{children:"Engine Update"})})]}),r.jsxs("button",{onClick:()=>{d("Host-System neu starten?","Bist du sicher, dass du das Host-System neu starten willst?",()=>k("/api/maintenance/reboot","Reboot"))},disabled:p,className:"w-full h-8 flex items-center justify-center gap-1.5 rounded-lg border border-red-500/30 bg-red-500/5 text-red-400 text-[10px] font-bold uppercase hover:bg-red-500/10 transition-all cursor-pointer disabled:opacity-50",children:[r.jsx(Om,{className:"h-3.5 w-3.5"}),r.jsx("span",{children:"Host Reboot"})]}),o.model_list.length>0&&r.jsxs("div",{className:"space-y-1.5 border-t border-border/20 pt-3",children:[r.jsx("div",{className:"text-[9px] uppercase font-bold text-muted-foreground/60 tracking-wider",children:"Verfügbare Modell-Upgrades:"}),r.jsx("div",{className:"max-h-24 overflow-y-auto space-y-1.5 pr-1 scrollbar-thin",children:o.model_list.map(L=>r.jsxs("div",{className:"flex items-center justify-between p-2 rounded bg-background/25 border border-border/30 text-[10px] font-mono text-muted-foreground",children:[r.jsxs("span",{className:"truncate flex-1 mr-1.5",title:`${L.role}: ${L.repo}`,children:[r.jsx("span",{className:"text-primary font-bold uppercase",children:L.role}),": ",L.repo.split("/").pop()]}),r.jsxs("button",{onClick:()=>I(L.repo,L.role),className:"px-2 py-0.5 text-[8px] font-bold uppercase rounded bg-primary text-primary-foreground hover:opacity-90 transition-all cursor-pointer flex items-center gap-0.5",children:[r.jsx(an,{className:"h-2.5 w-2.5"})," Laden"]})]},L.repo))})]})]}):r.jsx("div",{className:"h-24 flex items-center justify-center text-xs text-muted-foreground",children:"Lade Updates..."}),f&&r.jsx("div",{className:"text-[10px] font-mono text-primary font-medium bg-primary/5 p-2 rounded-lg border border-primary/20 break-all leading-normal",children:f}),r.jsxs("div",{className:"text-[9px] text-muted-foreground/60 leading-normal border-t border-border/10 pt-2.5 flex items-start gap-1",children:[r.jsx(Us,{className:"h-3 w-3 shrink-0 text-muted-foreground/50 mt-0.5"}),r.jsxs("span",{children:["OS-Update & Reboot benötigen NOPASSWD in ",r.jsx("code",{children:"/etc/sudoers"})," (z.B. ",r.jsx("code",{children:"hitonabi ALL=(root) NOPASSWD:..."}),") oder ein gültiges Sudo-Passwort per Pop-up."]})]})]}),r.jsx("div",{className:"mt-4 border-t border-border/30 pt-3 shrink-0",children:r.jsx("button",{onClick:()=>window.dispatchEvent(new CustomEvent("open-system-drawer")),className:"w-full h-8 flex items-center justify-center gap-1.5 rounded-lg bg-primary text-primary-foreground text-xs font-semibold hover:opacity-90 transition-all cursor-pointer shadow-md shadow-primary/10",children:"System-Zentrale öffnen"})}),u]})}function Gb(){const s=cn(),{data:o}=gh(3e3),{data:a}=Bn(),{showAlert:d,dialogElement:u}=Hn(),[f,h]=g.useState(!1),p=(a==null?void 0:a.models)??[];async function v(x){try{await xe("/api/agent/brain",{method:"POST",body:JSON.stringify({model:x})}),d("Erfolgreich",`Hermes-Gehirn wurde auf '${x}' geändert. Der Gateway-Dienst wurde neu gestartet.`),s.invalidateQueries({queryKey:Qe.agentStatus}),h(!1)}catch(b){d("Fehler",`Fehler beim Wechseln des Gehirns: ${b.message}`)}}return r.jsxs("div",{className:"rounded-2xl border border-border/60 bg-card/45 backdrop-blur-md p-5 shadow-lg shadow-black/15 flex flex-col justify-between",children:[r.jsxs("div",{children:[r.jsxs("div",{className:"flex items-center justify-between mb-4",children:[r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx($s,{className:"h-4.5 w-4.5 text-primary"}),r.jsx("h2",{className:"text-sm font-semibold tracking-wide uppercase text-foreground",children:"Hermes Agent"})]}),(o==null?void 0:o.webui_url)&&r.jsxs("a",{href:Yo(o.webui_url),target:"_blank",rel:"noopener",className:X("flex items-center gap-1 px-3 py-1 rounded-lg text-xs font-medium transition-all",o.webui_reachable?"bg-primary text-primary-foreground hover:opacity-90 shadow-md shadow-primary/20":"border border-border text-muted-foreground"),children:[r.jsx(Ra,{className:"h-3 w-3"})," AnythingLLM öffnen"]})]}),o?r.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[r.jsxs("div",{className:"p-3 bg-background/20 rounded-xl border border-border/40",children:[r.jsx("div",{className:"text-[10px] text-muted-foreground uppercase font-semibold",children:"Gateway"}),r.jsxs("div",{className:"flex items-center gap-2 mt-1",children:[r.jsx("span",{className:X("h-2 w-2 rounded-full",o.gateway_reachable?"bg-emerald-500 animate-pulse":"bg-amber-500")}),r.jsx("span",{className:"text-xs font-medium",children:o.gateway_reachable?"Online":"Offline"})]})]}),r.jsxs("div",{className:"p-3 bg-background/20 rounded-xl border border-border/40",children:[r.jsx("div",{className:"text-[10px] text-muted-foreground uppercase font-semibold",children:"AnythingLLM"}),r.jsxs("div",{className:"flex items-center gap-2 mt-1",children:[r.jsx("span",{className:X("h-2 w-2 rounded-full",o.webui_reachable?"bg-emerald-500 animate-pulse":"bg-amber-500")}),r.jsx("span",{className:"text-xs font-medium",children:o.webui_reachable?"Online":"Offline"})]})]}),r.jsxs("div",{onClick:()=>h(!0),className:"p-3 bg-background/20 rounded-xl border border-border/40 hover:border-primary/45 hover:bg-background/30 transition-all duration-300 cursor-pointer",children:[r.jsxs("div",{className:"flex justify-between items-center",children:[r.jsx("span",{className:"text-[10px] text-muted-foreground uppercase font-semibold",children:"Gehirn"}),r.jsx(Dt,{className:"h-3 w-3 text-primary"})]}),r.jsxs("div",{className:"text-xs font-medium mt-1 font-mono text-primary truncate flex items-center gap-1",children:[r.jsx(Vo,{className:"h-3 w-3 shrink-0"}),o.brain_model||"auto"]})]}),r.jsxs("div",{className:"p-3 bg-background/20 rounded-xl border border-border/40",children:[r.jsxs("div",{className:"flex justify-between items-center",children:[r.jsx("span",{className:"text-[10px] text-muted-foreground uppercase font-semibold",children:"Verdrahtung"}),r.jsx(Ko,{className:"h-3 w-3 text-primary"})]}),r.jsxs("div",{className:"text-[10px] font-mono mt-1 space-y-0.5 text-muted-foreground",children:[r.jsxs("div",{children:["Config: ",o.has_config?r.jsx("span",{className:"text-emerald-400",children:"✓"}):"—"]}),r.jsxs("div",{children:["Skills: ",o.has_skills?r.jsx("span",{className:"text-emerald-400",children:"✓"}):"—"]}),r.jsxs("div",{children:["Memory: ",o.has_memories?r.jsx("span",{className:"text-emerald-400",children:"✓"}):"—"]})]})]})]}):r.jsx("div",{className:"h-28 flex items-center justify-center text-xs text-muted-foreground",children:"Lade Agenten-Status…"})]}),o&&r.jsxs("div",{className:"mt-3 border-t border-border/30 pt-3 space-y-1.5",children:[r.jsxs("div",{className:"flex items-center justify-between text-[10px] text-muted-foreground",children:[r.jsx("span",{children:"Telegram"}),r.jsx("span",{className:X("font-semibold",o.telegram_enabled?"text-emerald-400":""),children:o.telegram_enabled?"aktiv":"nicht konfiguriert"})]}),r.jsxs("div",{className:"flex items-center justify-between text-[10px] text-muted-foreground",children:[r.jsx("span",{children:"MCP-Server"}),r.jsxs("span",{className:"font-semibold text-foreground",children:[o.mcp_server_count??0," verbunden"]})]}),r.jsxs("div",{className:"flex items-center justify-between text-[10px] text-muted-foreground",children:[r.jsx("span",{children:"PC Executor"}),r.jsx("span",{className:X("font-semibold",o.pc_executor_reachable?"text-emerald-400":""),children:o.pc_executor_reachable?"erreichbar":"nicht verbunden"})]})]}),o&&f&&r.jsx("div",{className:"fixed inset-0 z-50 bg-black/60 backdrop-blur-sm flex items-center justify-center p-4",children:r.jsxs("div",{className:"w-full max-w-md 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:[r.jsxs("div",{className:"flex items-center justify-between border-b border-border/20 pb-2",children:[r.jsxs("h3",{className:"text-xs font-bold uppercase tracking-wider text-primary flex items-center gap-1.5",children:[r.jsx(Dt,{className:"h-4 w-4"}),r.jsx("span",{children:"Hermes-Gehirn konfigurieren"})]}),r.jsx("button",{onClick:()=>h(!1),className:"p-1 rounded hover:bg-accent text-muted-foreground hover:text-foreground cursor-pointer",children:r.jsx(jr,{className:"h-4 w-4"})})]}),r.jsxs("p",{className:"text-xs text-muted-foreground leading-relaxed",children:['Das „Gehirn" ist das primäre LLM für Hermes. Wähle ein Modell aus deiner Bibliothek oder nutze ein Gateway-Alias (',r.jsx("code",{className:"text-primary font-semibold",children:"auto"})," / ",r.jsx("code",{className:"text-primary font-semibold",children:"fast"})," / ",r.jsx("code",{className:"text-primary font-semibold",children:"heavy"}),"):"]}),r.jsx("div",{className:"space-y-1.5 max-h-60 overflow-y-auto pr-1",children:["auto","fast","heavy",...p.map(x=>{var b;return((b=x.name.split("/").pop())==null?void 0:b.replace(".gguf",""))||x.name})].map(x=>{const b=["auto","fast","heavy"].includes(x);return r.jsxs("button",{onClick:()=>v(x),className:X("w-full text-left px-3 py-2.5 rounded-lg text-xs hover:bg-accent flex items-center justify-between font-mono cursor-pointer border border-border/30",o.brain_model===x||!o.brain_model&&x==="auto"?"text-primary font-bold bg-primary/10 border-primary/30":"text-foreground bg-background/20"),children:[r.jsxs("div",{className:"flex flex-col text-left",children:[r.jsx("span",{className:"font-semibold truncate max-w-[280px]",children:x}),r.jsx("span",{className:"text-[9px] text-muted-foreground mt-0.5",children:b?"Gateway Routing Alias":"Installiertes GGUF Modell"})]}),(o.brain_model===x||!o.brain_model&&x==="auto")&&r.jsx(ir,{className:"h-4 w-4 shrink-0 text-primary"})]},x)})})]})}),u]})}function Vb(){const{data:s}=Bn(3e3),o=(s==null?void 0:s.models)??[],a=(s==null?void 0:s.running)??[];return r.jsxs("div",{className:"rounded-2xl border border-border/60 bg-card/45 backdrop-blur-md p-5 shadow-lg shadow-black/15 flex flex-col justify-between",children:[r.jsxs("div",{children:[r.jsxs("div",{className:"flex items-center gap-2 mb-4",children:[r.jsx(Vo,{className:"h-4.5 w-4.5 text-primary"}),r.jsx("h2",{className:"text-sm font-semibold tracking-wide uppercase text-foreground",children:"Rollen-Belegung"})]}),r.jsx("div",{className:"space-y-2 max-h-48 overflow-y-auto pr-1 scrollbar-thin",children:Ch.map(d=>{var h;const u=o.find(p=>p.role===d),f=u?a.includes(u.name):!1;return r.jsxs("div",{className:X("flex items-center justify-between p-2 rounded-xl border transition-all duration-300",f?"border-emerald-500/30 bg-emerald-500/5 shadow-sm shadow-emerald-500/5":u?"border-primary/20 bg-primary/5":"border-border/30 bg-background/10 opacity-60"),children:[r.jsx("div",{className:"min-w-0 flex-1 mr-2",children:r.jsxs("div",{className:"flex items-center gap-2 min-w-0",children:[r.jsx("span",{className:X("text-[9px] font-semibold uppercase px-1.5 py-0.5 rounded font-mono border tracking-wider shrink-0",Sc(d)),children:d}),r.jsxs("div",{className:"flex flex-col min-w-0",children:[r.jsx("span",{className:"text-xs font-semibold truncate font-mono text-foreground",children:u?(h=u.name.split("/").pop())==null?void 0:h.replace(/\.gguf$/i,""):"nicht zugewiesen"}),u&&r.jsxs("div",{className:"flex gap-1 items-center mt-0.5 flex-wrap",children:[u.prompt_cache&&r.jsx("span",{className:"text-[7px] leading-none font-mono font-bold bg-cyan-500/10 text-cyan-400 border border-cyan-500/20 px-1 py-0.5 rounded",title:"Prompt Caching aktiv",children:"PC"}),u.spec_active&&r.jsx("span",{className:"text-[7px] leading-none font-mono font-bold bg-emerald-500/10 text-emerald-400 border border-emerald-500/20 px-1 py-0.5 rounded",title:`Speculative Decoding aktiv (Draft: ${u.spec_draft_model})`,children:"SPEC"}),u.parallel_slots>1&&r.jsxs("span",{className:"text-[7px] leading-none font-mono font-bold bg-violet-500/10 text-violet-400 border border-violet-500/20 px-1 py-0.5 rounded",title:`${u.parallel_slots} parallele Slots aktiv`,children:["SLOTS: ",u.parallel_slots]}),u.incomplete&&r.jsx("span",{className:"text-[7px] leading-none font-mono font-bold bg-amber-500/10 text-amber-400 border border-amber-500/20 px-1 py-0.5 rounded",title:"GGUF-Datei fehlt",children:"⚠ fehlt"})]})]})]})}),r.jsx("div",{className:"flex items-center gap-1.5 shrink-0",children:u?f?r.jsxs("span",{className:"flex items-center gap-1 text-[8px] font-semibold text-emerald-400 uppercase tracking-wider font-mono",children:[r.jsx("span",{className:"h-1.5 w-1.5 rounded-full bg-emerald-500 animate-pulse"})," warm"]}):r.jsx("span",{className:"text-[8px] font-semibold text-muted-foreground uppercase tracking-wider font-mono",children:"bereit"}):r.jsx("span",{className:"text-[8px] font-semibold text-muted-foreground/60 uppercase tracking-wider font-mono",children:"—"})})]},d)})})]}),r.jsx("div",{className:"mt-4 text-[10px] text-muted-foreground/80 border-t border-border/30 pt-3",children:"Laden erfolgt automatisch per Auto-Swap."})]})}function Wb(){const s=cn(),{data:o=[]}=yh({limit:3}),[a,d]=g.useState(""),[u,f]=g.useState("stable"),[h,p]=g.useState(!1);async function v(){if(!(!a.trim()||h)){p(!0);try{await xe("/api/memory",{method:"POST",body:JSON.stringify({content:a,category:u,source:"dashboard"})}),d(""),s.invalidateQueries({queryKey:["memory"]})}catch(x){console.error(x)}finally{p(!1)}}}return r.jsxs("div",{className:"rounded-2xl border border-border/60 bg-card/45 backdrop-blur-md p-5 shadow-lg shadow-black/15 flex flex-col justify-between",children:[r.jsxs("div",{children:[r.jsxs("div",{className:"flex items-center gap-2 mb-4",children:[r.jsx(Go,{className:"h-4.5 w-4.5 text-primary"}),r.jsx("h2",{className:"text-sm font-semibold tracking-wide uppercase text-foreground",children:"Gedächtnis"})]}),r.jsxs("div",{className:"space-y-3",children:[r.jsx("textarea",{value:a,onChange:x=>d(x.target.value),placeholder:"Fakt / Regel im Pool speichern...",rows:2,className:"w-full resize-none rounded-xl border border-border/50 bg-background/30 p-2 text-[10px] outline-none focus:ring-1 focus:ring-primary transition-all leading-normal"}),r.jsxs("div",{className:"flex items-center gap-2 justify-between",children:[r.jsxs("select",{value:u,onChange:x=>f(x.target.value),className:"h-7 rounded-lg border border-border/50 bg-background/50 px-2 text-[10px] outline-none cursor-pointer",children:[r.jsx("option",{value:"stable",children:"🔵 Fakt"}),r.jsx("option",{value:"instruction",children:"📋 Regel"}),r.jsx("option",{value:"user",children:"👤 User"}),r.jsx("option",{value:"versioned",children:"🟡 Version"})]}),r.jsxs("button",{onClick:v,disabled:!a.trim()||h,className:"flex h-7 items-center gap-1 rounded-lg bg-primary px-3 text-[10px] font-semibold text-primary-foreground hover:opacity-90 disabled:opacity-50 transition-all cursor-pointer",children:[r.jsx(Rm,{className:"h-3.5 w-3.5"})," Speichern"]})]})]}),r.jsxs("div",{className:"mt-3.5 space-y-1.5",children:[r.jsx("div",{className:"text-[9px] text-muted-foreground uppercase font-bold tracking-wider",children:"Zuletzt gespeichert:"}),r.jsx("div",{className:"max-h-20 overflow-y-auto space-y-1 pr-1 scrollbar-thin",children:o.length===0?r.jsx("div",{className:"text-[10px] text-muted-foreground/75 py-1",children:"Keine Einträge vorhanden."}):o.map(x=>r.jsxs("div",{className:"text-[10px] bg-background/10 border border-border/30 rounded p-1.5 flex items-start gap-1.5",children:[r.jsx("span",{className:"shrink-0 text-[8px] font-mono text-muted-foreground/80 px-1 py-0.5 rounded bg-muted/20",children:x.category}),r.jsx("span",{className:"truncate flex-1 text-muted-foreground hover:text-foreground transition-colors",title:x.content,children:x.content})]},x.id))})]})]}),r.jsx("div",{className:"mt-4 text-[10px] text-muted-foreground/80 border-t border-border/30 pt-3",children:"Steht allen Clients per MCP zur Verfügung."})]})}function Kb(){var o;const{data:s}=xh(3e3);return r.jsxs("div",{className:"rounded-2xl border border-border/60 bg-card/45 backdrop-blur-md p-5 shadow-lg shadow-black/15 flex flex-col justify-between",children:[r.jsxs("div",{children:[r.jsxs("div",{className:"flex items-center gap-2 mb-4",children:[r.jsx(C0,{className:"h-4.5 w-4.5 text-primary animate-pulse"}),r.jsx("h2",{className:"text-sm font-semibold tracking-wide uppercase text-foreground",children:"Effizienz & Ersparnis"})]}),s?r.jsxs("div",{className:"space-y-4",children:[r.jsxs("div",{className:"grid grid-cols-2 gap-2.5",children:[r.jsxs("div",{className:"p-3 bg-background/20 rounded-xl border border-border/40 text-left",children:[r.jsx("div",{className:"text-[8px] uppercase tracking-wider font-semibold text-muted-foreground/60",children:"Geld gespart"}),r.jsxs("div",{className:"text-base font-bold text-emerald-400 mt-0.5 tracking-tight font-space",children:[s.saved_eur.toLocaleString("de-DE",{minimumFractionDigits:2})," €"]}),r.jsxs("div",{className:"text-[8px] text-muted-foreground/80 mt-0.5 font-mono",children:["(",s.saved_usd.toLocaleString("en-US",{minimumFractionDigits:2})," $)"]})]}),r.jsxs("div",{className:"p-3 bg-background/20 rounded-xl border border-border/40 text-left",children:[r.jsx("div",{className:"text-[8px] uppercase tracking-wider font-semibold text-muted-foreground/60",children:"Gesamt-Tokens"}),r.jsx("div",{className:"text-base font-bold text-primary mt-0.5 tracking-tight font-space",children:s.total_tokens.toLocaleString("de-DE")}),r.jsx("div",{className:"text-[8px] text-muted-foreground/80 mt-0.5 font-mono",children:"(Lokale Inferenz)"})]})]}),r.jsxs("div",{className:"space-y-2 border-t border-border/20 pt-3 text-[10px] text-muted-foreground",children:[r.jsxs("div",{className:"flex justify-between items-center font-mono",children:[r.jsx("span",{children:"Input (Prompts):"}),r.jsxs("span",{className:"font-semibold text-foreground",children:[s.prompt_tokens.toLocaleString("de-DE")," tkn"]})]}),r.jsxs("div",{className:"flex justify-between items-center font-mono",children:[r.jsx("span",{children:"Output (Antworten):"}),r.jsxs("span",{className:"font-semibold text-foreground",children:[s.completion_tokens.toLocaleString("de-DE")," tkn"]})]})]})]}):r.jsx("div",{className:"h-28 flex items-center justify-center text-xs text-muted-foreground",children:"Lade Statistiken…"})]}),r.jsxs("div",{className:"mt-4 text-[9px] text-muted-foreground/70 border-t border-border/30 pt-2.5 leading-normal",children:["Berechnet ggü. Cloud-APIs",(o=s==null?void 0:s.pricing)!=null&&o.heavy?` (Ø ${(s.pricing.heavy.in??0).toFixed(2).replace(".",",")} $ / ${(s.pricing.heavy.out??0).toFixed(2).replace(".",",")} $ pro 1M tkn).`:"."]})]})}function Qb(){return r.jsxs("div",{className:"space-y-6",children:[r.jsxs("div",{children:[r.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:"Zentrale"}),r.jsx("p",{className:"text-sm text-muted-foreground",children:"Aktueller Status von System, Modellen und Agent."})]}),r.jsx(Ub,{}),r.jsxs("div",{className:"grid gap-6 md:grid-cols-3",children:[r.jsx(Bb,{}),r.jsx(Hb,{})]}),r.jsxs("div",{className:"grid gap-6 md:grid-cols-2 xl:grid-cols-4",children:[r.jsx(Gb,{}),r.jsx(Vb,{}),r.jsx(Wb,{}),r.jsx(Kb,{})]})]})}function qb(){const s=cn(),{data:o=[]}=hh(2e3),{showAlert:a,dialogElement:d}=Hn();async function u(p){try{await xe(`/api/jobs/${p}/cancel`,{method:"POST"}),s.invalidateQueries({queryKey:Qe.jobs})}catch(v){a("Fehler",v.message)}}const f=o.filter(p=>p.state==="running"||p.state==="queued"),h=o.filter(p=>p.state!=="running"&&p.state!=="queued").slice(-3);return f.length===0&&h.length===0?null:r.jsxs("div",{className:"space-y-3 rounded-2xl border border-border/60 bg-card/45 backdrop-blur-md p-4 shadow-lg shadow-black/10",children:[r.jsx("div",{className:"text-[11px] font-semibold text-muted-foreground uppercase tracking-wider",children:"Aktive Downloads"}),f.map(p=>r.jsxs("div",{className:"space-y-1.5 p-3 rounded-xl bg-background/20 border border-border/40",children:[r.jsxs("div",{className:"flex justify-between items-center text-xs",children:[r.jsx("span",{className:"font-semibold truncate max-w-[250px]",children:p.label}),r.jsxs("div",{className:"flex items-center gap-3",children:[r.jsxs("span",{className:"text-muted-foreground font-mono",children:[p.progress??0,"% • ",dc(p.done_bytes),"/",dc(p.total_bytes),p.eta_s?` • ETA ${ob(p.eta_s)}`:""]}),r.jsx("button",{onClick:()=>u(p.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"})]})]}),r.jsx("div",{className:"h-1.5 overflow-hidden rounded-full bg-muted",children:r.jsx("div",{className:"h-full rounded-full bg-primary transition-all duration-500",style:{width:`${p.progress??0}%`}})})]},p.id)),h.map(p=>r.jsxs("div",{className:"flex justify-between items-center text-xs text-muted-foreground px-1",children:[r.jsx("span",{className:"truncate",children:p.label}),r.jsx("span",{className:X("font-semibold text-[10px] px-1.5 py-0.5 rounded uppercase font-mono",p.state==="done"?"bg-emerald-500/10 text-emerald-400":"bg-amber-500/10 text-amber-400"),children:p.state})]},p.id)),d]})}function _n({children:s,tone:o="muted"}){const a={muted:"bg-muted text-muted-foreground",primary:"bg-primary/15 text-primary",warn:"bg-amber-500/15 text-amber-500"};return r.jsx("span",{className:`rounded px-1.5 py-0.5 text-[11px] font-medium ${a[o]}`,children:s})}function em({caps:s}){return s?r.jsxs("span",{className:"inline-flex flex-wrap gap-1",children:[s.coder&&r.jsx(_n,{children:"💻 Code"}),s.vision&&r.jsx(_n,{children:"👁 Bild"}),s.reasoning&&r.jsx(_n,{children:"🧠 Reason"}),s.moe&&r.jsxs(_n,{tone:"primary",children:["🧩 MoE",s.active_b?`·${s.active_b}b`:""]}),s.tools==="yes"&&r.jsx(_n,{tone:"primary",children:"🛠 Tools"}),s.tools==="likely"&&r.jsx(_n,{tone:"warn",children:"🛠 Tools?"}),s.embedding&&r.jsx(_n,{children:"🔢 Embed"})]}):null}function Zb({model:s,onClose:o,onChanged:a}){var E,k;const{data:d,isLoading:u}=sb(s.gguf_path),[f,h]=g.useState(null),[p,v]=g.useState(""),x=d==null?void 0:d.target_vocab,b=(d==null?void 0:d.drafts)??[],w=b.filter(C=>C.compatible===!0),P=s.spec_draft_model;async function R(C){h(C??"__clear__"),v("");try{await xe(`/api/models/${encodeURIComponent(s.name)}/draft`,{method:"POST",body:JSON.stringify({draft_path:C})}),a(),o()}catch(I){v(String((I==null?void 0:I.message)||I)),h(null)}}const D=C=>{var I;return C?`${C.pre??"?"} · ${((I=C.n_vocab)==null?void 0:I.toLocaleString())??"?"} Tokens`:"—"};return r.jsx("div",{className:"fixed inset-0 z-50 bg-black/60 backdrop-blur-sm flex items-center justify-center p-4",children:r.jsxs("div",{className:"w-full max-w-lg 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:[r.jsxs("div",{className:"flex items-center justify-between border-b border-border/20 pb-2",children:[r.jsxs("h3",{className:"text-xs font-bold uppercase tracking-wider text-primary flex items-center gap-2",children:[r.jsx(Qo,{className:"h-4 w-4"})," Speculative Draft"]}),r.jsx("button",{onClick:o,className:"p-1 rounded hover:bg-accent text-muted-foreground hover:text-foreground cursor-pointer",children:r.jsx(jr,{className:"h-4 w-4"})})]}),r.jsxs("div",{className:"text-xs text-muted-foreground leading-relaxed",children:['Beschleunigt die Token-Generierung mit einem kleinen "Draft"-Modell. Voraussetzung: der Draft muss den ',r.jsx("strong",{className:"text-foreground",children:"exakt gleichen Tokenizer (Vocab)"})," haben wie das Modell — sonst lehnt llama.cpp es ab."]}),r.jsxs("div",{className:"rounded-lg border border-border/40 bg-background/30 px-3 py-2 text-[11px] font-mono flex items-center justify-between",children:[r.jsx("span",{className:"text-muted-foreground",children:(E=s.name.split("/").pop())==null?void 0:E.replace(/\.gguf$/i,"")}),r.jsxs("span",{className:"text-foreground",children:["Vocab: ",D(x)]})]}),s.spec_active&&P&&r.jsxs("div",{className:"rounded-lg border border-emerald-500/30 bg-emerald-500/5 px-3 py-2 flex items-center justify-between gap-2",children:[r.jsxs("span",{className:"text-[11px] text-emerald-400 font-mono flex items-center gap-1.5 truncate",children:[r.jsx(ir,{className:"h-3.5 w-3.5 shrink-0"})," Aktiv: ",P]}),r.jsx("button",{onClick:()=>R(null),disabled:f!==null,className:"h-6 px-2.5 rounded border border-amber-500/30 bg-amber-500/5 hover:bg-amber-500/10 text-amber-400 text-[9px] font-bold uppercase shrink-0 cursor-pointer disabled:opacity-50",children:"Deaktivieren"})]}),!(d!=null&&d.target_exists)&&r.jsxs("div",{className:"rounded-lg border border-amber-500/30 bg-amber-500/5 px-3 py-2 text-[11px] text-amber-400 flex items-center gap-2",children:[r.jsx(Wo,{className:"h-3.5 w-3.5 shrink-0"}),"Modell-GGUF noch nicht vorhanden — Spec-Draft ist nach dem Download konfigurierbar."]}),r.jsx("div",{className:"space-y-1.5 max-h-64 overflow-y-auto pr-1",children:u?r.jsx("div",{className:"text-xs text-muted-foreground py-6 text-center",children:"Prüfe Vocab-Kompatibilität…"}):b.length===0?r.jsxs("div",{className:"text-[11px] text-muted-foreground border border-dashed border-border/50 rounded-lg p-4 text-center",children:["Keine Draft-Modelle in ",r.jsx("code",{className:"font-mono",children:"/srv/models/drafts"}),". Lade ein kleines same-family-Modell (z.B. Qwen3-0.6B) und lege es dort ab."]}):b.map(C=>{var z,$;const I=C.filename===P,B=C.compatible===!0;return r.jsxs("div",{className:X("rounded-lg border px-3 py-2 flex items-center justify-between gap-2 text-left",B?"border-border/40 bg-background/20":"border-border/20 bg-background/10 opacity-60",I&&"border-primary/40 bg-primary/10"),children:[r.jsxs("div",{className:"min-w-0",children:[r.jsx("div",{className:"text-[11px] font-mono font-semibold text-foreground truncate",children:C.filename}),r.jsxs("div",{className:"text-[9px] text-muted-foreground font-mono",children:[$t(C.size_bytes)," · Vocab: ",D(C.vocab)]})]}),B?I?r.jsxs("span",{className:"text-[9px] font-bold uppercase text-primary flex items-center gap-1 shrink-0",children:[r.jsx(ir,{className:"h-3.5 w-3.5"})," Aktiv"]}):r.jsx("button",{onClick:()=>R(C.path),disabled:f!==null,className:"h-7 px-3 rounded-lg border border-emerald-500/30 bg-emerald-500/5 hover:bg-emerald-500/15 text-emerald-400 text-[9px] font-bold uppercase shrink-0 cursor-pointer disabled:opacity-50",children:"Aktivieren"}):r.jsxs("span",{className:"text-[9px] font-bold uppercase text-amber-400/80 flex items-center gap-1 shrink-0",title:C.compatible===!1?`Inkompatibel: Tokenizer/Vocab weicht ab (Draft ${(z=C.vocab)==null?void 0:z.pre}/${($=C.vocab)==null?void 0:$.n_vocab} ≠ Modell ${x==null?void 0:x.pre}/${x==null?void 0:x.n_vocab}).`:"Kompatibilität nicht prüfbar (Datei fehlt).",children:[r.jsx(Wo,{className:"h-3.5 w-3.5"})," ",C.compatible===!1?"Vocab ≠":"n/a"]})]},C.path)})}),!u&&(d==null?void 0:d.target_exists)&&b.length>0&&w.length===0&&r.jsxs("div",{className:"rounded-lg border border-amber-500/30 bg-amber-500/5 px-3 py-2 text-[11px] text-amber-400 leading-relaxed",children:["Kein vocab-kompatibler Draft verfügbar — Speculative Decoding ist für dieses Modell nicht möglich. Es braucht einen Draft mit identischem Tokenizer (pre=",r.jsx("span",{className:"font-mono",children:x==null?void 0:x.pre}),", n_vocab=",r.jsx("span",{className:"font-mono",children:(k=x==null?void 0:x.n_vocab)==null?void 0:k.toLocaleString()}),")."]}),p&&r.jsx("div",{className:"text-[10px] text-red-400 font-mono",children:p})]})})}function Yb(){var Ks,Qs,qs,Qn,fn,Zs,Cr,Er;const s=cn(),{data:o,isLoading:a,error:d}=Bn(4e3),{data:u}=tb(4e3),{data:f}=vh(),{data:h}=kc(4e3),{data:p}=rb(),{data:v}=Fa(),{showAlert:x,showConfirm:b,showPrompt:w,dialogElement:P}=Hn(),R=(o==null?void 0:o.models)??[],D=(o==null?void 0:o.running)??[],E=d?String(d):"",k=()=>{s.invalidateQueries({queryKey:Qe.models}),s.invalidateQueries({queryKey:Qe.routing})},[C,I]=g.useState(null),[B,z]=g.useState(null),[$,L]=g.useState(null),[H,re]=g.useState(!1),[le,he]=g.useState(!1),[Q,ne]=g.useState(null),[Ne,Ce]=g.useState("grid"),[Oe,Te]=g.useState("all"),_e=R.filter(O=>Oe==="in_use"?!!O.role||D.includes(O.name):!0),[Y,ce]=g.useState({width:800,height:360}),J=g.useRef(null),M=g.useCallback(O=>{if(J.current&&(J.current.disconnect(),J.current=null),O){const te=new ResizeObserver(je=>{if(!je||je.length===0)return;const Ae=je[0].contentRect;ce({width:Ae.width,height:Ae.height})});te.observe(O),J.current=te}},[]),S=Y.width,Z=Y.height,ee=O=>{const te=S*.1,je=Z*O,Ae=S*.5,Be=Z*.5,Yt=S*.3,pn=je,mn=S*.3;return`M ${te} ${je} C ${Yt} ${pn}, ${mn} ${Be}, ${Ae} ${Be}`},W=O=>{const te=S*.5,je=Z*.5,Ae=S*.9,Be=Z*O,Yt=S*.7,pn=je,mn=S*.7;return`M ${te} ${je} C ${Yt} ${pn}, ${mn} ${Be}, ${Ae} ${Be}`};async function ie(O){try{await xe(`/api/models/${encodeURIComponent(O)}/load`,{method:"POST"}),k()}catch(te){x("Fehler",`Fehler beim Laden des Modells: ${te.message}`)}}async function pe(O){try{await xe(`/api/models/${encodeURIComponent(O)}/unload`,{method:"POST"}),k()}catch(te){x("Fehler",`Fehler beim Entladen des Modells: ${te.message}`)}}async function we(){try{await xe("/api/models/unload",{method:"POST"}),k()}catch(O){x("Fehler",`Fehler beim Entladen aller Modelle: ${O.message}`)}}async function U(O,te){try{await xe(`/api/models/${encodeURIComponent(te)}/role`,{method:"POST",body:JSON.stringify({role:O||null})}),k()}catch(je){x("Fehler",`Fehler beim Zuweisen der Rolle: ${je.message||je}`)}}async function ge(O,te){w("Kontextlänge anpassen","Gib die gewünschte Kontextlänge in Tokens an:",String(te||32768),async je=>{if(je)try{await xe(`/api/models/${encodeURIComponent(O)}/ctx`,{method:"POST",body:JSON.stringify({ctx:parseInt(je,10)})}),k()}catch(Ae){x("Fehler",`Fehler beim Setzen des Kontexts: ${Ae.message||Ae}`)}})}async function xt(O){b("Modell löschen?",`Modell '${O}' und alle zugehörigen GGUF-Dateien unwiderruflich von der Box löschen?`,async()=>{try{await xe(`/api/models/${encodeURIComponent(O)}`,{method:"DELETE"}),k()}catch(te){x("Fehler",`Fehler beim Löschen: ${te.message||te}`)}})}async function ol(O,te,je,Ae){try{await xe("/api/models/install",{method:"POST",body:JSON.stringify({repo:O,role:te,quant:je,jinja:Ae})}),x("Herunterladen gestartet",`Download für '${O}' gestartet! Der Fortschritt wird oben angezeigt.`)}catch(Be){x("Fehler",`Fehler beim Starten des Upgrades: ${Be.message||Be}`)}}async function Gn(O){const te=p==null?void 0:p.budget,je=te&&!te.fits?` - -⚠ Speicher-Warnung: Dieses Brain (~${te.brain_gb} GB) muss immer resident sein. Zusammen mit dem größten on-demand-Modell (~${te.largest_ondemand_gb} GB) sprengt das das Budget (${te.gtt_gb} GB) → heavy/coder würden das Brain verdrängen. Erwäge ein kleineres Brain oder weniger Kontext.`:"";b("Agent-Hirn aktualisieren?",`Neues Hermes-Modell '${O.split("/").pop()}' herunterladen und als Agent-Hirn (Rolle hermes) setzen? Hermes nutzt danach automatisch das neue Modell.${je}`,async()=>{try{await xe("/api/models/install",{method:"POST",body:JSON.stringify({repo:O,role:"hermes",quant:"Q4_K_M",jinja:!0})}),x("Download gestartet","Das neue Agent-Hirn wird geladen. Fortschritt oben."),k()}catch(Ae){x("Fehler",`Update fehlgeschlagen: ${Ae.message||Ae}`)}})}async function Vs(O){b("Agent-Hirn wechseln?",`'${O.split("/").pop()}' als Agent-Hirn (Alias hermes) setzen? Es wird warm gehalten (brains-Gruppe); Hermes nutzt es nach einem kurzen Gateway-Restart.`,async()=>{try{await xe("/api/agent/brain/set",{method:"POST",body:JSON.stringify({model_id:O})}),x("Erledigt","Agent-Hirn gewechselt. Gateway wurde neugestartet."),re(!1),k()}catch(te){x("Fehler",`Wechsel fehlgeschlagen: ${te.message||te}`)}})}async function ll(O){O&&(await navigator.clipboard.writeText(O),he(!0),setTimeout(()=>he(!1),1500))}if(a)return r.jsx("div",{className:"text-xs text-muted-foreground py-12 text-center",children:"Initialisiere HUD Cockpit…"});if(E)return r.jsxs("div",{className:"rounded-xl border border-red-500/20 bg-red-500/5 p-4 text-xs text-red-400",children:["Gateway oder Engine nicht erreichbar (",E,")."]});const Vn=R.filter(O=>D.includes(O.name)),un=Vn.reduce((O,te)=>O+(te.size_bytes||0),0),Ws=((Ks=v==null?void 0:v.gpu)==null?void 0:Ks.gtt_total)||((Qs=v==null?void 0:v.gpu)==null?void 0:Qs.vram_total)||0,Wn=((qs=v==null?void 0:v.gpu)==null?void 0:qs.gtt_used)||0,Nr=16*1024**3,dr=Ws>2*1024**3?Ws:un>Nr?un*1.2:Nr,Kn=O=>R.find(te=>te.role===O),Sr=O=>{const te=Kn(O);return te?D.includes(te.name):!1};return r.jsxs("div",{className:"space-y-8",children:[r.jsx("style",{children:` - @keyframes flow-dash { - to { - stroke-dashoffset: -20; - } - } - .svg-flow-path { - stroke-dasharray: 4 6; - animation: flow-dash 1s linear infinite; - } - `}),r.jsxs("div",{className:"rounded-2xl border border-border/60 bg-card/45 backdrop-blur-md p-5 shadow-lg shadow-black/10 space-y-3.5",children:[r.jsxs("div",{className:"flex justify-between items-center",children:[r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx(Ea,{className:"h-4.5 w-4.5 text-primary"}),r.jsx("span",{className:"text-xs font-bold uppercase tracking-wider text-foreground",children:"VRAM / Memory Belegung"})]}),r.jsxs("div",{className:"flex items-center gap-3",children:[r.jsxs("span",{className:"text-[10px] font-mono text-muted-foreground",children:["Speicher-Pool: ",$t(un)," Gewichte",Wn>0?` · ${$t(Wn)} real belegt (inkl. KV)`:""," / ",$t(dr)]}),D.length>0&&r.jsx("button",{onClick:we,className:"h-6 px-2.5 rounded border border-amber-500/30 bg-amber-500/5 hover:bg-amber-500/10 text-amber-400 text-[9px] font-bold uppercase transition-all cursor-pointer",children:"Alle entladen"})]})]}),r.jsx("div",{className:"h-7 w-full rounded-xl bg-background/50 border border-border/40 overflow-hidden flex p-0.5 relative group",children:Vn.length===0?r.jsx("div",{className:"w-full h-full flex items-center justify-center text-[10px] text-muted-foreground/60 italic font-mono select-none",children:"VRAM Leer — Auto-Swap lädt Modelle bei Anfrage"}):Vn.map((O,te)=>{var Be;const je=(O.size_bytes||0)/dr*100,Ae=["from-teal-500 to-emerald-500","from-indigo-500 to-blue-500","from-purple-500 to-pink-500","from-cyan-500 to-sky-500"][te%4];return r.jsxs("div",{style:{width:`${je}%`},className:X("h-full rounded bg-gradient-to-r flex items-center justify-between px-2.5 transition-all text-white/95 shrink-0 shadow-inner select-none",Ae),title:`${O.name} (${$t(O.size_bytes)})`,children:[r.jsxs("span",{className:"text-[9px] font-bold truncate max-w-[120px] font-space tracking-wide",children:[O.role?`[${O.role}] `:"",(Be=O.name.split("/").pop())==null?void 0:Be.replace(".gguf","")]}),r.jsx("span",{className:"text-[8px] font-mono opacity-80",children:$t(O.size_bytes)})]},O.name)})})]}),r.jsxs("div",{className:"rounded-2xl border border-border/60 bg-card/45 backdrop-blur-md p-6 shadow-lg shadow-black/10 space-y-4",children:[r.jsxs("div",{children:[r.jsx("span",{className:"text-xs font-bold uppercase tracking-wider text-foreground",children:"Interactive Gateway Graph"}),r.jsx("p",{className:"text-[10px] text-muted-foreground mt-0.5 leading-relaxed",children:"Klicke links auf Editoren, um Configs zu kopieren. Klicke rechts auf Rollen, um GGUF-Zuweisungen live zu ändern."})]}),r.jsxs("div",{ref:M,className:"relative w-full h-96 border border-border/30 rounded-xl bg-black/25 overflow-hidden flex",children:[r.jsxs("svg",{className:"absolute inset-0 pointer-events-none w-full h-full",children:[r.jsxs("defs",{children:[r.jsxs("linearGradient",{id:"cyan-to-teal",x1:"0%",y1:"0%",x2:"100%",y2:"0%",children:[r.jsx("stop",{offset:"0%",stopColor:"#06b6d4",stopOpacity:"0.45"}),r.jsx("stop",{offset:"100%",stopColor:"#0d9488",stopOpacity:"0.45"})]}),r.jsxs("linearGradient",{id:"active-glow",x1:"0%",y1:"0%",x2:"100%",y2:"0%",children:[r.jsx("stop",{offset:"0%",stopColor:"#3b82f6",stopOpacity:"0.8"}),r.jsx("stop",{offset:"100%",stopColor:"#10b981",stopOpacity:"0.8"})]})]}),r.jsx("path",{d:ee(.1),stroke:"url(#cyan-to-teal)",strokeWidth:"1.5",fill:"none"}),(Q==="roocode"||C==="roocode")&&r.jsx("path",{d:ee(.1),stroke:"#06b6d4",strokeWidth:"2.5",fill:"none",className:"svg-flow-path"}),r.jsx("path",{d:ee(.3),stroke:"url(#cyan-to-teal)",strokeWidth:"1.5",fill:"none"}),(Q==="cursor"||C==="cursor")&&r.jsx("path",{d:ee(.3),stroke:"#06b6d4",strokeWidth:"2.5",fill:"none",className:"svg-flow-path"}),r.jsx("path",{d:ee(.5),stroke:"url(#cyan-to-teal)",strokeWidth:"1.5",fill:"none"}),(Q==="opencode"||C==="opencode")&&r.jsx("path",{d:ee(.5),stroke:"#06b6d4",strokeWidth:"2.5",fill:"none",className:"svg-flow-path"}),r.jsx("path",{d:ee(.7),stroke:"url(#cyan-to-teal)",strokeWidth:"1.5",fill:"none"}),(Q==="zed"||C==="zed")&&r.jsx("path",{d:ee(.7),stroke:"#06b6d4",strokeWidth:"2.5",fill:"none",className:"svg-flow-path"}),r.jsx("path",{d:ee(.9),stroke:"url(#cyan-to-teal)",strokeWidth:"1.5",fill:"none"}),(Q==="continue"||C==="continue")&&r.jsx("path",{d:ee(.9),stroke:"#06b6d4",strokeWidth:"2.5",fill:"none",className:"svg-flow-path"}),r.jsx("path",{d:W(.12),stroke:"url(#cyan-to-teal)",strokeWidth:"1.5",fill:"none"}),Sr("fast")&&r.jsx("path",{d:W(.12),stroke:"url(#active-glow)",strokeWidth:"2.5",fill:"none",className:"svg-flow-path"}),r.jsx("path",{d:W(.31),stroke:"url(#cyan-to-teal)",strokeWidth:"1.5",fill:"none"}),Sr("heavy")&&r.jsx("path",{d:W(.31),stroke:"url(#active-glow)",strokeWidth:"2.5",fill:"none",className:"svg-flow-path"}),r.jsx("path",{d:W(.5),stroke:"url(#cyan-to-teal)",strokeWidth:"1.5",fill:"none"}),Sr("coder")&&r.jsx("path",{d:W(.5),stroke:"url(#active-glow)",strokeWidth:"2.5",fill:"none",className:"svg-flow-path"}),r.jsx("path",{d:W(.69),stroke:"url(#cyan-to-teal)",strokeWidth:"1.5",fill:"none"}),Sr("vision")&&r.jsx("path",{d:W(.69),stroke:"url(#active-glow)",strokeWidth:"2.5",fill:"none",className:"svg-flow-path"}),r.jsx("path",{d:W(.88),stroke:"url(#cyan-to-teal)",strokeWidth:"1.5",fill:"none"}),Sr("scout")&&r.jsx("path",{d:W(.88),stroke:"url(#active-glow)",strokeWidth:"2.5",fill:"none",className:"svg-flow-path"})]}),r.jsxs("div",{className:"absolute cursor-pointer select-none z-10 w-28 h-8 -translate-y-1/2 -translate-x-1/2 rounded-xl border border-border/60 bg-card/75 backdrop-blur-md flex items-center justify-center gap-1.5 px-2 hover:border-primary transition-all text-[10px] font-semibold text-foreground shadow shadow-black/20",style:{left:"10%",top:"10%"},onMouseEnter:()=>ne("roocode"),onMouseLeave:()=>ne(null),onClick:()=>I(O=>O==="roocode"?null:"roocode"),children:[r.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-cyan-400 animate-pulse"}),r.jsx("span",{children:"Roo Code"})]}),r.jsxs("div",{className:"absolute cursor-pointer select-none z-10 w-28 h-8 -translate-y-1/2 -translate-x-1/2 rounded-xl border border-border/60 bg-card/75 backdrop-blur-md flex items-center justify-center gap-1.5 px-2 hover:border-primary transition-all text-[10px] font-semibold text-foreground shadow shadow-black/20",style:{left:"10%",top:"30%"},onMouseEnter:()=>ne("cursor"),onMouseLeave:()=>ne(null),onClick:()=>I(O=>O==="cursor"?null:"cursor"),children:[r.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-cyan-400 animate-pulse"}),r.jsx("span",{children:"Cursor IDE"})]}),r.jsxs("div",{className:"absolute cursor-pointer select-none z-10 w-28 h-8 -translate-y-1/2 -translate-x-1/2 rounded-xl border border-border/60 bg-card/75 backdrop-blur-md flex items-center justify-center gap-1.5 px-2 hover:border-primary transition-all text-[10px] font-semibold text-foreground shadow shadow-black/20",style:{left:"10%",top:"50%"},onMouseEnter:()=>ne("opencode"),onMouseLeave:()=>ne(null),onClick:()=>I(O=>O==="opencode"?null:"opencode"),children:[r.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-cyan-400 animate-pulse"}),r.jsx("span",{children:"OpenCode"})]}),r.jsxs("div",{className:"absolute cursor-pointer select-none z-10 w-28 h-8 -translate-y-1/2 -translate-x-1/2 rounded-xl border border-border/60 bg-card/75 backdrop-blur-md flex items-center justify-center gap-1.5 px-2 hover:border-primary transition-all text-[10px] font-semibold text-foreground shadow shadow-black/20",style:{left:"10%",top:"70%"},onMouseEnter:()=>ne("zed"),onMouseLeave:()=>ne(null),onClick:()=>I(O=>O==="zed"?null:"zed"),children:[r.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-cyan-400 animate-pulse"}),r.jsx("span",{children:"Zed"})]}),r.jsxs("div",{className:"absolute cursor-pointer select-none z-10 w-28 h-8 -translate-y-1/2 -translate-x-1/2 rounded-xl border border-border/60 bg-card/75 backdrop-blur-md flex items-center justify-center gap-1.5 px-2 hover:border-primary transition-all text-[10px] font-semibold text-foreground shadow shadow-black/20",style:{left:"10%",top:"90%"},onMouseEnter:()=>ne("continue"),onMouseLeave:()=>ne(null),onClick:()=>I(O=>O==="continue"?null:"continue"),children:[r.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-cyan-400 animate-pulse"}),r.jsx("span",{children:"Continue"})]}),r.jsxs("div",{className:"absolute select-none z-10 w-36 py-3 px-4 -translate-y-1/2 -translate-x-1/2 rounded-2xl border border-primary/50 bg-card/90 backdrop-blur-md flex flex-col items-center justify-center text-center shadow-lg shadow-primary/5",style:{left:"50%",top:"50%"},children:[r.jsx("div",{className:"text-[10px] uppercase font-bold text-primary font-space tracking-wide",children:"Gateway Auto"}),r.jsxs("div",{className:"text-[10px] font-mono text-muted-foreground mt-0.5",children:["Schwelle: > ",u!=null&&u.heavy_threshold_chars?u.heavy_threshold_chars/1e3:"4","k Zeichen"]}),r.jsx("div",{className:"mt-1 px-1.5 py-0.5 rounded bg-primary/10 border border-primary/20 text-[9px] font-semibold text-primary uppercase font-mono",children:"Auto-Swap"})]}),Ch.map(O=>{var Yt;const te=["12%","31%","50%","69%","88%"],je=Kn(O),Ae=je?D.includes(je.name):!1;if(O==="agent")return null;const Be={fast:0,heavy:1,coder:2,vision:3,scout:4}[O];return r.jsxs("div",{className:X("absolute z-10 w-44 py-1.5 px-3 -translate-y-1/2 -translate-x-1/2 rounded-xl border flex flex-col justify-center hover:border-primary/50 transition-all text-left shadow select-none cursor-pointer",Ae?"border-emerald-500/50 bg-emerald-500/5 shadow-emerald-500/5":je?"border-border/60 bg-card/75":"border-dashed border-border/40 bg-background/20"),style:{left:"90%",top:te[Be]},onClick:()=>z(O),children:[r.jsxs("div",{className:"flex items-center justify-between",children:[r.jsx("span",{className:"text-[10px] font-bold uppercase tracking-wider text-muted-foreground",children:O}),Ae&&r.jsx("span",{className:"h-1.5 w-1.5 rounded-full bg-emerald-400 animate-pulse"})]}),r.jsx("div",{className:"text-[10px] font-mono font-medium truncate mt-0.5 text-foreground max-w-[150px]",children:je?(Yt=je.name.split("/").pop())==null?void 0:Yt.replace(".gguf",""):"Keine Zuweisung"})]},O)}),C&&f&&r.jsx("div",{className:"fixed inset-0 z-50 bg-black/60 backdrop-blur-sm flex items-center justify-center p-4",children:r.jsxs("div",{className:"w-full max-w-md rounded-2xl border border-border/80 bg-card p-6 shadow-2xl space-y-4 animate-in fade-in zoom-in-95 duration-200 flex flex-col justify-between",children:[r.jsxs("div",{className:"flex items-center justify-between border-b border-border/20 pb-2",children:[r.jsxs("span",{className:"text-xs font-bold uppercase tracking-wider text-primary",children:[C==="roocode"&&"Roo Code Setup",C==="cursor"&&"Cursor Setup",C==="opencode"&&"OpenCode Setup",C==="zed"&&"Zed Setup",C==="continue"&&"Continue Setup"]}),r.jsx("button",{onClick:()=>I(null),className:"p-1 rounded hover:bg-accent text-muted-foreground hover:text-foreground cursor-pointer",children:r.jsx(jr,{className:"h-4 w-4"})})]}),r.jsxs("div",{className:"text-xs text-muted-foreground leading-relaxed space-y-2",children:[C==="roocode"&&r.jsxs("ul",{className:"list-decimal pl-4 space-y-1",children:[r.jsxs("li",{children:["Suche in VS Code nach der Erweiterung ",r.jsx("strong",{children:"Roo Code"})," und installiere sie."]}),r.jsxs("li",{children:["Wähle in den Roo Code Einstellungen: Provider: ",r.jsx("strong",{children:"OpenAI Compatible"}),"."]}),r.jsxs("li",{children:["Füge das untenstehende JSON-Snippet in die ",r.jsx("code",{children:"settings.json"})," ein."]})]}),C==="cursor"&&r.jsxs("ul",{className:"list-decimal pl-4 space-y-1",children:[r.jsxs("li",{children:["Öffne Cursor Settings ➔ ",r.jsx("strong",{children:"Models"}),"."]}),r.jsxs("li",{children:["Deaktiviere Cloud-Modelle, klappe ",r.jsx("strong",{children:"OpenAI API"})," auf."]}),r.jsxs("li",{children:["Trage die Base URL unten ein und aktiviere das Modell ",r.jsx("strong",{children:"auto"}),"."]})]}),C==="opencode"&&r.jsxs("ul",{className:"list-decimal pl-4 space-y-1",children:[r.jsxs("li",{children:["Öffne die ",r.jsx("code",{children:"opencode.jsonc"})," Konfigurationsdatei."]}),r.jsxs("li",{children:["Ersetze den Provider-Eintrag unter ",r.jsx("code",{children:"provider"})," mit dem Snippet unten."]})]}),C==="zed"&&r.jsxs("ul",{className:"list-decimal pl-4 space-y-1",children:[r.jsxs("li",{children:["Öffne die Zed Settings (",r.jsx("code",{children:"ctrl+,"}),")."]}),r.jsxs("li",{children:["Füge das untenstehende JSON-Segment unter ",r.jsx("code",{children:"language_models"})," ein."]})]}),C==="continue"&&r.jsxs("ul",{className:"list-decimal pl-4 space-y-1",children:[r.jsx("li",{children:"Klicke auf das Zahnrad-Symbol in der Continue-Erweiterung."}),r.jsxs("li",{children:["Füge den Gateway-Eintrag zum ",r.jsx("code",{children:"models"}),"-Array hinzu."]})]})]}),f.tools&&r.jsxs("div",{className:"relative rounded-xl border border-border/40 bg-black/40 overflow-hidden mt-1 shrink-0",children:[r.jsxs("div",{className:"flex items-center justify-between px-3 py-1.5 border-b border-border/20 bg-black/20",children:[r.jsx("span",{className:"text-[10px] font-mono text-muted-foreground",children:"JSON Config"}),r.jsxs("button",{onClick:()=>{var O,te,je,Ae,Be;return ll(C==="roocode"?(O=f.tools.cline)==null?void 0:O.snippet:C==="cursor"?(te=f.tools.cursor)==null?void 0:te.snippet:C==="opencode"?(je=f.tools.opencode)==null?void 0:je.snippet:C==="zed"?(Ae=f.tools.zed)==null?void 0:Ae.snippet:(Be=f.tools.continue)==null?void 0:Be.snippet)},className:"text-xs font-semibold text-primary hover:text-primary-foreground flex items-center gap-1 cursor-pointer",children:[le?r.jsx(ir,{className:"h-3.5 w-3.5 text-emerald-400"}):r.jsx(Pm,{className:"h-3.5 w-3.5"}),r.jsx("span",{children:le?"Kopiert":"Kopieren"})]})]}),r.jsx("pre",{className:"p-3 max-h-48 overflow-y-auto text-xs font-mono text-cyan-200/90 whitespace-pre scrollbar-thin select-text",children:r.jsxs("code",{children:[C==="roocode"&&((Qn=f.tools.cline)==null?void 0:Qn.snippet),C==="cursor"&&((fn=f.tools.cursor)==null?void 0:fn.snippet),C==="opencode"&&((Zs=f.tools.opencode)==null?void 0:Zs.snippet),C==="zed"&&((Cr=f.tools.zed)==null?void 0:Cr.snippet),C==="continue"&&((Er=f.tools.continue)==null?void 0:Er.snippet)]})})]}),r.jsx("button",{onClick:()=>I(null),className:"w-full h-9 rounded-lg bg-primary text-primary-foreground hover:opacity-90 font-semibold text-xs transition-opacity cursor-pointer mt-2",children:"Schließen"})]})})]}),r.jsxs("div",{className:"flex flex-wrap items-center gap-6 mt-3 text-[10px] text-muted-foreground border-t border-border/20 pt-3",children:[r.jsxs("span",{className:"flex items-center gap-1.5",children:[r.jsx("span",{className:"h-2 w-2 rounded-full bg-cyan-400"}),r.jsx("span",{children:"Cyan-Fluss: Client-Anfrage an Gateway"})]}),r.jsxs("span",{className:"flex items-center gap-1.5",children:[r.jsx("span",{className:"h-2 w-2 rounded-full bg-emerald-500 animate-pulse"}),r.jsx("span",{children:"Grüner Puls: Aktive Verbindung / Warmes Modell geladen"})]}),r.jsxs("span",{className:"flex items-center gap-1.5",children:[r.jsx("span",{className:"h-2 w-2 rounded bg-gradient-to-r from-teal-500 to-emerald-500"}),r.jsx("span",{children:"VRAM-Verlauf: Modellspezifischer Speicheranteil"})]})]})]}),r.jsxs("div",{className:"rounded-2xl border border-border/60 bg-card/45 backdrop-blur-md p-5 shadow-lg shadow-black/10 space-y-3.5",children:[r.jsx("div",{className:"text-xs font-bold uppercase tracking-wider text-muted-foreground px-1",children:"Gateway Steckplatz-Belegung (Slot-Zuweisung)"}),r.jsx("div",{className:"grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-6 gap-3",children:["fast","heavy","coder","vision","scout"].map(O=>{var Ae;const te=R.find(Be=>Be.role===O),je=te?D.includes(te.name):!1;return r.jsxs("div",{onClick:()=>z(O),className:X("rounded-xl border p-3 flex flex-col justify-between gap-2.5 transition-all cursor-pointer select-none text-left bg-background/25 hover:border-primary/45 hover:bg-background/40 group min-h-[90px]",je?"border-emerald-500/40 shadow-sm shadow-emerald-500/5":te?"border-primary/20 bg-primary/5":"border-border/30 border-dashed opacity-75"),children:[r.jsxs("div",{className:"flex items-center justify-between",children:[r.jsx("span",{className:X("text-[9px] font-bold uppercase tracking-wider font-mono px-1.5 py-0.5 rounded border",Sc(O)),children:O}),je&&r.jsx("span",{className:"h-1.5 w-1.5 rounded-full bg-emerald-400 animate-pulse"})]}),r.jsx("div",{className:"text-[10px] font-mono font-medium truncate text-foreground/90 pr-1 font-space",title:te==null?void 0:te.name,children:te?(Ae=te.name.split("/").pop())==null?void 0:Ae.replace(/\.gguf$/i,""):"nicht zugewiesen"}),r.jsx("div",{className:"text-[8px] text-primary/70 group-hover:text-primary font-bold uppercase tracking-wider transition-colors font-space",children:"Ändern ➔"})]},O)})})]}),(p==null?void 0:p.current)&&r.jsxs("div",{className:"rounded-2xl border border-indigo-500/30 bg-indigo-500/5 backdrop-blur-md p-5 shadow-lg shadow-black/10 space-y-3.5",children:[r.jsxs("div",{className:"flex items-center justify-between flex-wrap gap-2",children:[r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx($s,{className:"h-4.5 w-4.5 text-indigo-400"}),r.jsx("span",{className:"text-xs font-bold uppercase tracking-wider text-foreground",children:"Agent-Hirn (Hermes)"}),p.current.version!=null&&r.jsxs("span",{className:"text-[9px] font-mono px-1.5 py-0.5 rounded bg-indigo-500/15 text-indigo-300 border border-indigo-500/25",children:["v",p.current.version]})]}),r.jsx("button",{onClick:()=>re(!0),className:"h-7 px-3 rounded-lg border border-indigo-500/30 bg-indigo-500/5 text-indigo-300 text-[9px] font-bold uppercase hover:bg-indigo-500/15 transition-all cursor-pointer",children:"Hirn wechseln"})]}),r.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center justify-between gap-3 rounded-xl bg-background/30 border border-border/30 p-3.5",children:[r.jsxs("div",{className:"min-w-0",children:[r.jsx("div",{className:"text-xs font-mono font-bold text-foreground truncate",title:p.current.name,children:p.current.name.split("/").pop()}),r.jsxs("div",{className:"text-[10px] text-muted-foreground/80 flex items-center gap-2 mt-0.5",children:[r.jsx("span",{children:p.current.params_b?`${p.current.params_b}B`:"—"}),r.jsx("span",{children:"•"}),r.jsx("span",{children:p.current.quant||"GGUF"}),r.jsx("span",{children:"•"}),r.jsx("span",{children:$t(p.current.size_bytes||0)})]})]}),p.update_available&&p.recommended?r.jsxs("button",{onClick:()=>Gn(p.recommended.repo),className:X("h-8 px-3 shrink-0 flex items-center justify-center gap-1.5 rounded-lg text-[10px] font-bold uppercase transition-all cursor-pointer shadow-md",p.budget&&!p.budget.fits?"bg-red-500 text-white hover:bg-red-400 shadow-red-500/10":"bg-amber-500 text-black hover:bg-amber-400 shadow-amber-500/10"),children:[r.jsx(an,{className:"h-3.5 w-3.5"})," Aktualisieren"]}):r.jsxs("span",{className:"h-8 px-3 shrink-0 flex items-center gap-1.5 text-[10px] font-bold text-emerald-400 uppercase tracking-wide bg-emerald-500/5 border border-emerald-500/15 rounded-lg select-none",children:[r.jsx(ir,{className:"h-4 w-4"})," Neueste Generation"]})]}),p.update_available&&p.recommended&&r.jsxs("div",{className:"text-[10px] text-amber-400/90 flex items-center gap-1.5",children:[r.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-amber-400 animate-ping shrink-0"}),"Neuere Generation verfügbar: ",r.jsx("span",{className:"font-mono font-bold",children:p.recommended.name.replace(/-GGUF$/i,"")}),"(v",p.recommended.version,", ",p.recommended.params_b,"B) — von NousResearch."]}),p.budget&&r.jsxs("div",{className:X("text-[10px] flex items-start gap-1.5 leading-relaxed",p.budget.fits?"text-muted-foreground/80":"text-red-400 font-semibold"),children:[r.jsx(Ea,{className:"h-3 w-3 shrink-0 mt-0.5"}),r.jsxs("span",{children:["Always-On-Brain ~",p.budget.brain_gb," GB + größtes on-demand (~",p.budget.largest_ondemand_gb," GB) = ",(p.budget.brain_gb+p.budget.largest_ondemand_gb).toFixed(1)," / ",p.budget.gtt_gb," GB",p.budget.fits?" · passt gleichzeitig ✓":" · passt NICHT gleichzeitig ⚠ — heavy/coder würden das Brain verdrängen. Kleineres Brain oder weniger Kontext."]})]})]}),r.jsxs("div",{className:"space-y-4",children:[r.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center justify-between gap-3 px-1",children:[r.jsxs("div",{className:"text-xs font-bold uppercase tracking-wider text-muted-foreground",children:["Installierte Modell-Bibliothek (",_e.length," von ",R.length,")"]}),r.jsxs("div",{className:"flex items-center gap-3",children:[r.jsxs("div",{className:"flex rounded-lg border border-border/40 bg-card/45 p-0.5",children:[r.jsx("button",{onClick:()=>Te("all"),className:X("px-2.5 py-1 rounded-md text-[9px] font-bold uppercase transition-all cursor-pointer",Oe==="all"?"bg-primary text-primary-foreground shadow-sm":"text-muted-foreground hover:text-foreground"),children:"Vorhanden"}),r.jsx("button",{onClick:()=>Te("in_use"),className:X("px-2.5 py-1 rounded-md text-[9px] font-bold uppercase transition-all cursor-pointer",Oe==="in_use"?"bg-primary text-primary-foreground shadow-sm":"text-muted-foreground hover:text-foreground"),children:"In Benutzung"})]}),r.jsxs("div",{className:"flex rounded-lg border border-border/40 bg-card/45 p-0.5",children:[r.jsx("button",{onClick:()=>Ce("grid"),className:X("px-2.5 py-1 rounded-md text-[9px] font-bold uppercase transition-all cursor-pointer",Ne==="grid"?"bg-primary text-primary-foreground shadow-sm":"text-muted-foreground hover:text-foreground"),children:"Grid"}),r.jsx("button",{onClick:()=>Ce("list"),className:X("px-2.5 py-1 rounded-md text-[9px] font-bold uppercase transition-all cursor-pointer",Ne==="list"?"bg-primary text-primary-foreground shadow-sm":"text-muted-foreground hover:text-foreground"),children:"List"})]})]})]}),Ne==="grid"?r.jsx("div",{className:"grid gap-4 sm:grid-cols-2 lg:grid-cols-3",children:_e.length===0?r.jsx("div",{className:"col-span-full text-xs text-muted-foreground border border-dashed border-border/60 rounded-2xl p-12 text-center select-none",children:Oe==="in_use"?"Keine Modelle in Benutzung (keine Zuweisung oder warm geladene Modelle).":'Keine Modelle konfiguriert. Verwende den Tab "Modelle finden" zum Herunterladen.'}):_e.map(O=>{const te=D.includes(O.name),je=h==null?void 0:h.model_list.find(Be=>Be.role===O.role),Ae=Xp(O.name);return r.jsxs("div",{className:X("rounded-2xl border bg-card/45 backdrop-blur-md p-5 shadow-lg shadow-black/10 flex flex-col justify-between gap-4 transition-all duration-300 hover:border-primary/40 group relative overflow-hidden",te?"border-primary/45 shadow-primary/5":O.role?"border-primary/30 bg-primary/5 shadow-inner":"border-border/60"),children:[r.jsxs("div",{className:"space-y-3",children:[r.jsx("div",{className:"flex items-start justify-between gap-3",children:r.jsxs("div",{className:"flex gap-2.5 min-w-0",children:[r.jsx("div",{className:X("w-7 h-7 rounded-lg border flex items-center justify-center font-bold text-xs shrink-0 shadow-sm",Ae.color),title:Ae.name,children:Ae.initial}),r.jsxs("div",{className:"min-w-0",children:[r.jsx("h3",{className:"text-xs font-bold tracking-tight text-foreground line-clamp-2 break-all font-mono",title:O.name,children:O.name.split("/").pop()}),r.jsxs("div",{className:"flex items-center gap-2 flex-wrap mt-1",children:[r.jsx("span",{className:"text-[9px] font-mono text-muted-foreground bg-background/40 px-1.5 py-0.5 rounded border border-border/30",children:O.quant||"GGUF"}),te&&r.jsxs("span",{className:"flex items-center gap-1 text-[9px] font-semibold text-emerald-400 uppercase tracking-wider",children:[r.jsx(Ho,{className:"h-3 w-3 animate-pulse"})," Warm"]}),O.role&&r.jsx("span",{className:"px-1.5 py-0.5 rounded bg-primary/10 border border-primary/20 text-[9px] font-mono text-primary font-bold uppercase",children:O.role}),O.prompt_cache&&r.jsx("span",{className:"px-1.5 py-0.5 rounded bg-cyan-500/10 border border-cyan-500/20 text-[9px] font-mono text-cyan-400 font-bold uppercase",title:"Prompt Caching aktiv",children:"PC"}),O.spec_active?r.jsx("span",{className:"px-1.5 py-0.5 rounded bg-emerald-500/10 border border-emerald-500/20 text-[9px] font-mono text-emerald-400 font-bold uppercase",title:`Speculative Decoding aktiv (Draft: ${O.spec_draft_model})`,children:"SPEC"}):O.spec_draft_model?r.jsx("span",{className:"px-1.5 py-0.5 rounded bg-amber-500/10 border border-amber-500/20 text-[9px] font-mono text-amber-400 font-bold uppercase",title:`Draft gesetzt (${O.spec_draft_model}), aber INAKTIV — --spec-type fehlt oder Vocab inkompatibel. Über 'Spec' neu konfigurieren.`,children:"SPEC?"}):null,O.parallel_slots>1&&r.jsxs("span",{className:"px-1.5 py-0.5 rounded bg-violet-500/10 border border-violet-500/20 text-[9px] font-mono text-violet-400 font-bold uppercase",title:`${O.parallel_slots} parallele Slots aktiv`,children:["SLOTS: ",O.parallel_slots]}),O.incomplete&&r.jsx("span",{className:"px-1.5 py-0.5 rounded bg-amber-500/10 border border-amber-500/20 text-[9px] font-mono text-amber-400 font-bold uppercase",title:"GGUF-Datei fehlt — Modell kann nicht geladen werden",children:"⚠ Datei fehlt"})]})]})]})}),r.jsx("div",{className:"border-t border-border/30 pt-3 flex flex-wrap gap-1",children:r.jsx(em,{caps:O.capabilities})})]}),r.jsxs("div",{className:"space-y-3 pt-1",children:[r.jsxs("div",{className:"grid grid-cols-2 gap-2 text-[10px] font-mono text-muted-foreground",children:[r.jsxs("div",{className:"flex items-center gap-1.5 p-2 bg-background/20 rounded-lg border border-border/20",children:[r.jsx(Ea,{className:"h-3.5 w-3.5 text-primary/80"}),r.jsxs("div",{children:[r.jsx("div",{className:"text-[8px] uppercase tracking-wider font-semibold text-muted-foreground/60",children:"Größe"}),r.jsx("div",{className:"text-foreground font-semibold",children:$t(O.size_bytes)})]})]}),r.jsxs("div",{className:"flex items-center gap-1.5 p-2 bg-background/20 rounded-lg border border-border/20",children:[r.jsx(z0,{className:"h-3.5 w-3.5 text-primary/80"}),r.jsxs("div",{children:[r.jsx("div",{className:"text-[8px] uppercase tracking-wider font-semibold text-muted-foreground/60",children:"Kontext"}),r.jsx("div",{className:"text-foreground font-semibold",children:Zp(O.ctx)})]})]})]}),je&&r.jsxs("div",{className:"p-3 bg-amber-500/5 border border-amber-500/30 rounded-xl space-y-2 flex flex-col justify-between shrink-0",children:[r.jsxs("div",{className:"text-[9px] font-semibold text-amber-400 flex items-center gap-1",children:[r.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-amber-400 animate-ping"}),r.jsxs("span",{children:["Upgrade verfügbar: ",je.repo.split("/").pop()]})]}),r.jsxs("button",{onClick:()=>ol(je.repo,O.role,O.quant||"Q4_K_M",O.capabilities.tools!=="no"),className:"h-7 w-full flex items-center justify-center gap-1 rounded-lg bg-amber-500 text-black text-[10px] font-bold hover:bg-amber-400 transition-colors cursor-pointer",children:[r.jsx(an,{className:"h-3 w-3"})," Smart-Swap starten"]})]}),r.jsxs("div",{className:"flex items-center gap-1.5 border-t border-border/20 pt-3 mt-auto",children:[r.jsx("button",{onClick:()=>te?pe(O.name):ie(O.name),disabled:O.incomplete&&!te,className:X("flex-1 h-7 rounded-lg text-[9px] font-bold uppercase transition-all border flex items-center justify-center gap-1",O.incomplete&&!te?"border-border/30 bg-background/10 text-muted-foreground/50 cursor-not-allowed":te?"border-amber-500/30 bg-amber-500/5 hover:bg-amber-500/15 text-amber-400 cursor-pointer":"border-primary/30 bg-primary/5 hover:bg-primary/15 text-primary cursor-pointer"),children:te?"Entladen":"Laden"}),r.jsx("button",{onClick:()=>ge(O.name,O.ctx),className:"h-7 px-2.5 rounded-lg border border-border/40 text-[9px] font-bold uppercase hover:bg-accent text-muted-foreground transition-colors cursor-pointer",title:"Kontextlänge anpassen",children:"Ctx"}),r.jsxs("button",{onClick:()=>L(O),className:X("h-7 px-2.5 rounded-lg border text-[9px] font-bold uppercase transition-colors cursor-pointer flex items-center gap-1",O.spec_active?"border-emerald-500/30 text-emerald-400 hover:bg-emerald-500/10":O.spec_draft_model?"border-amber-500/30 text-amber-400 hover:bg-amber-500/10":"border-border/40 text-muted-foreground hover:bg-accent"),title:"Speculative Draft konfigurieren (Vocab-geprüft)",children:[r.jsx(Qo,{className:"h-3 w-3"})," Spec"]}),r.jsx("button",{onClick:()=>xt(O.name),className:"h-7 w-7 rounded-lg border border-border/40 text-muted-foreground hover:text-red-400 hover:bg-red-500/5 flex items-center justify-center transition-colors cursor-pointer",title:"Modell löschen",children:r.jsx(nc,{className:"h-3.5 w-3.5"})})]})]})]},O.name)})}):r.jsx("div",{className:"space-y-2",children:_e.length===0?r.jsx("div",{className:"text-xs text-muted-foreground border border-dashed border-border/60 rounded-2xl p-12 text-center select-none",children:Oe==="in_use"?"Keine Modelle in Benutzung (keine Zuweisung oder warm geladene Modelle).":'Keine Modelle konfiguriert. Verwende den Tab "Modelle finden" zum Herunterladen.'}):_e.map(O=>{const te=D.includes(O.name),je=Xp(O.name);return r.jsxs("div",{className:X("rounded-xl border bg-card/45 backdrop-blur-md p-3.5 shadow-lg shadow-black/5 flex flex-col sm:flex-row sm:items-center justify-between gap-3 hover:border-primary/40 transition-all",te?"border-primary/45":O.role?"border-primary/30 bg-primary/5":"border-border/60"),children:[r.jsxs("div",{className:"flex items-center gap-3 min-w-0",children:[r.jsx("div",{className:X("w-8 h-8 rounded-lg border border-border/40 flex items-center justify-center font-bold text-xs shrink-0 shadow-sm",je.color),title:je.name,children:je.initial}),r.jsxs("div",{className:"min-w-0 text-left",children:[r.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[r.jsx("h4",{className:"text-xs font-bold text-foreground truncate max-w-[250px] sm:max-w-[400px] break-all font-mono",title:O.name,children:O.name.split("/").pop()}),O.role&&r.jsx("span",{className:"px-1.5 py-0.5 rounded bg-primary/10 border border-primary/20 text-[8px] font-mono text-primary font-bold uppercase shrink-0",children:O.role}),O.prompt_cache&&r.jsx("span",{className:"px-1.5 py-0.5 rounded bg-cyan-500/10 border border-cyan-500/20 text-[8px] font-mono text-cyan-400 font-bold uppercase shrink-0",title:"Prompt Caching aktiv",children:"PC"}),O.spec_active?r.jsx("span",{className:"px-1.5 py-0.5 rounded bg-emerald-500/10 border border-emerald-500/20 text-[8px] font-mono text-emerald-400 font-bold uppercase shrink-0",title:`Speculative Decoding aktiv (Draft: ${O.spec_draft_model})`,children:"SPEC"}):O.spec_draft_model?r.jsx("span",{className:"px-1.5 py-0.5 rounded bg-amber-500/10 border border-amber-500/20 text-[8px] font-mono text-amber-400 font-bold uppercase shrink-0",title:`Draft gesetzt (${O.spec_draft_model}), aber INAKTIV — --spec-type fehlt oder Vocab inkompatibel.`,children:"SPEC?"}):null,O.parallel_slots>1&&r.jsxs("span",{className:"px-1.5 py-0.5 rounded bg-violet-500/10 border border-violet-500/20 text-[8px] font-mono text-violet-400 font-bold uppercase shrink-0",title:`${O.parallel_slots} parallele Slots aktiv`,children:["SLOTS: ",O.parallel_slots]}),O.incomplete&&r.jsx("span",{className:"px-1.5 py-0.5 rounded bg-amber-500/10 border border-amber-500/20 text-[8px] font-mono text-amber-400 font-bold uppercase shrink-0",title:"GGUF-Datei fehlt",children:"⚠ Datei fehlt"}),te&&r.jsxs("span",{className:"flex items-center gap-0.5 text-[8px] font-semibold text-emerald-400 uppercase tracking-wider shrink-0",children:[r.jsx("span",{className:"h-1.5 w-1.5 rounded-full bg-emerald-500 animate-pulse"})," warm"]})]}),r.jsxs("div",{className:"text-[10px] text-muted-foreground/80 flex items-center gap-2 mt-0.5",children:[r.jsxs("span",{children:["Größe: ",$t(O.size_bytes)]}),r.jsx("span",{children:"•"}),r.jsxs("span",{children:["Kontext: ",Zp(O.ctx)]}),r.jsx("span",{children:"•"}),r.jsx("span",{className:"font-mono text-[9px]",children:O.quant||"GGUF"})]})]})]}),r.jsxs("div",{className:"flex items-center gap-3 shrink-0 self-end sm:self-auto",children:[r.jsx("div",{className:"hidden lg:flex flex-wrap gap-1",children:r.jsx(em,{caps:O.capabilities})}),r.jsxs("div",{className:"flex items-center gap-1.5",children:[r.jsx("button",{onClick:()=>te?pe(O.name):ie(O.name),disabled:O.incomplete&&!te,className:X("h-7 px-3 rounded-lg text-[9px] font-bold uppercase transition-all border flex items-center gap-1",O.incomplete&&!te?"border-border/30 bg-background/10 text-muted-foreground/50 cursor-not-allowed":te?"border-amber-500/30 bg-amber-500/5 hover:bg-amber-500/15 text-amber-400 cursor-pointer":"border-primary/30 bg-primary/5 hover:bg-primary/15 text-primary cursor-pointer"),children:te?"Entladen":"Laden"}),r.jsx("button",{onClick:()=>ge(O.name,O.ctx),className:"h-7 px-2.5 rounded-lg border border-border/40 text-[9px] font-bold uppercase hover:bg-accent text-muted-foreground transition-all cursor-pointer",title:"Kontextlänge anpassen",children:"Ctx"}),r.jsxs("button",{onClick:()=>L(O),className:X("h-7 px-2.5 rounded-lg border text-[9px] font-bold uppercase transition-all cursor-pointer flex items-center gap-1",O.spec_active?"border-emerald-500/30 text-emerald-400 hover:bg-emerald-500/10":O.spec_draft_model?"border-amber-500/30 text-amber-400 hover:bg-amber-500/10":"border-border/40 text-muted-foreground hover:bg-accent"),title:"Speculative Draft konfigurieren (Vocab-geprüft)",children:[r.jsx(Qo,{className:"h-3 w-3"})," Spec"]}),r.jsx("button",{onClick:()=>xt(O.name),className:"h-7 w-7 rounded-lg flex items-center justify-center border border-border/40 text-muted-foreground hover:text-red-400 hover:bg-red-500/5 transition-all cursor-pointer",title:"Modell löschen",children:r.jsx(nc,{className:"h-3.5 w-3.5"})})]})]})]},O.name)})})]}),B&&r.jsx("div",{className:"fixed inset-0 z-50 bg-black/60 backdrop-blur-sm flex items-center justify-center p-4",children:r.jsxs("div",{className:"w-full max-w-md 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:[r.jsxs("div",{className:"flex items-center justify-between border-b border-border/20 pb-2",children:[r.jsxs("h3",{className:"text-xs font-bold uppercase tracking-wider text-primary",children:["Rolle '",B,"' konfigurieren"]}),r.jsx("button",{onClick:()=>z(null),className:"p-1 rounded hover:bg-accent text-muted-foreground hover:text-foreground cursor-pointer",children:r.jsx(jr,{className:"h-4 w-4"})})]}),r.jsxs("p",{className:"text-xs text-muted-foreground",children:["Wähle ein Modell aus deiner Bibliothek für die Rolle ",r.jsx("strong",{className:"text-foreground",children:B}),":"]}),r.jsxs("div",{className:"space-y-1.5 max-h-60 overflow-y-auto pr-1",children:[r.jsx("button",{onClick:()=>{U(B,""),z(null)},className:"w-full text-left px-3 py-2 rounded-lg text-xs hover:bg-accent text-red-400 font-semibold cursor-pointer border border-red-500/20 bg-red-500/5 flex items-center justify-between",children:r.jsx("span",{children:"Zuweisung entfernen"})}),R.map(O=>{var te;return r.jsxs("button",{onClick:()=>{U(B,O.name),z(null)},className:X("w-full text-left px-3 py-2.5 rounded-lg text-xs hover:bg-accent flex items-center justify-between font-mono cursor-pointer border border-border/30",O.role===B?"text-primary font-bold bg-primary/10 border-primary/30":"text-foreground bg-background/20"),children:[r.jsxs("div",{className:"flex flex-col text-left",children:[r.jsx("span",{className:"truncate max-w-[280px] font-semibold",children:(te=O.name.split("/").pop())==null?void 0:te.replace(".gguf","")}),r.jsxs("span",{className:"text-[9px] text-muted-foreground mt-0.5",children:[$t(O.size_bytes)," · ",O.quant]})]}),O.role===B&&r.jsx(ir,{className:"h-4 w-4 shrink-0 text-primary"})]},O.name)})]})]})}),$&&r.jsx(Zb,{model:$,onClose:()=>L(null),onChanged:k}),H&&r.jsx("div",{className:"fixed inset-0 z-50 bg-black/60 backdrop-blur-sm flex items-center justify-center p-4",children:r.jsxs("div",{className:"w-full max-w-md 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:[r.jsxs("div",{className:"flex items-center justify-between border-b border-border/20 pb-2",children:[r.jsxs("h3",{className:"text-xs font-bold uppercase tracking-wider text-primary flex items-center gap-1.5",children:[r.jsx($s,{className:"h-4 w-4"})," Agent-Hirn wechseln"]}),r.jsx("button",{onClick:()=>re(!1),className:"p-1 rounded hover:bg-accent text-muted-foreground hover:text-foreground cursor-pointer",children:r.jsx(jr,{className:"h-4 w-4"})})]}),r.jsxs("p",{className:"text-[11px] text-muted-foreground leading-relaxed",children:["Wähle ein ",r.jsx("strong",{className:"text-foreground",children:"installiertes"})," Modell als Agent-Hirn. Es bekommt den",r.jsx("code",{className:"text-primary",children:" hermes"}),'-Alias, wird warm gehalten (brains-Gruppe), und Hermes nutzt es nach einem kurzen Gateway-Restart. Neues Modell (z.B. Hermes-4.3 oder Gemma-4)? Erst über „Modelle finden" laden.']}),r.jsx("div",{className:"space-y-1.5 max-h-72 overflow-y-auto pr-1",children:R.map(O=>{var je;const te=O.role==="hermes";return r.jsxs("button",{onClick:()=>!te&&Vs(O.name),disabled:te||O.incomplete,className:X("w-full text-left px-3 py-2.5 rounded-lg text-xs flex items-center justify-between font-mono border transition-all",te?"border-indigo-500/40 bg-indigo-500/10 text-indigo-300":O.incomplete?"border-border/20 bg-background/10 text-muted-foreground/50 cursor-not-allowed":"border-border/30 bg-background/20 text-foreground hover:bg-accent cursor-pointer"),children:[r.jsxs("div",{className:"flex flex-col min-w-0",children:[r.jsx("span",{className:"font-semibold truncate max-w-[280px]",children:(je=O.name.split("/").pop())==null?void 0:je.replace(/\.gguf$/i,"")}),r.jsxs("span",{className:"text-[9px] text-muted-foreground mt-0.5",children:[O.capabilities.params_b?`${O.capabilities.params_b}B`:"?"," · ",$t(O.size_bytes),O.role&&` · Rolle: ${O.role}`,O.capabilities.tools!=="no"?" · Tools ✓":" · ohne Tools"]})]}),te?r.jsxs("span",{className:"text-[9px] font-bold uppercase text-indigo-300 shrink-0 flex items-center gap-1",children:[r.jsx(ir,{className:"h-3.5 w-3.5"})," Aktiv"]}):r.jsx("span",{className:"text-[9px] font-bold uppercase text-primary/70 shrink-0",children:"Als Hirn setzen →"})]},O.name)})}),r.jsxs("div",{className:"text-[10px] text-amber-400/80 flex items-start gap-1.5 border-t border-border/20 pt-2.5",children:[r.jsx("span",{children:"💡"}),r.jsxs("span",{children:["Für einen ",r.jsx("strong",{children:"Agenten"})," sind Hermes-Modelle (natives Tool-Calling) meist die robustere Wahl als allgemeine Modelle."]})]})]})}),P]})}function Jb(){const[s,o]=g.useState(""),[a,d]=g.useState([]),[u,f]=g.useState("Q4_K_M"),[h,p]=g.useState(""),[v,x]=g.useState(""),[b,w]=g.useState(""),[P,R]=g.useState([]),[D,E]=g.useState(null),[k,C]=g.useState(!1),I=["fast","heavy","coder","vision","scout"],{data:B}=Bn(),z=v?B==null?void 0:B.models.find(Q=>(Q.role||"").toLowerCase()===v):void 0;async function $(Q,ne){if(C(!1),!Q.trim()){E(null);return}try{const Ne=await xe(`/api/fit?params_b=0&quant=${encodeURIComponent(ne)}&ctx=8192&name=${encodeURIComponent(Q)}`);E(Ne)}catch{E(null)}}async function L(Q){const ne=Q??s;if(ne.trim()){p("Analysiere HuggingFace Repository..."),E(null);try{const Ne=await xe(`/api/hf/quants?repo=${encodeURIComponent(ne)}`);o(Ne.repo),d(Ne.quants);const Ce=Ne.quants.length?Ne.quants.includes("Q4_K_M")?"Q4_K_M":Ne.quants[0]:u;Ne.quants.length&&f(Ce),p(Ne.quants.length?"":"Keine GGUF-Dateien in diesem Repository gefunden."),Ne.quants.length&&$(Ne.repo,Ce)}catch(Ne){p(`Fehler: ${Ne}`)}}}function H(Q){f(Q),$(s,Q)}async function re(){if(b.trim()){p("Durchsuche HuggingFace...");try{const Q=await xe(`/api/hf/search?q=${encodeURIComponent(b)}`);R(Q.results),p(Q.results.length?"":"Keine Ergebnisse gefunden.")}catch(Q){p(`Suche fehlgeschlagen: ${Q}`)}}}async function le(){if(s.trim()){if((D==null?void 0:D.fit.level)==="too_tight"&&!k){C(!0);return}p("Download-Job wird initiiert...");try{await xe("/api/models/install",{method:"POST",body:JSON.stringify({repo:s,quant:u,role:v||void 0,jinja:!0})}),C(!1),p(`Download gestartet: ${s} (${u})${v?`, Rolle: ${v}`:""}. Fortschritt oben.`+(z?` „${v}" wurde von ${z.name} übernommen.`:"")+(v==="fast"||v==="coder"?" Speculative Draft (Vocab-geprüft) kannst du nach dem Download an der Modellkarte (»Spec«) setzen.":""))}catch(Q){p(`Download-Fehler: ${Q}`)}}}const he=(D==null?void 0:D.fit.level)==="perfect"?"text-emerald-400 border-emerald-500/40 bg-emerald-500/10":(D==null?void 0:D.fit.level)==="marginal"?"text-amber-400 border-amber-500/40 bg-amber-500/10":"text-red-400 border-red-500/40 bg-red-500/10";return r.jsxs("div",{className:"space-y-4 rounded-2xl border border-border/60 bg-card/45 backdrop-blur-md p-5 shadow-lg shadow-black/10",children:[r.jsx("div",{className:"text-xs font-bold uppercase tracking-wider text-muted-foreground",children:"HF Download & Suche"}),r.jsxs("div",{className:"flex flex-col sm:flex-row gap-2",children:[r.jsx("input",{value:s,onChange:Q=>{o(Q.target.value),E(null),C(!1)},placeholder:"HF-URL oder org/repo (z.B. unsloth/Qwen2.5-Coder-7B-Instruct-GGUF)",className:"flex-1 h-9 rounded-lg border border-border/60 bg-background/40 px-3 text-xs outline-none focus:ring-1 focus:ring-primary/50 text-foreground"}),r.jsxs("div",{className:"flex gap-2",children:[r.jsx("button",{onClick:()=>L(),className:"h-9 px-4 rounded-lg border border-border/60 bg-background/20 text-xs font-semibold hover:border-primary/50 hover:bg-background/40 transition-all cursor-pointer whitespace-nowrap",children:"Quants laden"}),a.length>0&&r.jsxs(r.Fragment,{children:[r.jsx("select",{value:u,onChange:Q=>H(Q.target.value),className:"h-9 rounded-lg border border-border/60 bg-background/40 px-3 text-xs outline-none text-foreground font-semibold",children:a.map(Q=>r.jsx("option",{value:Q,className:"bg-popover text-foreground",children:Q},Q))}),r.jsxs("select",{value:v,onChange:Q=>x(Q.target.value),title:"Rolle (optional) — bestimmt Auto-Konfiguration wie parallele Slots",className:"h-9 rounded-lg border border-border/60 bg-background/40 px-3 text-xs outline-none text-foreground font-semibold",children:[r.jsx("option",{value:"",className:"bg-popover text-foreground",children:"Rolle…"}),I.map(Q=>r.jsx("option",{value:Q,className:"bg-popover text-foreground",children:Q},Q))]}),r.jsx("button",{onClick:le,className:`h-9 px-4 rounded-lg text-xs font-semibold transition-all cursor-pointer flex items-center gap-1.5 ${k?"bg-red-500 text-white hover:opacity-90":"bg-primary text-primary-foreground hover:opacity-90"}`,children:k?r.jsxs(r.Fragment,{children:[r.jsx(Wo,{className:"h-3.5 w-3.5"})," OOM-Risiko — trotzdem laden"]}):r.jsxs(r.Fragment,{children:[r.jsx(an,{className:"h-3.5 w-3.5"})," Herunterladen"]})})]})]})]}),D&&r.jsxs("div",{className:`flex flex-wrap items-center gap-x-3 gap-y-1 rounded-lg border px-3 py-2 text-[11px] font-medium ${he}`,children:[r.jsx("span",{className:"font-bold uppercase tracking-wide",children:D.fit.text}),r.jsxs("span",{className:"font-mono opacity-90",children:["~",D.params_b,"B · ~",D.fit.req_gb," GB / ",D.sys_ram_gb," GB RAM · ~",D.fit.tps," t/s"]}),D.fit.level==="too_tight"&&r.jsx("span",{className:"opacity-90",children:"— passt nicht in den Speicher, würde beim Laden abstürzen (OOM)."})]}),z&&r.jsxs("div",{className:"flex items-start gap-2 rounded-lg border border-amber-500/40 bg-amber-500/10 px-3 py-2 text-[11px] font-medium text-amber-400",children:[r.jsx(Wo,{className:"h-3.5 w-3.5 mt-0.5 shrink-0"}),r.jsxs("span",{children:["Rolle ",r.jsxs("strong",{children:["„",v,'"']})," ist aktuell ",r.jsx("strong",{children:z.name})," zugewiesen. Beim Download übernimmt das neue Modell diese Rolle — ",z.name," bleibt installiert, verliert sie aber."]})]}),r.jsxs("div",{className:"flex gap-2 border-t border-border/20 pt-4",children:[r.jsxs("div",{className:"relative flex-1",children:[r.jsx("input",{value:b,onChange:Q=>w(Q.target.value),onKeyDown:Q=>Q.key==="Enter"&&re(),placeholder:"HuggingFace durchsuchen (z.B. Llama-3.1)...",className:"w-full h-9 pl-9 pr-3 rounded-lg border border-border/60 bg-background/40 text-xs outline-none focus:ring-1 focus:ring-primary/50 text-foreground"}),r.jsx(vc,{className:"absolute left-3 top-2.5 h-3.5 w-3.5 text-muted-foreground"})]}),r.jsx("button",{onClick:re,className:"h-9 px-4 rounded-lg border border-border/60 bg-background/20 text-xs font-semibold hover:border-primary/50 hover:bg-background/40 transition-all cursor-pointer",children:"Suchen"})]}),P.length>0&&r.jsx("div",{className:"max-h-48 space-y-1.5 overflow-y-auto border border-border/40 bg-background/20 p-2 rounded-xl scrollbar-thin",children:P.map(Q=>r.jsxs("button",{onClick:()=>{o(Q.repo),R([]),w(""),L(Q.repo)},className:"flex w-full items-center justify-between rounded-lg px-3 py-2 text-left text-xs bg-background/10 border border-border/10 hover:border-primary/30 hover:bg-background/30 transition-all",children:[r.jsx("span",{className:"font-semibold truncate",children:Q.repo}),r.jsxs("span",{className:"text-[10px] font-mono text-muted-foreground flex items-center gap-1 shrink-0",children:[r.jsx(an,{className:"h-3 w-3"})," ",Q.downloads.toLocaleString()]})]},Q.repo))}),h&&r.jsx("div",{className:"text-[10px] font-medium text-primary font-mono",children:h})]})}const Xb={fast:{title:"Schnelles Alltags-Hirn",desc:"Schnelle MoE-Antworten für Chat, Zusammenfassungen und alltägliche Aufgaben.",icon:Qo},heavy:{title:"Schweres Reasoning",desc:"Große Modelle für komplexe Logik, Mathematik und tiefgründiges Planen.",icon:Go},coder:{title:"Coden & Entwicklung",desc:"Autovervollständigung, Refactoring und Codegenerierung direkt in deiner IDE.",icon:ec},vision:{title:"Bilder & Vision",desc:"Verarbeitet Bilder, Screenshots und visuelle Diagramme in multimodalen Chats.",icon:rc},scout:{title:"Multimodal-Allrounder",desc:"Multimodaler Allrounder für schnelle Antworten, Übersetzungen und Alltag.",icon:tc}};function e1(){const{data:s,isLoading:o,error:a}=nb(),{data:d}=Bn(),{data:u}=kc(),f=(d==null?void 0:d.models)??[],h=a?String(a):"",[p,v]=g.useState({}),[x,b]=g.useState({}),[w,P]=g.useState(!1);async function R(D,E,k,C){v(I=>({...I,[D]:"Starte..."}));try{await xe("/api/models/install",{method:"POST",body:JSON.stringify({repo:D,role:E,quant:k,jinja:C})}),v(I=>({...I,[D]:"Download läuft"}))}catch{v(B=>({...B,[D]:"Fehler"}))}}return o?r.jsx("div",{className:"text-xs text-muted-foreground py-12 text-center",children:"Analysiere Hardware und suche passende GGUF-Empfehlungen…"}):h||!s?r.jsxs("div",{className:"rounded-xl border border-red-500/20 bg-red-500/5 p-4 text-xs text-red-400",children:["Empfehlungsdienst temporär nicht erreichbar (",h,")."]}):r.jsxs("div",{className:"space-y-8",children:[r.jsxs("div",{className:"text-[10px] font-mono text-muted-foreground bg-background/25 border border-border/40 p-4 rounded-xl flex flex-col sm:flex-row sm:items-center justify-between gap-3 shadow-sm",children:[r.jsxs("div",{children:["Modell-Registry geladen für ",r.jsxs("span",{className:"text-foreground font-bold",children:[s.sys_ram_gb," GB"]})," System-RAM."]}),r.jsxs("div",{className:"flex items-center gap-1.5",children:[r.jsx(Dm,{className:"h-3.5 w-3.5 text-primary fill-primary/20"}),r.jsx("span",{children:"Empfehlungen sind automatisch auf deine Box-Hardware optimiert."})]})]}),r.jsx("div",{className:"grid gap-6 md:grid-cols-2",children:s.categories.map(D=>{const E=Xb[D.role]||{title:D.title||D.role,desc:"Spezifisches Modell für diese Systemrolle.",icon:Vo},k=E.icon,C=f.find(H=>H.role===D.role),I=u==null?void 0:u.model_list.find(H=>H.role===D.role),B=D.models.find(H=>H.repo===D.recommended)||D.models[0];if(!B)return null;const z=p[B.repo],$=D.models.filter(H=>H.repo!==D.recommended),L=!!x[D.role];return r.jsxs("div",{className:X("rounded-2xl border bg-card/45 backdrop-blur-md p-5 shadow-lg shadow-black/10 flex flex-col justify-between gap-5 transition-all duration-300 hover:border-primary/40",C?"border-border/60":"border-primary/20 shadow-primary/5"),children:[r.jsxs("div",{className:"space-y-4",children:[r.jsxs("div",{className:"flex items-start justify-between gap-3",children:[r.jsxs("div",{className:"flex items-center gap-3",children:[r.jsx("div",{className:"w-10 h-10 rounded-xl bg-primary/10 border border-primary/20 flex items-center justify-center text-primary shadow-sm shrink-0",children:r.jsx(k,{className:"h-5.5 w-5.5"})}),r.jsxs("div",{children:[r.jsx("h3",{className:"text-sm font-bold tracking-tight text-foreground",children:E.title}),r.jsxs("span",{className:"text-[9px] font-mono text-muted-foreground uppercase bg-background/50 px-1.5 py-0.5 rounded border border-border/30 inline-block mt-0.5",children:["Rolle: ",D.role]})]})]}),C?r.jsxs("span",{className:"flex items-center gap-1.5 text-[9px] font-bold text-emerald-400 uppercase tracking-wider bg-emerald-500/10 border border-emerald-500/20 px-2.5 py-1 rounded-lg",children:[r.jsx("span",{className:"h-1.5 w-1.5 rounded-full bg-emerald-500 animate-pulse"}),"Aktiviert"]}):r.jsx("span",{className:"text-[9px] font-bold text-primary/70 uppercase tracking-wider bg-primary/10 border border-primary/20 px-2.5 py-1 rounded-lg",children:"Frei"})]}),r.jsx("p",{className:"text-xs text-muted-foreground leading-relaxed",children:E.desc}),r.jsx("div",{className:"p-3.5 rounded-xl bg-background/35 border border-border/30 space-y-2.5",children:C?r.jsxs("div",{className:"space-y-1.5",children:[r.jsx("div",{className:"text-[9px] font-bold uppercase tracking-wider text-muted-foreground/60",children:"Aktive GGUF-Belegung"}),r.jsx("div",{className:"text-xs font-mono font-bold text-foreground truncate",title:C.name,children:C.name.split("/").pop()}),r.jsxs("div",{className:"text-[10px] text-muted-foreground/80 flex items-center gap-2",children:[r.jsxs("span",{children:["Größe: ",dc(C.size_bytes||0)]}),r.jsx("span",{children:"•"}),r.jsxs("span",{children:["Quant: ",C.quant||"GGUF"]})]})]}):r.jsxs("div",{className:"space-y-1.5",children:[r.jsx("div",{className:"text-[9px] font-bold uppercase tracking-wider text-primary/80",children:"Empfohlenes Modell"}),r.jsx("div",{className:"text-xs font-mono font-bold text-foreground truncate",title:B.name,children:B.name}),r.jsxs("div",{className:"text-[10px] text-muted-foreground/80 flex items-center gap-2 flex-wrap",children:[r.jsxs("span",{children:["Ersteller: ",B.author]}),r.jsx("span",{children:"•"}),r.jsxs("span",{children:["Quant: ",B.quant]})]}),r.jsx("div",{className:"flex items-center gap-1.5 pt-0.5",children:r.jsx($b,{fit:B.fit})})]})}),r.jsx("div",{className:"pt-1",children:C?I?r.jsxs("div",{className:"space-y-2",children:[r.jsxs("div",{className:"text-[9px] font-semibold text-amber-400 flex items-center gap-1.5",children:[r.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-amber-400 animate-ping shrink-0"}),r.jsxs("span",{children:["Bessere Version in der Registry: ",I.repo.split("/").pop()]})]}),r.jsxs("button",{onClick:()=>R(I.repo,D.role,B.quant||"Q4_K_M",B.caps.tools!=="no"),disabled:!!p[I.repo],className:"h-8 w-full flex items-center justify-center gap-1.5 rounded-lg bg-amber-500 text-black text-xs font-bold hover:bg-amber-400 disabled:opacity-50 transition-all cursor-pointer shadow-md shadow-amber-500/10",children:[r.jsx(an,{className:"h-3.5 w-3.5"}),p[I.repo]||"Auf neue Version aktualisieren"]})]}):r.jsxs("div",{className:"h-8 flex items-center justify-center gap-1.5 text-[10px] font-bold text-emerald-400 uppercase tracking-wide bg-emerald-500/5 border border-emerald-500/10 rounded-lg select-none",children:[r.jsx(ir,{className:"h-4 w-4"})," Auf neuestem Stand"]}):r.jsxs("button",{onClick:()=>R(B.repo,D.role,B.quant||"Q4_K_M",B.caps.tools!=="no"),disabled:!!z,className:X("h-8 w-full flex items-center justify-center gap-1.5 rounded-lg text-xs font-bold transition-all cursor-pointer border",z?"border-primary/40 bg-primary/5 text-primary":"bg-primary text-primary-foreground hover:opacity-90 shadow-md shadow-primary/10"),children:[r.jsx(an,{className:"h-3.5 w-3.5"}),z||"Optimales Modell einsetzen"]})})]}),$.length>0&&r.jsxs("div",{className:"border-t border-border/20 pt-3",children:[r.jsxs("button",{onClick:()=>b(H=>({...H,[D.role]:!L})),className:"flex items-center gap-1.5 text-[10px] text-muted-foreground/80 hover:text-foreground transition-colors cursor-pointer",children:[L?r.jsx(k0,{className:"h-3 w-3"}):r.jsx(b0,{className:"h-3 w-3"}),r.jsxs("span",{children:["Alternative Empfehlungen anzeigen (",$.length,")"]})]}),L&&r.jsx("div",{className:"mt-2.5 space-y-2 max-h-36 overflow-y-auto pr-1 scrollbar-thin",children:$.map(H=>r.jsxs("div",{className:"p-2 rounded-lg bg-background/25 border border-border/20 flex items-center justify-between gap-3",children:[r.jsxs("div",{className:"min-w-0",children:[r.jsx("div",{className:"text-[10px] font-mono font-bold text-foreground truncate",title:H.name,children:H.name}),r.jsxs("div",{className:"text-[9px] text-muted-foreground flex items-center gap-1.5 mt-0.5",children:[r.jsxs("span",{children:["Quant: ",H.quant]}),r.jsx("span",{children:"•"}),r.jsx("span",{children:H.fit.text})]})]}),r.jsx("button",{onClick:()=>R(H.repo,D.role,H.quant||"Q4_K_M",H.caps.tools!=="no"),disabled:!!p[H.repo],className:"h-6 px-2.5 rounded bg-background/40 hover:bg-background/80 border border-border/40 text-[9px] font-bold text-foreground transition-all cursor-pointer shrink-0 disabled:opacity-50",children:p[H.repo]||"Installieren"})]},H.repo))})]})]},D.role)})}),r.jsxs("div",{className:"border border-border/50 bg-card/20 rounded-2xl overflow-hidden shadow-md mt-4",children:[r.jsxs("button",{onClick:()=>P(!w),className:"w-full px-5 py-4 flex items-center justify-between text-xs font-bold uppercase tracking-wider text-muted-foreground hover:bg-card/30 transition-colors cursor-pointer",children:[r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx(vc,{className:"h-4 w-4 text-primary"}),r.jsx("span",{children:"Eigenes Modell von Hugging Face laden (Erweiterte Ansicht)"})]}),r.jsx("span",{className:"text-[10px] text-primary hover:underline",children:w?"Ausblenden ▲":"Anzeigen ▼"})]}),w&&r.jsx("div",{className:"p-5 border-t border-border/20 bg-card/10",children:r.jsx(Jb,{})})]})]})}function t1(){const[s,o]=g.useState("cockpit");return r.jsxs("div",{className:"space-y-6",children:[r.jsxs("div",{className:"flex flex-col sm:flex-row justify-between sm:items-center gap-4",children:[r.jsxs("div",{children:[r.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:"Modell-Manager"}),r.jsx("p",{className:"text-sm text-muted-foreground",children:"Verwalte deine Modelle und passe das Gateway-Routing live über das interaktive Cockpit an."})]}),r.jsx("div",{className:"flex rounded-xl border border-border/60 bg-card/45 backdrop-blur-md p-1 self-start",children:["cockpit","discover"].map(a=>r.jsx("button",{onClick:()=>o(a),className:X("rounded-lg px-4 py-1.5 text-xs font-semibold tracking-wide uppercase transition-all cursor-pointer",s===a?"bg-primary text-primary-foreground shadow-md shadow-primary/10":"text-muted-foreground hover:text-foreground"),children:a==="cockpit"?"Cockpit":"Modelle finden"},a))})]}),r.jsx(qb,{}),r.jsx("div",{className:"transition-all duration-300",children:s==="cockpit"?r.jsx(Yb,{}):r.jsx(e1,{})})]})}function Sa({label:s,percent:o,detail:a,icon:d}){const u=o>90?"bg-red-500 shadow-md shadow-red-500/20":o>75?"bg-amber-500 shadow-md shadow-amber-500/20":"bg-primary shadow-md shadow-primary/20";return r.jsxs("div",{className:"rounded-2xl border border-border/60 bg-card/45 backdrop-blur-md p-5 shadow-lg shadow-black/10 flex flex-col justify-between gap-3 hover:border-primary/30 transition-all duration-300",children:[r.jsxs("div",{className:"flex items-center justify-between",children:[r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx(d,{className:"h-4.5 w-4.5 text-primary"}),r.jsx("span",{className:"text-xs font-semibold uppercase tracking-wider text-foreground",children:s})]}),r.jsxs("span",{className:"text-xs font-mono font-bold text-foreground",children:[Math.round(o),"%"]})]}),r.jsx("div",{className:"w-full h-2 bg-background/40 rounded-full overflow-hidden border border-border/20",children:r.jsx("div",{className:X("h-full transition-all duration-700 ease-out",u),style:{width:`${Math.min(o,100)}%`}})}),a&&r.jsx("div",{className:"text-[10px] font-mono text-muted-foreground/80",children:a})]})}function r1(){const{data:s,error:o}=Fa(3e3),{data:a}=eb(3e3),{showAlert:d,dialogElement:u}=Hn(),f=o?String(o):"",[h,p]=g.useState(""),[v,x]=g.useState({});async function b(){p("Backup snapshotted...");try{const P=await xe("/api/system/backup",{method:"POST"});p(P.ok?`Snapshot erzeugt: ${P.snapshot} (${P.files.length} Dateien)`:"Keine Änderungen zu sichern.")}catch(P){p(`Fehler: ${P.message}`)}}async function w(P){x(R=>({...R,[P]:!0}));try{const R=await xe("/api/maintenance/restart",{method:"POST",body:JSON.stringify({service:P})});R.ok?d("Erfolgreich",`Dienst ${P} wurde erfolgreich neu gestartet.`):d("Fehler beim Neustart",`Fehler beim Neustart: ${R.err||"Unbekannter Fehler"}`)}catch(R){d("Fehler",`Fehler: ${R.message}`)}finally{x(R=>({...R,[P]:!1}))}}return r.jsxs("div",{className:"space-y-6",children:[r.jsxs("div",{children:[r.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:"System-Diagnose & Status"}),r.jsx("p",{className:"text-sm text-muted-foreground flex items-center gap-1",children:"Echtzeit-Ressourcen der Box, Dienst-Überwachung und Systempflege."})]}),f&&r.jsxs("div",{className:"rounded-xl border border-red-500/20 bg-red-500/5 p-4 text-xs text-red-400 font-mono",children:["System-Status nicht lesbar (",f,")."]}),s&&r.jsxs("div",{className:"space-y-4",children:[r.jsxs("div",{className:"grid gap-4 sm:grid-cols-2 lg:grid-cols-4",children:[r.jsx(Sa,{label:"CPU",percent:s.cpu.percent,detail:s.cpu.cores?`${s.cpu.cores} Cores`:void 0,icon:Dt}),r.jsx(Sa,{label:"RAM",percent:s.ram.percent,detail:`${St(s.ram.used)} / ${St(s.ram.total)} GB`,icon:Ho}),s.gpu&&s.gpu.busy_percent!=null&&r.jsx(Sa,{label:"GPU",percent:s.gpu.busy_percent,detail:s.gpu.gtt_used!=null&&s.gpu.gtt_total?`${St(s.gpu.gtt_used)} / ${St(s.gpu.gtt_total)} GB (GTT/unified)`:s.gpu.vram_used!=null&&s.gpu.vram_total?`${St(s.gpu.vram_used)} / ${St(s.gpu.vram_total)} GB VRAM`:void 0,icon:Dt}),s.disk&&r.jsx(Sa,{label:"Disk",percent:s.disk.percent,detail:`${St(s.disk.used)} / ${St(s.disk.total)} GB`,icon:Ea})]}),s.temp&&(s.temp.cpu||s.temp.gpu)&&r.jsxs("div",{className:"flex gap-3 text-[10px] font-mono text-muted-foreground bg-background/25 border border-border/40 p-2.5 rounded-xl self-start w-fit",children:[s.temp.cpu!=null&&r.jsxs("span",{className:"flex items-center gap-1",children:["CPU-Temperatur: ",r.jsxs("span",{className:"text-foreground font-bold",children:[s.temp.cpu," °C"]})]}),s.temp.cpu!=null&&s.temp.gpu!=null&&r.jsx("span",{children:"|"}),s.temp.gpu!=null&&r.jsxs("span",{className:"flex items-center gap-1",children:["GPU-Temperatur: ",r.jsxs("span",{className:"text-foreground font-bold",children:[s.temp.gpu," °C"]})]})]})]}),a&&r.jsxs("div",{className:"rounded-2xl border border-border/60 bg-card/45 backdrop-blur-md p-5 shadow-lg shadow-black/10 space-y-4",children:[r.jsxs("div",{className:"flex items-center justify-between",children:[r.jsx("div",{className:"text-xs font-bold uppercase tracking-wider text-muted-foreground",children:"Homelab-Dienste"}),r.jsx("button",{onClick:()=>window.dispatchEvent(new CustomEvent("open-system-drawer",{detail:{tab:"logs"}})),className:"h-7 px-3 rounded-lg border border-border/60 bg-background/25 text-[10px] font-bold uppercase hover:bg-accent text-muted-foreground transition-all cursor-pointer",children:"System-Logs anzeigen"})]}),r.jsx("div",{className:"grid gap-3 sm:grid-cols-2",children:a.services.map(P=>r.jsxs("div",{className:"flex items-center justify-between p-3.5 rounded-xl bg-background/20 border border-border/30 hover:border-primary/20 transition-all group",children:[r.jsxs("div",{className:"flex items-center gap-2.5 min-w-0",children:[r.jsx("span",{className:X("h-2.5 w-2.5 rounded-full ring-2 ring-black/40",P.ok?"bg-emerald-500":"bg-amber-500")}),r.jsxs("div",{className:"truncate",children:[r.jsx("div",{className:"text-xs font-bold text-foreground truncate",children:P.name}),r.jsx("div",{className:"text-[9px] text-muted-foreground/60 font-mono mt-0.5 truncate",children:P.url})]})]}),r.jsx("button",{onClick:()=>w(P.name),disabled:v[P.name],className:"h-7 w-7 rounded-lg border border-border/40 text-muted-foreground hover:text-primary hover:bg-primary/5 flex items-center justify-center transition-all opacity-0 group-hover:opacity-100",title:"Dienst neu starten",children:r.jsx(In,{className:X("h-3.5 w-3.5",v[P.name]&&"animate-spin")})})]},P.name))}),r.jsxs("div",{className:"flex flex-wrap gap-4 border-t border-border/20 pt-4 text-[10px] font-semibold text-muted-foreground",children:[r.jsxs("a",{href:Yo(a.links.engine_ui),target:"_blank",rel:"noopener",className:"flex items-center gap-1 text-primary hover:text-primary-foreground hover:bg-primary/10 px-2 py-1 rounded transition-colors",children:[r.jsx(Ra,{className:"h-3 w-3"})," Engine Dashboard (llama-swap)"]}),r.jsxs("a",{href:Yo(a.links.gateway),target:"_blank",rel:"noopener",className:"flex items-center gap-1 text-primary hover:text-primary-foreground hover:bg-primary/10 px-2 py-1 rounded transition-colors",children:[r.jsx(Ra,{className:"h-3 w-3"})," OpenAI Gateway"]})]})]}),r.jsxs("div",{className:"rounded-2xl border border-border/60 bg-card/45 backdrop-blur-md p-5 shadow-lg shadow-black/10 flex flex-col sm:flex-row justify-between sm:items-center gap-4",children:[r.jsxs("div",{className:"space-y-1",children:[r.jsx("h3",{className:"text-xs font-bold uppercase tracking-wider text-foreground",children:"System-Backup & Snapshot"}),r.jsx("p",{className:"text-[10px] text-muted-foreground",children:"Erzeuge einen Git-Snapshot der aktuellen Konfigurationen und des System-Zustands."})]}),r.jsx("div",{className:"flex items-center gap-3 self-start sm:self-auto shrink-0",children:r.jsxs("button",{onClick:b,className:"h-9 px-4 rounded-lg bg-primary text-primary-foreground text-xs font-semibold hover:opacity-90 transition-all flex items-center gap-1.5 cursor-pointer shadow-md shadow-primary/10",children:[r.jsx(F0,{className:"h-4 w-4"})," Snapshot erstellen"]})})]}),h&&r.jsx("div",{className:"text-[10px] font-mono text-primary font-medium bg-primary/5 p-3 rounded-xl border border-primary/20",children:h}),u]})}function n1(){const[s,o]=g.useState(localStorage.getItem("mc_host")||"192.168.178.151"),[a,d]=g.useState(localStorage.getItem("mc_mcp_path")||""),[u,f]=g.useState("cline"),[h,p]=g.useState(!1),v=new URLSearchParams({host:s});a&&v.set("mcp_path",a);const{data:x,error:b}=vh(v.toString()),w=b?String(b):"";function P(k){o(k),k&&localStorage.setItem("mc_host",k)}function R(k){d(k),localStorage.setItem("mc_mcp_path",k)}const D=x==null?void 0:x.tools[u];async function E(){D&&(await navigator.clipboard.writeText(D.snippet),p(!0),setTimeout(()=>p(!1),1500))}return r.jsxs("div",{className:"space-y-6",children:[r.jsxs("div",{children:[r.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:"Verbindung & Integration"}),r.jsx("p",{className:"text-sm text-muted-foreground",children:"Kopiere vorgefertigte Konfigurationsdateien für deinen lokalen PC (IDEs, Cline, Roo Code, Cursor), um direkt auf das geteilte Gedächtnis und den Auto-Swap-Gateway der Box zuzugreifen."})]}),r.jsxs("div",{className:"grid gap-4 md:grid-cols-2 p-5 rounded-2xl border border-border/60 bg-card/45 backdrop-blur-md shadow-lg shadow-black/10",children:[r.jsxs("div",{className:"space-y-1.5",children:[r.jsxs("label",{className:"text-[10px] font-bold uppercase tracking-wider text-muted-foreground flex items-center gap-1.5",children:[r.jsx(P0,{className:"h-3.5 w-3.5 text-primary"})," Box LAN IP-Adresse"]}),r.jsx("input",{value:s,onChange:k=>P(k.target.value),placeholder:"z.B. 192.168.178.151",className:"w-full h-9 rounded-lg border border-border/60 bg-background/40 px-3 font-mono text-xs outline-none focus:ring-1 focus:ring-primary/50 text-foreground"})]}),r.jsxs("div",{className:"space-y-1.5",children:[r.jsxs("label",{className:"text-[10px] font-bold uppercase tracking-wider text-muted-foreground flex items-center gap-1.5",children:[r.jsx(M0,{className:"h-3.5 w-3.5 text-primary"})," Lokaler MCP-Scriptpfad"]}),r.jsx("input",{value:a,onChange:k=>R(k.target.value),placeholder:"z.B. F:\\Coding Stuff\\mission-control-2\\mcp\\mcp_memory.py",className:"w-full h-9 rounded-lg border border-border/60 bg-background/40 px-3 font-mono text-xs outline-none focus:ring-1 focus:ring-primary/50 text-foreground"})]})]}),w&&r.jsxs("div",{className:"rounded-xl border border-red-500/20 bg-red-500/5 p-4 text-xs text-red-400",children:["Fehler beim Generieren der Snippets: ",w]}),x&&r.jsxs("div",{className:"space-y-4",children:[r.jsx("div",{className:"flex flex-wrap gap-1 bg-card/20 p-1 border border-border/40 rounded-xl max-w-fit",children:Object.entries(x.tools).map(([k,C])=>r.jsx("button",{onClick:()=>f(k),className:X("rounded-lg px-4 py-1.5 text-xs font-semibold tracking-wide uppercase transition-all cursor-pointer",u===k?"bg-primary text-primary-foreground shadow-md shadow-primary/10":"text-muted-foreground hover:text-foreground"),children:C.label},k))}),D&&r.jsxs("div",{className:"space-y-3",children:[D.note&&r.jsxs("div",{className:"flex items-start gap-2.5 p-3 rounded-xl bg-primary/5 border border-primary/20 text-xs text-muted-foreground leading-relaxed",children:[r.jsx(R0,{className:"h-4.5 w-4.5 text-primary shrink-0 mt-0.5"}),r.jsx("span",{children:D.note})]}),r.jsxs("div",{className:"flex flex-col border border-border/60 bg-black/60 rounded-2xl overflow-hidden shadow-2xl",children:[r.jsxs("div",{className:"flex h-11 items-center justify-between px-4 border-b border-border/40 bg-black/40 shrink-0",children:[r.jsxs("div",{className:"flex items-center gap-1.5",children:[r.jsx("span",{className:"h-3 w-3 rounded-full bg-red-500/80 shadow-md shadow-red-500/10"}),r.jsx("span",{className:"h-3 w-3 rounded-full bg-amber-500/80 shadow-md shadow-amber-500/10"}),r.jsx("span",{className:"h-3 w-3 rounded-full bg-emerald-500/80 shadow-md shadow-emerald-500/10"})]}),r.jsxs("div",{className:"flex items-center gap-1.5 text-[10px] font-mono text-muted-foreground/75 bg-background/30 px-3 py-1 rounded-md border border-border/20",children:[r.jsx(Oa,{className:"h-3.5 w-3.5 text-primary"}),r.jsx("span",{children:u==="cline"||u==="cursor"?"config.json":"settings.json"})]}),r.jsxs("button",{onClick:E,className:"flex h-7 px-2.5 items-center gap-1.5 rounded-lg border border-border/40 bg-background/30 text-[10px] font-semibold text-muted-foreground hover:text-foreground hover:bg-background/60 transition-all cursor-pointer",children:[h?r.jsx(ir,{className:"h-3.5 w-3.5 text-emerald-400"}):r.jsx(Pm,{className:"h-3.5 w-3.5"}),r.jsx("span",{children:h?"Kopiert":"Kopieren"})]})]}),r.jsx("pre",{className:"p-5 overflow-x-auto text-xs font-mono text-cyan-200/90 whitespace-pre leading-relaxed scrollbar-thin select-text bg-black/10",children:r.jsx("code",{children:D.snippet})})]})]})]})]})}const tm=["user","instruction","stable","versioned","ephemeral"],Fd={user:{label:"User",icon:G0,color:"text-cyan-400",border:"border-cyan-500/30",bg:"bg-cyan-500/10",text:"text-cyan-400"},instruction:{label:"Regel",icon:I0,color:"text-violet-400",border:"border-violet-500/30",bg:"bg-violet-500/10",text:"text-violet-400"},stable:{label:"Fakt",icon:Us,color:"text-indigo-400",border:"border-indigo-500/30",bg:"bg-indigo-500/10",text:"text-indigo-400"},versioned:{label:"Version",icon:H0,color:"text-amber-400",border:"border-amber-500/30",bg:"bg-amber-500/10",text:"text-amber-400"},ephemeral:{label:"Temporär",icon:S0,color:"text-pink-400",border:"border-pink-500/30",bg:"bg-pink-500/10",text:"text-pink-400"}},rm={label:"Gedächtnis",icon:Mm,bg:"bg-muted/10",text:"text-muted-foreground"},s1={user:"border-l-cyan-500/80",instruction:"border-l-violet-500/80",stable:"border-l-indigo-500/80",versioned:"border-l-amber-500/80",ephemeral:"border-l-pink-500/80"};function o1(){const[s,o]=g.useState(""),[a,d]=g.useState(""),[u,f]=g.useState(""),[h,p]=g.useState("stable"),[v,x]=g.useState(!1),b=cn(),{showAlert:w,showConfirm:P,dialogElement:R}=Hn(),{data:D=[],error:E}=yh({q:a,category:s}),k=E?String(E):"",C=()=>b.invalidateQueries({queryKey:["memory"]});async function I(){u.trim()&&(await xe("/api/memory",{method:"POST",body:JSON.stringify({content:u,category:h,source:"ui"})}),f(""),C())}async function B($){await xe(`/api/memory/${$}`,{method:"DELETE"}),C()}async function z(){x(!0);try{const $=await xe("/api/memory/dedupe",{method:"POST",body:JSON.stringify({apply:!1})});if($.duplicate_count===0){w("Ergebnis","Keine Dubletten gefunden — alles sauber.");return}P("Deduplizierung bestätigen",`${$.duplicate_count} Dublette(n) in ${$.groups.length} Gruppe(n) gefunden. Entfernen?`,async()=>{try{await xe("/api/memory/dedupe",{method:"POST",body:JSON.stringify({apply:!0})}),C()}catch(L){w("Fehler",`Fehler beim Löschen: ${L.message}`)}})}catch($){w("Fehler",`Fehler bei der Deduplizierung: ${$.message}`)}finally{x(!1)}}return r.jsxs("div",{className:"space-y-6",children:[r.jsxs("div",{className:"flex flex-col sm:flex-row justify-between sm:items-center gap-4",children:[r.jsxs("div",{children:[r.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:"Gedächtnis-Pool (Memory)"}),r.jsx("p",{className:"text-sm text-muted-foreground",children:"Die geteilte Konstitution des Systems. Alle Instanzen (Hermes, IDEs, Gateway) lesen und schreiben hierauf per MCP-Protokoll."})]}),r.jsxs("button",{onClick:z,disabled:v,className:"flex h-9 px-4 items-center gap-1.5 text-xs font-semibold rounded-lg border border-border/60 bg-card hover:border-primary/50 transition-all cursor-pointer shadow-md disabled:opacity-50 shrink-0 self-start",children:[r.jsx(B0,{className:"h-4 w-4 text-primary animate-pulse"}),r.jsx("span",{children:"Deduplizieren"})]})]}),r.jsxs("div",{className:"rounded-2xl border border-border/60 bg-card/45 backdrop-blur-md p-5 shadow-lg shadow-black/10 space-y-4",children:[r.jsx("div",{className:"text-xs font-bold uppercase tracking-wider text-muted-foreground",children:"Neuen Eintrag anlegen"}),r.jsx("textarea",{value:u,onChange:$=>f($.target.value),placeholder:"Füge eine neue Regel, eine Vorliebe oder einen stabilen Fakt über das Projekt oder dich hinzu...",rows:3,className:"w-full resize-none rounded-xl border border-border/60 bg-background/30 p-3.5 text-xs outline-none focus:ring-1 focus:ring-primary/50 text-foreground transition-all leading-relaxed"}),r.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-3",children:[r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx("span",{className:"text-[10px] font-semibold text-muted-foreground uppercase tracking-wider",children:"Kategorie"}),r.jsx("select",{value:h,onChange:$=>p($.target.value),className:"h-8 rounded-lg border border-border/60 bg-background/50 px-2 py-1 text-xs outline-none font-semibold text-foreground cursor-pointer",children:tm.map($=>{var L;return r.jsx("option",{value:$,className:"bg-popover text-foreground",children:((L=Fd[$])==null?void 0:L.label)||$},$)})})]}),r.jsxs("button",{onClick:I,className:"h-9 px-4 rounded-lg bg-primary text-primary-foreground text-xs font-semibold hover:opacity-90 transition-all flex items-center gap-1.5 cursor-pointer shadow-md shadow-primary/10",children:[r.jsx(Rm,{className:"h-4 w-4"})," Speichern"]})]})]}),r.jsxs("div",{className:"flex flex-col md:flex-row items-stretch md:items-center gap-3",children:[r.jsxs("div",{className:"relative flex-1",children:[r.jsx("input",{value:a,onChange:$=>d($.target.value),placeholder:"Gedächtnis durchsuchen...",className:"w-full h-9 pl-9 pr-3 rounded-lg border border-border/60 bg-card/45 text-xs outline-none focus:ring-1 focus:ring-primary/50 text-foreground"}),r.jsx(vc,{className:"absolute left-3 top-2.5 h-3.5 w-3.5 text-muted-foreground"})]}),r.jsxs("div",{className:"flex flex-wrap items-center gap-1.5 p-1 bg-card/30 border border-border/40 rounded-xl overflow-x-auto max-w-full",children:[r.jsx("button",{onClick:()=>o(""),className:X("h-7 px-3 rounded-lg text-[10px] font-semibold uppercase tracking-wider transition-all cursor-pointer whitespace-nowrap",s?"text-muted-foreground hover:text-foreground":"bg-primary text-primary-foreground"),children:"Alle"}),tm.map($=>{const L=Fd[$]||rm,H=L.icon;return r.jsxs("button",{onClick:()=>o($),className:X("h-7 px-2.5 rounded-lg text-[10px] font-semibold uppercase tracking-wider transition-all cursor-pointer flex items-center gap-1 whitespace-nowrap",s===$?"bg-primary text-primary-foreground":"text-muted-foreground hover:text-foreground"),children:[r.jsx(H,{className:"h-3 w-3"}),r.jsx("span",{children:L.label})]},$)})]})]}),k&&r.jsxs("div",{className:"rounded-xl border border-red-500/20 bg-red-500/5 p-4 text-xs text-red-400",children:["Fehler beim Laden des Gedächtnisses: ",k]}),r.jsx("div",{className:"space-y-3",children:D.length===0?r.jsx("div",{className:"text-xs text-muted-foreground border border-dashed border-border/60 rounded-2xl p-12 text-center",children:"Keine Einträge für die aktuellen Filterkriterien gefunden."}):D.map($=>{const L=Fd[$.category]||rm,H=L.icon;return r.jsxs("div",{className:X("flex items-start justify-between gap-4 p-4 rounded-xl border border-l-4 bg-card/45 backdrop-blur-md border-border/60 shadow-md shadow-black/5 hover:border-primary/20 transition-all group",s1[$.category]||"border-l-muted"),children:[r.jsxs("div",{className:"flex items-start gap-3 flex-1 min-w-0",children:[r.jsxs("span",{className:X("flex items-center gap-1 px-2 py-0.5 rounded text-[9px] font-bold uppercase tracking-wider font-mono shrink-0",L.bg,L.text),children:[r.jsx(H,{className:"h-3 w-3"}),r.jsx("span",{className:"hidden sm:inline",children:L.label})]}),r.jsx("span",{className:"text-xs text-foreground leading-relaxed break-words whitespace-pre-wrap flex-1",children:$.content})]}),r.jsxs("div",{className:"flex items-center gap-3 shrink-0",children:[r.jsx("span",{className:"text-[9px] font-mono text-muted-foreground/60 bg-background/20 px-1.5 py-0.5 rounded uppercase tracking-wider",children:$.source}),r.jsx("button",{onClick:()=>B($.id),className:"h-7 w-7 rounded-lg flex items-center justify-center border border-border/40 text-muted-foreground hover:text-red-400 hover:bg-red-500/5 transition-all opacity-0 group-hover:opacity-100",title:"Eintrag löschen",children:r.jsx(nc,{className:"h-3.5 w-3.5"})})]})]},$.id)})}),R]})}function Ca({label:s,ok:o,detail:a,icon:d,onClick:u}){return r.jsxs("div",{onClick:u,className:X("rounded-2xl border bg-card/45 backdrop-blur-md p-5 shadow-lg shadow-black/10 flex flex-col justify-between gap-3 hover:border-primary/40 transition-all duration-300",o?"border-border/60":"border-amber-500/30",u&&"cursor-pointer hover:bg-card/70"),children:[r.jsxs("div",{className:"flex items-center justify-between",children:[r.jsx("span",{className:"text-[10px] font-bold uppercase tracking-wider text-muted-foreground",children:s}),r.jsx(d,{className:X("h-4.5 w-4.5",o?"text-primary":"text-amber-500")})]}),r.jsxs("div",{className:"space-y-1.5",children:[r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx("span",{className:X("h-2 w-2 rounded-full ring-2 ring-black/40",o?"bg-emerald-500 animate-pulse":"bg-amber-500")}),r.jsx("span",{className:"text-xs font-semibold text-foreground",children:o?"Bereit / Online":"Offline / Inaktiv"})]}),a&&r.jsx("div",{className:"text-[10px] font-mono text-muted-foreground truncate max-w-[200px]",title:a,children:a})]}),u&&r.jsxs("button",{onClick:f=>{f.stopPropagation(),u()},className:"mt-2 flex items-center justify-center gap-1.5 w-full py-1.5 px-3 rounded-lg border border-primary/30 bg-primary/10 hover:bg-primary/20 text-primary text-[10px] font-bold uppercase tracking-wider transition-all cursor-pointer font-space",children:[r.jsx(Dt,{className:"h-3.5 w-3.5"}),r.jsx("span",{children:"Gehirn wechseln"})]})]})}function l1(){const{data:s,error:o}=gh(5e3),{data:a}=Bn(),{showAlert:d,dialogElement:u}=Hn(),f=cn(),h=o?String(o):"",p=g.useMemo(()=>["auto","fast","heavy",...((a==null?void 0:a.models)??[]).map($=>{var L;return((L=$.name.split("/").pop())==null?void 0:L.replace(".gguf",""))||$.name})],[a]),[v,x]=g.useState(null),[b,w]=g.useState(!1),[P,R]=g.useState({width:800,height:360}),D=g.useRef(null),E=g.useCallback(z=>{if(D.current&&(D.current.disconnect(),D.current=null),z){const $=new ResizeObserver(L=>{if(!L||L.length===0)return;const H=L[0].contentRect;R({width:H.width,height:H.height})});$.observe(z),D.current=$}},[]),k=P.width,C=P.height,I=(z,$,L,H)=>{const re=(z+L)/2;return`M ${z} ${$} C ${re} ${$}, ${re} ${H}, ${L} ${H}`};async function B(z){try{await xe("/api/agent/brain",{method:"POST",body:JSON.stringify({model:z})}),d("Erfolgreich",`Hermes-Gehirn wurde auf '${z}' geändert. Der Gateway-Dienst wurde neu gestartet.`),f.invalidateQueries({queryKey:Qe.agentStatus}),w(!1)}catch($){d("Fehler",`Fehler beim Wechseln des Gehirns: ${$.message}`)}}return r.jsxs("div",{className:"space-y-6",children:[r.jsx("style",{children:` - @keyframes flow-dash { - to { - stroke-dashoffset: -20; - } - } - .svg-flow-path { - stroke-dasharray: 4 6; - animation: flow-dash 1s linear infinite; - } - `}),r.jsxs("div",{className:"flex flex-col sm:flex-row justify-between sm:items-center gap-4",children:[r.jsxs("div",{children:[r.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:"Hermes Agenten-Cockpit"}),r.jsxs("p",{className:"text-sm text-muted-foreground",children:["Hermes ist ein autonomer Agent, der im Hintergrund der Box läuft (Port ",r.jsx("code",{children:":8642"}),") und seine eigene UI besitzt."]})]}),(s==null?void 0:s.webui_url)&&r.jsxs("a",{href:Yo(s.webui_url),target:"_blank",rel:"noopener",className:X("flex h-9 px-4 items-center gap-1.5 text-xs font-semibold rounded-lg transition-all cursor-pointer shadow-md shrink-0 self-start",s.webui_reachable?"bg-primary text-primary-foreground hover:opacity-90 shadow-primary/10":"border border-border/60 text-muted-foreground bg-background/20"),children:[r.jsx(Ra,{className:"h-4 w-4"}),r.jsx("span",{children:"AnythingLLM öffnen"})]})]}),h&&r.jsxs("div",{className:"rounded-xl border border-red-500/20 bg-red-500/5 p-4 text-xs text-red-400 font-mono",children:["Status nicht lesbar (",h,")."]}),s&&r.jsxs("div",{className:"space-y-6",children:[r.jsxs("div",{className:"grid gap-4 sm:grid-cols-2 lg:grid-cols-4",children:[r.jsx(Ca,{label:"Agent Gateway",ok:s.gateway_reachable,detail:"Port :8642 (REST API)",icon:$s}),r.jsx(Ca,{label:"AnythingLLM",ok:s.webui_reachable,detail:"Chat-UI (AnythingLLM)",icon:Ho}),r.jsx(Ca,{label:"Aktives Gehirn",ok:s.gateway_reachable,detail:s.brain_model?`Model: ${s.brain_model}`:"Model: auto",icon:Dt,onClick:()=>w(!0)}),r.jsx(Ca,{label:"Verdrahtung",ok:s.has_config,detail:`Config: ${s.has_config?"✓":"—"} · Skills: ${s.has_skills?"✓":"—"} · Memory: ${s.has_memories?"✓":"—"}`,icon:Ko})]}),r.jsxs("div",{className:"rounded-2xl border border-border/60 bg-card/45 backdrop-blur-md p-6 shadow-lg shadow-black/10 space-y-4",children:[r.jsxs("div",{children:[r.jsx("span",{className:"text-xs font-bold uppercase tracking-wider text-foreground",children:"Interactive Agent Flow Graph"}),r.jsx("p",{className:"text-[10px] text-muted-foreground mt-0.5 leading-relaxed",children:"Visualisiert das Zusammenspiel und die Verbindungspfade zwischen den Hermes-Systemkomponenten."})]}),r.jsxs("div",{ref:E,className:"relative w-full h-96 border border-border/30 rounded-xl bg-black/25 overflow-hidden flex",children:[r.jsxs("svg",{className:"absolute inset-0 pointer-events-none w-full h-full",children:[r.jsxs("defs",{children:[r.jsxs("linearGradient",{id:"cyan-to-teal",x1:"0%",y1:"0%",x2:"100%",y2:"0%",children:[r.jsx("stop",{offset:"0%",stopColor:"#06b6d4",stopOpacity:"0.45"}),r.jsx("stop",{offset:"100%",stopColor:"#0d9488",stopOpacity:"0.45"})]}),r.jsxs("linearGradient",{id:"active-glow",x1:"0%",y1:"0%",x2:"100%",y2:"0%",children:[r.jsx("stop",{offset:"0%",stopColor:"#3b82f6",stopOpacity:"0.8"}),r.jsx("stop",{offset:"100%",stopColor:"#10b981",stopOpacity:"0.8"})]})]}),r.jsx("path",{d:I(k*.15,C*.5,k*.5,C*.5),stroke:"url(#cyan-to-teal)",strokeWidth:"1.5",fill:"none"}),(v==="webui"||s.webui_reachable)&&r.jsx("path",{d:I(k*.15,C*.5,k*.5,C*.5),stroke:"#06b6d4",strokeWidth:"2.5",fill:"none",className:"svg-flow-path"}),r.jsx("path",{d:I(k*.5,C*.5,k*.85,C*.3),stroke:"url(#cyan-to-teal)",strokeWidth:"1.5",fill:"none"}),(v==="gateway"||v==="brain"||s.gateway_reachable)&&r.jsx("path",{d:I(k*.5,C*.5,k*.85,C*.3),stroke:"url(#active-glow)",strokeWidth:"2.5",fill:"none",className:"svg-flow-path"}),r.jsx("path",{d:I(k*.5,C*.5,k*.85,C*.7),stroke:"url(#cyan-to-teal)",strokeWidth:"1.5",fill:"none"}),(v==="gateway"||v==="wiring"||s.gateway_reachable)&&r.jsx("path",{d:I(k*.5,C*.5,k*.85,C*.7),stroke:"url(#active-glow)",strokeWidth:"2.5",fill:"none",className:"svg-flow-path"})]}),r.jsxs("div",{className:"absolute cursor-pointer select-none z-10 w-36 h-9 -translate-y-1/2 -translate-x-1/2 rounded-xl border border-border/60 bg-card/75 backdrop-blur-md flex items-center justify-center gap-1.5 px-2.5 hover:border-primary transition-all text-[10px] font-semibold text-foreground shadow shadow-black/20",style:{left:"15%",top:"50%"},onMouseEnter:()=>x("webui"),onMouseLeave:()=>x(null),onClick:()=>s.webui_reachable&&window.open(Yo(s.webui_url),"_blank"),title:s.webui_reachable?"Klicken um AnythingLLM zu öffnen":"AnythingLLM offline",children:[r.jsx(Ho,{className:X("h-3.5 w-3.5",s.webui_reachable?"text-emerald-400":"text-amber-500")}),r.jsx("span",{children:"AnythingLLM"}),r.jsx("span",{className:X("w-1.5 h-1.5 rounded-full animate-pulse ml-auto",s.webui_reachable?"bg-emerald-500":"bg-amber-500")})]}),r.jsxs("div",{className:"absolute select-none z-10 w-40 py-2.5 px-3 -translate-y-1/2 -translate-x-1/2 rounded-2xl border border-primary/50 bg-card/90 backdrop-blur-md flex flex-col items-center justify-center text-center shadow-lg shadow-primary/5 cursor-pointer",style:{left:"50%",top:"50%"},onMouseEnter:()=>x("gateway"),onMouseLeave:()=>x(null),children:[r.jsxs("div",{className:"flex items-center gap-1",children:[r.jsx($s,{className:"h-3.5 w-3.5 text-primary"}),r.jsx("span",{className:"text-[10px] uppercase font-bold text-primary font-space tracking-wide",children:"Agent Gateway"})]}),r.jsx("div",{className:"text-[9px] font-mono text-muted-foreground mt-0.5",children:"Port :8642"}),r.jsx("div",{className:X("mt-1 px-1.5 py-0.5 rounded text-[8px] font-semibold uppercase font-mono border",s.gateway_reachable?"bg-emerald-500/10 border-emerald-500/20 text-emerald-400":"bg-red-500/10 border-red-500/20 text-red-400"),children:s.gateway_reachable?"Online":"Offline"})]}),r.jsxs("div",{className:X("absolute z-20 w-44 py-1.5 px-3 -translate-y-1/2 -translate-x-1/2 rounded-xl border flex flex-col justify-center hover:border-primary/50 transition-all text-left shadow select-none cursor-pointer",s.gateway_reachable?"border-emerald-500/50 bg-emerald-500/5 shadow-emerald-500/5":"border-border/60 bg-card/75"),style:{left:"85%",top:"30%"},onMouseEnter:()=>x("brain"),onMouseLeave:()=>x(null),onClick:()=>w(!0),children:[r.jsxs("div",{className:"flex items-center justify-between",children:[r.jsxs("div",{className:"flex items-center gap-1 text-muted-foreground",children:[r.jsx(Dt,{className:"h-3 w-3 text-primary"}),r.jsx("span",{className:"text-[10px] font-bold uppercase tracking-wider",children:"Aktives Gehirn"})]}),s.gateway_reachable&&r.jsx("span",{className:"h-1.5 w-1.5 rounded-full bg-emerald-400 animate-pulse"})]}),r.jsx("div",{className:"text-[10px] font-mono font-medium truncate mt-0.5 text-foreground font-space",title:s.brain_model,children:s.brain_model||"auto"})]}),r.jsxs("div",{className:X("absolute z-10 w-44 py-1.5 px-3 -translate-y-1/2 -translate-x-1/2 rounded-xl border flex flex-col justify-center hover:border-primary/50 transition-all text-left shadow select-none",s.has_config?"border-emerald-500/50 bg-emerald-500/5 shadow-emerald-500/5":"border-border/60 bg-card/75"),style:{left:"85%",top:"70%"},onMouseEnter:()=>x("wiring"),onMouseLeave:()=>x(null),children:[r.jsxs("div",{className:"flex items-center justify-between",children:[r.jsxs("div",{className:"flex items-center gap-1 text-muted-foreground",children:[r.jsx(Ko,{className:"h-3 w-3 text-primary"}),r.jsx("span",{className:"text-[10px] font-bold uppercase tracking-wider",children:"Verdrahtung"})]}),s.has_config&&r.jsx("span",{className:"h-1.5 w-1.5 rounded-full bg-emerald-400 animate-pulse"})]}),r.jsxs("div",{className:"text-[9px] font-mono mt-0.5 text-muted-foreground flex gap-1 justify-between",children:[r.jsxs("span",{children:["Config: ",s.has_config?"✓":"—"]}),r.jsxs("span",{children:["Skills: ",s.has_skills?"✓":"—"]}),r.jsxs("span",{children:["Memory: ",s.has_memories?"✓":"—"]})]})]})]}),r.jsxs("div",{className:"flex flex-wrap items-center gap-6 mt-3 text-[10px] text-muted-foreground border-t border-border/20 pt-3",children:[r.jsxs("span",{className:"flex items-center gap-1.5",children:[r.jsx("span",{className:"h-2 w-2 rounded-full bg-cyan-400"}),r.jsx("span",{children:"Cyan-Fluss: Client-Anfrage an Agenten"})]}),r.jsxs("span",{className:"flex items-center gap-1.5",children:[r.jsx("span",{className:"h-2 w-2 rounded-full bg-emerald-500 animate-pulse"}),r.jsx("span",{children:"Grüner Puls: Verbindung hergestellt / Modul online"})]})]})]}),r.jsxs("div",{className:"rounded-2xl border border-border/60 bg-card/45 backdrop-blur-md p-6 space-y-4 shadow-lg shadow-black/10",children:[r.jsxs("div",{className:"flex items-center justify-between",children:[r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx(A0,{className:"h-5 w-5 text-primary"}),r.jsx("h3",{className:"text-sm font-bold uppercase tracking-wider text-foreground",children:"PC Verbindung"})]}),r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx("span",{className:X("h-2 w-2 rounded-full",s.pc_executor_reachable?"bg-emerald-500 animate-pulse":"bg-amber-500")}),r.jsx("span",{className:"text-xs font-semibold text-foreground",children:s.pc_executor_reachable?"Erreichbar":"Nicht verbunden"})]})]}),r.jsxs("div",{className:"grid gap-6 md:grid-cols-2 text-xs text-muted-foreground leading-relaxed text-left",children:[r.jsxs("div",{className:"space-y-3",children:[r.jsxs("p",{children:["Der ",r.jsx("strong",{className:"text-foreground",children:"Hermes PC Executor"})," läuft auf ",r.jsx("code",{className:"text-foreground font-mono px-1 py-0.5 rounded bg-muted/40 border border-border/30",children:"192.168.178.98:7777"})," und ermöglicht Hermes den direkten Zugriff auf deinen Windows-PC — Shell-Befehle, Screenshots, Tastatureingaben."]}),r.jsxs("p",{children:["Hermes erreicht den PC über den MCP-Server ",r.jsx("code",{className:"text-foreground font-mono px-1 py-0.5 rounded bg-muted/40 border border-border/30",children:"hermes-pc-control"}),", der automatisch beim Gateway-Start verbunden wird."]})]}),r.jsx("div",{className:"space-y-3",children:s.pc_executor_reachable?r.jsxs("div",{className:"p-3.5 bg-emerald-500/5 border border-emerald-500/20 rounded-xl space-y-1",children:[r.jsxs("div",{className:"text-emerald-400 font-semibold text-xs flex items-center gap-1.5",children:[r.jsx("span",{className:"h-1.5 w-1.5 rounded-full bg-emerald-500 animate-pulse"}),"PC Executor verbunden"]}),r.jsxs("p",{className:"text-[10px]",children:["Hermes kann jetzt per Telegram oder WebUI Befehle auf TobisNicerPC ausführen. Nutze ",r.jsx("code",{className:"text-foreground",children:"pc_shell"}),", ",r.jsx("code",{className:"text-foreground",children:"pc_screenshot"})," oder ",r.jsx("code",{className:"text-foreground",children:"pc_open"}),"."]})]}):r.jsxs("div",{className:"space-y-2",children:[r.jsx("h4",{className:"text-xs font-bold text-foreground",children:"PC Executor starten"}),r.jsxs("p",{children:["Starte ",r.jsx("code",{className:"text-foreground font-mono",children:"start.bat"})," im Ordner ",r.jsx("code",{className:"text-foreground font-mono",children:"client\\hermes-pc\\"})," auf dem Windows-PC und lasse das Fenster offen."]}),r.jsx("div",{className:"p-3 bg-background/25 rounded-xl border border-border/30 font-mono text-[9px] text-cyan-300",children:"client\\hermes-pc\\start.bat"})]})})]})]}),!s.gateway_reachable&&r.jsxs("div",{className:"rounded-2xl border border-border/60 bg-card/45 backdrop-blur-md p-6 space-y-4 shadow-lg shadow-black/10 text-left",children:[r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx(Us,{className:"h-5 w-5 text-amber-500"}),r.jsx("h3",{className:"text-sm font-bold uppercase tracking-wider text-foreground",children:"Hermes-Agent Diagnostics"})]}),r.jsxs("div",{className:"text-xs text-muted-foreground space-y-3 leading-relaxed",children:[r.jsx("p",{children:"Der Hermes-Dienst ist auf der Box derzeit offline oder kann sich nicht mit dem lokalen llama-swap verbinden."}),r.jsxs("p",{children:["Stelle sicher, dass die systemd-Dienste auf der Box laufen. Du kannst den Status im ",r.jsx("strong",{children:"OS & Updates Drawer"})," prüfen und die Dienste bei Bedarf neu starten."]}),r.jsxs("div",{className:"p-3.5 bg-background/25 rounded-xl border border-border/30 font-mono text-[10px] space-y-1",children:[r.jsx("div",{className:"text-muted-foreground/60",children:"# Dienste manuell auf der Box prüfen:"}),r.jsx("div",{className:"text-primary",children:"systemctl --user status hermes-gateway"}),r.jsx("div",{className:"text-primary",children:"systemctl --user status hermes-webui"})]}),r.jsxs("p",{children:["Weitere Einrichtungsdetails (Brain-Konfiguration, MCP-Kopplungen, SSH-Tunneling und Such-Engines) findest du in der Dokumentationsdatei:",r.jsx("code",{className:"ml-1 px-1.5 py-0.5 rounded bg-muted/40 text-foreground border border-border/30",children:"docs/HERMES_SETUP.md"}),"."]})]})]})]}),s&&b&&r.jsx("div",{className:"fixed inset-0 z-50 bg-black/60 backdrop-blur-sm flex items-center justify-center p-4",children:r.jsxs("div",{className:"w-full max-w-md 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:[r.jsxs("div",{className:"flex items-center justify-between border-b border-border/20 pb-2",children:[r.jsxs("h3",{className:"text-xs font-bold uppercase tracking-wider text-primary flex items-center gap-1.5",children:[r.jsx(Dt,{className:"h-4 w-4"}),r.jsx("span",{children:"Hermes-Gehirn konfigurieren"})]}),r.jsx("button",{onClick:()=>w(!1),className:"p-1 rounded hover:bg-accent text-muted-foreground hover:text-foreground cursor-pointer",children:r.jsx(jr,{className:"h-4 w-4"})})]}),r.jsxs("p",{className:"text-xs text-muted-foreground leading-relaxed",children:['Das „Gehirn" ist das primäre LLM für Hermes. Wähle ein Modell aus deiner Bibliothek oder nutze ein Gateway-Alias (',r.jsx("code",{className:"text-primary font-semibold",children:"auto"})," / ",r.jsx("code",{className:"text-primary font-semibold",children:"fast"})," / ",r.jsx("code",{className:"text-primary font-semibold",children:"heavy"}),"):"]}),r.jsx("div",{className:"space-y-1.5 max-h-60 overflow-y-auto pr-1",children:p.map(z=>{const $=["auto","fast","heavy"].includes(z);return r.jsxs("button",{onClick:()=>B(z),className:X("w-full text-left px-3 py-2.5 rounded-lg text-xs hover:bg-accent flex items-center justify-between font-mono cursor-pointer border border-border/30",s.brain_model===z||!s.brain_model&&z==="auto"?"text-primary font-bold bg-primary/10 border-primary/30":"text-foreground bg-background/20"),children:[r.jsxs("div",{className:"flex flex-col text-left",children:[r.jsx("span",{className:"font-semibold truncate max-w-[280px]",children:z}),r.jsx("span",{className:"text-[9px] text-muted-foreground mt-0.5",children:$?"Gateway Routing Alias":"Installiertes GGUF Modell"})]}),(s.brain_model===z||!s.brain_model&&z==="auto")&&r.jsx(ir,{className:"h-4 w-4 shrink-0 text-primary"})]},z)})})]})}),u]})}function a1(){const[s,o]=g.useState("connect"),[a,d]=g.useState("roocode"),[u,f]=g.useState(null),h="192.168.178.151",[p,v]=g.useState(!1),[x,b]=g.useState(null);function w(){v(!0),xe("/api/health").then(P=>{f(P),b(P.engine_reachable?"success":"partial")}).catch(()=>{f(null),b("fail")}).finally(()=>v(!1))}return g.useEffect(()=>{w()},[]),r.jsxs("div",{className:"space-y-6",children:[r.jsxs("div",{children:[r.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:"Stack-Anleitung & Vibe-Coding-Guide"}),r.jsx("p",{className:"text-sm text-muted-foreground",children:"Einsteigerfreundliche Erklärungen zu deinem Stack und Schritt-für-Schritt-Anleitungen zur Anbindung deiner Editoren."})]}),r.jsxs("div",{className:"flex gap-4 border-b border-border/40 pb-px",children:[r.jsx("button",{onClick:()=>o("connect"),className:X("pb-3 text-xs font-bold uppercase tracking-wider border-b-2 px-1 transition-all",s==="connect"?"border-primary text-primary":"border-transparent text-muted-foreground hover:text-foreground"),children:"Editor-Anbindung"}),r.jsx("button",{onClick:()=>o("concepts"),className:X("pb-3 text-xs font-bold uppercase tracking-wider border-b-2 px-1 transition-all",s==="concepts"?"border-primary text-primary":"border-transparent text-muted-foreground hover:text-foreground"),children:"KI-Wissensdatenbank (Juni 2026)"})]}),s==="connect"?r.jsxs(r.Fragment,{children:[r.jsxs("div",{className:"rounded-2xl border border-border/60 bg-card/45 backdrop-blur-md p-5 shadow-lg shadow-black/10 flex flex-col sm:flex-row justify-between sm:items-center gap-4",children:[r.jsxs("div",{className:"flex items-center gap-3",children:[r.jsx("span",{className:X("h-3 w-3 rounded-full ring-2 ring-black/40",x==="success"&&"bg-emerald-500 animate-pulse",x==="partial"&&"bg-amber-500",x==="fail"&&"bg-red-500",!x&&"bg-muted")}),r.jsxs("div",{children:[r.jsx("div",{className:"text-xs font-bold uppercase tracking-wider text-foreground",children:"Lokaler Verbindungs-Check"}),r.jsxs("div",{className:"text-[10px] text-muted-foreground mt-0.5 font-mono",children:[x==="success"&&`Erfolgreich! Dein PC hat Zugriff auf das Box-Gateway (v${(u==null?void 0:u.version)||""}).`,x==="partial"&&"Gateway erreichbar, aber die llama-cpp-Engine ist offline.",x==="fail"&&"Verbindung fehlgeschlagen. Ist die Box im selben LAN-Netzwerk?",!x&&"Verbindung wird geprüft..."]})]})]}),r.jsxs("button",{onClick:w,disabled:p,className:"h-8 px-3 flex items-center gap-1.5 text-xs font-semibold rounded-lg border border-border/60 bg-background/20 hover:border-primary/50 transition-colors disabled:opacity-50 cursor-pointer self-start sm:self-auto shrink-0",children:[r.jsx(In,{className:X("h-3.5 w-3.5",p&&"animate-spin")}),r.jsx("span",{children:"Testen"})]})]}),r.jsxs("div",{className:"space-y-3",children:[r.jsxs("div",{className:"flex items-center gap-2 px-1",children:[r.jsx(Mm,{className:"h-4.5 w-4.5 text-primary"}),r.jsx("h2",{className:"text-xs font-bold uppercase tracking-wider text-foreground",children:"Wie funktioniert mein Stack?"})]}),r.jsxs("div",{className:"grid gap-4 sm:grid-cols-3",children:[r.jsxs("div",{className:"p-4 rounded-xl border border-border/60 bg-card/20 space-y-2",children:[r.jsxs("div",{className:"flex items-center gap-1.5",children:[r.jsx(Dt,{className:"h-4 w-4 text-cyan-400"}),r.jsx("h3",{className:"text-xs font-bold text-foreground",children:"1. Die Zentrale"})]}),r.jsx("p",{className:"text-[11px] text-muted-foreground leading-relaxed",children:"Dein Dashboard. Hier siehst du die CPU-/RAM- und GPU-Last der Box und siehst sofort, ob Updates anstehen."})]}),r.jsxs("div",{className:"p-4 rounded-xl border border-border/60 bg-card/20 space-y-2",children:[r.jsxs("div",{className:"flex items-center gap-1.5",children:[r.jsx(Vo,{className:"h-4 w-4 text-violet-400"}),r.jsx("h3",{className:"text-xs font-bold text-foreground",children:"2. Modell-Zentrale"})]}),r.jsxs("p",{className:"text-[11px] text-muted-foreground leading-relaxed",children:["Deine GGUF-Datenbank. Gesteuert von ",r.jsx("strong",{children:"llama-swap"}),". Lädt dein schnelles Alltags-Hirn (`fast`) oder dein schweres Logik-Hirn (`heavy`) vollautomatisch im VRAM."]})]}),r.jsxs("div",{className:"p-4 rounded-xl border border-border/60 bg-card/20 space-y-2",children:[r.jsxs("div",{className:"flex items-center gap-1.5",children:[r.jsx(Go,{className:"h-4 w-4 text-indigo-400"}),r.jsx("h3",{className:"text-xs font-bold text-foreground",children:"3. Das Gedächtnis"})]}),r.jsx("p",{className:"text-[11px] text-muted-foreground leading-relaxed",children:"Dein geteiltes Langzeitgedächtnis (Memory-Pool). Hier merkt sich dein Agent Regeln, Projekt-Details und Vorlieben."})]})]})]}),r.jsxs("div",{className:"space-y-4",children:[r.jsxs("div",{className:"flex items-center gap-2 px-1",children:[r.jsx(ec,{className:"h-4.5 w-4.5 text-primary"}),r.jsx("h2",{className:"text-xs font-bold uppercase tracking-wider text-foreground",children:"Vibe Coding auf dem PC einrichten"})]}),r.jsxs("div",{className:"flex gap-1.5 bg-card/20 p-1 border border-border/40 rounded-xl max-w-fit",children:[r.jsxs("button",{onClick:()=>d("roocode"),className:X("rounded-lg px-4 py-1.5 text-xs font-semibold tracking-wide uppercase transition-all cursor-pointer flex items-center gap-1.5",a==="roocode"?"bg-primary text-primary-foreground shadow-md shadow-primary/10":"text-muted-foreground hover:text-foreground"),children:[r.jsx(Dm,{className:"h-3.5 w-3.5 fill-amber-400/20"}),"Roo Code (VS Code)"]}),r.jsx("button",{onClick:()=>d("cursor"),className:X("rounded-lg px-4 py-1.5 text-xs font-semibold tracking-wide uppercase transition-all cursor-pointer",a==="cursor"?"bg-primary text-primary-foreground shadow-md shadow-primary/10":"text-muted-foreground hover:text-foreground"),children:"Cursor IDE"}),r.jsx("button",{onClick:()=>d("opencode"),className:X("rounded-lg px-4 py-1.5 text-xs font-semibold tracking-wide uppercase transition-all cursor-pointer",a==="opencode"?"bg-primary text-primary-foreground shadow-md shadow-primary/10":"text-muted-foreground hover:text-foreground"),children:"OpenCode Desktop"})]}),r.jsxs("div",{className:"rounded-2xl border border-border/60 bg-card/45 backdrop-blur-md p-6 space-y-4 shadow-lg shadow-black/10",children:[a==="roocode"&&r.jsxs("div",{className:"space-y-4 text-xs leading-relaxed text-muted-foreground",children:[r.jsxs("div",{className:"space-y-1",children:[r.jsx("h3",{className:"text-sm font-bold text-foreground",children:"Roo Code Kopplung (Empfohlene Open-Source-Erweiterung)"}),r.jsx("p",{children:"Roo Code ist die beliebteste und flexibelste Vibe-Coding-Erweiterung für VS Code im Jahr 2026. Sie ermöglicht vollen Zugriff auf das Terminal und das MCP-Gedächtnis."})]}),r.jsxs("div",{className:"space-y-3.5 border-t border-border/20 pt-4",children:[r.jsxs("div",{className:"space-y-1",children:[r.jsxs("div",{className:"font-semibold text-foreground flex items-center gap-1.5",children:[r.jsx("span",{className:"h-4.5 w-4.5 rounded-full bg-primary/20 text-primary flex items-center justify-center font-mono text-[10px]",children:"1"}),"Roo Code installieren"]}),r.jsxs("p",{className:"pl-6",children:["Suche in VS Code nach der Erweiterung ",r.jsx("strong",{children:"Roo Code"})," und installiere sie."]})]}),r.jsxs("div",{className:"space-y-1",children:[r.jsxs("div",{className:"font-semibold text-foreground flex items-center gap-1.5",children:[r.jsx("span",{className:"h-4.5 w-4.5 rounded-full bg-primary/20 text-primary flex items-center justify-center font-mono text-[10px]",children:"2"}),"API-Anbindung konfigurieren"]}),r.jsx("p",{className:"pl-6",children:"Klicke auf das Roo-Code-Symbol in der Sidebar, öffne die Einstellungen (Zahnrad) und stelle folgendes ein:"}),r.jsx("div",{className:"pl-6 pt-1",children:r.jsxs("div",{className:"p-3 bg-background/25 rounded-xl border border-border/30 font-mono text-[10px] space-y-1 text-foreground",children:[r.jsxs("div",{children:[r.jsx("span",{className:"text-muted-foreground/60",children:"API Provider:"})," OpenAI Compatible"]}),r.jsxs("div",{children:[r.jsx("span",{className:"text-muted-foreground/60",children:"Base URL:"})," http://",h,":9001/v1"]}),r.jsxs("div",{children:[r.jsx("span",{className:"text-muted-foreground/60",children:"API Key:"})," ",r.jsx("span",{className:"italic text-muted-foreground/50",children:'beliebig (z.B. "local")'})]}),r.jsxs("div",{children:[r.jsx("span",{className:"text-muted-foreground/60",children:"Model ID:"})," auto"]})]})})]}),r.jsxs("div",{className:"space-y-1",children:[r.jsxs("div",{className:"font-semibold text-foreground flex items-center gap-1.5",children:[r.jsx("span",{className:"h-4.5 w-4.5 rounded-full bg-primary/20 text-primary flex items-center justify-center font-mono text-[10px]",children:"3"}),"MCP Gedächtnis verknüpfen (Optional, aber empfohlen)"]}),r.jsxs("p",{className:"pl-6",children:["Damit Roo Code auf deinen ",r.jsx("strong",{children:"Gedächtnis-Pool"})," zugreifen kann, kopiere die MCP-Konfiguration aus dem Reiter ",r.jsx("strong",{children:"Verbinden"})," und füge sie in deine lokale Roo-Code-Konfigurationsdatei ein."]})]})]})]}),a==="cursor"&&r.jsxs("div",{className:"space-y-4 text-xs leading-relaxed text-muted-foreground",children:[r.jsxs("div",{className:"space-y-1",children:[r.jsx("h3",{className:"text-sm font-bold text-foreground",children:"Cursor IDE Kopplung (Proprietäre All-in-One IDE)"}),r.jsx("p",{children:"Cursor ist ein polierter, extrem schneller VS-Code-Fork mit hervorragenden, tief integrierten Autovervollständigungen (Tab-Completions)."})]}),r.jsxs("div",{className:"space-y-3.5 border-t border-border/20 pt-4",children:[r.jsxs("div",{className:"space-y-1",children:[r.jsxs("div",{className:"font-semibold text-foreground flex items-center gap-1.5",children:[r.jsx("span",{className:"h-4.5 w-4.5 rounded-full bg-primary/20 text-primary flex items-center justify-center font-mono text-[10px]",children:"1"}),"Einstellungen öffnen"]}),r.jsxs("p",{className:"pl-6",children:["Öffne Cursor, klicke oben rechts auf das Zahnrad (Settings) und navigiere zu ",r.jsx("strong",{children:"Models"}),"."]})]}),r.jsxs("div",{className:"space-y-1",children:[r.jsxs("div",{className:"font-semibold text-foreground flex items-center gap-1.5",children:[r.jsx("span",{className:"h-4.5 w-4.5 rounded-full bg-primary/20 text-primary flex items-center justify-center font-mono text-[10px]",children:"2"}),"OpenAI API überschreiben"]}),r.jsxs("p",{className:"pl-6",children:["Deaktiviere die Standard-Cloudmodelle, klappe den Bereich ",r.jsx("strong",{children:"OpenAI API"})," auf und konfiguriere:"]}),r.jsx("div",{className:"pl-6 pt-1",children:r.jsxs("div",{className:"p-3 bg-background/25 rounded-xl border border-border/30 font-mono text-[10px] space-y-1 text-foreground",children:[r.jsxs("div",{children:[r.jsx("span",{className:"text-muted-foreground/60",children:"Override Base URL:"})," http://",h,":9001/v1"]}),r.jsxs("div",{children:[r.jsx("span",{className:"text-muted-foreground/60",children:"API Key:"})," ",r.jsx("span",{className:"italic text-muted-foreground/50",children:'beliebig (z.B. "local")'})]})]})})]}),r.jsxs("div",{className:"space-y-1",children:[r.jsxs("div",{className:"font-semibold text-foreground flex items-center gap-1.5",children:[r.jsx("span",{className:"h-4.5 w-4.5 rounded-full bg-primary/20 text-primary flex items-center justify-center font-mono text-[10px]",children:"3"}),"Modell hinzufügen"]}),r.jsxs("p",{className:"pl-6",children:["Trage in der Modell-Liste ein neues Modell mit dem Namen ",r.jsx("strong",{children:"auto"})," ein und wähle es als aktives Modell aus. Cursor leitet ab jetzt alle deine Anfragen an die Box weiter."]})]})]})]}),a==="opencode"&&r.jsxs("div",{className:"space-y-4 text-xs leading-relaxed text-muted-foreground",children:[r.jsxs("div",{className:"space-y-1",children:[r.jsx("h3",{className:"text-sm font-bold text-foreground",children:"OpenCode Desktop Kopplung (Open-Source Vibe-Coding-App)"}),r.jsx("p",{children:"OpenCode ist eine standalone Desktop-App für ein ablenkungsfreies Coden über natürliche Sprache. Es trennt den KI-Prozess von deinem Editor."})]}),r.jsxs("div",{className:"space-y-3.5 border-t border-border/20 pt-4",children:[r.jsxs("div",{className:"space-y-1",children:[r.jsxs("div",{className:"font-semibold text-foreground flex items-center gap-1.5",children:[r.jsx("span",{className:"h-4.5 w-4.5 rounded-full bg-primary/20 text-primary flex items-center justify-center font-mono text-[10px]",children:"1"}),"OpenCode Desktop herunterladen"]}),r.jsx("p",{className:"pl-6",children:"Lade die Desktop-Anwendung von der offiziellen Website (opencode.ai) herunter und starte sie."})]}),r.jsxs("div",{className:"space-y-1",children:[r.jsxs("div",{className:"font-semibold text-foreground flex items-center gap-1.5",children:[r.jsx("span",{className:"h-4.5 w-4.5 rounded-full bg-primary/20 text-primary flex items-center justify-center font-mono text-[10px]",children:"2"}),"Endpunkt auf Box-Gateway setzen"]}),r.jsx("p",{className:"pl-6",children:"Gehe in den Bereich Einstellungen ➔ Provider, deaktiviere die Cloud-Voreinstellungen und trage deinen lokalen Server ein:"}),r.jsx("div",{className:"pl-6 pt-1",children:r.jsxs("div",{className:"p-3 bg-background/25 rounded-xl border border-border/30 font-mono text-[10px] space-y-1 text-foreground",children:[r.jsxs("div",{children:[r.jsx("span",{className:"text-muted-foreground/60",children:"Base URL:"})," http://",h,":9001/v1"]}),r.jsxs("div",{children:[r.jsx("span",{className:"text-muted-foreground/60",children:"Model:"})," auto"]})]})})]}),r.jsxs("div",{className:"space-y-1",children:[r.jsxs("div",{className:"font-semibold text-foreground flex items-center gap-1.5",children:[r.jsx("span",{className:"h-4.5 w-4.5 rounded-full bg-primary/20 text-primary flex items-center justify-center font-mono text-[10px]",children:"3"}),"Erster Vibe-Coding Test"]}),r.jsx("p",{className:"pl-6",children:'Starte eine neue Session und teste die Verbindung mit einem einfachen Prompt, z. B. *"Erstelle ein einfaches Skript, das die Fibonaccizahlen berechnet"*. Das Box-Gateway tauscht das Modell im Hintergrund vollautomatisch aus.'})]})]})]})]})]}),r.jsxs("div",{className:"rounded-2xl border border-border/60 bg-card/45 backdrop-blur-md p-5 space-y-3 shadow-lg shadow-black/10",children:[r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx(Oa,{className:"h-4.5 w-4.5 text-primary"}),r.jsx("h3",{className:"text-xs font-bold uppercase tracking-wider text-foreground",children:"Was tun, wenn das Coden hakt?"})]}),r.jsxs("ul",{className:"text-[11px] text-muted-foreground space-y-2 list-disc pl-4 leading-relaxed",children:[r.jsxs("li",{children:[r.jsx("strong",{children:"Keine Verbindung?"})," Überprüfe im Live-Verbindungsprüfer oben, ob die Box-IP erreichbar ist. Stelle sicher, dass dein lokaler PC im selben WLAN/LAN-Netzwerk wie die Box eingeloggt ist."]}),r.jsxs("li",{children:[r.jsx("strong",{children:"Modell antwortet nicht?"})," Schaue unter ",r.jsx("strong",{children:"Diagnose"}),", ob der Dienst `llama-swap` aktiv (grün) is. Wenn nicht, klicke daneben auf ",r.jsx("strong",{children:"Restart"}),"."]}),r.jsxs("li",{children:[r.jsx("strong",{children:"Hermes Agent reagiert merkwürdig?"})," Starte in AnythingLLM einfach eine frische Session (neuen Chat). Ältere Chats sammeln Kontext-Müll an."]})]})]})]}):r.jsxs("div",{className:"space-y-6",children:[r.jsxs("div",{className:"rounded-2xl border border-border/60 bg-card/45 backdrop-blur-md p-5 shadow-lg shadow-black/10 flex items-start gap-4",children:[r.jsx(tc,{className:"h-8 w-8 text-primary shrink-0 mt-0.5"}),r.jsxs("div",{className:"space-y-1",children:[r.jsx("h3",{className:"text-xs font-bold uppercase tracking-wider text-foreground",children:"Entwickler-Guide: Modernes Agentic Coding (2026)"}),r.jsx("p",{className:"text-xs text-muted-foreground leading-normal",children:"Willkommen im Wissenszentrum für dein Mission Control 2 Setup. Hier erfährst du, wie die verschiedenen Technologien (MoE, MCP, Skills, Hermes) zusammenarbeiten und wie du das Maximum aus deinen AI-Prozessabläufen herausholst."})]})]}),r.jsxs("div",{className:"grid gap-6 md:grid-cols-2",children:[r.jsxs("div",{className:"rounded-2xl border border-border/60 bg-card/45 p-6 shadow-lg shadow-black/10 space-y-4",children:[r.jsxs("div",{className:"flex items-center gap-2 border-b border-border/20 pb-3",children:[r.jsx(Vo,{className:"h-5 w-5 text-cyan-400"}),r.jsxs("div",{children:[r.jsx("h3",{className:"text-xs font-bold uppercase tracking-wider text-foreground",children:"1. Mixture of Experts (MoE)"}),r.jsx("span",{className:"text-[9px] text-cyan-400 font-mono",children:"Effizienz durch Spezialisierung"})]})]}),r.jsxs("div",{className:"text-xs text-muted-foreground space-y-2 leading-normal",children:[r.jsxs("p",{children:[r.jsx("strong",{children:"Was ist das?"})," Bei traditionellen LLMs wird für jedes Wort das gesamte neuronale Netz aktiviert. Bei MoE besteht das Modell aus mehreren spezialisierten Teilnetzwerken (den ",r.jsx("em",{children:"Experts"}),"). Ein intelligenter ",r.jsx("em",{children:"Router"})," entscheidet pro Token (Wortteil), welche Experten zur Berechnung herangezogen werden."]}),r.jsxs("p",{children:[r.jsx("strong",{children:"Warum in MC2?"})," So können extrem leistungsstarke Modelle (wie DeepSeek-V3, Mixtral oder Command R+) mit wesentlich geringeren Hardwarekosten ausgeführt werden. Es wird nur ein Bruchteil der Parameter geladen und aktiv berechnet, was Speicherplatz spart und die Inferenz beschleunigt."]}),r.jsxs("div",{className:"p-3 bg-background/25 rounded-xl border border-border/30 font-mono text-[10px] text-foreground",children:[r.jsx("span",{className:"text-cyan-400",children:"Vorteil:"})," GPT-4-Klasse Performance bei einem Bruchteil der aktiven VRAM-Last auf deinem Homelab!"]})]})]}),r.jsxs("div",{className:"rounded-2xl border border-border/60 bg-card/45 p-6 shadow-lg shadow-black/10 space-y-4",children:[r.jsxs("div",{className:"flex items-center gap-2 border-b border-border/20 pb-3",children:[r.jsx(tc,{className:"h-5 w-5 text-violet-400"}),r.jsxs("div",{children:[r.jsx("h3",{className:"text-xs font-bold uppercase tracking-wider text-foreground",children:"2. Model Context Protocol (MCP)"}),r.jsx("span",{className:"text-[9px] text-violet-400 font-mono",children:"Standardisierte Agenten-Tools"})]})]}),r.jsxs("div",{className:"text-xs text-muted-foreground space-y-2 leading-normal",children:[r.jsxs("p",{children:[r.jsx("strong",{children:"Was ist das?"})," MCP ist ein offenes Protokoll (initiiert von Anthropic), das festlegt, wie ein KI-Client (z.B. Roo Code auf deinem PC) mit externen Datenquellen und Tools kommuniziert. Es funktioniert wie ein USB-Standard für KI."]}),r.jsxs("p",{children:[r.jsx("strong",{children:"Warum in MC2?"})," MCP trennt den AI-Kern von der Umgebung. Statt für jeden Editor eigene Tools zu schreiben, binden deine Agenten (Roo Code, Hermes) einfach MCP-Server an. Diese Server können Dateien lesen, Websuchen durchführen, Git bedienen oder mit deiner App interagieren."]}),r.jsxs("div",{className:"space-y-1.5 p-3 bg-background/25 rounded-xl border border-border/30 text-[10px]",children:[r.jsx("div",{className:"font-bold text-foreground",children:"Gute Quellen für MCP Server:"}),r.jsxs("ul",{className:"list-disc pl-4 space-y-1 text-muted-foreground",children:[r.jsxs("li",{children:[r.jsx("a",{href:"https://smithery.ai/",target:"_blank",rel:"noopener",className:"text-primary hover:underline font-semibold",children:"Smithery Registry"})," — Ein Portal zum Suchen und automatischen Installieren von MCP Servern."]}),r.jsxs("li",{children:[r.jsx("a",{href:"https://glama.ai/mcp/servers",target:"_blank",rel:"noopener",className:"text-primary hover:underline font-semibold",children:"Glama MCP Registry"})," — Eine kuratierte, umfangreiche Community-Datenbank von MCP Servern."]}),r.jsxs("li",{children:[r.jsx("a",{href:"https://github.com/modelcontextprotocol/servers",target:"_blank",rel:"noopener",className:"text-primary hover:underline font-semibold",children:"Offizielles Anthropic Repo"})," — Das offizielle Repository mit Standards wie filesystem, postgres, sqlite, brave-search und puppeteer."]})]})]})]})]}),r.jsxs("div",{className:"rounded-2xl border border-border/60 bg-card/45 p-6 shadow-lg shadow-black/10 space-y-4",children:[r.jsxs("div",{className:"flex items-center gap-2 border-b border-border/20 pb-3",children:[r.jsx(Go,{className:"h-5 w-5 text-emerald-400"}),r.jsxs("div",{children:[r.jsx("h3",{className:"text-xs font-bold uppercase tracking-wider text-foreground",children:"3. Agent Skills"}),r.jsx("span",{className:"text-[9px] text-emerald-400 font-mono",children:"Modulbasierte Fähigkeiten"})]})]}),r.jsxs("div",{className:"text-xs text-muted-foreground space-y-2 leading-normal",children:[r.jsxs("p",{children:[r.jsx("strong",{children:"Was ist das?"})," Ein Skill ist ein Verzeichnis mit standardisierten Anweisungen, Scripten und Beispielen, das deine Agenten für spezifische Aufgaben trainiert (z.B. Test-Driven Development, Code-Vereinfachung, API-Design)."]}),r.jsxs("p",{children:[r.jsx("strong",{children:"Wie benutzt man sie?"})," Lege einen Skill-Ordner unter ",r.jsx("code",{children:".agents/skills/"})," in deinem Projekt an. Das Herzstück ist die Datei ",r.jsx("code",{children:"SKILL.md"})," mit folgendem Aufbau:"]}),r.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: Drive development with strict TDD practices ---- -# Instructions -...`}),r.jsxs("div",{className:"space-y-1.5 p-3 bg-background/25 rounded-xl border border-border/30 text-[10px]",children:[r.jsx("div",{className:"font-bold text-foreground",children:"Wo gibt es Skills & wo liegen sie?"}),r.jsxs("ul",{className:"list-disc pl-4 space-y-2.5 text-muted-foreground",children:[r.jsxs("li",{children:[r.jsx("strong",{children:"skills.sh Registry & CLI:"})," Das offizielle offene Portal für Agent-Skills (",r.jsx("a",{href:"https://skills.sh/",target:"_blank",rel:"noopener",className:"text-primary hover:underline font-semibold",children:"skills.sh"}),"). Du kannst Skills direkt über das Terminal suchen und in deinem Projekt installieren:",r.jsxs("div",{className:"mt-1 font-mono text-[9px] bg-background/40 p-2 rounded border border-border/30 text-cyan-300",children:["# Nach Skills suchen:",r.jsx("br",{}),r.jsx("span",{className:"text-foreground",children:"npx skills find"}),r.jsx("br",{}),"# Skill zum aktuellen Projekt hinzufügen:",r.jsx("br",{}),r.jsx("span",{className:"text-foreground",children:"npx skills add [owner/repo]"})]})]}),r.jsxs("li",{children:[r.jsx("strong",{children:"Globaler Pfad:"})," ",r.jsx("code",{className:"text-foreground select-all",children:"C:\\Users\\TobisPC\\.gemini\\config\\plugins\\agent-skills\\skills\\"}),". Hier sind deine vorinstallierten, global verfügbaren Skills (wie ",r.jsx("i",{children:"code-simplification"}),", ",r.jsx("i",{children:"api-and-interface-design"}),", etc.) abgelegt."]}),r.jsxs("li",{children:[r.jsx("strong",{children:"Projekt-Pfad:"})," ",r.jsx("code",{className:"text-foreground select-all",children:".agents/skills/"}),". Lege diesen Ordner im Root eines beliebigen Projekts an. Dein lokaler Editor-Agent (z.B. Roo Code) liest ihn beim Starten automatisch ein."]}),r.jsxs("li",{children:[r.jsx("strong",{children:"Vorlagen / Beispiele:"})," Kopiere einfach bestehende Skills aus dem globalen Verzeichnis oder erstelle deine eigenen, indem du eine ",r.jsx("code",{children:"SKILL.md"})," mit YAML-Header (name, description) anlegst."]})]})]})]})]}),r.jsxs("div",{className:"rounded-2xl border border-border/60 bg-card/45 p-6 shadow-lg shadow-black/10 space-y-4",children:[r.jsxs("div",{className:"flex items-center gap-2 border-b border-border/20 pb-3",children:[r.jsx(Dt,{className:"h-5 w-5 text-indigo-400"}),r.jsxs("div",{children:[r.jsx("h3",{className:"text-xs font-bold uppercase tracking-wider text-foreground",children:"4. Arbeiten mit Hermes"}),r.jsx("span",{className:"text-[9px] text-indigo-400 font-mono",children:"Autonomer Box-Agent"})]})]}),r.jsxs("div",{className:"text-xs text-muted-foreground space-y-2 leading-normal",children:[r.jsxs("p",{children:[r.jsx("strong",{children:"Was ist das?"})," Hermes ist der auf der Box installierte, autonome Hintergrund-Agent. Er verwaltet das Dateisystem und kann über REST (Port 8642) oder eine interaktive ChatUI (Port 8787) gesteuert werden."]}),r.jsx("p",{children:r.jsx("strong",{children:"Best Practices für Hermes:"})}),r.jsxs("ul",{className:"list-disc pl-4 space-y-1",children:[r.jsxs("li",{children:[r.jsx("strong",{children:"Chat-Kontext sauber halten:"})," Starte regelmäßig neue Chats. Zu große Historien verlangsamen den Agenten und führen zu Halluzinationen."]}),r.jsxs("li",{children:[r.jsx("strong",{children:"Gehirn festlegen:"})," Konfiguriere im Gateway die Modell-Rolle ",r.jsx("code",{children:"brain"})," für Hermes, damit er automatisch das passende Modell per Llama Swap lädt."]}),r.jsxs("li",{children:[r.jsx("strong",{children:"Sandbox umgehen:"})," Erweitere Hermes' System-Prompt (AnythingLLM-Einstellungen), um Befehle über SSH an deinen Windows-PC zu leiten."]})]})]})]}),r.jsxs("div",{className:"rounded-2xl border border-border/60 bg-card/45 p-6 shadow-lg shadow-black/10 space-y-4 md:col-span-2",children:[r.jsxs("div",{className:"flex items-center gap-2 border-b border-border/20 pb-3",children:[r.jsx(Ko,{className:"h-5 w-5 text-amber-400"}),r.jsxs("div",{children:[r.jsx("h3",{className:"text-xs font-bold uppercase tracking-wider text-foreground",children:"5. Richtiges Arbeiten mit Tools (Dateien, Terminal, DevTools)"}),r.jsx("span",{className:"text-[9px] text-amber-400 font-mono",children:"Fehler vermeiden & Kosten senken"})]})]}),r.jsxs("div",{className:"grid md:grid-cols-3 gap-4 text-xs text-muted-foreground leading-normal",children:[r.jsxs("div",{className:"space-y-1.5 p-3 bg-background/10 rounded-xl border border-border/30",children:[r.jsxs("h4",{className:"font-bold text-foreground flex items-center gap-1",children:[r.jsx(Oa,{className:"h-3.5 w-3.5 text-primary"})," Terminal"]}),r.jsxs("p",{className:"text-[11px]",children:["Verwende nur non-interaktive Befehle. Hänge bei langen Tasks (wie dev-Servern) ein ",r.jsx("code",{children:"&"})," an oder nutze die integrierte Job-Verwaltung. Verwende niemals interaktive Eingabeaufforderungen."]})]}),r.jsxs("div",{className:"space-y-1.5 p-3 bg-background/10 rounded-xl border border-border/30",children:[r.jsxs("h4",{className:"font-bold text-foreground flex items-center gap-1",children:[r.jsx(ec,{className:"h-3.5 w-3.5 text-cyan-400"})," Dateimanager"]}),r.jsxs("p",{className:"text-[11px]",children:["Überschreibe keine ganzen Dateien, wenn du nur eine Zeile ändern willst. Verwende gezielte Ersetzungs-Tools (wie ",r.jsx("code",{children:"replace_file_content"}),"). Das spart massiv Token-Kosten und beugt Fehlern vor."]})]}),r.jsxs("div",{className:"space-y-1.5 p-3 bg-background/10 rounded-xl border border-border/30",children:[r.jsxs("h4",{className:"font-bold text-foreground flex items-center gap-1",children:[r.jsx(Ko,{className:"h-3.5 w-3.5 text-violet-400"})," Browser DevTools"]}),r.jsx("p",{className:"text-[11px]",children:"Koppele deine Debug-Dienste mit dem Chrome-DevTools-Plugin. So kann der Agent Fehler in der Konsole live analysieren und das DOM verifizieren, anstatt blind zu raten."})]})]})]}),r.jsxs("div",{className:"rounded-2xl border border-border/60 bg-card/45 p-6 shadow-lg shadow-black/10 space-y-4 md:col-span-2",children:[r.jsxs("div",{className:"flex items-center gap-2 border-b border-border/20 pb-3",children:[r.jsx(Us,{className:"h-5 w-5 text-emerald-400"}),r.jsxs("div",{children:[r.jsx("h3",{className:"text-xs font-bold uppercase tracking-wider text-foreground",children:"Wie autonom ist Mission Control 2 wirklich?"}),r.jsx("span",{className:"text-[9px] text-emerald-400 font-mono",children:"Die Grenze zwischen Automatisierung und Kontrolle"})]})]}),r.jsxs("div",{className:"text-xs text-muted-foreground space-y-3 leading-normal",children:[r.jsxs("p",{children:["Mission Control 2 ist als ",r.jsx("strong",{children:"semi-autonomes Gateway"})," konzipiert. Es besitzt die Fähigkeit, komplexe Workflows komplett selbstständig durchzuführen, unterliegt jedoch strikten Sicherheitsplanken:"]}),r.jsxs("div",{className:"grid sm:grid-cols-2 gap-4 pt-1",children:[r.jsxs("div",{className:"space-y-1.5",children:[r.jsxs("h4",{className:"font-bold text-foreground flex items-center gap-1 text-[11px]",children:[r.jsx(Pp,{className:"h-3 w-3 text-emerald-400"})," Was läuft vollautomatisch?"]}),r.jsxs("ul",{className:"list-disc pl-4 space-y-1 text-[11px]",children:[r.jsx("li",{children:"Modellaustausch (Routing) per llama-swap je nach Anfragetyp (z.B. Code vs. Reasoning)."}),r.jsx("li",{children:"Hintergrund-Synchronisation und Speicherung von Gedächtniseinträgen (Memory)."}),r.jsx("li",{children:"Modell-Installation und API-Key-Injektionen in Gateway-Verbindungen."})]})]}),r.jsxs("div",{className:"space-y-1.5",children:[r.jsxs("h4",{className:"font-bold text-foreground flex items-center gap-1 text-[11px]",children:[r.jsx(Pp,{className:"h-3 w-3 text-amber-400"})," Wo ist menschliche Freigabe nötig?"]}),r.jsxs("ul",{className:"list-disc pl-4 space-y-1 text-[11px]",children:[r.jsxs("li",{children:[r.jsx("strong",{children:"Systembefehle:"})," Das Ausführen von Terminal-Kommandos auf deinem PC erfordert standardmäßig deine Bestätigung."]}),r.jsxs("li",{children:[r.jsx("strong",{children:"Kritische Systemeingriffe:"})," OS-Updates, Engine-Rebuilds und Host-Reboots müssen manuell über das Dashboard ausgelöst werden."]}),r.jsxs("li",{children:[r.jsx("strong",{children:"Gedächtnis-Löschung:"})," Permanentes Verwerfen von gesammelten Memorys wird von dir freigegeben."]})]})]})]}),r.jsxs("p",{className:"text-[11px] bg-background/25 p-3 rounded-xl border border-border/30 mt-2",children:[r.jsx("strong",{children:"Fazit:"})," Der Stack erledigt die Kärrnerarbeit (Modelle tauschen, API-Adapter bereitstellen, Sandbox-Verbindungen herstellen) komplett im Hintergrund. Er agiert als dein persönlicher, treuer Copilot, ohne jemals ungefragt schädliche Operationen auf deinem Hauptsystem auszuführen."]})]})]})]})]})]})}function i1({title:s,hint:o}){return r.jsxs("div",{className:"space-y-4",children:[r.jsxs("div",{children:[r.jsx("h1",{className:"text-xl font-semibold",children:s}),r.jsx("p",{className:"text-sm text-muted-foreground",children:o})]}),r.jsxs("div",{className:"flex flex-col items-center justify-center gap-3 rounded-xl border border-dashed border-border bg-card/50 py-20 text-center",children:[r.jsx(_0,{className:"h-8 w-8 text-muted-foreground"}),r.jsx("div",{className:"text-sm text-muted-foreground",children:"Kommt in einer späteren Phase."})]})]})}const d1=[{id:"llama-swap",label:"Llama Swap",type:"system"},{id:"mission-control-2",label:"Mission Control 2",type:"user"},{id:"hermes-gateway",label:"Hermes Gateway",type:"user"},{id:"hermes-dashboard",label:"Hermes Dashboard",type:"user"},{id:"hermes-webui",label:"Hermes WebUI",type:"user"}];function Id(s){return s==null?"":s>1024**3?`${(s/1024**3).toFixed(2)} GB`:`${(s/1024**2).toFixed(1)} MB`}function c1({open:s,onClose:o,defaultTab:a="maintenance"}){const[d,u]=g.useState(null),[f,h]=g.useState([]),[p,v]=g.useState("llama-swap"),[x,b]=g.useState(""),[w,P]=g.useState(!1),[R,D]=g.useState(null),[E,k]=g.useState({}),[C,I]=g.useState("maintenance"),[B,z]=g.useState(!1),[$,L]=g.useState(null);function H(U,ge,xt){L({type:"alert",title:U,message:ge,onConfirm:()=>{L(null),xt&&xt()}})}function re(U,ge,xt){L({type:"confirm",title:U,message:ge,onConfirm:()=>{L(null),xt()},onCancel:()=>L(null)})}function le(U){return U?new Date(U*1e3).toLocaleString("de-DE",{day:"2-digit",month:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}):"Nie"}const[he,Q]=g.useState(""),[ne,Ne]=g.useState(""),[Ce,Oe]=g.useState(!1),[Te,_e]=g.useState(!1);g.useEffect(()=>{s&&(Q(localStorage.getItem("mc_sudo_password")||""),Ne(localStorage.getItem("mc_hf_token")||""))},[s]),g.useEffect(()=>{s&&a&&I(a)},[s,a]);const Y=g.useRef(null);function ce(){xe("/api/maintenance/updates").then(u).catch(U=>console.error("Error loading updates",U))}function J(){xe("/api/jobs").then(U=>h(U.jobs||[])).catch(U=>console.error("Error loading jobs",U))}function M(U){P(!0),D(null),xe(`/api/maintenance/logs?service=${U}&lines=150`).then(ge=>{ge.ok?b(ge.text):(b(`Fehler beim Laden der Logs: ${ge.err||"Unbekannter Fehler"}`),(ge.status==="incorrect_password"||ge.status==="password_required")&&D(ge.status))}).catch(ge=>b(`Fehler: ${ge.message}`)).finally(()=>{P(!1),setTimeout(()=>{Y.current&&(Y.current.scrollTop=Y.current.scrollHeight)},50)})}g.useEffect(()=>{if(!s)return;ce(),J();const U=setInterval(()=>{J(),ce()},3e3);return()=>clearInterval(U)},[s]),g.useEffect(()=>{!s||C!=="logs"||M(p)},[s,C,p]);async function S(){try{await xe("/api/maintenance/os-update",{method:"POST"}),J(),I("maintenance")}catch(U){H("Fehler",`Fehler beim Starten des OS-Updates: ${U.message}`)}}async function Z(){try{await xe("/api/maintenance/engine-update",{method:"POST"}),J(),I("maintenance")}catch(U){H("Fehler",`Fehler beim Engine-Update: ${U.message}`)}}async function ee(){z(!0);try{await xe("/api/maintenance/check-updates",{method:"POST"}),J(),I("maintenance")}catch(U){H("Fehler",`Fehler bei der Update-Suche: ${U.message}`)}finally{z(!1)}}async function W(U,ge){try{await xe("/api/models/install",{method:"POST",body:JSON.stringify({repo:U,role:ge})}),H("Gestartet",`Modell-Upgrade für '${ge}' (${U}) gestartet.`),J(),I("maintenance")}catch(xt){H("Fehler",`Fehler beim Starten des Modell-Upgrades: ${xt.message}`)}}async function ie(){re("Reboot bestätigen","Bist du sicher, dass du das gesamte Host-System neu starten willst?",async()=>{try{await xe("/api/maintenance/reboot",{method:"POST"}),H("Reboot","Reboot ausgelöst. System startet neu...",()=>{o()})}catch(U){H("Fehler",`Fehler beim Reboot: ${U.message}`)}})}async function pe(U){k(ge=>({...ge,[U]:!0}));try{const ge=await xe("/api/maintenance/restart",{method:"POST",body:JSON.stringify({service:U})});ge.ok?H("Dienst neu gestartet",`Dienst ${U} wurde erfolgreich neu gestartet.`,()=>{C==="logs"&&p===U&&M(U)}):H("Fehler",`Fehler beim Neustart: ${ge.err||"Unbekannter Fehler"}`)}catch(ge){H("Fehler",`Fehler beim Neustart: ${ge.message}`)}finally{k(ge=>({...ge,[U]:!1}))}}async function we(U){try{await xe(`/api/jobs/${U}/cancel`,{method:"POST"}),J()}catch(ge){H("Fehler",`Fehler beim Abbrechen: ${ge.message}`)}}return r.jsxs(r.Fragment,{children:[r.jsx("div",{className:X("fixed inset-0 bg-black/60 backdrop-blur-sm z-50 transition-opacity duration-300",s?"opacity-100 pointer-events-auto":"opacity-0 pointer-events-none"),onClick:o}),r.jsxs("div",{className:X("fixed inset-y-0 right-0 w-full sm:w-[500px] bg-card/85 backdrop-blur-xl border-l border-border/60 shadow-2xl z-50 flex flex-col transform transition-transform duration-300 ease-in-out font-sans text-foreground",s?"translate-x-0":"translate-x-full"),children:[r.jsxs("div",{className:"flex h-16 shrink-0 items-center justify-between border-b border-border/40 px-6",children:[r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx(Dt,{className:"h-4.5 w-4.5 text-primary"}),r.jsx("h2",{className:"text-sm font-semibold tracking-wide uppercase font-space",children:"OS-Zentrale & Pflege"})]}),r.jsx("button",{onClick:o,className:"flex h-8 w-8 items-center justify-center rounded-lg border border-border/40 text-muted-foreground hover:bg-accent transition-colors",children:r.jsx(jr,{className:"h-4 w-4"})})]}),r.jsxs("div",{className:"flex border-b border-border/40 px-6",children:[r.jsx("button",{onClick:()=>I("maintenance"),className:X("flex-1 py-3 text-xs font-semibold uppercase tracking-wider border-b-2 text-center transition-all",C==="maintenance"?"border-primary text-primary":"border-transparent text-muted-foreground hover:text-foreground"),children:"System-Wartung"}),r.jsx("button",{onClick:()=>I("logs"),className:X("flex-1 py-3 text-xs font-semibold uppercase tracking-wider border-b-2 text-center transition-all",C==="logs"?"border-primary text-primary":"border-transparent text-muted-foreground hover:text-foreground"),children:"System-Logs"}),r.jsx("button",{onClick:()=>I("settings"),className:X("flex-1 py-3 text-xs font-semibold uppercase tracking-wider border-b-2 text-center transition-all",C==="settings"?"border-primary text-primary":"border-transparent text-muted-foreground hover:text-foreground"),children:"Einstellungen"})]}),r.jsxs("div",{className:"flex-1 overflow-y-auto p-6 space-y-6",children:[C==="maintenance"&&r.jsxs(r.Fragment,{children:[r.jsxs("div",{className:"space-y-3",children:[r.jsxs("div",{className:"flex items-center justify-between",children:[r.jsx("h3",{className:"text-xs font-bold uppercase tracking-wider text-muted-foreground",children:"Wartungsaktionen"}),r.jsxs("div",{className:"flex items-center gap-2",children:[(d==null?void 0:d.last_check)&&r.jsxs("span",{className:"text-[9px] text-muted-foreground",children:["Zuletzt gesucht: ",le(d.last_check)]}),r.jsxs("button",{onClick:ee,disabled:B,className:"flex items-center gap-1 text-[10px] font-semibold text-primary hover:text-primary/80 transition-colors disabled:opacity-50",children:[r.jsx(In,{className:X("h-3 w-3",B&&"animate-spin")}),"Nach Updates suchen"]})]})]}),r.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[r.jsxs("button",{onClick:S,className:"flex flex-col items-start gap-1 p-4 rounded-xl border border-border/60 bg-background/20 hover:border-primary/50 transition-all text-left group",children:[r.jsx(Us,{className:"h-5 w-5 text-cyan-400 mb-1 group-hover:scale-105 transition-transform"}),r.jsx("span",{className:"text-xs font-semibold",children:"OS Update (apt)"}),r.jsx("span",{className:"text-[10px] text-muted-foreground",children:d!=null&&d.os?`${d.os} Updates verfügbar`:"Auf neuestem Stand"})]}),r.jsxs("button",{onClick:Z,className:"flex flex-col items-start gap-1 p-4 rounded-xl border border-border/60 bg-background/20 hover:border-primary/50 transition-all text-left group",children:[r.jsx($0,{className:"h-5 w-5 text-violet-400 mb-1 group-hover:scale-105 transition-transform"}),r.jsx("span",{className:"text-xs font-semibold",children:"Engine Update"}),r.jsx("span",{className:"text-[10px] text-muted-foreground",children:d!=null&&d.engine?"Update verfügbar":"Auf neuestem Stand"})]})]}),r.jsxs("button",{onClick:ie,className:"flex w-full items-center gap-3 p-3 rounded-xl border border-red-500/20 bg-red-500/5 hover:bg-red-500/10 text-red-400 transition-all text-left text-xs font-semibold",children:[r.jsx(Om,{className:"h-4.5 w-4.5"}),r.jsxs("div",{children:[r.jsx("div",{children:"Host-System neu starten (Reboot)"}),r.jsx("div",{className:"text-[10px] text-red-400/80 font-normal",children:"Startet das gesamte Betriebssystem des Homelabs neu"})]})]})]}),(d==null?void 0:d.model_list)&&d.model_list.length>0&&r.jsxs("div",{className:"space-y-3",children:[r.jsxs("div",{className:"flex items-center justify-between",children:[r.jsx("h3",{className:"text-xs font-bold uppercase tracking-wider text-muted-foreground",children:"Verfügbare Modell-Upgrades"}),(d==null?void 0:d.last_check)&&r.jsxs("span",{className:"text-[9px] text-muted-foreground",children:["Gesucht: ",le(d.last_check)]})]}),r.jsx("div",{className:"space-y-2",children:d.model_list.map(U=>r.jsx("div",{className:"p-3 rounded-xl border border-border/60 bg-background/20 flex flex-col gap-2",children:r.jsxs("div",{className:"flex items-start justify-between gap-3",children:[r.jsxs("div",{children:[r.jsx("div",{className:"text-xs font-semibold",children:U.title}),r.jsx("div",{className:"text-[10px] font-mono text-muted-foreground",children:U.repo}),r.jsxs("div",{className:"text-[10px] text-primary font-semibold uppercase mt-0.5",children:["Rolle: ",U.role]})]}),r.jsxs("button",{onClick:()=>W(U.repo,U.role),className:"flex items-center gap-1.5 text-[10px] font-semibold text-emerald-400 hover:text-emerald-300 border border-emerald-500/20 bg-emerald-500/5 hover:bg-emerald-500/10 px-2 py-1 rounded-lg transition-colors shrink-0",children:[r.jsx(an,{className:"h-3.5 w-3.5"}),"Upgrade"]})]})},U.role))})]}),r.jsxs("div",{className:"space-y-3",children:[r.jsxs("div",{className:"flex items-center justify-between",children:[r.jsx("h3",{className:"text-xs font-bold uppercase tracking-wider text-muted-foreground",children:"Hintergrund-Aufgaben"}),r.jsxs("span",{className:"text-[10px] font-mono bg-primary/10 text-primary px-1.5 py-0.5 rounded-full",children:[f.filter(U=>U.state==="running"||U.state==="queued").length," Aktiv"]})]}),r.jsx("div",{className:"space-y-3",children:f.length===0?r.jsx("div",{className:"text-xs text-muted-foreground border border-dashed border-border/60 rounded-xl p-6 text-center",children:"Aktuell keine aktiven Hintergrund-Jobs."}):f.map(U=>{const ge=U.state==="running"||U.state==="queued";return r.jsxs("div",{className:X("p-3 rounded-xl border transition-all duration-300",ge?"border-primary/40 bg-primary/5 shadow-md shadow-primary/5":"border-border/40 bg-background/20 opacity-80"),children:[r.jsxs("div",{className:"flex items-start justify-between gap-3",children:[r.jsxs("div",{className:"space-y-1",children:[r.jsxs("div",{className:"text-xs font-semibold flex items-center gap-1.5",children:[ge&&r.jsxs("span",{className:"flex h-2 w-2 relative",children:[r.jsx("span",{className:"animate-ping absolute inline-flex h-full w-full rounded-full bg-primary opacity-75"}),r.jsx("span",{className:"relative inline-flex rounded-full h-2 w-2 bg-primary"})]}),U.label]}),r.jsxs("div",{className:"text-[10px] font-mono text-muted-foreground uppercase flex items-center gap-2",children:[r.jsxs("span",{children:["ID: ",U.id]}),r.jsx("span",{children:"•"}),r.jsx("span",{className:X(U.state==="done"&&"text-emerald-400",U.state==="failed"&&"text-red-400",U.state==="running"&&"text-primary",U.state==="queued"&&"text-amber-400",U.state==="canceled"&&"text-muted-foreground"),children:U.state})]})]}),ge&&r.jsx("button",{onClick:()=>we(U.id),className:"text-[10px] font-semibold text-red-400 hover:text-red-300 border border-red-500/20 bg-red-500/5 hover:bg-red-500/10 px-2 py-0.5 rounded transition-colors",children:"Abbrechen"})]}),U.state==="running"&&r.jsxs("div",{className:"mt-3 space-y-1",children:[r.jsx("div",{className:"w-full h-1.5 bg-muted rounded-full overflow-hidden",children:r.jsx("div",{className:"h-full bg-primary transition-all duration-500",style:{width:`${U.progress??0}%`}})}),r.jsxs("div",{className:"flex justify-between items-center text-[9px] font-mono text-muted-foreground",children:[r.jsxs("span",{children:[U.progress??0,"%"]}),U.done_bytes!=null&&U.total_bytes!=null&&r.jsxs("span",{children:[Id(U.done_bytes)," / ",Id(U.total_bytes),U.rate_bps!=null&&` (${Id(U.rate_bps)}/s)`]}),U.eta_s!=null&&r.jsxs("span",{children:["ETA: ",U.eta_s,"s"]})]})]})]},U.id)})})]})]}),C==="logs"&&r.jsxs("div",{className:"flex flex-col h-full space-y-4",children:[r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx("select",{value:p,onChange:U=>v(U.target.value),className:"flex-1 h-9 px-3 text-xs bg-background/40 border border-border/60 rounded-lg outline-none text-foreground font-semibold",children:d1.map(U=>r.jsxs("option",{value:U.id,children:[U.label," (",U.type==="system"?"systemd-root":"user",")"]},U.id))}),r.jsxs("button",{onClick:()=>pe(p),disabled:E[p],className:"flex h-9 px-3 items-center gap-1.5 text-xs font-semibold rounded-lg border border-border/60 bg-background/20 hover:border-primary/50 transition-colors disabled:opacity-50",title:"Dienst neu starten",children:[r.jsx(In,{className:X("h-3.5 w-3.5",E[p]&&"animate-spin")}),"Restart"]})]}),r.jsxs("div",{className:"flex-1 flex flex-col min-h-[300px] border border-border/60 bg-black/50 rounded-xl overflow-hidden shadow-inner",children:[r.jsxs("div",{className:"flex h-9 items-center justify-between px-4 border-b border-border/40 bg-black/30 shrink-0",children:[r.jsxs("div",{className:"flex items-center gap-1.5 text-[10px] font-mono text-muted-foreground",children:[r.jsx(Oa,{className:"h-3 w-3 text-primary"}),r.jsxs("span",{children:["stdout/stderr - ",p]})]}),r.jsx("button",{onClick:()=>M(p),disabled:w,className:"text-muted-foreground hover:text-foreground transition-colors",children:r.jsx(In,{className:X("h-3 w-3",w&&"animate-spin")})})]}),r.jsx("pre",{ref:Y,className:"flex-1 p-4 overflow-y-auto text-[10px] font-mono text-cyan-300/90 whitespace-pre-wrap select-text leading-relaxed scrollbar-thin",children:R==="password_required"||R==="incorrect_password"?r.jsxs("div",{className:"flex flex-col items-center justify-center p-6 text-center h-full space-y-3",children:[r.jsx(Wo,{className:"h-8 w-8 text-amber-400 animate-pulse animate-duration-1000"}),r.jsx("div",{className:"text-xs font-semibold text-amber-300",children:R==="incorrect_password"?"Falsches Sudo-Passwort hinterlegt.":"Sudo-Passwort für systemd-Dienste erforderlich."}),r.jsxs("p",{className:"text-[10px] text-muted-foreground max-w-xs leading-normal",children:["Für das Auslesen der systemd-Logs von ",p," werden Root-Rechte benötigt. Hinterlege dein Passwort in den Einstellungen."]}),r.jsx("button",{onClick:()=>I("settings"),className:"px-3 py-1.5 text-[10px] font-semibold text-primary-foreground bg-primary hover:bg-primary/95 rounded-md transition-colors mt-2",children:"Sudo-Passwort eintragen"})]}):w&&!x?r.jsx("span",{className:"text-muted-foreground",children:"Lade Logs..."}):x||r.jsx("span",{className:"text-muted-foreground",children:"Keine Logeinträge vorhanden."})})]})]}),C==="settings"&&r.jsxs("div",{className:"space-y-6",children:[r.jsxs("div",{className:"space-y-2",children:[r.jsx("h3",{className:"text-xs font-bold uppercase tracking-wider text-muted-foreground",children:"Zugangsdaten & Schlüssel"}),r.jsx("p",{className:"text-[10px] text-muted-foreground leading-normal",children:"Diese Daten werden ausschließlich lokal in deinem Browser (localStorage) gespeichert und bei Bedarf an das Backend übertragen."})]}),r.jsxs("div",{className:"space-y-2",children:[r.jsxs("label",{className:"text-xs font-semibold flex items-center gap-1.5",children:[r.jsx(Us,{className:"h-4 w-4 text-amber-400"}),"Host Sudo-Passwort"]}),r.jsxs("div",{className:"relative",children:[r.jsx("input",{type:Ce?"text":"password",value:he,onChange:U=>Q(U.target.value),placeholder:"Sudo-Passwort für System-Operationen",className:"w-full h-10 pl-3 pr-10 text-xs bg-background/40 border border-border/60 rounded-lg outline-none focus:border-primary transition-colors text-foreground"}),r.jsx("button",{type:"button",onClick:()=>Oe(!Ce),className:"absolute inset-y-0 right-0 flex items-center pr-3 text-muted-foreground hover:text-foreground transition-colors",children:Ce?r.jsx(Rp,{className:"h-4 w-4"}):r.jsx(rc,{className:"h-4 w-4"})})]}),r.jsx("p",{className:"text-[9px] text-muted-foreground leading-normal",children:"Wird benötigt für systemd-Dienste (Llama Swap logs/restart), OS-Update (apt) und Reboot."})]}),r.jsxs("div",{className:"space-y-2",children:[r.jsxs("label",{className:"text-xs font-semibold flex items-center gap-1.5",children:[r.jsx(O0,{className:"h-4 w-4 text-violet-400"}),"HuggingFace API Token"]}),r.jsxs("div",{className:"relative",children:[r.jsx("input",{type:Te?"text":"password",value:ne,onChange:U=>Ne(U.target.value),placeholder:"hf_...",className:"w-full h-10 pl-3 pr-10 text-xs bg-background/40 border border-border/60 rounded-lg outline-none focus:border-primary transition-colors text-foreground"}),r.jsx("button",{type:"button",onClick:()=>_e(!Te),className:"absolute inset-y-0 right-0 flex items-center pr-3 text-muted-foreground hover:text-foreground transition-colors",children:Te?r.jsx(Rp,{className:"h-4 w-4"}):r.jsx(rc,{className:"h-4 w-4"})})]}),r.jsx("p",{className:"text-[9px] text-muted-foreground leading-normal",children:"Erlaubt das Herunterladen von geschützten oder Gate-restricted Modellen direkt über Mission Control."})]}),r.jsxs("div",{className:"flex gap-3 pt-2",children:[r.jsx("button",{onClick:()=>{localStorage.setItem("mc_sudo_password",he),localStorage.setItem("mc_hf_token",ne),H("Erfolgreich","Einstellungen erfolgreich lokal gespeichert.")},className:"flex-1 h-9 flex items-center justify-center text-xs font-semibold text-primary-foreground bg-primary hover:bg-primary/90 rounded-lg transition-colors shadow shadow-primary/10 cursor-pointer",children:"Speichern"}),r.jsx("button",{onClick:()=>{Q(""),Ne(""),localStorage.removeItem("mc_sudo_password"),localStorage.removeItem("mc_hf_token"),H("Gelöscht","Zugangsdaten gelöscht.")},className:"h-9 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:"Zurücksetzen"})]})]})]})]}),$&&r.jsx(Eh,{type:$.type,title:$.title,message:$.message,onConfirm:$.onConfirm,onCancel:$.onCancel})]})}function u1(){var w,P,R,D,E;const[s,o]=g.useState("dashboard"),[a,d]=g.useState(()=>localStorage.getItem("mc_sidebar_collapsed")==="true"),[u,f]=g.useState(!1),[h,p]=g.useState("maintenance"),{data:v}=Xy(),{data:x}=Fa(2e4);g.useEffect(()=>{document.documentElement.classList.add("dark")},[]),g.useEffect(()=>{const k=C=>{var B;p(((B=C.detail)==null?void 0:B.tab)||"maintenance"),f(!0)};return window.addEventListener("open-system-drawer",k),()=>window.removeEventListener("open-system-drawer",k)},[]);const b=sc.find(k=>k.id===s);return r.jsxs("div",{className:"flex h-full relative",children:[r.jsxs("div",{className:"fixed inset-0 -z-50 pointer-events-none overflow-hidden bg-[hsl(224,30%,6%)]",children:[r.jsx("div",{className:"absolute inset-0 opacity-35 animate-aurora bg-gradient-to-tr from-teal-500/20 via-indigo-500/15 to-purple-500/20 blur-[130px]"}),r.jsx("div",{className:"absolute top-[-10%] left-[-10%] h-[50%] w-[50%] rounded-full bg-teal-500/15 blur-[160px]"}),r.jsx("div",{className:"absolute bottom-[-10%] right-[-10%] h-[50%] w-[50%] rounded-full bg-purple-500/15 blur-[160px]"}),r.jsx("div",{className:"absolute top-[30%] right-[20%] h-[40%] w-[40%] rounded-full bg-indigo-500/10 blur-[140px]"})]}),r.jsx(Jy,{onNavigate:o}),r.jsx(c1,{open:u,onClose:()=>f(!1),defaultTab:h}),r.jsxs("aside",{className:X("flex shrink-0 flex-col border-r border-border/40 bg-card/45 backdrop-blur-md transition-all duration-300 ease-in-out",a?"w-16":"w-60"),children:[r.jsxs("div",{className:X("flex items-center py-4 border-b border-border/40 shrink-0",a?"flex-col gap-3 px-2":"justify-between px-5"),children:[r.jsxs("div",{className:"flex items-center gap-2 overflow-hidden",children:[r.jsx("div",{className:"h-7 w-7 rounded-lg bg-primary shadow-md shadow-primary/20 shrink-0"}),!a&&r.jsxs("div",{className:"leading-tight",children:[r.jsx("div",{className:"text-sm font-semibold tracking-wide font-space",children:"Mission Control"}),r.jsx("div",{className:"text-xs text-muted-foreground",children:"2.0"})]})]}),r.jsx("button",{onClick:()=>{d(k=>{const C=!k;return localStorage.setItem("mc_sidebar_collapsed",C.toString()),C})},className:"p-1 rounded-md hover:bg-accent text-muted-foreground transition-colors cursor-pointer",title:a?"Maximieren":"Minimieren",children:a?r.jsx(j0,{className:"h-4 w-4"}):r.jsx(w0,{className:"h-4 w-4"})})]}),r.jsx("nav",{className:"flex-1 space-y-1 px-3 py-4 overflow-y-auto",children:sc.map(k=>r.jsxs("button",{onClick:()=>o(k.id),className:X("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",s===k.id?"bg-primary/15 text-primary shadow-sm shadow-primary/5":"text-muted-foreground hover:bg-accent hover:text-accent-foreground"),title:a?k.label:void 0,children:[r.jsx(k.icon,{className:"h-4.5 w-4.5 shrink-0"}),!a&&r.jsx("span",{className:"truncate",children:k.label})]},k.id))}),r.jsx("div",{className:X("py-3 text-xs text-muted-foreground border-t border-border/40 shrink-0",a?"px-2 text-center":"px-5"),children:a?r.jsx("div",{className:"flex justify-center",children:r.jsx("span",{className:X("h-2.5 w-2.5 rounded-full ring-2 ring-black/40",v?v.engine_reachable?"bg-emerald-500 animate-pulse":"bg-amber-500":"bg-red-500"),title:v?`Engine ${v.engine_reachable?"online":"offline"}`:"Backend offline"})}):r.jsxs("div",{className:"space-y-2 text-left",children:[v?r.jsxs("span",{className:"flex items-center gap-2",children:[r.jsx("span",{className:X("h-2 w-2 rounded-full animate-pulse",v.engine_reachable?"bg-emerald-500":"bg-amber-500")}),r.jsxs("span",{className:"truncate",children:["Engine ",v.engine_reachable?"online":"offline"]})]}):r.jsxs("span",{className:"flex items-center gap-2",children:[r.jsx("span",{className:"h-2 w-2 rounded-full bg-red-500"})," ",r.jsx("span",{className:"truncate",children:"Backend offline"})]}),(x==null?void 0:x.versions)&&r.jsxs("div",{className:"space-y-1 text-[9px] text-muted-foreground/60 mt-2 pt-2 border-t border-border/30",children:[r.jsxs("div",{className:"truncate",title:x.versions.mc2?`${x.versions.mc2.branch}-${x.versions.mc2.hash}${x.versions.mc2.dirty?"*":""} (${x.versions.mc2.date})`:"nicht gefunden",children:[r.jsx("strong",{children:"MC2:"})," ",x.versions.mc2?`${x.versions.mc2.hash}${x.versions.mc2.dirty?"*":""}`:"—"]}),r.jsxs("div",{className:"truncate",title:((w=x.versions.engine)==null?void 0:w.type)==="git"?`${x.versions.engine.branch}-${x.versions.engine.hash}${x.versions.engine.dirty?"*":""} (${x.versions.engine.date})`:((P=x.versions.engine)==null?void 0:P.version_text)||"unbekannt",children:[r.jsx("strong",{children:"Engine:"})," ",((R=x.versions.engine)==null?void 0:R.type)==="git"?`${x.versions.engine.hash}${x.versions.engine.dirty?"*":""}`:((E=(D=x.versions.engine)==null?void 0:D.version_text)==null?void 0:E.split(" ").pop())||"—"]}),r.jsxs("div",{className:"truncate",title:x.versions.hermes_ui?`${x.versions.hermes_ui.branch}-${x.versions.hermes_ui.hash}${x.versions.hermes_ui.dirty?"*":""} (${x.versions.hermes_ui.date})`:"nicht gefunden",children:[r.jsx("strong",{children:"Hermes UI:"})," ",x.versions.hermes_ui?`${x.versions.hermes_ui.hash}${x.versions.hermes_ui.dirty?"*":""}`:"—"]}),r.jsxs("div",{className:"truncate",title:x.versions.hermes_agent?`${x.versions.hermes_agent.branch}-${x.versions.hermes_agent.hash}${x.versions.hermes_agent.dirty?"*":""} (${x.versions.hermes_agent.date})`:"nicht gefunden",children:[r.jsx("strong",{children:"Hermes Agent:"})," ",x.versions.hermes_agent?`${x.versions.hermes_agent.hash}${x.versions.hermes_agent.dirty?"*":""}`:"—"]})]})]})})]}),r.jsxs("div",{className:"flex min-w-0 flex-1 flex-col",children:[r.jsxs("header",{className:"flex h-14 shrink-0 items-center justify-between border-b border-border/40 px-6 bg-card/20 backdrop-blur-sm",children:[r.jsx("div",{className:"text-xs font-medium text-muted-foreground tracking-wide uppercase font-sans",children:b.hint}),r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx("a",{href:"https://git.tobisniceshomelab.ddnsfree.com/Hitonabi/mission-control-v2/src/branch/main/docs/BEDIENUNG.md",target:"_blank",rel:"noopener",className:"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"}),r.jsxs("button",{onClick:()=>{const k=new KeyboardEvent("keydown",{key:"k",metaKey:!0});document.dispatchEvent(k)},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:[r.jsx(E0,{className:"h-3.5 w-3.5"}),r.jsx("span",{children:"Suchen"}),r.jsx("kbd",{className:"rounded bg-muted px-1.5 py-0.5 font-mono text-[9px]",children:"⌘K"})]})]})]}),r.jsxs("main",{className:"flex-1 overflow-y-auto p-6 scrollbar-thin",children:[s==="dashboard"&&r.jsx(Qb,{}),s==="models"&&r.jsx(t1,{}),s==="system"&&r.jsx(r1,{}),s==="connect"&&r.jsx(n1,{}),s==="memory"&&r.jsx(o1,{}),s==="agent"&&r.jsx(l1,{}),s==="guide"&&r.jsx(a1,{}),!["dashboard","models","system","connect","memory","agent","guide"].includes(s)&&r.jsx(i1,{title:b.label,hint:b.hint})]})]})]})}const f1=new n0({defaultOptions:{queries:{retry:1,refetchOnWindowFocus:!1,staleTime:5e3}}});Rg.createRoot(document.getElementById("root")).render(r.jsx(mm.StrictMode,{children:r.jsx(s0,{client:f1,children:r.jsx(u1,{})})})); diff --git a/frontend/dist/assets/index-DGRyEXwM.js b/frontend/dist/assets/index-DGRyEXwM.js new file mode 100644 index 0000000..1df714f --- /dev/null +++ b/frontend/dist/assets/index-DGRyEXwM.js @@ -0,0 +1,397 @@ +var cp=s=>{throw TypeError(s)};var jd=(s,o,a)=>o.has(s)||cp("Cannot "+a);var N=(s,o,a)=>(jd(s,o,"read from private field"),a?a.call(s):o.get(s)),be=(s,o,a)=>o.has(s)?cp("Cannot add the same private member more than once"):o instanceof WeakSet?o.add(s):o.set(s,a),se=(s,o,a,d)=>(jd(s,o,"write to private field"),d?d.call(s,a):o.set(s,a),a),Me=(s,o,a)=>(jd(s,o,"access private method"),a);var ma=(s,o,a,d)=>({set _(u){se(s,o,u,a)},get _(){return N(s,o,d)}});function jg(s,o){for(var a=0;ad[u]})}}}return Object.freeze(Object.defineProperty(s,Symbol.toStringTag,{value:"Module"}))}(function(){const o=document.createElement("link").relList;if(o&&o.supports&&o.supports("modulepreload"))return;for(const u of document.querySelectorAll('link[rel="modulepreload"]'))d(u);new MutationObserver(u=>{for(const f of u)if(f.type==="childList")for(const h of f.addedNodes)h.tagName==="LINK"&&h.rel==="modulepreload"&&d(h)}).observe(document,{childList:!0,subtree:!0});function a(u){const f={};return u.integrity&&(f.integrity=u.integrity),u.referrerPolicy&&(f.referrerPolicy=u.referrerPolicy),u.crossOrigin==="use-credentials"?f.credentials="include":u.crossOrigin==="anonymous"?f.credentials="omit":f.credentials="same-origin",f}function d(u){if(u.ep)return;u.ep=!0;const f=a(u);fetch(u.href,f)}})();function pm(s){return s&&s.__esModule&&Object.prototype.hasOwnProperty.call(s,"default")?s.default:s}var kd={exports:{}},To={},Nd={exports:{}},Ce={};/** + * @license React + * react.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var up;function kg(){if(up)return Ce;up=1;var s=Symbol.for("react.element"),o=Symbol.for("react.portal"),a=Symbol.for("react.fragment"),d=Symbol.for("react.strict_mode"),u=Symbol.for("react.profiler"),f=Symbol.for("react.provider"),h=Symbol.for("react.context"),p=Symbol.for("react.forward_ref"),v=Symbol.for("react.suspense"),x=Symbol.for("react.memo"),b=Symbol.for("react.lazy"),w=Symbol.iterator;function P(M){return M===null||typeof M!="object"?null:(M=w&&M[w]||M["@@iterator"],typeof M=="function"?M:null)}var R={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},O=Object.assign,E={};function k(M,S,Z){this.props=M,this.context=S,this.refs=E,this.updater=Z||R}k.prototype.isReactComponent={},k.prototype.setState=function(M,S){if(typeof M!="object"&&typeof M!="function"&&M!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,M,S,"setState")},k.prototype.forceUpdate=function(M){this.updater.enqueueForceUpdate(this,M,"forceUpdate")};function C(){}C.prototype=k.prototype;function I(M,S,Z){this.props=M,this.context=S,this.refs=E,this.updater=Z||R}var B=I.prototype=new C;B.constructor=I,O(B,k.prototype),B.isPureReactComponent=!0;var z=Array.isArray,$=Object.prototype.hasOwnProperty,L={current:null},H={key:!0,ref:!0,__self:!0,__source:!0};function re(M,S,Z){var ee,K={},ae=null,fe=null;if(S!=null)for(ee in S.ref!==void 0&&(fe=S.ref),S.key!==void 0&&(ae=""+S.key),S)$.call(S,ee)&&!H.hasOwnProperty(ee)&&(K[ee]=S[ee]);var je=arguments.length-2;if(je===1)K.children=Z;else if(1>>1,S=Y[M];if(0>>1;Mu(K,J))aeu(fe,K)?(Y[M]=fe,Y[ae]=J,M=ae):(Y[M]=K,Y[ee]=J,M=ee);else if(aeu(fe,J))Y[M]=fe,Y[ae]=J,M=ae;else break e}}return de}function u(Y,de){var J=Y.sortIndex-de.sortIndex;return J!==0?J:Y.id-de.id}if(typeof performance=="object"&&typeof performance.now=="function"){var f=performance;s.unstable_now=function(){return f.now()}}else{var h=Date,p=h.now();s.unstable_now=function(){return h.now()-p}}var v=[],x=[],b=1,w=null,P=3,R=!1,O=!1,E=!1,k=typeof setTimeout=="function"?setTimeout:null,C=typeof clearTimeout=="function"?clearTimeout:null,I=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function B(Y){for(var de=a(x);de!==null;){if(de.callback===null)d(x);else if(de.startTime<=Y)d(x),de.sortIndex=de.expirationTime,o(v,de);else break;de=a(x)}}function z(Y){if(E=!1,B(Y),!O)if(a(v)!==null)O=!0,Te($);else{var de=a(x);de!==null&&_e(z,de.startTime-Y)}}function $(Y,de){O=!1,E&&(E=!1,C(re),re=-1),R=!0;var J=P;try{for(B(de),w=a(v);w!==null&&(!(w.expirationTime>de)||Y&&!xe());){var M=w.callback;if(typeof M=="function"){w.callback=null,P=w.priorityLevel;var S=M(w.expirationTime<=de);de=s.unstable_now(),typeof S=="function"?w.callback=S:w===a(v)&&d(v),B(de)}else d(v);w=a(v)}if(w!==null)var Z=!0;else{var ee=a(x);ee!==null&&_e(z,ee.startTime-de),Z=!1}return Z}finally{w=null,P=J,R=!1}}var L=!1,H=null,re=-1,oe=5,me=-1;function xe(){return!(s.unstable_now()-meY||125M?(Y.sortIndex=J,o(x,Y),a(v)===null&&Y===a(x)&&(E?(C(re),re=-1):E=!0,_e(z,J-M))):(Y.sortIndex=S,o(v,Y),O||R||(O=!0,Te($))),Y},s.unstable_shouldYield=xe,s.unstable_wrapCallback=function(Y){var de=P;return function(){var J=P;P=de;try{return Y.apply(this,arguments)}finally{P=J}}}})(Ed)),Ed}var xp;function Eg(){return xp||(xp=1,Cd.exports=Cg()),Cd.exports}/** + * @license React + * react-dom.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var gp;function _g(){if(gp)return jt;gp=1;var s=fc(),o=Eg();function a(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),v=Object.prototype.hasOwnProperty,x=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,b={},w={};function P(e){return v.call(w,e)?!0:v.call(b,e)?!1:x.test(e)?w[e]=!0:(b[e]=!0,!1)}function R(e,t,n,l){if(n!==null&&n.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return l?!1:n!==null?!n.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function O(e,t,n,l){if(t===null||typeof t>"u"||R(e,t,n,l))return!0;if(l)return!1;if(n!==null)switch(n.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function E(e,t,n,l,i,c,m){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=l,this.attributeNamespace=i,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=c,this.removeEmptyString=m}var k={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){k[e]=new E(e,0,!1,e,null,!1,!1)}),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];k[t]=new E(t,1,!1,e[1],null,!1,!1)}),["contentEditable","draggable","spellCheck","value"].forEach(function(e){k[e]=new E(e,2,!1,e.toLowerCase(),null,!1,!1)}),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){k[e]=new E(e,2,!1,e,null,!1,!1)}),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){k[e]=new E(e,3,!1,e.toLowerCase(),null,!1,!1)}),["checked","multiple","muted","selected"].forEach(function(e){k[e]=new E(e,3,!0,e,null,!1,!1)}),["capture","download"].forEach(function(e){k[e]=new E(e,4,!1,e,null,!1,!1)}),["cols","rows","size","span"].forEach(function(e){k[e]=new E(e,6,!1,e,null,!1,!1)}),["rowSpan","start"].forEach(function(e){k[e]=new E(e,5,!1,e.toLowerCase(),null,!1,!1)});var C=/[\-:]([a-z])/g;function I(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(C,I);k[t]=new E(t,1,!1,e,null,!1,!1)}),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(C,I);k[t]=new E(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)}),["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(C,I);k[t]=new E(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)}),["tabIndex","crossOrigin"].forEach(function(e){k[e]=new E(e,1,!1,e.toLowerCase(),null,!1,!1)}),k.xlinkHref=new E("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach(function(e){k[e]=new E(e,1,!1,e.toLowerCase(),null,!0,!0)});function B(e,t,n,l){var i=k.hasOwnProperty(t)?k[t]:null;(i!==null?i.type!==0:l||!(2y||i[m]!==c[y]){var j=` +`+i[m].replace(" at new "," at ");return e.displayName&&j.includes("")&&(j=j.replace("",e.displayName)),j}while(1<=m&&0<=y);break}}}finally{Z=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?S(e):""}function K(e){switch(e.tag){case 5:return S(e.type);case 16:return S("Lazy");case 13:return S("Suspense");case 19:return S("SuspenseList");case 0:case 2:case 15:return e=ee(e.type,!1),e;case 11:return e=ee(e.type.render,!1),e;case 1:return e=ee(e.type,!0),e;default:return""}}function ae(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case H:return"Fragment";case L:return"Portal";case oe:return"Profiler";case re:return"StrictMode";case Pe:return"Suspense";case we:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case xe:return(e.displayName||"Context")+".Consumer";case me:return(e._context.displayName||"Context")+".Provider";case G:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case Ee:return t=e.displayName||null,t!==null?t:ae(e.type)||"Memo";case Te:t=e._payload,e=e._init;try{return ae(e(t))}catch{}}return null}function fe(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=t.render,e=e.displayName||e.name||"",t.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return ae(t);case 8:return t===re?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t}return null}function je(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function U(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function ge(e){var t=U(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),l=""+e[t];if(!e.hasOwnProperty(t)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var i=n.get,c=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return i.call(this)},set:function(m){l=""+m,c.call(this,m)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return l},setValue:function(m){l=""+m},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function xt(e){e._valueTracker||(e._valueTracker=ge(e))}function ol(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),l="";return e&&(l=U(e)?e.checked?"true":"false":e.value),e=l,e!==n?(t.setValue(e),!0):!1}function Gn(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function Vs(e,t){var n=t.checked;return J({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n??e._wrapperState.initialChecked})}function ll(e,t){var n=t.defaultValue==null?"":t.defaultValue,l=t.checked!=null?t.checked:t.defaultChecked;n=je(t.value!=null?t.value:n),e._wrapperState={initialChecked:l,initialValue:n,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function Vn(e,t){t=t.checked,t!=null&&B(e,"checked",t,!1)}function un(e,t){Vn(e,t);var n=je(t.value),l=t.type;if(n!=null)l==="number"?(n===0&&e.value===""||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if(l==="submit"||l==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?Wn(e,t.type,n):t.hasOwnProperty("defaultValue")&&Wn(e,t.type,je(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function Ws(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var l=t.type;if(!(l!=="submit"&&l!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}n=e.name,n!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,n!==""&&(e.name=n)}function Wn(e,t,n){(t!=="number"||Gn(e.ownerDocument)!==e)&&(n==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var Nr=Array.isArray;function dr(e,t,n,l){if(e=e.options,t){t={};for(var i=0;i"+t.valueOf().toString()+"",t=fn.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function Cr(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&n.nodeType===3){n.nodeValue=t;return}}e.textContent=t}var Er={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},D=["Webkit","ms","Moz","O"];Object.keys(Er).forEach(function(e){D.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),Er[t]=Er[e]})});function te(e,t,n){return t==null||typeof t=="boolean"||t===""?"":n||typeof t!="number"||t===0||Er.hasOwnProperty(e)&&Er[e]?(""+t).trim():t+"px"}function ke(e,t){e=e.style;for(var n in t)if(t.hasOwnProperty(n)){var l=n.indexOf("--")===0,i=te(n,t[n],l);n==="float"&&(n="cssFloat"),l?e.setProperty(n,i):e[n]=i}}var Ae=J({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function Be(e,t){if(t){if(Ae[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(a(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(a(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(a(61))}if(t.style!=null&&typeof t.style!="object")throw Error(a(62))}}function Yt(e,t){if(e.indexOf("-")===-1)return typeof t.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var pn=null;function mn(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var Ys=null,qn=null,Zn=null;function Cc(e){if(e=bo(e)){if(typeof Ys!="function")throw Error(a(280));var t=e.stateNode;t&&(t=Ml(t),Ys(e.stateNode,e.type,t))}}function Ec(e){qn?Zn?Zn.push(e):Zn=[e]:qn=e}function _c(){if(qn){var e=qn,t=Zn;if(Zn=qn=null,Cc(e),t)for(e=0;e>>=0,e===0?32:31-(Fh(e)/Ih|0)|0}var ul=64,fl=4194304;function to(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function pl(e,t){var n=e.pendingLanes;if(n===0)return 0;var l=0,i=e.suspendedLanes,c=e.pingedLanes,m=n&268435455;if(m!==0){var y=m&~i;y!==0?l=to(y):(c&=m,c!==0&&(l=to(c)))}else m=n&~i,m!==0?l=to(m):c!==0&&(l=to(c));if(l===0)return 0;if(t!==0&&t!==l&&(t&i)===0&&(i=l&-l,c=t&-t,i>=c||i===16&&(c&4194240)!==0))return t;if((l&4)!==0&&(l|=n&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=l;0n;n++)t.push(e);return t}function ro(e,t,n){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-Bt(t),e[t]=n}function Hh(e,t){var n=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var l=e.eventTimes;for(e=e.expirationTimes;0=uo),ru=" ",nu=!1;function su(e,t){switch(e){case"keyup":return gx.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function ou(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var Xn=!1;function yx(e,t){switch(e){case"compositionend":return ou(t);case"keypress":return t.which!==32?null:(nu=!0,ru);case"textInput":return e=t.data,e===ru&&nu?null:e;default:return null}}function bx(e,t){if(Xn)return e==="compositionend"||!ri&&su(e,t)?(e=Zc(),vl=Za=Or=null,Xn=!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=l}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=fu(n)}}function mu(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?mu(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function hu(){for(var e=window,t=Gn();t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href=="string"}catch{n=!1}if(n)e=t.contentWindow;else break;t=Gn(e.document)}return t}function oi(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}function Mx(e){var t=hu(),n=e.focusedElem,l=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&mu(n.ownerDocument.documentElement,n)){if(l!==null&&oi(n)){if(t=l.start,e=l.end,e===void 0&&(e=t),"selectionStart"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if(e=(t=n.ownerDocument||document)&&t.defaultView||window,e.getSelection){e=e.getSelection();var i=n.textContent.length,c=Math.min(l.start,i);l=l.end===void 0?c:Math.min(l.end,i),!e.extend&&c>l&&(i=l,l=c,c=i),i=pu(n,c);var m=pu(n,l);i&&m&&(e.rangeCount!==1||e.anchorNode!==i.node||e.anchorOffset!==i.offset||e.focusNode!==m.node||e.focusOffset!==m.offset)&&(t=t.createRange(),t.setStart(i.node,i.offset),e.removeAllRanges(),c>l?(e.addRange(t),e.extend(m.node,m.offset)):(t.setEnd(m.node,m.offset),e.addRange(t)))}}for(t=[],e=n;e=e.parentNode;)e.nodeType===1&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof n.focus=="function"&&n.focus(),n=0;n=document.documentMode,es=null,li=null,ho=null,ai=!1;function xu(e,t,n){var l=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;ai||es==null||es!==Gn(l)||(l=es,"selectionStart"in l&&oi(l)?l={start:l.selectionStart,end:l.selectionEnd}:(l=(l.ownerDocument&&l.ownerDocument.defaultView||window).getSelection(),l={anchorNode:l.anchorNode,anchorOffset:l.anchorOffset,focusNode:l.focusNode,focusOffset:l.focusOffset}),ho&&mo(ho,l)||(ho=l,l=Cl(li,"onSelect"),0os||(e.current=yi[os],yi[os]=null,os--)}function Fe(e,t){os++,yi[os]=e.current,e.current=t}var zr={},it=Tr(zr),gt=Tr(!1),gn=zr;function ls(e,t){var n=e.type.contextTypes;if(!n)return zr;var l=e.stateNode;if(l&&l.__reactInternalMemoizedUnmaskedChildContext===t)return l.__reactInternalMemoizedMaskedChildContext;var i={},c;for(c in n)i[c]=t[c];return l&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=i),i}function vt(e){return e=e.childContextTypes,e!=null}function Pl(){$e(gt),$e(it)}function Ru(e,t,n){if(it.current!==zr)throw Error(a(168));Fe(it,t),Fe(gt,n)}function Ou(e,t,n){var l=e.stateNode;if(t=t.childContextTypes,typeof l.getChildContext!="function")return n;l=l.getChildContext();for(var i in l)if(!(i in t))throw Error(a(108,fe(e)||"Unknown",i));return J({},n,l)}function Rl(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||zr,gn=it.current,Fe(it,e),Fe(gt,gt.current),!0}function Du(e,t,n){var l=e.stateNode;if(!l)throw Error(a(169));n?(e=Ou(e,t,gn),l.__reactInternalMemoizedMergedChildContext=e,$e(gt),$e(it),Fe(it,e)):$e(gt),Fe(gt,n)}var ur=null,Ol=!1,bi=!1;function Au(e){ur===null?ur=[e]:ur.push(e)}function Ux(e){Ol=!0,Au(e)}function Lr(){if(!bi&&ur!==null){bi=!0;var e=0,t=Le;try{var n=ur;for(Le=1;e>=m,i-=m,fr=1<<32-Bt(t)+i|n<Ne?(rt=ye,ye=null):rt=ye.sibling;var De=V(A,ye,T[Ne],q);if(De===null){ye===null&&(ye=rt);break}e&&ye&&De.alternate===null&&t(A,ye),_=c(De,_,Ne),ve===null?ue=De:ve.sibling=De,ve=De,ye=rt}if(Ne===T.length)return n(A,ye),He&&yn(A,Ne),ue;if(ye===null){for(;NeNe?(rt=ye,ye=null):rt=ye.sibling;var Wr=V(A,ye,De.value,q);if(Wr===null){ye===null&&(ye=rt);break}e&&ye&&Wr.alternate===null&&t(A,ye),_=c(Wr,_,Ne),ve===null?ue=Wr:ve.sibling=Wr,ve=Wr,ye=rt}if(De.done)return n(A,ye),He&&yn(A,Ne),ue;if(ye===null){for(;!De.done;Ne++,De=T.next())De=Q(A,De.value,q),De!==null&&(_=c(De,_,Ne),ve===null?ue=De:ve.sibling=De,ve=De);return He&&yn(A,Ne),ue}for(ye=l(A,ye);!De.done;Ne++,De=T.next())De=ne(ye,A,Ne,De.value,q),De!==null&&(e&&De.alternate!==null&&ye.delete(De.key===null?Ne:De.key),_=c(De,_,Ne),ve===null?ue=De:ve.sibling=De,ve=De);return e&&ye.forEach(function(wg){return t(A,wg)}),He&&yn(A,Ne),ue}function Ze(A,_,T,q){if(typeof T=="object"&&T!==null&&T.type===H&&T.key===null&&(T=T.props.children),typeof T=="object"&&T!==null){switch(T.$$typeof){case $:e:{for(var ue=T.key,ve=_;ve!==null;){if(ve.key===ue){if(ue=T.type,ue===H){if(ve.tag===7){n(A,ve.sibling),_=i(ve,T.props.children),_.return=A,A=_;break e}}else if(ve.elementType===ue||typeof ue=="object"&&ue!==null&&ue.$$typeof===Te&&$u(ue)===ve.type){n(A,ve.sibling),_=i(ve,T.props),_.ref=wo(A,ve,T),_.return=A,A=_;break e}n(A,ve);break}else t(A,ve);ve=ve.sibling}T.type===H?(_=En(T.props.children,A.mode,q,T.key),_.return=A,A=_):(q=la(T.type,T.key,T.props,null,A.mode,q),q.ref=wo(A,_,T),q.return=A,A=q)}return m(A);case L:e:{for(ve=T.key;_!==null;){if(_.key===ve)if(_.tag===4&&_.stateNode.containerInfo===T.containerInfo&&_.stateNode.implementation===T.implementation){n(A,_.sibling),_=i(_,T.children||[]),_.return=A,A=_;break e}else{n(A,_);break}else t(A,_);_=_.sibling}_=gd(T,A.mode,q),_.return=A,A=_}return m(A);case Te:return ve=T._init,Ze(A,_,ve(T._payload),q)}if(Nr(T))return ie(A,_,T,q);if(de(T))return ce(A,_,T,q);zl(A,T)}return typeof T=="string"&&T!==""||typeof T=="number"?(T=""+T,_!==null&&_.tag===6?(n(A,_.sibling),_=i(_,T),_.return=A,A=_):(n(A,_),_=xd(T,A.mode,q),_.return=A,A=_),m(A)):n(A,_)}return Ze}var cs=Uu(!0),Bu=Uu(!1),Ll=Tr(null),Fl=null,us=null,Ci=null;function Ei(){Ci=us=Fl=null}function _i(e){var t=Ll.current;$e(Ll),e._currentValue=t}function Mi(e,t,n){for(;e!==null;){var l=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,l!==null&&(l.childLanes|=t)):l!==null&&(l.childLanes&t)!==t&&(l.childLanes|=t),e===n)break;e=e.return}}function fs(e,t){Fl=e,Ci=us=null,e=e.dependencies,e!==null&&e.firstContext!==null&&((e.lanes&t)!==0&&(yt=!0),e.firstContext=null)}function zt(e){var t=e._currentValue;if(Ci!==e)if(e={context:e,memoizedValue:t,next:null},us===null){if(Fl===null)throw Error(a(308));us=e,Fl.dependencies={lanes:0,firstContext:e}}else us=us.next=e;return t}var bn=null;function Pi(e){bn===null?bn=[e]:bn.push(e)}function Hu(e,t,n,l){var i=t.interleaved;return i===null?(n.next=n,Pi(t)):(n.next=i.next,i.next=n),t.interleaved=n,mr(e,l)}function mr(e,t){e.lanes|=t;var n=e.alternate;for(n!==null&&(n.lanes|=t),n=e,e=e.return;e!==null;)e.childLanes|=t,n=e.alternate,n!==null&&(n.childLanes|=t),n=e,e=e.return;return n.tag===3?n.stateNode:null}var Fr=!1;function Ri(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function Gu(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function hr(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function Ir(e,t,n){var l=e.updateQueue;if(l===null)return null;if(l=l.shared,(Oe&2)!==0){var i=l.pending;return i===null?t.next=t:(t.next=i.next,i.next=t),l.pending=t,mr(e,n)}return i=l.interleaved,i===null?(t.next=t,Pi(l)):(t.next=i.next,i.next=t),l.interleaved=t,mr(e,n)}function Il(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,(n&4194240)!==0)){var l=t.lanes;l&=e.pendingLanes,n|=l,t.lanes=n,Va(e,n)}}function Vu(e,t){var n=e.updateQueue,l=e.alternate;if(l!==null&&(l=l.updateQueue,n===l)){var i=null,c=null;if(n=n.firstBaseUpdate,n!==null){do{var m={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};c===null?i=c=m:c=c.next=m,n=n.next}while(n!==null);c===null?i=c=t:c=c.next=t}else i=c=t;n={baseState:l.baseState,firstBaseUpdate:i,lastBaseUpdate:c,shared:l.shared,effects:l.effects},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function $l(e,t,n,l){var i=e.updateQueue;Fr=!1;var c=i.firstBaseUpdate,m=i.lastBaseUpdate,y=i.shared.pending;if(y!==null){i.shared.pending=null;var j=y,F=j.next;j.next=null,m===null?c=F:m.next=F,m=j;var W=e.alternate;W!==null&&(W=W.updateQueue,y=W.lastBaseUpdate,y!==m&&(y===null?W.firstBaseUpdate=F:y.next=F,W.lastBaseUpdate=j))}if(c!==null){var Q=i.baseState;m=0,W=F=j=null,y=c;do{var V=y.lane,ne=y.eventTime;if((l&V)===V){W!==null&&(W=W.next={eventTime:ne,lane:0,tag:y.tag,payload:y.payload,callback:y.callback,next:null});e:{var ie=e,ce=y;switch(V=t,ne=n,ce.tag){case 1:if(ie=ce.payload,typeof ie=="function"){Q=ie.call(ne,Q,V);break e}Q=ie;break e;case 3:ie.flags=ie.flags&-65537|128;case 0:if(ie=ce.payload,V=typeof ie=="function"?ie.call(ne,Q,V):ie,V==null)break e;Q=J({},Q,V);break e;case 2:Fr=!0}}y.callback!==null&&y.lane!==0&&(e.flags|=64,V=i.effects,V===null?i.effects=[y]:V.push(y))}else ne={eventTime:ne,lane:V,tag:y.tag,payload:y.payload,callback:y.callback,next:null},W===null?(F=W=ne,j=Q):W=W.next=ne,m|=V;if(y=y.next,y===null){if(y=i.shared.pending,y===null)break;V=y,y=V.next,V.next=null,i.lastBaseUpdate=V,i.shared.pending=null}}while(!0);if(W===null&&(j=Q),i.baseState=j,i.firstBaseUpdate=F,i.lastBaseUpdate=W,t=i.shared.interleaved,t!==null){i=t;do m|=i.lane,i=i.next;while(i!==t)}else c===null&&(i.shared.lanes=0);kn|=m,e.lanes=m,e.memoizedState=Q}}function Wu(e,t,n){if(e=t.effects,t.effects=null,e!==null)for(t=0;tn?n:4,e(!0);var l=zi.transition;zi.transition={};try{e(!1),t()}finally{Le=n,zi.transition=l}}function ff(){return Lt().memoizedState}function Vx(e,t,n){var l=Hr(e);if(n={lane:l,action:n,hasEagerState:!1,eagerState:null,next:null},pf(e))mf(t,n);else if(n=Hu(e,t,n,l),n!==null){var i=mt();Qt(n,e,l,i),hf(n,t,l)}}function Wx(e,t,n){var l=Hr(e),i={lane:l,action:n,hasEagerState:!1,eagerState:null,next:null};if(pf(e))mf(t,i);else{var c=e.alternate;if(e.lanes===0&&(c===null||c.lanes===0)&&(c=t.lastRenderedReducer,c!==null))try{var m=t.lastRenderedState,y=c(m,n);if(i.hasEagerState=!0,i.eagerState=y,Ht(y,m)){var j=t.interleaved;j===null?(i.next=i,Pi(t)):(i.next=j.next,j.next=i),t.interleaved=i;return}}catch{}finally{}n=Hu(e,t,i,l),n!==null&&(i=mt(),Qt(n,e,l,i),hf(n,t,l))}}function pf(e){var t=e.alternate;return e===Ve||t!==null&&t===Ve}function mf(e,t){So=Hl=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function hf(e,t,n){if((n&4194240)!==0){var l=t.lanes;l&=e.pendingLanes,n|=l,t.lanes=n,Va(e,n)}}var Wl={readContext:zt,useCallback:dt,useContext:dt,useEffect:dt,useImperativeHandle:dt,useInsertionEffect:dt,useLayoutEffect:dt,useMemo:dt,useReducer:dt,useRef:dt,useState:dt,useDebugValue:dt,useDeferredValue:dt,useTransition:dt,useMutableSource:dt,useSyncExternalStore:dt,useId:dt,unstable_isNewReconciler:!1},Kx={readContext:zt,useCallback:function(e,t){return tr().memoizedState=[e,t===void 0?null:t],e},useContext:zt,useEffect:nf,useImperativeHandle:function(e,t,n){return n=n!=null?n.concat([e]):null,Gl(4194308,4,lf.bind(null,t,e),n)},useLayoutEffect:function(e,t){return Gl(4194308,4,e,t)},useInsertionEffect:function(e,t){return Gl(4,2,e,t)},useMemo:function(e,t){var n=tr();return t=t===void 0?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var l=tr();return t=n!==void 0?n(t):t,l.memoizedState=l.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},l.queue=e,e=e.dispatch=Vx.bind(null,Ve,e),[l.memoizedState,e]},useRef:function(e){var t=tr();return e={current:e},t.memoizedState=e},useState:tf,useDebugValue:Hi,useDeferredValue:function(e){return tr().memoizedState=e},useTransition:function(){var e=tf(!1),t=e[0];return e=Gx.bind(null,e[1]),tr().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var l=Ve,i=tr();if(He){if(n===void 0)throw Error(a(407));n=n()}else{if(n=t(),tt===null)throw Error(a(349));(jn&30)!==0||Zu(l,t,n)}i.memoizedState=n;var c={value:n,getSnapshot:t};return i.queue=c,nf(Ju.bind(null,l,c,e),[e]),l.flags|=2048,_o(9,Yu.bind(null,l,c,n,t),void 0,null),n},useId:function(){var e=tr(),t=tt.identifierPrefix;if(He){var n=pr,l=fr;n=(l&~(1<<32-Bt(l)-1)).toString(32)+n,t=":"+t+"R"+n,n=Co++,0<\/script>",e=e.removeChild(e.firstChild)):typeof l.is=="string"?e=m.createElement(n,{is:l.is}):(e=m.createElement(n),n==="select"&&(m=e,l.multiple?m.multiple=!0:l.size&&(m.size=l.size))):e=m.createElementNS(e,n),e[Xt]=t,e[yo]=l,Tf(e,t,!1,!1),t.stateNode=e;e:{switch(m=Yt(n,l),n){case"dialog":Ie("cancel",e),Ie("close",e),i=l;break;case"iframe":case"object":case"embed":Ie("load",e),i=l;break;case"video":case"audio":for(i=0;igs&&(t.flags|=128,l=!0,Mo(c,!1),t.lanes=4194304)}else{if(!l)if(e=Ul(m),e!==null){if(t.flags|=128,l=!0,n=e.updateQueue,n!==null&&(t.updateQueue=n,t.flags|=4),Mo(c,!0),c.tail===null&&c.tailMode==="hidden"&&!m.alternate&&!He)return ct(t),null}else 2*qe()-c.renderingStartTime>gs&&n!==1073741824&&(t.flags|=128,l=!0,Mo(c,!1),t.lanes=4194304);c.isBackwards?(m.sibling=t.child,t.child=m):(n=c.last,n!==null?n.sibling=m:t.child=m,c.last=m)}return c.tail!==null?(t=c.tail,c.rendering=t,c.tail=t.sibling,c.renderingStartTime=qe(),t.sibling=null,n=Ge.current,Fe(Ge,l?n&1|2:n&1),t):(ct(t),null);case 22:case 23:return pd(),l=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==l&&(t.flags|=8192),l&&(t.mode&1)!==0?(Pt&1073741824)!==0&&(ct(t),t.subtreeFlags&6&&(t.flags|=8192)):ct(t),null;case 24:return null;case 25:return null}throw Error(a(156,t.tag))}function tg(e,t){switch(ji(t),t.tag){case 1:return vt(t.type)&&Pl(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return ps(),$e(gt),$e(it),Ti(),e=t.flags,(e&65536)!==0&&(e&128)===0?(t.flags=e&-65537|128,t):null;case 5:return Di(t),null;case 13:if($e(Ge),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(a(340));ds()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return $e(Ge),null;case 4:return ps(),null;case 10:return _i(t.type._context),null;case 22:case 23:return pd(),null;case 24:return null;default:return null}}var Zl=!1,ut=!1,rg=typeof WeakSet=="function"?WeakSet:Set,le=null;function hs(e,t){var n=e.ref;if(n!==null)if(typeof n=="function")try{n(null)}catch(l){We(e,t,l)}else n.current=null}function td(e,t,n){try{n()}catch(l){We(e,t,l)}}var Ff=!1;function ng(e,t){if(pi=xl,e=hu(),oi(e)){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{n=(n=e.ownerDocument)&&n.defaultView||window;var l=n.getSelection&&n.getSelection();if(l&&l.rangeCount!==0){n=l.anchorNode;var i=l.anchorOffset,c=l.focusNode;l=l.focusOffset;try{n.nodeType,c.nodeType}catch{n=null;break e}var m=0,y=-1,j=-1,F=0,W=0,Q=e,V=null;t:for(;;){for(var ne;Q!==n||i!==0&&Q.nodeType!==3||(y=m+i),Q!==c||l!==0&&Q.nodeType!==3||(j=m+l),Q.nodeType===3&&(m+=Q.nodeValue.length),(ne=Q.firstChild)!==null;)V=Q,Q=ne;for(;;){if(Q===e)break t;if(V===n&&++F===i&&(y=m),V===c&&++W===l&&(j=m),(ne=Q.nextSibling)!==null)break;Q=V,V=Q.parentNode}Q=ne}n=y===-1||j===-1?null:{start:y,end:j}}else n=null}n=n||{start:0,end:0}}else n=null;for(mi={focusedElem:e,selectionRange:n},xl=!1,le=t;le!==null;)if(t=le,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,le=e;else for(;le!==null;){t=le;try{var ie=t.alternate;if((t.flags&1024)!==0)switch(t.tag){case 0:case 11:case 15:break;case 1:if(ie!==null){var ce=ie.memoizedProps,Ze=ie.memoizedState,A=t.stateNode,_=A.getSnapshotBeforeUpdate(t.elementType===t.type?ce:Vt(t.type,ce),Ze);A.__reactInternalSnapshotBeforeUpdate=_}break;case 3:var T=t.stateNode.containerInfo;T.nodeType===1?T.textContent="":T.nodeType===9&&T.documentElement&&T.removeChild(T.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(a(163))}}catch(q){We(t,t.return,q)}if(e=t.sibling,e!==null){e.return=t.return,le=e;break}le=t.return}return ie=Ff,Ff=!1,ie}function Po(e,t,n){var l=t.updateQueue;if(l=l!==null?l.lastEffect:null,l!==null){var i=l=l.next;do{if((i.tag&e)===e){var c=i.destroy;i.destroy=void 0,c!==void 0&&td(t,n,c)}i=i.next}while(i!==l)}}function Yl(e,t){if(t=t.updateQueue,t=t!==null?t.lastEffect:null,t!==null){var n=t=t.next;do{if((n.tag&e)===e){var l=n.create;n.destroy=l()}n=n.next}while(n!==t)}}function rd(e){var t=e.ref;if(t!==null){var n=e.stateNode;switch(e.tag){case 5:e=n;break;default:e=n}typeof t=="function"?t(e):t.current=e}}function If(e){var t=e.alternate;t!==null&&(e.alternate=null,If(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[Xt],delete t[yo],delete t[vi],delete t[Ix],delete t[$x])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function $f(e){return e.tag===5||e.tag===3||e.tag===4}function Uf(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||$f(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function nd(e,t,n){var l=e.tag;if(l===5||l===6)e=e.stateNode,t?n.nodeType===8?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(n.nodeType===8?(t=n.parentNode,t.insertBefore(e,n)):(t=n,t.appendChild(e)),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=_l));else if(l!==4&&(e=e.child,e!==null))for(nd(e,t,n),e=e.sibling;e!==null;)nd(e,t,n),e=e.sibling}function sd(e,t,n){var l=e.tag;if(l===5||l===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(l!==4&&(e=e.child,e!==null))for(sd(e,t,n),e=e.sibling;e!==null;)sd(e,t,n),e=e.sibling}var st=null,Wt=!1;function $r(e,t,n){for(n=n.child;n!==null;)Bf(e,t,n),n=n.sibling}function Bf(e,t,n){if(Jt&&typeof Jt.onCommitFiberUnmount=="function")try{Jt.onCommitFiberUnmount(cl,n)}catch{}switch(n.tag){case 5:ut||hs(n,t);case 6:var l=st,i=Wt;st=null,$r(e,t,n),st=l,Wt=i,st!==null&&(Wt?(e=st,n=n.stateNode,e.nodeType===8?e.parentNode.removeChild(n):e.removeChild(n)):st.removeChild(n.stateNode));break;case 18:st!==null&&(Wt?(e=st,n=n.stateNode,e.nodeType===8?gi(e.parentNode,n):e.nodeType===1&&gi(e,n),ao(e)):gi(st,n.stateNode));break;case 4:l=st,i=Wt,st=n.stateNode.containerInfo,Wt=!0,$r(e,t,n),st=l,Wt=i;break;case 0:case 11:case 14:case 15:if(!ut&&(l=n.updateQueue,l!==null&&(l=l.lastEffect,l!==null))){i=l=l.next;do{var c=i,m=c.destroy;c=c.tag,m!==void 0&&((c&2)!==0||(c&4)!==0)&&td(n,t,m),i=i.next}while(i!==l)}$r(e,t,n);break;case 1:if(!ut&&(hs(n,t),l=n.stateNode,typeof l.componentWillUnmount=="function"))try{l.props=n.memoizedProps,l.state=n.memoizedState,l.componentWillUnmount()}catch(y){We(n,t,y)}$r(e,t,n);break;case 21:$r(e,t,n);break;case 22:n.mode&1?(ut=(l=ut)||n.memoizedState!==null,$r(e,t,n),ut=l):$r(e,t,n);break;default:$r(e,t,n)}}function Hf(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var n=e.stateNode;n===null&&(n=e.stateNode=new rg),t.forEach(function(l){var i=fg.bind(null,e,l);n.has(l)||(n.add(l),l.then(i,i))})}}function Kt(e,t){var n=t.deletions;if(n!==null)for(var l=0;li&&(i=m),l&=~c}if(l=i,l=qe()-l,l=(120>l?120:480>l?480:1080>l?1080:1920>l?1920:3e3>l?3e3:4320>l?4320:1960*og(l/1960))-l,10e?16:e,Br===null)var l=!1;else{if(e=Br,Br=null,ra=0,(Oe&6)!==0)throw Error(a(331));var i=Oe;for(Oe|=4,le=e.current;le!==null;){var c=le,m=c.child;if((le.flags&16)!==0){var y=c.deletions;if(y!==null){for(var j=0;jqe()-ad?Sn(e,0):ld|=n),wt(e,t)}function rp(e,t){t===0&&((e.mode&1)===0?t=1:(t=fl,fl<<=1,(fl&130023424)===0&&(fl=4194304)));var n=mt();e=mr(e,t),e!==null&&(ro(e,t,n),wt(e,n))}function ug(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),rp(e,n)}function fg(e,t){var n=0;switch(e.tag){case 13:var l=e.stateNode,i=e.memoizedState;i!==null&&(n=i.retryLane);break;case 19:l=e.stateNode;break;default:throw Error(a(314))}l!==null&&l.delete(t),rp(e,n)}var np;np=function(e,t,n){if(e!==null)if(e.memoizedProps!==t.pendingProps||gt.current)yt=!0;else{if((e.lanes&n)===0&&(t.flags&128)===0)return yt=!1,Xx(e,t,n);yt=(e.flags&131072)!==0}else yt=!1,He&&(t.flags&1048576)!==0&&Tu(t,Al,t.index);switch(t.lanes=0,t.tag){case 2:var l=t.type;ql(e,t),e=t.pendingProps;var i=ls(t,it.current);fs(t,n),i=Fi(null,t,l,e,i,n);var c=Ii();return t.flags|=1,typeof i=="object"&&i!==null&&typeof i.render=="function"&&i.$$typeof===void 0?(t.tag=1,t.memoizedState=null,t.updateQueue=null,vt(l)?(c=!0,Rl(t)):c=!1,t.memoizedState=i.state!==null&&i.state!==void 0?i.state:null,Ri(t),i.updater=Kl,t.stateNode=i,i._reactInternals=t,Vi(t,l,e,n),t=qi(null,t,l,!0,c,n)):(t.tag=0,He&&c&&wi(t),pt(null,t,i,n),t=t.child),t;case 16:l=t.elementType;e:{switch(ql(e,t),e=t.pendingProps,i=l._init,l=i(l._payload),t.type=l,i=t.tag=mg(l),e=Vt(l,e),i){case 0:t=Qi(null,t,l,e,n);break e;case 1:t=Mf(null,t,l,e,n);break e;case 11:t=Nf(null,t,l,e,n);break e;case 14:t=Sf(null,t,l,Vt(l.type,e),n);break e}throw Error(a(306,l,""))}return t;case 0:return l=t.type,i=t.pendingProps,i=t.elementType===l?i:Vt(l,i),Qi(e,t,l,i,n);case 1:return l=t.type,i=t.pendingProps,i=t.elementType===l?i:Vt(l,i),Mf(e,t,l,i,n);case 3:e:{if(Pf(t),e===null)throw Error(a(387));l=t.pendingProps,c=t.memoizedState,i=c.element,Gu(e,t),$l(t,l,null,n);var m=t.memoizedState;if(l=m.element,c.isDehydrated)if(c={element:l,isDehydrated:!1,cache:m.cache,pendingSuspenseBoundaries:m.pendingSuspenseBoundaries,transitions:m.transitions},t.updateQueue.baseState=c,t.memoizedState=c,t.flags&256){i=ms(Error(a(423)),t),t=Rf(e,t,l,n,i);break e}else if(l!==i){i=ms(Error(a(424)),t),t=Rf(e,t,l,n,i);break e}else for(Mt=Ar(t.stateNode.containerInfo.firstChild),_t=t,He=!0,Gt=null,n=Bu(t,null,l,n),t.child=n;n;)n.flags=n.flags&-3|4096,n=n.sibling;else{if(ds(),l===i){t=xr(e,t,n);break e}pt(e,t,l,n)}t=t.child}return t;case 5:return Ku(t),e===null&&Ni(t),l=t.type,i=t.pendingProps,c=e!==null?e.memoizedProps:null,m=i.children,hi(l,i)?m=null:c!==null&&hi(l,c)&&(t.flags|=32),_f(e,t),pt(e,t,m,n),t.child;case 6:return e===null&&Ni(t),null;case 13:return Of(e,t,n);case 4:return Oi(t,t.stateNode.containerInfo),l=t.pendingProps,e===null?t.child=cs(t,null,l,n):pt(e,t,l,n),t.child;case 11:return l=t.type,i=t.pendingProps,i=t.elementType===l?i:Vt(l,i),Nf(e,t,l,i,n);case 7:return pt(e,t,t.pendingProps,n),t.child;case 8:return pt(e,t,t.pendingProps.children,n),t.child;case 12:return pt(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(l=t.type._context,i=t.pendingProps,c=t.memoizedProps,m=i.value,Fe(Ll,l._currentValue),l._currentValue=m,c!==null)if(Ht(c.value,m)){if(c.children===i.children&&!gt.current){t=xr(e,t,n);break e}}else for(c=t.child,c!==null&&(c.return=t);c!==null;){var y=c.dependencies;if(y!==null){m=c.child;for(var j=y.firstContext;j!==null;){if(j.context===l){if(c.tag===1){j=hr(-1,n&-n),j.tag=2;var F=c.updateQueue;if(F!==null){F=F.shared;var W=F.pending;W===null?j.next=j:(j.next=W.next,W.next=j),F.pending=j}}c.lanes|=n,j=c.alternate,j!==null&&(j.lanes|=n),Mi(c.return,n,t),y.lanes|=n;break}j=j.next}}else if(c.tag===10)m=c.type===t.type?null:c.child;else if(c.tag===18){if(m=c.return,m===null)throw Error(a(341));m.lanes|=n,y=m.alternate,y!==null&&(y.lanes|=n),Mi(m,n,t),m=c.sibling}else m=c.child;if(m!==null)m.return=c;else for(m=c;m!==null;){if(m===t){m=null;break}if(c=m.sibling,c!==null){c.return=m.return,m=c;break}m=m.return}c=m}pt(e,t,i.children,n),t=t.child}return t;case 9:return i=t.type,l=t.pendingProps.children,fs(t,n),i=zt(i),l=l(i),t.flags|=1,pt(e,t,l,n),t.child;case 14:return l=t.type,i=Vt(l,t.pendingProps),i=Vt(l.type,i),Sf(e,t,l,i,n);case 15:return Cf(e,t,t.type,t.pendingProps,n);case 17:return l=t.type,i=t.pendingProps,i=t.elementType===l?i:Vt(l,i),ql(e,t),t.tag=1,vt(l)?(e=!0,Rl(t)):e=!1,fs(t,n),gf(t,l,i),Vi(t,l,i,n),qi(null,t,l,!0,e,n);case 19:return Af(e,t,n);case 22:return Ef(e,t,n)}throw Error(a(156,t.tag))};function sp(e,t){return zc(e,t)}function pg(e,t,n,l){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=l,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function It(e,t,n,l){return new pg(e,t,n,l)}function hd(e){return e=e.prototype,!(!e||!e.isReactComponent)}function mg(e){if(typeof e=="function")return hd(e)?1:0;if(e!=null){if(e=e.$$typeof,e===G)return 11;if(e===Ee)return 14}return 2}function Vr(e,t){var n=e.alternate;return n===null?(n=It(e.tag,t,e.key,e.mode),n.elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=e.flags&14680064,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function la(e,t,n,l,i,c){var m=2;if(l=e,typeof e=="function")hd(e)&&(m=1);else if(typeof e=="string")m=5;else e:switch(e){case H:return En(n.children,i,c,t);case re:m=8,i|=8;break;case oe:return e=It(12,n,t,i|2),e.elementType=oe,e.lanes=c,e;case Pe:return e=It(13,n,t,i),e.elementType=Pe,e.lanes=c,e;case we:return e=It(19,n,t,i),e.elementType=we,e.lanes=c,e;case _e:return aa(n,i,c,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case me:m=10;break e;case xe:m=9;break e;case G:m=11;break e;case Ee:m=14;break e;case Te:m=16,l=null;break e}throw Error(a(130,e==null?e:typeof e,""))}return t=It(m,n,t,i),t.elementType=e,t.type=l,t.lanes=c,t}function En(e,t,n,l){return e=It(7,e,l,t),e.lanes=n,e}function aa(e,t,n,l){return e=It(22,e,l,t),e.elementType=_e,e.lanes=n,e.stateNode={isHidden:!1},e}function xd(e,t,n){return e=It(6,e,null,t),e.lanes=n,e}function gd(e,t,n){return t=It(4,e.children!==null?e.children:[],e.key,t),t.lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function hg(e,t,n,l,i){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=Ga(0),this.expirationTimes=Ga(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Ga(0),this.identifierPrefix=l,this.onRecoverableError=i,this.mutableSourceEagerHydrationData=null}function vd(e,t,n,l,i,c,m,y,j){return e=new hg(e,t,n,y,j),t===1?(t=1,c===!0&&(t|=8)):t=0,c=It(3,null,null,t),e.current=c,c.stateNode=e,c.memoizedState={element:l,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},Ri(c),e}function xg(e,t,n){var l=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(s)}catch(o){console.error(o)}}return s(),Sd.exports=_g(),Sd.exports}var yp;function Mg(){if(yp)return ha;yp=1;var s=hm();return ha.createRoot=s.createRoot,ha.hydrateRoot=s.hydrateRoot,ha}var Pg=Mg();const Rg=pm(Pg);var nl=class{constructor(){this.listeners=new Set,this.subscribe=this.subscribe.bind(this)}subscribe(s){return this.listeners.add(s),this.onSubscribe(),()=>{this.listeners.delete(s),this.onUnsubscribe()}}hasListeners(){return this.listeners.size>0}onSubscribe(){}onUnsubscribe(){}},Pn,Yr,Es,nm,Og=(nm=class extends nl{constructor(){super();be(this,Pn);be(this,Yr);be(this,Es);se(this,Es,o=>{if(typeof window<"u"&&window.addEventListener){const a=()=>o();return window.addEventListener("visibilitychange",a,!1),()=>{window.removeEventListener("visibilitychange",a)}}})}onSubscribe(){N(this,Yr)||this.setEventListener(N(this,Es))}onUnsubscribe(){var o;this.hasListeners()||((o=N(this,Yr))==null||o.call(this),se(this,Yr,void 0))}setEventListener(o){var a;se(this,Es,o),(a=N(this,Yr))==null||a.call(this),se(this,Yr,o(d=>{typeof d=="boolean"?this.setFocused(d):this.onFocus()}))}setFocused(o){N(this,Pn)!==o&&(se(this,Pn,o),this.onFocus())}onFocus(){const o=this.isFocused();this.listeners.forEach(a=>{a(o)})}isFocused(){var o;return typeof N(this,Pn)=="boolean"?N(this,Pn):((o=globalThis.document)==null?void 0:o.visibilityState)!=="hidden"}},Pn=new WeakMap,Yr=new WeakMap,Es=new WeakMap,nm),mc=new Og,Dg={setTimeout:(s,o)=>setTimeout(s,o),clearTimeout:s=>clearTimeout(s),setInterval:(s,o)=>setInterval(s,o),clearInterval:s=>clearInterval(s)},Jr,uc,sm,Ag=(sm=class{constructor(){be(this,Jr,Dg);be(this,uc,!1)}setTimeoutProvider(s){se(this,Jr,s)}setTimeout(s,o){return N(this,Jr).setTimeout(s,o)}clearTimeout(s){N(this,Jr).clearTimeout(s)}setInterval(s,o){return N(this,Jr).setInterval(s,o)}clearInterval(s){N(this,Jr).clearInterval(s)}},Jr=new WeakMap,uc=new WeakMap,sm),Mn=new Ag;function Tg(s){setTimeout(s,0)}var zg=typeof window>"u"||"Deno"in globalThis;function Nt(){}function Lg(s,o){return typeof s=="function"?s(o):s}function $d(s){return typeof s=="number"&&s>=0&&s!==1/0}function xm(s,o){return Math.max(s+(o||0)-Date.now(),0)}function on(s,o){return typeof s=="function"?s(o):s}function Ot(s,o){return typeof s=="function"?s(o):s}function bp(s,o){const{type:a="all",exact:d,fetchStatus:u,predicate:f,queryKey:h,stale:p}=s;if(h){if(d){if(o.queryHash!==hc(h,o.options))return!1}else if(!Uo(o.queryKey,h))return!1}if(a!=="all"){const v=o.isActive();if(a==="active"&&!v||a==="inactive"&&v)return!1}return!(typeof p=="boolean"&&o.isStale()!==p||u&&u!==o.state.fetchStatus||f&&!f(o))}function wp(s,o){const{exact:a,status:d,predicate:u,mutationKey:f}=s;if(f){if(!o.options.mutationKey)return!1;if(a){if($o(o.options.mutationKey)!==$o(f))return!1}else if(!Uo(o.options.mutationKey,f))return!1}return!(d&&o.state.status!==d||u&&!u(o))}function hc(s,o){return((o==null?void 0:o.queryKeyHashFn)||$o)(s)}function $o(s){return JSON.stringify(s,(o,a)=>Bd(a)?Object.keys(a).sort().reduce((d,u)=>(d[u]=a[u],d),{}):a)}function Uo(s,o){return s===o?!0:typeof s!=typeof o?!1:s&&o&&typeof s=="object"&&typeof o=="object"?Object.keys(o).every(a=>Uo(s[a],o[a])):!1}var Fg=Object.prototype.hasOwnProperty;function gm(s,o,a=0){if(s===o)return s;if(a>500)return o;const d=jp(s)&&jp(o);if(!d&&!(Bd(s)&&Bd(o)))return o;const f=(d?s:Object.keys(s)).length,h=d?o:Object.keys(o),p=h.length,v=d?new Array(p):{};let x=0;for(let b=0;b{Mn.setTimeout(o,s)})}function Hd(s,o,a){return typeof a.structuralSharing=="function"?a.structuralSharing(s,o):a.structuralSharing!==!1?gm(s,o):o}function $g(s,o,a=0){const d=[...s,o];return a&&d.length>a?d.slice(1):d}function Ug(s,o,a=0){const d=[o,...s];return a&&d.length>a?d.slice(0,-1):d}var xc=Symbol();function vm(s,o){return!s.queryFn&&(o!=null&&o.initialPromise)?()=>o.initialPromise:!s.queryFn||s.queryFn===xc?()=>Promise.reject(new Error(`Missing queryFn: '${s.queryHash}'`)):s.queryFn}function ym(s,o){return typeof s=="function"?s(...o):!!s}function Bg(s,o,a){let d=!1,u;return Object.defineProperty(s,"signal",{enumerable:!0,get:()=>(u??(u=o()),d||(d=!0,u.aborted?a():u.addEventListener("abort",a,{once:!0})),u)}),s}var Bo=(()=>{let s=()=>zg;return{isServer(){return s()},setIsServer(o){s=o}}})();function Gd(){let s,o;const a=new Promise((u,f)=>{s=u,o=f});a.status="pending",a.catch(()=>{});function d(u){Object.assign(a,u),delete a.resolve,delete a.reject}return a.resolve=u=>{d({status:"fulfilled",value:u}),s(u)},a.reject=u=>{d({status:"rejected",reason:u}),o(u)},a}var Hg=Tg;function Gg(){let s=[],o=0,a=p=>{p()},d=p=>{p()},u=Hg;const f=p=>{o?s.push(p):u(()=>{a(p)})},h=()=>{const p=s;s=[],p.length&&u(()=>{d(()=>{p.forEach(v=>{a(v)})})})};return{batch:p=>{let v;o++;try{v=p()}finally{o--,o||h()}return v},batchCalls:p=>(...v)=>{f(()=>{p(...v)})},schedule:f,setNotifyFunction:p=>{a=p},setBatchNotifyFunction:p=>{d=p},setScheduler:p=>{u=p}}}var lt=Gg(),_s,Xr,Ms,om,Vg=(om=class extends nl{constructor(){super();be(this,_s,!0);be(this,Xr);be(this,Ms);se(this,Ms,o=>{if(typeof window<"u"&&window.addEventListener){const a=()=>o(!0),d=()=>o(!1);return window.addEventListener("online",a,!1),window.addEventListener("offline",d,!1),()=>{window.removeEventListener("online",a),window.removeEventListener("offline",d)}}})}onSubscribe(){N(this,Xr)||this.setEventListener(N(this,Ms))}onUnsubscribe(){var o;this.hasListeners()||((o=N(this,Xr))==null||o.call(this),se(this,Xr,void 0))}setEventListener(o){var a;se(this,Ms,o),(a=N(this,Xr))==null||a.call(this),se(this,Xr,o(this.setOnline.bind(this)))}setOnline(o){N(this,_s)!==o&&(se(this,_s,o),this.listeners.forEach(d=>{d(o)}))}isOnline(){return N(this,_s)}},_s=new WeakMap,Xr=new WeakMap,Ms=new WeakMap,om),Pa=new Vg;function Wg(s){return Math.min(1e3*2**s,3e4)}function bm(s){return(s??"online")==="online"?Pa.isOnline():!0}var Vd=class extends Error{constructor(s){super("CancelledError"),this.revert=s==null?void 0:s.revert,this.silent=s==null?void 0:s.silent}};function wm(s){let o=!1,a=0,d;const u=Gd(),f=()=>u.status!=="pending",h=E=>{var k;if(!f()){const C=new Vd(E);P(C),(k=s.onCancel)==null||k.call(s,C)}},p=()=>{o=!0},v=()=>{o=!1},x=()=>mc.isFocused()&&(s.networkMode==="always"||Pa.isOnline())&&s.canRun(),b=()=>bm(s.networkMode)&&s.canRun(),w=E=>{f()||(d==null||d(),u.resolve(E))},P=E=>{f()||(d==null||d(),u.reject(E))},R=()=>new Promise(E=>{var k;d=C=>{(f()||x())&&E(C)},(k=s.onPause)==null||k.call(s)}).then(()=>{var E;d=void 0,f()||(E=s.onContinue)==null||E.call(s)}),O=()=>{if(f())return;let E;const k=a===0?s.initialPromise:void 0;try{E=k??s.fn()}catch(C){E=Promise.reject(C)}Promise.resolve(E).then(w).catch(C=>{var L;if(f())return;const I=s.retry??(Bo.isServer()?0:3),B=s.retryDelay??Wg,z=typeof B=="function"?B(a,C):B,$=I===!0||typeof I=="number"&&ax()?void 0:R()).then(()=>{o?P(C):O()})})};return{promise:u,status:()=>u.status,cancel:h,continue:()=>(d==null||d(),u),cancelRetry:p,continueRetry:v,canStart:b,start:()=>(b()?O():R().then(O),u)}}var Rn,lm,jm=(lm=class{constructor(){be(this,Rn)}destroy(){this.clearGcTimeout()}scheduleGc(){this.clearGcTimeout(),$d(this.gcTime)&&se(this,Rn,Mn.setTimeout(()=>{this.optionalRemove()},this.gcTime))}updateGcTime(s){this.gcTime=Math.max(this.gcTime||0,s??(Bo.isServer()?1/0:300*1e3))}clearGcTimeout(){N(this,Rn)!==void 0&&(Mn.clearTimeout(N(this,Rn)),se(this,Rn,void 0))}},Rn=new WeakMap,lm);function Kg(s){return{onFetch:(o,a)=>{var b,w,P,R,O;const d=o.options,u=(P=(w=(b=o.fetchOptions)==null?void 0:b.meta)==null?void 0:w.fetchMore)==null?void 0:P.direction,f=((R=o.state.data)==null?void 0:R.pages)||[],h=((O=o.state.data)==null?void 0:O.pageParams)||[];let p={pages:[],pageParams:[]},v=0;const x=async()=>{let E=!1;const k=B=>{Bg(B,()=>o.signal,()=>E=!0)},C=vm(o.options,o.fetchOptions),I=async(B,z,$)=>{if(E)return Promise.reject(o.signal.reason);if(z==null&&B.pages.length)return Promise.resolve(B);const H=(()=>{const xe={client:o.client,queryKey:o.queryKey,pageParam:z,direction:$?"backward":"forward",meta:o.options.meta};return k(xe),xe})(),re=await C(H),{maxPages:oe}=o.options,me=$?Ug:$g;return{pages:me(B.pages,re,oe),pageParams:me(B.pageParams,z,oe)}};if(u&&f.length){const B=u==="backward",z=B?Qg:Np,$={pages:f,pageParams:h},L=z(d,$);p=await I($,L,B)}else{const B=s??f.length;do{const z=v===0?h[0]??d.initialPageParam:Np(d,p);if(v>0&&z==null)break;p=await I(p,z),v++}while(v{var E,k;return(k=(E=o.options).persister)==null?void 0:k.call(E,x,{client:o.client,queryKey:o.queryKey,meta:o.options.meta,signal:o.signal},a)}:o.fetchFn=x}}}function Np(s,{pages:o,pageParams:a}){const d=o.length-1;return o.length>0?s.getNextPageParam(o[d],o,a[d],a):void 0}function Qg(s,{pages:o,pageParams:a}){var d;return o.length>0?(d=s.getPreviousPageParam)==null?void 0:d.call(s,o[0],o,a[0],a):void 0}var Ps,On,Rs,Ut,Dn,nt,Jo,An,Rt,km,yr,am,qg=(am=class extends jm{constructor(o){super();be(this,Rt);be(this,Ps);be(this,On);be(this,Rs);be(this,Ut);be(this,Dn);be(this,nt);be(this,Jo);be(this,An);se(this,An,!1),se(this,Jo,o.defaultOptions),this.setOptions(o.options),this.observers=[],se(this,Dn,o.client),se(this,Ut,N(this,Dn).getQueryCache()),this.queryKey=o.queryKey,this.queryHash=o.queryHash,se(this,On,Cp(this.options)),this.state=o.state??N(this,On),this.scheduleGc()}get meta(){return this.options.meta}get queryType(){return N(this,Ps)}get promise(){var o;return(o=N(this,nt))==null?void 0:o.promise}setOptions(o){if(this.options={...N(this,Jo),...o},o!=null&&o._type&&se(this,Ps,o._type),this.updateGcTime(this.options.gcTime),this.state&&this.state.data===void 0){const a=Cp(this.options);a.data!==void 0&&(this.setState(Sp(a.data,a.dataUpdatedAt)),se(this,On,a))}}optionalRemove(){!this.observers.length&&this.state.fetchStatus==="idle"&&N(this,Ut).remove(this)}setData(o,a){const d=Hd(this.state.data,o,this.options);return Me(this,Rt,yr).call(this,{data:d,type:"success",dataUpdatedAt:a==null?void 0:a.updatedAt,manual:a==null?void 0:a.manual}),d}setState(o){Me(this,Rt,yr).call(this,{type:"setState",state:o})}cancel(o){var d,u;const a=(d=N(this,nt))==null?void 0:d.promise;return(u=N(this,nt))==null||u.cancel(o),a?a.then(Nt).catch(Nt):Promise.resolve()}destroy(){super.destroy(),this.cancel({silent:!0})}get resetState(){return N(this,On)}reset(){this.destroy(),this.setState(this.resetState)}isActive(){return this.observers.some(o=>Ot(o.options.enabled,this)!==!1)}isDisabled(){return this.getObserversCount()>0?!this.isActive():this.options.queryFn===xc||!this.isFetched()}isFetched(){return this.state.dataUpdateCount+this.state.errorUpdateCount>0}isStatic(){return this.getObserversCount()>0?this.observers.some(o=>on(o.options.staleTime,this)==="static"):!1}isStale(){return this.getObserversCount()>0?this.observers.some(o=>o.getCurrentResult().isStale):this.state.data===void 0||this.state.isInvalidated}isStaleByTime(o=0){return this.state.data===void 0?!0:o==="static"?!1:this.state.isInvalidated?!0:!xm(this.state.dataUpdatedAt,o)}onFocus(){var a;const o=this.observers.find(d=>d.shouldFetchOnWindowFocus());o==null||o.refetch({cancelRefetch:!1}),(a=N(this,nt))==null||a.continue()}onOnline(){var a;const o=this.observers.find(d=>d.shouldFetchOnReconnect());o==null||o.refetch({cancelRefetch:!1}),(a=N(this,nt))==null||a.continue()}addObserver(o){this.observers.includes(o)||(this.observers.push(o),this.clearGcTimeout(),N(this,Ut).notify({type:"observerAdded",query:this,observer:o}))}removeObserver(o){this.observers.includes(o)&&(this.observers=this.observers.filter(a=>a!==o),this.observers.length||(N(this,nt)&&(N(this,An)||Me(this,Rt,km).call(this)?N(this,nt).cancel({revert:!0}):N(this,nt).cancelRetry()),this.scheduleGc()),N(this,Ut).notify({type:"observerRemoved",query:this,observer:o}))}getObserversCount(){return this.observers.length}invalidate(){this.state.isInvalidated||Me(this,Rt,yr).call(this,{type:"invalidate"})}async fetch(o,a){var x,b,w,P,R,O,E,k,C,I,B;if(this.state.fetchStatus!=="idle"&&((x=N(this,nt))==null?void 0:x.status())!=="rejected"){if(this.state.data!==void 0&&(a!=null&&a.cancelRefetch))this.cancel({silent:!0});else if(N(this,nt))return N(this,nt).continueRetry(),N(this,nt).promise}if(o&&this.setOptions(o),!this.options.queryFn){const z=this.observers.find($=>$.options.queryFn);z&&this.setOptions(z.options)}const d=new AbortController,u=z=>{Object.defineProperty(z,"signal",{enumerable:!0,get:()=>(se(this,An,!0),d.signal)})},f=()=>{const z=vm(this.options,a),L=(()=>{const H={client:N(this,Dn),queryKey:this.queryKey,meta:this.meta};return u(H),H})();return se(this,An,!1),this.options.persister?this.options.persister(z,L,this):z(L)},p=(()=>{const z={fetchOptions:a,options:this.options,queryKey:this.queryKey,client:N(this,Dn),state:this.state,fetchFn:f};return u(z),z})(),v=N(this,Ps)==="infinite"?Kg(this.options.pages):this.options.behavior;v==null||v.onFetch(p,this),se(this,Rs,this.state),(this.state.fetchStatus==="idle"||this.state.fetchMeta!==((b=p.fetchOptions)==null?void 0:b.meta))&&Me(this,Rt,yr).call(this,{type:"fetch",meta:(w=p.fetchOptions)==null?void 0:w.meta}),se(this,nt,wm({initialPromise:a==null?void 0:a.initialPromise,fn:p.fetchFn,onCancel:z=>{z instanceof Vd&&z.revert&&this.setState({...N(this,Rs),fetchStatus:"idle"}),d.abort()},onFail:(z,$)=>{Me(this,Rt,yr).call(this,{type:"failed",failureCount:z,error:$})},onPause:()=>{Me(this,Rt,yr).call(this,{type:"pause"})},onContinue:()=>{Me(this,Rt,yr).call(this,{type:"continue"})},retry:p.options.retry,retryDelay:p.options.retryDelay,networkMode:p.options.networkMode,canRun:()=>!0}));try{const z=await N(this,nt).start();if(z===void 0)throw new Error(`${this.queryHash} data is undefined`);return this.setData(z),(R=(P=N(this,Ut).config).onSuccess)==null||R.call(P,z,this),(E=(O=N(this,Ut).config).onSettled)==null||E.call(O,z,this.state.error,this),z}catch(z){if(z instanceof Vd){if(z.silent)return N(this,nt).promise;if(z.revert){if(this.state.data===void 0)throw z;return this.state.data}}throw Me(this,Rt,yr).call(this,{type:"error",error:z}),(C=(k=N(this,Ut).config).onError)==null||C.call(k,z,this),(B=(I=N(this,Ut).config).onSettled)==null||B.call(I,this.state.data,z,this),z}finally{this.scheduleGc()}}},Ps=new WeakMap,On=new WeakMap,Rs=new WeakMap,Ut=new WeakMap,Dn=new WeakMap,nt=new WeakMap,Jo=new WeakMap,An=new WeakMap,Rt=new WeakSet,km=function(){return this.state.fetchStatus==="paused"&&this.state.status==="pending"},yr=function(o){const a=d=>{switch(o.type){case"failed":return{...d,fetchFailureCount:o.failureCount,fetchFailureReason:o.error};case"pause":return{...d,fetchStatus:"paused"};case"continue":return{...d,fetchStatus:"fetching"};case"fetch":return{...d,...Nm(d.data,this.options),fetchMeta:o.meta??null};case"success":const u={...d,...Sp(o.data,o.dataUpdatedAt),dataUpdateCount:d.dataUpdateCount+1,...!o.manual&&{fetchStatus:"idle",fetchFailureCount:0,fetchFailureReason:null}};return se(this,Rs,o.manual?u:void 0),u;case"error":const f=o.error;return{...d,error:f,errorUpdateCount:d.errorUpdateCount+1,errorUpdatedAt:Date.now(),fetchFailureCount:d.fetchFailureCount+1,fetchFailureReason:f,fetchStatus:"idle",status:"error",isInvalidated:!0};case"invalidate":return{...d,isInvalidated:!0};case"setState":return{...d,...o.state}}};this.state=a(this.state),lt.batch(()=>{this.observers.forEach(d=>{d.onQueryUpdate()}),N(this,Ut).notify({query:this,type:"updated",action:o})})},am);function Nm(s,o){return{fetchFailureCount:0,fetchFailureReason:null,fetchStatus:bm(o.networkMode)?"fetching":"paused",...s===void 0&&{error:null,status:"pending"}}}function Sp(s,o){return{data:s,dataUpdatedAt:o??Date.now(),error:null,isInvalidated:!1,status:"success"}}function Cp(s){const o=typeof s.initialData=="function"?s.initialData():s.initialData,a=o!==void 0,d=a?typeof s.initialDataUpdatedAt=="function"?s.initialDataUpdatedAt():s.initialDataUpdatedAt:0;return{data:o,dataUpdateCount:0,dataUpdatedAt:a?d??Date.now():0,error:null,errorUpdateCount:0,errorUpdatedAt:0,fetchFailureCount:0,fetchFailureReason:null,fetchMeta:null,isInvalidated:!1,status:a?"success":"pending",fetchStatus:"idle"}}var kt,Re,Xo,ht,Tn,Os,br,en,el,Ds,As,zn,Ln,tn,Ts,ze,Io,Wd,Kd,Qd,qd,Zd,Yd,Jd,Sm,im,Zg=(im=class extends nl{constructor(o,a){super();be(this,ze);be(this,kt);be(this,Re);be(this,Xo);be(this,ht);be(this,Tn);be(this,Os);be(this,br);be(this,en);be(this,el);be(this,Ds);be(this,As);be(this,zn);be(this,Ln);be(this,tn);be(this,Ts,new Set);this.options=a,se(this,kt,o),se(this,en,null),se(this,br,Gd()),this.bindMethods(),this.setOptions(a)}bindMethods(){this.refetch=this.refetch.bind(this)}onSubscribe(){this.listeners.size===1&&(N(this,Re).addObserver(this),Ep(N(this,Re),this.options)?Me(this,ze,Io).call(this):this.updateResult(),Me(this,ze,qd).call(this))}onUnsubscribe(){this.hasListeners()||this.destroy()}shouldFetchOnReconnect(){return Xd(N(this,Re),this.options,this.options.refetchOnReconnect)}shouldFetchOnWindowFocus(){return Xd(N(this,Re),this.options,this.options.refetchOnWindowFocus)}destroy(){this.listeners=new Set,Me(this,ze,Zd).call(this),Me(this,ze,Yd).call(this),N(this,Re).removeObserver(this)}setOptions(o){const a=this.options,d=N(this,Re);if(this.options=N(this,kt).defaultQueryOptions(o),this.options.enabled!==void 0&&typeof this.options.enabled!="boolean"&&typeof this.options.enabled!="function"&&typeof Ot(this.options.enabled,N(this,Re))!="boolean")throw new Error("Expected enabled to be a boolean or a callback that returns a boolean");Me(this,ze,Jd).call(this),N(this,Re).setOptions(this.options),a._defaulted&&!Ud(this.options,a)&&N(this,kt).getQueryCache().notify({type:"observerOptionsUpdated",query:N(this,Re),observer:this});const u=this.hasListeners();u&&_p(N(this,Re),d,this.options,a)&&Me(this,ze,Io).call(this),this.updateResult(),u&&(N(this,Re)!==d||Ot(this.options.enabled,N(this,Re))!==Ot(a.enabled,N(this,Re))||on(this.options.staleTime,N(this,Re))!==on(a.staleTime,N(this,Re)))&&Me(this,ze,Wd).call(this);const f=Me(this,ze,Kd).call(this);u&&(N(this,Re)!==d||Ot(this.options.enabled,N(this,Re))!==Ot(a.enabled,N(this,Re))||f!==N(this,tn))&&Me(this,ze,Qd).call(this,f)}getOptimisticResult(o){const a=N(this,kt).getQueryCache().build(N(this,kt),o),d=this.createResult(a,o);return Jg(this,d)&&(se(this,ht,d),se(this,Os,this.options),se(this,Tn,N(this,Re).state)),d}getCurrentResult(){return N(this,ht)}trackResult(o,a){return new Proxy(o,{get:(d,u)=>(this.trackProp(u),a==null||a(u),u==="promise"&&(this.trackProp("data"),!this.options.experimental_prefetchInRender&&N(this,br).status==="pending"&&N(this,br).reject(new Error("experimental_prefetchInRender feature flag is not enabled"))),Reflect.get(d,u))})}trackProp(o){N(this,Ts).add(o)}getCurrentQuery(){return N(this,Re)}refetch({...o}={}){return this.fetch({...o})}fetchOptimistic(o){const a=N(this,kt).defaultQueryOptions(o),d=N(this,kt).getQueryCache().build(N(this,kt),a);return d.fetch().then(()=>this.createResult(d,a))}fetch(o){return Me(this,ze,Io).call(this,{...o,cancelRefetch:o.cancelRefetch??!0}).then(()=>(this.updateResult(),N(this,ht)))}createResult(o,a){var oe;const d=N(this,Re),u=this.options,f=N(this,ht),h=N(this,Tn),p=N(this,Os),x=o!==d?o.state:N(this,Xo),{state:b}=o;let w={...b},P=!1,R;if(a._optimisticResults){const me=this.hasListeners(),xe=!me&&Ep(o,a),G=me&&_p(o,d,a,u);(xe||G)&&(w={...w,...Nm(b.data,o.options)}),a._optimisticResults==="isRestoring"&&(w.fetchStatus="idle")}let{error:O,errorUpdatedAt:E,status:k}=w;R=w.data;let C=!1;if(a.placeholderData!==void 0&&R===void 0&&k==="pending"){let me;f!=null&&f.isPlaceholderData&&a.placeholderData===(p==null?void 0:p.placeholderData)?(me=f.data,C=!0):me=typeof a.placeholderData=="function"?a.placeholderData((oe=N(this,As))==null?void 0:oe.state.data,N(this,As)):a.placeholderData,me!==void 0&&(k="success",R=Hd(f==null?void 0:f.data,me,a),P=!0)}if(a.select&&R!==void 0&&!C)if(f&&R===(h==null?void 0:h.data)&&a.select===N(this,el))R=N(this,Ds);else try{se(this,el,a.select),R=a.select(R),R=Hd(f==null?void 0:f.data,R,a),se(this,Ds,R),se(this,en,null)}catch(me){se(this,en,me)}N(this,en)&&(O=N(this,en),R=N(this,Ds),E=Date.now(),k="error");const I=w.fetchStatus==="fetching",B=k==="pending",z=k==="error",$=B&&I,L=R!==void 0,re={status:k,fetchStatus:w.fetchStatus,isPending:B,isSuccess:k==="success",isError:z,isInitialLoading:$,isLoading:$,data:R,dataUpdatedAt:w.dataUpdatedAt,error:O,errorUpdatedAt:E,failureCount:w.fetchFailureCount,failureReason:w.fetchFailureReason,errorUpdateCount:w.errorUpdateCount,isFetched:o.isFetched(),isFetchedAfterMount:w.dataUpdateCount>x.dataUpdateCount||w.errorUpdateCount>x.errorUpdateCount,isFetching:I,isRefetching:I&&!B,isLoadingError:z&&!L,isPaused:w.fetchStatus==="paused",isPlaceholderData:P,isRefetchError:z&&L,isStale:gc(o,a),refetch:this.refetch,promise:N(this,br),isEnabled:Ot(a.enabled,o)!==!1};if(this.options.experimental_prefetchInRender){const me=re.data!==void 0,xe=re.status==="error"&&!me,G=Ee=>{xe?Ee.reject(re.error):me&&Ee.resolve(re.data)},Pe=()=>{const Ee=se(this,br,re.promise=Gd());G(Ee)},we=N(this,br);switch(we.status){case"pending":o.queryHash===d.queryHash&&G(we);break;case"fulfilled":(xe||re.data!==we.value)&&Pe();break;case"rejected":(!xe||re.error!==we.reason)&&Pe();break}}return re}updateResult(){const o=N(this,ht),a=this.createResult(N(this,Re),this.options);if(se(this,Tn,N(this,Re).state),se(this,Os,this.options),N(this,Tn).data!==void 0&&se(this,As,N(this,Re)),Ud(a,o))return;se(this,ht,a);const d=()=>{if(!o)return!0;const{notifyOnChangeProps:u}=this.options,f=typeof u=="function"?u():u;if(f==="all"||!f&&!N(this,Ts).size)return!0;const h=new Set(f??N(this,Ts));return this.options.throwOnError&&h.add("error"),Object.keys(N(this,ht)).some(p=>{const v=p;return N(this,ht)[v]!==o[v]&&h.has(v)})};Me(this,ze,Sm).call(this,{listeners:d()})}onQueryUpdate(){this.updateResult(),this.hasListeners()&&Me(this,ze,qd).call(this)}},kt=new WeakMap,Re=new WeakMap,Xo=new WeakMap,ht=new WeakMap,Tn=new WeakMap,Os=new WeakMap,br=new WeakMap,en=new WeakMap,el=new WeakMap,Ds=new WeakMap,As=new WeakMap,zn=new WeakMap,Ln=new WeakMap,tn=new WeakMap,Ts=new WeakMap,ze=new WeakSet,Io=function(o){Me(this,ze,Jd).call(this);let a=N(this,Re).fetch(this.options,o);return o!=null&&o.throwOnError||(a=a.catch(Nt)),a},Wd=function(){Me(this,ze,Zd).call(this);const o=on(this.options.staleTime,N(this,Re));if(Bo.isServer()||N(this,ht).isStale||!$d(o))return;const d=xm(N(this,ht).dataUpdatedAt,o)+1;se(this,zn,Mn.setTimeout(()=>{N(this,ht).isStale||this.updateResult()},d))},Kd=function(){return(typeof this.options.refetchInterval=="function"?this.options.refetchInterval(N(this,Re)):this.options.refetchInterval)??!1},Qd=function(o){Me(this,ze,Yd).call(this),se(this,tn,o),!(Bo.isServer()||Ot(this.options.enabled,N(this,Re))===!1||!$d(N(this,tn))||N(this,tn)===0)&&se(this,Ln,Mn.setInterval(()=>{(this.options.refetchIntervalInBackground||mc.isFocused())&&Me(this,ze,Io).call(this)},N(this,tn)))},qd=function(){Me(this,ze,Wd).call(this),Me(this,ze,Qd).call(this,Me(this,ze,Kd).call(this))},Zd=function(){N(this,zn)!==void 0&&(Mn.clearTimeout(N(this,zn)),se(this,zn,void 0))},Yd=function(){N(this,Ln)!==void 0&&(Mn.clearInterval(N(this,Ln)),se(this,Ln,void 0))},Jd=function(){const o=N(this,kt).getQueryCache().build(N(this,kt),this.options);if(o===N(this,Re))return;const a=N(this,Re);se(this,Re,o),se(this,Xo,o.state),this.hasListeners()&&(a==null||a.removeObserver(this),o.addObserver(this))},Sm=function(o){lt.batch(()=>{o.listeners&&this.listeners.forEach(a=>{a(N(this,ht))}),N(this,kt).getQueryCache().notify({query:N(this,Re),type:"observerResultsUpdated"})})},im);function Yg(s,o){return Ot(o.enabled,s)!==!1&&s.state.data===void 0&&!(s.state.status==="error"&&Ot(o.retryOnMount,s)===!1)}function Ep(s,o){return Yg(s,o)||s.state.data!==void 0&&Xd(s,o,o.refetchOnMount)}function Xd(s,o,a){if(Ot(o.enabled,s)!==!1&&on(o.staleTime,s)!=="static"){const d=typeof a=="function"?a(s):a;return d==="always"||d!==!1&&gc(s,o)}return!1}function _p(s,o,a,d){return(s!==o||Ot(d.enabled,s)===!1)&&(!a.suspense||s.state.status!=="error")&&gc(s,a)}function gc(s,o){return Ot(o.enabled,s)!==!1&&s.isStaleByTime(on(o.staleTime,s))}function Jg(s,o){return!Ud(s.getCurrentResult(),o)}var tl,sr,ft,Fn,or,qr,dm,Xg=(dm=class extends jm{constructor(o){super();be(this,or);be(this,tl);be(this,sr);be(this,ft);be(this,Fn);se(this,tl,o.client),this.mutationId=o.mutationId,se(this,ft,o.mutationCache),se(this,sr,[]),this.state=o.state||e0(),this.setOptions(o.options),this.scheduleGc()}setOptions(o){this.options=o,this.updateGcTime(this.options.gcTime)}get meta(){return this.options.meta}addObserver(o){N(this,sr).includes(o)||(N(this,sr).push(o),this.clearGcTimeout(),N(this,ft).notify({type:"observerAdded",mutation:this,observer:o}))}removeObserver(o){se(this,sr,N(this,sr).filter(a=>a!==o)),this.scheduleGc(),N(this,ft).notify({type:"observerRemoved",mutation:this,observer:o})}optionalRemove(){N(this,sr).length||(this.state.status==="pending"?this.scheduleGc():N(this,ft).remove(this))}continue(){var o;return((o=N(this,Fn))==null?void 0:o.continue())??this.execute(this.state.variables)}async execute(o){var h,p,v,x,b,w,P,R,O,E,k,C,I,B,z,$,L,H;const a=()=>{Me(this,or,qr).call(this,{type:"continue"})},d={client:N(this,tl),meta:this.options.meta,mutationKey:this.options.mutationKey};se(this,Fn,wm({fn:()=>this.options.mutationFn?this.options.mutationFn(o,d):Promise.reject(new Error("No mutationFn found")),onFail:(re,oe)=>{Me(this,or,qr).call(this,{type:"failed",failureCount:re,error:oe})},onPause:()=>{Me(this,or,qr).call(this,{type:"pause"})},onContinue:a,retry:this.options.retry??0,retryDelay:this.options.retryDelay,networkMode:this.options.networkMode,canRun:()=>N(this,ft).canRun(this)}));const u=this.state.status==="pending",f=!N(this,Fn).canStart();try{if(u)a();else{Me(this,or,qr).call(this,{type:"pending",variables:o,isPaused:f}),N(this,ft).config.onMutate&&await N(this,ft).config.onMutate(o,this,d);const oe=await((p=(h=this.options).onMutate)==null?void 0:p.call(h,o,d));oe!==this.state.context&&Me(this,or,qr).call(this,{type:"pending",context:oe,variables:o,isPaused:f})}const re=await N(this,Fn).start();return await((x=(v=N(this,ft).config).onSuccess)==null?void 0:x.call(v,re,o,this.state.context,this,d)),await((w=(b=this.options).onSuccess)==null?void 0:w.call(b,re,o,this.state.context,d)),await((R=(P=N(this,ft).config).onSettled)==null?void 0:R.call(P,re,null,this.state.variables,this.state.context,this,d)),await((E=(O=this.options).onSettled)==null?void 0:E.call(O,re,null,o,this.state.context,d)),Me(this,or,qr).call(this,{type:"success",data:re}),re}catch(re){try{await((C=(k=N(this,ft).config).onError)==null?void 0:C.call(k,re,o,this.state.context,this,d))}catch(oe){Promise.reject(oe)}try{await((B=(I=this.options).onError)==null?void 0:B.call(I,re,o,this.state.context,d))}catch(oe){Promise.reject(oe)}try{await(($=(z=N(this,ft).config).onSettled)==null?void 0:$.call(z,void 0,re,this.state.variables,this.state.context,this,d))}catch(oe){Promise.reject(oe)}try{await((H=(L=this.options).onSettled)==null?void 0:H.call(L,void 0,re,o,this.state.context,d))}catch(oe){Promise.reject(oe)}throw Me(this,or,qr).call(this,{type:"error",error:re}),re}finally{N(this,ft).runNext(this)}}},tl=new WeakMap,sr=new WeakMap,ft=new WeakMap,Fn=new WeakMap,or=new WeakSet,qr=function(o){const a=d=>{switch(o.type){case"failed":return{...d,failureCount:o.failureCount,failureReason:o.error};case"pause":return{...d,isPaused:!0};case"continue":return{...d,isPaused:!1};case"pending":return{...d,context:o.context,data:void 0,failureCount:0,failureReason:null,error:null,isPaused:o.isPaused,status:"pending",variables:o.variables,submittedAt:Date.now()};case"success":return{...d,data:o.data,failureCount:0,failureReason:null,error:null,status:"success",isPaused:!1};case"error":return{...d,data:void 0,error:o.error,failureCount:d.failureCount+1,failureReason:o.error,isPaused:!1,status:"error"}}};this.state=a(this.state),lt.batch(()=>{N(this,sr).forEach(d=>{d.onMutationUpdate(o)}),N(this,ft).notify({mutation:this,type:"updated",action:o})})},dm);function e0(){return{context:void 0,data:void 0,error:null,failureCount:0,failureReason:null,isPaused:!1,status:"idle",variables:void 0,submittedAt:0}}var wr,qt,rl,cm,t0=(cm=class extends nl{constructor(o={}){super();be(this,wr);be(this,qt);be(this,rl);this.config=o,se(this,wr,new Set),se(this,qt,new Map),se(this,rl,0)}build(o,a,d){const u=new Xg({client:o,mutationCache:this,mutationId:++ma(this,rl)._,options:o.defaultMutationOptions(a),state:d});return this.add(u),u}add(o){N(this,wr).add(o);const a=xa(o);if(typeof a=="string"){const d=N(this,qt).get(a);d?d.push(o):N(this,qt).set(a,[o])}this.notify({type:"added",mutation:o})}remove(o){if(N(this,wr).delete(o)){const a=xa(o);if(typeof a=="string"){const d=N(this,qt).get(a);if(d)if(d.length>1){const u=d.indexOf(o);u!==-1&&d.splice(u,1)}else d[0]===o&&N(this,qt).delete(a)}}this.notify({type:"removed",mutation:o})}canRun(o){const a=xa(o);if(typeof a=="string"){const d=N(this,qt).get(a),u=d==null?void 0:d.find(f=>f.state.status==="pending");return!u||u===o}else return!0}runNext(o){var d;const a=xa(o);if(typeof a=="string"){const u=(d=N(this,qt).get(a))==null?void 0:d.find(f=>f!==o&&f.state.isPaused);return(u==null?void 0:u.continue())??Promise.resolve()}else return Promise.resolve()}clear(){lt.batch(()=>{N(this,wr).forEach(o=>{this.notify({type:"removed",mutation:o})}),N(this,wr).clear(),N(this,qt).clear()})}getAll(){return Array.from(N(this,wr))}find(o){const a={exact:!0,...o};return this.getAll().find(d=>wp(a,d))}findAll(o={}){return this.getAll().filter(a=>wp(o,a))}notify(o){lt.batch(()=>{this.listeners.forEach(a=>{a(o)})})}resumePausedMutations(){const o=this.getAll().filter(a=>a.state.isPaused);return lt.batch(()=>Promise.all(o.map(a=>a.continue().catch(Nt))))}},wr=new WeakMap,qt=new WeakMap,rl=new WeakMap,cm);function xa(s){var o;return(o=s.options.scope)==null?void 0:o.id}var lr,um,r0=(um=class extends nl{constructor(o={}){super();be(this,lr);this.config=o,se(this,lr,new Map)}build(o,a,d){const u=a.queryKey,f=a.queryHash??hc(u,a);let h=this.get(f);return h||(h=new qg({client:o,queryKey:u,queryHash:f,options:o.defaultQueryOptions(a),state:d,defaultOptions:o.getQueryDefaults(u)}),this.add(h)),h}add(o){N(this,lr).has(o.queryHash)||(N(this,lr).set(o.queryHash,o),this.notify({type:"added",query:o}))}remove(o){const a=N(this,lr).get(o.queryHash);a&&(o.destroy(),a===o&&N(this,lr).delete(o.queryHash),this.notify({type:"removed",query:o}))}clear(){lt.batch(()=>{this.getAll().forEach(o=>{this.remove(o)})})}get(o){return N(this,lr).get(o)}getAll(){return[...N(this,lr).values()]}find(o){const a={exact:!0,...o};return this.getAll().find(d=>bp(a,d))}findAll(o={}){const a=this.getAll();return Object.keys(o).length>0?a.filter(d=>bp(o,d)):a}notify(o){lt.batch(()=>{this.listeners.forEach(a=>{a(o)})})}onFocus(){lt.batch(()=>{this.getAll().forEach(o=>{o.onFocus()})})}onOnline(){lt.batch(()=>{this.getAll().forEach(o=>{o.onOnline()})})}},lr=new WeakMap,um),Ke,rn,nn,zs,Ls,sn,Fs,Is,fm,n0=(fm=class{constructor(s={}){be(this,Ke);be(this,rn);be(this,nn);be(this,zs);be(this,Ls);be(this,sn);be(this,Fs);be(this,Is);se(this,Ke,s.queryCache||new r0),se(this,rn,s.mutationCache||new t0),se(this,nn,s.defaultOptions||{}),se(this,zs,new Map),se(this,Ls,new Map),se(this,sn,0)}mount(){ma(this,sn)._++,N(this,sn)===1&&(se(this,Fs,mc.subscribe(async s=>{s&&(await this.resumePausedMutations(),N(this,Ke).onFocus())})),se(this,Is,Pa.subscribe(async s=>{s&&(await this.resumePausedMutations(),N(this,Ke).onOnline())})))}unmount(){var s,o;ma(this,sn)._--,N(this,sn)===0&&((s=N(this,Fs))==null||s.call(this),se(this,Fs,void 0),(o=N(this,Is))==null||o.call(this),se(this,Is,void 0))}isFetching(s){return N(this,Ke).findAll({...s,fetchStatus:"fetching"}).length}isMutating(s){return N(this,rn).findAll({...s,status:"pending"}).length}getQueryData(s){var a;const o=this.defaultQueryOptions({queryKey:s});return(a=N(this,Ke).get(o.queryHash))==null?void 0:a.state.data}ensureQueryData(s){const o=this.defaultQueryOptions(s),a=N(this,Ke).build(this,o),d=a.state.data;return d===void 0?this.fetchQuery(s):(s.revalidateIfStale&&a.isStaleByTime(on(o.staleTime,a))&&this.prefetchQuery(o),Promise.resolve(d))}getQueriesData(s){return N(this,Ke).findAll(s).map(({queryKey:o,state:a})=>{const d=a.data;return[o,d]})}setQueryData(s,o,a){const d=this.defaultQueryOptions({queryKey:s}),u=N(this,Ke).get(d.queryHash),f=u==null?void 0:u.state.data,h=Lg(o,f);if(h!==void 0)return N(this,Ke).build(this,d).setData(h,{...a,manual:!0})}setQueriesData(s,o,a){return lt.batch(()=>N(this,Ke).findAll(s).map(({queryKey:d})=>[d,this.setQueryData(d,o,a)]))}getQueryState(s){var a;const o=this.defaultQueryOptions({queryKey:s});return(a=N(this,Ke).get(o.queryHash))==null?void 0:a.state}removeQueries(s){const o=N(this,Ke);lt.batch(()=>{o.findAll(s).forEach(a=>{o.remove(a)})})}resetQueries(s,o){const a=N(this,Ke);return lt.batch(()=>(a.findAll(s).forEach(d=>{d.reset()}),this.refetchQueries({type:"active",...s},o)))}cancelQueries(s,o={}){const a={revert:!0,...o},d=lt.batch(()=>N(this,Ke).findAll(s).map(u=>u.cancel(a)));return Promise.all(d).then(Nt).catch(Nt)}invalidateQueries(s,o={}){return lt.batch(()=>(N(this,Ke).findAll(s).forEach(a=>{a.invalidate()}),(s==null?void 0:s.refetchType)==="none"?Promise.resolve():this.refetchQueries({...s,type:(s==null?void 0:s.refetchType)??(s==null?void 0:s.type)??"active"},o)))}refetchQueries(s,o={}){const a={...o,cancelRefetch:o.cancelRefetch??!0},d=lt.batch(()=>N(this,Ke).findAll(s).filter(u=>!u.isDisabled()&&!u.isStatic()).map(u=>{let f=u.fetch(void 0,a);return a.throwOnError||(f=f.catch(Nt)),u.state.fetchStatus==="paused"?Promise.resolve():f}));return Promise.all(d).then(Nt)}fetchQuery(s){const o=this.defaultQueryOptions(s);o.retry===void 0&&(o.retry=!1);const a=N(this,Ke).build(this,o);return a.isStaleByTime(on(o.staleTime,a))?a.fetch(o):Promise.resolve(a.state.data)}prefetchQuery(s){return this.fetchQuery(s).then(Nt).catch(Nt)}fetchInfiniteQuery(s){return s._type="infinite",this.fetchQuery(s)}prefetchInfiniteQuery(s){return this.fetchInfiniteQuery(s).then(Nt).catch(Nt)}ensureInfiniteQueryData(s){return s._type="infinite",this.ensureQueryData(s)}resumePausedMutations(){return Pa.isOnline()?N(this,rn).resumePausedMutations():Promise.resolve()}getQueryCache(){return N(this,Ke)}getMutationCache(){return N(this,rn)}getDefaultOptions(){return N(this,nn)}setDefaultOptions(s){se(this,nn,s)}setQueryDefaults(s,o){N(this,zs).set($o(s),{queryKey:s,defaultOptions:o})}getQueryDefaults(s){const o=[...N(this,zs).values()],a={};return o.forEach(d=>{Uo(s,d.queryKey)&&Object.assign(a,d.defaultOptions)}),a}setMutationDefaults(s,o){N(this,Ls).set($o(s),{mutationKey:s,defaultOptions:o})}getMutationDefaults(s){const o=[...N(this,Ls).values()],a={};return o.forEach(d=>{Uo(s,d.mutationKey)&&Object.assign(a,d.defaultOptions)}),a}defaultQueryOptions(s){if(s._defaulted)return s;const o={...N(this,nn).queries,...this.getQueryDefaults(s.queryKey),...s,_defaulted:!0};return o.queryHash||(o.queryHash=hc(o.queryKey,o)),o.refetchOnReconnect===void 0&&(o.refetchOnReconnect=o.networkMode!=="always"),o.throwOnError===void 0&&(o.throwOnError=!!o.suspense),!o.networkMode&&o.persister&&(o.networkMode="offlineFirst"),o.queryFn===xc&&(o.enabled=!1),o}defaultMutationOptions(s){return s!=null&&s._defaulted?s:{...N(this,nn).mutations,...(s==null?void 0:s.mutationKey)&&this.getMutationDefaults(s.mutationKey),...s,_defaulted:!0}}clear(){N(this,Ke).clear(),N(this,rn).clear()}},Ke=new WeakMap,rn=new WeakMap,nn=new WeakMap,zs=new WeakMap,Ls=new WeakMap,sn=new WeakMap,Fs=new WeakMap,Is=new WeakMap,fm),Cm=g.createContext(void 0),cn=s=>{const o=g.useContext(Cm);if(!o)throw new Error("No QueryClient set, use QueryClientProvider to set one");return o},s0=({client:s,children:o})=>(g.useEffect(()=>(s.mount(),()=>{s.unmount()}),[s]),r.jsx(Cm.Provider,{value:s,children:o})),Em=g.createContext(!1),o0=()=>g.useContext(Em);Em.Provider;function l0(){let s=!1;return{clearReset:()=>{s=!1},reset:()=>{s=!0},isReset:()=>s}}var a0=g.createContext(l0()),i0=()=>g.useContext(a0),d0=(s,o,a)=>{const d=a!=null&&a.state.error&&typeof s.throwOnError=="function"?ym(s.throwOnError,[a.state.error,a]):s.throwOnError;(s.suspense||s.experimental_prefetchInRender||d)&&(o.isReset()||(s.retryOnMount=!1))},c0=s=>{g.useEffect(()=>{s.clearReset()},[s])},u0=({result:s,errorResetBoundary:o,throwOnError:a,query:d,suspense:u})=>s.isError&&!o.isReset()&&!s.isFetching&&d&&(u&&s.data===void 0||ym(a,[s.error,d])),f0=s=>{if(s.suspense){const a=u=>u==="static"?u:Math.max(u??1e3,1e3),d=s.staleTime;s.staleTime=typeof d=="function"?(...u)=>a(d(...u)):a(d),typeof s.gcTime=="number"&&(s.gcTime=Math.max(s.gcTime,1e3))}},p0=(s,o)=>s.isLoading&&s.isFetching&&!o,m0=(s,o)=>(s==null?void 0:s.suspense)&&o.isPending,Mp=(s,o,a)=>o.fetchOptimistic(s).catch(()=>{a.clearReset()});function h0(s,o,a){var R,O,E,k;const d=o0(),u=i0(),f=cn(),h=f.defaultQueryOptions(s);(O=(R=f.getDefaultOptions().queries)==null?void 0:R._experimental_beforeQuery)==null||O.call(R,h);const p=f.getQueryCache().get(h.queryHash),v=s.subscribed!==!1;h._optimisticResults=d?"isRestoring":v?"optimistic":void 0,f0(h),d0(h,u,p),c0(u);const x=!f.getQueryCache().get(h.queryHash),[b]=g.useState(()=>new o(f,h)),w=b.getOptimisticResult(h),P=!d&&v;if(g.useSyncExternalStore(g.useCallback(C=>{const I=P?b.subscribe(lt.batchCalls(C)):Nt;return b.updateResult(),I},[b,P]),()=>b.getCurrentResult(),()=>b.getCurrentResult()),g.useEffect(()=>{b.setOptions(h)},[h,b]),m0(h,w))throw Mp(h,b,u);if(u0({result:w,errorResetBoundary:u,throwOnError:h.throwOnError,query:p,suspense:h.suspense}))throw w.error;if((k=(E=f.getDefaultOptions().queries)==null?void 0:E._experimental_afterQuery)==null||k.call(E,h,w),h.experimental_prefetchInRender&&!Bo.isServer()&&p0(w,d)){const C=x?Mp(h,b,u):p==null?void 0:p.promise;C==null||C.catch(Nt).finally(()=>{b.updateResult()})}return h.notifyOnChangeProps?w:b.trackResult(w)}function Ct(s,o){return h0(s,Zg)}/** + * @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=s=>s.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),_m=(...s)=>s.filter((o,a,d)=>!!o&&o.trim()!==""&&d.indexOf(o)===a).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 g0={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 v0=g.forwardRef(({color:s="currentColor",size:o=24,strokeWidth:a=2,absoluteStrokeWidth:d,className:u="",children:f,iconNode:h,...p},v)=>g.createElement("svg",{ref:v,...g0,width:o,height:o,stroke:s,strokeWidth:d?Number(a)*24/Number(o):a,className:_m("lucide",u),...p},[...h.map(([x,b])=>g.createElement(x,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 pe=(s,o)=>{const a=g.forwardRef(({className:d,...u},f)=>g.createElement(v0,{ref:f,iconNode:o,className:_m(`lucide-${x0(s)}`,d),...u}));return a.displayName=`${s}`,a};/** + * @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 Ho=pe("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 Pp=pe("ArrowRight",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"m12 5 7 7-7 7",key:"xquz4c"}]]);/** + * @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 Mm=pe("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 $s=pe("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 y0=pe("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 Go=pe("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 ir=pe("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 b0=pe("ChevronDown",[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]]);/** + * @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 w0=pe("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 j0=pe("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 k0=pe("ChevronUp",[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]]);/** + * @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 N0=pe("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 S0=pe("Clock",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["polyline",{points:"12 6 12 12 16 14",key:"68esgv"}]]);/** + * @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 ec=pe("Code",[["polyline",{points:"16 18 22 12 16 6",key:"z7tu5w"}],["polyline",{points:"8 6 2 12 8 18",key:"1eg1df"}]]);/** + * @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 C0=pe("Coins",[["circle",{cx:"8",cy:"8",r:"6",key:"3yglwk"}],["path",{d:"M18.09 10.37A6 6 0 1 1 10.34 18",key:"t5s6rm"}],["path",{d:"M7 6h1v4",key:"1obek4"}],["path",{d:"m16.71 13.88.7.71-2.82 2.82",key:"1rbuyh"}]]);/** + * @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 E0=pe("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 tc=pe("Compass",[["path",{d:"m16.24 7.76-1.804 5.411a2 2 0 0 1-1.265 1.265L7.76 16.24l1.804-5.411a2 2 0 0 1 1.265-1.265z",key:"9ktpf1"}],["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]]);/** + * @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 _0=pe("Construction",[["rect",{x:"2",y:"6",width:"20",height:"8",rx:"1",key:"1estib"}],["path",{d:"M17 14v7",key:"7m2elx"}],["path",{d:"M7 14v7",key:"1cm7wv"}],["path",{d:"M17 3v3",key:"1v4jwn"}],["path",{d:"M7 3v3",key:"7o6guu"}],["path",{d:"M10 14 2.3 6.3",key:"1023jk"}],["path",{d:"m14 6 7.7 7.7",key:"1s8pl2"}],["path",{d:"m8 6 8 8",key:"hl96qh"}]]);/** + * @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 Pm=pe("Copy",[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2",key:"17jyea"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",key:"zix9uf"}]]);/** + * @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 Dt=pe("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 an=pe("Download",[["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["polyline",{points:"7 10 12 15 17 10",key:"2ggqvy"}],["line",{x1:"12",x2:"12",y1:"15",y2:"3",key:"1vk2je"}]]);/** + * @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 Ra=pe("ExternalLink",[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"M10 14 21 3",key:"gplh6r"}],["path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6",key:"a6xqqp"}]]);/** + * @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 Rp=pe("EyeOff",[["path",{d:"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49",key:"ct8e1f"}],["path",{d:"M14.084 14.158a3 3 0 0 1-4.242-4.242",key:"151rxh"}],["path",{d:"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143",key:"13bj9a"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]]);/** + * @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 rc=pe("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 M0=pe("FolderOpen",[["path",{d:"m6 14 1.5-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.54 6a2 2 0 0 1-1.95 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H18a2 2 0 0 1 2 2v2",key:"usdka0"}]]);/** + * @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 P0=pe("Globe",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20",key:"13o1zl"}],["path",{d:"M2 12h20",key:"9i4pu4"}]]);/** + * @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 Ea=pe("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 R0=pe("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 O0=pe("Key",[["path",{d:"m15.5 7.5 2.3 2.3a1 1 0 0 0 1.4 0l2.1-2.1a1 1 0 0 0 0-1.4L19 4",key:"g0fldk"}],["path",{d:"m21 2-9.6 9.6",key:"1j0ho8"}],["circle",{cx:"7.5",cy:"15.5",r:"5.5",key:"yqb3hr"}]]);/** + * @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 Vo=pe("Layers",[["path",{d:"m12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83Z",key:"8b97xw"}],["path",{d:"m22 17.65-9.17 4.16a2 2 0 0 1-1.66 0L2 17.65",key:"dd6zsq"}],["path",{d:"m22 12.65-9.17 4.16a2 2 0 0 1-1.66 0L2 12.65",key:"ep9fru"}]]);/** + * @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 D0=pe("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 A0=pe("Monitor",[["rect",{width:"20",height:"14",x:"2",y:"3",rx:"2",key:"48i651"}],["line",{x1:"8",x2:"16",y1:"21",y2:"21",key:"1svkeh"}],["line",{x1:"12",x2:"12",y1:"17",y2:"21",key:"vw1qmm"}]]);/** + * @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 T0=pe("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 z0=pe("PenLine",[["path",{d:"M12 20h9",key:"t2du7b"}],["path",{d:"M16.376 3.622a1 1 0 0 1 3.002 3.002L7.368 18.635a2 2 0 0 1-.855.506l-2.872.838a.5.5 0 0 1-.62-.62l.838-2.872a2 2 0 0 1 .506-.854z",key:"1ykcvy"}]]);/** + * @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 L0=pe("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 Rm=pe("Plus",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]]);/** + * @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 Om=pe("Power",[["path",{d:"M12 2v10",key:"mnfbl"}],["path",{d:"M18.4 6.6a9 9 0 1 1-12.77.04",key:"obofu9"}]]);/** + * @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 In=pe("RefreshCw",[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]]);/** + * @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=pe("Save",[["path",{d:"M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z",key:"1c8476"}],["path",{d:"M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7",key:"1ydtos"}],["path",{d:"M7 3v4a1 1 0 0 0 1 1h7",key:"t51u73"}]]);/** + * @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 I0=pe("Scroll",[["path",{d:"M19 17V5a2 2 0 0 0-2-2H4",key:"zz82l3"}],["path",{d:"M8 21h12a2 2 0 0 0 2-2v-1a1 1 0 0 0-1-1H11a1 1 0 0 0-1 1v1a2 2 0 1 1-4 0V5a2 2 0 1 0-4 0v2a1 1 0 0 0 1 1h3",key:"1ph1d7"}]]);/** + * @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 vc=pe("Search",[["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}],["path",{d:"m21 21-4.3-4.3",key:"1qie3q"}]]);/** + * @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 $0=pe("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 U0=pe("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 Us=pe("Shield",[["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"}]]);/** + * @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 B0=pe("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 Dm=pe("Star",[["path",{d:"M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z",key:"r04s7s"}]]);/** + * @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 H0=pe("Tag",[["path",{d:"M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z",key:"vktsd0"}],["circle",{cx:"7.5",cy:"7.5",r:".5",fill:"currentColor",key:"kqv944"}]]);/** + * @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 Oa=pe("Terminal",[["polyline",{points:"4 17 10 11 4 5",key:"akl6gq"}],["line",{x1:"12",x2:"20",y1:"19",y2:"19",key:"q2wloq"}]]);/** + * @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 nc=pe("Trash2",[["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6",key:"4alrt4"}],["path",{d:"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2",key:"v07s0e"}],["line",{x1:"10",x2:"10",y1:"11",y2:"17",key:"1uufr5"}],["line",{x1:"14",x2:"14",y1:"11",y2:"17",key:"xtxkd"}]]);/** + * @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 Wo=pe("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 G0=pe("User",[["path",{d:"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2",key:"975kel"}],["circle",{cx:"12",cy:"7",r:"4",key:"17ys0d"}]]);/** + * @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 Ko=pe("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 jr=pe("X",[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]]);/** + * @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 Qo=pe("Zap",[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",key:"1xq2db"}]]),sc=[{id:"dashboard",label:"Zentrale",hint:"System- & Stack-Status",icon:D0},{id:"models",label:"Modell-Manager",hint:"Verwalten, laden & Gateway-Routing",icon:y0},{id:"system",label:"Diagnose",hint:"Metriken, Dienste, Logs",icon:Dt},{id:"memory",label:"Gedächtnis",hint:"Geteiltes Memory verwalten",icon:Go},{id:"connect",label:"Verbinden",hint:"IDE-/Agent-Configs erzeugen",icon:L0},{id:"agent",label:"Hermes",hint:"Agent-Status & AnythingLLM öffnen",icon:$s},{id:"guide",label:"Anleitung",hint:"Einrichten & Vibe-Coding",icon:N0}];var Op=1,V0=.9,W0=.8,K0=.17,_d=.1,Md=.999,Q0=.9999,q0=.99,Z0=/[\\\/_+.#"@\[\(\{&]/,Y0=/[\\\/_+.#"@\[\(\{&]/g,J0=/[\s-]/,Am=/[\s-]/g;function oc(s,o,a,d,u,f,h){if(f===o.length)return u===s.length?Op:q0;var p=`${u},${f}`;if(h[p]!==void 0)return h[p];for(var v=d.charAt(f),x=a.indexOf(v,u),b=0,w,P,R,O;x>=0;)w=oc(s,o,a,d,x+1,f+1,h),w>b&&(x===u?w*=Op:Z0.test(s.charAt(x-1))?(w*=W0,R=s.slice(u,x-1).match(Y0),R&&u>0&&(w*=Math.pow(Md,R.length))):J0.test(s.charAt(x-1))?(w*=V0,O=s.slice(u,x-1).match(Am),O&&u>0&&(w*=Math.pow(Md,O.length))):(w*=K0,u>0&&(w*=Math.pow(Md,x-u))),s.charAt(x)!==o.charAt(f)&&(w*=Q0)),(w<_d&&a.charAt(x-1)===d.charAt(f+1)||d.charAt(f+1)===d.charAt(f)&&a.charAt(x-1)!==d.charAt(f))&&(P=oc(s,o,a,d,x+1,f+2,h),P*_d>w&&(w=P*_d)),w>b&&(b=w),x=a.indexOf(v,x+1);return h[p]=b,b}function Dp(s){return s.toLowerCase().replace(Am," ")}function X0(s,o,a){return s=a&&a.length>0?`${s+" "+a.join(" ")}`:s,oc(s,o,Dp(s),Dp(o),0,0,{})}function ln(s,o,{checkForDefaultPrevented:a=!0}={}){return function(u){if(s==null||s(u),a===!1||!u.defaultPrevented)return o==null?void 0:o(u)}}function Ap(s,o){if(typeof s=="function")return s(o);s!=null&&(s.current=o)}function Bs(...s){return o=>{let a=!1;const d=s.map(u=>{const f=Ap(u,o);return!a&&typeof f=="function"&&(a=!0),f});if(a)return()=>{for(let u=0;u{var C;const{scope:P,children:R,...O}=w,E=((C=P==null?void 0:P[s])==null?void 0:C[v])||p,k=g.useMemo(()=>O,Object.values(O));return r.jsx(E.Provider,{value:k,children:R})};x.displayName=f+"Provider";function b(w,P){var E;const R=((E=P==null?void 0:P[s])==null?void 0:E[v])||p,O=g.useContext(R);if(O)return O;if(h!==void 0)return h;throw new Error(`\`${w}\` must be used within \`${f}\``)}return[x,b]}const u=()=>{const f=a.map(h=>g.createContext(h));return function(p){const v=(p==null?void 0:p[s])||f;return g.useMemo(()=>({[`__scope${s}`]:{...p,[s]:v}}),[p,v])}};return u.scopeName=s,[d,tv(u,...o)]}function tv(...s){const o=s[0];if(s.length===1)return o;const a=()=>{const d=s.map(u=>({useScope:u(),scopeName:u.scopeName}));return function(f){const h=d.reduce((p,{useScope:v,scopeName:x})=>{const w=v(f)[`__scope${x}`];return{...p,...w}},{});return g.useMemo(()=>({[`__scope${o.scopeName}`]:h}),[h])}};return a.scopeName=o.scopeName,a}var qo=globalThis!=null&&globalThis.document?g.useLayoutEffect:()=>{},rv=pc[" useId ".trim().toString()]||(()=>{}),nv=0;function kr(s){const[o,a]=g.useState(rv());return qo(()=>{a(d=>d??String(nv++))},[s]),o?`radix-${o}`:""}var sv=pc[" useInsertionEffect ".trim().toString()]||qo;function ov({prop:s,defaultProp:o,onChange:a=()=>{},caller:d}){const[u,f,h]=lv({defaultProp:o,onChange:a}),p=s!==void 0,v=p?s:u;{const b=g.useRef(s!==void 0);g.useEffect(()=>{const w=b.current;w!==p&&console.warn(`${d} is changing from ${w?"controlled":"uncontrolled"} to ${p?"controlled":"uncontrolled"}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`),b.current=p},[p,d])}const x=g.useCallback(b=>{var w;if(p){const P=av(b)?b(s):b;P!==s&&((w=h.current)==null||w.call(h,P))}else f(b)},[p,s,f,h]);return[v,x]}function lv({defaultProp:s,onChange:o}){const[a,d]=g.useState(s),u=g.useRef(a),f=g.useRef(o);return sv(()=>{f.current=o},[o]),g.useEffect(()=>{var h;u.current!==a&&((h=f.current)==null||h.call(f,a),u.current=a)},[a,u]),[a,d,f]}function av(s){return typeof s=="function"}var Tm=hm();function zm(s){const o=g.forwardRef((a,d)=>{let{children:u,...f}=a,h=null,p=!1;const v=[];Tp(u)&&typeof ga=="function"&&(u=ga(u._payload)),g.Children.forEach(u,P=>{var R;if(fv(P)){p=!0;const O=P;let E="child"in O.props?O.props.child:O.props.children;Tp(E)&&typeof ga=="function"&&(E=ga(E._payload)),h=dv(O,E),v.push((R=h==null?void 0:h.props)==null?void 0:R.children)}else v.push(P)}),h?h=g.cloneElement(h,void 0,v):!p&&g.Children.count(u)===1&&g.isValidElement(u)&&(h=u);const x=h?uv(h):void 0,b=Un(d,x);if(!h){if(u||u===0)throw new Error(p?xv(s):hv(s));return u}const w=cv(f,h.props??{});return h.type!==g.Fragment&&(w.ref=d?b:x),g.cloneElement(h,w)});return o.displayName=`${s}.Slot`,o}var iv=Symbol.for("radix.slottable"),dv=(s,o)=>{if("child"in s.props){const a=s.props.child;return g.isValidElement(a)?g.cloneElement(a,void 0,s.props.children(a.props.children)):null}return g.isValidElement(o)?o:null};function cv(s,o){const a={...o};for(const d in o){const u=s[d],f=o[d];/^on[A-Z]/.test(d)?u&&f?a[d]=(...p)=>{const v=f(...p);return u(...p),v}:u&&(a[d]=u):d==="style"?a[d]={...u,...f}:d==="className"&&(a[d]=[u,f].filter(Boolean).join(" "))}return{...s,...a}}function uv(s){var d,u;let o=(d=Object.getOwnPropertyDescriptor(s.props,"ref"))==null?void 0:d.get,a=o&&"isReactWarning"in o&&o.isReactWarning;return a?s.ref:(o=(u=Object.getOwnPropertyDescriptor(s,"ref"))==null?void 0:u.get,a=o&&"isReactWarning"in o&&o.isReactWarning,a?s.props.ref:s.props.ref||s.ref)}function fv(s){return g.isValidElement(s)&&typeof s.type=="function"&&"__radixId"in s.type&&s.type.__radixId===iv}var pv=Symbol.for("react.lazy");function Tp(s){return s!=null&&typeof s=="object"&&"$$typeof"in s&&s.$$typeof===pv&&"_payload"in s&&mv(s._payload)}function mv(s){return typeof s=="object"&&s!==null&&"then"in s}var hv=s=>`${s} failed to slot onto its children. Expected a single React element child or \`Slottable\`.`,xv=s=>`${s} failed to slot onto its \`Slottable\`. Expected \`Slottable\` to receive a single React element child.`,ga=pc[" use ".trim().toString()],gv=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],at=gv.reduce((s,o)=>{const a=zm(`Primitive.${o}`),d=g.forwardRef((u,f)=>{const{asChild:h,...p}=u,v=h?a:o;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),r.jsx(v,{...p,ref:f})});return d.displayName=`Primitive.${o}`,{...s,[o]:d}},{});function vv(s,o){s&&Tm.flushSync(()=>s.dispatchEvent(o))}function Zo(s){const o=g.useRef(s);return g.useEffect(()=>{o.current=s}),g.useMemo(()=>((...a)=>{var d;return(d=o.current)==null?void 0:d.call(o,...a)}),[])}function yv(s,o=globalThis==null?void 0:globalThis.document){const a=Zo(s);g.useEffect(()=>{const d=u=>{u.key==="Escape"&&a(u)};return o.addEventListener("keydown",d,{capture:!0}),()=>o.removeEventListener("keydown",d,{capture:!0})},[a,o])}var bv="DismissableLayer",lc="dismissableLayer.update",wv="dismissableLayer.pointerDownOutside",jv="dismissableLayer.focusOutside",zp,yc=g.createContext({layers:new Set,layersWithOutsidePointerEventsDisabled:new Set,branches:new Set,dismissableSurfaces:new Set}),Lm=g.forwardRef((s,o)=>{const{disableOutsidePointerEvents:a=!1,deferPointerDownOutside:d=!1,onEscapeKeyDown:u,onPointerDownOutside:f,onFocusOutside:h,onInteractOutside:p,onDismiss:v,...x}=s,b=g.useContext(yc),[w,P]=g.useState(null),R=(w==null?void 0:w.ownerDocument)??(globalThis==null?void 0:globalThis.document),[,O]=g.useState({}),E=Un(o,oe=>P(oe)),k=Array.from(b.layers),[C]=[...b.layersWithOutsidePointerEventsDisabled].slice(-1),I=k.indexOf(C),B=w?k.indexOf(w):-1,z=b.layersWithOutsidePointerEventsDisabled.size>0,$=B>=I,L=g.useRef(!1),H=Cv(oe=>{const me=oe.target;if(!(me instanceof Node))return;const xe=[...b.branches].some(G=>G.contains(me));!$||xe||(f==null||f(oe),p==null||p(oe),oe.defaultPrevented||v==null||v())},{ownerDocument:R,deferPointerDownOutside:d,isDeferredPointerDownOutsideRef:L,dismissableSurfaces:b.dismissableSurfaces}),re=Ev(oe=>{if(d&&L.current)return;const me=oe.target;[...b.branches].some(G=>G.contains(me))||(h==null||h(oe),p==null||p(oe),oe.defaultPrevented||v==null||v())},R);return yv(oe=>{B===b.layers.size-1&&(u==null||u(oe),!oe.defaultPrevented&&v&&(oe.preventDefault(),v()))},R),g.useEffect(()=>{if(w)return a&&(b.layersWithOutsidePointerEventsDisabled.size===0&&(zp=R.body.style.pointerEvents,R.body.style.pointerEvents="none"),b.layersWithOutsidePointerEventsDisabled.add(w)),b.layers.add(w),Lp(),()=>{a&&(b.layersWithOutsidePointerEventsDisabled.delete(w),b.layersWithOutsidePointerEventsDisabled.size===0&&(R.body.style.pointerEvents=zp))}},[w,R,a,b]),g.useEffect(()=>()=>{w&&(b.layers.delete(w),b.layersWithOutsidePointerEventsDisabled.delete(w),Lp())},[w,b]),g.useEffect(()=>{const oe=()=>O({});return document.addEventListener(lc,oe),()=>document.removeEventListener(lc,oe)},[]),r.jsx(at.div,{...x,ref:E,style:{pointerEvents:z?$?"auto":"none":void 0,...s.style},onFocusCapture:ln(s.onFocusCapture,re.onFocusCapture),onBlurCapture:ln(s.onBlurCapture,re.onBlurCapture),onPointerDownCapture:ln(s.onPointerDownCapture,H.onPointerDownCapture)})});Lm.displayName=bv;var kv="DismissableLayerBranch",Nv=g.forwardRef((s,o)=>{const a=g.useContext(yc),d=g.useRef(null),u=Un(o,d);return g.useEffect(()=>{const f=d.current;if(f)return a.branches.add(f),()=>{a.branches.delete(f)}},[a.branches]),r.jsx(at.div,{...s,ref:u})});Nv.displayName=kv;function Sv(){const s=g.useContext(yc),[o,a]=g.useState(null);return g.useEffect(()=>{if(o)return s.dismissableSurfaces.add(o),()=>{s.dismissableSurfaces.delete(o)}},[o,s.dismissableSurfaces]),a}function Cv(s,o){const{ownerDocument:a=globalThis==null?void 0:globalThis.document,deferPointerDownOutside:d=!1,isDeferredPointerDownOutsideRef:u,dismissableSurfaces:f}=o,h=Zo(s),p=g.useRef(!1),v=g.useRef(!1),x=g.useRef(new Map),b=g.useRef(()=>{});return g.useEffect(()=>{function w(){v.current=!1,u.current=!1,x.current.clear()}function P(){return Array.from(x.current.values()).some(Boolean)}function R(I){if(!v.current)return;const B=I.target;B instanceof Node&&[...f].some($=>$.contains(B))||x.current.set(I.type,!0),I.type==="click"&&window.setTimeout(()=>{v.current&&b.current()},0)}function O(I){v.current&&x.current.set(I.type,!1)}const E=I=>{if(I.target&&!p.current){let B=function(){a.removeEventListener("click",b.current);const $=P();w(),$||Fm(wv,h,z,{discrete:!0})};const z={originalEvent:I};v.current=!0,u.current=d&&I.button===0,x.current.clear(),!d||I.button!==0?B():(a.removeEventListener("click",b.current),b.current=B,a.addEventListener("click",b.current,{once:!0}))}else a.removeEventListener("click",b.current),w();p.current=!1},k=["pointerup","mousedown","mouseup","touchstart","touchend","click"];for(const I of k)a.addEventListener(I,R,!0),a.addEventListener(I,O);const C=window.setTimeout(()=>{a.addEventListener("pointerdown",E)},0);return()=>{window.clearTimeout(C),a.removeEventListener("pointerdown",E),a.removeEventListener("click",b.current);for(const I of k)a.removeEventListener(I,R,!0),a.removeEventListener(I,O)}},[a,h,d,u,f]),{onPointerDownCapture:()=>p.current=!0}}function Ev(s,o=globalThis==null?void 0:globalThis.document){const a=Zo(s),d=g.useRef(!1);return g.useEffect(()=>{const u=f=>{f.target&&!d.current&&Fm(jv,a,{originalEvent:f},{discrete:!1})};return o.addEventListener("focusin",u),()=>o.removeEventListener("focusin",u)},[o,a]),{onFocusCapture:()=>d.current=!0,onBlurCapture:()=>d.current=!1}}function Lp(){const s=new CustomEvent(lc);document.dispatchEvent(s)}function Fm(s,o,a,{discrete:d}){const u=a.originalEvent.target,f=new CustomEvent(s,{bubbles:!1,cancelable:!0,detail:a});o&&u.addEventListener(s,o,{once:!0}),d?vv(u,f):u.dispatchEvent(f)}var Pd="focusScope.autoFocusOnMount",Rd="focusScope.autoFocusOnUnmount",Fp={bubbles:!1,cancelable:!0},_v="FocusScope",Im=g.forwardRef((s,o)=>{const{loop:a=!1,trapped:d=!1,onMountAutoFocus:u,onUnmountAutoFocus:f,...h}=s,[p,v]=g.useState(null),x=Zo(u),b=Zo(f),w=g.useRef(null),P=Un(o,E=>v(E)),R=g.useRef({paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}}).current;g.useEffect(()=>{if(d){let E=function(B){if(R.paused||!p)return;const z=B.target;p.contains(z)?w.current=z:Zr(w.current,{select:!0})},k=function(B){if(R.paused||!p)return;const z=B.relatedTarget;z!==null&&(p.contains(z)||Zr(w.current,{select:!0}))},C=function(B){if(document.activeElement===document.body)for(const $ of B)$.removedNodes.length>0&&Zr(p)};document.addEventListener("focusin",E),document.addEventListener("focusout",k);const I=new MutationObserver(C);return p&&I.observe(p,{childList:!0,subtree:!0}),()=>{document.removeEventListener("focusin",E),document.removeEventListener("focusout",k),I.disconnect()}}},[d,p,R.paused]),g.useEffect(()=>{if(p){$p.add(R);const E=document.activeElement;if(!p.contains(E)){const C=new CustomEvent(Pd,Fp);p.addEventListener(Pd,x),p.dispatchEvent(C),C.defaultPrevented||(Mv(Av($m(p)),{select:!0}),document.activeElement===E&&Zr(p))}return()=>{p.removeEventListener(Pd,x),setTimeout(()=>{const C=new CustomEvent(Rd,Fp);p.addEventListener(Rd,b),p.dispatchEvent(C),C.defaultPrevented||Zr(E??document.body,{select:!0}),p.removeEventListener(Rd,b),$p.remove(R)},0)}}},[p,x,b,R]);const O=g.useCallback(E=>{if(!a&&!d||R.paused)return;const k=E.key==="Tab"&&!E.altKey&&!E.ctrlKey&&!E.metaKey,C=document.activeElement;if(k&&C){const I=E.currentTarget,[B,z]=Pv(I);B&&z?!E.shiftKey&&C===z?(E.preventDefault(),a&&Zr(B,{select:!0})):E.shiftKey&&C===B&&(E.preventDefault(),a&&Zr(z,{select:!0})):C===I&&E.preventDefault()}},[a,d,R.paused]);return r.jsx(at.div,{tabIndex:-1,...h,ref:P,onKeyDown:O})});Im.displayName=_v;function Mv(s,{select:o=!1}={}){const a=document.activeElement;for(const d of s)if(Zr(d,{select:o}),document.activeElement!==a)return}function Pv(s){const o=$m(s),a=Ip(o,s),d=Ip(o.reverse(),s);return[a,d]}function $m(s){const o=[],a=document.createTreeWalker(s,NodeFilter.SHOW_ELEMENT,{acceptNode:d=>{const u=d.tagName==="INPUT"&&d.type==="hidden";return d.disabled||d.hidden||u?NodeFilter.FILTER_SKIP:d.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;a.nextNode();)o.push(a.currentNode);return o}function Ip(s,o){for(const a of s)if(!Rv(a,{upTo:o}))return a}function Rv(s,{upTo:o}){if(getComputedStyle(s).visibility==="hidden")return!0;for(;s;){if(o!==void 0&&s===o)return!1;if(getComputedStyle(s).display==="none")return!0;s=s.parentElement}return!1}function Ov(s){return s instanceof HTMLInputElement&&"select"in s}function Zr(s,{select:o=!1}={}){if(s&&s.focus){const a=document.activeElement;s.focus({preventScroll:!0}),s!==a&&Ov(s)&&o&&s.select()}}var $p=Dv();function Dv(){let s=[];return{add(o){const a=s[0];o!==a&&(a==null||a.pause()),s=Up(s,o),s.unshift(o)},remove(o){var a;s=Up(s,o),(a=s[0])==null||a.resume()}}}function Up(s,o){const a=[...s],d=a.indexOf(o);return d!==-1&&a.splice(d,1),a}function Av(s){return s.filter(o=>o.tagName!=="A")}var Tv="Portal",Um=g.forwardRef((s,o)=>{var p;const{container:a,...d}=s,[u,f]=g.useState(!1);qo(()=>f(!0),[]);const h=a||u&&((p=globalThis==null?void 0:globalThis.document)==null?void 0:p.body);return h?Tm.createPortal(r.jsx(at.div,{...d,ref:o}),h):null});Um.displayName=Tv;function zv(s,o){return g.useReducer((a,d)=>o[a][d]??a,s)}var Aa=s=>{const{present:o,children:a}=s,d=Lv(o),u=typeof a=="function"?a({present:d.isPresent}):g.Children.only(a),f=Fv(d.ref,Iv(u));return typeof a=="function"||d.isPresent?g.cloneElement(u,{ref:f}):null};Aa.displayName="Presence";function Lv(s){const[o,a]=g.useState(),d=g.useRef(null),u=g.useRef(s),f=g.useRef("none"),h=s?"mounted":"unmounted",[p,v]=zv(h,{mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}});return g.useEffect(()=>{const x=va(d.current);f.current=p==="mounted"?x:"none"},[p]),qo(()=>{const x=d.current,b=u.current;if(b!==s){const P=f.current,R=va(x);s?v("MOUNT"):R==="none"||(x==null?void 0:x.display)==="none"?v("UNMOUNT"):v(b&&P!==R?"ANIMATION_OUT":"UNMOUNT"),u.current=s}},[s,v]),qo(()=>{if(o){let x;const b=o.ownerDocument.defaultView??window,w=R=>{const E=va(d.current).includes(CSS.escape(R.animationName));if(R.target===o&&E&&(v("ANIMATION_END"),!u.current)){const k=o.style.animationFillMode;o.style.animationFillMode="forwards",x=b.setTimeout(()=>{o.style.animationFillMode==="forwards"&&(o.style.animationFillMode=k)})}},P=R=>{R.target===o&&(f.current=va(d.current))};return o.addEventListener("animationstart",P),o.addEventListener("animationcancel",w),o.addEventListener("animationend",w),()=>{b.clearTimeout(x),o.removeEventListener("animationstart",P),o.removeEventListener("animationcancel",w),o.removeEventListener("animationend",w)}}else v("ANIMATION_END")},[o,v]),{isPresent:["mounted","unmountSuspended"].includes(p),ref:g.useCallback(x=>{d.current=x?getComputedStyle(x):null,a(x)},[])}}function Bp(s,o){if(typeof s=="function")return s(o);s!=null&&(s.current=o)}function Fv(...s){const o=g.useRef(s);return o.current=s,g.useCallback(a=>{const d=o.current;let u=!1;const f=d.map(h=>{const p=Bp(h,a);return!u&&typeof p=="function"&&(u=!0),p});if(u)return()=>{for(let h=0;h{nr||(nr={start:Hp(),end:Hp()});const{start:s,end:o}=nr;return document.body.firstElementChild!==s&&document.body.insertAdjacentElement("afterbegin",s),document.body.lastElementChild!==o&&document.body.insertAdjacentElement("beforeend",o),ya++,()=>{ya===1&&(nr==null||nr.start.remove(),nr==null||nr.end.remove(),nr=null),ya=Math.max(0,ya-1)}},[])}function Hp(){const s=document.createElement("span");return s.setAttribute("data-radix-focus-guard",""),s.tabIndex=0,s.style.outline="none",s.style.opacity="0",s.style.position="fixed",s.style.pointerEvents="none",s}var ar=function(){return ar=Object.assign||function(o){for(var a,d=1,u=arguments.length;d"u")return ny;var o=sy(s),a=document.documentElement.clientWidth,d=window.innerWidth;return{left:o[0],top:o[1],right:o[2],gap:Math.max(0,d-a+o[2]-o[0])}},ly=Vm(),Ss="data-scroll-locked",ay=function(s,o,a,d){var u=s.left,f=s.top,h=s.right,p=s.gap;return a===void 0&&(a="margin"),` + .`.concat(Bv,` { + overflow: hidden `).concat(d,`; + padding-right: `).concat(p,"px ").concat(d,`; + } + body[`).concat(Ss,`] { + overflow: hidden `).concat(d,`; + overscroll-behavior: contain; + `).concat([o&&"position: relative ".concat(d,";"),a==="margin"&&` + padding-left: `.concat(u,`px; + padding-top: `).concat(f,`px; + padding-right: `).concat(h,`px; + margin-left:0; + margin-top:0; + margin-right: `).concat(p,"px ").concat(d,`; + `),a==="padding"&&"padding-right: ".concat(p,"px ").concat(d,";")].filter(Boolean).join(""),` + } + + .`).concat(_a,` { + right: `).concat(p,"px ").concat(d,`; + } + + .`).concat(Ma,` { + margin-right: `).concat(p,"px ").concat(d,`; + } + + .`).concat(_a," .").concat(_a,` { + right: 0 `).concat(d,`; + } + + .`).concat(Ma," .").concat(Ma,` { + margin-right: 0 `).concat(d,`; + } + + body[`).concat(Ss,`] { + `).concat(Hv,": ").concat(p,`px; + } +`)},Vp=function(){var s=parseInt(document.body.getAttribute(Ss)||"0",10);return isFinite(s)?s:0},iy=function(){g.useEffect(function(){return document.body.setAttribute(Ss,(Vp()+1).toString()),function(){var s=Vp()-1;s<=0?document.body.removeAttribute(Ss):document.body.setAttribute(Ss,s.toString())}},[])},dy=function(s){var o=s.noRelative,a=s.noImportant,d=s.gapMode,u=d===void 0?"margin":d;iy();var f=g.useMemo(function(){return oy(u)},[u]);return g.createElement(ly,{styles:ay(f,!o,u,a?"":"!important")})},ac=!1;if(typeof window<"u")try{var ba=Object.defineProperty({},"passive",{get:function(){return ac=!0,!0}});window.addEventListener("test",ba,ba),window.removeEventListener("test",ba,ba)}catch{ac=!1}var ys=ac?{passive:!1}:!1,cy=function(s){return s.tagName==="TEXTAREA"},Wm=function(s,o){if(!(s instanceof Element))return!1;var a=window.getComputedStyle(s);return a[o]!=="hidden"&&!(a.overflowY===a.overflowX&&!cy(s)&&a[o]==="visible")},uy=function(s){return Wm(s,"overflowY")},fy=function(s){return Wm(s,"overflowX")},Wp=function(s,o){var a=o.ownerDocument,d=o;do{typeof ShadowRoot<"u"&&d instanceof ShadowRoot&&(d=d.host);var u=Km(s,d);if(u){var f=Qm(s,d),h=f[1],p=f[2];if(h>p)return!0}d=d.parentNode}while(d&&d!==a.body);return!1},py=function(s){var o=s.scrollTop,a=s.scrollHeight,d=s.clientHeight;return[o,a,d]},my=function(s){var o=s.scrollLeft,a=s.scrollWidth,d=s.clientWidth;return[o,a,d]},Km=function(s,o){return s==="v"?uy(o):fy(o)},Qm=function(s,o){return s==="v"?py(o):my(o)},hy=function(s,o){return s==="h"&&o==="rtl"?-1:1},xy=function(s,o,a,d,u){var f=hy(s,window.getComputedStyle(o).direction),h=f*d,p=a.target,v=o.contains(p),x=!1,b=h>0,w=0,P=0;do{if(!p)break;var R=Qm(s,p),O=R[0],E=R[1],k=R[2],C=E-k-f*O;(O||C)&&Km(s,p)&&(w+=C,P+=O);var I=p.parentNode;p=I&&I.nodeType===Node.DOCUMENT_FRAGMENT_NODE?I.host:I}while(!v&&p!==document.body||v&&(o.contains(p)||o===p));return(b&&Math.abs(w)<1||!b&&Math.abs(P)<1)&&(x=!0),x},wa=function(s){return"changedTouches"in s?[s.changedTouches[0].clientX,s.changedTouches[0].clientY]:[0,0]},Kp=function(s){return[s.deltaX,s.deltaY]},Qp=function(s){return s&&"current"in s?s.current:s},gy=function(s,o){return s[0]===o[0]&&s[1]===o[1]},vy=function(s){return` + .block-interactivity-`.concat(s,` {pointer-events: none;} + .allow-interactivity-`).concat(s,` {pointer-events: all;} +`)},yy=0,bs=[];function by(s){var o=g.useRef([]),a=g.useRef([0,0]),d=g.useRef(),u=g.useState(yy++)[0],f=g.useState(Vm)[0],h=g.useRef(s);g.useEffect(function(){h.current=s},[s]),g.useEffect(function(){if(s.inert){document.body.classList.add("block-interactivity-".concat(u));var E=Uv([s.lockRef.current],(s.shards||[]).map(Qp),!0).filter(Boolean);return E.forEach(function(k){return k.classList.add("allow-interactivity-".concat(u))}),function(){document.body.classList.remove("block-interactivity-".concat(u)),E.forEach(function(k){return k.classList.remove("allow-interactivity-".concat(u))})}}},[s.inert,s.lockRef.current,s.shards]);var p=g.useCallback(function(E,k){if("touches"in E&&E.touches.length===2||E.type==="wheel"&&E.ctrlKey)return!h.current.allowPinchZoom;var C=wa(E),I=a.current,B="deltaX"in E?E.deltaX:I[0]-C[0],z="deltaY"in E?E.deltaY:I[1]-C[1],$,L=E.target,H=Math.abs(B)>Math.abs(z)?"h":"v";if("touches"in E&&H==="h"&&L.type==="range")return!1;var re=window.getSelection(),oe=re&&re.anchorNode,me=oe?oe===L||oe.contains(L):!1;if(me)return!1;var xe=Wp(H,L);if(!xe)return!0;if(xe?$=H:($=H==="v"?"h":"v",xe=Wp(H,L)),!xe)return!1;if(!d.current&&"changedTouches"in E&&(B||z)&&(d.current=$),!$)return!0;var G=d.current||$;return xy(G,k,E,G==="h"?B:z)},[]),v=g.useCallback(function(E){var k=E;if(!(!bs.length||bs[bs.length-1]!==f)){var C="deltaY"in k?Kp(k):wa(k),I=o.current.filter(function($){return $.name===k.type&&($.target===k.target||k.target===$.shadowParent)&&gy($.delta,C)})[0];if(I&&I.should){k.cancelable&&k.preventDefault();return}if(!I){var B=(h.current.shards||[]).map(Qp).filter(Boolean).filter(function($){return $.contains(k.target)}),z=B.length>0?p(k,B[0]):!h.current.noIsolation;z&&k.cancelable&&k.preventDefault()}}},[]),x=g.useCallback(function(E,k,C,I){var B={name:E,delta:k,target:C,should:I,shadowParent:wy(C)};o.current.push(B),setTimeout(function(){o.current=o.current.filter(function(z){return z!==B})},1)},[]),b=g.useCallback(function(E){a.current=wa(E),d.current=void 0},[]),w=g.useCallback(function(E){x(E.type,Kp(E),E.target,p(E,s.lockRef.current))},[]),P=g.useCallback(function(E){x(E.type,wa(E),E.target,p(E,s.lockRef.current))},[]);g.useEffect(function(){return bs.push(f),s.setCallbacks({onScrollCapture:w,onWheelCapture:w,onTouchMoveCapture:P}),document.addEventListener("wheel",v,ys),document.addEventListener("touchmove",v,ys),document.addEventListener("touchstart",b,ys),function(){bs=bs.filter(function(E){return E!==f}),document.removeEventListener("wheel",v,ys),document.removeEventListener("touchmove",v,ys),document.removeEventListener("touchstart",b,ys)}},[]);var R=s.removeScrollBar,O=s.inert;return g.createElement(g.Fragment,null,O?g.createElement(f,{styles:vy(u)}):null,R?g.createElement(dy,{noRelative:s.noRelative,gapMode:s.gapMode}):null)}function wy(s){for(var o=null;s!==null;)s instanceof ShadowRoot&&(o=s.host,s=s.host),s=s.parentNode;return o}const jy=Zv(Gm,by);var qm=g.forwardRef(function(s,o){return g.createElement(Ta,ar({},s,{ref:o,sideCar:jy}))});qm.classNames=Ta.classNames;var ky=function(s){if(typeof document>"u")return null;var o=Array.isArray(s)?s[0]:s;return o.ownerDocument.body},ws=new WeakMap,ja=new WeakMap,ka={},Td=0,Zm=function(s){return s&&(s.host||Zm(s.parentNode))},Ny=function(s,o){return o.map(function(a){if(s.contains(a))return a;var d=Zm(a);return d&&s.contains(d)?d:(console.error("aria-hidden",a,"in not contained inside",s,". Doing nothing"),null)}).filter(function(a){return!!a})},Sy=function(s,o,a,d){var u=Ny(o,Array.isArray(s)?s:[s]);ka[a]||(ka[a]=new WeakMap);var f=ka[a],h=[],p=new Set,v=new Set(u),x=function(w){!w||p.has(w)||(p.add(w),x(w.parentNode))};u.forEach(x);var b=function(w){!w||v.has(w)||Array.prototype.forEach.call(w.children,function(P){if(p.has(P))b(P);else try{var R=P.getAttribute(d),O=R!==null&&R!=="false",E=(ws.get(P)||0)+1,k=(f.get(P)||0)+1;ws.set(P,E),f.set(P,k),h.push(P),E===1&&O&&ja.set(P,!0),k===1&&P.setAttribute(a,"true"),O||P.setAttribute(d,"true")}catch(C){console.error("aria-hidden: cannot operate on ",P,C)}})};return b(o),p.clear(),Td++,function(){h.forEach(function(w){var P=ws.get(w)-1,R=f.get(w)-1;ws.set(w,P),f.set(w,R),P||(ja.has(w)||w.removeAttribute(d),ja.delete(w)),R||w.removeAttribute(a)}),Td--,Td||(ws=new WeakMap,ws=new WeakMap,ja=new WeakMap,ka={})}},Cy=function(s,o,a){a===void 0&&(a="data-aria-hidden");var d=Array.from(Array.isArray(s)?s:[s]),u=ky(s);return u?(d.push.apply(d,Array.from(u.querySelectorAll("[aria-live], script"))),Sy(d,u,a,"aria-hidden")):function(){return null}},za="Dialog",[Ym]=ev(za),[Ey,Zt]=Ym(za),Jm=s=>{const{__scopeDialog:o,children:a,open:d,defaultOpen:u,onOpenChange:f,modal:h=!0}=s,p=g.useRef(null),v=g.useRef(null),[x,b]=ov({prop:d,defaultProp:u??!1,onChange:f,caller:za});return r.jsx(Ey,{scope:o,triggerRef:p,contentRef:v,contentId:kr(),titleId:kr(),descriptionId:kr(),open:x,onOpenChange:b,onOpenToggle:g.useCallback(()=>b(w=>!w),[b]),modal:h,children:a})};Jm.displayName=za;var Xm="DialogTrigger",_y=g.forwardRef((s,o)=>{const{__scopeDialog:a,...d}=s,u=Zt(Xm,a),f=Un(o,u.triggerRef);return r.jsx(at.button,{type:"button","aria-haspopup":"dialog","aria-expanded":u.open,"aria-controls":u.open?u.contentId:void 0,"data-state":wc(u.open),...d,ref:f,onClick:ln(s.onClick,u.onOpenToggle)})});_y.displayName=Xm;var bc="DialogPortal",[My,eh]=Ym(bc,{forceMount:void 0}),th=s=>{const{__scopeDialog:o,forceMount:a,children:d,container:u}=s,f=Zt(bc,o);return r.jsx(My,{scope:o,forceMount:a,children:g.Children.map(d,h=>r.jsx(Aa,{present:a||f.open,children:r.jsx(Um,{asChild:!0,container:u,children:h})}))})};th.displayName=bc;var Da="DialogOverlay",rh=g.forwardRef((s,o)=>{const a=eh(Da,s.__scopeDialog),{forceMount:d=a.forceMount,...u}=s,f=Zt(Da,s.__scopeDialog);return f.modal?r.jsx(Aa,{present:d||f.open,children:r.jsx(Ry,{...u,ref:o})}):null});rh.displayName=Da;var Py=zm("DialogOverlay.RemoveScroll"),Ry=g.forwardRef((s,o)=>{const{__scopeDialog:a,...d}=s,u=Zt(Da,a),f=Sv(),h=Un(o,f);return r.jsx(qm,{as:Py,allowPinchZoom:!0,shards:[u.contentRef],children:r.jsx(at.div,{"data-state":wc(u.open),...d,ref:h,style:{pointerEvents:"auto",...d.style}})})}),Hs="DialogContent",nh=g.forwardRef((s,o)=>{const a=eh(Hs,s.__scopeDialog),{forceMount:d=a.forceMount,...u}=s,f=Zt(Hs,s.__scopeDialog);return r.jsx(Aa,{present:d||f.open,children:f.modal?r.jsx(Oy,{...u,ref:o}):r.jsx(Dy,{...u,ref:o})})});nh.displayName=Hs;var Oy=g.forwardRef((s,o)=>{const a=Zt(Hs,s.__scopeDialog),d=g.useRef(null),u=Un(o,a.contentRef,d);return g.useEffect(()=>{const f=d.current;if(f)return Cy(f)},[]),r.jsx(sh,{...s,ref:u,trapFocus:a.open,disableOutsidePointerEvents:a.open,onCloseAutoFocus:ln(s.onCloseAutoFocus,f=>{var h;f.preventDefault(),(h=a.triggerRef.current)==null||h.focus()}),onPointerDownOutside:ln(s.onPointerDownOutside,f=>{const h=f.detail.originalEvent,p=h.button===0&&h.ctrlKey===!0;(h.button===2||p)&&f.preventDefault()}),onFocusOutside:ln(s.onFocusOutside,f=>f.preventDefault())})}),Dy=g.forwardRef((s,o)=>{const a=Zt(Hs,s.__scopeDialog),d=g.useRef(!1),u=g.useRef(!1);return r.jsx(sh,{...s,ref:o,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:f=>{var h,p;(h=s.onCloseAutoFocus)==null||h.call(s,f),f.defaultPrevented||(d.current||(p=a.triggerRef.current)==null||p.focus(),f.preventDefault()),d.current=!1,u.current=!1},onInteractOutside:f=>{var v,x;(v=s.onInteractOutside)==null||v.call(s,f),f.defaultPrevented||(d.current=!0,f.detail.originalEvent.type==="pointerdown"&&(u.current=!0));const h=f.target;((x=a.triggerRef.current)==null?void 0:x.contains(h))&&f.preventDefault(),f.detail.originalEvent.type==="focusin"&&u.current&&f.preventDefault()}})}),sh=g.forwardRef((s,o)=>{const{__scopeDialog:a,trapFocus:d,onOpenAutoFocus:u,onCloseAutoFocus:f,...h}=s,p=Zt(Hs,a);return $v(),r.jsx(r.Fragment,{children:r.jsx(Im,{asChild:!0,loop:!0,trapped:d,onMountAutoFocus:u,onUnmountAutoFocus:f,children:r.jsx(Lm,{role:"dialog",id:p.contentId,"aria-describedby":p.descriptionId,"aria-labelledby":p.titleId,"data-state":wc(p.open),...h,ref:o,deferPointerDownOutside:!0,onDismiss:()=>p.onOpenChange(!1)})})})}),oh="DialogTitle",Ay=g.forwardRef((s,o)=>{const{__scopeDialog:a,...d}=s,u=Zt(oh,a);return r.jsx(at.h2,{id:u.titleId,...d,ref:o})});Ay.displayName=oh;var lh="DialogDescription",Ty=g.forwardRef((s,o)=>{const{__scopeDialog:a,...d}=s,u=Zt(lh,a);return r.jsx(at.p,{id:u.descriptionId,...d,ref:o})});Ty.displayName=lh;var ah="DialogClose",zy=g.forwardRef((s,o)=>{const{__scopeDialog:a,...d}=s,u=Zt(ah,a);return r.jsx(at.button,{type:"button",...d,ref:o,onClick:ln(s.onClick,()=>u.onOpenChange(!1))})});zy.displayName=ah;function wc(s){return s?"open":"closed"}var zo='[cmdk-group=""]',zd='[cmdk-group-items=""]',Ly='[cmdk-group-heading=""]',ih='[cmdk-item=""]',qp=`${ih}:not([aria-disabled="true"])`,ic="cmdk-item-select",ks="data-value",Fy=(s,o,a)=>X0(s,o,a),dh=g.createContext(void 0),sl=()=>g.useContext(dh),ch=g.createContext(void 0),jc=()=>g.useContext(ch),uh=g.createContext(void 0),fh=g.forwardRef((s,o)=>{let a=Ns(()=>{var S,Z;return{search:"",value:(Z=(S=s.value)!=null?S:s.defaultValue)!=null?Z:"",selectedItemId:void 0,filtered:{count:0,items:new Map,groups:new Set}}}),d=Ns(()=>new Set),u=Ns(()=>new Map),f=Ns(()=>new Map),h=Ns(()=>new Set),p=ph(s),{label:v,children:x,value:b,onValueChange:w,filter:P,shouldFilter:R,loop:O,disablePointerSelection:E=!1,vimBindings:k=!0,...C}=s,I=kr(),B=kr(),z=kr(),$=g.useRef(null),L=qy();$n(()=>{if(b!==void 0){let S=b.trim();a.current.value=S,H.emit()}},[b]),$n(()=>{L(6,Pe)},[]);let H=g.useMemo(()=>({subscribe:S=>(h.current.add(S),()=>h.current.delete(S)),snapshot:()=>a.current,setState:(S,Z,ee)=>{var K,ae,fe,je;if(!Object.is(a.current[S],Z)){if(a.current[S]=Z,S==="search")G(),me(),L(1,xe);else if(S==="value"){if(document.activeElement.hasAttribute("cmdk-input")||document.activeElement.hasAttribute("cmdk-root")){let U=document.getElementById(z);U?U.focus():(K=document.getElementById(I))==null||K.focus()}if(L(7,()=>{var U;a.current.selectedItemId=(U=we())==null?void 0:U.id,H.emit()}),ee||L(5,Pe),((ae=p.current)==null?void 0:ae.value)!==void 0){let U=Z??"";(je=(fe=p.current).onValueChange)==null||je.call(fe,U);return}}H.emit()}},emit:()=>{h.current.forEach(S=>S())}}),[]),re=g.useMemo(()=>({value:(S,Z,ee)=>{var K;Z!==((K=f.current.get(S))==null?void 0:K.value)&&(f.current.set(S,{value:Z,keywords:ee}),a.current.filtered.items.set(S,oe(Z,ee)),L(2,()=>{me(),H.emit()}))},item:(S,Z)=>(d.current.add(S),Z&&(u.current.has(Z)?u.current.get(Z).add(S):u.current.set(Z,new Set([S]))),L(3,()=>{G(),me(),a.current.value||xe(),H.emit()}),()=>{f.current.delete(S),d.current.delete(S),a.current.filtered.items.delete(S);let ee=we();L(4,()=>{G(),(ee==null?void 0:ee.getAttribute("id"))===S&&xe(),H.emit()})}),group:S=>(u.current.has(S)||u.current.set(S,new Set),()=>{f.current.delete(S),u.current.delete(S)}),filter:()=>p.current.shouldFilter,label:v||s["aria-label"],getDisablePointerSelection:()=>p.current.disablePointerSelection,listId:I,inputId:z,labelId:B,listInnerRef:$}),[]);function oe(S,Z){var ee,K;let ae=(K=(ee=p.current)==null?void 0:ee.filter)!=null?K:Fy;return S?ae(S,a.current.search,Z):0}function me(){if(!a.current.search||p.current.shouldFilter===!1)return;let S=a.current.filtered.items,Z=[];a.current.filtered.groups.forEach(K=>{let ae=u.current.get(K),fe=0;ae.forEach(je=>{let U=S.get(je);fe=Math.max(U,fe)}),Z.push([K,fe])});let ee=$.current;Ee().sort((K,ae)=>{var fe,je;let U=K.getAttribute("id"),ge=ae.getAttribute("id");return((fe=S.get(ge))!=null?fe:0)-((je=S.get(U))!=null?je:0)}).forEach(K=>{let ae=K.closest(zd);ae?ae.appendChild(K.parentElement===ae?K:K.closest(`${zd} > *`)):ee.appendChild(K.parentElement===ee?K:K.closest(`${zd} > *`))}),Z.sort((K,ae)=>ae[1]-K[1]).forEach(K=>{var ae;let fe=(ae=$.current)==null?void 0:ae.querySelector(`${zo}[${ks}="${encodeURIComponent(K[0])}"]`);fe==null||fe.parentElement.appendChild(fe)})}function xe(){let S=Ee().find(ee=>ee.getAttribute("aria-disabled")!=="true"),Z=S==null?void 0:S.getAttribute(ks);H.setState("value",Z||void 0)}function G(){var S,Z,ee,K;if(!a.current.search||p.current.shouldFilter===!1){a.current.filtered.count=d.current.size;return}a.current.filtered.groups=new Set;let ae=0;for(let fe of d.current){let je=(Z=(S=f.current.get(fe))==null?void 0:S.value)!=null?Z:"",U=(K=(ee=f.current.get(fe))==null?void 0:ee.keywords)!=null?K:[],ge=oe(je,U);a.current.filtered.items.set(fe,ge),ge>0&&ae++}for(let[fe,je]of u.current)for(let U of je)if(a.current.filtered.items.get(U)>0){a.current.filtered.groups.add(fe);break}a.current.filtered.count=ae}function Pe(){var S,Z,ee;let K=we();K&&(((S=K.parentElement)==null?void 0:S.firstChild)===K&&((ee=(Z=K.closest(zo))==null?void 0:Z.querySelector(Ly))==null||ee.scrollIntoView({block:"nearest"})),K.scrollIntoView({block:"nearest"}))}function we(){var S;return(S=$.current)==null?void 0:S.querySelector(`${ih}[aria-selected="true"]`)}function Ee(){var S;return Array.from(((S=$.current)==null?void 0:S.querySelectorAll(qp))||[])}function Te(S){let Z=Ee()[S];Z&&H.setState("value",Z.getAttribute(ks))}function _e(S){var Z;let ee=we(),K=Ee(),ae=K.findIndex(je=>je===ee),fe=K[ae+S];(Z=p.current)!=null&&Z.loop&&(fe=ae+S<0?K[K.length-1]:ae+S===K.length?K[0]:K[ae+S]),fe&&H.setState("value",fe.getAttribute(ks))}function Y(S){let Z=we(),ee=Z==null?void 0:Z.closest(zo),K;for(;ee&&!K;)ee=S>0?Ky(ee,zo):Qy(ee,zo),K=ee==null?void 0:ee.querySelector(qp);K?H.setState("value",K.getAttribute(ks)):_e(S)}let de=()=>Te(Ee().length-1),J=S=>{S.preventDefault(),S.metaKey?de():S.altKey?Y(1):_e(1)},M=S=>{S.preventDefault(),S.metaKey?Te(0):S.altKey?Y(-1):_e(-1)};return g.createElement(at.div,{ref:o,tabIndex:-1,...C,"cmdk-root":"",onKeyDown:S=>{var Z;(Z=C.onKeyDown)==null||Z.call(C,S);let ee=S.nativeEvent.isComposing||S.keyCode===229;if(!(S.defaultPrevented||ee))switch(S.key){case"n":case"j":{k&&S.ctrlKey&&J(S);break}case"ArrowDown":{J(S);break}case"p":case"k":{k&&S.ctrlKey&&M(S);break}case"ArrowUp":{M(S);break}case"Home":{S.preventDefault(),Te(0);break}case"End":{S.preventDefault(),de();break}case"Enter":{S.preventDefault();let K=we();if(K){let ae=new Event(ic);K.dispatchEvent(ae)}}}}},g.createElement("label",{"cmdk-label":"",htmlFor:re.inputId,id:re.labelId,style:Yy},v),La(s,S=>g.createElement(ch.Provider,{value:H},g.createElement(dh.Provider,{value:re},S))))}),Iy=g.forwardRef((s,o)=>{var a,d;let u=kr(),f=g.useRef(null),h=g.useContext(uh),p=sl(),v=ph(s),x=(d=(a=v.current)==null?void 0:a.forceMount)!=null?d:h==null?void 0:h.forceMount;$n(()=>{if(!x)return p.item(u,h==null?void 0:h.id)},[x]);let b=mh(u,f,[s.value,s.children,f],s.keywords),w=jc(),P=dn(L=>L.value&&L.value===b.current),R=dn(L=>x||p.filter()===!1?!0:L.search?L.filtered.items.get(u)>0:!0);g.useEffect(()=>{let L=f.current;if(!(!L||s.disabled))return L.addEventListener(ic,O),()=>L.removeEventListener(ic,O)},[R,s.onSelect,s.disabled]);function O(){var L,H;E(),(H=(L=v.current).onSelect)==null||H.call(L,b.current)}function E(){w.setState("value",b.current,!0)}if(!R)return null;let{disabled:k,value:C,onSelect:I,forceMount:B,keywords:z,...$}=s;return g.createElement(at.div,{ref:Bs(f,o),...$,id:u,"cmdk-item":"",role:"option","aria-disabled":!!k,"aria-selected":!!P,"data-disabled":!!k,"data-selected":!!P,onPointerMove:k||p.getDisablePointerSelection()?void 0:E,onClick:k?void 0:O},s.children)}),$y=g.forwardRef((s,o)=>{let{heading:a,children:d,forceMount:u,...f}=s,h=kr(),p=g.useRef(null),v=g.useRef(null),x=kr(),b=sl(),w=dn(R=>u||b.filter()===!1?!0:R.search?R.filtered.groups.has(h):!0);$n(()=>b.group(h),[]),mh(h,p,[s.value,s.heading,v]);let P=g.useMemo(()=>({id:h,forceMount:u}),[u]);return g.createElement(at.div,{ref:Bs(p,o),...f,"cmdk-group":"",role:"presentation",hidden:w?void 0:!0},a&&g.createElement("div",{ref:v,"cmdk-group-heading":"","aria-hidden":!0,id:x},a),La(s,R=>g.createElement("div",{"cmdk-group-items":"",role:"group","aria-labelledby":a?x:void 0},g.createElement(uh.Provider,{value:P},R))))}),Uy=g.forwardRef((s,o)=>{let{alwaysRender:a,...d}=s,u=g.useRef(null),f=dn(h=>!h.search);return!a&&!f?null:g.createElement(at.div,{ref:Bs(u,o),...d,"cmdk-separator":"",role:"separator"})}),By=g.forwardRef((s,o)=>{let{onValueChange:a,...d}=s,u=s.value!=null,f=jc(),h=dn(x=>x.search),p=dn(x=>x.selectedItemId),v=sl();return g.useEffect(()=>{s.value!=null&&f.setState("search",s.value)},[s.value]),g.createElement(at.input,{ref:o,...d,"cmdk-input":"",autoComplete:"off",autoCorrect:"off",spellCheck:!1,"aria-autocomplete":"list",role:"combobox","aria-expanded":!0,"aria-controls":v.listId,"aria-labelledby":v.labelId,"aria-activedescendant":p,id:v.inputId,type:"text",value:u?s.value:h,onChange:x=>{u||f.setState("search",x.target.value),a==null||a(x.target.value)}})}),Hy=g.forwardRef((s,o)=>{let{children:a,label:d="Suggestions",...u}=s,f=g.useRef(null),h=g.useRef(null),p=dn(x=>x.selectedItemId),v=sl();return g.useEffect(()=>{if(h.current&&f.current){let x=h.current,b=f.current,w,P=new ResizeObserver(()=>{w=requestAnimationFrame(()=>{let R=x.offsetHeight;b.style.setProperty("--cmdk-list-height",R.toFixed(1)+"px")})});return P.observe(x),()=>{cancelAnimationFrame(w),P.unobserve(x)}}},[]),g.createElement(at.div,{ref:Bs(f,o),...u,"cmdk-list":"",role:"listbox",tabIndex:-1,"aria-activedescendant":p,"aria-label":d,id:v.listId},La(s,x=>g.createElement("div",{ref:Bs(h,v.listInnerRef),"cmdk-list-sizer":""},x)))}),Gy=g.forwardRef((s,o)=>{let{open:a,onOpenChange:d,overlayClassName:u,contentClassName:f,container:h,...p}=s;return g.createElement(Jm,{open:a,onOpenChange:d},g.createElement(th,{container:h},g.createElement(rh,{"cmdk-overlay":"",className:u}),g.createElement(nh,{"aria-label":s.label,"cmdk-dialog":"",className:f},g.createElement(fh,{ref:o,...p}))))}),Vy=g.forwardRef((s,o)=>dn(a=>a.filtered.count===0)?g.createElement(at.div,{ref:o,...s,"cmdk-empty":"",role:"presentation"}):null),Wy=g.forwardRef((s,o)=>{let{progress:a,children:d,label:u="Loading...",...f}=s;return g.createElement(at.div,{ref:o,...f,"cmdk-loading":"",role:"progressbar","aria-valuenow":a,"aria-valuemin":0,"aria-valuemax":100,"aria-label":u},La(s,h=>g.createElement("div",{"aria-hidden":!0},h)))}),js=Object.assign(fh,{List:Hy,Item:Iy,Input:By,Group:$y,Separator:Uy,Dialog:Gy,Empty:Vy,Loading:Wy});function Ky(s,o){let a=s.nextElementSibling;for(;a;){if(a.matches(o))return a;a=a.nextElementSibling}}function Qy(s,o){let a=s.previousElementSibling;for(;a;){if(a.matches(o))return a;a=a.previousElementSibling}}function ph(s){let o=g.useRef(s);return $n(()=>{o.current=s}),o}var $n=typeof window>"u"?g.useEffect:g.useLayoutEffect;function Ns(s){let o=g.useRef();return o.current===void 0&&(o.current=s()),o}function dn(s){let o=jc(),a=()=>s(o.snapshot());return g.useSyncExternalStore(o.subscribe,a,a)}function mh(s,o,a,d=[]){let u=g.useRef(),f=sl();return $n(()=>{var h;let p=(()=>{var x;for(let b of a){if(typeof b=="string")return b.trim();if(typeof b=="object"&&"current"in b)return b.current?(x=b.current.textContent)==null?void 0:x.trim():u.current}})(),v=d.map(x=>x.trim());f.value(s,p,v),(h=o.current)==null||h.setAttribute(ks,p),u.current=p}),u}var qy=()=>{let[s,o]=g.useState(),a=Ns(()=>new Map);return $n(()=>{a.current.forEach(d=>d()),a.current=new Map},[s]),(d,u)=>{a.current.set(d,u),o({})}};function Zy(s){let o=s.type;return typeof o=="function"?o(s.props):"render"in o?o.render(s.props):s}function La({asChild:s,children:o},a){return s&&g.isValidElement(o)?g.cloneElement(Zy(o),{ref:o.ref},a(o.props.children)):a(o)}var Yy={position:"absolute",width:"1px",height:"1px",padding:"0",margin:"-1px",overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",borderWidth:"0"};function Jy({onNavigate:s}){const[o,a]=g.useState(!1);return g.useEffect(()=>{const d=u=>{(u.metaKey||u.ctrlKey)&&u.key.toLowerCase()==="k"&&(u.preventDefault(),a(f=>!f))};return document.addEventListener("keydown",d),()=>document.removeEventListener("keydown",d)},[]),r.jsx(js.Dialog,{open:o,onOpenChange:a,label:"Befehlspalette",className:"fixed inset-0 z-50 flex items-start justify-center bg-black/50 p-4 pt-[12vh]",onClick:()=>a(!1),children:r.jsxs("div",{className:"w-full max-w-lg overflow-hidden rounded-xl border border-border bg-popover text-popover-foreground shadow-2xl",onClick:d=>d.stopPropagation(),children:[r.jsx(js.Input,{autoFocus:!0,placeholder:"Springe zu… (Modelle, Routing, System …)",className:"w-full border-b border-border bg-transparent px-4 py-3 text-sm outline-none placeholder:text-muted-foreground"}),r.jsxs(js.List,{className:"max-h-80 overflow-y-auto p-2",children:[r.jsx(js.Empty,{className:"px-3 py-6 text-center text-sm text-muted-foreground",children:"Nichts gefunden."}),r.jsx(js.Group,{heading:"Bereiche",className:"px-1 py-1 text-xs text-muted-foreground",children:sc.map(d=>r.jsxs(js.Item,{value:`${d.label} ${d.hint}`,onSelect:()=>{s(d.id),a(!1)},className:"flex cursor-pointer items-center gap-3 rounded-md px-3 py-2 text-sm text-foreground aria-selected:bg-accent aria-selected:text-accent-foreground",children:[r.jsx(d.icon,{className:"h-4 w-4 text-primary"}),r.jsx("span",{children:d.label}),r.jsx("span",{className:"ml-auto truncate text-xs text-muted-foreground",children:d.hint})]},d.id))})]})]})})}async function he(s,o){var v;const a={"Content-Type":"application/json",...o==null?void 0:o.headers},d=localStorage.getItem("mc_sudo_password"),u=localStorage.getItem("mc_hf_token");d&&(a["X-Sudo-Password"]=d);let f=o==null?void 0:o.body;if((((v=o==null?void 0:o.method)==null?void 0:v.toUpperCase())||"GET")==="POST"){if(typeof f=="string")try{const x=JSON.parse(f);let b=!1;d&&!("sudo_password"in x)&&(x.sudo_password=d,b=!0),u&&!("hf_token"in x)&&(x.hf_token=u,b=!0),b&&(f=JSON.stringify(x))}catch{}else if(!f){const x={};d&&(x.sudo_password=d),u&&(x.hf_token=u),Object.keys(x).length>0&&(f=JSON.stringify(x))}}const p=await fetch(s,{...o,headers:a,body:f});if(!p.ok)throw new Error(`${p.status} ${p.statusText}`);return p.json()}const Qe={health:["health"],systemStatus:["system-status"],services:["services"],models:["models"],routing:["routing"],jobs:["jobs"],tokenStats:["token-stats"],agentStatus:["agent-status"],hermesBrain:["hermes-brain"],updates:["updates"],discover:["discover"],drafts:s=>["drafts",s??""],connect:s=>["connect",s??""],memory:(s,o)=>["memory",s??"",o??""]},Xy=()=>Ct({queryKey:Qe.health,queryFn:()=>he("/api/health"),refetchInterval:1e4}),Fa=(s=5e3)=>Ct({queryKey:Qe.systemStatus,queryFn:()=>he("/api/system/status"),refetchInterval:s}),eb=(s=3e3)=>Ct({queryKey:Qe.services,queryFn:()=>he("/api/system/services"),refetchInterval:s}),Bn=(s=4e3)=>Ct({queryKey:Qe.models,queryFn:()=>he("/api/models"),refetchInterval:s}),tb=(s=4e3)=>Ct({queryKey:Qe.routing,queryFn:()=>he("/api/routing"),refetchInterval:s}),hh=(s=2e3)=>Ct({queryKey:Qe.jobs,queryFn:()=>he("/api/jobs"),refetchInterval:s,select:o=>o.jobs??[]}),xh=(s=3e3)=>Ct({queryKey:Qe.tokenStats,queryFn:()=>he("/api/system/token-stats"),refetchInterval:s}),gh=(s=5e3)=>Ct({queryKey:Qe.agentStatus,queryFn:()=>he("/api/agent/status"),refetchInterval:s}),rb=(s=6e4)=>Ct({queryKey:Qe.hermesBrain,queryFn:()=>he("/api/agent/brain"),refetchInterval:s}),kc=s=>Ct({queryKey:Qe.updates,queryFn:()=>he("/api/maintenance/updates"),refetchInterval:s}),nb=()=>Ct({queryKey:Qe.discover,queryFn:()=>he("/api/discover")}),sb=s=>Ct({queryKey:Qe.drafts(s),queryFn:()=>he(`/api/models/drafts?target=${encodeURIComponent(s??"")}`),enabled:!!s}),vh=s=>Ct({queryKey:Qe.connect(s),queryFn:()=>he(s?`/api/connect?${s}`:"/api/connect")}),yh=s=>Ct({queryKey:Qe.memory(s==null?void 0:s.q,s==null?void 0:s.category),queryFn:()=>{const o=new URLSearchParams;return s!=null&&s.q&&o.set("q",s.q),s!=null&&s.category&&o.set("category",s.category),he(`/api/memory?${o}`)},select:o=>s!=null&&s.limit?o.slice(0,s.limit):o});function St(s){return(s/1024**3).toFixed(1)}function dc(s){return s?s>1024**3?`${(s/1024**3).toFixed(1)} GB`:`${(s/1024**2).toFixed(0)} MB`:""}function $t(s){if(!s)return"—";const o=s/1024**3;return o>=1?`${o.toFixed(1)} GB`:`${(s/1024**2).toFixed(0)} MB`}function ob(s){if(!s)return"";const o=Math.floor(s/60);return o>0?`${o} min`:`${s} s`}function Zp(s){return s?`${Math.round(s/1024)}k`:"—"}function bh(s){var o,a,d="";if(typeof s=="string"||typeof s=="number")d+=s;else if(typeof s=="object")if(Array.isArray(s)){var u=s.length;for(o=0;o{const o=db(s),{conflictingClassGroups:a,conflictingClassGroupModifiers:d}=s;return{getClassGroupId:h=>{const p=h.split(Nc);return p[0]===""&&p.length!==1&&p.shift(),wh(p,o)||ib(h)},getConflictingClassGroupIds:(h,p)=>{const v=a[h]||[];return p&&d[h]?[...v,...d[h]]:v}}},wh=(s,o)=>{var h;if(s.length===0)return o.classGroupId;const a=s[0],d=o.nextPart.get(a),u=d?wh(s.slice(1),d):void 0;if(u)return u;if(o.validators.length===0)return;const f=s.join(Nc);return(h=o.validators.find(({validator:p})=>p(f)))==null?void 0:h.classGroupId},Yp=/^\[(.+)\]$/,ib=s=>{if(Yp.test(s)){const o=Yp.exec(s)[1],a=o==null?void 0:o.substring(0,o.indexOf(":"));if(a)return"arbitrary.."+a}},db=s=>{const{theme:o,prefix:a}=s,d={nextPart:new Map,validators:[]};return ub(Object.entries(s.classGroups),a).forEach(([f,h])=>{cc(h,d,f,o)}),d},cc=(s,o,a,d)=>{s.forEach(u=>{if(typeof u=="string"){const f=u===""?o:Jp(o,u);f.classGroupId=a;return}if(typeof u=="function"){if(cb(u)){cc(u(d),o,a,d);return}o.validators.push({validator:u,classGroupId:a});return}Object.entries(u).forEach(([f,h])=>{cc(h,Jp(o,f),a,d)})})},Jp=(s,o)=>{let a=s;return o.split(Nc).forEach(d=>{a.nextPart.has(d)||a.nextPart.set(d,{nextPart:new Map,validators:[]}),a=a.nextPart.get(d)}),a},cb=s=>s.isThemeGetter,ub=(s,o)=>o?s.map(([a,d])=>{const u=d.map(f=>typeof f=="string"?o+f:typeof f=="object"?Object.fromEntries(Object.entries(f).map(([h,p])=>[o+h,p])):f);return[a,u]}):s,fb=s=>{if(s<1)return{get:()=>{},set:()=>{}};let o=0,a=new Map,d=new Map;const u=(f,h)=>{a.set(f,h),o++,o>s&&(o=0,d=a,a=new Map)};return{get(f){let h=a.get(f);if(h!==void 0)return h;if((h=d.get(f))!==void 0)return u(f,h),h},set(f,h){a.has(f)?a.set(f,h):u(f,h)}}},jh="!",pb=s=>{const{separator:o,experimentalParseClassName:a}=s,d=o.length===1,u=o[0],f=o.length,h=p=>{const v=[];let x=0,b=0,w;for(let k=0;kb?w-b:void 0;return{modifiers:v,hasImportantModifier:R,baseClassName:O,maybePostfixModifierPosition:E}};return a?p=>a({className:p,parseClassName:h}):h},mb=s=>{if(s.length<=1)return s;const o=[];let a=[];return s.forEach(d=>{d[0]==="["?(o.push(...a.sort(),d),a=[]):a.push(d)}),o.push(...a.sort()),o},hb=s=>({cache:fb(s.cacheSize),parseClassName:pb(s),...ab(s)}),xb=/\s+/,gb=(s,o)=>{const{parseClassName:a,getClassGroupId:d,getConflictingClassGroupIds:u}=o,f=[],h=s.trim().split(xb);let p="";for(let v=h.length-1;v>=0;v-=1){const x=h[v],{modifiers:b,hasImportantModifier:w,baseClassName:P,maybePostfixModifierPosition:R}=a(x);let O=!!R,E=d(O?P.substring(0,R):P);if(!E){if(!O){p=x+(p.length>0?" "+p:p);continue}if(E=d(P),!E){p=x+(p.length>0?" "+p:p);continue}O=!1}const k=mb(b).join(":"),C=w?k+jh:k,I=C+E;if(f.includes(I))continue;f.push(I);const B=u(E,O);for(let z=0;z0?" "+p:p)}return p};function vb(){let s=0,o,a,d="";for(;s{if(typeof s=="string")return s;let o,a="";for(let d=0;dw(b),s());return a=hb(x),d=a.cache.get,u=a.cache.set,f=p,p(v)}function p(v){const x=d(v);if(x)return x;const b=gb(v,a);return u(v,b),b}return function(){return f(vb.apply(null,arguments))}}const Ue=s=>{const o=a=>a[s]||[];return o.isThemeGetter=!0,o},Nh=/^\[(?:([a-z-]+):)?(.+)\]$/i,bb=/^\d+\/\d+$/,wb=new Set(["px","full","screen"]),jb=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,kb=/\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$/,Nb=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/,Sb=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,Cb=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,vr=s=>Cs(s)||wb.has(s)||bb.test(s),Kr=s=>Gs(s,"length",Ab),Cs=s=>!!s&&!Number.isNaN(Number(s)),Ld=s=>Gs(s,"number",Cs),Lo=s=>!!s&&Number.isInteger(Number(s)),Eb=s=>s.endsWith("%")&&Cs(s.slice(0,-1)),Se=s=>Nh.test(s),Qr=s=>jb.test(s),_b=new Set(["length","size","percentage"]),Mb=s=>Gs(s,_b,Sh),Pb=s=>Gs(s,"position",Sh),Rb=new Set(["image","url"]),Ob=s=>Gs(s,Rb,zb),Db=s=>Gs(s,"",Tb),Fo=()=>!0,Gs=(s,o,a)=>{const d=Nh.exec(s);return d?d[1]?typeof o=="string"?d[1]===o:o.has(d[1]):a(d[2]):!1},Ab=s=>kb.test(s)&&!Nb.test(s),Sh=()=>!1,Tb=s=>Sb.test(s),zb=s=>Cb.test(s),Lb=()=>{const s=Ue("colors"),o=Ue("spacing"),a=Ue("blur"),d=Ue("brightness"),u=Ue("borderColor"),f=Ue("borderRadius"),h=Ue("borderSpacing"),p=Ue("borderWidth"),v=Ue("contrast"),x=Ue("grayscale"),b=Ue("hueRotate"),w=Ue("invert"),P=Ue("gap"),R=Ue("gradientColorStops"),O=Ue("gradientColorStopPositions"),E=Ue("inset"),k=Ue("margin"),C=Ue("opacity"),I=Ue("padding"),B=Ue("saturate"),z=Ue("scale"),$=Ue("sepia"),L=Ue("skew"),H=Ue("space"),re=Ue("translate"),oe=()=>["auto","contain","none"],me=()=>["auto","hidden","clip","visible","scroll"],xe=()=>["auto",Se,o],G=()=>[Se,o],Pe=()=>["",vr,Kr],we=()=>["auto",Cs,Se],Ee=()=>["bottom","center","left","left-bottom","left-top","right","right-bottom","right-top","top"],Te=()=>["solid","dashed","dotted","double","none"],_e=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],Y=()=>["start","end","center","between","around","evenly","stretch"],de=()=>["","0",Se],J=()=>["auto","avoid","all","avoid-page","page","left","right","column"],M=()=>[Cs,Se];return{cacheSize:500,separator:":",theme:{colors:[Fo],spacing:[vr,Kr],blur:["none","",Qr,Se],brightness:M(),borderColor:[s],borderRadius:["none","","full",Qr,Se],borderSpacing:G(),borderWidth:Pe(),contrast:M(),grayscale:de(),hueRotate:M(),invert:de(),gap:G(),gradientColorStops:[s],gradientColorStopPositions:[Eb,Kr],inset:xe(),margin:xe(),opacity:M(),padding:G(),saturate:M(),scale:M(),sepia:de(),skew:M(),space:G(),translate:G()},classGroups:{aspect:[{aspect:["auto","square","video",Se]}],container:["container"],columns:[{columns:[Qr]}],"break-after":[{"break-after":J()}],"break-before":[{"break-before":J()}],"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:[...Ee(),Se]}],overflow:[{overflow:me()}],"overflow-x":[{"overflow-x":me()}],"overflow-y":[{"overflow-y":me()}],overscroll:[{overscroll:oe()}],"overscroll-x":[{"overscroll-x":oe()}],"overscroll-y":[{"overscroll-y":oe()}],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",Lo,Se]}],basis:[{basis:xe()}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["wrap","wrap-reverse","nowrap"]}],flex:[{flex:["1","auto","initial","none",Se]}],grow:[{grow:de()}],shrink:[{shrink:de()}],order:[{order:["first","last","none",Lo,Se]}],"grid-cols":[{"grid-cols":[Fo]}],"col-start-end":[{col:["auto",{span:["full",Lo,Se]},Se]}],"col-start":[{"col-start":we()}],"col-end":[{"col-end":we()}],"grid-rows":[{"grid-rows":[Fo]}],"row-start-end":[{row:["auto",{span:[Lo,Se]},Se]}],"row-start":[{"row-start":we()}],"row-end":[{"row-end":we()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":["auto","min","max","fr",Se]}],"auto-rows":[{"auto-rows":["auto","min","max","fr",Se]}],gap:[{gap:[P]}],"gap-x":[{"gap-x":[P]}],"gap-y":[{"gap-y":[P]}],"justify-content":[{justify:["normal",...Y()]}],"justify-items":[{"justify-items":["start","end","center","stretch"]}],"justify-self":[{"justify-self":["auto","start","end","center","stretch"]}],"align-content":[{content:["normal",...Y(),"baseline"]}],"align-items":[{items:["start","end","center","baseline","stretch"]}],"align-self":[{self:["auto","start","end","center","stretch","baseline"]}],"place-content":[{"place-content":[...Y(),"baseline"]}],"place-items":[{"place-items":["start","end","center","baseline","stretch"]}],"place-self":[{"place-self":["auto","start","end","center","stretch"]}],p:[{p:[I]}],px:[{px:[I]}],py:[{py:[I]}],ps:[{ps:[I]}],pe:[{pe:[I]}],pt:[{pt:[I]}],pr:[{pr:[I]}],pb:[{pb:[I]}],pl:[{pl:[I]}],m:[{m:[k]}],mx:[{mx:[k]}],my:[{my:[k]}],ms:[{ms:[k]}],me:[{me:[k]}],mt:[{mt:[k]}],mr:[{mr:[k]}],mb:[{mb:[k]}],ml:[{ml:[k]}],"space-x":[{"space-x":[H]}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":[H]}],"space-y-reverse":["space-y-reverse"],w:[{w:["auto","min","max","fit","svw","lvw","dvw",Se,o]}],"min-w":[{"min-w":[Se,o,"min","max","fit"]}],"max-w":[{"max-w":[Se,o,"none","full","min","max","fit","prose",{screen:[Qr]},Qr]}],h:[{h:[Se,o,"auto","min","max","fit","svh","lvh","dvh"]}],"min-h":[{"min-h":[Se,o,"min","max","fit","svh","lvh","dvh"]}],"max-h":[{"max-h":[Se,o,"min","max","fit","svh","lvh","dvh"]}],size:[{size:[Se,o,"auto","min","max","fit"]}],"font-size":[{text:["base",Qr,Kr]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:["thin","extralight","light","normal","medium","semibold","bold","extrabold","black",Ld]}],"font-family":[{font:[Fo]}],"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",Se]}],"line-clamp":[{"line-clamp":["none",Cs,Ld]}],leading:[{leading:["none","tight","snug","normal","relaxed","loose",vr,Se]}],"list-image":[{"list-image":["none",Se]}],"list-style-type":[{list:["none","disc","decimal",Se]}],"list-style-position":[{list:["inside","outside"]}],"placeholder-color":[{placeholder:[s]}],"placeholder-opacity":[{"placeholder-opacity":[C]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"text-color":[{text:[s]}],"text-opacity":[{"text-opacity":[C]}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...Te(),"wavy"]}],"text-decoration-thickness":[{decoration:["auto","from-font",vr,Kr]}],"underline-offset":[{"underline-offset":["auto",vr,Se]}],"text-decoration-color":[{decoration:[s]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:G()}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",Se]}],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",Se]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-opacity":[{"bg-opacity":[C]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:[...Ee(),Pb]}],"bg-repeat":[{bg:["no-repeat",{repeat:["","x","y","round","space"]}]}],"bg-size":[{bg:["auto","cover","contain",Mb]}],"bg-image":[{bg:["none",{"gradient-to":["t","tr","r","br","b","bl","l","tl"]},Ob]}],"bg-color":[{bg:[s]}],"gradient-from-pos":[{from:[O]}],"gradient-via-pos":[{via:[O]}],"gradient-to-pos":[{to:[O]}],"gradient-from":[{from:[R]}],"gradient-via":[{via:[R]}],"gradient-to":[{to:[R]}],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:[p]}],"border-w-x":[{"border-x":[p]}],"border-w-y":[{"border-y":[p]}],"border-w-s":[{"border-s":[p]}],"border-w-e":[{"border-e":[p]}],"border-w-t":[{"border-t":[p]}],"border-w-r":[{"border-r":[p]}],"border-w-b":[{"border-b":[p]}],"border-w-l":[{"border-l":[p]}],"border-opacity":[{"border-opacity":[C]}],"border-style":[{border:[...Te(),"hidden"]}],"divide-x":[{"divide-x":[p]}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":[p]}],"divide-y-reverse":["divide-y-reverse"],"divide-opacity":[{"divide-opacity":[C]}],"divide-style":[{divide:Te()}],"border-color":[{border:[u]}],"border-color-x":[{"border-x":[u]}],"border-color-y":[{"border-y":[u]}],"border-color-s":[{"border-s":[u]}],"border-color-e":[{"border-e":[u]}],"border-color-t":[{"border-t":[u]}],"border-color-r":[{"border-r":[u]}],"border-color-b":[{"border-b":[u]}],"border-color-l":[{"border-l":[u]}],"divide-color":[{divide:[u]}],"outline-style":[{outline:["",...Te()]}],"outline-offset":[{"outline-offset":[vr,Se]}],"outline-w":[{outline:[vr,Kr]}],"outline-color":[{outline:[s]}],"ring-w":[{ring:Pe()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:[s]}],"ring-opacity":[{"ring-opacity":[C]}],"ring-offset-w":[{"ring-offset":[vr,Kr]}],"ring-offset-color":[{"ring-offset":[s]}],shadow:[{shadow:["","inner","none",Qr,Db]}],"shadow-color":[{shadow:[Fo]}],opacity:[{opacity:[C]}],"mix-blend":[{"mix-blend":[..._e(),"plus-lighter","plus-darker"]}],"bg-blend":[{"bg-blend":_e()}],filter:[{filter:["","none"]}],blur:[{blur:[a]}],brightness:[{brightness:[d]}],contrast:[{contrast:[v]}],"drop-shadow":[{"drop-shadow":["","none",Qr,Se]}],grayscale:[{grayscale:[x]}],"hue-rotate":[{"hue-rotate":[b]}],invert:[{invert:[w]}],saturate:[{saturate:[B]}],sepia:[{sepia:[$]}],"backdrop-filter":[{"backdrop-filter":["","none"]}],"backdrop-blur":[{"backdrop-blur":[a]}],"backdrop-brightness":[{"backdrop-brightness":[d]}],"backdrop-contrast":[{"backdrop-contrast":[v]}],"backdrop-grayscale":[{"backdrop-grayscale":[x]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[b]}],"backdrop-invert":[{"backdrop-invert":[w]}],"backdrop-opacity":[{"backdrop-opacity":[C]}],"backdrop-saturate":[{"backdrop-saturate":[B]}],"backdrop-sepia":[{"backdrop-sepia":[$]}],"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",Se]}],duration:[{duration:M()}],ease:[{ease:["linear","in","out","in-out",Se]}],delay:[{delay:M()}],animate:[{animate:["none","spin","ping","pulse","bounce",Se]}],transform:[{transform:["","gpu","none"]}],scale:[{scale:[z]}],"scale-x":[{"scale-x":[z]}],"scale-y":[{"scale-y":[z]}],rotate:[{rotate:[Lo,Se]}],"translate-x":[{"translate-x":[re]}],"translate-y":[{"translate-y":[re]}],"skew-x":[{"skew-x":[L]}],"skew-y":[{"skew-y":[L]}],"transform-origin":[{origin:["center","top","top-right","right","bottom-right","bottom","bottom-left","left","top-left",Se]}],accent:[{accent:["auto",s]}],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",Se]}],"caret-color":[{caret:[s]}],"pointer-events":[{"pointer-events":["none","auto"]}],resize:[{resize:["none","y","x",""]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scroll-m":[{"scroll-m":G()}],"scroll-mx":[{"scroll-mx":G()}],"scroll-my":[{"scroll-my":G()}],"scroll-ms":[{"scroll-ms":G()}],"scroll-me":[{"scroll-me":G()}],"scroll-mt":[{"scroll-mt":G()}],"scroll-mr":[{"scroll-mr":G()}],"scroll-mb":[{"scroll-mb":G()}],"scroll-ml":[{"scroll-ml":G()}],"scroll-p":[{"scroll-p":G()}],"scroll-px":[{"scroll-px":G()}],"scroll-py":[{"scroll-py":G()}],"scroll-ps":[{"scroll-ps":G()}],"scroll-pe":[{"scroll-pe":G()}],"scroll-pt":[{"scroll-pt":G()}],"scroll-pr":[{"scroll-pr":G()}],"scroll-pb":[{"scroll-pb":G()}],"scroll-pl":[{"scroll-pl":G()}],"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",Se]}],fill:[{fill:[s,"none"]}],"stroke-w":[{stroke:[vr,Kr,Ld]}],stroke:[{stroke:[s,"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"]}}},Fb=yb(Lb);function X(...s){return Fb(lb(s))}function Yo(s){return s?s.replace(/127\.0\.0\.1|localhost/g,"192.168.178.151"):""}const Ch=["fast","heavy","coder","vision","scout"],Ib={fast:"bg-cyan-500/15 text-cyan-400 border-cyan-500/25",heavy:"bg-amber-500/15 text-amber-400 border-amber-500/25",coder:"bg-violet-500/15 text-violet-400 border-violet-500/25",vision:"bg-pink-500/15 text-pink-400 border-pink-500/25",scout:"bg-teal-500/15 text-teal-400 border-teal-500/25",hermes:"bg-indigo-500/15 text-indigo-400 border-indigo-500/25"},Sc=s=>s&&Ib[s]||"bg-slate-500/15 text-slate-300 border-slate-500/25";function $b({fit:s}){const o={perfect:"bg-emerald-500/15 text-emerald-400 border border-emerald-500/20",marginal:"bg-amber-500/15 text-amber-400 border border-amber-500/20",too_tight:"bg-red-500/15 text-red-400 border border-red-500/20"}[s.level];return r.jsxs("span",{className:X("rounded px-2 py-0.5 text-[10px] font-semibold uppercase tracking-wider font-mono",o),children:[s.text," • ",s.req_gb," GB RAM"]})}function Xp(s){const o=s.toLowerCase();return o.includes("qwen")?{name:"Qwen",color:"bg-purple-500/20 text-purple-300 border-purple-500/30",initial:"Q"}:o.includes("gemma")?{name:"Gemma",color:"bg-blue-500/20 text-blue-300 border-blue-500/30",initial:"G"}:o.includes("llama")?{name:"Llama",color:"bg-red-500/20 text-red-300 border-red-500/30",initial:"🦙"}:o.includes("mistral")||o.includes("mixtral")?{name:"Mistral",color:"bg-orange-500/20 text-orange-300 border-orange-500/30",initial:"M"}:o.includes("deepseek")?{name:"DeepSeek",color:"bg-cyan-500/20 text-cyan-300 border-cyan-500/30",initial:"D"}:o.includes("hermes")||o.includes("nous")?{name:"Hermes",color:"bg-amber-500/20 text-amber-300 border-amber-500/30",initial:"H"}:o.includes("phi")?{name:"Phi",color:"bg-emerald-500/20 text-emerald-300 border-emerald-500/30",initial:"Φ"}:{name:"Other",color:"bg-slate-500/20 text-slate-300 border-slate-500/30",initial:"AI"}}function Ub(){const{data:s}=Bn(2e3),{data:o}=xh(2e3),a=(s==null?void 0:s.models)??[],d=(s==null?void 0:s.running)??[],u=a.filter(v=>d.includes(v.name)),f=g.useRef(null),[h,p]=g.useState(!1);return g.useEffect(()=>{if(!o)return;const v=o.total_tokens;if(f.current!==null&&v>f.current){p(!0);const x=setTimeout(()=>p(!1),4e3);return f.current=v,()=>clearTimeout(x)}f.current=v},[o==null?void 0:o.total_tokens]),r.jsxs("div",{className:"rounded-2xl border border-border/60 bg-card/45 backdrop-blur-md p-5 shadow-lg shadow-black/15",children:[r.jsxs("div",{className:"flex items-center justify-between mb-4",children:[r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx(Ho,{className:"h-4.5 w-4.5 text-primary"}),r.jsx("h2",{className:"text-sm font-semibold tracking-wide uppercase text-foreground",children:"Aktive Modelle (Live)"})]}),r.jsxs("span",{className:X("flex items-center gap-1.5 text-[10px] font-bold uppercase tracking-wider font-mono px-2 py-0.5 rounded-full border transition-colors",h?"bg-emerald-500/10 text-emerald-400 border-emerald-500/30":"bg-background/30 text-muted-foreground/70 border-border/40"),children:[h?r.jsx(Qo,{className:"h-3 w-3 animate-pulse"}):r.jsx(T0,{className:"h-3 w-3"}),h?"Inferenz aktiv":"Idle"]})]}),u.length===0?r.jsx("div",{className:"flex items-center justify-center gap-2 h-20 text-xs text-muted-foreground/70 italic",children:"Kein Modell geladen — Auto-Swap lädt bei Anfrage."}):r.jsx("div",{className:"grid gap-2 sm:grid-cols-2 xl:grid-cols-3",children:u.map(v=>{var x;return r.jsxs("div",{className:"flex items-center justify-between gap-2 p-3 rounded-xl bg-emerald-500/5 border border-emerald-500/20",children:[r.jsxs("div",{className:"min-w-0",children:[r.jsxs("div",{className:"flex items-center gap-1.5",children:[v.role&&r.jsx("span",{className:X("text-[8px] font-semibold uppercase px-1.5 py-0.5 rounded font-mono border tracking-wider shrink-0",Sc(v.role)),children:v.role}),r.jsx("span",{className:"text-xs font-semibold font-mono text-foreground truncate",children:(x=v.name.split("/").pop())==null?void 0:x.replace(/\.gguf$/i,"")})]}),r.jsxs("div",{className:"text-[9px] font-mono text-muted-foreground/70 mt-0.5",children:[$t(v.size_bytes)," im Unified-RAM"]})]}),r.jsxs("span",{className:"flex items-center gap-1 text-[8px] font-semibold text-emerald-400 uppercase tracking-wider font-mono shrink-0",children:[r.jsx("span",{className:X("h-1.5 w-1.5 rounded-full bg-emerald-500",h&&"animate-pulse")})," warm"]})]},v.name)})})]})}function Na({value:s,label:o,detail:a}){const u=2*Math.PI*24,f=u-Math.min(s,100)/100*u,h=s>90?"stroke-red-500":s>75?"stroke-amber-500":"stroke-primary";return r.jsxs("div",{className:"flex flex-col items-center gap-1.5 p-2 bg-background/20 rounded-xl border border-border/40",children:[r.jsxs("div",{className:"relative flex h-16 w-16 items-center justify-center",children:[r.jsxs("svg",{className:"absolute inset-0 h-full w-full -rotate-90",children:[r.jsx("circle",{cx:"32",cy:"32",r:24,className:"stroke-muted fill-none",strokeWidth:"4.5"}),r.jsx("circle",{cx:"32",cy:"32",r:24,className:X("fill-none transition-all duration-700 ease-out",h),strokeWidth:"4.5",strokeDasharray:u,strokeDashoffset:f,strokeLinecap:"round"})]}),r.jsxs("span",{className:"text-xs font-mono font-bold tracking-tight text-foreground",children:[Math.round(s),"%"]})]}),r.jsx("span",{className:"text-[11px] font-semibold text-muted-foreground uppercase tracking-wider",children:o}),a&&r.jsx("span",{className:"text-[10px] font-mono text-muted-foreground/80",children:a})]})}function Bb(){const{data:s}=Fa(3e3);return r.jsxs("div",{className:"md:col-span-2 flex flex-col justify-between rounded-2xl border border-border/60 bg-card/45 backdrop-blur-md p-5 shadow-lg shadow-black/15",children:[r.jsxs("div",{children:[r.jsxs("div",{className:"flex items-center gap-2 mb-4",children:[r.jsx(Dt,{className:"h-4.5 w-4.5 text-primary"}),r.jsx("h2",{className:"text-sm font-semibold tracking-wide uppercase text-foreground",children:"System-Status"})]}),s?r.jsxs("div",{className:"grid grid-cols-2 gap-3 sm:grid-cols-4",children:[r.jsx(Na,{value:s.cpu.percent,label:"CPU",detail:s.cpu.cores?`${s.cpu.cores} Cores`:void 0}),r.jsx(Na,{value:s.ram.percent,label:"RAM",detail:`${St(s.ram.used)} / ${St(s.ram.total)} GB`}),s.gpu&&s.gpu.busy_percent!=null&&s.gpu.gtt_used!=null&&s.gpu.gtt_total!=null&&r.jsx(Na,{value:s.gpu.busy_percent,label:"GPU",detail:`${St(s.gpu.gtt_used)} / ${St(s.gpu.gtt_total)} GB`}),s.disk&&r.jsx(Na,{value:s.disk.percent,label:"Disk",detail:`${St(s.disk.used)} / ${St(s.disk.total)} GB`})]}):r.jsx("div",{className:"h-28 flex items-center justify-center text-xs text-muted-foreground",children:"Lade Systemdaten…"})]}),(s==null?void 0:s.temp)&&(s.temp.cpu||s.temp.gpu)&&r.jsxs("div",{className:"mt-4 flex gap-4 text-xs font-mono text-muted-foreground/80 border-t border-border/30 pt-3",children:[s.temp.cpu!=null&&r.jsxs("span",{children:["CPU Temp: ",s.temp.cpu," °C"]}),s.temp.gpu!=null&&r.jsxs("span",{children:["GPU Temp: ",s.temp.gpu," °C"]})]})]})}function Eh({type:s,title:o,message:a,defaultValue:d,onConfirm:u,onCancel:f}){const h=g.useRef(null);return r.jsx("div",{className:"fixed inset-0 z-[99] bg-black/60 backdrop-blur-sm flex items-center justify-center p-4",children:r.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:[r.jsxs("div",{className:"flex items-center justify-between border-b border-border/20 pb-2",children:[r.jsx("h3",{className:"text-xs font-bold uppercase tracking-wider text-primary",children:o}),r.jsx("button",{onClick:f||(()=>u()),className:"p-1 rounded hover:bg-accent text-muted-foreground hover:text-foreground cursor-pointer",children:r.jsx(jr,{className:"h-4 w-4"})})]}),r.jsx("p",{className:"text-xs text-muted-foreground leading-relaxed",children:a}),s==="prompt"&&r.jsx("input",{ref:h,type:"text",defaultValue:d,className:"w-full 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:p=>{var v;p.key==="Enter"&&u((v=h.current)==null?void 0:v.value)}}),r.jsxs("div",{className:"flex justify-end gap-3 pt-2",children:[(s==="confirm"||s==="prompt")&&r.jsx("button",{onClick:f,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"}),r.jsx("button",{onClick:()=>{var v;const p=s==="prompt"?(v=h.current)==null?void 0:v.value:void 0;u(p)},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:s==="confirm"?"Ja, fortfahren":s==="prompt"?"Übernehmen":"OK"})]})]})})}function Hn(){const[s,o]=g.useState(null),a=g.useCallback(()=>o(null),[]),d=g.useCallback((p,v,x)=>{o({type:"alert",title:p,message:v,onConfirm:()=>{o(null),x==null||x()}})},[]),u=g.useCallback((p,v,x,b)=>{o({type:"confirm",title:p,message:v,onConfirm:()=>{o(null),x()},onCancel:()=>{o(null),b==null||b()}})},[]),f=g.useCallback((p,v,x,b,w)=>{o({type:"prompt",title:p,message:v,defaultValue:x,onConfirm:P=>{o(null),b(P)},onCancel:()=>{o(null),w==null||w()}})},[]),h=s?r.jsx(Eh,{...s}):null;return{showAlert:d,showConfirm:u,showPrompt:f,close:a,dialogElement:h}}function Hb(){var $;const s=cn(),{data:o}=kc(3e3),{data:a=[]}=hh(3e3),{showConfirm:d,dialogElement:u}=Hn(),[f,h]=g.useState(""),[p,v]=g.useState(!1),[x,b]=g.useState(""),[w,P]=g.useState(!1),[R,O]=g.useState({open:!1,actionPath:"",actionLabel:""}),E=()=>{s.invalidateQueries({queryKey:Qe.updates}),s.invalidateQueries({queryKey:Qe.jobs}),s.invalidateQueries({queryKey:Qe.models})};async function k(L,H,re,oe){h(`${H} wird ausgeführt...`),v(!0);try{const me={...re},xe=await he(L,{method:"POST",body:JSON.stringify(me)});if(xe.status==="password_required"||xe.status==="incorrect_password"){O({open:!0,actionPath:L,actionLabel:H,payload:re,error:xe.status==="incorrect_password"?"Falsches Sudo-Passwort. Bitte erneut versuchen.":void 0}),h("");return}xe.job_id?h(`${H} gestartet (Job-ID: ${xe.job_id})`):xe.ok?h(`${H} erfolgreich ausgeführt.`):h(`Fehler: ${xe.err||"Unbekannter Fehler"}`),E()}catch(me){h(`Fehler bei ${H}: ${me.message}`)}finally{v(!1)}}async function C(){P(!0);try{const L={...R.payload,sudo_password:x},H=await he(R.actionPath,{method:"POST",body:JSON.stringify(L)});if(H.status==="password_required"||H.status==="incorrect_password"){O(re=>({...re,error:"Falsches Sudo-Passwort. Bitte erneut versuchen."}));return}H.job_id?h(`${R.actionLabel} gestartet (Job-ID: ${H.job_id})`):H.ok?h(`${R.actionLabel} erfolgreich ausgeführt.`):h(`Fehler: ${H.err||"Unbekannter Fehler"}`),O({open:!1,actionPath:"",actionLabel:""}),b(""),E()}catch(L){h(`Fehler: ${L.message}`),O({open:!1,actionPath:"",actionLabel:""}),b("")}finally{P(!1)}}async function I(L,H){h(`Upgrade für ${L} wird gestartet...`);try{await he("/api/models/install",{method:"POST",body:JSON.stringify({repo:L,role:H,quant:"Q4_K_M",jinja:!0})}),h("Upgrade-Download gestartet."),E()}catch(re){h(`Upgrade fehlgeschlagen: ${re.message}`)}}const B=a.find(L=>L.label.includes("OS-Update")&&(L.state==="running"||L.state==="queued")),z=a.find(L=>L.label.includes("Engine-Update")&&(L.state==="running"||L.state==="queued"));return r.jsxs("div",{className:"rounded-2xl border border-border/60 bg-card/45 backdrop-blur-md p-5 shadow-lg shadow-black/15 flex flex-col justify-between",children:[R.open&&r.jsx("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/60 backdrop-blur-sm p-4",children:r.jsxs("div",{className:"w-full max-w-sm rounded-2xl border border-border/60 bg-card/90 backdrop-blur-xl p-5 shadow-2xl space-y-4",children:[r.jsxs("div",{className:"flex items-center justify-between border-b border-border/20 pb-2",children:[r.jsx("span",{className:"text-xs font-bold uppercase tracking-wider text-primary font-space",children:"Sudo-Passwort erforderlich"}),r.jsx("button",{onClick:()=>{O({open:!1,actionPath:"",actionLabel:""}),b("")},className:"p-1 rounded hover:bg-accent text-muted-foreground hover:text-foreground cursor-pointer",children:r.jsx(jr,{className:"h-4 w-4"})})]}),r.jsxs("p",{className:"text-[10px] text-muted-foreground leading-normal",children:["Für die Aktion ",r.jsx("strong",{children:R.actionLabel})," wird das Administrator-Passwort (Sudo) auf der Box benötigt."]}),r.jsxs("div",{className:"space-y-2",children:[r.jsx("input",{type:"password",value:x,onChange:L=>b(L.target.value),placeholder:"Sudo-Passwort eingeben...",className:"w-full h-9 rounded-lg border border-border/60 bg-background/40 px-3 text-xs outline-none focus:ring-1 focus:ring-primary/50 text-foreground",onKeyDown:L=>L.key==="Enter"&&C(),autoFocus:!0}),R.error&&r.jsx("div",{className:"text-[10px] font-semibold text-red-400",children:R.error})]}),r.jsxs("div",{className:"flex gap-2 justify-end",children:[r.jsx("button",{onClick:()=>{O({open:!1,actionPath:"",actionLabel:""}),b("")},className:"h-8 px-3 rounded-lg border border-border/60 bg-background/25 text-[10px] font-bold uppercase hover:bg-accent transition-all cursor-pointer",children:"Abbrechen"}),r.jsx("button",{onClick:C,disabled:!x||w,className:"h-8 px-4 rounded-lg bg-primary text-primary-foreground text-[10px] font-bold uppercase hover:opacity-90 transition-all disabled:opacity-50 cursor-pointer flex items-center justify-center gap-1.5",children:w?"Prüfe...":"Ausführen"})]})]})}),r.jsxs("div",{className:"space-y-4",children:[r.jsxs("div",{className:"flex items-center justify-between flex-wrap gap-2 border-b border-border/20 pb-2",children:[r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx(U0,{className:"h-4.5 w-4.5 text-primary"}),r.jsx("h2",{className:"text-sm font-semibold tracking-wide uppercase text-foreground",children:"Updates & Pflege"})]}),(o==null?void 0:o.last_check)&&r.jsxs("span",{className:"text-[9px] text-muted-foreground/80 font-mono",children:["Zuletzt gesucht: ",new Date(o.last_check*1e3).toLocaleString("de-DE",{day:"2-digit",month:"2-digit",year:"numeric",hour:"2-digit",minute:"2-digit"})]})]}),o?r.jsxs("div",{className:"space-y-3",children:[r.jsxs("div",{className:"space-y-1.5",children:[r.jsxs("div",{className:X("flex items-center justify-between px-3 py-1.5 rounded-lg border text-xs",o.os>0?"border-amber-500/30 bg-amber-500/5 text-amber-400 font-semibold":"border-border/30 bg-background/25 text-muted-foreground"),children:[r.jsx("span",{children:"OS-Pakete"}),r.jsx("span",{className:"font-mono",children:o.os>0?`${o.os} verfügbar`:"aktuell"})]}),r.jsxs("div",{className:X("flex items-center justify-between px-3 py-1.5 rounded-lg border text-xs",o.engine>0?"border-amber-500/30 bg-amber-500/5 text-amber-400 font-semibold":"border-border/30 bg-background/25 text-muted-foreground"),children:[r.jsx("span",{children:"Engine (llama.cpp)"}),r.jsx("span",{className:"font-mono",children:o.engine>0?"Update verfügbar":"aktuell"})]}),r.jsxs("div",{className:X("flex items-center justify-between px-3 py-1.5 rounded-lg border text-xs",o.models>0?"border-primary/30 bg-primary/5 text-primary font-semibold animate-pulse":"border-border/30 bg-background/25 text-muted-foreground"),children:[r.jsx("span",{children:"Modell-Upgrades"}),r.jsx("span",{className:"font-mono",children:o.models>0?`${o.models} verfügbar`:"aktuell"})]}),($=o.components)==null?void 0:$.map(L=>{const H=L.update===!0;return r.jsxs("div",{className:X("flex items-center justify-between px-3 py-1.5 rounded-lg border text-xs",H?"border-amber-500/30 bg-amber-500/5 text-amber-400 font-semibold":"border-border/30 bg-background/25 text-muted-foreground"),children:[r.jsxs("span",{className:"flex items-center gap-1.5",children:[L.name,L.reachable===!1&&r.jsx("span",{className:"text-[8px] font-bold uppercase text-red-400/80",children:"offline"})]}),r.jsx("span",{className:"font-mono text-[10px]",title:L.current?`installiert: ${L.current}`:void 0,children:H?`Update: ${L.latest}`:L.update===!1?"aktuell":L.latest?`neueste: ${L.latest}`:"—"})]},L.key)})]}),r.jsxs("div",{className:"grid grid-cols-2 gap-2 border-t border-border/20 pt-3",children:[r.jsx("button",{onClick:()=>k("/api/maintenance/os-update","OS-Update"),disabled:p||!!B,className:"h-8 px-2 rounded-lg border border-border/60 bg-background/20 text-[10px] font-bold uppercase hover:border-primary/50 hover:bg-background/40 transition-all cursor-pointer disabled:opacity-50 flex items-center justify-center gap-1",children:B?r.jsxs(r.Fragment,{children:[r.jsx(In,{className:"h-3 w-3 animate-spin text-primary"}),r.jsxs("span",{children:["Aktiv (",B.progress??0,"%)"]})]}):r.jsx("span",{children:"OS Update"})}),r.jsx("button",{onClick:()=>k("/api/maintenance/engine-update","Engine-Update"),disabled:p||!!z,className:"h-8 px-2 rounded-lg border border-border/60 bg-background/20 text-[10px] font-bold uppercase hover:border-primary/50 hover:bg-background/40 transition-all cursor-pointer disabled:opacity-50 flex items-center justify-center gap-1",children:z?r.jsxs(r.Fragment,{children:[r.jsx(In,{className:"h-3 w-3 animate-spin text-primary"}),r.jsxs("span",{children:["Aktiv (",z.progress??0,"%)"]})]}):r.jsx("span",{children:"Engine Update"})})]}),r.jsxs("button",{onClick:()=>{d("Host-System neu starten?","Bist du sicher, dass du das Host-System neu starten willst?",()=>k("/api/maintenance/reboot","Reboot"))},disabled:p,className:"w-full h-8 flex items-center justify-center gap-1.5 rounded-lg border border-red-500/30 bg-red-500/5 text-red-400 text-[10px] font-bold uppercase hover:bg-red-500/10 transition-all cursor-pointer disabled:opacity-50",children:[r.jsx(Om,{className:"h-3.5 w-3.5"}),r.jsx("span",{children:"Host Reboot"})]}),o.model_list.length>0&&r.jsxs("div",{className:"space-y-1.5 border-t border-border/20 pt-3",children:[r.jsx("div",{className:"text-[9px] uppercase font-bold text-muted-foreground/60 tracking-wider",children:"Verfügbare Modell-Upgrades:"}),r.jsx("div",{className:"max-h-24 overflow-y-auto space-y-1.5 pr-1 scrollbar-thin",children:o.model_list.map(L=>r.jsxs("div",{className:"flex items-center justify-between p-2 rounded bg-background/25 border border-border/30 text-[10px] font-mono text-muted-foreground",children:[r.jsxs("span",{className:"truncate flex-1 mr-1.5",title:`${L.role}: ${L.repo}`,children:[r.jsx("span",{className:"text-primary font-bold uppercase",children:L.role}),": ",L.repo.split("/").pop()]}),r.jsxs("button",{onClick:()=>I(L.repo,L.role),className:"px-2 py-0.5 text-[8px] font-bold uppercase rounded bg-primary text-primary-foreground hover:opacity-90 transition-all cursor-pointer flex items-center gap-0.5",children:[r.jsx(an,{className:"h-2.5 w-2.5"})," Laden"]})]},L.repo))})]})]}):r.jsx("div",{className:"h-24 flex items-center justify-center text-xs text-muted-foreground",children:"Lade Updates..."}),f&&r.jsx("div",{className:"text-[10px] font-mono text-primary font-medium bg-primary/5 p-2 rounded-lg border border-primary/20 break-all leading-normal",children:f}),r.jsxs("div",{className:"text-[9px] text-muted-foreground/60 leading-normal border-t border-border/10 pt-2.5 flex items-start gap-1",children:[r.jsx(Us,{className:"h-3 w-3 shrink-0 text-muted-foreground/50 mt-0.5"}),r.jsxs("span",{children:["OS-Update & Reboot benötigen NOPASSWD in ",r.jsx("code",{children:"/etc/sudoers"})," (z.B. ",r.jsx("code",{children:"hitonabi ALL=(root) NOPASSWD:..."}),") oder ein gültiges Sudo-Passwort per Pop-up."]})]})]}),r.jsx("div",{className:"mt-4 border-t border-border/30 pt-3 shrink-0",children:r.jsx("button",{onClick:()=>window.dispatchEvent(new CustomEvent("open-system-drawer")),className:"w-full h-8 flex items-center justify-center gap-1.5 rounded-lg bg-primary text-primary-foreground text-xs font-semibold hover:opacity-90 transition-all cursor-pointer shadow-md shadow-primary/10",children:"System-Zentrale öffnen"})}),u]})}function Gb(){const s=cn(),{data:o}=gh(3e3),{data:a}=Bn(),{showAlert:d,dialogElement:u}=Hn(),[f,h]=g.useState(!1),p=(a==null?void 0:a.models)??[];async function v(x){try{await he("/api/agent/brain",{method:"POST",body:JSON.stringify({model:x})}),d("Erfolgreich",`Hermes-Gehirn wurde auf '${x}' geändert. Der Gateway-Dienst wurde neu gestartet.`),s.invalidateQueries({queryKey:Qe.agentStatus}),h(!1)}catch(b){d("Fehler",`Fehler beim Wechseln des Gehirns: ${b.message}`)}}return r.jsxs("div",{className:"rounded-2xl border border-border/60 bg-card/45 backdrop-blur-md p-5 shadow-lg shadow-black/15 flex flex-col justify-between",children:[r.jsxs("div",{children:[r.jsxs("div",{className:"flex items-center justify-between mb-4",children:[r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx($s,{className:"h-4.5 w-4.5 text-primary"}),r.jsx("h2",{className:"text-sm font-semibold tracking-wide uppercase text-foreground",children:"Hermes Agent"})]}),(o==null?void 0:o.webui_url)&&r.jsxs("a",{href:Yo(o.webui_url),target:"_blank",rel:"noopener",className:X("flex items-center gap-1 px-3 py-1 rounded-lg text-xs font-medium transition-all",o.webui_reachable?"bg-primary text-primary-foreground hover:opacity-90 shadow-md shadow-primary/20":"border border-border text-muted-foreground"),children:[r.jsx(Ra,{className:"h-3 w-3"})," AnythingLLM öffnen"]})]}),o?r.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[r.jsxs("div",{className:"p-3 bg-background/20 rounded-xl border border-border/40",children:[r.jsx("div",{className:"text-[10px] text-muted-foreground uppercase font-semibold",children:"Gateway"}),r.jsxs("div",{className:"flex items-center gap-2 mt-1",children:[r.jsx("span",{className:X("h-2 w-2 rounded-full",o.gateway_reachable?"bg-emerald-500 animate-pulse":"bg-amber-500")}),r.jsx("span",{className:"text-xs font-medium",children:o.gateway_reachable?"Online":"Offline"})]})]}),r.jsxs("div",{className:"p-3 bg-background/20 rounded-xl border border-border/40",children:[r.jsx("div",{className:"text-[10px] text-muted-foreground uppercase font-semibold",children:"AnythingLLM"}),r.jsxs("div",{className:"flex items-center gap-2 mt-1",children:[r.jsx("span",{className:X("h-2 w-2 rounded-full",o.webui_reachable?"bg-emerald-500 animate-pulse":"bg-amber-500")}),r.jsx("span",{className:"text-xs font-medium",children:o.webui_reachable?"Online":"Offline"})]})]}),r.jsxs("div",{onClick:()=>h(!0),className:"p-3 bg-background/20 rounded-xl border border-border/40 hover:border-primary/45 hover:bg-background/30 transition-all duration-300 cursor-pointer",children:[r.jsxs("div",{className:"flex justify-between items-center",children:[r.jsx("span",{className:"text-[10px] text-muted-foreground uppercase font-semibold",children:"Gehirn"}),r.jsx(Dt,{className:"h-3 w-3 text-primary"})]}),r.jsxs("div",{className:"text-xs font-medium mt-1 font-mono text-primary truncate flex items-center gap-1",children:[r.jsx(Vo,{className:"h-3 w-3 shrink-0"}),o.brain_model||"auto"]})]}),r.jsxs("div",{className:"p-3 bg-background/20 rounded-xl border border-border/40",children:[r.jsxs("div",{className:"flex justify-between items-center",children:[r.jsx("span",{className:"text-[10px] text-muted-foreground uppercase font-semibold",children:"Verdrahtung"}),r.jsx(Ko,{className:"h-3 w-3 text-primary"})]}),r.jsxs("div",{className:"text-[10px] font-mono mt-1 space-y-0.5 text-muted-foreground",children:[r.jsxs("div",{children:["Config: ",o.has_config?r.jsx("span",{className:"text-emerald-400",children:"✓"}):"—"]}),r.jsxs("div",{children:["Skills: ",o.has_skills?r.jsx("span",{className:"text-emerald-400",children:"✓"}):"—"]}),r.jsxs("div",{children:["Memory: ",o.has_memories?r.jsx("span",{className:"text-emerald-400",children:"✓"}):"—"]})]})]})]}):r.jsx("div",{className:"h-28 flex items-center justify-center text-xs text-muted-foreground",children:"Lade Agenten-Status…"})]}),o&&r.jsxs("div",{className:"mt-3 border-t border-border/30 pt-3 space-y-1.5",children:[r.jsxs("div",{className:"flex items-center justify-between text-[10px] text-muted-foreground",children:[r.jsx("span",{children:"Telegram"}),r.jsx("span",{className:X("font-semibold",o.telegram_enabled?"text-emerald-400":""),children:o.telegram_enabled?"aktiv":"nicht konfiguriert"})]}),r.jsxs("div",{className:"flex items-center justify-between text-[10px] text-muted-foreground",children:[r.jsx("span",{children:"MCP-Server"}),r.jsxs("span",{className:"font-semibold text-foreground",children:[o.mcp_server_count??0," verbunden"]})]}),r.jsxs("div",{className:"flex items-center justify-between text-[10px] text-muted-foreground",children:[r.jsx("span",{children:"PC Executor"}),r.jsx("span",{className:X("font-semibold",o.pc_executor_reachable?"text-emerald-400":""),children:o.pc_executor_reachable?"erreichbar":"nicht verbunden"})]})]}),o&&f&&r.jsx("div",{className:"fixed inset-0 z-50 bg-black/60 backdrop-blur-sm flex items-center justify-center p-4",children:r.jsxs("div",{className:"w-full max-w-md 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:[r.jsxs("div",{className:"flex items-center justify-between border-b border-border/20 pb-2",children:[r.jsxs("h3",{className:"text-xs font-bold uppercase tracking-wider text-primary flex items-center gap-1.5",children:[r.jsx(Dt,{className:"h-4 w-4"}),r.jsx("span",{children:"Hermes-Gehirn konfigurieren"})]}),r.jsx("button",{onClick:()=>h(!1),className:"p-1 rounded hover:bg-accent text-muted-foreground hover:text-foreground cursor-pointer",children:r.jsx(jr,{className:"h-4 w-4"})})]}),r.jsxs("p",{className:"text-xs text-muted-foreground leading-relaxed",children:['Das „Gehirn" ist das primäre LLM für Hermes. Wähle ein Modell aus deiner Bibliothek oder nutze ein Gateway-Alias (',r.jsx("code",{className:"text-primary font-semibold",children:"auto"})," / ",r.jsx("code",{className:"text-primary font-semibold",children:"fast"})," / ",r.jsx("code",{className:"text-primary font-semibold",children:"heavy"}),"):"]}),r.jsx("div",{className:"space-y-1.5 max-h-60 overflow-y-auto pr-1",children:["auto","fast","heavy",...p.map(x=>{var b;return((b=x.name.split("/").pop())==null?void 0:b.replace(".gguf",""))||x.name})].map(x=>{const b=["auto","fast","heavy"].includes(x);return r.jsxs("button",{onClick:()=>v(x),className:X("w-full text-left px-3 py-2.5 rounded-lg text-xs hover:bg-accent flex items-center justify-between font-mono cursor-pointer border border-border/30",o.brain_model===x||!o.brain_model&&x==="auto"?"text-primary font-bold bg-primary/10 border-primary/30":"text-foreground bg-background/20"),children:[r.jsxs("div",{className:"flex flex-col text-left",children:[r.jsx("span",{className:"font-semibold truncate max-w-[280px]",children:x}),r.jsx("span",{className:"text-[9px] text-muted-foreground mt-0.5",children:b?"Gateway Routing Alias":"Installiertes GGUF Modell"})]}),(o.brain_model===x||!o.brain_model&&x==="auto")&&r.jsx(ir,{className:"h-4 w-4 shrink-0 text-primary"})]},x)})})]})}),u]})}function Vb(){const{data:s}=Bn(3e3),o=(s==null?void 0:s.models)??[],a=(s==null?void 0:s.running)??[];return r.jsxs("div",{className:"rounded-2xl border border-border/60 bg-card/45 backdrop-blur-md p-5 shadow-lg shadow-black/15 flex flex-col justify-between",children:[r.jsxs("div",{children:[r.jsxs("div",{className:"flex items-center gap-2 mb-4",children:[r.jsx(Vo,{className:"h-4.5 w-4.5 text-primary"}),r.jsx("h2",{className:"text-sm font-semibold tracking-wide uppercase text-foreground",children:"Rollen-Belegung"})]}),r.jsx("div",{className:"space-y-2 max-h-48 overflow-y-auto pr-1 scrollbar-thin",children:Ch.map(d=>{var h;const u=o.find(p=>p.role===d),f=u?a.includes(u.name):!1;return r.jsxs("div",{className:X("flex items-center justify-between p-2 rounded-xl border transition-all duration-300",f?"border-emerald-500/30 bg-emerald-500/5 shadow-sm shadow-emerald-500/5":u?"border-primary/20 bg-primary/5":"border-border/30 bg-background/10 opacity-60"),children:[r.jsx("div",{className:"min-w-0 flex-1 mr-2",children:r.jsxs("div",{className:"flex items-center gap-2 min-w-0",children:[r.jsx("span",{className:X("text-[9px] font-semibold uppercase px-1.5 py-0.5 rounded font-mono border tracking-wider shrink-0",Sc(d)),children:d}),r.jsxs("div",{className:"flex flex-col min-w-0",children:[r.jsx("span",{className:"text-xs font-semibold truncate font-mono text-foreground",children:u?(h=u.name.split("/").pop())==null?void 0:h.replace(/\.gguf$/i,""):"nicht zugewiesen"}),u&&r.jsxs("div",{className:"flex gap-1 items-center mt-0.5 flex-wrap",children:[u.prompt_cache&&r.jsx("span",{className:"text-[7px] leading-none font-mono font-bold bg-cyan-500/10 text-cyan-400 border border-cyan-500/20 px-1 py-0.5 rounded",title:"Prompt Caching aktiv",children:"PC"}),u.spec_active&&r.jsx("span",{className:"text-[7px] leading-none font-mono font-bold bg-emerald-500/10 text-emerald-400 border border-emerald-500/20 px-1 py-0.5 rounded",title:`Speculative Decoding aktiv (Draft: ${u.spec_draft_model})`,children:"SPEC"}),u.parallel_slots>1&&r.jsxs("span",{className:"text-[7px] leading-none font-mono font-bold bg-violet-500/10 text-violet-400 border border-violet-500/20 px-1 py-0.5 rounded",title:`${u.parallel_slots} parallele Slots aktiv`,children:["SLOTS: ",u.parallel_slots]}),u.incomplete&&r.jsx("span",{className:"text-[7px] leading-none font-mono font-bold bg-amber-500/10 text-amber-400 border border-amber-500/20 px-1 py-0.5 rounded",title:"GGUF-Datei fehlt",children:"⚠ fehlt"})]})]})]})}),r.jsx("div",{className:"flex items-center gap-1.5 shrink-0",children:u?f?r.jsxs("span",{className:"flex items-center gap-1 text-[8px] font-semibold text-emerald-400 uppercase tracking-wider font-mono",children:[r.jsx("span",{className:"h-1.5 w-1.5 rounded-full bg-emerald-500 animate-pulse"})," warm"]}):r.jsx("span",{className:"text-[8px] font-semibold text-muted-foreground uppercase tracking-wider font-mono",children:"bereit"}):r.jsx("span",{className:"text-[8px] font-semibold text-muted-foreground/60 uppercase tracking-wider font-mono",children:"—"})})]},d)})})]}),r.jsx("div",{className:"mt-4 text-[10px] text-muted-foreground/80 border-t border-border/30 pt-3",children:"Laden erfolgt automatisch per Auto-Swap."})]})}function Wb(){const s=cn(),{data:o=[]}=yh({limit:3}),[a,d]=g.useState(""),[u,f]=g.useState("stable"),[h,p]=g.useState(!1);async function v(){if(!(!a.trim()||h)){p(!0);try{await he("/api/memory",{method:"POST",body:JSON.stringify({content:a,category:u,source:"dashboard"})}),d(""),s.invalidateQueries({queryKey:["memory"]})}catch(x){console.error(x)}finally{p(!1)}}}return r.jsxs("div",{className:"rounded-2xl border border-border/60 bg-card/45 backdrop-blur-md p-5 shadow-lg shadow-black/15 flex flex-col justify-between",children:[r.jsxs("div",{children:[r.jsxs("div",{className:"flex items-center gap-2 mb-4",children:[r.jsx(Go,{className:"h-4.5 w-4.5 text-primary"}),r.jsx("h2",{className:"text-sm font-semibold tracking-wide uppercase text-foreground",children:"Gedächtnis"})]}),r.jsxs("div",{className:"space-y-3",children:[r.jsx("textarea",{value:a,onChange:x=>d(x.target.value),placeholder:"Fakt / Regel im Pool speichern...",rows:2,className:"w-full resize-none rounded-xl border border-border/50 bg-background/30 p-2 text-[10px] outline-none focus:ring-1 focus:ring-primary transition-all leading-normal"}),r.jsxs("div",{className:"flex items-center gap-2 justify-between",children:[r.jsxs("select",{value:u,onChange:x=>f(x.target.value),className:"h-7 rounded-lg border border-border/50 bg-background/50 px-2 text-[10px] outline-none cursor-pointer",children:[r.jsx("option",{value:"stable",children:"🔵 Fakt"}),r.jsx("option",{value:"instruction",children:"📋 Regel"}),r.jsx("option",{value:"user",children:"👤 User"}),r.jsx("option",{value:"versioned",children:"🟡 Version"})]}),r.jsxs("button",{onClick:v,disabled:!a.trim()||h,className:"flex h-7 items-center gap-1 rounded-lg bg-primary px-3 text-[10px] font-semibold text-primary-foreground hover:opacity-90 disabled:opacity-50 transition-all cursor-pointer",children:[r.jsx(Rm,{className:"h-3.5 w-3.5"})," Speichern"]})]})]}),r.jsxs("div",{className:"mt-3.5 space-y-1.5",children:[r.jsx("div",{className:"text-[9px] text-muted-foreground uppercase font-bold tracking-wider",children:"Zuletzt gespeichert:"}),r.jsx("div",{className:"max-h-20 overflow-y-auto space-y-1 pr-1 scrollbar-thin",children:o.length===0?r.jsx("div",{className:"text-[10px] text-muted-foreground/75 py-1",children:"Keine Einträge vorhanden."}):o.map(x=>r.jsxs("div",{className:"text-[10px] bg-background/10 border border-border/30 rounded p-1.5 flex items-start gap-1.5",children:[r.jsx("span",{className:"shrink-0 text-[8px] font-mono text-muted-foreground/80 px-1 py-0.5 rounded bg-muted/20",children:x.category}),r.jsx("span",{className:"truncate flex-1 text-muted-foreground hover:text-foreground transition-colors",title:x.content,children:x.content})]},x.id))})]})]}),r.jsx("div",{className:"mt-4 text-[10px] text-muted-foreground/80 border-t border-border/30 pt-3",children:"Steht allen Clients per MCP zur Verfügung."})]})}function Kb(){var o;const{data:s}=xh(3e3);return r.jsxs("div",{className:"rounded-2xl border border-border/60 bg-card/45 backdrop-blur-md p-5 shadow-lg shadow-black/15 flex flex-col justify-between",children:[r.jsxs("div",{children:[r.jsxs("div",{className:"flex items-center gap-2 mb-4",children:[r.jsx(C0,{className:"h-4.5 w-4.5 text-primary animate-pulse"}),r.jsx("h2",{className:"text-sm font-semibold tracking-wide uppercase text-foreground",children:"Effizienz & Ersparnis"})]}),s?r.jsxs("div",{className:"space-y-4",children:[r.jsxs("div",{className:"grid grid-cols-2 gap-2.5",children:[r.jsxs("div",{className:"p-3 bg-background/20 rounded-xl border border-border/40 text-left",children:[r.jsx("div",{className:"text-[8px] uppercase tracking-wider font-semibold text-muted-foreground/60",children:"Geld gespart"}),r.jsxs("div",{className:"text-base font-bold text-emerald-400 mt-0.5 tracking-tight font-space",children:[s.saved_eur.toLocaleString("de-DE",{minimumFractionDigits:2})," €"]}),r.jsxs("div",{className:"text-[8px] text-muted-foreground/80 mt-0.5 font-mono",children:["(",s.saved_usd.toLocaleString("en-US",{minimumFractionDigits:2})," $)"]})]}),r.jsxs("div",{className:"p-3 bg-background/20 rounded-xl border border-border/40 text-left",children:[r.jsx("div",{className:"text-[8px] uppercase tracking-wider font-semibold text-muted-foreground/60",children:"Gesamt-Tokens"}),r.jsx("div",{className:"text-base font-bold text-primary mt-0.5 tracking-tight font-space",children:s.total_tokens.toLocaleString("de-DE")}),r.jsx("div",{className:"text-[8px] text-muted-foreground/80 mt-0.5 font-mono",children:"(Lokale Inferenz)"})]})]}),r.jsxs("div",{className:"space-y-2 border-t border-border/20 pt-3 text-[10px] text-muted-foreground",children:[r.jsxs("div",{className:"flex justify-between items-center font-mono",children:[r.jsx("span",{children:"Input (Prompts):"}),r.jsxs("span",{className:"font-semibold text-foreground",children:[s.prompt_tokens.toLocaleString("de-DE")," tkn"]})]}),r.jsxs("div",{className:"flex justify-between items-center font-mono",children:[r.jsx("span",{children:"Output (Antworten):"}),r.jsxs("span",{className:"font-semibold text-foreground",children:[s.completion_tokens.toLocaleString("de-DE")," tkn"]})]})]})]}):r.jsx("div",{className:"h-28 flex items-center justify-center text-xs text-muted-foreground",children:"Lade Statistiken…"})]}),r.jsxs("div",{className:"mt-4 text-[9px] text-muted-foreground/70 border-t border-border/30 pt-2.5 leading-normal",children:["Berechnet ggü. Cloud-APIs",(o=s==null?void 0:s.pricing)!=null&&o.heavy?` (Ø ${(s.pricing.heavy.in??0).toFixed(2).replace(".",",")} $ / ${(s.pricing.heavy.out??0).toFixed(2).replace(".",",")} $ pro 1M tkn).`:"."]})]})}function Qb(){return r.jsxs("div",{className:"space-y-6",children:[r.jsxs("div",{children:[r.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:"Zentrale"}),r.jsx("p",{className:"text-sm text-muted-foreground",children:"Aktueller Status von System, Modellen und Agent."})]}),r.jsx(Ub,{}),r.jsxs("div",{className:"grid gap-6 md:grid-cols-3",children:[r.jsx(Bb,{}),r.jsx(Hb,{})]}),r.jsxs("div",{className:"grid gap-6 md:grid-cols-2 xl:grid-cols-4",children:[r.jsx(Gb,{}),r.jsx(Vb,{}),r.jsx(Wb,{}),r.jsx(Kb,{})]})]})}function qb(){const s=cn(),{data:o=[]}=hh(2e3),{showAlert:a,dialogElement:d}=Hn();async function u(p){try{await he(`/api/jobs/${p}/cancel`,{method:"POST"}),s.invalidateQueries({queryKey:Qe.jobs})}catch(v){a("Fehler",v.message)}}const f=o.filter(p=>p.state==="running"||p.state==="queued"),h=o.filter(p=>p.state!=="running"&&p.state!=="queued").slice(-3);return f.length===0&&h.length===0?null:r.jsxs("div",{className:"space-y-3 rounded-2xl border border-border/60 bg-card/45 backdrop-blur-md p-4 shadow-lg shadow-black/10",children:[r.jsx("div",{className:"text-[11px] font-semibold text-muted-foreground uppercase tracking-wider",children:"Aktive Downloads"}),f.map(p=>r.jsxs("div",{className:"space-y-1.5 p-3 rounded-xl bg-background/20 border border-border/40",children:[r.jsxs("div",{className:"flex justify-between items-center text-xs",children:[r.jsx("span",{className:"font-semibold truncate max-w-[250px]",children:p.label}),r.jsxs("div",{className:"flex items-center gap-3",children:[r.jsxs("span",{className:"text-muted-foreground font-mono",children:[p.progress??0,"% • ",dc(p.done_bytes),"/",dc(p.total_bytes),p.eta_s?` • ETA ${ob(p.eta_s)}`:""]}),r.jsx("button",{onClick:()=>u(p.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"})]})]}),r.jsx("div",{className:"h-1.5 overflow-hidden rounded-full bg-muted",children:r.jsx("div",{className:"h-full rounded-full bg-primary transition-all duration-500",style:{width:`${p.progress??0}%`}})})]},p.id)),h.map(p=>r.jsxs("div",{className:"flex justify-between items-center text-xs text-muted-foreground px-1",children:[r.jsx("span",{className:"truncate",children:p.label}),r.jsx("span",{className:X("font-semibold text-[10px] px-1.5 py-0.5 rounded uppercase font-mono",p.state==="done"?"bg-emerald-500/10 text-emerald-400":"bg-amber-500/10 text-amber-400"),children:p.state})]},p.id)),d]})}function _n({children:s,tone:o="muted"}){const a={muted:"bg-muted text-muted-foreground",primary:"bg-primary/15 text-primary",warn:"bg-amber-500/15 text-amber-500"};return r.jsx("span",{className:`rounded px-1.5 py-0.5 text-[11px] font-medium ${a[o]}`,children:s})}function em({caps:s}){return s?r.jsxs("span",{className:"inline-flex flex-wrap gap-1",children:[s.coder&&r.jsx(_n,{children:"💻 Code"}),s.vision&&r.jsx(_n,{children:"👁 Bild"}),s.reasoning&&r.jsx(_n,{children:"🧠 Reason"}),s.moe&&r.jsxs(_n,{tone:"primary",children:["🧩 MoE",s.active_b?`·${s.active_b}b`:""]}),s.tools==="yes"&&r.jsx(_n,{tone:"primary",children:"🛠 Tools"}),s.tools==="likely"&&r.jsx(_n,{tone:"warn",children:"🛠 Tools?"}),s.embedding&&r.jsx(_n,{children:"🔢 Embed"})]}):null}function Zb({model:s,onClose:o,onChanged:a}){var E,k;const{data:d,isLoading:u}=sb(s.gguf_path),[f,h]=g.useState(null),[p,v]=g.useState(""),x=d==null?void 0:d.target_vocab,b=(d==null?void 0:d.drafts)??[],w=b.filter(C=>C.compatible===!0),P=s.spec_draft_model;async function R(C){h(C??"__clear__"),v("");try{await he(`/api/models/${encodeURIComponent(s.name)}/draft`,{method:"POST",body:JSON.stringify({draft_path:C})}),a(),o()}catch(I){v(String((I==null?void 0:I.message)||I)),h(null)}}const O=C=>{var I;return C?`${C.pre??"?"} · ${((I=C.n_vocab)==null?void 0:I.toLocaleString())??"?"} Tokens`:"—"};return r.jsx("div",{className:"fixed inset-0 z-50 bg-black/60 backdrop-blur-sm flex items-center justify-center p-4",children:r.jsxs("div",{className:"w-full max-w-lg 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:[r.jsxs("div",{className:"flex items-center justify-between border-b border-border/20 pb-2",children:[r.jsxs("h3",{className:"text-xs font-bold uppercase tracking-wider text-primary flex items-center gap-2",children:[r.jsx(Qo,{className:"h-4 w-4"})," Speculative Draft"]}),r.jsx("button",{onClick:o,className:"p-1 rounded hover:bg-accent text-muted-foreground hover:text-foreground cursor-pointer",children:r.jsx(jr,{className:"h-4 w-4"})})]}),r.jsxs("div",{className:"text-xs text-muted-foreground leading-relaxed",children:['Beschleunigt die Token-Generierung mit einem kleinen "Draft"-Modell. Voraussetzung: der Draft muss den ',r.jsx("strong",{className:"text-foreground",children:"exakt gleichen Tokenizer (Vocab)"})," haben wie das Modell — sonst lehnt llama.cpp es ab."]}),r.jsxs("div",{className:"rounded-lg border border-border/40 bg-background/30 px-3 py-2 text-[11px] font-mono flex items-center justify-between",children:[r.jsx("span",{className:"text-muted-foreground",children:(E=s.name.split("/").pop())==null?void 0:E.replace(/\.gguf$/i,"")}),r.jsxs("span",{className:"text-foreground",children:["Vocab: ",O(x)]})]}),s.spec_active&&P&&r.jsxs("div",{className:"rounded-lg border border-emerald-500/30 bg-emerald-500/5 px-3 py-2 flex items-center justify-between gap-2",children:[r.jsxs("span",{className:"text-[11px] text-emerald-400 font-mono flex items-center gap-1.5 truncate",children:[r.jsx(ir,{className:"h-3.5 w-3.5 shrink-0"})," Aktiv: ",P]}),r.jsx("button",{onClick:()=>R(null),disabled:f!==null,className:"h-6 px-2.5 rounded border border-amber-500/30 bg-amber-500/5 hover:bg-amber-500/10 text-amber-400 text-[9px] font-bold uppercase shrink-0 cursor-pointer disabled:opacity-50",children:"Deaktivieren"})]}),!(d!=null&&d.target_exists)&&r.jsxs("div",{className:"rounded-lg border border-amber-500/30 bg-amber-500/5 px-3 py-2 text-[11px] text-amber-400 flex items-center gap-2",children:[r.jsx(Wo,{className:"h-3.5 w-3.5 shrink-0"}),"Modell-GGUF noch nicht vorhanden — Spec-Draft ist nach dem Download konfigurierbar."]}),r.jsx("div",{className:"space-y-1.5 max-h-64 overflow-y-auto pr-1",children:u?r.jsx("div",{className:"text-xs text-muted-foreground py-6 text-center",children:"Prüfe Vocab-Kompatibilität…"}):b.length===0?r.jsxs("div",{className:"text-[11px] text-muted-foreground border border-dashed border-border/50 rounded-lg p-4 text-center",children:["Keine Draft-Modelle in ",r.jsx("code",{className:"font-mono",children:"/srv/models/drafts"}),". Lade ein kleines same-family-Modell (z.B. Qwen3-0.6B) und lege es dort ab."]}):b.map(C=>{var z,$;const I=C.filename===P,B=C.compatible===!0;return r.jsxs("div",{className:X("rounded-lg border px-3 py-2 flex items-center justify-between gap-2 text-left",B?"border-border/40 bg-background/20":"border-border/20 bg-background/10 opacity-60",I&&"border-primary/40 bg-primary/10"),children:[r.jsxs("div",{className:"min-w-0",children:[r.jsx("div",{className:"text-[11px] font-mono font-semibold text-foreground truncate",children:C.filename}),r.jsxs("div",{className:"text-[9px] text-muted-foreground font-mono",children:[$t(C.size_bytes)," · Vocab: ",O(C.vocab)]})]}),B?I?r.jsxs("span",{className:"text-[9px] font-bold uppercase text-primary flex items-center gap-1 shrink-0",children:[r.jsx(ir,{className:"h-3.5 w-3.5"})," Aktiv"]}):r.jsx("button",{onClick:()=>R(C.path),disabled:f!==null,className:"h-7 px-3 rounded-lg border border-emerald-500/30 bg-emerald-500/5 hover:bg-emerald-500/15 text-emerald-400 text-[9px] font-bold uppercase shrink-0 cursor-pointer disabled:opacity-50",children:"Aktivieren"}):r.jsxs("span",{className:"text-[9px] font-bold uppercase text-amber-400/80 flex items-center gap-1 shrink-0",title:C.compatible===!1?`Inkompatibel: Tokenizer/Vocab weicht ab (Draft ${(z=C.vocab)==null?void 0:z.pre}/${($=C.vocab)==null?void 0:$.n_vocab} ≠ Modell ${x==null?void 0:x.pre}/${x==null?void 0:x.n_vocab}).`:"Kompatibilität nicht prüfbar (Datei fehlt).",children:[r.jsx(Wo,{className:"h-3.5 w-3.5"})," ",C.compatible===!1?"Vocab ≠":"n/a"]})]},C.path)})}),!u&&(d==null?void 0:d.target_exists)&&b.length>0&&w.length===0&&r.jsxs("div",{className:"rounded-lg border border-amber-500/30 bg-amber-500/5 px-3 py-2 text-[11px] text-amber-400 leading-relaxed",children:["Kein vocab-kompatibler Draft verfügbar — Speculative Decoding ist für dieses Modell nicht möglich. Es braucht einen Draft mit identischem Tokenizer (pre=",r.jsx("span",{className:"font-mono",children:x==null?void 0:x.pre}),", n_vocab=",r.jsx("span",{className:"font-mono",children:(k=x==null?void 0:x.n_vocab)==null?void 0:k.toLocaleString()}),")."]}),p&&r.jsx("div",{className:"text-[10px] text-red-400 font-mono",children:p})]})})}function Yb(){var Ks,Qs,qs,Qn,fn,Zs,Cr,Er;const s=cn(),{data:o,isLoading:a,error:d}=Bn(4e3),{data:u}=tb(4e3),{data:f}=vh(),{data:h}=kc(4e3),{data:p}=rb(),{data:v}=Fa(),{showAlert:x,showConfirm:b,showPrompt:w,dialogElement:P}=Hn(),R=(o==null?void 0:o.models)??[],O=(o==null?void 0:o.running)??[],E=d?String(d):"",k=()=>{s.invalidateQueries({queryKey:Qe.models}),s.invalidateQueries({queryKey:Qe.routing})},[C,I]=g.useState(null),[B,z]=g.useState(null),[$,L]=g.useState(null),[H,re]=g.useState(!1),[oe,me]=g.useState(!1),[xe,G]=g.useState(null),[Pe,we]=g.useState("grid"),[Ee,Te]=g.useState("all"),_e=R.filter(D=>Ee==="in_use"?!!D.role||O.includes(D.name):!0),[Y,de]=g.useState({width:800,height:360}),J=g.useRef(null),M=g.useCallback(D=>{if(J.current&&(J.current.disconnect(),J.current=null),D){const te=new ResizeObserver(ke=>{if(!ke||ke.length===0)return;const Ae=ke[0].contentRect;de({width:Ae.width,height:Ae.height})});te.observe(D),J.current=te}},[]),S=Y.width,Z=Y.height,ee=D=>{const te=S*.1,ke=Z*D,Ae=S*.5,Be=Z*.5,Yt=S*.3,pn=ke,mn=S*.3;return`M ${te} ${ke} C ${Yt} ${pn}, ${mn} ${Be}, ${Ae} ${Be}`},K=D=>{const te=S*.5,ke=Z*.5,Ae=S*.9,Be=Z*D,Yt=S*.7,pn=ke,mn=S*.7;return`M ${te} ${ke} C ${Yt} ${pn}, ${mn} ${Be}, ${Ae} ${Be}`};async function ae(D){try{await he(`/api/models/${encodeURIComponent(D)}/load`,{method:"POST"}),k()}catch(te){x("Fehler",`Fehler beim Laden des Modells: ${te.message}`)}}async function fe(D){try{await he(`/api/models/${encodeURIComponent(D)}/unload`,{method:"POST"}),k()}catch(te){x("Fehler",`Fehler beim Entladen des Modells: ${te.message}`)}}async function je(){try{await he("/api/models/unload",{method:"POST"}),k()}catch(D){x("Fehler",`Fehler beim Entladen aller Modelle: ${D.message}`)}}async function U(D,te){try{await he(`/api/models/${encodeURIComponent(te)}/role`,{method:"POST",body:JSON.stringify({role:D||null})}),k()}catch(ke){x("Fehler",`Fehler beim Zuweisen der Rolle: ${ke.message||ke}`)}}async function ge(D,te){w("Kontextlänge anpassen","Gib die gewünschte Kontextlänge in Tokens an:",String(te||32768),async ke=>{if(ke)try{await he(`/api/models/${encodeURIComponent(D)}/ctx`,{method:"POST",body:JSON.stringify({ctx:parseInt(ke,10)})}),k()}catch(Ae){x("Fehler",`Fehler beim Setzen des Kontexts: ${Ae.message||Ae}`)}})}async function xt(D){b("Modell löschen?",`Modell '${D}' und alle zugehörigen GGUF-Dateien unwiderruflich von der Box löschen?`,async()=>{try{await he(`/api/models/${encodeURIComponent(D)}`,{method:"DELETE"}),k()}catch(te){x("Fehler",`Fehler beim Löschen: ${te.message||te}`)}})}async function ol(D,te,ke,Ae){try{await he("/api/models/install",{method:"POST",body:JSON.stringify({repo:D,role:te,quant:ke,jinja:Ae})}),x("Herunterladen gestartet",`Download für '${D}' gestartet! Der Fortschritt wird oben angezeigt.`)}catch(Be){x("Fehler",`Fehler beim Starten des Upgrades: ${Be.message||Be}`)}}async function Gn(D){const te=p==null?void 0:p.budget,ke=te&&!te.fits?` + +⚠ Speicher-Warnung: Dieses Brain (~${te.brain_gb} GB) muss immer resident sein. Zusammen mit dem größten on-demand-Modell (~${te.largest_ondemand_gb} GB) sprengt das das Budget (${te.gtt_gb} GB) → heavy/coder würden das Brain verdrängen. Erwäge ein kleineres Brain oder weniger Kontext.`:"";b("Agent-Hirn aktualisieren?",`Neues Hermes-Modell '${D.split("/").pop()}' herunterladen und als Agent-Hirn (Rolle hermes) setzen? Hermes nutzt danach automatisch das neue Modell.${ke}`,async()=>{try{await he("/api/models/install",{method:"POST",body:JSON.stringify({repo:D,role:"hermes",quant:"Q4_K_M",jinja:!0})}),x("Download gestartet","Das neue Agent-Hirn wird geladen. Fortschritt oben."),k()}catch(Ae){x("Fehler",`Update fehlgeschlagen: ${Ae.message||Ae}`)}})}async function Vs(D){b("Agent-Hirn wechseln?",`'${D.split("/").pop()}' als Agent-Hirn (Alias hermes) setzen? Es wird warm gehalten (brains-Gruppe); Hermes nutzt es nach einem kurzen Gateway-Restart.`,async()=>{try{await he("/api/agent/brain/set",{method:"POST",body:JSON.stringify({model_id:D})}),x("Erledigt","Agent-Hirn gewechselt. Gateway wurde neugestartet."),re(!1),k()}catch(te){x("Fehler",`Wechsel fehlgeschlagen: ${te.message||te}`)}})}async function ll(D){D&&(await navigator.clipboard.writeText(D),me(!0),setTimeout(()=>me(!1),1500))}if(a)return r.jsx("div",{className:"text-xs text-muted-foreground py-12 text-center",children:"Initialisiere HUD Cockpit…"});if(E)return r.jsxs("div",{className:"rounded-xl border border-red-500/20 bg-red-500/5 p-4 text-xs text-red-400",children:["Gateway oder Engine nicht erreichbar (",E,")."]});const Vn=R.filter(D=>O.includes(D.name)),un=Vn.reduce((D,te)=>D+(te.size_bytes||0),0),Ws=((Ks=v==null?void 0:v.gpu)==null?void 0:Ks.gtt_total)||((Qs=v==null?void 0:v.gpu)==null?void 0:Qs.vram_total)||0,Wn=((qs=v==null?void 0:v.gpu)==null?void 0:qs.gtt_used)||0,Nr=16*1024**3,dr=Ws>2*1024**3?Ws:un>Nr?un*1.2:Nr,Kn=D=>R.find(te=>te.role===D),Sr=D=>{const te=Kn(D);return te?O.includes(te.name):!1};return r.jsxs("div",{className:"space-y-8",children:[r.jsx("style",{children:` + @keyframes flow-dash { + to { + stroke-dashoffset: -20; + } + } + .svg-flow-path { + stroke-dasharray: 4 6; + animation: flow-dash 1s linear infinite; + } + `}),r.jsxs("div",{className:"rounded-2xl border border-border/60 bg-card/45 backdrop-blur-md p-5 shadow-lg shadow-black/10 space-y-3.5",children:[r.jsxs("div",{className:"flex justify-between items-center",children:[r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx(Ea,{className:"h-4.5 w-4.5 text-primary"}),r.jsx("span",{className:"text-xs font-bold uppercase tracking-wider text-foreground",children:"VRAM / Memory Belegung"})]}),r.jsxs("div",{className:"flex items-center gap-3",children:[r.jsxs("span",{className:"text-[10px] font-mono text-muted-foreground",children:["Speicher-Pool: ",$t(un)," Gewichte",Wn>0?` · ${$t(Wn)} real belegt (inkl. KV)`:""," / ",$t(dr)]}),O.length>0&&r.jsx("button",{onClick:je,className:"h-6 px-2.5 rounded border border-amber-500/30 bg-amber-500/5 hover:bg-amber-500/10 text-amber-400 text-[9px] font-bold uppercase transition-all cursor-pointer",children:"Alle entladen"})]})]}),r.jsx("div",{className:"h-7 w-full rounded-xl bg-background/50 border border-border/40 overflow-hidden flex p-0.5 relative group",children:Vn.length===0?r.jsx("div",{className:"w-full h-full flex items-center justify-center text-[10px] text-muted-foreground/60 italic font-mono select-none",children:"VRAM Leer — Auto-Swap lädt Modelle bei Anfrage"}):Vn.map((D,te)=>{var Be;const ke=(D.size_bytes||0)/dr*100,Ae=["from-teal-500 to-emerald-500","from-indigo-500 to-blue-500","from-purple-500 to-pink-500","from-cyan-500 to-sky-500"][te%4];return r.jsxs("div",{style:{width:`${ke}%`},className:X("h-full rounded bg-gradient-to-r flex items-center justify-between px-2.5 transition-all text-white/95 shrink-0 shadow-inner select-none",Ae),title:`${D.name} (${$t(D.size_bytes)})`,children:[r.jsxs("span",{className:"text-[9px] font-bold truncate max-w-[120px] font-space tracking-wide",children:[D.role?`[${D.role}] `:"",(Be=D.name.split("/").pop())==null?void 0:Be.replace(".gguf","")]}),r.jsx("span",{className:"text-[8px] font-mono opacity-80",children:$t(D.size_bytes)})]},D.name)})})]}),r.jsxs("div",{className:"rounded-2xl border border-border/60 bg-card/45 backdrop-blur-md p-6 shadow-lg shadow-black/10 space-y-4",children:[r.jsxs("div",{children:[r.jsx("span",{className:"text-xs font-bold uppercase tracking-wider text-foreground",children:"Interactive Gateway Graph"}),r.jsx("p",{className:"text-[10px] text-muted-foreground mt-0.5 leading-relaxed",children:"Klicke links auf Editoren, um Configs zu kopieren. Klicke rechts auf Rollen, um GGUF-Zuweisungen live zu ändern."})]}),r.jsxs("div",{ref:M,className:"relative w-full h-96 border border-border/30 rounded-xl bg-black/25 overflow-hidden flex",children:[r.jsxs("svg",{className:"absolute inset-0 pointer-events-none w-full h-full",children:[r.jsxs("defs",{children:[r.jsxs("linearGradient",{id:"cyan-to-teal",x1:"0%",y1:"0%",x2:"100%",y2:"0%",children:[r.jsx("stop",{offset:"0%",stopColor:"#06b6d4",stopOpacity:"0.45"}),r.jsx("stop",{offset:"100%",stopColor:"#0d9488",stopOpacity:"0.45"})]}),r.jsxs("linearGradient",{id:"active-glow",x1:"0%",y1:"0%",x2:"100%",y2:"0%",children:[r.jsx("stop",{offset:"0%",stopColor:"#3b82f6",stopOpacity:"0.8"}),r.jsx("stop",{offset:"100%",stopColor:"#10b981",stopOpacity:"0.8"})]})]}),r.jsx("path",{d:ee(.1),stroke:"url(#cyan-to-teal)",strokeWidth:"1.5",fill:"none"}),(xe==="roocode"||C==="roocode")&&r.jsx("path",{d:ee(.1),stroke:"#06b6d4",strokeWidth:"2.5",fill:"none",className:"svg-flow-path"}),r.jsx("path",{d:ee(.3),stroke:"url(#cyan-to-teal)",strokeWidth:"1.5",fill:"none"}),(xe==="cursor"||C==="cursor")&&r.jsx("path",{d:ee(.3),stroke:"#06b6d4",strokeWidth:"2.5",fill:"none",className:"svg-flow-path"}),r.jsx("path",{d:ee(.5),stroke:"url(#cyan-to-teal)",strokeWidth:"1.5",fill:"none"}),(xe==="opencode"||C==="opencode")&&r.jsx("path",{d:ee(.5),stroke:"#06b6d4",strokeWidth:"2.5",fill:"none",className:"svg-flow-path"}),r.jsx("path",{d:ee(.7),stroke:"url(#cyan-to-teal)",strokeWidth:"1.5",fill:"none"}),(xe==="zed"||C==="zed")&&r.jsx("path",{d:ee(.7),stroke:"#06b6d4",strokeWidth:"2.5",fill:"none",className:"svg-flow-path"}),r.jsx("path",{d:ee(.9),stroke:"url(#cyan-to-teal)",strokeWidth:"1.5",fill:"none"}),(xe==="continue"||C==="continue")&&r.jsx("path",{d:ee(.9),stroke:"#06b6d4",strokeWidth:"2.5",fill:"none",className:"svg-flow-path"}),r.jsx("path",{d:K(.12),stroke:"url(#cyan-to-teal)",strokeWidth:"1.5",fill:"none"}),Sr("fast")&&r.jsx("path",{d:K(.12),stroke:"url(#active-glow)",strokeWidth:"2.5",fill:"none",className:"svg-flow-path"}),r.jsx("path",{d:K(.31),stroke:"url(#cyan-to-teal)",strokeWidth:"1.5",fill:"none"}),Sr("heavy")&&r.jsx("path",{d:K(.31),stroke:"url(#active-glow)",strokeWidth:"2.5",fill:"none",className:"svg-flow-path"}),r.jsx("path",{d:K(.5),stroke:"url(#cyan-to-teal)",strokeWidth:"1.5",fill:"none"}),Sr("coder")&&r.jsx("path",{d:K(.5),stroke:"url(#active-glow)",strokeWidth:"2.5",fill:"none",className:"svg-flow-path"}),r.jsx("path",{d:K(.69),stroke:"url(#cyan-to-teal)",strokeWidth:"1.5",fill:"none"}),Sr("vision")&&r.jsx("path",{d:K(.69),stroke:"url(#active-glow)",strokeWidth:"2.5",fill:"none",className:"svg-flow-path"}),r.jsx("path",{d:K(.88),stroke:"url(#cyan-to-teal)",strokeWidth:"1.5",fill:"none"}),Sr("scout")&&r.jsx("path",{d:K(.88),stroke:"url(#active-glow)",strokeWidth:"2.5",fill:"none",className:"svg-flow-path"})]}),r.jsxs("div",{className:"absolute cursor-pointer select-none z-10 w-28 h-8 -translate-y-1/2 -translate-x-1/2 rounded-xl border border-border/60 bg-card/75 backdrop-blur-md flex items-center justify-center gap-1.5 px-2 hover:border-primary transition-all text-[10px] font-semibold text-foreground shadow shadow-black/20",style:{left:"10%",top:"10%"},onMouseEnter:()=>G("roocode"),onMouseLeave:()=>G(null),onClick:()=>I(D=>D==="roocode"?null:"roocode"),children:[r.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-cyan-400 animate-pulse"}),r.jsx("span",{children:"Roo Code"})]}),r.jsxs("div",{className:"absolute cursor-pointer select-none z-10 w-28 h-8 -translate-y-1/2 -translate-x-1/2 rounded-xl border border-border/60 bg-card/75 backdrop-blur-md flex items-center justify-center gap-1.5 px-2 hover:border-primary transition-all text-[10px] font-semibold text-foreground shadow shadow-black/20",style:{left:"10%",top:"30%"},onMouseEnter:()=>G("cursor"),onMouseLeave:()=>G(null),onClick:()=>I(D=>D==="cursor"?null:"cursor"),children:[r.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-cyan-400 animate-pulse"}),r.jsx("span",{children:"Cursor IDE"})]}),r.jsxs("div",{className:"absolute cursor-pointer select-none z-10 w-28 h-8 -translate-y-1/2 -translate-x-1/2 rounded-xl border border-border/60 bg-card/75 backdrop-blur-md flex items-center justify-center gap-1.5 px-2 hover:border-primary transition-all text-[10px] font-semibold text-foreground shadow shadow-black/20",style:{left:"10%",top:"50%"},onMouseEnter:()=>G("opencode"),onMouseLeave:()=>G(null),onClick:()=>I(D=>D==="opencode"?null:"opencode"),children:[r.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-cyan-400 animate-pulse"}),r.jsx("span",{children:"OpenCode"})]}),r.jsxs("div",{className:"absolute cursor-pointer select-none z-10 w-28 h-8 -translate-y-1/2 -translate-x-1/2 rounded-xl border border-border/60 bg-card/75 backdrop-blur-md flex items-center justify-center gap-1.5 px-2 hover:border-primary transition-all text-[10px] font-semibold text-foreground shadow shadow-black/20",style:{left:"10%",top:"70%"},onMouseEnter:()=>G("zed"),onMouseLeave:()=>G(null),onClick:()=>I(D=>D==="zed"?null:"zed"),children:[r.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-cyan-400 animate-pulse"}),r.jsx("span",{children:"Zed"})]}),r.jsxs("div",{className:"absolute cursor-pointer select-none z-10 w-28 h-8 -translate-y-1/2 -translate-x-1/2 rounded-xl border border-border/60 bg-card/75 backdrop-blur-md flex items-center justify-center gap-1.5 px-2 hover:border-primary transition-all text-[10px] font-semibold text-foreground shadow shadow-black/20",style:{left:"10%",top:"90%"},onMouseEnter:()=>G("continue"),onMouseLeave:()=>G(null),onClick:()=>I(D=>D==="continue"?null:"continue"),children:[r.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-cyan-400 animate-pulse"}),r.jsx("span",{children:"Continue"})]}),r.jsxs("div",{className:"absolute select-none z-10 w-36 py-3 px-4 -translate-y-1/2 -translate-x-1/2 rounded-2xl border border-primary/50 bg-card/90 backdrop-blur-md flex flex-col items-center justify-center text-center shadow-lg shadow-primary/5",style:{left:"50%",top:"50%"},children:[r.jsx("div",{className:"text-[10px] uppercase font-bold text-primary font-space tracking-wide",children:"Gateway Auto"}),r.jsxs("div",{className:"text-[10px] font-mono text-muted-foreground mt-0.5",children:["Schwelle: > ",u!=null&&u.heavy_threshold_chars?u.heavy_threshold_chars/1e3:"4","k Zeichen"]}),r.jsx("div",{className:"mt-1 px-1.5 py-0.5 rounded bg-primary/10 border border-primary/20 text-[9px] font-semibold text-primary uppercase font-mono",children:"Auto-Swap"})]}),Ch.map(D=>{var Yt;const te=["12%","31%","50%","69%","88%"],ke=Kn(D),Ae=ke?O.includes(ke.name):!1;if(D==="agent")return null;const Be={fast:0,heavy:1,coder:2,vision:3,scout:4}[D];return r.jsxs("div",{className:X("absolute z-10 w-44 py-1.5 px-3 -translate-y-1/2 -translate-x-1/2 rounded-xl border flex flex-col justify-center hover:border-primary/50 transition-all text-left shadow select-none cursor-pointer",Ae?"border-emerald-500/50 bg-emerald-500/5 shadow-emerald-500/5":ke?"border-border/60 bg-card/75":"border-dashed border-border/40 bg-background/20"),style:{left:"90%",top:te[Be]},onClick:()=>z(D),children:[r.jsxs("div",{className:"flex items-center justify-between",children:[r.jsx("span",{className:"text-[10px] font-bold uppercase tracking-wider text-muted-foreground",children:D}),Ae&&r.jsx("span",{className:"h-1.5 w-1.5 rounded-full bg-emerald-400 animate-pulse"})]}),r.jsx("div",{className:"text-[10px] font-mono font-medium truncate mt-0.5 text-foreground max-w-[150px]",children:ke?(Yt=ke.name.split("/").pop())==null?void 0:Yt.replace(".gguf",""):"Keine Zuweisung"})]},D)}),C&&f&&r.jsx("div",{className:"fixed inset-0 z-50 bg-black/60 backdrop-blur-sm flex items-center justify-center p-4",children:r.jsxs("div",{className:"w-full max-w-md rounded-2xl border border-border/80 bg-card p-6 shadow-2xl space-y-4 animate-in fade-in zoom-in-95 duration-200 flex flex-col justify-between",children:[r.jsxs("div",{className:"flex items-center justify-between border-b border-border/20 pb-2",children:[r.jsxs("span",{className:"text-xs font-bold uppercase tracking-wider text-primary",children:[C==="roocode"&&"Roo Code Setup",C==="cursor"&&"Cursor Setup",C==="opencode"&&"OpenCode Setup",C==="zed"&&"Zed Setup",C==="continue"&&"Continue Setup"]}),r.jsx("button",{onClick:()=>I(null),className:"p-1 rounded hover:bg-accent text-muted-foreground hover:text-foreground cursor-pointer",children:r.jsx(jr,{className:"h-4 w-4"})})]}),r.jsxs("div",{className:"text-xs text-muted-foreground leading-relaxed space-y-2",children:[C==="roocode"&&r.jsxs("ul",{className:"list-decimal pl-4 space-y-1",children:[r.jsxs("li",{children:["Suche in VS Code nach der Erweiterung ",r.jsx("strong",{children:"Roo Code"})," und installiere sie."]}),r.jsxs("li",{children:["Wähle in den Roo Code Einstellungen: Provider: ",r.jsx("strong",{children:"OpenAI Compatible"}),"."]}),r.jsxs("li",{children:["Füge das untenstehende JSON-Snippet in die ",r.jsx("code",{children:"settings.json"})," ein."]})]}),C==="cursor"&&r.jsxs("ul",{className:"list-decimal pl-4 space-y-1",children:[r.jsxs("li",{children:["Öffne Cursor Settings ➔ ",r.jsx("strong",{children:"Models"}),"."]}),r.jsxs("li",{children:["Deaktiviere Cloud-Modelle, klappe ",r.jsx("strong",{children:"OpenAI API"})," auf."]}),r.jsxs("li",{children:["Trage die Base URL unten ein und aktiviere das Modell ",r.jsx("strong",{children:"auto"}),"."]})]}),C==="opencode"&&r.jsxs("ul",{className:"list-decimal pl-4 space-y-1",children:[r.jsxs("li",{children:["Öffne die ",r.jsx("code",{children:"opencode.jsonc"})," Konfigurationsdatei."]}),r.jsxs("li",{children:["Ersetze den Provider-Eintrag unter ",r.jsx("code",{children:"provider"})," mit dem Snippet unten."]})]}),C==="zed"&&r.jsxs("ul",{className:"list-decimal pl-4 space-y-1",children:[r.jsxs("li",{children:["Öffne die Zed Settings (",r.jsx("code",{children:"ctrl+,"}),")."]}),r.jsxs("li",{children:["Füge das untenstehende JSON-Segment unter ",r.jsx("code",{children:"language_models"})," ein."]})]}),C==="continue"&&r.jsxs("ul",{className:"list-decimal pl-4 space-y-1",children:[r.jsx("li",{children:"Klicke auf das Zahnrad-Symbol in der Continue-Erweiterung."}),r.jsxs("li",{children:["Füge den Gateway-Eintrag zum ",r.jsx("code",{children:"models"}),"-Array hinzu."]})]})]}),f.tools&&r.jsxs("div",{className:"relative rounded-xl border border-border/40 bg-black/40 overflow-hidden mt-1 shrink-0",children:[r.jsxs("div",{className:"flex items-center justify-between px-3 py-1.5 border-b border-border/20 bg-black/20",children:[r.jsx("span",{className:"text-[10px] font-mono text-muted-foreground",children:"JSON Config"}),r.jsxs("button",{onClick:()=>{var D,te,ke,Ae,Be;return ll(C==="roocode"?(D=f.tools.cline)==null?void 0:D.snippet:C==="cursor"?(te=f.tools.cursor)==null?void 0:te.snippet:C==="opencode"?(ke=f.tools.opencode)==null?void 0:ke.snippet:C==="zed"?(Ae=f.tools.zed)==null?void 0:Ae.snippet:(Be=f.tools.continue)==null?void 0:Be.snippet)},className:"text-xs font-semibold text-primary hover:text-primary-foreground flex items-center gap-1 cursor-pointer",children:[oe?r.jsx(ir,{className:"h-3.5 w-3.5 text-emerald-400"}):r.jsx(Pm,{className:"h-3.5 w-3.5"}),r.jsx("span",{children:oe?"Kopiert":"Kopieren"})]})]}),r.jsx("pre",{className:"p-3 max-h-48 overflow-y-auto text-xs font-mono text-cyan-200/90 whitespace-pre scrollbar-thin select-text",children:r.jsxs("code",{children:[C==="roocode"&&((Qn=f.tools.cline)==null?void 0:Qn.snippet),C==="cursor"&&((fn=f.tools.cursor)==null?void 0:fn.snippet),C==="opencode"&&((Zs=f.tools.opencode)==null?void 0:Zs.snippet),C==="zed"&&((Cr=f.tools.zed)==null?void 0:Cr.snippet),C==="continue"&&((Er=f.tools.continue)==null?void 0:Er.snippet)]})})]}),r.jsx("button",{onClick:()=>I(null),className:"w-full h-9 rounded-lg bg-primary text-primary-foreground hover:opacity-90 font-semibold text-xs transition-opacity cursor-pointer mt-2",children:"Schließen"})]})})]}),r.jsxs("div",{className:"flex flex-wrap items-center gap-6 mt-3 text-[10px] text-muted-foreground border-t border-border/20 pt-3",children:[r.jsxs("span",{className:"flex items-center gap-1.5",children:[r.jsx("span",{className:"h-2 w-2 rounded-full bg-cyan-400"}),r.jsx("span",{children:"Cyan-Fluss: Client-Anfrage an Gateway"})]}),r.jsxs("span",{className:"flex items-center gap-1.5",children:[r.jsx("span",{className:"h-2 w-2 rounded-full bg-emerald-500 animate-pulse"}),r.jsx("span",{children:"Grüner Puls: Aktive Verbindung / Warmes Modell geladen"})]}),r.jsxs("span",{className:"flex items-center gap-1.5",children:[r.jsx("span",{className:"h-2 w-2 rounded bg-gradient-to-r from-teal-500 to-emerald-500"}),r.jsx("span",{children:"VRAM-Verlauf: Modellspezifischer Speicheranteil"})]})]})]}),r.jsxs("div",{className:"rounded-2xl border border-border/60 bg-card/45 backdrop-blur-md p-5 shadow-lg shadow-black/10 space-y-3.5",children:[r.jsx("div",{className:"text-xs font-bold uppercase tracking-wider text-muted-foreground px-1",children:"Gateway Steckplatz-Belegung (Slot-Zuweisung)"}),r.jsx("div",{className:"grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-6 gap-3",children:["fast","heavy","coder","vision","scout"].map(D=>{var Ae;const te=R.find(Be=>Be.role===D),ke=te?O.includes(te.name):!1;return r.jsxs("div",{onClick:()=>z(D),className:X("rounded-xl border p-3 flex flex-col justify-between gap-2.5 transition-all cursor-pointer select-none text-left bg-background/25 hover:border-primary/45 hover:bg-background/40 group min-h-[90px]",ke?"border-emerald-500/40 shadow-sm shadow-emerald-500/5":te?"border-primary/20 bg-primary/5":"border-border/30 border-dashed opacity-75"),children:[r.jsxs("div",{className:"flex items-center justify-between",children:[r.jsx("span",{className:X("text-[9px] font-bold uppercase tracking-wider font-mono px-1.5 py-0.5 rounded border",Sc(D)),children:D}),ke&&r.jsx("span",{className:"h-1.5 w-1.5 rounded-full bg-emerald-400 animate-pulse"})]}),r.jsx("div",{className:"text-[10px] font-mono font-medium truncate text-foreground/90 pr-1 font-space",title:te==null?void 0:te.name,children:te?(Ae=te.name.split("/").pop())==null?void 0:Ae.replace(/\.gguf$/i,""):"nicht zugewiesen"}),r.jsx("div",{className:"text-[8px] text-primary/70 group-hover:text-primary font-bold uppercase tracking-wider transition-colors font-space",children:"Ändern ➔"})]},D)})})]}),(p==null?void 0:p.current)&&r.jsxs("div",{className:"rounded-2xl border border-indigo-500/30 bg-indigo-500/5 backdrop-blur-md p-5 shadow-lg shadow-black/10 space-y-3.5",children:[r.jsxs("div",{className:"flex items-center justify-between flex-wrap gap-2",children:[r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx($s,{className:"h-4.5 w-4.5 text-indigo-400"}),r.jsx("span",{className:"text-xs font-bold uppercase tracking-wider text-foreground",children:"Agent-Hirn (Hermes)"}),p.current.version!=null&&r.jsxs("span",{className:"text-[9px] font-mono px-1.5 py-0.5 rounded bg-indigo-500/15 text-indigo-300 border border-indigo-500/25",children:["v",p.current.version]})]}),r.jsx("button",{onClick:()=>re(!0),className:"h-7 px-3 rounded-lg border border-indigo-500/30 bg-indigo-500/5 text-indigo-300 text-[9px] font-bold uppercase hover:bg-indigo-500/15 transition-all cursor-pointer",children:"Hirn wechseln"})]}),r.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center justify-between gap-3 rounded-xl bg-background/30 border border-border/30 p-3.5",children:[r.jsxs("div",{className:"min-w-0",children:[r.jsx("div",{className:"text-xs font-mono font-bold text-foreground truncate",title:p.current.name,children:p.current.name.split("/").pop()}),r.jsxs("div",{className:"text-[10px] text-muted-foreground/80 flex items-center gap-2 mt-0.5",children:[r.jsx("span",{children:p.current.params_b?`${p.current.params_b}B`:"—"}),r.jsx("span",{children:"•"}),r.jsx("span",{children:p.current.quant||"GGUF"}),r.jsx("span",{children:"•"}),r.jsx("span",{children:$t(p.current.size_bytes||0)})]})]}),p.update_available&&p.recommended?r.jsxs("button",{onClick:()=>Gn(p.recommended.repo),className:X("h-8 px-3 shrink-0 flex items-center justify-center gap-1.5 rounded-lg text-[10px] font-bold uppercase transition-all cursor-pointer shadow-md",p.budget&&!p.budget.fits?"bg-red-500 text-white hover:bg-red-400 shadow-red-500/10":"bg-amber-500 text-black hover:bg-amber-400 shadow-amber-500/10"),children:[r.jsx(an,{className:"h-3.5 w-3.5"})," Aktualisieren"]}):r.jsxs("span",{className:"h-8 px-3 shrink-0 flex items-center gap-1.5 text-[10px] font-bold text-emerald-400 uppercase tracking-wide bg-emerald-500/5 border border-emerald-500/15 rounded-lg select-none",children:[r.jsx(ir,{className:"h-4 w-4"})," Neueste Generation"]})]}),p.update_available&&p.recommended&&r.jsxs("div",{className:"text-[10px] text-amber-400/90 flex items-center gap-1.5",children:[r.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-amber-400 animate-ping shrink-0"}),"Neuere Generation verfügbar: ",r.jsx("span",{className:"font-mono font-bold",children:p.recommended.name.replace(/-GGUF$/i,"")}),"(v",p.recommended.version,", ",p.recommended.params_b,"B) — von NousResearch."]}),p.budget&&r.jsxs("div",{className:X("text-[10px] flex items-start gap-1.5 leading-relaxed",p.budget.fits?"text-muted-foreground/80":"text-red-400 font-semibold"),children:[r.jsx(Ea,{className:"h-3 w-3 shrink-0 mt-0.5"}),r.jsxs("span",{children:["Always-On-Brain ~",p.budget.brain_gb," GB + größtes on-demand (~",p.budget.largest_ondemand_gb," GB) = ",(p.budget.brain_gb+p.budget.largest_ondemand_gb).toFixed(1)," / ",p.budget.gtt_gb," GB",p.budget.fits?" · passt gleichzeitig ✓":" · passt NICHT gleichzeitig ⚠ — heavy/coder würden das Brain verdrängen. Kleineres Brain oder weniger Kontext."]})]})]}),r.jsxs("div",{className:"space-y-4",children:[r.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center justify-between gap-3 px-1",children:[r.jsxs("div",{className:"text-xs font-bold uppercase tracking-wider text-muted-foreground",children:["Installierte Modell-Bibliothek (",_e.length," von ",R.length,")"]}),r.jsxs("div",{className:"flex items-center gap-3",children:[r.jsxs("div",{className:"flex rounded-lg border border-border/40 bg-card/45 p-0.5",children:[r.jsx("button",{onClick:()=>Te("all"),className:X("px-2.5 py-1 rounded-md text-[9px] font-bold uppercase transition-all cursor-pointer",Ee==="all"?"bg-primary text-primary-foreground shadow-sm":"text-muted-foreground hover:text-foreground"),children:"Vorhanden"}),r.jsx("button",{onClick:()=>Te("in_use"),className:X("px-2.5 py-1 rounded-md text-[9px] font-bold uppercase transition-all cursor-pointer",Ee==="in_use"?"bg-primary text-primary-foreground shadow-sm":"text-muted-foreground hover:text-foreground"),children:"In Benutzung"})]}),r.jsxs("div",{className:"flex rounded-lg border border-border/40 bg-card/45 p-0.5",children:[r.jsx("button",{onClick:()=>we("grid"),className:X("px-2.5 py-1 rounded-md text-[9px] font-bold uppercase transition-all cursor-pointer",Pe==="grid"?"bg-primary text-primary-foreground shadow-sm":"text-muted-foreground hover:text-foreground"),children:"Grid"}),r.jsx("button",{onClick:()=>we("list"),className:X("px-2.5 py-1 rounded-md text-[9px] font-bold uppercase transition-all cursor-pointer",Pe==="list"?"bg-primary text-primary-foreground shadow-sm":"text-muted-foreground hover:text-foreground"),children:"List"})]})]})]}),Pe==="grid"?r.jsx("div",{className:"grid gap-4 sm:grid-cols-2 lg:grid-cols-3",children:_e.length===0?r.jsx("div",{className:"col-span-full text-xs text-muted-foreground border border-dashed border-border/60 rounded-2xl p-12 text-center select-none",children:Ee==="in_use"?"Keine Modelle in Benutzung (keine Zuweisung oder warm geladene Modelle).":'Keine Modelle konfiguriert. Verwende den Tab "Modelle finden" zum Herunterladen.'}):_e.map(D=>{const te=O.includes(D.name),ke=h==null?void 0:h.model_list.find(Be=>Be.role===D.role),Ae=Xp(D.name);return r.jsxs("div",{className:X("rounded-2xl border bg-card/45 backdrop-blur-md p-5 shadow-lg shadow-black/10 flex flex-col justify-between gap-4 transition-all duration-300 hover:border-primary/40 group relative overflow-hidden",te?"border-primary/45 shadow-primary/5":D.role?"border-primary/30 bg-primary/5 shadow-inner":"border-border/60"),children:[r.jsxs("div",{className:"space-y-3",children:[r.jsx("div",{className:"flex items-start justify-between gap-3",children:r.jsxs("div",{className:"flex gap-2.5 min-w-0",children:[r.jsx("div",{className:X("w-7 h-7 rounded-lg border flex items-center justify-center font-bold text-xs shrink-0 shadow-sm",Ae.color),title:Ae.name,children:Ae.initial}),r.jsxs("div",{className:"min-w-0",children:[r.jsx("h3",{className:"text-xs font-bold tracking-tight text-foreground line-clamp-2 break-all font-mono",title:D.name,children:D.name.split("/").pop()}),r.jsxs("div",{className:"flex items-center gap-2 flex-wrap mt-1",children:[r.jsx("span",{className:"text-[9px] font-mono text-muted-foreground bg-background/40 px-1.5 py-0.5 rounded border border-border/30",children:D.quant||"GGUF"}),te&&r.jsxs("span",{className:"flex items-center gap-1 text-[9px] font-semibold text-emerald-400 uppercase tracking-wider",children:[r.jsx(Ho,{className:"h-3 w-3 animate-pulse"})," Warm"]}),D.role&&r.jsx("span",{className:"px-1.5 py-0.5 rounded bg-primary/10 border border-primary/20 text-[9px] font-mono text-primary font-bold uppercase",children:D.role}),D.prompt_cache&&r.jsx("span",{className:"px-1.5 py-0.5 rounded bg-cyan-500/10 border border-cyan-500/20 text-[9px] font-mono text-cyan-400 font-bold uppercase",title:"Prompt Caching aktiv",children:"PC"}),D.spec_active?r.jsx("span",{className:"px-1.5 py-0.5 rounded bg-emerald-500/10 border border-emerald-500/20 text-[9px] font-mono text-emerald-400 font-bold uppercase",title:`Speculative Decoding aktiv (Draft: ${D.spec_draft_model})`,children:"SPEC"}):D.spec_draft_model?r.jsx("span",{className:"px-1.5 py-0.5 rounded bg-amber-500/10 border border-amber-500/20 text-[9px] font-mono text-amber-400 font-bold uppercase",title:`Draft gesetzt (${D.spec_draft_model}), aber INAKTIV — --spec-type fehlt oder Vocab inkompatibel. Über 'Spec' neu konfigurieren.`,children:"SPEC?"}):null,D.parallel_slots>1&&r.jsxs("span",{className:"px-1.5 py-0.5 rounded bg-violet-500/10 border border-violet-500/20 text-[9px] font-mono text-violet-400 font-bold uppercase",title:`${D.parallel_slots} parallele Slots aktiv`,children:["SLOTS: ",D.parallel_slots]}),D.incomplete&&r.jsx("span",{className:"px-1.5 py-0.5 rounded bg-amber-500/10 border border-amber-500/20 text-[9px] font-mono text-amber-400 font-bold uppercase",title:"GGUF-Datei fehlt — Modell kann nicht geladen werden",children:"⚠ Datei fehlt"})]})]})]})}),r.jsx("div",{className:"border-t border-border/30 pt-3 flex flex-wrap gap-1",children:r.jsx(em,{caps:D.capabilities})})]}),r.jsxs("div",{className:"space-y-3 pt-1",children:[r.jsxs("div",{className:"grid grid-cols-2 gap-2 text-[10px] font-mono text-muted-foreground",children:[r.jsxs("div",{className:"flex items-center gap-1.5 p-2 bg-background/20 rounded-lg border border-border/20",children:[r.jsx(Ea,{className:"h-3.5 w-3.5 text-primary/80"}),r.jsxs("div",{children:[r.jsx("div",{className:"text-[8px] uppercase tracking-wider font-semibold text-muted-foreground/60",children:"Größe"}),r.jsx("div",{className:"text-foreground font-semibold",children:$t(D.size_bytes)})]})]}),r.jsxs("div",{className:"flex items-center gap-1.5 p-2 bg-background/20 rounded-lg border border-border/20",children:[r.jsx(z0,{className:"h-3.5 w-3.5 text-primary/80"}),r.jsxs("div",{children:[r.jsx("div",{className:"text-[8px] uppercase tracking-wider font-semibold text-muted-foreground/60",children:"Kontext"}),r.jsx("div",{className:"text-foreground font-semibold",children:Zp(D.ctx)})]})]})]}),ke&&r.jsxs("div",{className:"p-3 bg-amber-500/5 border border-amber-500/30 rounded-xl space-y-2 flex flex-col justify-between shrink-0",children:[r.jsxs("div",{className:"text-[9px] font-semibold text-amber-400 flex items-center gap-1",children:[r.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-amber-400 animate-ping"}),r.jsxs("span",{children:["Upgrade verfügbar: ",ke.repo.split("/").pop()]})]}),r.jsxs("button",{onClick:()=>ol(ke.repo,D.role,D.quant||"Q4_K_M",D.capabilities.tools!=="no"),className:"h-7 w-full flex items-center justify-center gap-1 rounded-lg bg-amber-500 text-black text-[10px] font-bold hover:bg-amber-400 transition-colors cursor-pointer",children:[r.jsx(an,{className:"h-3 w-3"})," Smart-Swap starten"]})]}),r.jsxs("div",{className:"flex items-center gap-1.5 border-t border-border/20 pt-3 mt-auto",children:[r.jsx("button",{onClick:()=>te?fe(D.name):ae(D.name),disabled:D.incomplete&&!te,className:X("flex-1 h-7 rounded-lg text-[9px] font-bold uppercase transition-all border flex items-center justify-center gap-1",D.incomplete&&!te?"border-border/30 bg-background/10 text-muted-foreground/50 cursor-not-allowed":te?"border-amber-500/30 bg-amber-500/5 hover:bg-amber-500/15 text-amber-400 cursor-pointer":"border-primary/30 bg-primary/5 hover:bg-primary/15 text-primary cursor-pointer"),children:te?"Entladen":"Laden"}),r.jsx("button",{onClick:()=>ge(D.name,D.ctx),className:"h-7 px-2.5 rounded-lg border border-border/40 text-[9px] font-bold uppercase hover:bg-accent text-muted-foreground transition-colors cursor-pointer",title:"Kontextlänge anpassen",children:"Ctx"}),r.jsxs("button",{onClick:()=>L(D),className:X("h-7 px-2.5 rounded-lg border text-[9px] font-bold uppercase transition-colors cursor-pointer flex items-center gap-1",D.spec_active?"border-emerald-500/30 text-emerald-400 hover:bg-emerald-500/10":D.spec_draft_model?"border-amber-500/30 text-amber-400 hover:bg-amber-500/10":"border-border/40 text-muted-foreground hover:bg-accent"),title:"Speculative Draft konfigurieren (Vocab-geprüft)",children:[r.jsx(Qo,{className:"h-3 w-3"})," Spec"]}),r.jsx("button",{onClick:()=>xt(D.name),className:"h-7 w-7 rounded-lg border border-border/40 text-muted-foreground hover:text-red-400 hover:bg-red-500/5 flex items-center justify-center transition-colors cursor-pointer",title:"Modell löschen",children:r.jsx(nc,{className:"h-3.5 w-3.5"})})]})]})]},D.name)})}):r.jsx("div",{className:"space-y-2",children:_e.length===0?r.jsx("div",{className:"text-xs text-muted-foreground border border-dashed border-border/60 rounded-2xl p-12 text-center select-none",children:Ee==="in_use"?"Keine Modelle in Benutzung (keine Zuweisung oder warm geladene Modelle).":'Keine Modelle konfiguriert. Verwende den Tab "Modelle finden" zum Herunterladen.'}):_e.map(D=>{const te=O.includes(D.name),ke=Xp(D.name);return r.jsxs("div",{className:X("rounded-xl border bg-card/45 backdrop-blur-md p-3.5 shadow-lg shadow-black/5 flex flex-col sm:flex-row sm:items-center justify-between gap-3 hover:border-primary/40 transition-all",te?"border-primary/45":D.role?"border-primary/30 bg-primary/5":"border-border/60"),children:[r.jsxs("div",{className:"flex items-center gap-3 min-w-0",children:[r.jsx("div",{className:X("w-8 h-8 rounded-lg border border-border/40 flex items-center justify-center font-bold text-xs shrink-0 shadow-sm",ke.color),title:ke.name,children:ke.initial}),r.jsxs("div",{className:"min-w-0 text-left",children:[r.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[r.jsx("h4",{className:"text-xs font-bold text-foreground truncate max-w-[250px] sm:max-w-[400px] break-all font-mono",title:D.name,children:D.name.split("/").pop()}),D.role&&r.jsx("span",{className:"px-1.5 py-0.5 rounded bg-primary/10 border border-primary/20 text-[8px] font-mono text-primary font-bold uppercase shrink-0",children:D.role}),D.prompt_cache&&r.jsx("span",{className:"px-1.5 py-0.5 rounded bg-cyan-500/10 border border-cyan-500/20 text-[8px] font-mono text-cyan-400 font-bold uppercase shrink-0",title:"Prompt Caching aktiv",children:"PC"}),D.spec_active?r.jsx("span",{className:"px-1.5 py-0.5 rounded bg-emerald-500/10 border border-emerald-500/20 text-[8px] font-mono text-emerald-400 font-bold uppercase shrink-0",title:`Speculative Decoding aktiv (Draft: ${D.spec_draft_model})`,children:"SPEC"}):D.spec_draft_model?r.jsx("span",{className:"px-1.5 py-0.5 rounded bg-amber-500/10 border border-amber-500/20 text-[8px] font-mono text-amber-400 font-bold uppercase shrink-0",title:`Draft gesetzt (${D.spec_draft_model}), aber INAKTIV — --spec-type fehlt oder Vocab inkompatibel.`,children:"SPEC?"}):null,D.parallel_slots>1&&r.jsxs("span",{className:"px-1.5 py-0.5 rounded bg-violet-500/10 border border-violet-500/20 text-[8px] font-mono text-violet-400 font-bold uppercase shrink-0",title:`${D.parallel_slots} parallele Slots aktiv`,children:["SLOTS: ",D.parallel_slots]}),D.incomplete&&r.jsx("span",{className:"px-1.5 py-0.5 rounded bg-amber-500/10 border border-amber-500/20 text-[8px] font-mono text-amber-400 font-bold uppercase shrink-0",title:"GGUF-Datei fehlt",children:"⚠ Datei fehlt"}),te&&r.jsxs("span",{className:"flex items-center gap-0.5 text-[8px] font-semibold text-emerald-400 uppercase tracking-wider shrink-0",children:[r.jsx("span",{className:"h-1.5 w-1.5 rounded-full bg-emerald-500 animate-pulse"})," warm"]})]}),r.jsxs("div",{className:"text-[10px] text-muted-foreground/80 flex items-center gap-2 mt-0.5",children:[r.jsxs("span",{children:["Größe: ",$t(D.size_bytes)]}),r.jsx("span",{children:"•"}),r.jsxs("span",{children:["Kontext: ",Zp(D.ctx)]}),r.jsx("span",{children:"•"}),r.jsx("span",{className:"font-mono text-[9px]",children:D.quant||"GGUF"})]})]})]}),r.jsxs("div",{className:"flex items-center gap-3 shrink-0 self-end sm:self-auto",children:[r.jsx("div",{className:"hidden lg:flex flex-wrap gap-1",children:r.jsx(em,{caps:D.capabilities})}),r.jsxs("div",{className:"flex items-center gap-1.5",children:[r.jsx("button",{onClick:()=>te?fe(D.name):ae(D.name),disabled:D.incomplete&&!te,className:X("h-7 px-3 rounded-lg text-[9px] font-bold uppercase transition-all border flex items-center gap-1",D.incomplete&&!te?"border-border/30 bg-background/10 text-muted-foreground/50 cursor-not-allowed":te?"border-amber-500/30 bg-amber-500/5 hover:bg-amber-500/15 text-amber-400 cursor-pointer":"border-primary/30 bg-primary/5 hover:bg-primary/15 text-primary cursor-pointer"),children:te?"Entladen":"Laden"}),r.jsx("button",{onClick:()=>ge(D.name,D.ctx),className:"h-7 px-2.5 rounded-lg border border-border/40 text-[9px] font-bold uppercase hover:bg-accent text-muted-foreground transition-all cursor-pointer",title:"Kontextlänge anpassen",children:"Ctx"}),r.jsxs("button",{onClick:()=>L(D),className:X("h-7 px-2.5 rounded-lg border text-[9px] font-bold uppercase transition-all cursor-pointer flex items-center gap-1",D.spec_active?"border-emerald-500/30 text-emerald-400 hover:bg-emerald-500/10":D.spec_draft_model?"border-amber-500/30 text-amber-400 hover:bg-amber-500/10":"border-border/40 text-muted-foreground hover:bg-accent"),title:"Speculative Draft konfigurieren (Vocab-geprüft)",children:[r.jsx(Qo,{className:"h-3 w-3"})," Spec"]}),r.jsx("button",{onClick:()=>xt(D.name),className:"h-7 w-7 rounded-lg flex items-center justify-center border border-border/40 text-muted-foreground hover:text-red-400 hover:bg-red-500/5 transition-all cursor-pointer",title:"Modell löschen",children:r.jsx(nc,{className:"h-3.5 w-3.5"})})]})]})]},D.name)})})]}),B&&r.jsx("div",{className:"fixed inset-0 z-50 bg-black/60 backdrop-blur-sm flex items-center justify-center p-4",children:r.jsxs("div",{className:"w-full max-w-md 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:[r.jsxs("div",{className:"flex items-center justify-between border-b border-border/20 pb-2",children:[r.jsxs("h3",{className:"text-xs font-bold uppercase tracking-wider text-primary",children:["Rolle '",B,"' konfigurieren"]}),r.jsx("button",{onClick:()=>z(null),className:"p-1 rounded hover:bg-accent text-muted-foreground hover:text-foreground cursor-pointer",children:r.jsx(jr,{className:"h-4 w-4"})})]}),r.jsxs("p",{className:"text-xs text-muted-foreground",children:["Wähle ein Modell aus deiner Bibliothek für die Rolle ",r.jsx("strong",{className:"text-foreground",children:B}),":"]}),r.jsxs("div",{className:"space-y-1.5 max-h-60 overflow-y-auto pr-1",children:[r.jsx("button",{onClick:()=>{U(B,""),z(null)},className:"w-full text-left px-3 py-2 rounded-lg text-xs hover:bg-accent text-red-400 font-semibold cursor-pointer border border-red-500/20 bg-red-500/5 flex items-center justify-between",children:r.jsx("span",{children:"Zuweisung entfernen"})}),R.map(D=>{var te;return r.jsxs("button",{onClick:()=>{U(B,D.name),z(null)},className:X("w-full text-left px-3 py-2.5 rounded-lg text-xs hover:bg-accent flex items-center justify-between font-mono cursor-pointer border border-border/30",D.role===B?"text-primary font-bold bg-primary/10 border-primary/30":"text-foreground bg-background/20"),children:[r.jsxs("div",{className:"flex flex-col text-left",children:[r.jsx("span",{className:"truncate max-w-[280px] font-semibold",children:(te=D.name.split("/").pop())==null?void 0:te.replace(".gguf","")}),r.jsxs("span",{className:"text-[9px] text-muted-foreground mt-0.5",children:[$t(D.size_bytes)," · ",D.quant]})]}),D.role===B&&r.jsx(ir,{className:"h-4 w-4 shrink-0 text-primary"})]},D.name)})]})]})}),$&&r.jsx(Zb,{model:$,onClose:()=>L(null),onChanged:k}),H&&r.jsx("div",{className:"fixed inset-0 z-50 bg-black/60 backdrop-blur-sm flex items-center justify-center p-4",children:r.jsxs("div",{className:"w-full max-w-md 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:[r.jsxs("div",{className:"flex items-center justify-between border-b border-border/20 pb-2",children:[r.jsxs("h3",{className:"text-xs font-bold uppercase tracking-wider text-primary flex items-center gap-1.5",children:[r.jsx($s,{className:"h-4 w-4"})," Agent-Hirn wechseln"]}),r.jsx("button",{onClick:()=>re(!1),className:"p-1 rounded hover:bg-accent text-muted-foreground hover:text-foreground cursor-pointer",children:r.jsx(jr,{className:"h-4 w-4"})})]}),r.jsxs("p",{className:"text-[11px] text-muted-foreground leading-relaxed",children:["Wähle ein ",r.jsx("strong",{className:"text-foreground",children:"installiertes"})," Modell als Agent-Hirn. Es bekommt den",r.jsx("code",{className:"text-primary",children:" hermes"}),'-Alias, wird warm gehalten (brains-Gruppe), und Hermes nutzt es nach einem kurzen Gateway-Restart. Neues Modell (z.B. Hermes-4.3 oder Gemma-4)? Erst über „Modelle finden" laden.']}),r.jsx("div",{className:"space-y-1.5 max-h-72 overflow-y-auto pr-1",children:R.map(D=>{var ke;const te=D.role==="hermes";return r.jsxs("button",{onClick:()=>!te&&Vs(D.name),disabled:te||D.incomplete,className:X("w-full text-left px-3 py-2.5 rounded-lg text-xs flex items-center justify-between font-mono border transition-all",te?"border-indigo-500/40 bg-indigo-500/10 text-indigo-300":D.incomplete?"border-border/20 bg-background/10 text-muted-foreground/50 cursor-not-allowed":"border-border/30 bg-background/20 text-foreground hover:bg-accent cursor-pointer"),children:[r.jsxs("div",{className:"flex flex-col min-w-0",children:[r.jsx("span",{className:"font-semibold truncate max-w-[280px]",children:(ke=D.name.split("/").pop())==null?void 0:ke.replace(/\.gguf$/i,"")}),r.jsxs("span",{className:"text-[9px] text-muted-foreground mt-0.5",children:[D.capabilities.params_b?`${D.capabilities.params_b}B`:"?"," · ",$t(D.size_bytes),D.role&&` · Rolle: ${D.role}`,D.capabilities.tools!=="no"?" · Tools ✓":" · ohne Tools"]})]}),te?r.jsxs("span",{className:"text-[9px] font-bold uppercase text-indigo-300 shrink-0 flex items-center gap-1",children:[r.jsx(ir,{className:"h-3.5 w-3.5"})," Aktiv"]}):r.jsx("span",{className:"text-[9px] font-bold uppercase text-primary/70 shrink-0",children:"Als Hirn setzen →"})]},D.name)})}),r.jsxs("div",{className:"text-[10px] text-amber-400/80 flex items-start gap-1.5 border-t border-border/20 pt-2.5",children:[r.jsx("span",{children:"💡"}),r.jsxs("span",{children:["Für einen ",r.jsx("strong",{children:"Agenten"})," sind Hermes-Modelle (natives Tool-Calling) meist die robustere Wahl als allgemeine Modelle."]})]})]})}),P]})}function Jb(){const[s,o]=g.useState(""),[a,d]=g.useState([]),[u,f]=g.useState("Q4_K_M"),[h,p]=g.useState(""),[v,x]=g.useState(""),[b,w]=g.useState(""),[P,R]=g.useState([]),[O,E]=g.useState(null),[k,C]=g.useState(!1),I=["fast","heavy","coder","vision","scout"],{data:B}=Bn(),z=v?B==null?void 0:B.models.find(G=>(G.role||"").toLowerCase()===v):void 0;async function $(G,Pe,we){if(C(!1),!G.trim()){E(null);return}try{const Ee=await he(`/api/fit?params_b=0&quant=${encodeURIComponent(Pe)}&ctx=8192&name=${encodeURIComponent(G)}&role=${encodeURIComponent(we)}`);E(Ee)}catch{E(null)}}async function L(G){const Pe=G??s;if(Pe.trim()){p("Analysiere HuggingFace Repository..."),E(null);try{const we=await he(`/api/hf/quants?repo=${encodeURIComponent(Pe)}`);o(we.repo),d(we.quants);const Ee=we.quants.length?we.quants.includes("Q4_K_M")?"Q4_K_M":we.quants[0]:u;we.quants.length&&f(Ee),p(we.quants.length?"":"Keine GGUF-Dateien in diesem Repository gefunden."),we.quants.length&&$(we.repo,Ee,v)}catch(we){p(`Fehler: ${we}`)}}}function H(G){f(G),$(s,G,v)}function re(G){x(G),a.length&&$(s,u,G)}async function oe(){if(b.trim()){p("Durchsuche HuggingFace...");try{const G=await he(`/api/hf/search?q=${encodeURIComponent(b)}`);R(G.results),p(G.results.length?"":"Keine Ergebnisse gefunden.")}catch(G){p(`Suche fehlgeschlagen: ${G}`)}}}async function me(){if(s.trim()){if((O==null?void 0:O.fit.level)==="too_tight"&&!k){C(!0);return}p("Download-Job wird initiiert...");try{await he("/api/models/install",{method:"POST",body:JSON.stringify({repo:s,quant:u,role:v||void 0,jinja:!0})}),C(!1),p(`Download gestartet: ${s} (${u})${v?`, Rolle: ${v}`:""}. Fortschritt oben.`+(z?` „${v}" wurde von ${z.name} übernommen.`:"")+(v==="fast"||v==="coder"?" Speculative Draft (Vocab-geprüft) kannst du nach dem Download an der Modellkarte (»Spec«) setzen.":""))}catch(G){p(`Download-Fehler: ${G}`)}}}const xe=(O==null?void 0:O.fit.level)==="perfect"?"text-emerald-400 border-emerald-500/40 bg-emerald-500/10":(O==null?void 0:O.fit.level)==="marginal"?"text-amber-400 border-amber-500/40 bg-amber-500/10":"text-red-400 border-red-500/40 bg-red-500/10";return r.jsxs("div",{className:"space-y-4 rounded-2xl border border-border/60 bg-card/45 backdrop-blur-md p-5 shadow-lg shadow-black/10",children:[r.jsx("div",{className:"text-xs font-bold uppercase tracking-wider text-muted-foreground",children:"HF Download & Suche"}),r.jsxs("div",{className:"flex flex-col sm:flex-row gap-2",children:[r.jsx("input",{value:s,onChange:G=>{o(G.target.value),E(null),C(!1)},placeholder:"HF-URL oder org/repo (z.B. unsloth/Qwen2.5-Coder-7B-Instruct-GGUF)",className:"flex-1 h-9 rounded-lg border border-border/60 bg-background/40 px-3 text-xs outline-none focus:ring-1 focus:ring-primary/50 text-foreground"}),r.jsxs("div",{className:"flex gap-2",children:[r.jsx("button",{onClick:()=>L(),className:"h-9 px-4 rounded-lg border border-border/60 bg-background/20 text-xs font-semibold hover:border-primary/50 hover:bg-background/40 transition-all cursor-pointer whitespace-nowrap",children:"Quants laden"}),a.length>0&&r.jsxs(r.Fragment,{children:[r.jsx("select",{value:u,onChange:G=>H(G.target.value),className:"h-9 rounded-lg border border-border/60 bg-background/40 px-3 text-xs outline-none text-foreground font-semibold",children:a.map(G=>r.jsx("option",{value:G,className:"bg-popover text-foreground",children:G},G))}),r.jsxs("select",{value:v,onChange:G=>re(G.target.value),title:"Rolle (optional) — bestimmt Auto-Konfiguration + setup-bewussten Kontext",className:"h-9 rounded-lg border border-border/60 bg-background/40 px-3 text-xs outline-none text-foreground font-semibold",children:[r.jsx("option",{value:"",className:"bg-popover text-foreground",children:"Rolle…"}),I.map(G=>r.jsx("option",{value:G,className:"bg-popover text-foreground",children:G},G))]}),r.jsx("button",{onClick:me,className:`h-9 px-4 rounded-lg text-xs font-semibold transition-all cursor-pointer flex items-center gap-1.5 ${k?"bg-red-500 text-white hover:opacity-90":"bg-primary text-primary-foreground hover:opacity-90"}`,children:k?r.jsxs(r.Fragment,{children:[r.jsx(Wo,{className:"h-3.5 w-3.5"})," OOM-Risiko — trotzdem laden"]}):r.jsxs(r.Fragment,{children:[r.jsx(an,{className:"h-3.5 w-3.5"})," Herunterladen"]})})]})]})]}),O&&r.jsxs("div",{className:`flex flex-wrap items-center gap-x-3 gap-y-1 rounded-lg border px-3 py-2 text-[11px] font-medium ${xe}`,children:[r.jsx("span",{className:"font-bold uppercase tracking-wide",children:O.fit.text}),r.jsxs("span",{className:"font-mono opacity-90",children:["~",O.params_b,"B · ~",O.fit.req_gb," GB / ",O.sys_ram_gb," GB RAM · ~",O.fit.tps," t/s"]}),O.fit.level!=="too_tight"&&r.jsxs("span",{className:"font-mono opacity-80",title:`Setup-bewusst: GTT ${O.budget.gtt_gb} GB − reserviert ${O.budget.reserved_gb} GB (${O.budget.mode}) → ${O.budget.budget_gb} GB frei`,children:["ctx → ",(O.assigned_ctx/1024).toFixed(0),"k"]}),O.fit.level==="too_tight"&&r.jsx("span",{className:"opacity-90",children:"— passt nicht in den Speicher, würde beim Laden abstürzen (OOM)."})]}),z&&r.jsxs("div",{className:"flex items-start gap-2 rounded-lg border border-amber-500/40 bg-amber-500/10 px-3 py-2 text-[11px] font-medium text-amber-400",children:[r.jsx(Wo,{className:"h-3.5 w-3.5 mt-0.5 shrink-0"}),r.jsxs("span",{children:["Rolle ",r.jsxs("strong",{children:["„",v,'"']})," ist aktuell ",r.jsx("strong",{children:z.name})," zugewiesen. Beim Download übernimmt das neue Modell diese Rolle — ",z.name," bleibt installiert, verliert sie aber."]})]}),r.jsxs("div",{className:"flex gap-2 border-t border-border/20 pt-4",children:[r.jsxs("div",{className:"relative flex-1",children:[r.jsx("input",{value:b,onChange:G=>w(G.target.value),onKeyDown:G=>G.key==="Enter"&&oe(),placeholder:"HuggingFace durchsuchen (z.B. Llama-3.1)...",className:"w-full h-9 pl-9 pr-3 rounded-lg border border-border/60 bg-background/40 text-xs outline-none focus:ring-1 focus:ring-primary/50 text-foreground"}),r.jsx(vc,{className:"absolute left-3 top-2.5 h-3.5 w-3.5 text-muted-foreground"})]}),r.jsx("button",{onClick:oe,className:"h-9 px-4 rounded-lg border border-border/60 bg-background/20 text-xs font-semibold hover:border-primary/50 hover:bg-background/40 transition-all cursor-pointer",children:"Suchen"})]}),P.length>0&&r.jsx("div",{className:"max-h-48 space-y-1.5 overflow-y-auto border border-border/40 bg-background/20 p-2 rounded-xl scrollbar-thin",children:P.map(G=>r.jsxs("button",{onClick:()=>{o(G.repo),R([]),w(""),L(G.repo)},className:"flex w-full items-center justify-between rounded-lg px-3 py-2 text-left text-xs bg-background/10 border border-border/10 hover:border-primary/30 hover:bg-background/30 transition-all",children:[r.jsx("span",{className:"font-semibold truncate",children:G.repo}),r.jsxs("span",{className:"text-[10px] font-mono text-muted-foreground flex items-center gap-1 shrink-0",children:[r.jsx(an,{className:"h-3 w-3"})," ",G.downloads.toLocaleString()]})]},G.repo))}),h&&r.jsx("div",{className:"text-[10px] font-medium text-primary font-mono",children:h})]})}const Xb={fast:{title:"Schnelles Alltags-Hirn",desc:"Schnelle MoE-Antworten für Chat, Zusammenfassungen und alltägliche Aufgaben.",icon:Qo},heavy:{title:"Schweres Reasoning",desc:"Große Modelle für komplexe Logik, Mathematik und tiefgründiges Planen.",icon:Go},coder:{title:"Coden & Entwicklung",desc:"Autovervollständigung, Refactoring und Codegenerierung direkt in deiner IDE.",icon:ec},vision:{title:"Bilder & Vision",desc:"Verarbeitet Bilder, Screenshots und visuelle Diagramme in multimodalen Chats.",icon:rc},scout:{title:"Multimodal-Allrounder",desc:"Multimodaler Allrounder für schnelle Antworten, Übersetzungen und Alltag.",icon:tc}};function e1(){const{data:s,isLoading:o,error:a}=nb(),{data:d}=Bn(),{data:u}=kc(),f=(d==null?void 0:d.models)??[],h=a?String(a):"",[p,v]=g.useState({}),[x,b]=g.useState({}),[w,P]=g.useState(!1);async function R(O,E,k,C){v(I=>({...I,[O]:"Starte..."}));try{await he("/api/models/install",{method:"POST",body:JSON.stringify({repo:O,role:E,quant:k,jinja:C})}),v(I=>({...I,[O]:"Download läuft"}))}catch{v(B=>({...B,[O]:"Fehler"}))}}return o?r.jsx("div",{className:"text-xs text-muted-foreground py-12 text-center",children:"Analysiere Hardware und suche passende GGUF-Empfehlungen…"}):h||!s?r.jsxs("div",{className:"rounded-xl border border-red-500/20 bg-red-500/5 p-4 text-xs text-red-400",children:["Empfehlungsdienst temporär nicht erreichbar (",h,")."]}):r.jsxs("div",{className:"space-y-8",children:[r.jsxs("div",{className:"text-[10px] font-mono text-muted-foreground bg-background/25 border border-border/40 p-4 rounded-xl flex flex-col sm:flex-row sm:items-center justify-between gap-3 shadow-sm",children:[r.jsxs("div",{children:["Modell-Registry geladen für ",r.jsxs("span",{className:"text-foreground font-bold",children:[s.sys_ram_gb," GB"]})," System-RAM."]}),r.jsxs("div",{className:"flex items-center gap-1.5",children:[r.jsx(Dm,{className:"h-3.5 w-3.5 text-primary fill-primary/20"}),r.jsx("span",{children:"Empfehlungen sind automatisch auf deine Box-Hardware optimiert."})]})]}),r.jsx("div",{className:"grid gap-6 md:grid-cols-2",children:s.categories.map(O=>{const E=Xb[O.role]||{title:O.title||O.role,desc:"Spezifisches Modell für diese Systemrolle.",icon:Vo},k=E.icon,C=f.find(H=>H.role===O.role),I=u==null?void 0:u.model_list.find(H=>H.role===O.role),B=O.models.find(H=>H.repo===O.recommended)||O.models[0];if(!B)return null;const z=p[B.repo],$=O.models.filter(H=>H.repo!==O.recommended),L=!!x[O.role];return r.jsxs("div",{className:X("rounded-2xl border bg-card/45 backdrop-blur-md p-5 shadow-lg shadow-black/10 flex flex-col justify-between gap-5 transition-all duration-300 hover:border-primary/40",C?"border-border/60":"border-primary/20 shadow-primary/5"),children:[r.jsxs("div",{className:"space-y-4",children:[r.jsxs("div",{className:"flex items-start justify-between gap-3",children:[r.jsxs("div",{className:"flex items-center gap-3",children:[r.jsx("div",{className:"w-10 h-10 rounded-xl bg-primary/10 border border-primary/20 flex items-center justify-center text-primary shadow-sm shrink-0",children:r.jsx(k,{className:"h-5.5 w-5.5"})}),r.jsxs("div",{children:[r.jsx("h3",{className:"text-sm font-bold tracking-tight text-foreground",children:E.title}),r.jsxs("span",{className:"text-[9px] font-mono text-muted-foreground uppercase bg-background/50 px-1.5 py-0.5 rounded border border-border/30 inline-block mt-0.5",children:["Rolle: ",O.role]})]})]}),C?r.jsxs("span",{className:"flex items-center gap-1.5 text-[9px] font-bold text-emerald-400 uppercase tracking-wider bg-emerald-500/10 border border-emerald-500/20 px-2.5 py-1 rounded-lg",children:[r.jsx("span",{className:"h-1.5 w-1.5 rounded-full bg-emerald-500 animate-pulse"}),"Aktiviert"]}):r.jsx("span",{className:"text-[9px] font-bold text-primary/70 uppercase tracking-wider bg-primary/10 border border-primary/20 px-2.5 py-1 rounded-lg",children:"Frei"})]}),r.jsx("p",{className:"text-xs text-muted-foreground leading-relaxed",children:E.desc}),r.jsx("div",{className:"p-3.5 rounded-xl bg-background/35 border border-border/30 space-y-2.5",children:C?r.jsxs("div",{className:"space-y-1.5",children:[r.jsx("div",{className:"text-[9px] font-bold uppercase tracking-wider text-muted-foreground/60",children:"Aktive GGUF-Belegung"}),r.jsx("div",{className:"text-xs font-mono font-bold text-foreground truncate",title:C.name,children:C.name.split("/").pop()}),r.jsxs("div",{className:"text-[10px] text-muted-foreground/80 flex items-center gap-2",children:[r.jsxs("span",{children:["Größe: ",dc(C.size_bytes||0)]}),r.jsx("span",{children:"•"}),r.jsxs("span",{children:["Quant: ",C.quant||"GGUF"]})]})]}):r.jsxs("div",{className:"space-y-1.5",children:[r.jsx("div",{className:"text-[9px] font-bold uppercase tracking-wider text-primary/80",children:"Empfohlenes Modell"}),r.jsx("div",{className:"text-xs font-mono font-bold text-foreground truncate",title:B.name,children:B.name}),r.jsxs("div",{className:"text-[10px] text-muted-foreground/80 flex items-center gap-2 flex-wrap",children:[r.jsxs("span",{children:["Ersteller: ",B.author]}),r.jsx("span",{children:"•"}),r.jsxs("span",{children:["Quant: ",B.quant]})]}),r.jsx("div",{className:"flex items-center gap-1.5 pt-0.5",children:r.jsx($b,{fit:B.fit})})]})}),r.jsx("div",{className:"pt-1",children:C?I?r.jsxs("div",{className:"space-y-2",children:[r.jsxs("div",{className:"text-[9px] font-semibold text-amber-400 flex items-center gap-1.5",children:[r.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-amber-400 animate-ping shrink-0"}),r.jsxs("span",{children:["Bessere Version in der Registry: ",I.repo.split("/").pop()]})]}),r.jsxs("button",{onClick:()=>R(I.repo,O.role,B.quant||"Q4_K_M",B.caps.tools!=="no"),disabled:!!p[I.repo],className:"h-8 w-full flex items-center justify-center gap-1.5 rounded-lg bg-amber-500 text-black text-xs font-bold hover:bg-amber-400 disabled:opacity-50 transition-all cursor-pointer shadow-md shadow-amber-500/10",children:[r.jsx(an,{className:"h-3.5 w-3.5"}),p[I.repo]||"Auf neue Version aktualisieren"]})]}):r.jsxs("div",{className:"h-8 flex items-center justify-center gap-1.5 text-[10px] font-bold text-emerald-400 uppercase tracking-wide bg-emerald-500/5 border border-emerald-500/10 rounded-lg select-none",children:[r.jsx(ir,{className:"h-4 w-4"})," Auf neuestem Stand"]}):r.jsxs("button",{onClick:()=>R(B.repo,O.role,B.quant||"Q4_K_M",B.caps.tools!=="no"),disabled:!!z,className:X("h-8 w-full flex items-center justify-center gap-1.5 rounded-lg text-xs font-bold transition-all cursor-pointer border",z?"border-primary/40 bg-primary/5 text-primary":"bg-primary text-primary-foreground hover:opacity-90 shadow-md shadow-primary/10"),children:[r.jsx(an,{className:"h-3.5 w-3.5"}),z||"Optimales Modell einsetzen"]})})]}),$.length>0&&r.jsxs("div",{className:"border-t border-border/20 pt-3",children:[r.jsxs("button",{onClick:()=>b(H=>({...H,[O.role]:!L})),className:"flex items-center gap-1.5 text-[10px] text-muted-foreground/80 hover:text-foreground transition-colors cursor-pointer",children:[L?r.jsx(k0,{className:"h-3 w-3"}):r.jsx(b0,{className:"h-3 w-3"}),r.jsxs("span",{children:["Alternative Empfehlungen anzeigen (",$.length,")"]})]}),L&&r.jsx("div",{className:"mt-2.5 space-y-2 max-h-36 overflow-y-auto pr-1 scrollbar-thin",children:$.map(H=>r.jsxs("div",{className:"p-2 rounded-lg bg-background/25 border border-border/20 flex items-center justify-between gap-3",children:[r.jsxs("div",{className:"min-w-0",children:[r.jsx("div",{className:"text-[10px] font-mono font-bold text-foreground truncate",title:H.name,children:H.name}),r.jsxs("div",{className:"text-[9px] text-muted-foreground flex items-center gap-1.5 mt-0.5",children:[r.jsxs("span",{children:["Quant: ",H.quant]}),r.jsx("span",{children:"•"}),r.jsx("span",{children:H.fit.text})]})]}),r.jsx("button",{onClick:()=>R(H.repo,O.role,H.quant||"Q4_K_M",H.caps.tools!=="no"),disabled:!!p[H.repo],className:"h-6 px-2.5 rounded bg-background/40 hover:bg-background/80 border border-border/40 text-[9px] font-bold text-foreground transition-all cursor-pointer shrink-0 disabled:opacity-50",children:p[H.repo]||"Installieren"})]},H.repo))})]})]},O.role)})}),r.jsxs("div",{className:"border border-border/50 bg-card/20 rounded-2xl overflow-hidden shadow-md mt-4",children:[r.jsxs("button",{onClick:()=>P(!w),className:"w-full px-5 py-4 flex items-center justify-between text-xs font-bold uppercase tracking-wider text-muted-foreground hover:bg-card/30 transition-colors cursor-pointer",children:[r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx(vc,{className:"h-4 w-4 text-primary"}),r.jsx("span",{children:"Eigenes Modell von Hugging Face laden (Erweiterte Ansicht)"})]}),r.jsx("span",{className:"text-[10px] text-primary hover:underline",children:w?"Ausblenden ▲":"Anzeigen ▼"})]}),w&&r.jsx("div",{className:"p-5 border-t border-border/20 bg-card/10",children:r.jsx(Jb,{})})]})]})}function t1(){const[s,o]=g.useState("cockpit");return r.jsxs("div",{className:"space-y-6",children:[r.jsxs("div",{className:"flex flex-col sm:flex-row justify-between sm:items-center gap-4",children:[r.jsxs("div",{children:[r.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:"Modell-Manager"}),r.jsx("p",{className:"text-sm text-muted-foreground",children:"Verwalte deine Modelle und passe das Gateway-Routing live über das interaktive Cockpit an."})]}),r.jsx("div",{className:"flex rounded-xl border border-border/60 bg-card/45 backdrop-blur-md p-1 self-start",children:["cockpit","discover"].map(a=>r.jsx("button",{onClick:()=>o(a),className:X("rounded-lg px-4 py-1.5 text-xs font-semibold tracking-wide uppercase transition-all cursor-pointer",s===a?"bg-primary text-primary-foreground shadow-md shadow-primary/10":"text-muted-foreground hover:text-foreground"),children:a==="cockpit"?"Cockpit":"Modelle finden"},a))})]}),r.jsx(qb,{}),r.jsx("div",{className:"transition-all duration-300",children:s==="cockpit"?r.jsx(Yb,{}):r.jsx(e1,{})})]})}function Sa({label:s,percent:o,detail:a,icon:d}){const u=o>90?"bg-red-500 shadow-md shadow-red-500/20":o>75?"bg-amber-500 shadow-md shadow-amber-500/20":"bg-primary shadow-md shadow-primary/20";return r.jsxs("div",{className:"rounded-2xl border border-border/60 bg-card/45 backdrop-blur-md p-5 shadow-lg shadow-black/10 flex flex-col justify-between gap-3 hover:border-primary/30 transition-all duration-300",children:[r.jsxs("div",{className:"flex items-center justify-between",children:[r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx(d,{className:"h-4.5 w-4.5 text-primary"}),r.jsx("span",{className:"text-xs font-semibold uppercase tracking-wider text-foreground",children:s})]}),r.jsxs("span",{className:"text-xs font-mono font-bold text-foreground",children:[Math.round(o),"%"]})]}),r.jsx("div",{className:"w-full h-2 bg-background/40 rounded-full overflow-hidden border border-border/20",children:r.jsx("div",{className:X("h-full transition-all duration-700 ease-out",u),style:{width:`${Math.min(o,100)}%`}})}),a&&r.jsx("div",{className:"text-[10px] font-mono text-muted-foreground/80",children:a})]})}function r1(){const{data:s,error:o}=Fa(3e3),{data:a}=eb(3e3),{showAlert:d,dialogElement:u}=Hn(),f=o?String(o):"",[h,p]=g.useState(""),[v,x]=g.useState({});async function b(){p("Backup snapshotted...");try{const P=await he("/api/system/backup",{method:"POST"});p(P.ok?`Snapshot erzeugt: ${P.snapshot} (${P.files.length} Dateien)`:"Keine Änderungen zu sichern.")}catch(P){p(`Fehler: ${P.message}`)}}async function w(P){x(R=>({...R,[P]:!0}));try{const R=await he("/api/maintenance/restart",{method:"POST",body:JSON.stringify({service:P})});R.ok?d("Erfolgreich",`Dienst ${P} wurde erfolgreich neu gestartet.`):d("Fehler beim Neustart",`Fehler beim Neustart: ${R.err||"Unbekannter Fehler"}`)}catch(R){d("Fehler",`Fehler: ${R.message}`)}finally{x(R=>({...R,[P]:!1}))}}return r.jsxs("div",{className:"space-y-6",children:[r.jsxs("div",{children:[r.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:"System-Diagnose & Status"}),r.jsx("p",{className:"text-sm text-muted-foreground flex items-center gap-1",children:"Echtzeit-Ressourcen der Box, Dienst-Überwachung und Systempflege."})]}),f&&r.jsxs("div",{className:"rounded-xl border border-red-500/20 bg-red-500/5 p-4 text-xs text-red-400 font-mono",children:["System-Status nicht lesbar (",f,")."]}),s&&r.jsxs("div",{className:"space-y-4",children:[r.jsxs("div",{className:"grid gap-4 sm:grid-cols-2 lg:grid-cols-4",children:[r.jsx(Sa,{label:"CPU",percent:s.cpu.percent,detail:s.cpu.cores?`${s.cpu.cores} Cores`:void 0,icon:Dt}),r.jsx(Sa,{label:"RAM",percent:s.ram.percent,detail:`${St(s.ram.used)} / ${St(s.ram.total)} GB`,icon:Ho}),s.gpu&&s.gpu.busy_percent!=null&&r.jsx(Sa,{label:"GPU",percent:s.gpu.busy_percent,detail:s.gpu.gtt_used!=null&&s.gpu.gtt_total?`${St(s.gpu.gtt_used)} / ${St(s.gpu.gtt_total)} GB (GTT/unified)`:s.gpu.vram_used!=null&&s.gpu.vram_total?`${St(s.gpu.vram_used)} / ${St(s.gpu.vram_total)} GB VRAM`:void 0,icon:Dt}),s.disk&&r.jsx(Sa,{label:"Disk",percent:s.disk.percent,detail:`${St(s.disk.used)} / ${St(s.disk.total)} GB`,icon:Ea})]}),s.temp&&(s.temp.cpu||s.temp.gpu)&&r.jsxs("div",{className:"flex gap-3 text-[10px] font-mono text-muted-foreground bg-background/25 border border-border/40 p-2.5 rounded-xl self-start w-fit",children:[s.temp.cpu!=null&&r.jsxs("span",{className:"flex items-center gap-1",children:["CPU-Temperatur: ",r.jsxs("span",{className:"text-foreground font-bold",children:[s.temp.cpu," °C"]})]}),s.temp.cpu!=null&&s.temp.gpu!=null&&r.jsx("span",{children:"|"}),s.temp.gpu!=null&&r.jsxs("span",{className:"flex items-center gap-1",children:["GPU-Temperatur: ",r.jsxs("span",{className:"text-foreground font-bold",children:[s.temp.gpu," °C"]})]})]})]}),a&&r.jsxs("div",{className:"rounded-2xl border border-border/60 bg-card/45 backdrop-blur-md p-5 shadow-lg shadow-black/10 space-y-4",children:[r.jsxs("div",{className:"flex items-center justify-between",children:[r.jsx("div",{className:"text-xs font-bold uppercase tracking-wider text-muted-foreground",children:"Homelab-Dienste"}),r.jsx("button",{onClick:()=>window.dispatchEvent(new CustomEvent("open-system-drawer",{detail:{tab:"logs"}})),className:"h-7 px-3 rounded-lg border border-border/60 bg-background/25 text-[10px] font-bold uppercase hover:bg-accent text-muted-foreground transition-all cursor-pointer",children:"System-Logs anzeigen"})]}),r.jsx("div",{className:"grid gap-3 sm:grid-cols-2",children:a.services.map(P=>r.jsxs("div",{className:"flex items-center justify-between p-3.5 rounded-xl bg-background/20 border border-border/30 hover:border-primary/20 transition-all group",children:[r.jsxs("div",{className:"flex items-center gap-2.5 min-w-0",children:[r.jsx("span",{className:X("h-2.5 w-2.5 rounded-full ring-2 ring-black/40",P.ok?"bg-emerald-500":"bg-amber-500")}),r.jsxs("div",{className:"truncate",children:[r.jsx("div",{className:"text-xs font-bold text-foreground truncate",children:P.name}),r.jsx("div",{className:"text-[9px] text-muted-foreground/60 font-mono mt-0.5 truncate",children:P.url})]})]}),r.jsx("button",{onClick:()=>w(P.name),disabled:v[P.name],className:"h-7 w-7 rounded-lg border border-border/40 text-muted-foreground hover:text-primary hover:bg-primary/5 flex items-center justify-center transition-all opacity-0 group-hover:opacity-100",title:"Dienst neu starten",children:r.jsx(In,{className:X("h-3.5 w-3.5",v[P.name]&&"animate-spin")})})]},P.name))}),r.jsxs("div",{className:"flex flex-wrap gap-4 border-t border-border/20 pt-4 text-[10px] font-semibold text-muted-foreground",children:[r.jsxs("a",{href:Yo(a.links.engine_ui),target:"_blank",rel:"noopener",className:"flex items-center gap-1 text-primary hover:text-primary-foreground hover:bg-primary/10 px-2 py-1 rounded transition-colors",children:[r.jsx(Ra,{className:"h-3 w-3"})," Engine Dashboard (llama-swap)"]}),r.jsxs("a",{href:Yo(a.links.gateway),target:"_blank",rel:"noopener",className:"flex items-center gap-1 text-primary hover:text-primary-foreground hover:bg-primary/10 px-2 py-1 rounded transition-colors",children:[r.jsx(Ra,{className:"h-3 w-3"})," OpenAI Gateway"]})]})]}),r.jsxs("div",{className:"rounded-2xl border border-border/60 bg-card/45 backdrop-blur-md p-5 shadow-lg shadow-black/10 flex flex-col sm:flex-row justify-between sm:items-center gap-4",children:[r.jsxs("div",{className:"space-y-1",children:[r.jsx("h3",{className:"text-xs font-bold uppercase tracking-wider text-foreground",children:"System-Backup & Snapshot"}),r.jsx("p",{className:"text-[10px] text-muted-foreground",children:"Erzeuge einen Git-Snapshot der aktuellen Konfigurationen und des System-Zustands."})]}),r.jsx("div",{className:"flex items-center gap-3 self-start sm:self-auto shrink-0",children:r.jsxs("button",{onClick:b,className:"h-9 px-4 rounded-lg bg-primary text-primary-foreground text-xs font-semibold hover:opacity-90 transition-all flex items-center gap-1.5 cursor-pointer shadow-md shadow-primary/10",children:[r.jsx(F0,{className:"h-4 w-4"})," Snapshot erstellen"]})})]}),h&&r.jsx("div",{className:"text-[10px] font-mono text-primary font-medium bg-primary/5 p-3 rounded-xl border border-primary/20",children:h}),u]})}function n1(){const[s,o]=g.useState(localStorage.getItem("mc_host")||"192.168.178.151"),[a,d]=g.useState(localStorage.getItem("mc_mcp_path")||""),[u,f]=g.useState("cline"),[h,p]=g.useState(!1),v=new URLSearchParams({host:s});a&&v.set("mcp_path",a);const{data:x,error:b}=vh(v.toString()),w=b?String(b):"";function P(k){o(k),k&&localStorage.setItem("mc_host",k)}function R(k){d(k),localStorage.setItem("mc_mcp_path",k)}const O=x==null?void 0:x.tools[u];async function E(){O&&(await navigator.clipboard.writeText(O.snippet),p(!0),setTimeout(()=>p(!1),1500))}return r.jsxs("div",{className:"space-y-6",children:[r.jsxs("div",{children:[r.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:"Verbindung & Integration"}),r.jsx("p",{className:"text-sm text-muted-foreground",children:"Kopiere vorgefertigte Konfigurationsdateien für deinen lokalen PC (IDEs, Cline, Roo Code, Cursor), um direkt auf das geteilte Gedächtnis und den Auto-Swap-Gateway der Box zuzugreifen."})]}),r.jsxs("div",{className:"grid gap-4 md:grid-cols-2 p-5 rounded-2xl border border-border/60 bg-card/45 backdrop-blur-md shadow-lg shadow-black/10",children:[r.jsxs("div",{className:"space-y-1.5",children:[r.jsxs("label",{className:"text-[10px] font-bold uppercase tracking-wider text-muted-foreground flex items-center gap-1.5",children:[r.jsx(P0,{className:"h-3.5 w-3.5 text-primary"})," Box LAN IP-Adresse"]}),r.jsx("input",{value:s,onChange:k=>P(k.target.value),placeholder:"z.B. 192.168.178.151",className:"w-full h-9 rounded-lg border border-border/60 bg-background/40 px-3 font-mono text-xs outline-none focus:ring-1 focus:ring-primary/50 text-foreground"})]}),r.jsxs("div",{className:"space-y-1.5",children:[r.jsxs("label",{className:"text-[10px] font-bold uppercase tracking-wider text-muted-foreground flex items-center gap-1.5",children:[r.jsx(M0,{className:"h-3.5 w-3.5 text-primary"})," Lokaler MCP-Scriptpfad"]}),r.jsx("input",{value:a,onChange:k=>R(k.target.value),placeholder:"z.B. F:\\Coding Stuff\\mission-control-2\\mcp\\mcp_memory.py",className:"w-full h-9 rounded-lg border border-border/60 bg-background/40 px-3 font-mono text-xs outline-none focus:ring-1 focus:ring-primary/50 text-foreground"})]})]}),w&&r.jsxs("div",{className:"rounded-xl border border-red-500/20 bg-red-500/5 p-4 text-xs text-red-400",children:["Fehler beim Generieren der Snippets: ",w]}),x&&r.jsxs("div",{className:"space-y-4",children:[r.jsx("div",{className:"flex flex-wrap gap-1 bg-card/20 p-1 border border-border/40 rounded-xl max-w-fit",children:Object.entries(x.tools).map(([k,C])=>r.jsx("button",{onClick:()=>f(k),className:X("rounded-lg px-4 py-1.5 text-xs font-semibold tracking-wide uppercase transition-all cursor-pointer",u===k?"bg-primary text-primary-foreground shadow-md shadow-primary/10":"text-muted-foreground hover:text-foreground"),children:C.label},k))}),O&&r.jsxs("div",{className:"space-y-3",children:[O.note&&r.jsxs("div",{className:"flex items-start gap-2.5 p-3 rounded-xl bg-primary/5 border border-primary/20 text-xs text-muted-foreground leading-relaxed",children:[r.jsx(R0,{className:"h-4.5 w-4.5 text-primary shrink-0 mt-0.5"}),r.jsx("span",{children:O.note})]}),r.jsxs("div",{className:"flex flex-col border border-border/60 bg-black/60 rounded-2xl overflow-hidden shadow-2xl",children:[r.jsxs("div",{className:"flex h-11 items-center justify-between px-4 border-b border-border/40 bg-black/40 shrink-0",children:[r.jsxs("div",{className:"flex items-center gap-1.5",children:[r.jsx("span",{className:"h-3 w-3 rounded-full bg-red-500/80 shadow-md shadow-red-500/10"}),r.jsx("span",{className:"h-3 w-3 rounded-full bg-amber-500/80 shadow-md shadow-amber-500/10"}),r.jsx("span",{className:"h-3 w-3 rounded-full bg-emerald-500/80 shadow-md shadow-emerald-500/10"})]}),r.jsxs("div",{className:"flex items-center gap-1.5 text-[10px] font-mono text-muted-foreground/75 bg-background/30 px-3 py-1 rounded-md border border-border/20",children:[r.jsx(Oa,{className:"h-3.5 w-3.5 text-primary"}),r.jsx("span",{children:u==="cline"||u==="cursor"?"config.json":"settings.json"})]}),r.jsxs("button",{onClick:E,className:"flex h-7 px-2.5 items-center gap-1.5 rounded-lg border border-border/40 bg-background/30 text-[10px] font-semibold text-muted-foreground hover:text-foreground hover:bg-background/60 transition-all cursor-pointer",children:[h?r.jsx(ir,{className:"h-3.5 w-3.5 text-emerald-400"}):r.jsx(Pm,{className:"h-3.5 w-3.5"}),r.jsx("span",{children:h?"Kopiert":"Kopieren"})]})]}),r.jsx("pre",{className:"p-5 overflow-x-auto text-xs font-mono text-cyan-200/90 whitespace-pre leading-relaxed scrollbar-thin select-text bg-black/10",children:r.jsx("code",{children:O.snippet})})]})]})]})]})}const tm=["user","instruction","stable","versioned","ephemeral"],Fd={user:{label:"User",icon:G0,color:"text-cyan-400",border:"border-cyan-500/30",bg:"bg-cyan-500/10",text:"text-cyan-400"},instruction:{label:"Regel",icon:I0,color:"text-violet-400",border:"border-violet-500/30",bg:"bg-violet-500/10",text:"text-violet-400"},stable:{label:"Fakt",icon:Us,color:"text-indigo-400",border:"border-indigo-500/30",bg:"bg-indigo-500/10",text:"text-indigo-400"},versioned:{label:"Version",icon:H0,color:"text-amber-400",border:"border-amber-500/30",bg:"bg-amber-500/10",text:"text-amber-400"},ephemeral:{label:"Temporär",icon:S0,color:"text-pink-400",border:"border-pink-500/30",bg:"bg-pink-500/10",text:"text-pink-400"}},rm={label:"Gedächtnis",icon:Mm,bg:"bg-muted/10",text:"text-muted-foreground"},s1={user:"border-l-cyan-500/80",instruction:"border-l-violet-500/80",stable:"border-l-indigo-500/80",versioned:"border-l-amber-500/80",ephemeral:"border-l-pink-500/80"};function o1(){const[s,o]=g.useState(""),[a,d]=g.useState(""),[u,f]=g.useState(""),[h,p]=g.useState("stable"),[v,x]=g.useState(!1),b=cn(),{showAlert:w,showConfirm:P,dialogElement:R}=Hn(),{data:O=[],error:E}=yh({q:a,category:s}),k=E?String(E):"",C=()=>b.invalidateQueries({queryKey:["memory"]});async function I(){u.trim()&&(await he("/api/memory",{method:"POST",body:JSON.stringify({content:u,category:h,source:"ui"})}),f(""),C())}async function B($){await he(`/api/memory/${$}`,{method:"DELETE"}),C()}async function z(){x(!0);try{const $=await he("/api/memory/dedupe",{method:"POST",body:JSON.stringify({apply:!1})});if($.duplicate_count===0){w("Ergebnis","Keine Dubletten gefunden — alles sauber.");return}P("Deduplizierung bestätigen",`${$.duplicate_count} Dublette(n) in ${$.groups.length} Gruppe(n) gefunden. Entfernen?`,async()=>{try{await he("/api/memory/dedupe",{method:"POST",body:JSON.stringify({apply:!0})}),C()}catch(L){w("Fehler",`Fehler beim Löschen: ${L.message}`)}})}catch($){w("Fehler",`Fehler bei der Deduplizierung: ${$.message}`)}finally{x(!1)}}return r.jsxs("div",{className:"space-y-6",children:[r.jsxs("div",{className:"flex flex-col sm:flex-row justify-between sm:items-center gap-4",children:[r.jsxs("div",{children:[r.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:"Gedächtnis-Pool (Memory)"}),r.jsx("p",{className:"text-sm text-muted-foreground",children:"Die geteilte Konstitution des Systems. Alle Instanzen (Hermes, IDEs, Gateway) lesen und schreiben hierauf per MCP-Protokoll."})]}),r.jsxs("button",{onClick:z,disabled:v,className:"flex h-9 px-4 items-center gap-1.5 text-xs font-semibold rounded-lg border border-border/60 bg-card hover:border-primary/50 transition-all cursor-pointer shadow-md disabled:opacity-50 shrink-0 self-start",children:[r.jsx(B0,{className:"h-4 w-4 text-primary animate-pulse"}),r.jsx("span",{children:"Deduplizieren"})]})]}),r.jsxs("div",{className:"rounded-2xl border border-border/60 bg-card/45 backdrop-blur-md p-5 shadow-lg shadow-black/10 space-y-4",children:[r.jsx("div",{className:"text-xs font-bold uppercase tracking-wider text-muted-foreground",children:"Neuen Eintrag anlegen"}),r.jsx("textarea",{value:u,onChange:$=>f($.target.value),placeholder:"Füge eine neue Regel, eine Vorliebe oder einen stabilen Fakt über das Projekt oder dich hinzu...",rows:3,className:"w-full resize-none rounded-xl border border-border/60 bg-background/30 p-3.5 text-xs outline-none focus:ring-1 focus:ring-primary/50 text-foreground transition-all leading-relaxed"}),r.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-3",children:[r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx("span",{className:"text-[10px] font-semibold text-muted-foreground uppercase tracking-wider",children:"Kategorie"}),r.jsx("select",{value:h,onChange:$=>p($.target.value),className:"h-8 rounded-lg border border-border/60 bg-background/50 px-2 py-1 text-xs outline-none font-semibold text-foreground cursor-pointer",children:tm.map($=>{var L;return r.jsx("option",{value:$,className:"bg-popover text-foreground",children:((L=Fd[$])==null?void 0:L.label)||$},$)})})]}),r.jsxs("button",{onClick:I,className:"h-9 px-4 rounded-lg bg-primary text-primary-foreground text-xs font-semibold hover:opacity-90 transition-all flex items-center gap-1.5 cursor-pointer shadow-md shadow-primary/10",children:[r.jsx(Rm,{className:"h-4 w-4"})," Speichern"]})]})]}),r.jsxs("div",{className:"flex flex-col md:flex-row items-stretch md:items-center gap-3",children:[r.jsxs("div",{className:"relative flex-1",children:[r.jsx("input",{value:a,onChange:$=>d($.target.value),placeholder:"Gedächtnis durchsuchen...",className:"w-full h-9 pl-9 pr-3 rounded-lg border border-border/60 bg-card/45 text-xs outline-none focus:ring-1 focus:ring-primary/50 text-foreground"}),r.jsx(vc,{className:"absolute left-3 top-2.5 h-3.5 w-3.5 text-muted-foreground"})]}),r.jsxs("div",{className:"flex flex-wrap items-center gap-1.5 p-1 bg-card/30 border border-border/40 rounded-xl overflow-x-auto max-w-full",children:[r.jsx("button",{onClick:()=>o(""),className:X("h-7 px-3 rounded-lg text-[10px] font-semibold uppercase tracking-wider transition-all cursor-pointer whitespace-nowrap",s?"text-muted-foreground hover:text-foreground":"bg-primary text-primary-foreground"),children:"Alle"}),tm.map($=>{const L=Fd[$]||rm,H=L.icon;return r.jsxs("button",{onClick:()=>o($),className:X("h-7 px-2.5 rounded-lg text-[10px] font-semibold uppercase tracking-wider transition-all cursor-pointer flex items-center gap-1 whitespace-nowrap",s===$?"bg-primary text-primary-foreground":"text-muted-foreground hover:text-foreground"),children:[r.jsx(H,{className:"h-3 w-3"}),r.jsx("span",{children:L.label})]},$)})]})]}),k&&r.jsxs("div",{className:"rounded-xl border border-red-500/20 bg-red-500/5 p-4 text-xs text-red-400",children:["Fehler beim Laden des Gedächtnisses: ",k]}),r.jsx("div",{className:"space-y-3",children:O.length===0?r.jsx("div",{className:"text-xs text-muted-foreground border border-dashed border-border/60 rounded-2xl p-12 text-center",children:"Keine Einträge für die aktuellen Filterkriterien gefunden."}):O.map($=>{const L=Fd[$.category]||rm,H=L.icon;return r.jsxs("div",{className:X("flex items-start justify-between gap-4 p-4 rounded-xl border border-l-4 bg-card/45 backdrop-blur-md border-border/60 shadow-md shadow-black/5 hover:border-primary/20 transition-all group",s1[$.category]||"border-l-muted"),children:[r.jsxs("div",{className:"flex items-start gap-3 flex-1 min-w-0",children:[r.jsxs("span",{className:X("flex items-center gap-1 px-2 py-0.5 rounded text-[9px] font-bold uppercase tracking-wider font-mono shrink-0",L.bg,L.text),children:[r.jsx(H,{className:"h-3 w-3"}),r.jsx("span",{className:"hidden sm:inline",children:L.label})]}),r.jsx("span",{className:"text-xs text-foreground leading-relaxed break-words whitespace-pre-wrap flex-1",children:$.content})]}),r.jsxs("div",{className:"flex items-center gap-3 shrink-0",children:[r.jsx("span",{className:"text-[9px] font-mono text-muted-foreground/60 bg-background/20 px-1.5 py-0.5 rounded uppercase tracking-wider",children:$.source}),r.jsx("button",{onClick:()=>B($.id),className:"h-7 w-7 rounded-lg flex items-center justify-center border border-border/40 text-muted-foreground hover:text-red-400 hover:bg-red-500/5 transition-all opacity-0 group-hover:opacity-100",title:"Eintrag löschen",children:r.jsx(nc,{className:"h-3.5 w-3.5"})})]})]},$.id)})}),R]})}function Ca({label:s,ok:o,detail:a,icon:d,onClick:u}){return r.jsxs("div",{onClick:u,className:X("rounded-2xl border bg-card/45 backdrop-blur-md p-5 shadow-lg shadow-black/10 flex flex-col justify-between gap-3 hover:border-primary/40 transition-all duration-300",o?"border-border/60":"border-amber-500/30",u&&"cursor-pointer hover:bg-card/70"),children:[r.jsxs("div",{className:"flex items-center justify-between",children:[r.jsx("span",{className:"text-[10px] font-bold uppercase tracking-wider text-muted-foreground",children:s}),r.jsx(d,{className:X("h-4.5 w-4.5",o?"text-primary":"text-amber-500")})]}),r.jsxs("div",{className:"space-y-1.5",children:[r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx("span",{className:X("h-2 w-2 rounded-full ring-2 ring-black/40",o?"bg-emerald-500 animate-pulse":"bg-amber-500")}),r.jsx("span",{className:"text-xs font-semibold text-foreground",children:o?"Bereit / Online":"Offline / Inaktiv"})]}),a&&r.jsx("div",{className:"text-[10px] font-mono text-muted-foreground truncate max-w-[200px]",title:a,children:a})]}),u&&r.jsxs("button",{onClick:f=>{f.stopPropagation(),u()},className:"mt-2 flex items-center justify-center gap-1.5 w-full py-1.5 px-3 rounded-lg border border-primary/30 bg-primary/10 hover:bg-primary/20 text-primary text-[10px] font-bold uppercase tracking-wider transition-all cursor-pointer font-space",children:[r.jsx(Dt,{className:"h-3.5 w-3.5"}),r.jsx("span",{children:"Gehirn wechseln"})]})]})}function l1(){const{data:s,error:o}=gh(5e3),{data:a}=Bn(),{showAlert:d,dialogElement:u}=Hn(),f=cn(),h=o?String(o):"",p=g.useMemo(()=>["auto","fast","heavy",...((a==null?void 0:a.models)??[]).map($=>{var L;return((L=$.name.split("/").pop())==null?void 0:L.replace(".gguf",""))||$.name})],[a]),[v,x]=g.useState(null),[b,w]=g.useState(!1),[P,R]=g.useState({width:800,height:360}),O=g.useRef(null),E=g.useCallback(z=>{if(O.current&&(O.current.disconnect(),O.current=null),z){const $=new ResizeObserver(L=>{if(!L||L.length===0)return;const H=L[0].contentRect;R({width:H.width,height:H.height})});$.observe(z),O.current=$}},[]),k=P.width,C=P.height,I=(z,$,L,H)=>{const re=(z+L)/2;return`M ${z} ${$} C ${re} ${$}, ${re} ${H}, ${L} ${H}`};async function B(z){try{await he("/api/agent/brain",{method:"POST",body:JSON.stringify({model:z})}),d("Erfolgreich",`Hermes-Gehirn wurde auf '${z}' geändert. Der Gateway-Dienst wurde neu gestartet.`),f.invalidateQueries({queryKey:Qe.agentStatus}),w(!1)}catch($){d("Fehler",`Fehler beim Wechseln des Gehirns: ${$.message}`)}}return r.jsxs("div",{className:"space-y-6",children:[r.jsx("style",{children:` + @keyframes flow-dash { + to { + stroke-dashoffset: -20; + } + } + .svg-flow-path { + stroke-dasharray: 4 6; + animation: flow-dash 1s linear infinite; + } + `}),r.jsxs("div",{className:"flex flex-col sm:flex-row justify-between sm:items-center gap-4",children:[r.jsxs("div",{children:[r.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:"Hermes Agenten-Cockpit"}),r.jsxs("p",{className:"text-sm text-muted-foreground",children:["Hermes ist ein autonomer Agent, der im Hintergrund der Box läuft (Port ",r.jsx("code",{children:":8642"}),") und seine eigene UI besitzt."]})]}),(s==null?void 0:s.webui_url)&&r.jsxs("a",{href:Yo(s.webui_url),target:"_blank",rel:"noopener",className:X("flex h-9 px-4 items-center gap-1.5 text-xs font-semibold rounded-lg transition-all cursor-pointer shadow-md shrink-0 self-start",s.webui_reachable?"bg-primary text-primary-foreground hover:opacity-90 shadow-primary/10":"border border-border/60 text-muted-foreground bg-background/20"),children:[r.jsx(Ra,{className:"h-4 w-4"}),r.jsx("span",{children:"AnythingLLM öffnen"})]})]}),h&&r.jsxs("div",{className:"rounded-xl border border-red-500/20 bg-red-500/5 p-4 text-xs text-red-400 font-mono",children:["Status nicht lesbar (",h,")."]}),s&&r.jsxs("div",{className:"space-y-6",children:[r.jsxs("div",{className:"grid gap-4 sm:grid-cols-2 lg:grid-cols-4",children:[r.jsx(Ca,{label:"Agent Gateway",ok:s.gateway_reachable,detail:"Port :8642 (REST API)",icon:$s}),r.jsx(Ca,{label:"AnythingLLM",ok:s.webui_reachable,detail:"Chat-UI (AnythingLLM)",icon:Ho}),r.jsx(Ca,{label:"Aktives Gehirn",ok:s.gateway_reachable,detail:s.brain_model?`Model: ${s.brain_model}`:"Model: auto",icon:Dt,onClick:()=>w(!0)}),r.jsx(Ca,{label:"Verdrahtung",ok:s.has_config,detail:`Config: ${s.has_config?"✓":"—"} · Skills: ${s.has_skills?"✓":"—"} · Memory: ${s.has_memories?"✓":"—"}`,icon:Ko})]}),r.jsxs("div",{className:"rounded-2xl border border-border/60 bg-card/45 backdrop-blur-md p-6 shadow-lg shadow-black/10 space-y-4",children:[r.jsxs("div",{children:[r.jsx("span",{className:"text-xs font-bold uppercase tracking-wider text-foreground",children:"Interactive Agent Flow Graph"}),r.jsx("p",{className:"text-[10px] text-muted-foreground mt-0.5 leading-relaxed",children:"Visualisiert das Zusammenspiel und die Verbindungspfade zwischen den Hermes-Systemkomponenten."})]}),r.jsxs("div",{ref:E,className:"relative w-full h-96 border border-border/30 rounded-xl bg-black/25 overflow-hidden flex",children:[r.jsxs("svg",{className:"absolute inset-0 pointer-events-none w-full h-full",children:[r.jsxs("defs",{children:[r.jsxs("linearGradient",{id:"cyan-to-teal",x1:"0%",y1:"0%",x2:"100%",y2:"0%",children:[r.jsx("stop",{offset:"0%",stopColor:"#06b6d4",stopOpacity:"0.45"}),r.jsx("stop",{offset:"100%",stopColor:"#0d9488",stopOpacity:"0.45"})]}),r.jsxs("linearGradient",{id:"active-glow",x1:"0%",y1:"0%",x2:"100%",y2:"0%",children:[r.jsx("stop",{offset:"0%",stopColor:"#3b82f6",stopOpacity:"0.8"}),r.jsx("stop",{offset:"100%",stopColor:"#10b981",stopOpacity:"0.8"})]})]}),r.jsx("path",{d:I(k*.15,C*.5,k*.5,C*.5),stroke:"url(#cyan-to-teal)",strokeWidth:"1.5",fill:"none"}),(v==="webui"||s.webui_reachable)&&r.jsx("path",{d:I(k*.15,C*.5,k*.5,C*.5),stroke:"#06b6d4",strokeWidth:"2.5",fill:"none",className:"svg-flow-path"}),r.jsx("path",{d:I(k*.5,C*.5,k*.85,C*.3),stroke:"url(#cyan-to-teal)",strokeWidth:"1.5",fill:"none"}),(v==="gateway"||v==="brain"||s.gateway_reachable)&&r.jsx("path",{d:I(k*.5,C*.5,k*.85,C*.3),stroke:"url(#active-glow)",strokeWidth:"2.5",fill:"none",className:"svg-flow-path"}),r.jsx("path",{d:I(k*.5,C*.5,k*.85,C*.7),stroke:"url(#cyan-to-teal)",strokeWidth:"1.5",fill:"none"}),(v==="gateway"||v==="wiring"||s.gateway_reachable)&&r.jsx("path",{d:I(k*.5,C*.5,k*.85,C*.7),stroke:"url(#active-glow)",strokeWidth:"2.5",fill:"none",className:"svg-flow-path"})]}),r.jsxs("div",{className:"absolute cursor-pointer select-none z-10 w-36 h-9 -translate-y-1/2 -translate-x-1/2 rounded-xl border border-border/60 bg-card/75 backdrop-blur-md flex items-center justify-center gap-1.5 px-2.5 hover:border-primary transition-all text-[10px] font-semibold text-foreground shadow shadow-black/20",style:{left:"15%",top:"50%"},onMouseEnter:()=>x("webui"),onMouseLeave:()=>x(null),onClick:()=>s.webui_reachable&&window.open(Yo(s.webui_url),"_blank"),title:s.webui_reachable?"Klicken um AnythingLLM zu öffnen":"AnythingLLM offline",children:[r.jsx(Ho,{className:X("h-3.5 w-3.5",s.webui_reachable?"text-emerald-400":"text-amber-500")}),r.jsx("span",{children:"AnythingLLM"}),r.jsx("span",{className:X("w-1.5 h-1.5 rounded-full animate-pulse ml-auto",s.webui_reachable?"bg-emerald-500":"bg-amber-500")})]}),r.jsxs("div",{className:"absolute select-none z-10 w-40 py-2.5 px-3 -translate-y-1/2 -translate-x-1/2 rounded-2xl border border-primary/50 bg-card/90 backdrop-blur-md flex flex-col items-center justify-center text-center shadow-lg shadow-primary/5 cursor-pointer",style:{left:"50%",top:"50%"},onMouseEnter:()=>x("gateway"),onMouseLeave:()=>x(null),children:[r.jsxs("div",{className:"flex items-center gap-1",children:[r.jsx($s,{className:"h-3.5 w-3.5 text-primary"}),r.jsx("span",{className:"text-[10px] uppercase font-bold text-primary font-space tracking-wide",children:"Agent Gateway"})]}),r.jsx("div",{className:"text-[9px] font-mono text-muted-foreground mt-0.5",children:"Port :8642"}),r.jsx("div",{className:X("mt-1 px-1.5 py-0.5 rounded text-[8px] font-semibold uppercase font-mono border",s.gateway_reachable?"bg-emerald-500/10 border-emerald-500/20 text-emerald-400":"bg-red-500/10 border-red-500/20 text-red-400"),children:s.gateway_reachable?"Online":"Offline"})]}),r.jsxs("div",{className:X("absolute z-20 w-44 py-1.5 px-3 -translate-y-1/2 -translate-x-1/2 rounded-xl border flex flex-col justify-center hover:border-primary/50 transition-all text-left shadow select-none cursor-pointer",s.gateway_reachable?"border-emerald-500/50 bg-emerald-500/5 shadow-emerald-500/5":"border-border/60 bg-card/75"),style:{left:"85%",top:"30%"},onMouseEnter:()=>x("brain"),onMouseLeave:()=>x(null),onClick:()=>w(!0),children:[r.jsxs("div",{className:"flex items-center justify-between",children:[r.jsxs("div",{className:"flex items-center gap-1 text-muted-foreground",children:[r.jsx(Dt,{className:"h-3 w-3 text-primary"}),r.jsx("span",{className:"text-[10px] font-bold uppercase tracking-wider",children:"Aktives Gehirn"})]}),s.gateway_reachable&&r.jsx("span",{className:"h-1.5 w-1.5 rounded-full bg-emerald-400 animate-pulse"})]}),r.jsx("div",{className:"text-[10px] font-mono font-medium truncate mt-0.5 text-foreground font-space",title:s.brain_model,children:s.brain_model||"auto"})]}),r.jsxs("div",{className:X("absolute z-10 w-44 py-1.5 px-3 -translate-y-1/2 -translate-x-1/2 rounded-xl border flex flex-col justify-center hover:border-primary/50 transition-all text-left shadow select-none",s.has_config?"border-emerald-500/50 bg-emerald-500/5 shadow-emerald-500/5":"border-border/60 bg-card/75"),style:{left:"85%",top:"70%"},onMouseEnter:()=>x("wiring"),onMouseLeave:()=>x(null),children:[r.jsxs("div",{className:"flex items-center justify-between",children:[r.jsxs("div",{className:"flex items-center gap-1 text-muted-foreground",children:[r.jsx(Ko,{className:"h-3 w-3 text-primary"}),r.jsx("span",{className:"text-[10px] font-bold uppercase tracking-wider",children:"Verdrahtung"})]}),s.has_config&&r.jsx("span",{className:"h-1.5 w-1.5 rounded-full bg-emerald-400 animate-pulse"})]}),r.jsxs("div",{className:"text-[9px] font-mono mt-0.5 text-muted-foreground flex gap-1 justify-between",children:[r.jsxs("span",{children:["Config: ",s.has_config?"✓":"—"]}),r.jsxs("span",{children:["Skills: ",s.has_skills?"✓":"—"]}),r.jsxs("span",{children:["Memory: ",s.has_memories?"✓":"—"]})]})]})]}),r.jsxs("div",{className:"flex flex-wrap items-center gap-6 mt-3 text-[10px] text-muted-foreground border-t border-border/20 pt-3",children:[r.jsxs("span",{className:"flex items-center gap-1.5",children:[r.jsx("span",{className:"h-2 w-2 rounded-full bg-cyan-400"}),r.jsx("span",{children:"Cyan-Fluss: Client-Anfrage an Agenten"})]}),r.jsxs("span",{className:"flex items-center gap-1.5",children:[r.jsx("span",{className:"h-2 w-2 rounded-full bg-emerald-500 animate-pulse"}),r.jsx("span",{children:"Grüner Puls: Verbindung hergestellt / Modul online"})]})]})]}),r.jsxs("div",{className:"rounded-2xl border border-border/60 bg-card/45 backdrop-blur-md p-6 space-y-4 shadow-lg shadow-black/10",children:[r.jsxs("div",{className:"flex items-center justify-between",children:[r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx(A0,{className:"h-5 w-5 text-primary"}),r.jsx("h3",{className:"text-sm font-bold uppercase tracking-wider text-foreground",children:"PC Verbindung"})]}),r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx("span",{className:X("h-2 w-2 rounded-full",s.pc_executor_reachable?"bg-emerald-500 animate-pulse":"bg-amber-500")}),r.jsx("span",{className:"text-xs font-semibold text-foreground",children:s.pc_executor_reachable?"Erreichbar":"Nicht verbunden"})]})]}),r.jsxs("div",{className:"grid gap-6 md:grid-cols-2 text-xs text-muted-foreground leading-relaxed text-left",children:[r.jsxs("div",{className:"space-y-3",children:[r.jsxs("p",{children:["Der ",r.jsx("strong",{className:"text-foreground",children:"Hermes PC Executor"})," läuft auf ",r.jsx("code",{className:"text-foreground font-mono px-1 py-0.5 rounded bg-muted/40 border border-border/30",children:"192.168.178.98:7777"})," und ermöglicht Hermes den direkten Zugriff auf deinen Windows-PC — Shell-Befehle, Screenshots, Tastatureingaben."]}),r.jsxs("p",{children:["Hermes erreicht den PC über den MCP-Server ",r.jsx("code",{className:"text-foreground font-mono px-1 py-0.5 rounded bg-muted/40 border border-border/30",children:"hermes-pc-control"}),", der automatisch beim Gateway-Start verbunden wird."]})]}),r.jsx("div",{className:"space-y-3",children:s.pc_executor_reachable?r.jsxs("div",{className:"p-3.5 bg-emerald-500/5 border border-emerald-500/20 rounded-xl space-y-1",children:[r.jsxs("div",{className:"text-emerald-400 font-semibold text-xs flex items-center gap-1.5",children:[r.jsx("span",{className:"h-1.5 w-1.5 rounded-full bg-emerald-500 animate-pulse"}),"PC Executor verbunden"]}),r.jsxs("p",{className:"text-[10px]",children:["Hermes kann jetzt per Telegram oder WebUI Befehle auf TobisNicerPC ausführen. Nutze ",r.jsx("code",{className:"text-foreground",children:"pc_shell"}),", ",r.jsx("code",{className:"text-foreground",children:"pc_screenshot"})," oder ",r.jsx("code",{className:"text-foreground",children:"pc_open"}),"."]})]}):r.jsxs("div",{className:"space-y-2",children:[r.jsx("h4",{className:"text-xs font-bold text-foreground",children:"PC Executor starten"}),r.jsxs("p",{children:["Starte ",r.jsx("code",{className:"text-foreground font-mono",children:"start.bat"})," im Ordner ",r.jsx("code",{className:"text-foreground font-mono",children:"client\\hermes-pc\\"})," auf dem Windows-PC und lasse das Fenster offen."]}),r.jsx("div",{className:"p-3 bg-background/25 rounded-xl border border-border/30 font-mono text-[9px] text-cyan-300",children:"client\\hermes-pc\\start.bat"})]})})]})]}),!s.gateway_reachable&&r.jsxs("div",{className:"rounded-2xl border border-border/60 bg-card/45 backdrop-blur-md p-6 space-y-4 shadow-lg shadow-black/10 text-left",children:[r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx(Us,{className:"h-5 w-5 text-amber-500"}),r.jsx("h3",{className:"text-sm font-bold uppercase tracking-wider text-foreground",children:"Hermes-Agent Diagnostics"})]}),r.jsxs("div",{className:"text-xs text-muted-foreground space-y-3 leading-relaxed",children:[r.jsx("p",{children:"Der Hermes-Dienst ist auf der Box derzeit offline oder kann sich nicht mit dem lokalen llama-swap verbinden."}),r.jsxs("p",{children:["Stelle sicher, dass die systemd-Dienste auf der Box laufen. Du kannst den Status im ",r.jsx("strong",{children:"OS & Updates Drawer"})," prüfen und die Dienste bei Bedarf neu starten."]}),r.jsxs("div",{className:"p-3.5 bg-background/25 rounded-xl border border-border/30 font-mono text-[10px] space-y-1",children:[r.jsx("div",{className:"text-muted-foreground/60",children:"# Dienste manuell auf der Box prüfen:"}),r.jsx("div",{className:"text-primary",children:"systemctl --user status hermes-gateway"}),r.jsx("div",{className:"text-primary",children:"systemctl --user status hermes-webui"})]}),r.jsxs("p",{children:["Weitere Einrichtungsdetails (Brain-Konfiguration, MCP-Kopplungen, SSH-Tunneling und Such-Engines) findest du in der Dokumentationsdatei:",r.jsx("code",{className:"ml-1 px-1.5 py-0.5 rounded bg-muted/40 text-foreground border border-border/30",children:"docs/HERMES_SETUP.md"}),"."]})]})]})]}),s&&b&&r.jsx("div",{className:"fixed inset-0 z-50 bg-black/60 backdrop-blur-sm flex items-center justify-center p-4",children:r.jsxs("div",{className:"w-full max-w-md 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:[r.jsxs("div",{className:"flex items-center justify-between border-b border-border/20 pb-2",children:[r.jsxs("h3",{className:"text-xs font-bold uppercase tracking-wider text-primary flex items-center gap-1.5",children:[r.jsx(Dt,{className:"h-4 w-4"}),r.jsx("span",{children:"Hermes-Gehirn konfigurieren"})]}),r.jsx("button",{onClick:()=>w(!1),className:"p-1 rounded hover:bg-accent text-muted-foreground hover:text-foreground cursor-pointer",children:r.jsx(jr,{className:"h-4 w-4"})})]}),r.jsxs("p",{className:"text-xs text-muted-foreground leading-relaxed",children:['Das „Gehirn" ist das primäre LLM für Hermes. Wähle ein Modell aus deiner Bibliothek oder nutze ein Gateway-Alias (',r.jsx("code",{className:"text-primary font-semibold",children:"auto"})," / ",r.jsx("code",{className:"text-primary font-semibold",children:"fast"})," / ",r.jsx("code",{className:"text-primary font-semibold",children:"heavy"}),"):"]}),r.jsx("div",{className:"space-y-1.5 max-h-60 overflow-y-auto pr-1",children:p.map(z=>{const $=["auto","fast","heavy"].includes(z);return r.jsxs("button",{onClick:()=>B(z),className:X("w-full text-left px-3 py-2.5 rounded-lg text-xs hover:bg-accent flex items-center justify-between font-mono cursor-pointer border border-border/30",s.brain_model===z||!s.brain_model&&z==="auto"?"text-primary font-bold bg-primary/10 border-primary/30":"text-foreground bg-background/20"),children:[r.jsxs("div",{className:"flex flex-col text-left",children:[r.jsx("span",{className:"font-semibold truncate max-w-[280px]",children:z}),r.jsx("span",{className:"text-[9px] text-muted-foreground mt-0.5",children:$?"Gateway Routing Alias":"Installiertes GGUF Modell"})]}),(s.brain_model===z||!s.brain_model&&z==="auto")&&r.jsx(ir,{className:"h-4 w-4 shrink-0 text-primary"})]},z)})})]})}),u]})}function a1(){const[s,o]=g.useState("connect"),[a,d]=g.useState("roocode"),[u,f]=g.useState(null),h="192.168.178.151",[p,v]=g.useState(!1),[x,b]=g.useState(null);function w(){v(!0),he("/api/health").then(P=>{f(P),b(P.engine_reachable?"success":"partial")}).catch(()=>{f(null),b("fail")}).finally(()=>v(!1))}return g.useEffect(()=>{w()},[]),r.jsxs("div",{className:"space-y-6",children:[r.jsxs("div",{children:[r.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:"Stack-Anleitung & Vibe-Coding-Guide"}),r.jsx("p",{className:"text-sm text-muted-foreground",children:"Einsteigerfreundliche Erklärungen zu deinem Stack und Schritt-für-Schritt-Anleitungen zur Anbindung deiner Editoren."})]}),r.jsxs("div",{className:"flex gap-4 border-b border-border/40 pb-px",children:[r.jsx("button",{onClick:()=>o("connect"),className:X("pb-3 text-xs font-bold uppercase tracking-wider border-b-2 px-1 transition-all",s==="connect"?"border-primary text-primary":"border-transparent text-muted-foreground hover:text-foreground"),children:"Editor-Anbindung"}),r.jsx("button",{onClick:()=>o("concepts"),className:X("pb-3 text-xs font-bold uppercase tracking-wider border-b-2 px-1 transition-all",s==="concepts"?"border-primary text-primary":"border-transparent text-muted-foreground hover:text-foreground"),children:"KI-Wissensdatenbank (Juni 2026)"})]}),s==="connect"?r.jsxs(r.Fragment,{children:[r.jsxs("div",{className:"rounded-2xl border border-border/60 bg-card/45 backdrop-blur-md p-5 shadow-lg shadow-black/10 flex flex-col sm:flex-row justify-between sm:items-center gap-4",children:[r.jsxs("div",{className:"flex items-center gap-3",children:[r.jsx("span",{className:X("h-3 w-3 rounded-full ring-2 ring-black/40",x==="success"&&"bg-emerald-500 animate-pulse",x==="partial"&&"bg-amber-500",x==="fail"&&"bg-red-500",!x&&"bg-muted")}),r.jsxs("div",{children:[r.jsx("div",{className:"text-xs font-bold uppercase tracking-wider text-foreground",children:"Lokaler Verbindungs-Check"}),r.jsxs("div",{className:"text-[10px] text-muted-foreground mt-0.5 font-mono",children:[x==="success"&&`Erfolgreich! Dein PC hat Zugriff auf das Box-Gateway (v${(u==null?void 0:u.version)||""}).`,x==="partial"&&"Gateway erreichbar, aber die llama-cpp-Engine ist offline.",x==="fail"&&"Verbindung fehlgeschlagen. Ist die Box im selben LAN-Netzwerk?",!x&&"Verbindung wird geprüft..."]})]})]}),r.jsxs("button",{onClick:w,disabled:p,className:"h-8 px-3 flex items-center gap-1.5 text-xs font-semibold rounded-lg border border-border/60 bg-background/20 hover:border-primary/50 transition-colors disabled:opacity-50 cursor-pointer self-start sm:self-auto shrink-0",children:[r.jsx(In,{className:X("h-3.5 w-3.5",p&&"animate-spin")}),r.jsx("span",{children:"Testen"})]})]}),r.jsxs("div",{className:"space-y-3",children:[r.jsxs("div",{className:"flex items-center gap-2 px-1",children:[r.jsx(Mm,{className:"h-4.5 w-4.5 text-primary"}),r.jsx("h2",{className:"text-xs font-bold uppercase tracking-wider text-foreground",children:"Wie funktioniert mein Stack?"})]}),r.jsxs("div",{className:"grid gap-4 sm:grid-cols-3",children:[r.jsxs("div",{className:"p-4 rounded-xl border border-border/60 bg-card/20 space-y-2",children:[r.jsxs("div",{className:"flex items-center gap-1.5",children:[r.jsx(Dt,{className:"h-4 w-4 text-cyan-400"}),r.jsx("h3",{className:"text-xs font-bold text-foreground",children:"1. Die Zentrale"})]}),r.jsx("p",{className:"text-[11px] text-muted-foreground leading-relaxed",children:"Dein Dashboard. Hier siehst du die CPU-/RAM- und GPU-Last der Box und siehst sofort, ob Updates anstehen."})]}),r.jsxs("div",{className:"p-4 rounded-xl border border-border/60 bg-card/20 space-y-2",children:[r.jsxs("div",{className:"flex items-center gap-1.5",children:[r.jsx(Vo,{className:"h-4 w-4 text-violet-400"}),r.jsx("h3",{className:"text-xs font-bold text-foreground",children:"2. Modell-Zentrale"})]}),r.jsxs("p",{className:"text-[11px] text-muted-foreground leading-relaxed",children:["Deine GGUF-Datenbank. Gesteuert von ",r.jsx("strong",{children:"llama-swap"}),". Lädt dein schnelles Alltags-Hirn (`fast`) oder dein schweres Logik-Hirn (`heavy`) vollautomatisch im VRAM."]})]}),r.jsxs("div",{className:"p-4 rounded-xl border border-border/60 bg-card/20 space-y-2",children:[r.jsxs("div",{className:"flex items-center gap-1.5",children:[r.jsx(Go,{className:"h-4 w-4 text-indigo-400"}),r.jsx("h3",{className:"text-xs font-bold text-foreground",children:"3. Das Gedächtnis"})]}),r.jsx("p",{className:"text-[11px] text-muted-foreground leading-relaxed",children:"Dein geteiltes Langzeitgedächtnis (Memory-Pool). Hier merkt sich dein Agent Regeln, Projekt-Details und Vorlieben."})]})]})]}),r.jsxs("div",{className:"space-y-4",children:[r.jsxs("div",{className:"flex items-center gap-2 px-1",children:[r.jsx(ec,{className:"h-4.5 w-4.5 text-primary"}),r.jsx("h2",{className:"text-xs font-bold uppercase tracking-wider text-foreground",children:"Vibe Coding auf dem PC einrichten"})]}),r.jsxs("div",{className:"flex gap-1.5 bg-card/20 p-1 border border-border/40 rounded-xl max-w-fit",children:[r.jsxs("button",{onClick:()=>d("roocode"),className:X("rounded-lg px-4 py-1.5 text-xs font-semibold tracking-wide uppercase transition-all cursor-pointer flex items-center gap-1.5",a==="roocode"?"bg-primary text-primary-foreground shadow-md shadow-primary/10":"text-muted-foreground hover:text-foreground"),children:[r.jsx(Dm,{className:"h-3.5 w-3.5 fill-amber-400/20"}),"Roo Code (VS Code)"]}),r.jsx("button",{onClick:()=>d("cursor"),className:X("rounded-lg px-4 py-1.5 text-xs font-semibold tracking-wide uppercase transition-all cursor-pointer",a==="cursor"?"bg-primary text-primary-foreground shadow-md shadow-primary/10":"text-muted-foreground hover:text-foreground"),children:"Cursor IDE"}),r.jsx("button",{onClick:()=>d("opencode"),className:X("rounded-lg px-4 py-1.5 text-xs font-semibold tracking-wide uppercase transition-all cursor-pointer",a==="opencode"?"bg-primary text-primary-foreground shadow-md shadow-primary/10":"text-muted-foreground hover:text-foreground"),children:"OpenCode Desktop"})]}),r.jsxs("div",{className:"rounded-2xl border border-border/60 bg-card/45 backdrop-blur-md p-6 space-y-4 shadow-lg shadow-black/10",children:[a==="roocode"&&r.jsxs("div",{className:"space-y-4 text-xs leading-relaxed text-muted-foreground",children:[r.jsxs("div",{className:"space-y-1",children:[r.jsx("h3",{className:"text-sm font-bold text-foreground",children:"Roo Code Kopplung (Empfohlene Open-Source-Erweiterung)"}),r.jsx("p",{children:"Roo Code ist die beliebteste und flexibelste Vibe-Coding-Erweiterung für VS Code im Jahr 2026. Sie ermöglicht vollen Zugriff auf das Terminal und das MCP-Gedächtnis."})]}),r.jsxs("div",{className:"space-y-3.5 border-t border-border/20 pt-4",children:[r.jsxs("div",{className:"space-y-1",children:[r.jsxs("div",{className:"font-semibold text-foreground flex items-center gap-1.5",children:[r.jsx("span",{className:"h-4.5 w-4.5 rounded-full bg-primary/20 text-primary flex items-center justify-center font-mono text-[10px]",children:"1"}),"Roo Code installieren"]}),r.jsxs("p",{className:"pl-6",children:["Suche in VS Code nach der Erweiterung ",r.jsx("strong",{children:"Roo Code"})," und installiere sie."]})]}),r.jsxs("div",{className:"space-y-1",children:[r.jsxs("div",{className:"font-semibold text-foreground flex items-center gap-1.5",children:[r.jsx("span",{className:"h-4.5 w-4.5 rounded-full bg-primary/20 text-primary flex items-center justify-center font-mono text-[10px]",children:"2"}),"API-Anbindung konfigurieren"]}),r.jsx("p",{className:"pl-6",children:"Klicke auf das Roo-Code-Symbol in der Sidebar, öffne die Einstellungen (Zahnrad) und stelle folgendes ein:"}),r.jsx("div",{className:"pl-6 pt-1",children:r.jsxs("div",{className:"p-3 bg-background/25 rounded-xl border border-border/30 font-mono text-[10px] space-y-1 text-foreground",children:[r.jsxs("div",{children:[r.jsx("span",{className:"text-muted-foreground/60",children:"API Provider:"})," OpenAI Compatible"]}),r.jsxs("div",{children:[r.jsx("span",{className:"text-muted-foreground/60",children:"Base URL:"})," http://",h,":9001/v1"]}),r.jsxs("div",{children:[r.jsx("span",{className:"text-muted-foreground/60",children:"API Key:"})," ",r.jsx("span",{className:"italic text-muted-foreground/50",children:'beliebig (z.B. "local")'})]}),r.jsxs("div",{children:[r.jsx("span",{className:"text-muted-foreground/60",children:"Model ID:"})," auto"]})]})})]}),r.jsxs("div",{className:"space-y-1",children:[r.jsxs("div",{className:"font-semibold text-foreground flex items-center gap-1.5",children:[r.jsx("span",{className:"h-4.5 w-4.5 rounded-full bg-primary/20 text-primary flex items-center justify-center font-mono text-[10px]",children:"3"}),"MCP Gedächtnis verknüpfen (Optional, aber empfohlen)"]}),r.jsxs("p",{className:"pl-6",children:["Damit Roo Code auf deinen ",r.jsx("strong",{children:"Gedächtnis-Pool"})," zugreifen kann, kopiere die MCP-Konfiguration aus dem Reiter ",r.jsx("strong",{children:"Verbinden"})," und füge sie in deine lokale Roo-Code-Konfigurationsdatei ein."]})]})]})]}),a==="cursor"&&r.jsxs("div",{className:"space-y-4 text-xs leading-relaxed text-muted-foreground",children:[r.jsxs("div",{className:"space-y-1",children:[r.jsx("h3",{className:"text-sm font-bold text-foreground",children:"Cursor IDE Kopplung (Proprietäre All-in-One IDE)"}),r.jsx("p",{children:"Cursor ist ein polierter, extrem schneller VS-Code-Fork mit hervorragenden, tief integrierten Autovervollständigungen (Tab-Completions)."})]}),r.jsxs("div",{className:"space-y-3.5 border-t border-border/20 pt-4",children:[r.jsxs("div",{className:"space-y-1",children:[r.jsxs("div",{className:"font-semibold text-foreground flex items-center gap-1.5",children:[r.jsx("span",{className:"h-4.5 w-4.5 rounded-full bg-primary/20 text-primary flex items-center justify-center font-mono text-[10px]",children:"1"}),"Einstellungen öffnen"]}),r.jsxs("p",{className:"pl-6",children:["Öffne Cursor, klicke oben rechts auf das Zahnrad (Settings) und navigiere zu ",r.jsx("strong",{children:"Models"}),"."]})]}),r.jsxs("div",{className:"space-y-1",children:[r.jsxs("div",{className:"font-semibold text-foreground flex items-center gap-1.5",children:[r.jsx("span",{className:"h-4.5 w-4.5 rounded-full bg-primary/20 text-primary flex items-center justify-center font-mono text-[10px]",children:"2"}),"OpenAI API überschreiben"]}),r.jsxs("p",{className:"pl-6",children:["Deaktiviere die Standard-Cloudmodelle, klappe den Bereich ",r.jsx("strong",{children:"OpenAI API"})," auf und konfiguriere:"]}),r.jsx("div",{className:"pl-6 pt-1",children:r.jsxs("div",{className:"p-3 bg-background/25 rounded-xl border border-border/30 font-mono text-[10px] space-y-1 text-foreground",children:[r.jsxs("div",{children:[r.jsx("span",{className:"text-muted-foreground/60",children:"Override Base URL:"})," http://",h,":9001/v1"]}),r.jsxs("div",{children:[r.jsx("span",{className:"text-muted-foreground/60",children:"API Key:"})," ",r.jsx("span",{className:"italic text-muted-foreground/50",children:'beliebig (z.B. "local")'})]})]})})]}),r.jsxs("div",{className:"space-y-1",children:[r.jsxs("div",{className:"font-semibold text-foreground flex items-center gap-1.5",children:[r.jsx("span",{className:"h-4.5 w-4.5 rounded-full bg-primary/20 text-primary flex items-center justify-center font-mono text-[10px]",children:"3"}),"Modell hinzufügen"]}),r.jsxs("p",{className:"pl-6",children:["Trage in der Modell-Liste ein neues Modell mit dem Namen ",r.jsx("strong",{children:"auto"})," ein und wähle es als aktives Modell aus. Cursor leitet ab jetzt alle deine Anfragen an die Box weiter."]})]})]})]}),a==="opencode"&&r.jsxs("div",{className:"space-y-4 text-xs leading-relaxed text-muted-foreground",children:[r.jsxs("div",{className:"space-y-1",children:[r.jsx("h3",{className:"text-sm font-bold text-foreground",children:"OpenCode Desktop Kopplung (Open-Source Vibe-Coding-App)"}),r.jsx("p",{children:"OpenCode ist eine standalone Desktop-App für ein ablenkungsfreies Coden über natürliche Sprache. Es trennt den KI-Prozess von deinem Editor."})]}),r.jsxs("div",{className:"space-y-3.5 border-t border-border/20 pt-4",children:[r.jsxs("div",{className:"space-y-1",children:[r.jsxs("div",{className:"font-semibold text-foreground flex items-center gap-1.5",children:[r.jsx("span",{className:"h-4.5 w-4.5 rounded-full bg-primary/20 text-primary flex items-center justify-center font-mono text-[10px]",children:"1"}),"OpenCode Desktop herunterladen"]}),r.jsx("p",{className:"pl-6",children:"Lade die Desktop-Anwendung von der offiziellen Website (opencode.ai) herunter und starte sie."})]}),r.jsxs("div",{className:"space-y-1",children:[r.jsxs("div",{className:"font-semibold text-foreground flex items-center gap-1.5",children:[r.jsx("span",{className:"h-4.5 w-4.5 rounded-full bg-primary/20 text-primary flex items-center justify-center font-mono text-[10px]",children:"2"}),"Endpunkt auf Box-Gateway setzen"]}),r.jsx("p",{className:"pl-6",children:"Gehe in den Bereich Einstellungen ➔ Provider, deaktiviere die Cloud-Voreinstellungen und trage deinen lokalen Server ein:"}),r.jsx("div",{className:"pl-6 pt-1",children:r.jsxs("div",{className:"p-3 bg-background/25 rounded-xl border border-border/30 font-mono text-[10px] space-y-1 text-foreground",children:[r.jsxs("div",{children:[r.jsx("span",{className:"text-muted-foreground/60",children:"Base URL:"})," http://",h,":9001/v1"]}),r.jsxs("div",{children:[r.jsx("span",{className:"text-muted-foreground/60",children:"Model:"})," auto"]})]})})]}),r.jsxs("div",{className:"space-y-1",children:[r.jsxs("div",{className:"font-semibold text-foreground flex items-center gap-1.5",children:[r.jsx("span",{className:"h-4.5 w-4.5 rounded-full bg-primary/20 text-primary flex items-center justify-center font-mono text-[10px]",children:"3"}),"Erster Vibe-Coding Test"]}),r.jsx("p",{className:"pl-6",children:'Starte eine neue Session und teste die Verbindung mit einem einfachen Prompt, z. B. *"Erstelle ein einfaches Skript, das die Fibonaccizahlen berechnet"*. Das Box-Gateway tauscht das Modell im Hintergrund vollautomatisch aus.'})]})]})]})]})]}),r.jsxs("div",{className:"rounded-2xl border border-border/60 bg-card/45 backdrop-blur-md p-5 space-y-3 shadow-lg shadow-black/10",children:[r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx(Oa,{className:"h-4.5 w-4.5 text-primary"}),r.jsx("h3",{className:"text-xs font-bold uppercase tracking-wider text-foreground",children:"Was tun, wenn das Coden hakt?"})]}),r.jsxs("ul",{className:"text-[11px] text-muted-foreground space-y-2 list-disc pl-4 leading-relaxed",children:[r.jsxs("li",{children:[r.jsx("strong",{children:"Keine Verbindung?"})," Überprüfe im Live-Verbindungsprüfer oben, ob die Box-IP erreichbar ist. Stelle sicher, dass dein lokaler PC im selben WLAN/LAN-Netzwerk wie die Box eingeloggt ist."]}),r.jsxs("li",{children:[r.jsx("strong",{children:"Modell antwortet nicht?"})," Schaue unter ",r.jsx("strong",{children:"Diagnose"}),", ob der Dienst `llama-swap` aktiv (grün) is. Wenn nicht, klicke daneben auf ",r.jsx("strong",{children:"Restart"}),"."]}),r.jsxs("li",{children:[r.jsx("strong",{children:"Hermes Agent reagiert merkwürdig?"})," Starte in AnythingLLM einfach eine frische Session (neuen Chat). Ältere Chats sammeln Kontext-Müll an."]})]})]})]}):r.jsxs("div",{className:"space-y-6",children:[r.jsxs("div",{className:"rounded-2xl border border-border/60 bg-card/45 backdrop-blur-md p-5 shadow-lg shadow-black/10 flex items-start gap-4",children:[r.jsx(tc,{className:"h-8 w-8 text-primary shrink-0 mt-0.5"}),r.jsxs("div",{className:"space-y-1",children:[r.jsx("h3",{className:"text-xs font-bold uppercase tracking-wider text-foreground",children:"Entwickler-Guide: Modernes Agentic Coding (2026)"}),r.jsx("p",{className:"text-xs text-muted-foreground leading-normal",children:"Willkommen im Wissenszentrum für dein Mission Control 2 Setup. Hier erfährst du, wie die verschiedenen Technologien (MoE, MCP, Skills, Hermes) zusammenarbeiten und wie du das Maximum aus deinen AI-Prozessabläufen herausholst."})]})]}),r.jsxs("div",{className:"grid gap-6 md:grid-cols-2",children:[r.jsxs("div",{className:"rounded-2xl border border-border/60 bg-card/45 p-6 shadow-lg shadow-black/10 space-y-4",children:[r.jsxs("div",{className:"flex items-center gap-2 border-b border-border/20 pb-3",children:[r.jsx(Vo,{className:"h-5 w-5 text-cyan-400"}),r.jsxs("div",{children:[r.jsx("h3",{className:"text-xs font-bold uppercase tracking-wider text-foreground",children:"1. Mixture of Experts (MoE)"}),r.jsx("span",{className:"text-[9px] text-cyan-400 font-mono",children:"Effizienz durch Spezialisierung"})]})]}),r.jsxs("div",{className:"text-xs text-muted-foreground space-y-2 leading-normal",children:[r.jsxs("p",{children:[r.jsx("strong",{children:"Was ist das?"})," Bei traditionellen LLMs wird für jedes Wort das gesamte neuronale Netz aktiviert. Bei MoE besteht das Modell aus mehreren spezialisierten Teilnetzwerken (den ",r.jsx("em",{children:"Experts"}),"). Ein intelligenter ",r.jsx("em",{children:"Router"})," entscheidet pro Token (Wortteil), welche Experten zur Berechnung herangezogen werden."]}),r.jsxs("p",{children:[r.jsx("strong",{children:"Warum in MC2?"})," So können extrem leistungsstarke Modelle (wie DeepSeek-V3, Mixtral oder Command R+) mit wesentlich geringeren Hardwarekosten ausgeführt werden. Es wird nur ein Bruchteil der Parameter geladen und aktiv berechnet, was Speicherplatz spart und die Inferenz beschleunigt."]}),r.jsxs("div",{className:"p-3 bg-background/25 rounded-xl border border-border/30 font-mono text-[10px] text-foreground",children:[r.jsx("span",{className:"text-cyan-400",children:"Vorteil:"})," GPT-4-Klasse Performance bei einem Bruchteil der aktiven VRAM-Last auf deinem Homelab!"]})]})]}),r.jsxs("div",{className:"rounded-2xl border border-border/60 bg-card/45 p-6 shadow-lg shadow-black/10 space-y-4",children:[r.jsxs("div",{className:"flex items-center gap-2 border-b border-border/20 pb-3",children:[r.jsx(tc,{className:"h-5 w-5 text-violet-400"}),r.jsxs("div",{children:[r.jsx("h3",{className:"text-xs font-bold uppercase tracking-wider text-foreground",children:"2. Model Context Protocol (MCP)"}),r.jsx("span",{className:"text-[9px] text-violet-400 font-mono",children:"Standardisierte Agenten-Tools"})]})]}),r.jsxs("div",{className:"text-xs text-muted-foreground space-y-2 leading-normal",children:[r.jsxs("p",{children:[r.jsx("strong",{children:"Was ist das?"})," MCP ist ein offenes Protokoll (initiiert von Anthropic), das festlegt, wie ein KI-Client (z.B. Roo Code auf deinem PC) mit externen Datenquellen und Tools kommuniziert. Es funktioniert wie ein USB-Standard für KI."]}),r.jsxs("p",{children:[r.jsx("strong",{children:"Warum in MC2?"})," MCP trennt den AI-Kern von der Umgebung. Statt für jeden Editor eigene Tools zu schreiben, binden deine Agenten (Roo Code, Hermes) einfach MCP-Server an. Diese Server können Dateien lesen, Websuchen durchführen, Git bedienen oder mit deiner App interagieren."]}),r.jsxs("div",{className:"space-y-1.5 p-3 bg-background/25 rounded-xl border border-border/30 text-[10px]",children:[r.jsx("div",{className:"font-bold text-foreground",children:"Gute Quellen für MCP Server:"}),r.jsxs("ul",{className:"list-disc pl-4 space-y-1 text-muted-foreground",children:[r.jsxs("li",{children:[r.jsx("a",{href:"https://smithery.ai/",target:"_blank",rel:"noopener",className:"text-primary hover:underline font-semibold",children:"Smithery Registry"})," — Ein Portal zum Suchen und automatischen Installieren von MCP Servern."]}),r.jsxs("li",{children:[r.jsx("a",{href:"https://glama.ai/mcp/servers",target:"_blank",rel:"noopener",className:"text-primary hover:underline font-semibold",children:"Glama MCP Registry"})," — Eine kuratierte, umfangreiche Community-Datenbank von MCP Servern."]}),r.jsxs("li",{children:[r.jsx("a",{href:"https://github.com/modelcontextprotocol/servers",target:"_blank",rel:"noopener",className:"text-primary hover:underline font-semibold",children:"Offizielles Anthropic Repo"})," — Das offizielle Repository mit Standards wie filesystem, postgres, sqlite, brave-search und puppeteer."]})]})]})]})]}),r.jsxs("div",{className:"rounded-2xl border border-border/60 bg-card/45 p-6 shadow-lg shadow-black/10 space-y-4",children:[r.jsxs("div",{className:"flex items-center gap-2 border-b border-border/20 pb-3",children:[r.jsx(Go,{className:"h-5 w-5 text-emerald-400"}),r.jsxs("div",{children:[r.jsx("h3",{className:"text-xs font-bold uppercase tracking-wider text-foreground",children:"3. Agent Skills"}),r.jsx("span",{className:"text-[9px] text-emerald-400 font-mono",children:"Modulbasierte Fähigkeiten"})]})]}),r.jsxs("div",{className:"text-xs text-muted-foreground space-y-2 leading-normal",children:[r.jsxs("p",{children:[r.jsx("strong",{children:"Was ist das?"})," Ein Skill ist ein Verzeichnis mit standardisierten Anweisungen, Scripten und Beispielen, das deine Agenten für spezifische Aufgaben trainiert (z.B. Test-Driven Development, Code-Vereinfachung, API-Design)."]}),r.jsxs("p",{children:[r.jsx("strong",{children:"Wie benutzt man sie?"})," Lege einen Skill-Ordner unter ",r.jsx("code",{children:".agents/skills/"})," in deinem Projekt an. Das Herzstück ist die Datei ",r.jsx("code",{children:"SKILL.md"})," mit folgendem Aufbau:"]}),r.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: Drive development with strict TDD practices +--- +# Instructions +...`}),r.jsxs("div",{className:"space-y-1.5 p-3 bg-background/25 rounded-xl border border-border/30 text-[10px]",children:[r.jsx("div",{className:"font-bold text-foreground",children:"Wo gibt es Skills & wo liegen sie?"}),r.jsxs("ul",{className:"list-disc pl-4 space-y-2.5 text-muted-foreground",children:[r.jsxs("li",{children:[r.jsx("strong",{children:"skills.sh Registry & CLI:"})," Das offizielle offene Portal für Agent-Skills (",r.jsx("a",{href:"https://skills.sh/",target:"_blank",rel:"noopener",className:"text-primary hover:underline font-semibold",children:"skills.sh"}),"). Du kannst Skills direkt über das Terminal suchen und in deinem Projekt installieren:",r.jsxs("div",{className:"mt-1 font-mono text-[9px] bg-background/40 p-2 rounded border border-border/30 text-cyan-300",children:["# Nach Skills suchen:",r.jsx("br",{}),r.jsx("span",{className:"text-foreground",children:"npx skills find"}),r.jsx("br",{}),"# Skill zum aktuellen Projekt hinzufügen:",r.jsx("br",{}),r.jsx("span",{className:"text-foreground",children:"npx skills add [owner/repo]"})]})]}),r.jsxs("li",{children:[r.jsx("strong",{children:"Globaler Pfad:"})," ",r.jsx("code",{className:"text-foreground select-all",children:"C:\\Users\\TobisPC\\.gemini\\config\\plugins\\agent-skills\\skills\\"}),". Hier sind deine vorinstallierten, global verfügbaren Skills (wie ",r.jsx("i",{children:"code-simplification"}),", ",r.jsx("i",{children:"api-and-interface-design"}),", etc.) abgelegt."]}),r.jsxs("li",{children:[r.jsx("strong",{children:"Projekt-Pfad:"})," ",r.jsx("code",{className:"text-foreground select-all",children:".agents/skills/"}),". Lege diesen Ordner im Root eines beliebigen Projekts an. Dein lokaler Editor-Agent (z.B. Roo Code) liest ihn beim Starten automatisch ein."]}),r.jsxs("li",{children:[r.jsx("strong",{children:"Vorlagen / Beispiele:"})," Kopiere einfach bestehende Skills aus dem globalen Verzeichnis oder erstelle deine eigenen, indem du eine ",r.jsx("code",{children:"SKILL.md"})," mit YAML-Header (name, description) anlegst."]})]})]})]})]}),r.jsxs("div",{className:"rounded-2xl border border-border/60 bg-card/45 p-6 shadow-lg shadow-black/10 space-y-4",children:[r.jsxs("div",{className:"flex items-center gap-2 border-b border-border/20 pb-3",children:[r.jsx(Dt,{className:"h-5 w-5 text-indigo-400"}),r.jsxs("div",{children:[r.jsx("h3",{className:"text-xs font-bold uppercase tracking-wider text-foreground",children:"4. Arbeiten mit Hermes"}),r.jsx("span",{className:"text-[9px] text-indigo-400 font-mono",children:"Autonomer Box-Agent"})]})]}),r.jsxs("div",{className:"text-xs text-muted-foreground space-y-2 leading-normal",children:[r.jsxs("p",{children:[r.jsx("strong",{children:"Was ist das?"})," Hermes ist der auf der Box installierte, autonome Hintergrund-Agent. Er verwaltet das Dateisystem und kann über REST (Port 8642) oder eine interaktive ChatUI (Port 8787) gesteuert werden."]}),r.jsx("p",{children:r.jsx("strong",{children:"Best Practices für Hermes:"})}),r.jsxs("ul",{className:"list-disc pl-4 space-y-1",children:[r.jsxs("li",{children:[r.jsx("strong",{children:"Chat-Kontext sauber halten:"})," Starte regelmäßig neue Chats. Zu große Historien verlangsamen den Agenten und führen zu Halluzinationen."]}),r.jsxs("li",{children:[r.jsx("strong",{children:"Gehirn festlegen:"})," Konfiguriere im Gateway die Modell-Rolle ",r.jsx("code",{children:"brain"})," für Hermes, damit er automatisch das passende Modell per Llama Swap lädt."]}),r.jsxs("li",{children:[r.jsx("strong",{children:"Sandbox umgehen:"})," Erweitere Hermes' System-Prompt (AnythingLLM-Einstellungen), um Befehle über SSH an deinen Windows-PC zu leiten."]})]})]})]}),r.jsxs("div",{className:"rounded-2xl border border-border/60 bg-card/45 p-6 shadow-lg shadow-black/10 space-y-4 md:col-span-2",children:[r.jsxs("div",{className:"flex items-center gap-2 border-b border-border/20 pb-3",children:[r.jsx(Ko,{className:"h-5 w-5 text-amber-400"}),r.jsxs("div",{children:[r.jsx("h3",{className:"text-xs font-bold uppercase tracking-wider text-foreground",children:"5. Richtiges Arbeiten mit Tools (Dateien, Terminal, DevTools)"}),r.jsx("span",{className:"text-[9px] text-amber-400 font-mono",children:"Fehler vermeiden & Kosten senken"})]})]}),r.jsxs("div",{className:"grid md:grid-cols-3 gap-4 text-xs text-muted-foreground leading-normal",children:[r.jsxs("div",{className:"space-y-1.5 p-3 bg-background/10 rounded-xl border border-border/30",children:[r.jsxs("h4",{className:"font-bold text-foreground flex items-center gap-1",children:[r.jsx(Oa,{className:"h-3.5 w-3.5 text-primary"})," Terminal"]}),r.jsxs("p",{className:"text-[11px]",children:["Verwende nur non-interaktive Befehle. Hänge bei langen Tasks (wie dev-Servern) ein ",r.jsx("code",{children:"&"})," an oder nutze die integrierte Job-Verwaltung. Verwende niemals interaktive Eingabeaufforderungen."]})]}),r.jsxs("div",{className:"space-y-1.5 p-3 bg-background/10 rounded-xl border border-border/30",children:[r.jsxs("h4",{className:"font-bold text-foreground flex items-center gap-1",children:[r.jsx(ec,{className:"h-3.5 w-3.5 text-cyan-400"})," Dateimanager"]}),r.jsxs("p",{className:"text-[11px]",children:["Überschreibe keine ganzen Dateien, wenn du nur eine Zeile ändern willst. Verwende gezielte Ersetzungs-Tools (wie ",r.jsx("code",{children:"replace_file_content"}),"). Das spart massiv Token-Kosten und beugt Fehlern vor."]})]}),r.jsxs("div",{className:"space-y-1.5 p-3 bg-background/10 rounded-xl border border-border/30",children:[r.jsxs("h4",{className:"font-bold text-foreground flex items-center gap-1",children:[r.jsx(Ko,{className:"h-3.5 w-3.5 text-violet-400"})," Browser DevTools"]}),r.jsx("p",{className:"text-[11px]",children:"Koppele deine Debug-Dienste mit dem Chrome-DevTools-Plugin. So kann der Agent Fehler in der Konsole live analysieren und das DOM verifizieren, anstatt blind zu raten."})]})]})]}),r.jsxs("div",{className:"rounded-2xl border border-border/60 bg-card/45 p-6 shadow-lg shadow-black/10 space-y-4 md:col-span-2",children:[r.jsxs("div",{className:"flex items-center gap-2 border-b border-border/20 pb-3",children:[r.jsx(Us,{className:"h-5 w-5 text-emerald-400"}),r.jsxs("div",{children:[r.jsx("h3",{className:"text-xs font-bold uppercase tracking-wider text-foreground",children:"Wie autonom ist Mission Control 2 wirklich?"}),r.jsx("span",{className:"text-[9px] text-emerald-400 font-mono",children:"Die Grenze zwischen Automatisierung und Kontrolle"})]})]}),r.jsxs("div",{className:"text-xs text-muted-foreground space-y-3 leading-normal",children:[r.jsxs("p",{children:["Mission Control 2 ist als ",r.jsx("strong",{children:"semi-autonomes Gateway"})," konzipiert. Es besitzt die Fähigkeit, komplexe Workflows komplett selbstständig durchzuführen, unterliegt jedoch strikten Sicherheitsplanken:"]}),r.jsxs("div",{className:"grid sm:grid-cols-2 gap-4 pt-1",children:[r.jsxs("div",{className:"space-y-1.5",children:[r.jsxs("h4",{className:"font-bold text-foreground flex items-center gap-1 text-[11px]",children:[r.jsx(Pp,{className:"h-3 w-3 text-emerald-400"})," Was läuft vollautomatisch?"]}),r.jsxs("ul",{className:"list-disc pl-4 space-y-1 text-[11px]",children:[r.jsx("li",{children:"Modellaustausch (Routing) per llama-swap je nach Anfragetyp (z.B. Code vs. Reasoning)."}),r.jsx("li",{children:"Hintergrund-Synchronisation und Speicherung von Gedächtniseinträgen (Memory)."}),r.jsx("li",{children:"Modell-Installation und API-Key-Injektionen in Gateway-Verbindungen."})]})]}),r.jsxs("div",{className:"space-y-1.5",children:[r.jsxs("h4",{className:"font-bold text-foreground flex items-center gap-1 text-[11px]",children:[r.jsx(Pp,{className:"h-3 w-3 text-amber-400"})," Wo ist menschliche Freigabe nötig?"]}),r.jsxs("ul",{className:"list-disc pl-4 space-y-1 text-[11px]",children:[r.jsxs("li",{children:[r.jsx("strong",{children:"Systembefehle:"})," Das Ausführen von Terminal-Kommandos auf deinem PC erfordert standardmäßig deine Bestätigung."]}),r.jsxs("li",{children:[r.jsx("strong",{children:"Kritische Systemeingriffe:"})," OS-Updates, Engine-Rebuilds und Host-Reboots müssen manuell über das Dashboard ausgelöst werden."]}),r.jsxs("li",{children:[r.jsx("strong",{children:"Gedächtnis-Löschung:"})," Permanentes Verwerfen von gesammelten Memorys wird von dir freigegeben."]})]})]})]}),r.jsxs("p",{className:"text-[11px] bg-background/25 p-3 rounded-xl border border-border/30 mt-2",children:[r.jsx("strong",{children:"Fazit:"})," Der Stack erledigt die Kärrnerarbeit (Modelle tauschen, API-Adapter bereitstellen, Sandbox-Verbindungen herstellen) komplett im Hintergrund. Er agiert als dein persönlicher, treuer Copilot, ohne jemals ungefragt schädliche Operationen auf deinem Hauptsystem auszuführen."]})]})]})]})]})]})}function i1({title:s,hint:o}){return r.jsxs("div",{className:"space-y-4",children:[r.jsxs("div",{children:[r.jsx("h1",{className:"text-xl font-semibold",children:s}),r.jsx("p",{className:"text-sm text-muted-foreground",children:o})]}),r.jsxs("div",{className:"flex flex-col items-center justify-center gap-3 rounded-xl border border-dashed border-border bg-card/50 py-20 text-center",children:[r.jsx(_0,{className:"h-8 w-8 text-muted-foreground"}),r.jsx("div",{className:"text-sm text-muted-foreground",children:"Kommt in einer späteren Phase."})]})]})}const d1=[{id:"llama-swap",label:"Llama Swap",type:"system"},{id:"mission-control-2",label:"Mission Control 2",type:"user"},{id:"hermes-gateway",label:"Hermes Gateway",type:"user"},{id:"hermes-dashboard",label:"Hermes Dashboard",type:"user"},{id:"hermes-webui",label:"Hermes WebUI",type:"user"}];function Id(s){return s==null?"":s>1024**3?`${(s/1024**3).toFixed(2)} GB`:`${(s/1024**2).toFixed(1)} MB`}function c1({open:s,onClose:o,defaultTab:a="maintenance"}){const[d,u]=g.useState(null),[f,h]=g.useState([]),[p,v]=g.useState("llama-swap"),[x,b]=g.useState(""),[w,P]=g.useState(!1),[R,O]=g.useState(null),[E,k]=g.useState({}),[C,I]=g.useState("maintenance"),[B,z]=g.useState(!1),[$,L]=g.useState(null);function H(U,ge,xt){L({type:"alert",title:U,message:ge,onConfirm:()=>{L(null),xt&&xt()}})}function re(U,ge,xt){L({type:"confirm",title:U,message:ge,onConfirm:()=>{L(null),xt()},onCancel:()=>L(null)})}function oe(U){return U?new Date(U*1e3).toLocaleString("de-DE",{day:"2-digit",month:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}):"Nie"}const[me,xe]=g.useState(""),[G,Pe]=g.useState(""),[we,Ee]=g.useState(!1),[Te,_e]=g.useState(!1);g.useEffect(()=>{s&&(xe(localStorage.getItem("mc_sudo_password")||""),Pe(localStorage.getItem("mc_hf_token")||""))},[s]),g.useEffect(()=>{s&&a&&I(a)},[s,a]);const Y=g.useRef(null);function de(){he("/api/maintenance/updates").then(u).catch(U=>console.error("Error loading updates",U))}function J(){he("/api/jobs").then(U=>h(U.jobs||[])).catch(U=>console.error("Error loading jobs",U))}function M(U){P(!0),O(null),he(`/api/maintenance/logs?service=${U}&lines=150`).then(ge=>{ge.ok?b(ge.text):(b(`Fehler beim Laden der Logs: ${ge.err||"Unbekannter Fehler"}`),(ge.status==="incorrect_password"||ge.status==="password_required")&&O(ge.status))}).catch(ge=>b(`Fehler: ${ge.message}`)).finally(()=>{P(!1),setTimeout(()=>{Y.current&&(Y.current.scrollTop=Y.current.scrollHeight)},50)})}g.useEffect(()=>{if(!s)return;de(),J();const U=setInterval(()=>{J(),de()},3e3);return()=>clearInterval(U)},[s]),g.useEffect(()=>{!s||C!=="logs"||M(p)},[s,C,p]);async function S(){try{await he("/api/maintenance/os-update",{method:"POST"}),J(),I("maintenance")}catch(U){H("Fehler",`Fehler beim Starten des OS-Updates: ${U.message}`)}}async function Z(){try{await he("/api/maintenance/engine-update",{method:"POST"}),J(),I("maintenance")}catch(U){H("Fehler",`Fehler beim Engine-Update: ${U.message}`)}}async function ee(){z(!0);try{await he("/api/maintenance/check-updates",{method:"POST"}),J(),I("maintenance")}catch(U){H("Fehler",`Fehler bei der Update-Suche: ${U.message}`)}finally{z(!1)}}async function K(U,ge){try{await he("/api/models/install",{method:"POST",body:JSON.stringify({repo:U,role:ge})}),H("Gestartet",`Modell-Upgrade für '${ge}' (${U}) gestartet.`),J(),I("maintenance")}catch(xt){H("Fehler",`Fehler beim Starten des Modell-Upgrades: ${xt.message}`)}}async function ae(){re("Reboot bestätigen","Bist du sicher, dass du das gesamte Host-System neu starten willst?",async()=>{try{await he("/api/maintenance/reboot",{method:"POST"}),H("Reboot","Reboot ausgelöst. System startet neu...",()=>{o()})}catch(U){H("Fehler",`Fehler beim Reboot: ${U.message}`)}})}async function fe(U){k(ge=>({...ge,[U]:!0}));try{const ge=await he("/api/maintenance/restart",{method:"POST",body:JSON.stringify({service:U})});ge.ok?H("Dienst neu gestartet",`Dienst ${U} wurde erfolgreich neu gestartet.`,()=>{C==="logs"&&p===U&&M(U)}):H("Fehler",`Fehler beim Neustart: ${ge.err||"Unbekannter Fehler"}`)}catch(ge){H("Fehler",`Fehler beim Neustart: ${ge.message}`)}finally{k(ge=>({...ge,[U]:!1}))}}async function je(U){try{await he(`/api/jobs/${U}/cancel`,{method:"POST"}),J()}catch(ge){H("Fehler",`Fehler beim Abbrechen: ${ge.message}`)}}return r.jsxs(r.Fragment,{children:[r.jsx("div",{className:X("fixed inset-0 bg-black/60 backdrop-blur-sm z-50 transition-opacity duration-300",s?"opacity-100 pointer-events-auto":"opacity-0 pointer-events-none"),onClick:o}),r.jsxs("div",{className:X("fixed inset-y-0 right-0 w-full sm:w-[500px] bg-card/85 backdrop-blur-xl border-l border-border/60 shadow-2xl z-50 flex flex-col transform transition-transform duration-300 ease-in-out font-sans text-foreground",s?"translate-x-0":"translate-x-full"),children:[r.jsxs("div",{className:"flex h-16 shrink-0 items-center justify-between border-b border-border/40 px-6",children:[r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx(Dt,{className:"h-4.5 w-4.5 text-primary"}),r.jsx("h2",{className:"text-sm font-semibold tracking-wide uppercase font-space",children:"OS-Zentrale & Pflege"})]}),r.jsx("button",{onClick:o,className:"flex h-8 w-8 items-center justify-center rounded-lg border border-border/40 text-muted-foreground hover:bg-accent transition-colors",children:r.jsx(jr,{className:"h-4 w-4"})})]}),r.jsxs("div",{className:"flex border-b border-border/40 px-6",children:[r.jsx("button",{onClick:()=>I("maintenance"),className:X("flex-1 py-3 text-xs font-semibold uppercase tracking-wider border-b-2 text-center transition-all",C==="maintenance"?"border-primary text-primary":"border-transparent text-muted-foreground hover:text-foreground"),children:"System-Wartung"}),r.jsx("button",{onClick:()=>I("logs"),className:X("flex-1 py-3 text-xs font-semibold uppercase tracking-wider border-b-2 text-center transition-all",C==="logs"?"border-primary text-primary":"border-transparent text-muted-foreground hover:text-foreground"),children:"System-Logs"}),r.jsx("button",{onClick:()=>I("settings"),className:X("flex-1 py-3 text-xs font-semibold uppercase tracking-wider border-b-2 text-center transition-all",C==="settings"?"border-primary text-primary":"border-transparent text-muted-foreground hover:text-foreground"),children:"Einstellungen"})]}),r.jsxs("div",{className:"flex-1 overflow-y-auto p-6 space-y-6",children:[C==="maintenance"&&r.jsxs(r.Fragment,{children:[r.jsxs("div",{className:"space-y-3",children:[r.jsxs("div",{className:"flex items-center justify-between",children:[r.jsx("h3",{className:"text-xs font-bold uppercase tracking-wider text-muted-foreground",children:"Wartungsaktionen"}),r.jsxs("div",{className:"flex items-center gap-2",children:[(d==null?void 0:d.last_check)&&r.jsxs("span",{className:"text-[9px] text-muted-foreground",children:["Zuletzt gesucht: ",oe(d.last_check)]}),r.jsxs("button",{onClick:ee,disabled:B,className:"flex items-center gap-1 text-[10px] font-semibold text-primary hover:text-primary/80 transition-colors disabled:opacity-50",children:[r.jsx(In,{className:X("h-3 w-3",B&&"animate-spin")}),"Nach Updates suchen"]})]})]}),r.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[r.jsxs("button",{onClick:S,className:"flex flex-col items-start gap-1 p-4 rounded-xl border border-border/60 bg-background/20 hover:border-primary/50 transition-all text-left group",children:[r.jsx(Us,{className:"h-5 w-5 text-cyan-400 mb-1 group-hover:scale-105 transition-transform"}),r.jsx("span",{className:"text-xs font-semibold",children:"OS Update (apt)"}),r.jsx("span",{className:"text-[10px] text-muted-foreground",children:d!=null&&d.os?`${d.os} Updates verfügbar`:"Auf neuestem Stand"})]}),r.jsxs("button",{onClick:Z,className:"flex flex-col items-start gap-1 p-4 rounded-xl border border-border/60 bg-background/20 hover:border-primary/50 transition-all text-left group",children:[r.jsx($0,{className:"h-5 w-5 text-violet-400 mb-1 group-hover:scale-105 transition-transform"}),r.jsx("span",{className:"text-xs font-semibold",children:"Engine Update"}),r.jsx("span",{className:"text-[10px] text-muted-foreground",children:d!=null&&d.engine?"Update verfügbar":"Auf neuestem Stand"})]})]}),r.jsxs("button",{onClick:ae,className:"flex w-full items-center gap-3 p-3 rounded-xl border border-red-500/20 bg-red-500/5 hover:bg-red-500/10 text-red-400 transition-all text-left text-xs font-semibold",children:[r.jsx(Om,{className:"h-4.5 w-4.5"}),r.jsxs("div",{children:[r.jsx("div",{children:"Host-System neu starten (Reboot)"}),r.jsx("div",{className:"text-[10px] text-red-400/80 font-normal",children:"Startet das gesamte Betriebssystem des Homelabs neu"})]})]})]}),(d==null?void 0:d.model_list)&&d.model_list.length>0&&r.jsxs("div",{className:"space-y-3",children:[r.jsxs("div",{className:"flex items-center justify-between",children:[r.jsx("h3",{className:"text-xs font-bold uppercase tracking-wider text-muted-foreground",children:"Verfügbare Modell-Upgrades"}),(d==null?void 0:d.last_check)&&r.jsxs("span",{className:"text-[9px] text-muted-foreground",children:["Gesucht: ",oe(d.last_check)]})]}),r.jsx("div",{className:"space-y-2",children:d.model_list.map(U=>r.jsx("div",{className:"p-3 rounded-xl border border-border/60 bg-background/20 flex flex-col gap-2",children:r.jsxs("div",{className:"flex items-start justify-between gap-3",children:[r.jsxs("div",{children:[r.jsx("div",{className:"text-xs font-semibold",children:U.title}),r.jsx("div",{className:"text-[10px] font-mono text-muted-foreground",children:U.repo}),r.jsxs("div",{className:"text-[10px] text-primary font-semibold uppercase mt-0.5",children:["Rolle: ",U.role]})]}),r.jsxs("button",{onClick:()=>K(U.repo,U.role),className:"flex items-center gap-1.5 text-[10px] font-semibold text-emerald-400 hover:text-emerald-300 border border-emerald-500/20 bg-emerald-500/5 hover:bg-emerald-500/10 px-2 py-1 rounded-lg transition-colors shrink-0",children:[r.jsx(an,{className:"h-3.5 w-3.5"}),"Upgrade"]})]})},U.role))})]}),r.jsxs("div",{className:"space-y-3",children:[r.jsxs("div",{className:"flex items-center justify-between",children:[r.jsx("h3",{className:"text-xs font-bold uppercase tracking-wider text-muted-foreground",children:"Hintergrund-Aufgaben"}),r.jsxs("span",{className:"text-[10px] font-mono bg-primary/10 text-primary px-1.5 py-0.5 rounded-full",children:[f.filter(U=>U.state==="running"||U.state==="queued").length," Aktiv"]})]}),r.jsx("div",{className:"space-y-3",children:f.length===0?r.jsx("div",{className:"text-xs text-muted-foreground border border-dashed border-border/60 rounded-xl p-6 text-center",children:"Aktuell keine aktiven Hintergrund-Jobs."}):f.map(U=>{const ge=U.state==="running"||U.state==="queued";return r.jsxs("div",{className:X("p-3 rounded-xl border transition-all duration-300",ge?"border-primary/40 bg-primary/5 shadow-md shadow-primary/5":"border-border/40 bg-background/20 opacity-80"),children:[r.jsxs("div",{className:"flex items-start justify-between gap-3",children:[r.jsxs("div",{className:"space-y-1",children:[r.jsxs("div",{className:"text-xs font-semibold flex items-center gap-1.5",children:[ge&&r.jsxs("span",{className:"flex h-2 w-2 relative",children:[r.jsx("span",{className:"animate-ping absolute inline-flex h-full w-full rounded-full bg-primary opacity-75"}),r.jsx("span",{className:"relative inline-flex rounded-full h-2 w-2 bg-primary"})]}),U.label]}),r.jsxs("div",{className:"text-[10px] font-mono text-muted-foreground uppercase flex items-center gap-2",children:[r.jsxs("span",{children:["ID: ",U.id]}),r.jsx("span",{children:"•"}),r.jsx("span",{className:X(U.state==="done"&&"text-emerald-400",U.state==="failed"&&"text-red-400",U.state==="running"&&"text-primary",U.state==="queued"&&"text-amber-400",U.state==="canceled"&&"text-muted-foreground"),children:U.state})]})]}),ge&&r.jsx("button",{onClick:()=>je(U.id),className:"text-[10px] font-semibold text-red-400 hover:text-red-300 border border-red-500/20 bg-red-500/5 hover:bg-red-500/10 px-2 py-0.5 rounded transition-colors",children:"Abbrechen"})]}),U.state==="running"&&r.jsxs("div",{className:"mt-3 space-y-1",children:[r.jsx("div",{className:"w-full h-1.5 bg-muted rounded-full overflow-hidden",children:r.jsx("div",{className:"h-full bg-primary transition-all duration-500",style:{width:`${U.progress??0}%`}})}),r.jsxs("div",{className:"flex justify-between items-center text-[9px] font-mono text-muted-foreground",children:[r.jsxs("span",{children:[U.progress??0,"%"]}),U.done_bytes!=null&&U.total_bytes!=null&&r.jsxs("span",{children:[Id(U.done_bytes)," / ",Id(U.total_bytes),U.rate_bps!=null&&` (${Id(U.rate_bps)}/s)`]}),U.eta_s!=null&&r.jsxs("span",{children:["ETA: ",U.eta_s,"s"]})]})]})]},U.id)})})]})]}),C==="logs"&&r.jsxs("div",{className:"flex flex-col h-full space-y-4",children:[r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx("select",{value:p,onChange:U=>v(U.target.value),className:"flex-1 h-9 px-3 text-xs bg-background/40 border border-border/60 rounded-lg outline-none text-foreground font-semibold",children:d1.map(U=>r.jsxs("option",{value:U.id,children:[U.label," (",U.type==="system"?"systemd-root":"user",")"]},U.id))}),r.jsxs("button",{onClick:()=>fe(p),disabled:E[p],className:"flex h-9 px-3 items-center gap-1.5 text-xs font-semibold rounded-lg border border-border/60 bg-background/20 hover:border-primary/50 transition-colors disabled:opacity-50",title:"Dienst neu starten",children:[r.jsx(In,{className:X("h-3.5 w-3.5",E[p]&&"animate-spin")}),"Restart"]})]}),r.jsxs("div",{className:"flex-1 flex flex-col min-h-[300px] border border-border/60 bg-black/50 rounded-xl overflow-hidden shadow-inner",children:[r.jsxs("div",{className:"flex h-9 items-center justify-between px-4 border-b border-border/40 bg-black/30 shrink-0",children:[r.jsxs("div",{className:"flex items-center gap-1.5 text-[10px] font-mono text-muted-foreground",children:[r.jsx(Oa,{className:"h-3 w-3 text-primary"}),r.jsxs("span",{children:["stdout/stderr - ",p]})]}),r.jsx("button",{onClick:()=>M(p),disabled:w,className:"text-muted-foreground hover:text-foreground transition-colors",children:r.jsx(In,{className:X("h-3 w-3",w&&"animate-spin")})})]}),r.jsx("pre",{ref:Y,className:"flex-1 p-4 overflow-y-auto text-[10px] font-mono text-cyan-300/90 whitespace-pre-wrap select-text leading-relaxed scrollbar-thin",children:R==="password_required"||R==="incorrect_password"?r.jsxs("div",{className:"flex flex-col items-center justify-center p-6 text-center h-full space-y-3",children:[r.jsx(Wo,{className:"h-8 w-8 text-amber-400 animate-pulse animate-duration-1000"}),r.jsx("div",{className:"text-xs font-semibold text-amber-300",children:R==="incorrect_password"?"Falsches Sudo-Passwort hinterlegt.":"Sudo-Passwort für systemd-Dienste erforderlich."}),r.jsxs("p",{className:"text-[10px] text-muted-foreground max-w-xs leading-normal",children:["Für das Auslesen der systemd-Logs von ",p," werden Root-Rechte benötigt. Hinterlege dein Passwort in den Einstellungen."]}),r.jsx("button",{onClick:()=>I("settings"),className:"px-3 py-1.5 text-[10px] font-semibold text-primary-foreground bg-primary hover:bg-primary/95 rounded-md transition-colors mt-2",children:"Sudo-Passwort eintragen"})]}):w&&!x?r.jsx("span",{className:"text-muted-foreground",children:"Lade Logs..."}):x||r.jsx("span",{className:"text-muted-foreground",children:"Keine Logeinträge vorhanden."})})]})]}),C==="settings"&&r.jsxs("div",{className:"space-y-6",children:[r.jsxs("div",{className:"space-y-2",children:[r.jsx("h3",{className:"text-xs font-bold uppercase tracking-wider text-muted-foreground",children:"Zugangsdaten & Schlüssel"}),r.jsx("p",{className:"text-[10px] text-muted-foreground leading-normal",children:"Diese Daten werden ausschließlich lokal in deinem Browser (localStorage) gespeichert und bei Bedarf an das Backend übertragen."})]}),r.jsxs("div",{className:"space-y-2",children:[r.jsxs("label",{className:"text-xs font-semibold flex items-center gap-1.5",children:[r.jsx(Us,{className:"h-4 w-4 text-amber-400"}),"Host Sudo-Passwort"]}),r.jsxs("div",{className:"relative",children:[r.jsx("input",{type:we?"text":"password",value:me,onChange:U=>xe(U.target.value),placeholder:"Sudo-Passwort für System-Operationen",className:"w-full h-10 pl-3 pr-10 text-xs bg-background/40 border border-border/60 rounded-lg outline-none focus:border-primary transition-colors text-foreground"}),r.jsx("button",{type:"button",onClick:()=>Ee(!we),className:"absolute inset-y-0 right-0 flex items-center pr-3 text-muted-foreground hover:text-foreground transition-colors",children:we?r.jsx(Rp,{className:"h-4 w-4"}):r.jsx(rc,{className:"h-4 w-4"})})]}),r.jsx("p",{className:"text-[9px] text-muted-foreground leading-normal",children:"Wird benötigt für systemd-Dienste (Llama Swap logs/restart), OS-Update (apt) und Reboot."})]}),r.jsxs("div",{className:"space-y-2",children:[r.jsxs("label",{className:"text-xs font-semibold flex items-center gap-1.5",children:[r.jsx(O0,{className:"h-4 w-4 text-violet-400"}),"HuggingFace API Token"]}),r.jsxs("div",{className:"relative",children:[r.jsx("input",{type:Te?"text":"password",value:G,onChange:U=>Pe(U.target.value),placeholder:"hf_...",className:"w-full h-10 pl-3 pr-10 text-xs bg-background/40 border border-border/60 rounded-lg outline-none focus:border-primary transition-colors text-foreground"}),r.jsx("button",{type:"button",onClick:()=>_e(!Te),className:"absolute inset-y-0 right-0 flex items-center pr-3 text-muted-foreground hover:text-foreground transition-colors",children:Te?r.jsx(Rp,{className:"h-4 w-4"}):r.jsx(rc,{className:"h-4 w-4"})})]}),r.jsx("p",{className:"text-[9px] text-muted-foreground leading-normal",children:"Erlaubt das Herunterladen von geschützten oder Gate-restricted Modellen direkt über Mission Control."})]}),r.jsxs("div",{className:"flex gap-3 pt-2",children:[r.jsx("button",{onClick:()=>{localStorage.setItem("mc_sudo_password",me),localStorage.setItem("mc_hf_token",G),H("Erfolgreich","Einstellungen erfolgreich lokal gespeichert.")},className:"flex-1 h-9 flex items-center justify-center text-xs font-semibold text-primary-foreground bg-primary hover:bg-primary/90 rounded-lg transition-colors shadow shadow-primary/10 cursor-pointer",children:"Speichern"}),r.jsx("button",{onClick:()=>{xe(""),Pe(""),localStorage.removeItem("mc_sudo_password"),localStorage.removeItem("mc_hf_token"),H("Gelöscht","Zugangsdaten gelöscht.")},className:"h-9 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:"Zurücksetzen"})]})]})]})]}),$&&r.jsx(Eh,{type:$.type,title:$.title,message:$.message,onConfirm:$.onConfirm,onCancel:$.onCancel})]})}function u1(){var w,P,R,O,E;const[s,o]=g.useState("dashboard"),[a,d]=g.useState(()=>localStorage.getItem("mc_sidebar_collapsed")==="true"),[u,f]=g.useState(!1),[h,p]=g.useState("maintenance"),{data:v}=Xy(),{data:x}=Fa(2e4);g.useEffect(()=>{document.documentElement.classList.add("dark")},[]),g.useEffect(()=>{const k=C=>{var B;p(((B=C.detail)==null?void 0:B.tab)||"maintenance"),f(!0)};return window.addEventListener("open-system-drawer",k),()=>window.removeEventListener("open-system-drawer",k)},[]);const b=sc.find(k=>k.id===s);return r.jsxs("div",{className:"flex h-full relative",children:[r.jsxs("div",{className:"fixed inset-0 -z-50 pointer-events-none overflow-hidden bg-[hsl(224,30%,6%)]",children:[r.jsx("div",{className:"absolute inset-0 opacity-35 animate-aurora bg-gradient-to-tr from-teal-500/20 via-indigo-500/15 to-purple-500/20 blur-[130px]"}),r.jsx("div",{className:"absolute top-[-10%] left-[-10%] h-[50%] w-[50%] rounded-full bg-teal-500/15 blur-[160px]"}),r.jsx("div",{className:"absolute bottom-[-10%] right-[-10%] h-[50%] w-[50%] rounded-full bg-purple-500/15 blur-[160px]"}),r.jsx("div",{className:"absolute top-[30%] right-[20%] h-[40%] w-[40%] rounded-full bg-indigo-500/10 blur-[140px]"})]}),r.jsx(Jy,{onNavigate:o}),r.jsx(c1,{open:u,onClose:()=>f(!1),defaultTab:h}),r.jsxs("aside",{className:X("flex shrink-0 flex-col border-r border-border/40 bg-card/45 backdrop-blur-md transition-all duration-300 ease-in-out",a?"w-16":"w-60"),children:[r.jsxs("div",{className:X("flex items-center py-4 border-b border-border/40 shrink-0",a?"flex-col gap-3 px-2":"justify-between px-5"),children:[r.jsxs("div",{className:"flex items-center gap-2 overflow-hidden",children:[r.jsx("div",{className:"h-7 w-7 rounded-lg bg-primary shadow-md shadow-primary/20 shrink-0"}),!a&&r.jsxs("div",{className:"leading-tight",children:[r.jsx("div",{className:"text-sm font-semibold tracking-wide font-space",children:"Mission Control"}),r.jsx("div",{className:"text-xs text-muted-foreground",children:"2.0"})]})]}),r.jsx("button",{onClick:()=>{d(k=>{const C=!k;return localStorage.setItem("mc_sidebar_collapsed",C.toString()),C})},className:"p-1 rounded-md hover:bg-accent text-muted-foreground transition-colors cursor-pointer",title:a?"Maximieren":"Minimieren",children:a?r.jsx(j0,{className:"h-4 w-4"}):r.jsx(w0,{className:"h-4 w-4"})})]}),r.jsx("nav",{className:"flex-1 space-y-1 px-3 py-4 overflow-y-auto",children:sc.map(k=>r.jsxs("button",{onClick:()=>o(k.id),className:X("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",s===k.id?"bg-primary/15 text-primary shadow-sm shadow-primary/5":"text-muted-foreground hover:bg-accent hover:text-accent-foreground"),title:a?k.label:void 0,children:[r.jsx(k.icon,{className:"h-4.5 w-4.5 shrink-0"}),!a&&r.jsx("span",{className:"truncate",children:k.label})]},k.id))}),r.jsx("div",{className:X("py-3 text-xs text-muted-foreground border-t border-border/40 shrink-0",a?"px-2 text-center":"px-5"),children:a?r.jsx("div",{className:"flex justify-center",children:r.jsx("span",{className:X("h-2.5 w-2.5 rounded-full ring-2 ring-black/40",v?v.engine_reachable?"bg-emerald-500 animate-pulse":"bg-amber-500":"bg-red-500"),title:v?`Engine ${v.engine_reachable?"online":"offline"}`:"Backend offline"})}):r.jsxs("div",{className:"space-y-2 text-left",children:[v?r.jsxs("span",{className:"flex items-center gap-2",children:[r.jsx("span",{className:X("h-2 w-2 rounded-full animate-pulse",v.engine_reachable?"bg-emerald-500":"bg-amber-500")}),r.jsxs("span",{className:"truncate",children:["Engine ",v.engine_reachable?"online":"offline"]})]}):r.jsxs("span",{className:"flex items-center gap-2",children:[r.jsx("span",{className:"h-2 w-2 rounded-full bg-red-500"})," ",r.jsx("span",{className:"truncate",children:"Backend offline"})]}),(x==null?void 0:x.versions)&&r.jsxs("div",{className:"space-y-1 text-[9px] text-muted-foreground/60 mt-2 pt-2 border-t border-border/30",children:[r.jsxs("div",{className:"truncate",title:x.versions.mc2?`${x.versions.mc2.branch}-${x.versions.mc2.hash}${x.versions.mc2.dirty?"*":""} (${x.versions.mc2.date})`:"nicht gefunden",children:[r.jsx("strong",{children:"MC2:"})," ",x.versions.mc2?`${x.versions.mc2.hash}${x.versions.mc2.dirty?"*":""}`:"—"]}),r.jsxs("div",{className:"truncate",title:((w=x.versions.engine)==null?void 0:w.type)==="git"?`${x.versions.engine.branch}-${x.versions.engine.hash}${x.versions.engine.dirty?"*":""} (${x.versions.engine.date})`:((P=x.versions.engine)==null?void 0:P.version_text)||"unbekannt",children:[r.jsx("strong",{children:"Engine:"})," ",((R=x.versions.engine)==null?void 0:R.type)==="git"?`${x.versions.engine.hash}${x.versions.engine.dirty?"*":""}`:((E=(O=x.versions.engine)==null?void 0:O.version_text)==null?void 0:E.split(" ").pop())||"—"]}),r.jsxs("div",{className:"truncate",title:x.versions.hermes_ui?`${x.versions.hermes_ui.branch}-${x.versions.hermes_ui.hash}${x.versions.hermes_ui.dirty?"*":""} (${x.versions.hermes_ui.date})`:"nicht gefunden",children:[r.jsx("strong",{children:"Hermes UI:"})," ",x.versions.hermes_ui?`${x.versions.hermes_ui.hash}${x.versions.hermes_ui.dirty?"*":""}`:"—"]}),r.jsxs("div",{className:"truncate",title:x.versions.hermes_agent?`${x.versions.hermes_agent.branch}-${x.versions.hermes_agent.hash}${x.versions.hermes_agent.dirty?"*":""} (${x.versions.hermes_agent.date})`:"nicht gefunden",children:[r.jsx("strong",{children:"Hermes Agent:"})," ",x.versions.hermes_agent?`${x.versions.hermes_agent.hash}${x.versions.hermes_agent.dirty?"*":""}`:"—"]})]})]})})]}),r.jsxs("div",{className:"flex min-w-0 flex-1 flex-col",children:[r.jsxs("header",{className:"flex h-14 shrink-0 items-center justify-between border-b border-border/40 px-6 bg-card/20 backdrop-blur-sm",children:[r.jsx("div",{className:"text-xs font-medium text-muted-foreground tracking-wide uppercase font-sans",children:b.hint}),r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx("a",{href:"https://git.tobisniceshomelab.ddnsfree.com/Hitonabi/mission-control-v2/src/branch/main/docs/BEDIENUNG.md",target:"_blank",rel:"noopener",className:"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"}),r.jsxs("button",{onClick:()=>{const k=new KeyboardEvent("keydown",{key:"k",metaKey:!0});document.dispatchEvent(k)},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:[r.jsx(E0,{className:"h-3.5 w-3.5"}),r.jsx("span",{children:"Suchen"}),r.jsx("kbd",{className:"rounded bg-muted px-1.5 py-0.5 font-mono text-[9px]",children:"⌘K"})]})]})]}),r.jsxs("main",{className:"flex-1 overflow-y-auto p-6 scrollbar-thin",children:[s==="dashboard"&&r.jsx(Qb,{}),s==="models"&&r.jsx(t1,{}),s==="system"&&r.jsx(r1,{}),s==="connect"&&r.jsx(n1,{}),s==="memory"&&r.jsx(o1,{}),s==="agent"&&r.jsx(l1,{}),s==="guide"&&r.jsx(a1,{}),!["dashboard","models","system","connect","memory","agent","guide"].includes(s)&&r.jsx(i1,{title:b.label,hint:b.hint})]})]})]})}const f1=new n0({defaultOptions:{queries:{retry:1,refetchOnWindowFocus:!1,staleTime:5e3}}});Rg.createRoot(document.getElementById("root")).render(r.jsx(mm.StrictMode,{children:r.jsx(s0,{client:f1,children:r.jsx(u1,{})})})); diff --git a/frontend/dist/index.html b/frontend/dist/index.html index e06b40e..e8ada34 100644 --- a/frontend/dist/index.html +++ b/frontend/dist/index.html @@ -7,7 +7,7 @@ Mission Control 2.0 - + diff --git a/frontend/src/lib/api.ts b/frontend/src/lib/api.ts index 18b42ac..7f8794c 100644 --- a/frontend/src/lib/api.ts +++ b/frontend/src/lib/api.ts @@ -77,6 +77,8 @@ export interface FitResp { params_b: number fit: Fit optimal_ctx: number + assigned_ctx: number + budget: { gtt_gb: number; reserved_gb: number; budget_gb: number; mode: string } sys_ram_gb: number } diff --git a/frontend/src/views/models/AddModel.tsx b/frontend/src/views/models/AddModel.tsx index 3ac5d42..249c1ed 100644 --- a/frontend/src/views/models/AddModel.tsx +++ b/frontend/src/views/models/AddModel.tsx @@ -21,12 +21,13 @@ export function AddModel() { ? modelsData?.models.find((m) => (m.role || "").toLowerCase() === role) : undefined - async function refreshFit(r: string, qq: string) { + async function refreshFit(r: string, qq: string, rl: string) { setOomArmed(false) if (!r.trim()) { setFit(null); return } try { const d = await api( - `/api/fit?params_b=0&quant=${encodeURIComponent(qq)}&ctx=8192&name=${encodeURIComponent(r)}` + `/api/fit?params_b=0&quant=${encodeURIComponent(qq)}&ctx=8192` + + `&name=${encodeURIComponent(r)}&role=${encodeURIComponent(rl)}` ) setFit(d) } catch { @@ -46,7 +47,7 @@ export function AddModel() { const pick = d.quants.length ? (d.quants.includes("Q4_K_M") ? "Q4_K_M" : d.quants[0]) : quant if (d.quants.length) setQuant(pick) setMsg(d.quants.length ? "" : "Keine GGUF-Dateien in diesem Repository gefunden.") - if (d.quants.length) refreshFit(d.repo, pick) + if (d.quants.length) refreshFit(d.repo, pick, role) } catch (e) { setMsg(`Fehler: ${e}`) } @@ -54,7 +55,12 @@ export function AddModel() { function onQuantChange(qq: string) { setQuant(qq) - refreshFit(repo, qq) + refreshFit(repo, qq, role) + } + + function onRoleChange(rl: string) { + setRole(rl) + if (quants.length) refreshFit(repo, quant, rl) } async function search() { @@ -130,8 +136,8 @@ export function AddModel() {