From c3bc49c1d92dc6b982edabaf09fc4db4453dc502 Mon Sep 17 00:00:00 2001 From: jarves Date: Mon, 8 Jun 2026 06:45:10 +0000 Subject: [PATCH] scaffold initial frontend structure with ModelManager component and local development server scripts --- .../{event-BUMINqWq.js => event-DeDJUvqC.js} | 2 +- .../{index-DVJy0SBd.js => index-jXnaCwmK.js} | 16 ++++++------- app/dist/index.html | 2 +- app/frontend/src/components/ModelManager.jsx | 24 ++++++++++++------- scripts/serve.cjs | 10 ++++++++ 5 files changed, 35 insertions(+), 19 deletions(-) rename app/dist/assets/{event-BUMINqWq.js => event-DeDJUvqC.js} (94%) rename app/dist/assets/{index-DVJy0SBd.js => index-jXnaCwmK.js} (86%) diff --git a/app/dist/assets/event-BUMINqWq.js b/app/dist/assets/event-DeDJUvqC.js similarity index 94% rename from app/dist/assets/event-BUMINqWq.js rename to app/dist/assets/event-DeDJUvqC.js index 5fe43e4..30180c4 100644 --- a/app/dist/assets/event-BUMINqWq.js +++ b/app/dist/assets/event-DeDJUvqC.js @@ -1 +1 @@ -import{i as D,t as i}from"./index-DVJy0SBd.js";var _;(function(r){r.WINDOW_RESIZED="tauri://resize",r.WINDOW_MOVED="tauri://move",r.WINDOW_CLOSE_REQUESTED="tauri://close-requested",r.WINDOW_DESTROYED="tauri://destroyed",r.WINDOW_FOCUS="tauri://focus",r.WINDOW_BLUR="tauri://blur",r.WINDOW_SCALE_FACTOR_CHANGED="tauri://scale-change",r.WINDOW_THEME_CHANGED="tauri://theme-changed",r.WINDOW_CREATED="tauri://window-created",r.WINDOW_SUSPENDED="tauri://suspended",r.WINDOW_RESUMED="tauri://resumed",r.WEBVIEW_CREATED="tauri://webview-created",r.DRAG_ENTER="tauri://drag-enter",r.DRAG_OVER="tauri://drag-over",r.DRAG_DROP="tauri://drag-drop",r.DRAG_LEAVE="tauri://drag-leave"})(_||(_={}));async function l(r,a){window.__TAURI_EVENT_PLUGIN_INTERNALS__.unregisterListener(r,a),await D("plugin:event|unlisten",{event:r,eventId:a})}async function n(r,a,e){var t;const W=typeof e?.target=="string"?{kind:"AnyLabel",label:e.target}:(t=e?.target)!==null&&t!==void 0?t:{kind:"Any"};return D("plugin:event|listen",{event:r,target:W,handler:i(a)}).then(d=>async()=>l(r,d))}export{_ as TauriEvent,n as listen}; +import{i as D,t as i}from"./index-jXnaCwmK.js";var _;(function(r){r.WINDOW_RESIZED="tauri://resize",r.WINDOW_MOVED="tauri://move",r.WINDOW_CLOSE_REQUESTED="tauri://close-requested",r.WINDOW_DESTROYED="tauri://destroyed",r.WINDOW_FOCUS="tauri://focus",r.WINDOW_BLUR="tauri://blur",r.WINDOW_SCALE_FACTOR_CHANGED="tauri://scale-change",r.WINDOW_THEME_CHANGED="tauri://theme-changed",r.WINDOW_CREATED="tauri://window-created",r.WINDOW_SUSPENDED="tauri://suspended",r.WINDOW_RESUMED="tauri://resumed",r.WEBVIEW_CREATED="tauri://webview-created",r.DRAG_ENTER="tauri://drag-enter",r.DRAG_OVER="tauri://drag-over",r.DRAG_DROP="tauri://drag-drop",r.DRAG_LEAVE="tauri://drag-leave"})(_||(_={}));async function l(r,a){window.__TAURI_EVENT_PLUGIN_INTERNALS__.unregisterListener(r,a),await D("plugin:event|unlisten",{event:r,eventId:a})}async function n(r,a,e){var t;const W=typeof e?.target=="string"?{kind:"AnyLabel",label:e.target}:(t=e?.target)!==null&&t!==void 0?t:{kind:"Any"};return D("plugin:event|listen",{event:r,target:W,handler:i(a)}).then(d=>async()=>l(r,d))}export{_ as TauriEvent,n as listen}; diff --git a/app/dist/assets/index-DVJy0SBd.js b/app/dist/assets/index-jXnaCwmK.js similarity index 86% rename from app/dist/assets/index-DVJy0SBd.js rename to app/dist/assets/index-jXnaCwmK.js index 8c24277..bd6788e 100644 --- a/app/dist/assets/index-DVJy0SBd.js +++ b/app/dist/assets/index-jXnaCwmK.js @@ -1,12 +1,12 @@ -(function(){const b=document.createElement("link").relList;if(b&&b.supports&&b.supports("modulepreload"))return;for(const x of document.querySelectorAll('link[rel="modulepreload"]'))r(x);new MutationObserver(x=>{for(const N of x)if(N.type==="childList")for(const G of N.addedNodes)G.tagName==="LINK"&&G.rel==="modulepreload"&&r(G)}).observe(document,{childList:!0,subtree:!0});function E(x){const N={};return x.integrity&&(N.integrity=x.integrity),x.referrerPolicy&&(N.referrerPolicy=x.referrerPolicy),x.crossOrigin==="use-credentials"?N.credentials="include":x.crossOrigin==="anonymous"?N.credentials="omit":N.credentials="same-origin",N}function r(x){if(x.ep)return;x.ep=!0;const N=E(x);fetch(x.href,N)}})();function fm(f){return f&&f.__esModule&&Object.prototype.hasOwnProperty.call(f,"default")?f.default:f}var Bs={exports:{}},ai={};var Zd;function E0(){if(Zd)return ai;Zd=1;var f=Symbol.for("react.transitional.element"),b=Symbol.for("react.fragment");function E(r,x,N){var G=null;if(N!==void 0&&(G=""+N),x.key!==void 0&&(G=""+x.key),"key"in x){N={};for(var H in x)H!=="key"&&(N[H]=x[H])}else N=x;return x=N.ref,{$$typeof:f,type:r,key:G,ref:x!==void 0?x:null,props:N}}return ai.Fragment=b,ai.jsx=E,ai.jsxs=E,ai}var Kd;function N0(){return Kd||(Kd=1,Bs.exports=E0()),Bs.exports}var c=N0(),Rs={exports:{}},le={};var Jd;function A0(){if(Jd)return le;Jd=1;var f=Symbol.for("react.transitional.element"),b=Symbol.for("react.portal"),E=Symbol.for("react.fragment"),r=Symbol.for("react.strict_mode"),x=Symbol.for("react.profiler"),N=Symbol.for("react.consumer"),G=Symbol.for("react.context"),H=Symbol.for("react.forward_ref"),w=Symbol.for("react.suspense"),h=Symbol.for("react.memo"),A=Symbol.for("react.lazy"),U=Symbol.for("react.activity"),V=Symbol.iterator;function fe(d){return d===null||typeof d!="object"?null:(d=V&&d[V]||d["@@iterator"],typeof d=="function"?d:null)}var k={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},L=Object.assign,te={};function W(d,j,B){this.props=d,this.context=j,this.refs=te,this.updater=B||k}W.prototype.isReactComponent={},W.prototype.setState=function(d,j){if(typeof d!="object"&&typeof d!="function"&&d!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,d,j,"setState")},W.prototype.forceUpdate=function(d){this.updater.enqueueForceUpdate(this,d,"forceUpdate")};function Oe(){}Oe.prototype=W.prototype;function de(d,j,B){this.props=d,this.context=j,this.refs=te,this.updater=B||k}var Ee=de.prototype=new Oe;Ee.constructor=de,L(Ee,W.prototype),Ee.isPureReactComponent=!0;var Xe=Array.isArray;function Ae(){}var P={H:null,A:null,T:null,S:null},ve=Object.prototype.hasOwnProperty;function Ke(d,j,B){var q=B.ref;return{$$typeof:f,type:d,key:j,ref:q!==void 0?q:null,props:B}}function yt(d,j){return Ke(d.type,j,d.props)}function me(d){return typeof d=="object"&&d!==null&&d.$$typeof===f}function Je(d){var j={"=":"=0",":":"=2"};return"$"+d.replace(/[=:]/g,function(B){return j[B]})}var st=/\/+/g;function $e(d,j){return typeof d=="object"&&d!==null&&d.key!=null?Je(""+d.key):j.toString(36)}function ke(d){switch(d.status){case"fulfilled":return d.value;case"rejected":throw d.reason;default:switch(typeof d.status=="string"?d.then(Ae,Ae):(d.status="pending",d.then(function(j){d.status==="pending"&&(d.status="fulfilled",d.value=j)},function(j){d.status==="pending"&&(d.status="rejected",d.reason=j)})),d.status){case"fulfilled":return d.value;case"rejected":throw d.reason}}throw d}function _(d,j,B,q,K){var ee=typeof d;(ee==="undefined"||ee==="boolean")&&(d=null);var se=!1;if(d===null)se=!0;else switch(ee){case"bigint":case"string":case"number":se=!0;break;case"object":switch(d.$$typeof){case f:case b:se=!0;break;case A:return se=d._init,_(se(d._payload),j,B,q,K)}}if(se)return K=K(d),se=q===""?"."+$e(d,0):q,Xe(K)?(B="",se!=null&&(B=se.replace(st,"$&/")+"/"),_(K,j,B,"",function(gt){return gt})):K!=null&&(me(K)&&(K=yt(K,B+(K.key==null||d&&d.key===K.key?"":(""+K.key).replace(st,"$&/")+"/")+se)),j.push(K)),1;se=0;var Ze=q===""?".":q+":";if(Xe(d))for(var Ne=0;Ne>>1,ce=_[he];if(0>>1;hex(B,J))qx(K,B)?(_[he]=K,_[q]=J,he=q):(_[he]=B,_[j]=J,he=j);else if(qx(K,J))_[he]=K,_[q]=J,he=q;else break e}}return C}function x(_,C){var J=_.sortIndex-C.sortIndex;return J!==0?J:_.id-C.id}if(f.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var N=performance;f.unstable_now=function(){return N.now()}}else{var G=Date,H=G.now();f.unstable_now=function(){return G.now()-H}}var w=[],h=[],A=1,U=null,V=3,fe=!1,k=!1,L=!1,te=!1,W=typeof setTimeout=="function"?setTimeout:null,Oe=typeof clearTimeout=="function"?clearTimeout:null,de=typeof setImmediate<"u"?setImmediate:null;function Ee(_){for(var C=E(h);C!==null;){if(C.callback===null)r(h);else if(C.startTime<=_)r(h),C.sortIndex=C.expirationTime,b(w,C);else break;C=E(h)}}function Xe(_){if(L=!1,Ee(_),!k)if(E(w)!==null)k=!0,Ae||(Ae=!0,Je());else{var C=E(h);C!==null&&ke(Xe,C.startTime-_)}}var Ae=!1,P=-1,ve=5,Ke=-1;function yt(){return te?!0:!(f.unstable_now()-Ke_&&yt());){var he=U.callback;if(typeof he=="function"){U.callback=null,V=U.priorityLevel;var ce=he(U.expirationTime<=_);if(_=f.unstable_now(),typeof ce=="function"){U.callback=ce,Ee(_),C=!0;break t}U===E(w)&&r(w),Ee(_)}else r(w);U=E(w)}if(U!==null)C=!0;else{var d=E(h);d!==null&&ke(Xe,d.startTime-_),C=!1}}break e}finally{U=null,V=J,fe=!1}C=void 0}}finally{C?Je():Ae=!1}}}var Je;if(typeof de=="function")Je=function(){de(me)};else if(typeof MessageChannel<"u"){var st=new MessageChannel,$e=st.port2;st.port1.onmessage=me,Je=function(){$e.postMessage(null)}}else Je=function(){W(me,0)};function ke(_,C){P=W(function(){_(f.unstable_now())},C)}f.unstable_IdlePriority=5,f.unstable_ImmediatePriority=1,f.unstable_LowPriority=4,f.unstable_NormalPriority=3,f.unstable_Profiling=null,f.unstable_UserBlockingPriority=2,f.unstable_cancelCallback=function(_){_.callback=null},f.unstable_forceFrameRate=function(_){0>_||125<_?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):ve=0<_?Math.floor(1e3/_):5},f.unstable_getCurrentPriorityLevel=function(){return V},f.unstable_next=function(_){switch(V){case 1:case 2:case 3:var C=3;break;default:C=V}var J=V;V=C;try{return _()}finally{V=J}},f.unstable_requestPaint=function(){te=!0},f.unstable_runWithPriority=function(_,C){switch(_){case 1:case 2:case 3:case 4:case 5:break;default:_=3}var J=V;V=_;try{return C()}finally{V=J}},f.unstable_scheduleCallback=function(_,C,J){var he=f.unstable_now();switch(typeof J=="object"&&J!==null?(J=J.delay,J=typeof J=="number"&&0he?(_.sortIndex=J,b(h,_),E(w)===null&&_===E(h)&&(L?(Oe(P),P=-1):L=!0,ke(Xe,J-he))):(_.sortIndex=ce,b(w,_),k||fe||(k=!0,Ae||(Ae=!0,Je()))),_},f.unstable_shouldYield=yt,f.unstable_wrapCallback=function(_){var C=V;return function(){var J=V;V=C;try{return _.apply(this,arguments)}finally{V=J}}}})(qs)),qs}var Fd;function O0(){return Fd||(Fd=1,Gs.exports=C0()),Gs.exports}var Ls={exports:{}},Mt={};var Id;function U0(){if(Id)return Mt;Id=1;var f=Zs();function b(w){var h="https://react.dev/errors/"+w;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(f)}catch(b){console.error(b)}}return f(),Ls.exports=U0(),Ls.exports}var em;function B0(){if(em)return ni;em=1;var f=O0(),b=Zs(),E=w0();function r(e){var t="https://react.dev/errors/"+e;if(1ce||(e.current=he[ce],he[ce]=null,ce--)}function B(e,t){ce++,he[ce]=e.current,e.current=t}var q=d(null),K=d(null),ee=d(null),se=d(null);function Ze(e,t){switch(B(ee,t),B(K,e),B(q,null),t.nodeType){case 9:case 11:e=(e=t.documentElement)&&(e=e.namespaceURI)?yd(e):0;break;default:if(e=t.tagName,t=t.namespaceURI)t=yd(t),e=gd(t,e);else switch(e){case"svg":e=1;break;case"math":e=2;break;default:e=0}}j(q),B(q,e)}function Ne(){j(q),j(K),j(ee)}function gt(e){e.memoizedState!==null&&B(se,e);var t=q.current,l=gd(t,e.type);t!==l&&(B(K,e),B(q,l))}function Et(e){K.current===e&&(j(q),j(K)),se.current===e&&(j(se),Pn._currentValue=J)}var We,Ht;function Tt(e){if(We===void 0)try{throw Error()}catch(l){var t=l.stack.trim().match(/\n( *(at )?)/);We=t&&t[1]||"",Ht=-1{for(const N of x)if(N.type==="childList")for(const G of N.addedNodes)G.tagName==="LINK"&&G.rel==="modulepreload"&&r(G)}).observe(document,{childList:!0,subtree:!0});function E(x){const N={};return x.integrity&&(N.integrity=x.integrity),x.referrerPolicy&&(N.referrerPolicy=x.referrerPolicy),x.crossOrigin==="use-credentials"?N.credentials="include":x.crossOrigin==="anonymous"?N.credentials="omit":N.credentials="same-origin",N}function r(x){if(x.ep)return;x.ep=!0;const N=E(x);fetch(x.href,N)}})();function fm(f){return f&&f.__esModule&&Object.prototype.hasOwnProperty.call(f,"default")?f.default:f}var Bs={exports:{}},ai={};var Zd;function E0(){if(Zd)return ai;Zd=1;var f=Symbol.for("react.transitional.element"),b=Symbol.for("react.fragment");function E(r,x,N){var G=null;if(N!==void 0&&(G=""+N),x.key!==void 0&&(G=""+x.key),"key"in x){N={};for(var H in x)H!=="key"&&(N[H]=x[H])}else N=x;return x=N.ref,{$$typeof:f,type:r,key:G,ref:x!==void 0?x:null,props:N}}return ai.Fragment=b,ai.jsx=E,ai.jsxs=E,ai}var Kd;function N0(){return Kd||(Kd=1,Bs.exports=E0()),Bs.exports}var c=N0(),Rs={exports:{}},le={};var Jd;function A0(){if(Jd)return le;Jd=1;var f=Symbol.for("react.transitional.element"),b=Symbol.for("react.portal"),E=Symbol.for("react.fragment"),r=Symbol.for("react.strict_mode"),x=Symbol.for("react.profiler"),N=Symbol.for("react.consumer"),G=Symbol.for("react.context"),H=Symbol.for("react.forward_ref"),w=Symbol.for("react.suspense"),h=Symbol.for("react.memo"),A=Symbol.for("react.lazy"),U=Symbol.for("react.activity"),V=Symbol.iterator;function fe(d){return d===null||typeof d!="object"?null:(d=V&&d[V]||d["@@iterator"],typeof d=="function"?d:null)}var X={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},L=Object.assign,te={};function W(d,j,B){this.props=d,this.context=j,this.refs=te,this.updater=B||X}W.prototype.isReactComponent={},W.prototype.setState=function(d,j){if(typeof d!="object"&&typeof d!="function"&&d!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,d,j,"setState")},W.prototype.forceUpdate=function(d){this.updater.enqueueForceUpdate(this,d,"forceUpdate")};function Oe(){}Oe.prototype=W.prototype;function de(d,j,B){this.props=d,this.context=j,this.refs=te,this.updater=B||X}var Ee=de.prototype=new Oe;Ee.constructor=de,L(Ee,W.prototype),Ee.isPureReactComponent=!0;var ke=Array.isArray;function Ae(){}var P={H:null,A:null,T:null,S:null},ve=Object.prototype.hasOwnProperty;function Ke(d,j,B){var q=B.ref;return{$$typeof:f,type:d,key:j,ref:q!==void 0?q:null,props:B}}function yt(d,j){return Ke(d.type,j,d.props)}function me(d){return typeof d=="object"&&d!==null&&d.$$typeof===f}function Je(d){var j={"=":"=0",":":"=2"};return"$"+d.replace(/[=:]/g,function(B){return j[B]})}var st=/\/+/g;function $e(d,j){return typeof d=="object"&&d!==null&&d.key!=null?Je(""+d.key):j.toString(36)}function Xe(d){switch(d.status){case"fulfilled":return d.value;case"rejected":throw d.reason;default:switch(typeof d.status=="string"?d.then(Ae,Ae):(d.status="pending",d.then(function(j){d.status==="pending"&&(d.status="fulfilled",d.value=j)},function(j){d.status==="pending"&&(d.status="rejected",d.reason=j)})),d.status){case"fulfilled":return d.value;case"rejected":throw d.reason}}throw d}function _(d,j,B,q,K){var ee=typeof d;(ee==="undefined"||ee==="boolean")&&(d=null);var se=!1;if(d===null)se=!0;else switch(ee){case"bigint":case"string":case"number":se=!0;break;case"object":switch(d.$$typeof){case f:case b:se=!0;break;case A:return se=d._init,_(se(d._payload),j,B,q,K)}}if(se)return K=K(d),se=q===""?"."+$e(d,0):q,ke(K)?(B="",se!=null&&(B=se.replace(st,"$&/")+"/"),_(K,j,B,"",function(gt){return gt})):K!=null&&(me(K)&&(K=yt(K,B+(K.key==null||d&&d.key===K.key?"":(""+K.key).replace(st,"$&/")+"/")+se)),j.push(K)),1;se=0;var Ze=q===""?".":q+":";if(ke(d))for(var Ne=0;Ne>>1,ce=_[he];if(0>>1;hex(B,J))qx(K,B)?(_[he]=K,_[q]=J,he=q):(_[he]=B,_[j]=J,he=j);else if(qx(K,J))_[he]=K,_[q]=J,he=q;else break e}}return C}function x(_,C){var J=_.sortIndex-C.sortIndex;return J!==0?J:_.id-C.id}if(f.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var N=performance;f.unstable_now=function(){return N.now()}}else{var G=Date,H=G.now();f.unstable_now=function(){return G.now()-H}}var w=[],h=[],A=1,U=null,V=3,fe=!1,X=!1,L=!1,te=!1,W=typeof setTimeout=="function"?setTimeout:null,Oe=typeof clearTimeout=="function"?clearTimeout:null,de=typeof setImmediate<"u"?setImmediate:null;function Ee(_){for(var C=E(h);C!==null;){if(C.callback===null)r(h);else if(C.startTime<=_)r(h),C.sortIndex=C.expirationTime,b(w,C);else break;C=E(h)}}function ke(_){if(L=!1,Ee(_),!X)if(E(w)!==null)X=!0,Ae||(Ae=!0,Je());else{var C=E(h);C!==null&&Xe(ke,C.startTime-_)}}var Ae=!1,P=-1,ve=5,Ke=-1;function yt(){return te?!0:!(f.unstable_now()-Ke_&&yt());){var he=U.callback;if(typeof he=="function"){U.callback=null,V=U.priorityLevel;var ce=he(U.expirationTime<=_);if(_=f.unstable_now(),typeof ce=="function"){U.callback=ce,Ee(_),C=!0;break t}U===E(w)&&r(w),Ee(_)}else r(w);U=E(w)}if(U!==null)C=!0;else{var d=E(h);d!==null&&Xe(ke,d.startTime-_),C=!1}}break e}finally{U=null,V=J,fe=!1}C=void 0}}finally{C?Je():Ae=!1}}}var Je;if(typeof de=="function")Je=function(){de(me)};else if(typeof MessageChannel<"u"){var st=new MessageChannel,$e=st.port2;st.port1.onmessage=me,Je=function(){$e.postMessage(null)}}else Je=function(){W(me,0)};function Xe(_,C){P=W(function(){_(f.unstable_now())},C)}f.unstable_IdlePriority=5,f.unstable_ImmediatePriority=1,f.unstable_LowPriority=4,f.unstable_NormalPriority=3,f.unstable_Profiling=null,f.unstable_UserBlockingPriority=2,f.unstable_cancelCallback=function(_){_.callback=null},f.unstable_forceFrameRate=function(_){0>_||125<_?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):ve=0<_?Math.floor(1e3/_):5},f.unstable_getCurrentPriorityLevel=function(){return V},f.unstable_next=function(_){switch(V){case 1:case 2:case 3:var C=3;break;default:C=V}var J=V;V=C;try{return _()}finally{V=J}},f.unstable_requestPaint=function(){te=!0},f.unstable_runWithPriority=function(_,C){switch(_){case 1:case 2:case 3:case 4:case 5:break;default:_=3}var J=V;V=_;try{return C()}finally{V=J}},f.unstable_scheduleCallback=function(_,C,J){var he=f.unstable_now();switch(typeof J=="object"&&J!==null?(J=J.delay,J=typeof J=="number"&&0he?(_.sortIndex=J,b(h,_),E(w)===null&&_===E(h)&&(L?(Oe(P),P=-1):L=!0,Xe(ke,J-he))):(_.sortIndex=ce,b(w,_),X||fe||(X=!0,Ae||(Ae=!0,Je()))),_},f.unstable_shouldYield=yt,f.unstable_wrapCallback=function(_){var C=V;return function(){var J=V;V=C;try{return _.apply(this,arguments)}finally{V=J}}}})(qs)),qs}var Fd;function O0(){return Fd||(Fd=1,Gs.exports=C0()),Gs.exports}var Ls={exports:{}},Mt={};var Id;function U0(){if(Id)return Mt;Id=1;var f=Zs();function b(w){var h="https://react.dev/errors/"+w;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(f)}catch(b){console.error(b)}}return f(),Ls.exports=U0(),Ls.exports}var em;function B0(){if(em)return ni;em=1;var f=O0(),b=Zs(),E=w0();function r(e){var t="https://react.dev/errors/"+e;if(1ce||(e.current=he[ce],he[ce]=null,ce--)}function B(e,t){ce++,he[ce]=e.current,e.current=t}var q=d(null),K=d(null),ee=d(null),se=d(null);function Ze(e,t){switch(B(ee,t),B(K,e),B(q,null),t.nodeType){case 9:case 11:e=(e=t.documentElement)&&(e=e.namespaceURI)?yd(e):0;break;default:if(e=t.tagName,t=t.namespaceURI)t=yd(t),e=gd(t,e);else switch(e){case"svg":e=1;break;case"math":e=2;break;default:e=0}}j(q),B(q,e)}function Ne(){j(q),j(K),j(ee)}function gt(e){e.memoizedState!==null&&B(se,e);var t=q.current,l=gd(t,e.type);t!==l&&(B(K,e),B(q,l))}function Et(e){K.current===e&&(j(q),j(K)),se.current===e&&(j(se),Pn._currentValue=J)}var We,Ht;function Tt(e){if(We===void 0)try{throw Error()}catch(l){var t=l.stack.trim().match(/\n( *(at )?)/);We=t&&t[1]||"",Ht=-1)":-1n||o[a]!==p[n]){var z=` `+o[a].replace(" at new "," at ");return e.displayName&&z.includes("")&&(z=z.replace("",e.displayName)),z}while(1<=a&&0<=n);break}}}finally{Z=!1,Error.prepareStackTrace=l}return(l=e?e.displayName||e.name:"")?Tt(l):""}function D(e,t){switch(e.tag){case 26:case 27:case 5:return Tt(e.type);case 16:return Tt("Lazy");case 13:return e.child!==t&&t!==null?Tt("Suspense Fallback"):Tt("Suspense");case 19:return Tt("SuspenseList");case 0:case 15:return ie(e.type,!1);case 11:return ie(e.type.render,!1);case 1:return ie(e.type,!0);case 31:return Tt("Activity");default:return""}}function R(e){try{var t="",l=null;do t+=D(e,l),l=e,e=e.return;while(e);return t}catch(a){return` Error generating stack: `+a.message+` -`+a.stack}}var F=Object.prototype.hasOwnProperty,ae=f.unstable_scheduleCallback,At=f.unstable_cancelCallback,Gt=f.unstable_shouldYield,dl=f.unstable_requestPaint,Re=f.unstable_now,al=f.unstable_getCurrentPriorityLevel,Fe=f.unstable_ImmediatePriority,za=f.unstable_UserBlockingPriority,Ta=f.unstable_NormalPriority,Y=f.unstable_LowPriority,ye=f.unstable_IdlePriority,He=f.log,pt=f.unstable_setDisableYieldValue,ft=null,tt=null;function qt(e){if(typeof He=="function"&&pt(e),tt&&typeof tt.setStrictMode=="function")try{tt.setStrictMode(ft,e)}catch{}}var rt=Math.clz32?Math.clz32:xe,vt=Math.log,Se=Math.LN2;function xe(e){return e>>>=0,e===0?32:31-(vt(e)/Se|0)|0}var Ge=256,_e=262144,Ie=4194304;function je(e){var t=e&42;if(t!==0)return t;switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return e&261888;case 262144:case 524288:case 1048576:case 2097152:return e&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return e&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return e}}function dt(e,t,l){var a=e.pendingLanes;if(a===0)return 0;var n=0,i=e.suspendedLanes,u=e.pingedLanes;e=e.warmLanes;var s=a&134217727;return s!==0?(a=s&~i,a!==0?n=je(a):(u&=s,u!==0?n=je(u):l||(l=s&~e,l!==0&&(n=je(l))))):(s=a&~i,s!==0?n=je(s):u!==0?n=je(u):l||(l=a&~e,l!==0&&(n=je(l)))),n===0?0:t!==0&&t!==n&&(t&i)===0&&(i=n&-n,l=t&-t,i>=l||i===32&&(l&4194048)!==0)?t:n}function bt(e,t){return(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&t)===0}function cl(e,t){switch(e){case 1:case 2:case 4:case 8:case 64:return t+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function ci(){var e=Ie;return Ie<<=1,(Ie&62914560)===0&&(Ie=4194304),e}function ju(e){for(var t=[],l=0;31>l;l++)t.push(e);return t}function mn(e,t){e.pendingLanes|=t,t!==268435456&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function ym(e,t,l,a,n,i){var u=e.pendingLanes;e.pendingLanes=l,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=l,e.entangledLanes&=l,e.errorRecoveryDisabledLanes&=l,e.shellSuspendCounter=0;var s=e.entanglements,o=e.expirationTimes,p=e.hiddenUpdates;for(l=u&~l;0"u")return null;try{return e.activeElement||e.body}catch{return e.body}}var xm=/[\n"\\]/g;function Jt(e){return e.replace(xm,function(t){return"\\"+t.charCodeAt(0).toString(16)+" "})}function Au(e,t,l,a,n,i,u,s){e.name="",u!=null&&typeof u!="function"&&typeof u!="symbol"&&typeof u!="boolean"?e.type=u:e.removeAttribute("type"),t!=null?u==="number"?(t===0&&e.value===""||e.value!=t)&&(e.value=""+Kt(t)):e.value!==""+Kt(t)&&(e.value=""+Kt(t)):u!=="submit"&&u!=="reset"||e.removeAttribute("value"),t!=null?Du(e,u,Kt(t)):l!=null?Du(e,u,Kt(l)):a!=null&&e.removeAttribute("value"),n==null&&i!=null&&(e.defaultChecked=!!i),n!=null&&(e.checked=n&&typeof n!="function"&&typeof n!="symbol"),s!=null&&typeof s!="function"&&typeof s!="symbol"&&typeof s!="boolean"?e.name=""+Kt(s):e.removeAttribute("name")}function sf(e,t,l,a,n,i,u,s){if(i!=null&&typeof i!="function"&&typeof i!="symbol"&&typeof i!="boolean"&&(e.type=i),t!=null||l!=null){if(!(i!=="submit"&&i!=="reset"||t!=null)){Nu(e);return}l=l!=null?""+Kt(l):"",t=t!=null?""+Kt(t):l,s||t===e.value||(e.value=t),e.defaultValue=t}a=a??n,a=typeof a!="function"&&typeof a!="symbol"&&!!a,e.checked=s?e.checked:!!a,e.defaultChecked=!!a,u!=null&&typeof u!="function"&&typeof u!="symbol"&&typeof u!="boolean"&&(e.name=u),Nu(e)}function Du(e,t,l){t==="number"&&oi(e.ownerDocument)===e||e.defaultValue===""+l||(e.defaultValue=""+l)}function Ca(e,t,l,a){if(e=e.options,t){t={};for(var n=0;n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Bu=!1;if(yl)try{var pn={};Object.defineProperty(pn,"passive",{get:function(){Bu=!0}}),window.addEventListener("test",pn,pn),window.removeEventListener("test",pn,pn)}catch{Bu=!1}var Ul=null,Ru=null,di=null;function yf(){if(di)return di;var e,t=Ru,l=t.length,a,n="value"in Ul?Ul.value:Ul.textContent,i=n.length;for(e=0;e=Sn),xf=" ",_f=!1;function jf(e,t){switch(e){case"keyup":return $m.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function zf(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var Ba=!1;function Fm(e,t){switch(e){case"compositionend":return zf(t);case"keypress":return t.which!==32?null:(_f=!0,xf);case"textInput":return e=t.data,e===xf&&_f?null:e;default:return null}}function Im(e,t){if(Ba)return e==="compositionend"||!Yu&&jf(e,t)?(e=yf(),di=Ru=Ul=null,Ba=!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:l,offset:t-e};e=a}e:{for(;l;){if(l.nextSibling){l=l.nextSibling;break e}l=l.parentNode}l=void 0}l=Of(l)}}function wf(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?wf(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function Bf(e){e=e!=null&&e.ownerDocument!=null&&e.ownerDocument.defaultView!=null?e.ownerDocument.defaultView:window;for(var t=oi(e.document);t instanceof e.HTMLIFrameElement;){try{var l=typeof t.contentWindow.location.href=="string"}catch{l=!1}if(l)e=t.contentWindow;else break;t=oi(e.document)}return t}function Qu(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}var uh=yl&&"documentMode"in document&&11>=document.documentMode,Ra=null,Vu=null,zn=null,Zu=!1;function Rf(e,t,l){var a=l.window===l?l.document:l.nodeType===9?l:l.ownerDocument;Zu||Ra==null||Ra!==oi(a)||(a=Ra,"selectionStart"in a&&Qu(a)?a={start:a.selectionStart,end:a.selectionEnd}:(a=(a.ownerDocument&&a.ownerDocument.defaultView||window).getSelection(),a={anchorNode:a.anchorNode,anchorOffset:a.anchorOffset,focusNode:a.focusNode,focusOffset:a.focusOffset}),zn&&jn(zn,a)||(zn=a,a=iu(Vu,"onSelect"),0>=u,n-=u,sl=1<<32-rt(t)+n|l<ue?(pe=Q,Q=null):pe=Q.sibling;var Te=v(y,Q,g[ue],T);if(Te===null){Q===null&&(Q=pe);break}e&&Q&&Te.alternate===null&&t(y,Q),m=i(Te,m,ue),ze===null?$=Te:ze.sibling=Te,ze=Te,Q=pe}if(ue===g.length)return l(y,Q),be&&pl(y,ue),$;if(Q===null){for(;ueue?(pe=Q,Q=null):pe=Q.sibling;var ta=v(y,Q,Te.value,T);if(ta===null){Q===null&&(Q=pe);break}e&&Q&&ta.alternate===null&&t(y,Q),m=i(ta,m,ue),ze===null?$=ta:ze.sibling=ta,ze=ta,Q=pe}if(Te.done)return l(y,Q),be&&pl(y,ue),$;if(Q===null){for(;!Te.done;ue++,Te=g.next())Te=M(y,Te.value,T),Te!==null&&(m=i(Te,m,ue),ze===null?$=Te:ze.sibling=Te,ze=Te);return be&&pl(y,ue),$}for(Q=a(Q);!Te.done;ue++,Te=g.next())Te=S(Q,y,ue,Te.value,T),Te!==null&&(e&&Te.alternate!==null&&Q.delete(Te.key===null?ue:Te.key),m=i(Te,m,ue),ze===null?$=Te:ze.sibling=Te,ze=Te);return e&&Q.forEach(function(M0){return t(y,M0)}),be&&pl(y,ue),$}function Be(y,m,g,T){if(typeof g=="object"&&g!==null&&g.type===L&&g.key===null&&(g=g.props.children),typeof g=="object"&&g!==null){switch(g.$$typeof){case fe:e:{for(var $=g.key;m!==null;){if(m.key===$){if($=g.type,$===L){if(m.tag===7){l(y,m.sibling),T=n(m,g.props.children),T.return=y,y=T;break e}}else if(m.elementType===$||typeof $=="object"&&$!==null&&$.$$typeof===ve&&ga($)===m.type){l(y,m.sibling),T=n(m,g.props),Dn(T,g),T.return=y,y=T;break e}l(y,m);break}else t(y,m);m=m.sibling}g.type===L?(T=ra(g.props.children,y.mode,T,g.key),T.return=y,y=T):(T=_i(g.type,g.key,g.props,null,y.mode,T),Dn(T,g),T.return=y,y=T)}return u(y);case k:e:{for($=g.key;m!==null;){if(m.key===$)if(m.tag===4&&m.stateNode.containerInfo===g.containerInfo&&m.stateNode.implementation===g.implementation){l(y,m.sibling),T=n(m,g.children||[]),T.return=y,y=T;break e}else{l(y,m);break}else t(y,m);m=m.sibling}T=Pu(g,y.mode,T),T.return=y,y=T}return u(y);case ve:return g=ga(g),Be(y,m,g,T)}if(ke(g))return X(y,m,g,T);if(Je(g)){if($=Je(g),typeof $!="function")throw Error(r(150));return g=$.call(g),I(y,m,g,T)}if(typeof g.then=="function")return Be(y,m,Ai(g),T);if(g.$$typeof===de)return Be(y,m,Ti(y,g),T);Di(y,g)}return typeof g=="string"&&g!==""||typeof g=="number"||typeof g=="bigint"?(g=""+g,m!==null&&m.tag===6?(l(y,m.sibling),T=n(m,g),T.return=y,y=T):(l(y,m),T=Iu(g,y.mode,T),T.return=y,y=T),u(y)):l(y,m)}return function(y,m,g,T){try{An=0;var $=Be(y,m,g,T);return Ka=null,$}catch(Q){if(Q===Za||Q===Ei)throw Q;var ze=Yt(29,Q,null,y.mode);return ze.lanes=T,ze.return=y,ze}}}var va=io(!0),uo=io(!1),Gl=!1;function rc(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function dc(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,callbacks:null})}function ql(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function Ll(e,t,l){var a=e.updateQueue;if(a===null)return null;if(a=a.shared,(Me&2)!==0){var n=a.pending;return n===null?t.next=t:(t.next=n.next,n.next=t),a.pending=t,t=xi(e),kf(e,null,l),t}return Si(e,a,t,l),xi(e)}function Cn(e,t,l){if(t=t.updateQueue,t!==null&&(t=t.shared,(l&4194048)!==0)){var a=t.lanes;a&=e.pendingLanes,l|=a,t.lanes=l,Ws(e,l)}}function mc(e,t){var l=e.updateQueue,a=e.alternate;if(a!==null&&(a=a.updateQueue,l===a)){var n=null,i=null;if(l=l.firstBaseUpdate,l!==null){do{var u={lane:l.lane,tag:l.tag,payload:l.payload,callback:null,next:null};i===null?n=i=u:i=i.next=u,l=l.next}while(l!==null);i===null?n=i=t:i=i.next=t}else n=i=t;l={baseState:a.baseState,firstBaseUpdate:n,lastBaseUpdate:i,shared:a.shared,callbacks:a.callbacks},e.updateQueue=l;return}e=l.lastBaseUpdate,e===null?l.firstBaseUpdate=t:e.next=t,l.lastBaseUpdate=t}var hc=!1;function On(){if(hc){var e=Va;if(e!==null)throw e}}function Un(e,t,l,a){hc=!1;var n=e.updateQueue;Gl=!1;var i=n.firstBaseUpdate,u=n.lastBaseUpdate,s=n.shared.pending;if(s!==null){n.shared.pending=null;var o=s,p=o.next;o.next=null,u===null?i=p:u.next=p,u=o;var z=e.alternate;z!==null&&(z=z.updateQueue,s=z.lastBaseUpdate,s!==u&&(s===null?z.firstBaseUpdate=p:s.next=p,z.lastBaseUpdate=o))}if(i!==null){var M=n.baseState;u=0,z=p=o=null,s=i;do{var v=s.lane&-536870913,S=v!==s.lane;if(S?(ge&v)===v:(a&v)===v){v!==0&&v===Qa&&(hc=!0),z!==null&&(z=z.next={lane:0,tag:s.tag,payload:s.payload,callback:null,next:null});e:{var X=e,I=s;v=t;var Be=l;switch(I.tag){case 1:if(X=I.payload,typeof X=="function"){M=X.call(Be,M,v);break e}M=X;break e;case 3:X.flags=X.flags&-65537|128;case 0:if(X=I.payload,v=typeof X=="function"?X.call(Be,M,v):X,v==null)break e;M=U({},M,v);break e;case 2:Gl=!0}}v=s.callback,v!==null&&(e.flags|=64,S&&(e.flags|=8192),S=n.callbacks,S===null?n.callbacks=[v]:S.push(v))}else S={lane:v,tag:s.tag,payload:s.payload,callback:s.callback,next:null},z===null?(p=z=S,o=M):z=z.next=S,u|=v;if(s=s.next,s===null){if(s=n.shared.pending,s===null)break;S=s,s=S.next,S.next=null,n.lastBaseUpdate=S,n.shared.pending=null}}while(!0);z===null&&(o=M),n.baseState=o,n.firstBaseUpdate=p,n.lastBaseUpdate=z,i===null&&(n.shared.lanes=0),Vl|=u,e.lanes=u,e.memoizedState=M}}function co(e,t){if(typeof e!="function")throw Error(r(191,e));e.call(t)}function so(e,t){var l=e.callbacks;if(l!==null)for(e.callbacks=null,e=0;ei?i:8;var u=_.T,s={};_.T=s,Uc(e,!1,t,l);try{var o=n(),p=_.S;if(p!==null&&p(s,o),o!==null&&typeof o=="object"&&typeof o.then=="function"){var z=yh(o,a);Rn(e,t,z,Zt(e))}else Rn(e,t,a,Zt(e))}catch(M){Rn(e,t,{then:function(){},status:"rejected",reason:M},Zt())}finally{C.p=i,u!==null&&s.types!==null&&(u.types=s.types),_.T=u}}function xh(){}function Cc(e,t,l,a){if(e.tag!==5)throw Error(r(476));var n=Yo(e).queue;Lo(e,n,t,J,l===null?xh:function(){return Xo(e),l(a)})}function Yo(e){var t=e.memoizedState;if(t!==null)return t;t={memoizedState:J,baseState:J,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:xl,lastRenderedState:J},next:null};var l={};return t.next={memoizedState:l,baseState:l,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:xl,lastRenderedState:l},next:null},e.memoizedState=t,e=e.alternate,e!==null&&(e.memoizedState=t),t}function Xo(e){var t=Yo(e);t.next===null&&(t=e.alternate.memoizedState),Rn(e,t.next.queue,{},Zt())}function Oc(){return _t(Pn)}function ko(){return at().memoizedState}function Qo(){return at().memoizedState}function _h(e){for(var t=e.return;t!==null;){switch(t.tag){case 24:case 3:var l=Zt();e=ql(l);var a=Ll(t,e,l);a!==null&&(Rt(a,t,l),Cn(a,t,l)),t={cache:cc()},e.payload=t;return}t=t.return}}function jh(e,t,l){var a=Zt();l={lane:a,revertLane:0,gesture:null,action:l,hasEagerState:!1,eagerState:null,next:null},Li(e)?Zo(t,l):(l=Wu(e,t,l,a),l!==null&&(Rt(l,e,a),Ko(l,t,a)))}function Vo(e,t,l){var a=Zt();Rn(e,t,l,a)}function Rn(e,t,l,a){var n={lane:a,revertLane:0,gesture:null,action:l,hasEagerState:!1,eagerState:null,next:null};if(Li(e))Zo(t,n);else{var i=e.alternate;if(e.lanes===0&&(i===null||i.lanes===0)&&(i=t.lastRenderedReducer,i!==null))try{var u=t.lastRenderedState,s=i(u,l);if(n.hasEagerState=!0,n.eagerState=s,Lt(s,u))return Si(e,t,n,0),qe===null&&bi(),!1}catch{}if(l=Wu(e,t,n,a),l!==null)return Rt(l,e,a),Ko(l,t,a),!0}return!1}function Uc(e,t,l,a){if(a={lane:2,revertLane:rs(),gesture:null,action:a,hasEagerState:!1,eagerState:null,next:null},Li(e)){if(t)throw Error(r(479))}else t=Wu(e,l,a,2),t!==null&&Rt(t,e,2)}function Li(e){var t=e.alternate;return e===ne||t!==null&&t===ne}function Zo(e,t){$a=Ui=!0;var l=e.pending;l===null?t.next=t:(t.next=l.next,l.next=t),e.pending=t}function Ko(e,t,l){if((l&4194048)!==0){var a=t.lanes;a&=e.pendingLanes,l|=a,t.lanes=l,Ws(e,l)}}var Hn={readContext:_t,use:Ri,useCallback:Pe,useContext:Pe,useEffect:Pe,useImperativeHandle:Pe,useLayoutEffect:Pe,useInsertionEffect:Pe,useMemo:Pe,useReducer:Pe,useRef:Pe,useState:Pe,useDebugValue:Pe,useDeferredValue:Pe,useTransition:Pe,useSyncExternalStore:Pe,useId:Pe,useHostTransitionStatus:Pe,useFormState:Pe,useActionState:Pe,useOptimistic:Pe,useMemoCache:Pe,useCacheRefresh:Pe};Hn.useEffectEvent=Pe;var Jo={readContext:_t,use:Ri,useCallback:function(e,t){return Nt().memoizedState=[e,t===void 0?null:t],e},useContext:_t,useEffect:Co,useImperativeHandle:function(e,t,l){l=l!=null?l.concat([e]):null,Gi(4194308,4,Bo.bind(null,t,e),l)},useLayoutEffect:function(e,t){return Gi(4194308,4,e,t)},useInsertionEffect:function(e,t){Gi(4,2,e,t)},useMemo:function(e,t){var l=Nt();t=t===void 0?null:t;var a=e();if(ba){qt(!0);try{e()}finally{qt(!1)}}return l.memoizedState=[a,t],a},useReducer:function(e,t,l){var a=Nt();if(l!==void 0){var n=l(t);if(ba){qt(!0);try{l(t)}finally{qt(!1)}}}else n=t;return a.memoizedState=a.baseState=n,e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:n},a.queue=e,e=e.dispatch=jh.bind(null,ne,e),[a.memoizedState,e]},useRef:function(e){var t=Nt();return e={current:e},t.memoizedState=e},useState:function(e){e=Mc(e);var t=e.queue,l=Vo.bind(null,ne,t);return t.dispatch=l,[e.memoizedState,l]},useDebugValue:Ac,useDeferredValue:function(e,t){var l=Nt();return Dc(l,e,t)},useTransition:function(){var e=Mc(!1);return e=Lo.bind(null,ne,e.queue,!0,!1),Nt().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,t,l){var a=ne,n=Nt();if(be){if(l===void 0)throw Error(r(407));l=l()}else{if(l=t(),qe===null)throw Error(r(349));(ge&127)!==0||yo(a,t,l)}n.memoizedState=l;var i={value:l,getSnapshot:t};return n.queue=i,Co(po.bind(null,a,i,e),[e]),a.flags|=2048,Fa(9,{destroy:void 0},go.bind(null,a,i,l,t),null),l},useId:function(){var e=Nt(),t=qe.identifierPrefix;if(be){var l=fl,a=sl;l=(a&~(1<<32-rt(a)-1)).toString(32)+l,t="_"+t+"R_"+l,l=wi++,0<\/script>",i=i.removeChild(i.firstChild);break;case"select":i=typeof a.is=="string"?u.createElement("select",{is:a.is}):u.createElement("select"),a.multiple?i.multiple=!0:a.size&&(i.size=a.size);break;default:i=typeof a.is=="string"?u.createElement(n,{is:a.is}):u.createElement(n)}}i[St]=t,i[Dt]=a;e:for(u=t.child;u!==null;){if(u.tag===5||u.tag===6)i.appendChild(u.stateNode);else if(u.tag!==4&&u.tag!==27&&u.child!==null){u.child.return=u,u=u.child;continue}if(u===t)break e;for(;u.sibling===null;){if(u.return===null||u.return===t)break e;u=u.return}u.sibling.return=u.return,u=u.sibling}t.stateNode=i;e:switch(zt(i,n,a),n){case"button":case"input":case"select":case"textarea":a=!!a.autoFocus;break e;case"img":a=!0;break e;default:a=!1}a&&jl(t)}}return Ye(t),Kc(t,t.type,e===null?null:e.memoizedProps,t.pendingProps,l),null;case 6:if(e&&t.stateNode!=null)e.memoizedProps!==a&&jl(t);else{if(typeof a!="string"&&t.stateNode===null)throw Error(r(166));if(e=ee.current,Xa(t)){if(e=t.stateNode,l=t.memoizedProps,a=null,n=xt,n!==null)switch(n.tag){case 27:case 5:a=n.memoizedProps}e[St]=t,e=!!(e.nodeValue===l||a!==null&&a.suppressHydrationWarning===!0||md(e.nodeValue,l)),e||Rl(t,!0)}else e=uu(e).createTextNode(a),e[St]=t,t.stateNode=e}return Ye(t),null;case 31:if(l=t.memoizedState,e===null||e.memoizedState!==null){if(a=Xa(t),l!==null){if(e===null){if(!a)throw Error(r(318));if(e=t.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(r(557));e[St]=t}else da(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;Ye(t),e=!1}else l=ac(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=l),e=!0;if(!e)return t.flags&256?(kt(t),t):(kt(t),null);if((t.flags&128)!==0)throw Error(r(558))}return Ye(t),null;case 13:if(a=t.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(n=Xa(t),a!==null&&a.dehydrated!==null){if(e===null){if(!n)throw Error(r(318));if(n=t.memoizedState,n=n!==null?n.dehydrated:null,!n)throw Error(r(317));n[St]=t}else da(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;Ye(t),n=!1}else n=ac(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=n),n=!0;if(!n)return t.flags&256?(kt(t),t):(kt(t),null)}return kt(t),(t.flags&128)!==0?(t.lanes=l,t):(l=a!==null,e=e!==null&&e.memoizedState!==null,l&&(a=t.child,n=null,a.alternate!==null&&a.alternate.memoizedState!==null&&a.alternate.memoizedState.cachePool!==null&&(n=a.alternate.memoizedState.cachePool.pool),i=null,a.memoizedState!==null&&a.memoizedState.cachePool!==null&&(i=a.memoizedState.cachePool.pool),i!==n&&(a.flags|=2048)),l!==e&&l&&(t.child.flags|=8192),Vi(t,t.updateQueue),Ye(t),null);case 4:return Ne(),e===null&&ys(t.stateNode.containerInfo),Ye(t),null;case 10:return bl(t.type),Ye(t),null;case 19:if(j(lt),a=t.memoizedState,a===null)return Ye(t),null;if(n=(t.flags&128)!==0,i=a.rendering,i===null)if(n)qn(a,!1);else{if(et!==0||e!==null&&(e.flags&128)!==0)for(e=t.child;e!==null;){if(i=Oi(e),i!==null){for(t.flags|=128,qn(a,!1),e=i.updateQueue,t.updateQueue=e,Vi(t,e),t.subtreeFlags=0,e=l,l=t.child;l!==null;)Qf(l,e),l=l.sibling;return B(lt,lt.current&1|2),be&&pl(t,a.treeForkCount),t.child}e=e.sibling}a.tail!==null&&Re()>Wi&&(t.flags|=128,n=!0,qn(a,!1),t.lanes=4194304)}else{if(!n)if(e=Oi(i),e!==null){if(t.flags|=128,n=!0,e=e.updateQueue,t.updateQueue=e,Vi(t,e),qn(a,!0),a.tail===null&&a.tailMode==="hidden"&&!i.alternate&&!be)return Ye(t),null}else 2*Re()-a.renderingStartTime>Wi&&l!==536870912&&(t.flags|=128,n=!0,qn(a,!1),t.lanes=4194304);a.isBackwards?(i.sibling=t.child,t.child=i):(e=a.last,e!==null?e.sibling=i:t.child=i,a.last=i)}return a.tail!==null?(e=a.tail,a.rendering=e,a.tail=e.sibling,a.renderingStartTime=Re(),e.sibling=null,l=lt.current,B(lt,n?l&1|2:l&1),be&&pl(t,a.treeForkCount),e):(Ye(t),null);case 22:case 23:return kt(t),gc(),a=t.memoizedState!==null,e!==null?e.memoizedState!==null!==a&&(t.flags|=8192):a&&(t.flags|=8192),a?(l&536870912)!==0&&(t.flags&128)===0&&(Ye(t),t.subtreeFlags&6&&(t.flags|=8192)):Ye(t),l=t.updateQueue,l!==null&&Vi(t,l.retryQueue),l=null,e!==null&&e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(l=e.memoizedState.cachePool.pool),a=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(a=t.memoizedState.cachePool.pool),a!==l&&(t.flags|=2048),e!==null&&j(ya),null;case 24:return l=null,e!==null&&(l=e.memoizedState.cache),t.memoizedState.cache!==l&&(t.flags|=2048),bl(nt),Ye(t),null;case 25:return null;case 30:return null}throw Error(r(156,t.tag))}function Nh(e,t){switch(tc(t),t.tag){case 1:return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return bl(nt),Ne(),e=t.flags,(e&65536)!==0&&(e&128)===0?(t.flags=e&-65537|128,t):null;case 26:case 27:case 5:return Et(t),null;case 31:if(t.memoizedState!==null){if(kt(t),t.alternate===null)throw Error(r(340));da()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 13:if(kt(t),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(r(340));da()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return j(lt),null;case 4:return Ne(),null;case 10:return bl(t.type),null;case 22:case 23:return kt(t),gc(),e!==null&&j(ya),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 24:return bl(nt),null;case 25:return null;default:return null}}function vr(e,t){switch(tc(t),t.tag){case 3:bl(nt),Ne();break;case 26:case 27:case 5:Et(t);break;case 4:Ne();break;case 31:t.memoizedState!==null&&kt(t);break;case 13:kt(t);break;case 19:j(lt);break;case 10:bl(t.type);break;case 22:case 23:kt(t),gc(),e!==null&&j(ya);break;case 24:bl(nt)}}function Ln(e,t){try{var l=t.updateQueue,a=l!==null?l.lastEffect:null;if(a!==null){var n=a.next;l=n;do{if((l.tag&e)===e){a=void 0;var i=l.create,u=l.inst;a=i(),u.destroy=a}l=l.next}while(l!==n)}}catch(s){Ce(t,t.return,s)}}function kl(e,t,l){try{var a=t.updateQueue,n=a!==null?a.lastEffect:null;if(n!==null){var i=n.next;a=i;do{if((a.tag&e)===e){var u=a.inst,s=u.destroy;if(s!==void 0){u.destroy=void 0,n=t;var o=l,p=s;try{p()}catch(z){Ce(n,o,z)}}}a=a.next}while(a!==i)}}catch(z){Ce(t,t.return,z)}}function br(e){var t=e.updateQueue;if(t!==null){var l=e.stateNode;try{so(t,l)}catch(a){Ce(e,e.return,a)}}}function Sr(e,t,l){l.props=Sa(e.type,e.memoizedProps),l.state=e.memoizedState;try{l.componentWillUnmount()}catch(a){Ce(e,t,a)}}function Yn(e,t){try{var l=e.ref;if(l!==null){switch(e.tag){case 26:case 27:case 5:var a=e.stateNode;break;case 30:a=e.stateNode;break;default:a=e.stateNode}typeof l=="function"?e.refCleanup=l(a):l.current=a}}catch(n){Ce(e,t,n)}}function ol(e,t){var l=e.ref,a=e.refCleanup;if(l!==null)if(typeof a=="function")try{a()}catch(n){Ce(e,t,n)}finally{e.refCleanup=null,e=e.alternate,e!=null&&(e.refCleanup=null)}else if(typeof l=="function")try{l(null)}catch(n){Ce(e,t,n)}else l.current=null}function xr(e){var t=e.type,l=e.memoizedProps,a=e.stateNode;try{e:switch(t){case"button":case"input":case"select":case"textarea":l.autoFocus&&a.focus();break e;case"img":l.src?a.src=l.src:l.srcSet&&(a.srcset=l.srcSet)}}catch(n){Ce(e,e.return,n)}}function Jc(e,t,l){try{var a=e.stateNode;Wh(a,e.type,l,t),a[Dt]=t}catch(n){Ce(e,e.return,n)}}function _r(e){return e.tag===5||e.tag===3||e.tag===26||e.tag===27&&Wl(e.type)||e.tag===4}function $c(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||_r(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.tag===27&&Wl(e.type)||e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function Wc(e,t,l){var a=e.tag;if(a===5||a===6)e=e.stateNode,t?(l.nodeType===9?l.body:l.nodeName==="HTML"?l.ownerDocument.body:l).insertBefore(e,t):(t=l.nodeType===9?l.body:l.nodeName==="HTML"?l.ownerDocument.body:l,t.appendChild(e),l=l._reactRootContainer,l!=null||t.onclick!==null||(t.onclick=hl));else if(a!==4&&(a===27&&Wl(e.type)&&(l=e.stateNode,t=null),e=e.child,e!==null))for(Wc(e,t,l),e=e.sibling;e!==null;)Wc(e,t,l),e=e.sibling}function Zi(e,t,l){var a=e.tag;if(a===5||a===6)e=e.stateNode,t?l.insertBefore(e,t):l.appendChild(e);else if(a!==4&&(a===27&&Wl(e.type)&&(l=e.stateNode),e=e.child,e!==null))for(Zi(e,t,l),e=e.sibling;e!==null;)Zi(e,t,l),e=e.sibling}function jr(e){var t=e.stateNode,l=e.memoizedProps;try{for(var a=e.type,n=t.attributes;n.length;)t.removeAttributeNode(n[0]);zt(t,a,l),t[St]=e,t[Dt]=l}catch(i){Ce(e,e.return,i)}}var zl=!1,ct=!1,Fc=!1,zr=typeof WeakSet=="function"?WeakSet:Set,ht=null;function Ah(e,t){if(e=e.containerInfo,vs=mu,e=Bf(e),Qu(e)){if("selectionStart"in e)var l={start:e.selectionStart,end:e.selectionEnd};else e:{l=(l=e.ownerDocument)&&l.defaultView||window;var a=l.getSelection&&l.getSelection();if(a&&a.rangeCount!==0){l=a.anchorNode;var n=a.anchorOffset,i=a.focusNode;a=a.focusOffset;try{l.nodeType,i.nodeType}catch{l=null;break e}var u=0,s=-1,o=-1,p=0,z=0,M=e,v=null;t:for(;;){for(var S;M!==l||n!==0&&M.nodeType!==3||(s=u+n),M!==i||a!==0&&M.nodeType!==3||(o=u+a),M.nodeType===3&&(u+=M.nodeValue.length),(S=M.firstChild)!==null;)v=M,M=S;for(;;){if(M===e)break t;if(v===l&&++p===n&&(s=u),v===i&&++z===a&&(o=u),(S=M.nextSibling)!==null)break;M=v,v=M.parentNode}M=S}l=s===-1||o===-1?null:{start:s,end:o}}else l=null}l=l||{start:0,end:0}}else l=null;for(bs={focusedElem:e,selectionRange:l},mu=!1,ht=t;ht!==null;)if(t=ht,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,ht=e;else for(;ht!==null;){switch(t=ht,i=t.alternate,e=t.flags,t.tag){case 0:if((e&4)!==0&&(e=t.updateQueue,e=e!==null?e.events:null,e!==null))for(l=0;l title"))),zt(i,a,l),i[St]=e,mt(i),a=i;break e;case"link":var u=Dd("link","href",n).get(a+(l.href||""));if(u){for(var s=0;sBe&&(u=Be,Be=I,I=u);var y=Uf(s,I),m=Uf(s,Be);if(y&&m&&(S.rangeCount!==1||S.anchorNode!==y.node||S.anchorOffset!==y.offset||S.focusNode!==m.node||S.focusOffset!==m.offset)){var g=M.createRange();g.setStart(y.node,y.offset),S.removeAllRanges(),I>Be?(S.addRange(g),S.extend(m.node,m.offset)):(g.setEnd(m.node,m.offset),S.addRange(g))}}}}for(M=[],S=s;S=S.parentNode;)S.nodeType===1&&M.push({element:S,left:S.scrollLeft,top:S.scrollTop});for(typeof s.focus=="function"&&s.focus(),s=0;sl?32:l,_.T=null,l=ns,ns=null;var i=Kl,u=Al;if(ot=0,ln=Kl=null,Al=0,(Me&6)!==0)throw Error(r(331));var s=Me;if(Me|=4,Br(i.current),Or(i,i.current,u,l),Me=s,Kn(0,!1),tt&&typeof tt.onPostCommitFiberRoot=="function")try{tt.onPostCommitFiberRoot(ft,i)}catch{}return!0}finally{C.p=n,_.T=a,Pr(e,t)}}function td(e,t,l){t=Wt(l,t),t=Hc(e.stateNode,t,2),e=Ll(e,t,2),e!==null&&(mn(e,2),rl(e))}function Ce(e,t,l){if(e.tag===3)td(e,e,l);else for(;t!==null;){if(t.tag===3){td(t,e,l);break}else if(t.tag===1){var a=t.stateNode;if(typeof t.type.getDerivedStateFromError=="function"||typeof a.componentDidCatch=="function"&&(Zl===null||!Zl.has(a))){e=Wt(l,e),l=lr(2),a=Ll(t,l,2),a!==null&&(ar(l,a,t,e),mn(a,2),rl(a));break}}t=t.return}}function ss(e,t,l){var a=e.pingCache;if(a===null){a=e.pingCache=new Oh;var n=new Set;a.set(t,n)}else n=a.get(t),n===void 0&&(n=new Set,a.set(t,n));n.has(l)||(es=!0,n.add(l),e=Hh.bind(null,e,t,l),t.then(e,e))}function Hh(e,t,l){var a=e.pingCache;a!==null&&a.delete(t),e.pingedLanes|=e.suspendedLanes&l,e.warmLanes&=~l,qe===e&&(ge&l)===l&&(et===4||et===3&&(ge&62914560)===ge&&300>Re()-$i?(Me&2)===0&&an(e,0):ts|=l,tn===ge&&(tn=0)),rl(e)}function ld(e,t){t===0&&(t=ci()),e=oa(e,t),e!==null&&(mn(e,t),rl(e))}function Gh(e){var t=e.memoizedState,l=0;t!==null&&(l=t.retryLane),ld(e,l)}function qh(e,t){var l=0;switch(e.tag){case 31:case 13:var a=e.stateNode,n=e.memoizedState;n!==null&&(l=n.retryLane);break;case 19:a=e.stateNode;break;case 22:a=e.stateNode._retryCache;break;default:throw Error(r(314))}a!==null&&a.delete(t),ld(e,l)}function Lh(e,t){return ae(e,t)}var lu=null,un=null,fs=!1,au=!1,os=!1,$l=0;function rl(e){e!==un&&e.next===null&&(un===null?lu=un=e:un=un.next=e),au=!0,fs||(fs=!0,Xh())}function Kn(e,t){if(!os&&au){os=!0;do for(var l=!1,a=lu;a!==null;){if(e!==0){var n=a.pendingLanes;if(n===0)var i=0;else{var u=a.suspendedLanes,s=a.pingedLanes;i=(1<<31-rt(42|e)+1)-1,i&=n&~(u&~s),i=i&201326741?i&201326741|1:i?i|2:0}i!==0&&(l=!0,ud(a,i))}else i=ge,i=dt(a,a===qe?i:0,a.cancelPendingCommit!==null||a.timeoutHandle!==-1),(i&3)===0||bt(a,i)||(l=!0,ud(a,i));a=a.next}while(l);os=!1}}function Yh(){ad()}function ad(){au=fs=!1;var e=0;$l!==0&&Ih()&&(e=$l);for(var t=Re(),l=null,a=lu;a!==null;){var n=a.next,i=nd(a,t);i===0?(a.next=null,l===null?lu=n:l.next=n,n===null&&(un=l)):(l=a,(e!==0||(i&3)!==0)&&(au=!0)),a=n}ot!==0&&ot!==5||Kn(e),$l!==0&&($l=0)}function nd(e,t){for(var l=e.suspendedLanes,a=e.pingedLanes,n=e.expirationTimes,i=e.pendingLanes&-62914561;0s)break;var z=o.transferSize,M=o.initiatorType;z&&hd(M)&&(o=o.responseEnd,u+=z*(o"u"?null:document;function Md(e,t,l){var a=cn;if(a&&typeof t=="string"&&t){var n=Jt(t);n='link[rel="'+e+'"][href="'+n+'"]',typeof l=="string"&&(n+='[crossorigin="'+l+'"]'),Td.has(n)||(Td.add(n),e={rel:e,crossOrigin:l,href:t},a.querySelector(n)===null&&(t=a.createElement("link"),zt(t,"link",e),mt(t),a.head.appendChild(t)))}}function c0(e){Dl.D(e),Md("dns-prefetch",e,null)}function s0(e,t){Dl.C(e,t),Md("preconnect",e,t)}function f0(e,t,l){Dl.L(e,t,l);var a=cn;if(a&&e&&t){var n='link[rel="preload"][as="'+Jt(t)+'"]';t==="image"&&l&&l.imageSrcSet?(n+='[imagesrcset="'+Jt(l.imageSrcSet)+'"]',typeof l.imageSizes=="string"&&(n+='[imagesizes="'+Jt(l.imageSizes)+'"]')):n+='[href="'+Jt(e)+'"]';var i=n;switch(t){case"style":i=sn(e);break;case"script":i=fn(e)}ll.has(i)||(e=U({rel:"preload",href:t==="image"&&l&&l.imageSrcSet?void 0:e,as:t},l),ll.set(i,e),a.querySelector(n)!==null||t==="style"&&a.querySelector(Fn(i))||t==="script"&&a.querySelector(In(i))||(t=a.createElement("link"),zt(t,"link",e),mt(t),a.head.appendChild(t)))}}function o0(e,t){Dl.m(e,t);var l=cn;if(l&&e){var a=t&&typeof t.as=="string"?t.as:"script",n='link[rel="modulepreload"][as="'+Jt(a)+'"][href="'+Jt(e)+'"]',i=n;switch(a){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":i=fn(e)}if(!ll.has(i)&&(e=U({rel:"modulepreload",href:e},t),ll.set(i,e),l.querySelector(n)===null)){switch(a){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(l.querySelector(In(i)))return}a=l.createElement("link"),zt(a,"link",e),mt(a),l.head.appendChild(a)}}}function r0(e,t,l){Dl.S(e,t,l);var a=cn;if(a&&e){var n=Aa(a).hoistableStyles,i=sn(e);t=t||"default";var u=n.get(i);if(!u){var s={loading:0,preload:null};if(u=a.querySelector(Fn(i)))s.loading=5;else{e=U({rel:"stylesheet",href:e,"data-precedence":t},l),(l=ll.get(i))&&Ms(e,l);var o=u=a.createElement("link");mt(o),zt(o,"link",e),o._p=new Promise(function(p,z){o.onload=p,o.onerror=z}),o.addEventListener("load",function(){s.loading|=1}),o.addEventListener("error",function(){s.loading|=2}),s.loading|=4,su(u,t,a)}u={type:"stylesheet",instance:u,count:1,state:s},n.set(i,u)}}}function d0(e,t){Dl.X(e,t);var l=cn;if(l&&e){var a=Aa(l).hoistableScripts,n=fn(e),i=a.get(n);i||(i=l.querySelector(In(n)),i||(e=U({src:e,async:!0},t),(t=ll.get(n))&&Es(e,t),i=l.createElement("script"),mt(i),zt(i,"link",e),l.head.appendChild(i)),i={type:"script",instance:i,count:1,state:null},a.set(n,i))}}function m0(e,t){Dl.M(e,t);var l=cn;if(l&&e){var a=Aa(l).hoistableScripts,n=fn(e),i=a.get(n);i||(i=l.querySelector(In(n)),i||(e=U({src:e,async:!0,type:"module"},t),(t=ll.get(n))&&Es(e,t),i=l.createElement("script"),mt(i),zt(i,"link",e),l.head.appendChild(i)),i={type:"script",instance:i,count:1,state:null},a.set(n,i))}}function Ed(e,t,l,a){var n=(n=ee.current)?cu(n):null;if(!n)throw Error(r(446));switch(e){case"meta":case"title":return null;case"style":return typeof l.precedence=="string"&&typeof l.href=="string"?(t=sn(l.href),l=Aa(n).hoistableStyles,a=l.get(t),a||(a={type:"style",instance:null,count:0,state:null},l.set(t,a)),a):{type:"void",instance:null,count:0,state:null};case"link":if(l.rel==="stylesheet"&&typeof l.href=="string"&&typeof l.precedence=="string"){e=sn(l.href);var i=Aa(n).hoistableStyles,u=i.get(e);if(u||(n=n.ownerDocument||n,u={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},i.set(e,u),(i=n.querySelector(Fn(e)))&&!i._p&&(u.instance=i,u.state.loading=5),ll.has(e)||(l={rel:"preload",as:"style",href:l.href,crossOrigin:l.crossOrigin,integrity:l.integrity,media:l.media,hrefLang:l.hrefLang,referrerPolicy:l.referrerPolicy},ll.set(e,l),i||h0(n,e,l,u.state))),t&&a===null)throw Error(r(528,""));return u}if(t&&a!==null)throw Error(r(529,""));return null;case"script":return t=l.async,l=l.src,typeof l=="string"&&t&&typeof t!="function"&&typeof t!="symbol"?(t=fn(l),l=Aa(n).hoistableScripts,a=l.get(t),a||(a={type:"script",instance:null,count:0,state:null},l.set(t,a)),a):{type:"void",instance:null,count:0,state:null};default:throw Error(r(444,e))}}function sn(e){return'href="'+Jt(e)+'"'}function Fn(e){return'link[rel="stylesheet"]['+e+"]"}function Nd(e){return U({},e,{"data-precedence":e.precedence,precedence:null})}function h0(e,t,l,a){e.querySelector('link[rel="preload"][as="style"]['+t+"]")?a.loading=1:(t=e.createElement("link"),a.preload=t,t.addEventListener("load",function(){return a.loading|=1}),t.addEventListener("error",function(){return a.loading|=2}),zt(t,"link",l),mt(t),e.head.appendChild(t))}function fn(e){return'[src="'+Jt(e)+'"]'}function In(e){return"script[async]"+e}function Ad(e,t,l){if(t.count++,t.instance===null)switch(t.type){case"style":var a=e.querySelector('style[data-href~="'+Jt(l.href)+'"]');if(a)return t.instance=a,mt(a),a;var n=U({},l,{"data-href":l.href,"data-precedence":l.precedence,href:null,precedence:null});return a=(e.ownerDocument||e).createElement("style"),mt(a),zt(a,"style",n),su(a,l.precedence,e),t.instance=a;case"stylesheet":n=sn(l.href);var i=e.querySelector(Fn(n));if(i)return t.state.loading|=4,t.instance=i,mt(i),i;a=Nd(l),(n=ll.get(n))&&Ms(a,n),i=(e.ownerDocument||e).createElement("link"),mt(i);var u=i;return u._p=new Promise(function(s,o){u.onload=s,u.onerror=o}),zt(i,"link",a),t.state.loading|=4,su(i,l.precedence,e),t.instance=i;case"script":return i=fn(l.src),(n=e.querySelector(In(i)))?(t.instance=n,mt(n),n):(a=l,(n=ll.get(i))&&(a=U({},l),Es(a,n)),e=e.ownerDocument||e,n=e.createElement("script"),mt(n),zt(n,"link",a),e.head.appendChild(n),t.instance=n);case"void":return null;default:throw Error(r(443,t.type))}else t.type==="stylesheet"&&(t.state.loading&4)===0&&(a=t.instance,t.state.loading|=4,su(a,l.precedence,e));return t.instance}function su(e,t,l){for(var a=l.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),n=a.length?a[a.length-1]:null,i=n,u=0;u title"):null)}function y0(e,t,l){if(l===1||t.itemProp!=null)return!1;switch(e){case"meta":case"title":return!0;case"style":if(typeof t.precedence!="string"||typeof t.href!="string"||t.href==="")break;return!0;case"link":if(typeof t.rel!="string"||typeof t.href!="string"||t.href===""||t.onLoad||t.onError)break;return t.rel==="stylesheet"?(e=t.disabled,typeof t.precedence=="string"&&e==null):!0;case"script":if(t.async&&typeof t.async!="function"&&typeof t.async!="symbol"&&!t.onLoad&&!t.onError&&t.src&&typeof t.src=="string")return!0}return!1}function Od(e){return!(e.type==="stylesheet"&&(e.state.loading&3)===0)}function g0(e,t,l,a){if(l.type==="stylesheet"&&(typeof a.media!="string"||matchMedia(a.media).matches!==!1)&&(l.state.loading&4)===0){if(l.instance===null){var n=sn(a.href),i=t.querySelector(Fn(n));if(i){t=i._p,t!==null&&typeof t=="object"&&typeof t.then=="function"&&(e.count++,e=ou.bind(e),t.then(e,e)),l.state.loading|=4,l.instance=i,mt(i);return}i=t.ownerDocument||t,a=Nd(a),(n=ll.get(n))&&Ms(a,n),i=i.createElement("link"),mt(i);var u=i;u._p=new Promise(function(s,o){u.onload=s,u.onerror=o}),zt(i,"link",a),l.instance=i}e.stylesheets===null&&(e.stylesheets=new Map),e.stylesheets.set(l,t),(t=l.state.preload)&&(l.state.loading&3)===0&&(e.count++,l=ou.bind(e),t.addEventListener("load",l),t.addEventListener("error",l))}}var Ns=0;function p0(e,t){return e.stylesheets&&e.count===0&&du(e,e.stylesheets),0Ns?50:800)+t);return e.unsuspend=l,function(){e.unsuspend=null,clearTimeout(a),clearTimeout(n)}}:null}function ou(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)du(this,this.stylesheets);else if(this.unsuspend){var e=this.unsuspend;this.unsuspend=null,e()}}}var ru=null;function du(e,t){e.stylesheets=null,e.unsuspend!==null&&(e.count++,ru=new Map,t.forEach(v0,e),ru=null,ou.call(e))}function v0(e,t){if(!(t.state.loading&4)){var l=ru.get(e);if(l)var a=l.get(null);else{l=new Map,ru.set(e,l);for(var n=e.querySelectorAll("link[data-precedence],style[data-precedence]"),i=0;i"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(f)}catch(b){console.error(b)}}return f(),Hs.exports=B0(),Hs.exports}var H0=R0();const G0=fm(H0);const om=(...f)=>f.filter((b,E,r)=>!!b&&b.trim()!==""&&r.indexOf(b)===E).join(" ").trim();const q0=f=>f.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase();const L0=f=>f.replace(/^([A-Z])|[\s-_]+(\w)/g,(b,E,r)=>r?r.toUpperCase():E.toLowerCase());const lm=f=>{const b=L0(f);return b.charAt(0).toUpperCase()+b.slice(1)};var Ys={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"};const Y0=f=>{for(const b in f)if(b.startsWith("aria-")||b==="role"||b==="title")return!0;return!1},X0=O.createContext({}),k0=()=>O.useContext(X0),Q0=O.forwardRef(({color:f,size:b,strokeWidth:E,absoluteStrokeWidth:r,className:x="",children:N,iconNode:G,...H},w)=>{const{size:h=24,strokeWidth:A=2,absoluteStrokeWidth:U=!1,color:V="currentColor",className:fe=""}=k0()??{},k=r??U?Number(E??A)*24/Number(b??h):E??A;return O.createElement("svg",{ref:w,...Ys,width:b??h??Ys.width,height:b??h??Ys.height,stroke:f??V,strokeWidth:k,className:om("lucide",fe,x),...!N&&!Y0(H)&&{"aria-hidden":"true"},...H},[...G.map(([L,te])=>O.createElement(L,te)),...Array.isArray(N)?N:[N]])});const Ve=(f,b)=>{const E=O.forwardRef(({className:r,...x},N)=>O.createElement(Q0,{ref:N,iconNode:b,className:om(`lucide-${q0(lm(f))}`,`lucide-${f}`,r),...x}));return E.displayName=lm(f),E};const V0=[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]],Xs=Ve("check",V0);const Z0=[["path",{d:"M12 13v8l-4-4",key:"1f5nwf"}],["path",{d:"m12 21 4-4",key:"1lfcce"}],["path",{d:"M4.393 15.269A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.436 8.284",key:"ui1hmy"}]],am=Ve("cloud-download",Z0);const K0=[["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"}]],J0=Ve("copy",K0);const $0=[["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M17 20v2",key:"1rnc9c"}],["path",{d:"M17 2v2",key:"11trls"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M2 17h2",key:"7oei6x"}],["path",{d:"M2 7h2",key:"asdhe0"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"M20 17h2",key:"1fpfkl"}],["path",{d:"M20 7h2",key:"1o8tra"}],["path",{d:"M7 20v2",key:"4gnj0m"}],["path",{d:"M7 2v2",key:"1i4yhu"}],["rect",{x:"4",y:"4",width:"16",height:"16",rx:"2",key:"1vbyd7"}],["rect",{x:"8",y:"8",width:"8",height:"8",rx:"1",key:"z9xiuo"}]],rm=Ve("cpu",$0);const W0=[["path",{d:"M6 2v14a2 2 0 0 0 2 2h14",key:"ron5a4"}],["path",{d:"M18 22V8a2 2 0 0 0-2-2H2",key:"7s9ehn"}]],F0=Ve("crop",W0);const I0=[["ellipse",{cx:"12",cy:"5",rx:"9",ry:"3",key:"msslwz"}],["path",{d:"M3 5V19A9 3 0 0 0 21 19V5",key:"1wlel7"}],["path",{d:"M3 12A9 3 0 0 0 21 12",key:"mv7ke4"}]],ks=Ve("database",I0);const P0=[["path",{d:"M12 15V3",key:"m9g1x1"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["path",{d:"m7 10 5 5 5-5",key:"brsn70"}]],nm=Ve("download",P0);const ey=[["path",{d:"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z",key:"1kt360"}],["path",{d:"M12 10v6",key:"1bos4e"}],["path",{d:"m15 13-3 3-3-3",key:"6j2sf0"}]],ty=Ve("folder-down",ey);const ly=[["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"}]],im=Ve("folder-open",ly);const ay=[["path",{d:"M10 16h.01",key:"1bzywj"}],["path",{d:"M2.212 11.577a2 2 0 0 0-.212.896V18a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-5.527a2 2 0 0 0-.212-.896L18.55 5.11A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z",key:"18tbho"}],["path",{d:"M21.946 12.013H2.054",key:"zqlbp7"}],["path",{d:"M6 16h.01",key:"1pmjb7"}]],xu=Ve("hard-drive",ay);const ny=[["path",{d:"M16 5h6",key:"1vod17"}],["path",{d:"M19 2v6",key:"4bpg5p"}],["path",{d:"M21 11.5V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h7.5",key:"1ue2ih"}],["path",{d:"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21",key:"1xmnt7"}],["circle",{cx:"9",cy:"9",r:"2",key:"af1f0g"}]],iy=Ve("image-plus",ny);const uy=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2",key:"1m3agn"}],["circle",{cx:"9",cy:"9",r:"2",key:"af1f0g"}],["path",{d:"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21",key:"1xmnt7"}]],cy=Ve("image",uy);const sy=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 16v-4",key:"1dtifu"}],["path",{d:"M12 8h.01",key:"e9boi3"}]],fy=Ve("info",sy);const oy=[["path",{d:"m16 6 4 14",key:"ji33uf"}],["path",{d:"M12 6v14",key:"1n7gus"}],["path",{d:"M8 8v12",key:"1gg7y9"}],["path",{d:"M4 4v16",key:"6qkkli"}]],ry=Ve("library",oy);const dy=[["path",{d:"M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401",key:"kfwtm"}]],my=Ve("moon",dy);const hy=[["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"}]],aa=Ve("refresh-cw",hy);const yy=[["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"}]],gy=Ve("shield",yy);const py=[["path",{d:"M10 8h4",key:"1sr2af"}],["path",{d:"M12 21v-9",key:"17s77i"}],["path",{d:"M12 8V3",key:"13r4qs"}],["path",{d:"M17 16h4",key:"h1uq16"}],["path",{d:"M19 12V3",key:"o1uvq1"}],["path",{d:"M19 21v-5",key:"qua636"}],["path",{d:"M3 14h4",key:"bcjad9"}],["path",{d:"M5 10V3",key:"cb8scm"}],["path",{d:"M5 21v-7",key:"1w1uti"}]],Ks=Ve("sliders-vertical",py);const vy=[["path",{d:"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z",key:"1s2grr"}],["path",{d:"M20 2v4",key:"1rf3ol"}],["path",{d:"M22 4h-4",key:"gwowj6"}],["circle",{cx:"4",cy:"20",r:"2",key:"6kqj1y"}]],Su=Ve("sparkles",vy);const by=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}]],Qs=Ve("square",by);const Sy=[["circle",{cx:"12",cy:"12",r:"4",key:"4exip2"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"m4.93 4.93 1.41 1.41",key:"149t6j"}],["path",{d:"m17.66 17.66 1.41 1.41",key:"ptbguv"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"m6.34 17.66-1.41 1.41",key:"1m8zz5"}],["path",{d:"m19.07 4.93-1.41 1.41",key:"1shlcs"}]],xy=Ve("sun",Sy);const _y=[["path",{d:"M12 19h8",key:"baeox8"}],["path",{d:"m4 17 6-6-6-6",key:"1yngyt"}]],jy=Ve("terminal",_y);const zy=[["path",{d:"M10 11v6",key:"nco0om"}],["path",{d:"M14 11v6",key:"outv1u"}],["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]],rn=Ve("trash-2",zy);const Ty=[["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"}]],My=Ve("triangle-alert",Ty);function Ey({activeTab:f,setActiveTab:b,specs:E}){return c.jsxs("div",{className:"sidebar",children:[c.jsxs("div",{children:[c.jsxs("div",{className:"sidebar-logo",children:[c.jsx(gy,{className:"sidebar-logo-icon"}),c.jsx("span",{className:"sidebar-logo-text",children:"Local AI Studio"})]}),c.jsxs("div",{className:"nav-list",children:[c.jsxs("div",{className:`nav-item ${f==="generator"?"active":""}`,onClick:()=>b("generator"),children:[c.jsx(cy,{size:20}),c.jsx("span",{children:"Image Generator"})]}),c.jsxs("div",{className:`nav-item ${f==="models"?"active":""}`,onClick:()=>b("models"),children:[c.jsx(ty,{size:20}),c.jsx("span",{children:"Model Manager"})]}),c.jsxs("div",{className:`nav-item ${f==="constraints"?"active":""}`,onClick:()=>b("constraints"),children:[c.jsx(Ks,{size:20}),c.jsx("span",{children:"Image Constraints"})]})]})]}),c.jsxs("div",{className:"sidebar-footer",children:[c.jsxs("div",{className:"sidebar-specs-header",children:[c.jsx(jy,{size:12}),c.jsx("span",{children:"Host Specifications"})]}),c.jsxs("div",{className:"sidebar-specs-item",title:E.cpu_name,children:["CPU: ",E.cpu_name]}),c.jsxs("div",{className:"sidebar-specs-item",title:E.gpu_name,children:["GPU: ",E.gpu_name]}),c.jsxs("div",{className:"sidebar-specs-item",children:["Memory: ",E.ram_total_gb.toFixed(0)," GB RAM (",E.cpu_cores_physical," Cores)"]}),c.jsxs("div",{className:"sidebar-specs-os",children:["OS: ",E.os_name]})]})]})}const Ny=O.memo(Ey);function Ay({telemetry:f,serverRunning:b,activeModel:E,onStopServer:r,isStoppingServer:x=!1,theme:N,setTheme:G}){const H=A=>{const U=Number(A);return Number.isFinite(U)&&U>0?U.toFixed(U>=10?0:1):"--"},w=()=>b?"Server Active":"Local Mode",h=()=>b?"status-indicator busy":"status-indicator offline";return c.jsxs("div",{className:"top-status-bar",children:[c.jsxs("div",{className:"current-model-info",children:[c.jsx("div",{className:h()}),c.jsx("span",{style:{fontWeight:600,fontSize:"0.95rem"},children:w()}),E&&c.jsxs(c.Fragment,{children:[c.jsx("span",{style:{color:"var(--md-sys-color-outline-variant)"},children:"|"}),c.jsx("span",{style:{color:"var(--md-sys-color-primary)",fontWeight:700},children:E})]})]}),c.jsxs("div",{className:"telemetry-group",children:[c.jsx("button",{className:"theme-toggle-btn",onClick:()=>G(N==="dark"?"light":"dark"),title:`Switch to ${N==="dark"?"light":"dark"} theme`,children:N==="dark"?c.jsx(xy,{size:18}):c.jsx(my,{size:18})}),b&&c.jsxs("button",{className:"m3-btn m3-btn-error",style:{height:"34px",padding:"0 14px"},onClick:r,disabled:x,title:"Stop local model server",children:[x?c.jsx(aa,{className:"progress-spinner",size:14}):c.jsx(Qs,{size:14}),c.jsx("span",{children:x?"Stopping":"Stop Server"})]}),c.jsxs("div",{className:"telemetry-chip",title:"CPU Utilization",children:[c.jsx(rm,{className:"telemetry-chip-icon",style:{color:"var(--md-sys-color-primary)"}}),c.jsxs("span",{children:["CPU: ",Number.isFinite(Number(f.cpu_usage))?f.cpu_usage:"--","%"]})]}),c.jsxs("div",{className:"telemetry-chip",title:"System Memory Usage",children:[c.jsx(xu,{className:"telemetry-chip-icon",style:{color:"var(--md-sys-color-secondary)"}}),c.jsxs("span",{children:["RAM: ",H(f.ram_used_gb)," / ",H(f.ram_total_gb)," GB"]})]}),f.vram_total_gb>0&&c.jsxs("div",{className:"telemetry-chip",title:`${f.gpu_name} VRAM`,children:[c.jsx(ks,{className:"telemetry-chip-icon",style:{color:"var(--md-sys-color-tertiary)"}}),c.jsxs("span",{children:["VRAM: ",H(f.vram_used_gb)," / ",H(f.vram_total_gb)," GB"]})]})]})]})}const Dy=O.memo(Ay),Cy="modulepreload",Oy=function(f){return"/"+f},um={},Uy=function(b,E,r){let x=Promise.resolve();if(E&&E.length>0){let w=function(h){return Promise.all(h.map(A=>Promise.resolve(A).then(U=>({status:"fulfilled",value:U}),U=>({status:"rejected",reason:U}))))};document.getElementsByTagName("link");const G=document.querySelector("meta[property=csp-nonce]"),H=G?.nonce||G?.getAttribute("nonce");x=w(E.map(h=>{if(h=Oy(h),h in um)return;um[h]=!0;const A=h.endsWith(".css"),U=A?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${h}"]${U}`))return;const V=document.createElement("link");if(V.rel=A?"stylesheet":Cy,A||(V.as="script"),V.crossOrigin="",V.href=h,H&&V.setAttribute("nonce",H),document.head.appendChild(V),A)return new Promise((fe,k)=>{V.addEventListener("load",fe),V.addEventListener("error",()=>k(new Error(`Unable to preload CSS for ${h}`)))})}))}function N(G){const H=new Event("vite:preloadError",{cancelable:!0});if(H.payload=G,window.dispatchEvent(H),!H.defaultPrevented)throw G}return x.then(G=>{for(const H of G||[])H.status==="rejected"&&N(H.reason);return b().catch(N)})};function rg(f,b=!1){return window.__TAURI_INTERNALS__.transformCallback(f,b)}async function ja(f,b={},E){return window.__TAURI_INTERNALS__.invoke(f,b,E)}const ia=()=>typeof window<"u"&&window.__TAURI_INTERNALS__!==void 0;let la=null,_u=null;const wy="polish-setup-v1",na=()=>typeof window<"u"&&(window.location.hostname==="localhost"||window.location.hostname==="127.0.0.1");async function dm(){if(na())try{const f=await Cl(),b=Number(f?.port);if(Number.isInteger(b)&&b>0)return _u=b,b}catch{}return _u||8080}async function mm(){return`http://127.0.0.1:${await dm()}`}function ii(f){const b=Number(f)||0;if(b<=0)return"0 B";const E=["B","KB","MB","GB","TB"],r=Math.min(E.length-1,Math.floor(Math.log(b)/Math.log(1024)));return`${(b/1024**r).toFixed(r===0?0:1)} ${E[r]}`}function ui(f){return typeof f=="string"?{filename:f,sizeBytes:0,size:"Unknown"}:{filename:f?.filename||f?.name||"",sizeBytes:Number(f?.sizeBytes||0),size:f?.size||(f?.sizeBytes?ii(f.sizeBytes):"Unknown")}}async function dn(f,b="The local server returned an invalid response."){const E=await f.text();let r={};try{r=JSON.parse(E||"{}")}catch{const N=E.trim().startsWith("0&&(_u=Number(G.port)),console.log("Backend restart:",G.message),G.message}catch(x){if(console.warn("Could not reach management API:",x.message),na())throw x;return"Backend management unavailable"}}async function Js(){if(ia())return await ja("stop_server");try{await fetch("/api/stop-backend",{method:"POST"})}catch{}return"Backend stopped"}async function Cl(){try{return await(await fetch("/api/backend-status")).json()}catch{return{ready:!1,settings:{}}}}async function ky(){try{return(await(await fetch("/api/outputs")).json()).outputs||[]}catch{return[]}}async function Qy(f,b){const E=await fetch("/api/save-output",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({image:f,metadata:b})});return(await dn(E,"The local server returned an invalid save response.")).output}async function Vy(f){const b=await fetch("/api/delete-outputs",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({outputs:f})});return await dn(b,"The local server returned an invalid delete response.")}async function Zy(){try{return((await(await fetch("/api/models")).json()).models||[]).map(ui)}catch{return[]}}async function Ky(f,b,E,r,x,N,G){console.log("Initiating image generation:",{prompt:f,negativePrompt:b,constraints:E,activeModelName:r});const H=Date.now(),w=await mm(),h={prompt:f,negative_prompt:b||"",width:E.width||512,height:E.height||512,steps:E.steps||20,cfg_scale:E.cfgScale||7,seed:E.seed===-1?Math.floor(Math.random()*1e6):E.seed,sampler:E.sampler||"euler_a",image:x||null,denoising_strength:E.denoisingStrength||.7},A=async()=>{const k=h.steps;for(let Ke=1;Ke<=k;Ke++){if(G&&G.aborted)throw new DOMException("The user aborted a request.","AbortError");await new Promise(yt=>setTimeout(yt,3e3/k)),N&&N(Math.round(Ke/k*100))}const L=f.toLowerCase(),te=Math.abs(h.seed)||Math.floor(Math.random()*1e3);let W="#3B82F6",Oe="#8B5CF6",de="",Ee="Abstract Generation";L.includes("moon")||L.includes("space")||L.includes("astronomy")||L.includes("sky")?(W="#1E293B",Oe="#0F172A",Ee="Luminous Moon in Starry Sky",de=` +`+a.stack}}var F=Object.prototype.hasOwnProperty,ae=f.unstable_scheduleCallback,At=f.unstable_cancelCallback,Gt=f.unstable_shouldYield,dl=f.unstable_requestPaint,Re=f.unstable_now,al=f.unstable_getCurrentPriorityLevel,Fe=f.unstable_ImmediatePriority,za=f.unstable_UserBlockingPriority,Ta=f.unstable_NormalPriority,Y=f.unstable_LowPriority,ye=f.unstable_IdlePriority,He=f.log,pt=f.unstable_setDisableYieldValue,ft=null,tt=null;function qt(e){if(typeof He=="function"&&pt(e),tt&&typeof tt.setStrictMode=="function")try{tt.setStrictMode(ft,e)}catch{}}var rt=Math.clz32?Math.clz32:xe,vt=Math.log,Se=Math.LN2;function xe(e){return e>>>=0,e===0?32:31-(vt(e)/Se|0)|0}var Ge=256,_e=262144,Ie=4194304;function je(e){var t=e&42;if(t!==0)return t;switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return e&261888;case 262144:case 524288:case 1048576:case 2097152:return e&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return e&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return e}}function dt(e,t,l){var a=e.pendingLanes;if(a===0)return 0;var n=0,i=e.suspendedLanes,u=e.pingedLanes;e=e.warmLanes;var s=a&134217727;return s!==0?(a=s&~i,a!==0?n=je(a):(u&=s,u!==0?n=je(u):l||(l=s&~e,l!==0&&(n=je(l))))):(s=a&~i,s!==0?n=je(s):u!==0?n=je(u):l||(l=a&~e,l!==0&&(n=je(l)))),n===0?0:t!==0&&t!==n&&(t&i)===0&&(i=n&-n,l=t&-t,i>=l||i===32&&(l&4194048)!==0)?t:n}function bt(e,t){return(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&t)===0}function cl(e,t){switch(e){case 1:case 2:case 4:case 8:case 64:return t+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function ci(){var e=Ie;return Ie<<=1,(Ie&62914560)===0&&(Ie=4194304),e}function ju(e){for(var t=[],l=0;31>l;l++)t.push(e);return t}function mn(e,t){e.pendingLanes|=t,t!==268435456&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function ym(e,t,l,a,n,i){var u=e.pendingLanes;e.pendingLanes=l,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=l,e.entangledLanes&=l,e.errorRecoveryDisabledLanes&=l,e.shellSuspendCounter=0;var s=e.entanglements,o=e.expirationTimes,p=e.hiddenUpdates;for(l=u&~l;0"u")return null;try{return e.activeElement||e.body}catch{return e.body}}var xm=/[\n"\\]/g;function Jt(e){return e.replace(xm,function(t){return"\\"+t.charCodeAt(0).toString(16)+" "})}function Au(e,t,l,a,n,i,u,s){e.name="",u!=null&&typeof u!="function"&&typeof u!="symbol"&&typeof u!="boolean"?e.type=u:e.removeAttribute("type"),t!=null?u==="number"?(t===0&&e.value===""||e.value!=t)&&(e.value=""+Kt(t)):e.value!==""+Kt(t)&&(e.value=""+Kt(t)):u!=="submit"&&u!=="reset"||e.removeAttribute("value"),t!=null?Du(e,u,Kt(t)):l!=null?Du(e,u,Kt(l)):a!=null&&e.removeAttribute("value"),n==null&&i!=null&&(e.defaultChecked=!!i),n!=null&&(e.checked=n&&typeof n!="function"&&typeof n!="symbol"),s!=null&&typeof s!="function"&&typeof s!="symbol"&&typeof s!="boolean"?e.name=""+Kt(s):e.removeAttribute("name")}function sf(e,t,l,a,n,i,u,s){if(i!=null&&typeof i!="function"&&typeof i!="symbol"&&typeof i!="boolean"&&(e.type=i),t!=null||l!=null){if(!(i!=="submit"&&i!=="reset"||t!=null)){Nu(e);return}l=l!=null?""+Kt(l):"",t=t!=null?""+Kt(t):l,s||t===e.value||(e.value=t),e.defaultValue=t}a=a??n,a=typeof a!="function"&&typeof a!="symbol"&&!!a,e.checked=s?e.checked:!!a,e.defaultChecked=!!a,u!=null&&typeof u!="function"&&typeof u!="symbol"&&typeof u!="boolean"&&(e.name=u),Nu(e)}function Du(e,t,l){t==="number"&&oi(e.ownerDocument)===e||e.defaultValue===""+l||(e.defaultValue=""+l)}function Ca(e,t,l,a){if(e=e.options,t){t={};for(var n=0;n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Bu=!1;if(yl)try{var pn={};Object.defineProperty(pn,"passive",{get:function(){Bu=!0}}),window.addEventListener("test",pn,pn),window.removeEventListener("test",pn,pn)}catch{Bu=!1}var Ul=null,Ru=null,di=null;function yf(){if(di)return di;var e,t=Ru,l=t.length,a,n="value"in Ul?Ul.value:Ul.textContent,i=n.length;for(e=0;e=Sn),xf=" ",_f=!1;function jf(e,t){switch(e){case"keyup":return $m.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function zf(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var Ba=!1;function Fm(e,t){switch(e){case"compositionend":return zf(t);case"keypress":return t.which!==32?null:(_f=!0,xf);case"textInput":return e=t.data,e===xf&&_f?null:e;default:return null}}function Im(e,t){if(Ba)return e==="compositionend"||!Yu&&jf(e,t)?(e=yf(),di=Ru=Ul=null,Ba=!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:l,offset:t-e};e=a}e:{for(;l;){if(l.nextSibling){l=l.nextSibling;break e}l=l.parentNode}l=void 0}l=Of(l)}}function wf(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?wf(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function Bf(e){e=e!=null&&e.ownerDocument!=null&&e.ownerDocument.defaultView!=null?e.ownerDocument.defaultView:window;for(var t=oi(e.document);t instanceof e.HTMLIFrameElement;){try{var l=typeof t.contentWindow.location.href=="string"}catch{l=!1}if(l)e=t.contentWindow;else break;t=oi(e.document)}return t}function Qu(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}var uh=yl&&"documentMode"in document&&11>=document.documentMode,Ra=null,Vu=null,zn=null,Zu=!1;function Rf(e,t,l){var a=l.window===l?l.document:l.nodeType===9?l:l.ownerDocument;Zu||Ra==null||Ra!==oi(a)||(a=Ra,"selectionStart"in a&&Qu(a)?a={start:a.selectionStart,end:a.selectionEnd}:(a=(a.ownerDocument&&a.ownerDocument.defaultView||window).getSelection(),a={anchorNode:a.anchorNode,anchorOffset:a.anchorOffset,focusNode:a.focusNode,focusOffset:a.focusOffset}),zn&&jn(zn,a)||(zn=a,a=iu(Vu,"onSelect"),0>=u,n-=u,sl=1<<32-rt(t)+n|l<ue?(pe=Q,Q=null):pe=Q.sibling;var Te=v(y,Q,g[ue],T);if(Te===null){Q===null&&(Q=pe);break}e&&Q&&Te.alternate===null&&t(y,Q),m=i(Te,m,ue),ze===null?$=Te:ze.sibling=Te,ze=Te,Q=pe}if(ue===g.length)return l(y,Q),be&&pl(y,ue),$;if(Q===null){for(;ueue?(pe=Q,Q=null):pe=Q.sibling;var ta=v(y,Q,Te.value,T);if(ta===null){Q===null&&(Q=pe);break}e&&Q&&ta.alternate===null&&t(y,Q),m=i(ta,m,ue),ze===null?$=ta:ze.sibling=ta,ze=ta,Q=pe}if(Te.done)return l(y,Q),be&&pl(y,ue),$;if(Q===null){for(;!Te.done;ue++,Te=g.next())Te=M(y,Te.value,T),Te!==null&&(m=i(Te,m,ue),ze===null?$=Te:ze.sibling=Te,ze=Te);return be&&pl(y,ue),$}for(Q=a(Q);!Te.done;ue++,Te=g.next())Te=S(Q,y,ue,Te.value,T),Te!==null&&(e&&Te.alternate!==null&&Q.delete(Te.key===null?ue:Te.key),m=i(Te,m,ue),ze===null?$=Te:ze.sibling=Te,ze=Te);return e&&Q.forEach(function(M0){return t(y,M0)}),be&&pl(y,ue),$}function Be(y,m,g,T){if(typeof g=="object"&&g!==null&&g.type===L&&g.key===null&&(g=g.props.children),typeof g=="object"&&g!==null){switch(g.$$typeof){case fe:e:{for(var $=g.key;m!==null;){if(m.key===$){if($=g.type,$===L){if(m.tag===7){l(y,m.sibling),T=n(m,g.props.children),T.return=y,y=T;break e}}else if(m.elementType===$||typeof $=="object"&&$!==null&&$.$$typeof===ve&&ga($)===m.type){l(y,m.sibling),T=n(m,g.props),Dn(T,g),T.return=y,y=T;break e}l(y,m);break}else t(y,m);m=m.sibling}g.type===L?(T=ra(g.props.children,y.mode,T,g.key),T.return=y,y=T):(T=_i(g.type,g.key,g.props,null,y.mode,T),Dn(T,g),T.return=y,y=T)}return u(y);case X:e:{for($=g.key;m!==null;){if(m.key===$)if(m.tag===4&&m.stateNode.containerInfo===g.containerInfo&&m.stateNode.implementation===g.implementation){l(y,m.sibling),T=n(m,g.children||[]),T.return=y,y=T;break e}else{l(y,m);break}else t(y,m);m=m.sibling}T=Pu(g,y.mode,T),T.return=y,y=T}return u(y);case ve:return g=ga(g),Be(y,m,g,T)}if(Xe(g))return k(y,m,g,T);if(Je(g)){if($=Je(g),typeof $!="function")throw Error(r(150));return g=$.call(g),I(y,m,g,T)}if(typeof g.then=="function")return Be(y,m,Ai(g),T);if(g.$$typeof===de)return Be(y,m,Ti(y,g),T);Di(y,g)}return typeof g=="string"&&g!==""||typeof g=="number"||typeof g=="bigint"?(g=""+g,m!==null&&m.tag===6?(l(y,m.sibling),T=n(m,g),T.return=y,y=T):(l(y,m),T=Iu(g,y.mode,T),T.return=y,y=T),u(y)):l(y,m)}return function(y,m,g,T){try{An=0;var $=Be(y,m,g,T);return Ka=null,$}catch(Q){if(Q===Za||Q===Ei)throw Q;var ze=Yt(29,Q,null,y.mode);return ze.lanes=T,ze.return=y,ze}}}var va=io(!0),uo=io(!1),Gl=!1;function rc(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function dc(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,callbacks:null})}function ql(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function Ll(e,t,l){var a=e.updateQueue;if(a===null)return null;if(a=a.shared,(Me&2)!==0){var n=a.pending;return n===null?t.next=t:(t.next=n.next,n.next=t),a.pending=t,t=xi(e),Xf(e,null,l),t}return Si(e,a,t,l),xi(e)}function Cn(e,t,l){if(t=t.updateQueue,t!==null&&(t=t.shared,(l&4194048)!==0)){var a=t.lanes;a&=e.pendingLanes,l|=a,t.lanes=l,Ws(e,l)}}function mc(e,t){var l=e.updateQueue,a=e.alternate;if(a!==null&&(a=a.updateQueue,l===a)){var n=null,i=null;if(l=l.firstBaseUpdate,l!==null){do{var u={lane:l.lane,tag:l.tag,payload:l.payload,callback:null,next:null};i===null?n=i=u:i=i.next=u,l=l.next}while(l!==null);i===null?n=i=t:i=i.next=t}else n=i=t;l={baseState:a.baseState,firstBaseUpdate:n,lastBaseUpdate:i,shared:a.shared,callbacks:a.callbacks},e.updateQueue=l;return}e=l.lastBaseUpdate,e===null?l.firstBaseUpdate=t:e.next=t,l.lastBaseUpdate=t}var hc=!1;function On(){if(hc){var e=Va;if(e!==null)throw e}}function Un(e,t,l,a){hc=!1;var n=e.updateQueue;Gl=!1;var i=n.firstBaseUpdate,u=n.lastBaseUpdate,s=n.shared.pending;if(s!==null){n.shared.pending=null;var o=s,p=o.next;o.next=null,u===null?i=p:u.next=p,u=o;var z=e.alternate;z!==null&&(z=z.updateQueue,s=z.lastBaseUpdate,s!==u&&(s===null?z.firstBaseUpdate=p:s.next=p,z.lastBaseUpdate=o))}if(i!==null){var M=n.baseState;u=0,z=p=o=null,s=i;do{var v=s.lane&-536870913,S=v!==s.lane;if(S?(ge&v)===v:(a&v)===v){v!==0&&v===Qa&&(hc=!0),z!==null&&(z=z.next={lane:0,tag:s.tag,payload:s.payload,callback:null,next:null});e:{var k=e,I=s;v=t;var Be=l;switch(I.tag){case 1:if(k=I.payload,typeof k=="function"){M=k.call(Be,M,v);break e}M=k;break e;case 3:k.flags=k.flags&-65537|128;case 0:if(k=I.payload,v=typeof k=="function"?k.call(Be,M,v):k,v==null)break e;M=U({},M,v);break e;case 2:Gl=!0}}v=s.callback,v!==null&&(e.flags|=64,S&&(e.flags|=8192),S=n.callbacks,S===null?n.callbacks=[v]:S.push(v))}else S={lane:v,tag:s.tag,payload:s.payload,callback:s.callback,next:null},z===null?(p=z=S,o=M):z=z.next=S,u|=v;if(s=s.next,s===null){if(s=n.shared.pending,s===null)break;S=s,s=S.next,S.next=null,n.lastBaseUpdate=S,n.shared.pending=null}}while(!0);z===null&&(o=M),n.baseState=o,n.firstBaseUpdate=p,n.lastBaseUpdate=z,i===null&&(n.shared.lanes=0),Vl|=u,e.lanes=u,e.memoizedState=M}}function co(e,t){if(typeof e!="function")throw Error(r(191,e));e.call(t)}function so(e,t){var l=e.callbacks;if(l!==null)for(e.callbacks=null,e=0;ei?i:8;var u=_.T,s={};_.T=s,Uc(e,!1,t,l);try{var o=n(),p=_.S;if(p!==null&&p(s,o),o!==null&&typeof o=="object"&&typeof o.then=="function"){var z=yh(o,a);Rn(e,t,z,Zt(e))}else Rn(e,t,a,Zt(e))}catch(M){Rn(e,t,{then:function(){},status:"rejected",reason:M},Zt())}finally{C.p=i,u!==null&&s.types!==null&&(u.types=s.types),_.T=u}}function xh(){}function Cc(e,t,l,a){if(e.tag!==5)throw Error(r(476));var n=Yo(e).queue;Lo(e,n,t,J,l===null?xh:function(){return ko(e),l(a)})}function Yo(e){var t=e.memoizedState;if(t!==null)return t;t={memoizedState:J,baseState:J,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:xl,lastRenderedState:J},next:null};var l={};return t.next={memoizedState:l,baseState:l,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:xl,lastRenderedState:l},next:null},e.memoizedState=t,e=e.alternate,e!==null&&(e.memoizedState=t),t}function ko(e){var t=Yo(e);t.next===null&&(t=e.alternate.memoizedState),Rn(e,t.next.queue,{},Zt())}function Oc(){return _t(Pn)}function Xo(){return at().memoizedState}function Qo(){return at().memoizedState}function _h(e){for(var t=e.return;t!==null;){switch(t.tag){case 24:case 3:var l=Zt();e=ql(l);var a=Ll(t,e,l);a!==null&&(Rt(a,t,l),Cn(a,t,l)),t={cache:cc()},e.payload=t;return}t=t.return}}function jh(e,t,l){var a=Zt();l={lane:a,revertLane:0,gesture:null,action:l,hasEagerState:!1,eagerState:null,next:null},Li(e)?Zo(t,l):(l=Wu(e,t,l,a),l!==null&&(Rt(l,e,a),Ko(l,t,a)))}function Vo(e,t,l){var a=Zt();Rn(e,t,l,a)}function Rn(e,t,l,a){var n={lane:a,revertLane:0,gesture:null,action:l,hasEagerState:!1,eagerState:null,next:null};if(Li(e))Zo(t,n);else{var i=e.alternate;if(e.lanes===0&&(i===null||i.lanes===0)&&(i=t.lastRenderedReducer,i!==null))try{var u=t.lastRenderedState,s=i(u,l);if(n.hasEagerState=!0,n.eagerState=s,Lt(s,u))return Si(e,t,n,0),qe===null&&bi(),!1}catch{}if(l=Wu(e,t,n,a),l!==null)return Rt(l,e,a),Ko(l,t,a),!0}return!1}function Uc(e,t,l,a){if(a={lane:2,revertLane:rs(),gesture:null,action:a,hasEagerState:!1,eagerState:null,next:null},Li(e)){if(t)throw Error(r(479))}else t=Wu(e,l,a,2),t!==null&&Rt(t,e,2)}function Li(e){var t=e.alternate;return e===ne||t!==null&&t===ne}function Zo(e,t){$a=Ui=!0;var l=e.pending;l===null?t.next=t:(t.next=l.next,l.next=t),e.pending=t}function Ko(e,t,l){if((l&4194048)!==0){var a=t.lanes;a&=e.pendingLanes,l|=a,t.lanes=l,Ws(e,l)}}var Hn={readContext:_t,use:Ri,useCallback:Pe,useContext:Pe,useEffect:Pe,useImperativeHandle:Pe,useLayoutEffect:Pe,useInsertionEffect:Pe,useMemo:Pe,useReducer:Pe,useRef:Pe,useState:Pe,useDebugValue:Pe,useDeferredValue:Pe,useTransition:Pe,useSyncExternalStore:Pe,useId:Pe,useHostTransitionStatus:Pe,useFormState:Pe,useActionState:Pe,useOptimistic:Pe,useMemoCache:Pe,useCacheRefresh:Pe};Hn.useEffectEvent=Pe;var Jo={readContext:_t,use:Ri,useCallback:function(e,t){return Nt().memoizedState=[e,t===void 0?null:t],e},useContext:_t,useEffect:Co,useImperativeHandle:function(e,t,l){l=l!=null?l.concat([e]):null,Gi(4194308,4,Bo.bind(null,t,e),l)},useLayoutEffect:function(e,t){return Gi(4194308,4,e,t)},useInsertionEffect:function(e,t){Gi(4,2,e,t)},useMemo:function(e,t){var l=Nt();t=t===void 0?null:t;var a=e();if(ba){qt(!0);try{e()}finally{qt(!1)}}return l.memoizedState=[a,t],a},useReducer:function(e,t,l){var a=Nt();if(l!==void 0){var n=l(t);if(ba){qt(!0);try{l(t)}finally{qt(!1)}}}else n=t;return a.memoizedState=a.baseState=n,e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:n},a.queue=e,e=e.dispatch=jh.bind(null,ne,e),[a.memoizedState,e]},useRef:function(e){var t=Nt();return e={current:e},t.memoizedState=e},useState:function(e){e=Mc(e);var t=e.queue,l=Vo.bind(null,ne,t);return t.dispatch=l,[e.memoizedState,l]},useDebugValue:Ac,useDeferredValue:function(e,t){var l=Nt();return Dc(l,e,t)},useTransition:function(){var e=Mc(!1);return e=Lo.bind(null,ne,e.queue,!0,!1),Nt().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,t,l){var a=ne,n=Nt();if(be){if(l===void 0)throw Error(r(407));l=l()}else{if(l=t(),qe===null)throw Error(r(349));(ge&127)!==0||yo(a,t,l)}n.memoizedState=l;var i={value:l,getSnapshot:t};return n.queue=i,Co(po.bind(null,a,i,e),[e]),a.flags|=2048,Fa(9,{destroy:void 0},go.bind(null,a,i,l,t),null),l},useId:function(){var e=Nt(),t=qe.identifierPrefix;if(be){var l=fl,a=sl;l=(a&~(1<<32-rt(a)-1)).toString(32)+l,t="_"+t+"R_"+l,l=wi++,0<\/script>",i=i.removeChild(i.firstChild);break;case"select":i=typeof a.is=="string"?u.createElement("select",{is:a.is}):u.createElement("select"),a.multiple?i.multiple=!0:a.size&&(i.size=a.size);break;default:i=typeof a.is=="string"?u.createElement(n,{is:a.is}):u.createElement(n)}}i[St]=t,i[Dt]=a;e:for(u=t.child;u!==null;){if(u.tag===5||u.tag===6)i.appendChild(u.stateNode);else if(u.tag!==4&&u.tag!==27&&u.child!==null){u.child.return=u,u=u.child;continue}if(u===t)break e;for(;u.sibling===null;){if(u.return===null||u.return===t)break e;u=u.return}u.sibling.return=u.return,u=u.sibling}t.stateNode=i;e:switch(zt(i,n,a),n){case"button":case"input":case"select":case"textarea":a=!!a.autoFocus;break e;case"img":a=!0;break e;default:a=!1}a&&jl(t)}}return Ye(t),Kc(t,t.type,e===null?null:e.memoizedProps,t.pendingProps,l),null;case 6:if(e&&t.stateNode!=null)e.memoizedProps!==a&&jl(t);else{if(typeof a!="string"&&t.stateNode===null)throw Error(r(166));if(e=ee.current,ka(t)){if(e=t.stateNode,l=t.memoizedProps,a=null,n=xt,n!==null)switch(n.tag){case 27:case 5:a=n.memoizedProps}e[St]=t,e=!!(e.nodeValue===l||a!==null&&a.suppressHydrationWarning===!0||md(e.nodeValue,l)),e||Rl(t,!0)}else e=uu(e).createTextNode(a),e[St]=t,t.stateNode=e}return Ye(t),null;case 31:if(l=t.memoizedState,e===null||e.memoizedState!==null){if(a=ka(t),l!==null){if(e===null){if(!a)throw Error(r(318));if(e=t.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(r(557));e[St]=t}else da(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;Ye(t),e=!1}else l=ac(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=l),e=!0;if(!e)return t.flags&256?(Xt(t),t):(Xt(t),null);if((t.flags&128)!==0)throw Error(r(558))}return Ye(t),null;case 13:if(a=t.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(n=ka(t),a!==null&&a.dehydrated!==null){if(e===null){if(!n)throw Error(r(318));if(n=t.memoizedState,n=n!==null?n.dehydrated:null,!n)throw Error(r(317));n[St]=t}else da(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;Ye(t),n=!1}else n=ac(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=n),n=!0;if(!n)return t.flags&256?(Xt(t),t):(Xt(t),null)}return Xt(t),(t.flags&128)!==0?(t.lanes=l,t):(l=a!==null,e=e!==null&&e.memoizedState!==null,l&&(a=t.child,n=null,a.alternate!==null&&a.alternate.memoizedState!==null&&a.alternate.memoizedState.cachePool!==null&&(n=a.alternate.memoizedState.cachePool.pool),i=null,a.memoizedState!==null&&a.memoizedState.cachePool!==null&&(i=a.memoizedState.cachePool.pool),i!==n&&(a.flags|=2048)),l!==e&&l&&(t.child.flags|=8192),Vi(t,t.updateQueue),Ye(t),null);case 4:return Ne(),e===null&&ys(t.stateNode.containerInfo),Ye(t),null;case 10:return bl(t.type),Ye(t),null;case 19:if(j(lt),a=t.memoizedState,a===null)return Ye(t),null;if(n=(t.flags&128)!==0,i=a.rendering,i===null)if(n)qn(a,!1);else{if(et!==0||e!==null&&(e.flags&128)!==0)for(e=t.child;e!==null;){if(i=Oi(e),i!==null){for(t.flags|=128,qn(a,!1),e=i.updateQueue,t.updateQueue=e,Vi(t,e),t.subtreeFlags=0,e=l,l=t.child;l!==null;)Qf(l,e),l=l.sibling;return B(lt,lt.current&1|2),be&&pl(t,a.treeForkCount),t.child}e=e.sibling}a.tail!==null&&Re()>Wi&&(t.flags|=128,n=!0,qn(a,!1),t.lanes=4194304)}else{if(!n)if(e=Oi(i),e!==null){if(t.flags|=128,n=!0,e=e.updateQueue,t.updateQueue=e,Vi(t,e),qn(a,!0),a.tail===null&&a.tailMode==="hidden"&&!i.alternate&&!be)return Ye(t),null}else 2*Re()-a.renderingStartTime>Wi&&l!==536870912&&(t.flags|=128,n=!0,qn(a,!1),t.lanes=4194304);a.isBackwards?(i.sibling=t.child,t.child=i):(e=a.last,e!==null?e.sibling=i:t.child=i,a.last=i)}return a.tail!==null?(e=a.tail,a.rendering=e,a.tail=e.sibling,a.renderingStartTime=Re(),e.sibling=null,l=lt.current,B(lt,n?l&1|2:l&1),be&&pl(t,a.treeForkCount),e):(Ye(t),null);case 22:case 23:return Xt(t),gc(),a=t.memoizedState!==null,e!==null?e.memoizedState!==null!==a&&(t.flags|=8192):a&&(t.flags|=8192),a?(l&536870912)!==0&&(t.flags&128)===0&&(Ye(t),t.subtreeFlags&6&&(t.flags|=8192)):Ye(t),l=t.updateQueue,l!==null&&Vi(t,l.retryQueue),l=null,e!==null&&e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(l=e.memoizedState.cachePool.pool),a=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(a=t.memoizedState.cachePool.pool),a!==l&&(t.flags|=2048),e!==null&&j(ya),null;case 24:return l=null,e!==null&&(l=e.memoizedState.cache),t.memoizedState.cache!==l&&(t.flags|=2048),bl(nt),Ye(t),null;case 25:return null;case 30:return null}throw Error(r(156,t.tag))}function Nh(e,t){switch(tc(t),t.tag){case 1:return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return bl(nt),Ne(),e=t.flags,(e&65536)!==0&&(e&128)===0?(t.flags=e&-65537|128,t):null;case 26:case 27:case 5:return Et(t),null;case 31:if(t.memoizedState!==null){if(Xt(t),t.alternate===null)throw Error(r(340));da()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 13:if(Xt(t),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(r(340));da()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return j(lt),null;case 4:return Ne(),null;case 10:return bl(t.type),null;case 22:case 23:return Xt(t),gc(),e!==null&&j(ya),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 24:return bl(nt),null;case 25:return null;default:return null}}function vr(e,t){switch(tc(t),t.tag){case 3:bl(nt),Ne();break;case 26:case 27:case 5:Et(t);break;case 4:Ne();break;case 31:t.memoizedState!==null&&Xt(t);break;case 13:Xt(t);break;case 19:j(lt);break;case 10:bl(t.type);break;case 22:case 23:Xt(t),gc(),e!==null&&j(ya);break;case 24:bl(nt)}}function Ln(e,t){try{var l=t.updateQueue,a=l!==null?l.lastEffect:null;if(a!==null){var n=a.next;l=n;do{if((l.tag&e)===e){a=void 0;var i=l.create,u=l.inst;a=i(),u.destroy=a}l=l.next}while(l!==n)}}catch(s){Ce(t,t.return,s)}}function Xl(e,t,l){try{var a=t.updateQueue,n=a!==null?a.lastEffect:null;if(n!==null){var i=n.next;a=i;do{if((a.tag&e)===e){var u=a.inst,s=u.destroy;if(s!==void 0){u.destroy=void 0,n=t;var o=l,p=s;try{p()}catch(z){Ce(n,o,z)}}}a=a.next}while(a!==i)}}catch(z){Ce(t,t.return,z)}}function br(e){var t=e.updateQueue;if(t!==null){var l=e.stateNode;try{so(t,l)}catch(a){Ce(e,e.return,a)}}}function Sr(e,t,l){l.props=Sa(e.type,e.memoizedProps),l.state=e.memoizedState;try{l.componentWillUnmount()}catch(a){Ce(e,t,a)}}function Yn(e,t){try{var l=e.ref;if(l!==null){switch(e.tag){case 26:case 27:case 5:var a=e.stateNode;break;case 30:a=e.stateNode;break;default:a=e.stateNode}typeof l=="function"?e.refCleanup=l(a):l.current=a}}catch(n){Ce(e,t,n)}}function ol(e,t){var l=e.ref,a=e.refCleanup;if(l!==null)if(typeof a=="function")try{a()}catch(n){Ce(e,t,n)}finally{e.refCleanup=null,e=e.alternate,e!=null&&(e.refCleanup=null)}else if(typeof l=="function")try{l(null)}catch(n){Ce(e,t,n)}else l.current=null}function xr(e){var t=e.type,l=e.memoizedProps,a=e.stateNode;try{e:switch(t){case"button":case"input":case"select":case"textarea":l.autoFocus&&a.focus();break e;case"img":l.src?a.src=l.src:l.srcSet&&(a.srcset=l.srcSet)}}catch(n){Ce(e,e.return,n)}}function Jc(e,t,l){try{var a=e.stateNode;Wh(a,e.type,l,t),a[Dt]=t}catch(n){Ce(e,e.return,n)}}function _r(e){return e.tag===5||e.tag===3||e.tag===26||e.tag===27&&Wl(e.type)||e.tag===4}function $c(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||_r(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.tag===27&&Wl(e.type)||e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function Wc(e,t,l){var a=e.tag;if(a===5||a===6)e=e.stateNode,t?(l.nodeType===9?l.body:l.nodeName==="HTML"?l.ownerDocument.body:l).insertBefore(e,t):(t=l.nodeType===9?l.body:l.nodeName==="HTML"?l.ownerDocument.body:l,t.appendChild(e),l=l._reactRootContainer,l!=null||t.onclick!==null||(t.onclick=hl));else if(a!==4&&(a===27&&Wl(e.type)&&(l=e.stateNode,t=null),e=e.child,e!==null))for(Wc(e,t,l),e=e.sibling;e!==null;)Wc(e,t,l),e=e.sibling}function Zi(e,t,l){var a=e.tag;if(a===5||a===6)e=e.stateNode,t?l.insertBefore(e,t):l.appendChild(e);else if(a!==4&&(a===27&&Wl(e.type)&&(l=e.stateNode),e=e.child,e!==null))for(Zi(e,t,l),e=e.sibling;e!==null;)Zi(e,t,l),e=e.sibling}function jr(e){var t=e.stateNode,l=e.memoizedProps;try{for(var a=e.type,n=t.attributes;n.length;)t.removeAttributeNode(n[0]);zt(t,a,l),t[St]=e,t[Dt]=l}catch(i){Ce(e,e.return,i)}}var zl=!1,ct=!1,Fc=!1,zr=typeof WeakSet=="function"?WeakSet:Set,ht=null;function Ah(e,t){if(e=e.containerInfo,vs=mu,e=Bf(e),Qu(e)){if("selectionStart"in e)var l={start:e.selectionStart,end:e.selectionEnd};else e:{l=(l=e.ownerDocument)&&l.defaultView||window;var a=l.getSelection&&l.getSelection();if(a&&a.rangeCount!==0){l=a.anchorNode;var n=a.anchorOffset,i=a.focusNode;a=a.focusOffset;try{l.nodeType,i.nodeType}catch{l=null;break e}var u=0,s=-1,o=-1,p=0,z=0,M=e,v=null;t:for(;;){for(var S;M!==l||n!==0&&M.nodeType!==3||(s=u+n),M!==i||a!==0&&M.nodeType!==3||(o=u+a),M.nodeType===3&&(u+=M.nodeValue.length),(S=M.firstChild)!==null;)v=M,M=S;for(;;){if(M===e)break t;if(v===l&&++p===n&&(s=u),v===i&&++z===a&&(o=u),(S=M.nextSibling)!==null)break;M=v,v=M.parentNode}M=S}l=s===-1||o===-1?null:{start:s,end:o}}else l=null}l=l||{start:0,end:0}}else l=null;for(bs={focusedElem:e,selectionRange:l},mu=!1,ht=t;ht!==null;)if(t=ht,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,ht=e;else for(;ht!==null;){switch(t=ht,i=t.alternate,e=t.flags,t.tag){case 0:if((e&4)!==0&&(e=t.updateQueue,e=e!==null?e.events:null,e!==null))for(l=0;l title"))),zt(i,a,l),i[St]=e,mt(i),a=i;break e;case"link":var u=Dd("link","href",n).get(a+(l.href||""));if(u){for(var s=0;sBe&&(u=Be,Be=I,I=u);var y=Uf(s,I),m=Uf(s,Be);if(y&&m&&(S.rangeCount!==1||S.anchorNode!==y.node||S.anchorOffset!==y.offset||S.focusNode!==m.node||S.focusOffset!==m.offset)){var g=M.createRange();g.setStart(y.node,y.offset),S.removeAllRanges(),I>Be?(S.addRange(g),S.extend(m.node,m.offset)):(g.setEnd(m.node,m.offset),S.addRange(g))}}}}for(M=[],S=s;S=S.parentNode;)S.nodeType===1&&M.push({element:S,left:S.scrollLeft,top:S.scrollTop});for(typeof s.focus=="function"&&s.focus(),s=0;sl?32:l,_.T=null,l=ns,ns=null;var i=Kl,u=Al;if(ot=0,ln=Kl=null,Al=0,(Me&6)!==0)throw Error(r(331));var s=Me;if(Me|=4,Br(i.current),Or(i,i.current,u,l),Me=s,Kn(0,!1),tt&&typeof tt.onPostCommitFiberRoot=="function")try{tt.onPostCommitFiberRoot(ft,i)}catch{}return!0}finally{C.p=n,_.T=a,Pr(e,t)}}function td(e,t,l){t=Wt(l,t),t=Hc(e.stateNode,t,2),e=Ll(e,t,2),e!==null&&(mn(e,2),rl(e))}function Ce(e,t,l){if(e.tag===3)td(e,e,l);else for(;t!==null;){if(t.tag===3){td(t,e,l);break}else if(t.tag===1){var a=t.stateNode;if(typeof t.type.getDerivedStateFromError=="function"||typeof a.componentDidCatch=="function"&&(Zl===null||!Zl.has(a))){e=Wt(l,e),l=lr(2),a=Ll(t,l,2),a!==null&&(ar(l,a,t,e),mn(a,2),rl(a));break}}t=t.return}}function ss(e,t,l){var a=e.pingCache;if(a===null){a=e.pingCache=new Oh;var n=new Set;a.set(t,n)}else n=a.get(t),n===void 0&&(n=new Set,a.set(t,n));n.has(l)||(es=!0,n.add(l),e=Hh.bind(null,e,t,l),t.then(e,e))}function Hh(e,t,l){var a=e.pingCache;a!==null&&a.delete(t),e.pingedLanes|=e.suspendedLanes&l,e.warmLanes&=~l,qe===e&&(ge&l)===l&&(et===4||et===3&&(ge&62914560)===ge&&300>Re()-$i?(Me&2)===0&&an(e,0):ts|=l,tn===ge&&(tn=0)),rl(e)}function ld(e,t){t===0&&(t=ci()),e=oa(e,t),e!==null&&(mn(e,t),rl(e))}function Gh(e){var t=e.memoizedState,l=0;t!==null&&(l=t.retryLane),ld(e,l)}function qh(e,t){var l=0;switch(e.tag){case 31:case 13:var a=e.stateNode,n=e.memoizedState;n!==null&&(l=n.retryLane);break;case 19:a=e.stateNode;break;case 22:a=e.stateNode._retryCache;break;default:throw Error(r(314))}a!==null&&a.delete(t),ld(e,l)}function Lh(e,t){return ae(e,t)}var lu=null,un=null,fs=!1,au=!1,os=!1,$l=0;function rl(e){e!==un&&e.next===null&&(un===null?lu=un=e:un=un.next=e),au=!0,fs||(fs=!0,kh())}function Kn(e,t){if(!os&&au){os=!0;do for(var l=!1,a=lu;a!==null;){if(e!==0){var n=a.pendingLanes;if(n===0)var i=0;else{var u=a.suspendedLanes,s=a.pingedLanes;i=(1<<31-rt(42|e)+1)-1,i&=n&~(u&~s),i=i&201326741?i&201326741|1:i?i|2:0}i!==0&&(l=!0,ud(a,i))}else i=ge,i=dt(a,a===qe?i:0,a.cancelPendingCommit!==null||a.timeoutHandle!==-1),(i&3)===0||bt(a,i)||(l=!0,ud(a,i));a=a.next}while(l);os=!1}}function Yh(){ad()}function ad(){au=fs=!1;var e=0;$l!==0&&Ih()&&(e=$l);for(var t=Re(),l=null,a=lu;a!==null;){var n=a.next,i=nd(a,t);i===0?(a.next=null,l===null?lu=n:l.next=n,n===null&&(un=l)):(l=a,(e!==0||(i&3)!==0)&&(au=!0)),a=n}ot!==0&&ot!==5||Kn(e),$l!==0&&($l=0)}function nd(e,t){for(var l=e.suspendedLanes,a=e.pingedLanes,n=e.expirationTimes,i=e.pendingLanes&-62914561;0s)break;var z=o.transferSize,M=o.initiatorType;z&&hd(M)&&(o=o.responseEnd,u+=z*(o"u"?null:document;function Md(e,t,l){var a=cn;if(a&&typeof t=="string"&&t){var n=Jt(t);n='link[rel="'+e+'"][href="'+n+'"]',typeof l=="string"&&(n+='[crossorigin="'+l+'"]'),Td.has(n)||(Td.add(n),e={rel:e,crossOrigin:l,href:t},a.querySelector(n)===null&&(t=a.createElement("link"),zt(t,"link",e),mt(t),a.head.appendChild(t)))}}function c0(e){Dl.D(e),Md("dns-prefetch",e,null)}function s0(e,t){Dl.C(e,t),Md("preconnect",e,t)}function f0(e,t,l){Dl.L(e,t,l);var a=cn;if(a&&e&&t){var n='link[rel="preload"][as="'+Jt(t)+'"]';t==="image"&&l&&l.imageSrcSet?(n+='[imagesrcset="'+Jt(l.imageSrcSet)+'"]',typeof l.imageSizes=="string"&&(n+='[imagesizes="'+Jt(l.imageSizes)+'"]')):n+='[href="'+Jt(e)+'"]';var i=n;switch(t){case"style":i=sn(e);break;case"script":i=fn(e)}ll.has(i)||(e=U({rel:"preload",href:t==="image"&&l&&l.imageSrcSet?void 0:e,as:t},l),ll.set(i,e),a.querySelector(n)!==null||t==="style"&&a.querySelector(Fn(i))||t==="script"&&a.querySelector(In(i))||(t=a.createElement("link"),zt(t,"link",e),mt(t),a.head.appendChild(t)))}}function o0(e,t){Dl.m(e,t);var l=cn;if(l&&e){var a=t&&typeof t.as=="string"?t.as:"script",n='link[rel="modulepreload"][as="'+Jt(a)+'"][href="'+Jt(e)+'"]',i=n;switch(a){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":i=fn(e)}if(!ll.has(i)&&(e=U({rel:"modulepreload",href:e},t),ll.set(i,e),l.querySelector(n)===null)){switch(a){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(l.querySelector(In(i)))return}a=l.createElement("link"),zt(a,"link",e),mt(a),l.head.appendChild(a)}}}function r0(e,t,l){Dl.S(e,t,l);var a=cn;if(a&&e){var n=Aa(a).hoistableStyles,i=sn(e);t=t||"default";var u=n.get(i);if(!u){var s={loading:0,preload:null};if(u=a.querySelector(Fn(i)))s.loading=5;else{e=U({rel:"stylesheet",href:e,"data-precedence":t},l),(l=ll.get(i))&&Ms(e,l);var o=u=a.createElement("link");mt(o),zt(o,"link",e),o._p=new Promise(function(p,z){o.onload=p,o.onerror=z}),o.addEventListener("load",function(){s.loading|=1}),o.addEventListener("error",function(){s.loading|=2}),s.loading|=4,su(u,t,a)}u={type:"stylesheet",instance:u,count:1,state:s},n.set(i,u)}}}function d0(e,t){Dl.X(e,t);var l=cn;if(l&&e){var a=Aa(l).hoistableScripts,n=fn(e),i=a.get(n);i||(i=l.querySelector(In(n)),i||(e=U({src:e,async:!0},t),(t=ll.get(n))&&Es(e,t),i=l.createElement("script"),mt(i),zt(i,"link",e),l.head.appendChild(i)),i={type:"script",instance:i,count:1,state:null},a.set(n,i))}}function m0(e,t){Dl.M(e,t);var l=cn;if(l&&e){var a=Aa(l).hoistableScripts,n=fn(e),i=a.get(n);i||(i=l.querySelector(In(n)),i||(e=U({src:e,async:!0,type:"module"},t),(t=ll.get(n))&&Es(e,t),i=l.createElement("script"),mt(i),zt(i,"link",e),l.head.appendChild(i)),i={type:"script",instance:i,count:1,state:null},a.set(n,i))}}function Ed(e,t,l,a){var n=(n=ee.current)?cu(n):null;if(!n)throw Error(r(446));switch(e){case"meta":case"title":return null;case"style":return typeof l.precedence=="string"&&typeof l.href=="string"?(t=sn(l.href),l=Aa(n).hoistableStyles,a=l.get(t),a||(a={type:"style",instance:null,count:0,state:null},l.set(t,a)),a):{type:"void",instance:null,count:0,state:null};case"link":if(l.rel==="stylesheet"&&typeof l.href=="string"&&typeof l.precedence=="string"){e=sn(l.href);var i=Aa(n).hoistableStyles,u=i.get(e);if(u||(n=n.ownerDocument||n,u={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},i.set(e,u),(i=n.querySelector(Fn(e)))&&!i._p&&(u.instance=i,u.state.loading=5),ll.has(e)||(l={rel:"preload",as:"style",href:l.href,crossOrigin:l.crossOrigin,integrity:l.integrity,media:l.media,hrefLang:l.hrefLang,referrerPolicy:l.referrerPolicy},ll.set(e,l),i||h0(n,e,l,u.state))),t&&a===null)throw Error(r(528,""));return u}if(t&&a!==null)throw Error(r(529,""));return null;case"script":return t=l.async,l=l.src,typeof l=="string"&&t&&typeof t!="function"&&typeof t!="symbol"?(t=fn(l),l=Aa(n).hoistableScripts,a=l.get(t),a||(a={type:"script",instance:null,count:0,state:null},l.set(t,a)),a):{type:"void",instance:null,count:0,state:null};default:throw Error(r(444,e))}}function sn(e){return'href="'+Jt(e)+'"'}function Fn(e){return'link[rel="stylesheet"]['+e+"]"}function Nd(e){return U({},e,{"data-precedence":e.precedence,precedence:null})}function h0(e,t,l,a){e.querySelector('link[rel="preload"][as="style"]['+t+"]")?a.loading=1:(t=e.createElement("link"),a.preload=t,t.addEventListener("load",function(){return a.loading|=1}),t.addEventListener("error",function(){return a.loading|=2}),zt(t,"link",l),mt(t),e.head.appendChild(t))}function fn(e){return'[src="'+Jt(e)+'"]'}function In(e){return"script[async]"+e}function Ad(e,t,l){if(t.count++,t.instance===null)switch(t.type){case"style":var a=e.querySelector('style[data-href~="'+Jt(l.href)+'"]');if(a)return t.instance=a,mt(a),a;var n=U({},l,{"data-href":l.href,"data-precedence":l.precedence,href:null,precedence:null});return a=(e.ownerDocument||e).createElement("style"),mt(a),zt(a,"style",n),su(a,l.precedence,e),t.instance=a;case"stylesheet":n=sn(l.href);var i=e.querySelector(Fn(n));if(i)return t.state.loading|=4,t.instance=i,mt(i),i;a=Nd(l),(n=ll.get(n))&&Ms(a,n),i=(e.ownerDocument||e).createElement("link"),mt(i);var u=i;return u._p=new Promise(function(s,o){u.onload=s,u.onerror=o}),zt(i,"link",a),t.state.loading|=4,su(i,l.precedence,e),t.instance=i;case"script":return i=fn(l.src),(n=e.querySelector(In(i)))?(t.instance=n,mt(n),n):(a=l,(n=ll.get(i))&&(a=U({},l),Es(a,n)),e=e.ownerDocument||e,n=e.createElement("script"),mt(n),zt(n,"link",a),e.head.appendChild(n),t.instance=n);case"void":return null;default:throw Error(r(443,t.type))}else t.type==="stylesheet"&&(t.state.loading&4)===0&&(a=t.instance,t.state.loading|=4,su(a,l.precedence,e));return t.instance}function su(e,t,l){for(var a=l.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),n=a.length?a[a.length-1]:null,i=n,u=0;u title"):null)}function y0(e,t,l){if(l===1||t.itemProp!=null)return!1;switch(e){case"meta":case"title":return!0;case"style":if(typeof t.precedence!="string"||typeof t.href!="string"||t.href==="")break;return!0;case"link":if(typeof t.rel!="string"||typeof t.href!="string"||t.href===""||t.onLoad||t.onError)break;return t.rel==="stylesheet"?(e=t.disabled,typeof t.precedence=="string"&&e==null):!0;case"script":if(t.async&&typeof t.async!="function"&&typeof t.async!="symbol"&&!t.onLoad&&!t.onError&&t.src&&typeof t.src=="string")return!0}return!1}function Od(e){return!(e.type==="stylesheet"&&(e.state.loading&3)===0)}function g0(e,t,l,a){if(l.type==="stylesheet"&&(typeof a.media!="string"||matchMedia(a.media).matches!==!1)&&(l.state.loading&4)===0){if(l.instance===null){var n=sn(a.href),i=t.querySelector(Fn(n));if(i){t=i._p,t!==null&&typeof t=="object"&&typeof t.then=="function"&&(e.count++,e=ou.bind(e),t.then(e,e)),l.state.loading|=4,l.instance=i,mt(i);return}i=t.ownerDocument||t,a=Nd(a),(n=ll.get(n))&&Ms(a,n),i=i.createElement("link"),mt(i);var u=i;u._p=new Promise(function(s,o){u.onload=s,u.onerror=o}),zt(i,"link",a),l.instance=i}e.stylesheets===null&&(e.stylesheets=new Map),e.stylesheets.set(l,t),(t=l.state.preload)&&(l.state.loading&3)===0&&(e.count++,l=ou.bind(e),t.addEventListener("load",l),t.addEventListener("error",l))}}var Ns=0;function p0(e,t){return e.stylesheets&&e.count===0&&du(e,e.stylesheets),0Ns?50:800)+t);return e.unsuspend=l,function(){e.unsuspend=null,clearTimeout(a),clearTimeout(n)}}:null}function ou(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)du(this,this.stylesheets);else if(this.unsuspend){var e=this.unsuspend;this.unsuspend=null,e()}}}var ru=null;function du(e,t){e.stylesheets=null,e.unsuspend!==null&&(e.count++,ru=new Map,t.forEach(v0,e),ru=null,ou.call(e))}function v0(e,t){if(!(t.state.loading&4)){var l=ru.get(e);if(l)var a=l.get(null);else{l=new Map,ru.set(e,l);for(var n=e.querySelectorAll("link[data-precedence],style[data-precedence]"),i=0;i"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(f)}catch(b){console.error(b)}}return f(),Hs.exports=B0(),Hs.exports}var H0=R0();const G0=fm(H0);const om=(...f)=>f.filter((b,E,r)=>!!b&&b.trim()!==""&&r.indexOf(b)===E).join(" ").trim();const q0=f=>f.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase();const L0=f=>f.replace(/^([A-Z])|[\s-_]+(\w)/g,(b,E,r)=>r?r.toUpperCase():E.toLowerCase());const lm=f=>{const b=L0(f);return b.charAt(0).toUpperCase()+b.slice(1)};var Ys={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"};const Y0=f=>{for(const b in f)if(b.startsWith("aria-")||b==="role"||b==="title")return!0;return!1},k0=O.createContext({}),X0=()=>O.useContext(k0),Q0=O.forwardRef(({color:f,size:b,strokeWidth:E,absoluteStrokeWidth:r,className:x="",children:N,iconNode:G,...H},w)=>{const{size:h=24,strokeWidth:A=2,absoluteStrokeWidth:U=!1,color:V="currentColor",className:fe=""}=X0()??{},X=r??U?Number(E??A)*24/Number(b??h):E??A;return O.createElement("svg",{ref:w,...Ys,width:b??h??Ys.width,height:b??h??Ys.height,stroke:f??V,strokeWidth:X,className:om("lucide",fe,x),...!N&&!Y0(H)&&{"aria-hidden":"true"},...H},[...G.map(([L,te])=>O.createElement(L,te)),...Array.isArray(N)?N:[N]])});const Ve=(f,b)=>{const E=O.forwardRef(({className:r,...x},N)=>O.createElement(Q0,{ref:N,iconNode:b,className:om(`lucide-${q0(lm(f))}`,`lucide-${f}`,r),...x}));return E.displayName=lm(f),E};const V0=[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]],ks=Ve("check",V0);const Z0=[["path",{d:"M12 13v8l-4-4",key:"1f5nwf"}],["path",{d:"m12 21 4-4",key:"1lfcce"}],["path",{d:"M4.393 15.269A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.436 8.284",key:"ui1hmy"}]],am=Ve("cloud-download",Z0);const K0=[["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"}]],J0=Ve("copy",K0);const $0=[["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M17 20v2",key:"1rnc9c"}],["path",{d:"M17 2v2",key:"11trls"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M2 17h2",key:"7oei6x"}],["path",{d:"M2 7h2",key:"asdhe0"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"M20 17h2",key:"1fpfkl"}],["path",{d:"M20 7h2",key:"1o8tra"}],["path",{d:"M7 20v2",key:"4gnj0m"}],["path",{d:"M7 2v2",key:"1i4yhu"}],["rect",{x:"4",y:"4",width:"16",height:"16",rx:"2",key:"1vbyd7"}],["rect",{x:"8",y:"8",width:"8",height:"8",rx:"1",key:"z9xiuo"}]],rm=Ve("cpu",$0);const W0=[["path",{d:"M6 2v14a2 2 0 0 0 2 2h14",key:"ron5a4"}],["path",{d:"M18 22V8a2 2 0 0 0-2-2H2",key:"7s9ehn"}]],F0=Ve("crop",W0);const I0=[["ellipse",{cx:"12",cy:"5",rx:"9",ry:"3",key:"msslwz"}],["path",{d:"M3 5V19A9 3 0 0 0 21 19V5",key:"1wlel7"}],["path",{d:"M3 12A9 3 0 0 0 21 12",key:"mv7ke4"}]],Xs=Ve("database",I0);const P0=[["path",{d:"M12 15V3",key:"m9g1x1"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["path",{d:"m7 10 5 5 5-5",key:"brsn70"}]],nm=Ve("download",P0);const ey=[["path",{d:"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z",key:"1kt360"}],["path",{d:"M12 10v6",key:"1bos4e"}],["path",{d:"m15 13-3 3-3-3",key:"6j2sf0"}]],ty=Ve("folder-down",ey);const ly=[["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"}]],im=Ve("folder-open",ly);const ay=[["path",{d:"M10 16h.01",key:"1bzywj"}],["path",{d:"M2.212 11.577a2 2 0 0 0-.212.896V18a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-5.527a2 2 0 0 0-.212-.896L18.55 5.11A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z",key:"18tbho"}],["path",{d:"M21.946 12.013H2.054",key:"zqlbp7"}],["path",{d:"M6 16h.01",key:"1pmjb7"}]],xu=Ve("hard-drive",ay);const ny=[["path",{d:"M16 5h6",key:"1vod17"}],["path",{d:"M19 2v6",key:"4bpg5p"}],["path",{d:"M21 11.5V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h7.5",key:"1ue2ih"}],["path",{d:"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21",key:"1xmnt7"}],["circle",{cx:"9",cy:"9",r:"2",key:"af1f0g"}]],iy=Ve("image-plus",ny);const uy=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2",key:"1m3agn"}],["circle",{cx:"9",cy:"9",r:"2",key:"af1f0g"}],["path",{d:"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21",key:"1xmnt7"}]],cy=Ve("image",uy);const sy=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 16v-4",key:"1dtifu"}],["path",{d:"M12 8h.01",key:"e9boi3"}]],fy=Ve("info",sy);const oy=[["path",{d:"m16 6 4 14",key:"ji33uf"}],["path",{d:"M12 6v14",key:"1n7gus"}],["path",{d:"M8 8v12",key:"1gg7y9"}],["path",{d:"M4 4v16",key:"6qkkli"}]],ry=Ve("library",oy);const dy=[["path",{d:"M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401",key:"kfwtm"}]],my=Ve("moon",dy);const hy=[["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"}]],aa=Ve("refresh-cw",hy);const yy=[["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"}]],gy=Ve("shield",yy);const py=[["path",{d:"M10 8h4",key:"1sr2af"}],["path",{d:"M12 21v-9",key:"17s77i"}],["path",{d:"M12 8V3",key:"13r4qs"}],["path",{d:"M17 16h4",key:"h1uq16"}],["path",{d:"M19 12V3",key:"o1uvq1"}],["path",{d:"M19 21v-5",key:"qua636"}],["path",{d:"M3 14h4",key:"bcjad9"}],["path",{d:"M5 10V3",key:"cb8scm"}],["path",{d:"M5 21v-7",key:"1w1uti"}]],Ks=Ve("sliders-vertical",py);const vy=[["path",{d:"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z",key:"1s2grr"}],["path",{d:"M20 2v4",key:"1rf3ol"}],["path",{d:"M22 4h-4",key:"gwowj6"}],["circle",{cx:"4",cy:"20",r:"2",key:"6kqj1y"}]],Su=Ve("sparkles",vy);const by=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}]],Qs=Ve("square",by);const Sy=[["circle",{cx:"12",cy:"12",r:"4",key:"4exip2"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"m4.93 4.93 1.41 1.41",key:"149t6j"}],["path",{d:"m17.66 17.66 1.41 1.41",key:"ptbguv"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"m6.34 17.66-1.41 1.41",key:"1m8zz5"}],["path",{d:"m19.07 4.93-1.41 1.41",key:"1shlcs"}]],xy=Ve("sun",Sy);const _y=[["path",{d:"M12 19h8",key:"baeox8"}],["path",{d:"m4 17 6-6-6-6",key:"1yngyt"}]],jy=Ve("terminal",_y);const zy=[["path",{d:"M10 11v6",key:"nco0om"}],["path",{d:"M14 11v6",key:"outv1u"}],["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]],rn=Ve("trash-2",zy);const Ty=[["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"}]],My=Ve("triangle-alert",Ty);function Ey({activeTab:f,setActiveTab:b,specs:E}){return c.jsxs("div",{className:"sidebar",children:[c.jsxs("div",{children:[c.jsxs("div",{className:"sidebar-logo",children:[c.jsx(gy,{className:"sidebar-logo-icon"}),c.jsx("span",{className:"sidebar-logo-text",children:"Local AI Studio"})]}),c.jsxs("div",{className:"nav-list",children:[c.jsxs("div",{className:`nav-item ${f==="generator"?"active":""}`,onClick:()=>b("generator"),children:[c.jsx(cy,{size:20}),c.jsx("span",{children:"Image Generator"})]}),c.jsxs("div",{className:`nav-item ${f==="models"?"active":""}`,onClick:()=>b("models"),children:[c.jsx(ty,{size:20}),c.jsx("span",{children:"Model Manager"})]}),c.jsxs("div",{className:`nav-item ${f==="constraints"?"active":""}`,onClick:()=>b("constraints"),children:[c.jsx(Ks,{size:20}),c.jsx("span",{children:"Image Constraints"})]})]})]}),c.jsxs("div",{className:"sidebar-footer",children:[c.jsxs("div",{className:"sidebar-specs-header",children:[c.jsx(jy,{size:12}),c.jsx("span",{children:"Host Specifications"})]}),c.jsxs("div",{className:"sidebar-specs-item",title:E.cpu_name,children:["CPU: ",E.cpu_name]}),c.jsxs("div",{className:"sidebar-specs-item",title:E.gpu_name,children:["GPU: ",E.gpu_name]}),c.jsxs("div",{className:"sidebar-specs-item",children:["Memory: ",E.ram_total_gb.toFixed(0)," GB RAM (",E.cpu_cores_physical," Cores)"]}),c.jsxs("div",{className:"sidebar-specs-os",children:["OS: ",E.os_name]})]})]})}const Ny=O.memo(Ey);function Ay({telemetry:f,serverRunning:b,activeModel:E,onStopServer:r,isStoppingServer:x=!1,theme:N,setTheme:G}){const H=A=>{const U=Number(A);return Number.isFinite(U)&&U>0?U.toFixed(U>=10?0:1):"--"},w=()=>b?"Server Active":"Local Mode",h=()=>b?"status-indicator busy":"status-indicator offline";return c.jsxs("div",{className:"top-status-bar",children:[c.jsxs("div",{className:"current-model-info",children:[c.jsx("div",{className:h()}),c.jsx("span",{style:{fontWeight:600,fontSize:"0.95rem"},children:w()}),E&&c.jsxs(c.Fragment,{children:[c.jsx("span",{style:{color:"var(--md-sys-color-outline-variant)"},children:"|"}),c.jsx("span",{style:{color:"var(--md-sys-color-primary)",fontWeight:700},children:E})]})]}),c.jsxs("div",{className:"telemetry-group",children:[c.jsx("button",{className:"theme-toggle-btn",onClick:()=>G(N==="dark"?"light":"dark"),title:`Switch to ${N==="dark"?"light":"dark"} theme`,children:N==="dark"?c.jsx(xy,{size:18}):c.jsx(my,{size:18})}),b&&c.jsxs("button",{className:"m3-btn m3-btn-error",style:{height:"34px",padding:"0 14px"},onClick:r,disabled:x,title:"Stop local model server",children:[x?c.jsx(aa,{className:"progress-spinner",size:14}):c.jsx(Qs,{size:14}),c.jsx("span",{children:x?"Stopping":"Stop Server"})]}),c.jsxs("div",{className:"telemetry-chip",title:"CPU Utilization",children:[c.jsx(rm,{className:"telemetry-chip-icon",style:{color:"var(--md-sys-color-primary)"}}),c.jsxs("span",{children:["CPU: ",Number.isFinite(Number(f.cpu_usage))?f.cpu_usage:"--","%"]})]}),c.jsxs("div",{className:"telemetry-chip",title:"System Memory Usage",children:[c.jsx(xu,{className:"telemetry-chip-icon",style:{color:"var(--md-sys-color-secondary)"}}),c.jsxs("span",{children:["RAM: ",H(f.ram_used_gb)," / ",H(f.ram_total_gb)," GB"]})]}),f.vram_total_gb>0&&c.jsxs("div",{className:"telemetry-chip",title:`${f.gpu_name} VRAM`,children:[c.jsx(Xs,{className:"telemetry-chip-icon",style:{color:"var(--md-sys-color-tertiary)"}}),c.jsxs("span",{children:["VRAM: ",H(f.vram_used_gb)," / ",H(f.vram_total_gb)," GB"]})]})]})]})}const Dy=O.memo(Ay),Cy="modulepreload",Oy=function(f){return"/"+f},um={},Uy=function(b,E,r){let x=Promise.resolve();if(E&&E.length>0){let w=function(h){return Promise.all(h.map(A=>Promise.resolve(A).then(U=>({status:"fulfilled",value:U}),U=>({status:"rejected",reason:U}))))};document.getElementsByTagName("link");const G=document.querySelector("meta[property=csp-nonce]"),H=G?.nonce||G?.getAttribute("nonce");x=w(E.map(h=>{if(h=Oy(h),h in um)return;um[h]=!0;const A=h.endsWith(".css"),U=A?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${h}"]${U}`))return;const V=document.createElement("link");if(V.rel=A?"stylesheet":Cy,A||(V.as="script"),V.crossOrigin="",V.href=h,H&&V.setAttribute("nonce",H),document.head.appendChild(V),A)return new Promise((fe,X)=>{V.addEventListener("load",fe),V.addEventListener("error",()=>X(new Error(`Unable to preload CSS for ${h}`)))})}))}function N(G){const H=new Event("vite:preloadError",{cancelable:!0});if(H.payload=G,window.dispatchEvent(H),!H.defaultPrevented)throw G}return x.then(G=>{for(const H of G||[])H.status==="rejected"&&N(H.reason);return b().catch(N)})};function rg(f,b=!1){return window.__TAURI_INTERNALS__.transformCallback(f,b)}async function ja(f,b={},E){return window.__TAURI_INTERNALS__.invoke(f,b,E)}const ia=()=>typeof window<"u"&&window.__TAURI_INTERNALS__!==void 0;let la=null,_u=null;const wy="polish-setup-v1",na=()=>typeof window<"u"&&(window.location.hostname==="localhost"||window.location.hostname==="127.0.0.1");async function dm(){if(na())try{const f=await Cl(),b=Number(f?.port);if(Number.isInteger(b)&&b>0)return _u=b,b}catch{}return _u||8080}async function mm(){return`http://127.0.0.1:${await dm()}`}function ii(f){const b=Number(f)||0;if(b<=0)return"0 B";const E=["B","KB","MB","GB","TB"],r=Math.min(E.length-1,Math.floor(Math.log(b)/Math.log(1024)));return`${(b/1024**r).toFixed(r===0?0:1)} ${E[r]}`}function ui(f){return typeof f=="string"?{filename:f,sizeBytes:0,size:"Unknown"}:{filename:f?.filename||f?.name||"",sizeBytes:Number(f?.sizeBytes||0),size:f?.size||(f?.sizeBytes?ii(f.sizeBytes):"Unknown")}}async function dn(f,b="The local server returned an invalid response."){const E=await f.text();let r={};try{r=JSON.parse(E||"{}")}catch{const N=E.trim().startsWith("0&&(_u=Number(G.port)),console.log("Backend restart:",G.message),G.message}catch(x){if(console.warn("Could not reach management API:",x.message),na())throw x;return"Backend management unavailable"}}async function Js(){if(ia())return await ja("stop_server");try{await fetch("/api/stop-backend",{method:"POST"})}catch{}return"Backend stopped"}async function Cl(){try{return await(await fetch("/api/backend-status")).json()}catch{return{ready:!1,settings:{}}}}async function Xy(){try{return(await(await fetch("/api/outputs")).json()).outputs||[]}catch{return[]}}async function Qy(f,b){const E=await fetch("/api/save-output",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({image:f,metadata:b})});return(await dn(E,"The local server returned an invalid save response.")).output}async function Vy(f){const b=await fetch("/api/delete-outputs",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({outputs:f})});return await dn(b,"The local server returned an invalid delete response.")}async function Zy(){try{return((await(await fetch("/api/models")).json()).models||[]).map(ui)}catch{return[]}}async function Ky(f,b,E,r,x,N,G){console.log("Initiating image generation:",{prompt:f,negativePrompt:b,constraints:E,activeModelName:r});const H=Date.now(),w=await mm(),h={prompt:f,negative_prompt:b||"",width:E.width||512,height:E.height||512,steps:E.steps||20,cfg_scale:E.cfgScale||7,seed:E.seed===-1?Math.floor(Math.random()*1e6):E.seed,sampler:E.sampler||"euler_a",image:x||null,denoising_strength:E.denoisingStrength||.7},A=async()=>{const X=h.steps;for(let Ke=1;Ke<=X;Ke++){if(G&&G.aborted)throw new DOMException("The user aborted a request.","AbortError");await new Promise(yt=>setTimeout(yt,3e3/X)),N&&N(Math.round(Ke/X*100))}const L=f.toLowerCase(),te=Math.abs(h.seed)||Math.floor(Math.random()*1e3);let W="#3B82F6",Oe="#8B5CF6",de="",Ee="Abstract Generation";L.includes("moon")||L.includes("space")||L.includes("astronomy")||L.includes("sky")?(W="#1E293B",Oe="#0F172A",Ee="Luminous Moon in Starry Sky",de=` @@ -77,7 +77,7 @@ Error generating stack: `+a.message+` - `);const Xe=` + `);const ke=` @@ -104,9 +104,9 @@ Error generating stack: `+a.message+` ${Ee} Seed: ${te} • Steps: ${h.steps} • Scale: ${h.cfg_scale} - `,P=`data:image/svg+xml;base64,${btoa(unescape(encodeURIComponent(Xe)))}`,ve=parseFloat(((Date.now()-H)/1e3).toFixed(1));return{image:P,seed:h.seed,duration_sec:ve}},U=!!h.image;let V=`${w}/v1/images/generations`,fe={prompt:h.prompt,negative_prompt:h.negative_prompt||"",n:1,size:`${h.width}x${h.height}`,response_format:"b64_json",steps:h.steps,cfg_scale:h.cfg_scale,seed:h.seed,sample_method:h.sampler};if(U){const k=String(h.image).replace(/^data:[^;]+;base64,/,"");V=`${w}/sdapi/v1/img2img`,fe={init_images:[k],prompt:h.prompt,negative_prompt:h.negative_prompt||"",denoising_strength:h.denoising_strength,steps:h.steps,cfg_scale:h.cfg_scale,seed:h.seed,width:h.width,height:h.height,sampler_name:h.sampler,sample_method:h.sampler,batch_size:1,n_iter:1,send_images:!0,save_images:!1}}try{const k=await fetch(V,{method:"POST",headers:{"Content-Type":"application/json"},signal:G,body:JSON.stringify(fe)});if(k.ok){const L=await k.json(),te=L?.data?.[0]?.b64_json??L?.images?.[0];if(te){const W=parseFloat(((Date.now()-H)/1e3).toFixed(1));return{image:`data:image/png;base64,${te}`,seed:L.data?.[0]?.seed??h.seed,duration_sec:W}}}else{let L=`Generation failed (HTTP ${k.status})`;try{const te=await k.json();(te?.detail||te?.error?.message)&&(L=te.detail||te.error.message)}catch{}throw new Error(L)}}catch(k){if(k.name==="AbortError"||k.message.startsWith("Generation failed"))throw k;console.warn("Could not reach local server. Falling back to simulation mode.",k)}return await A()}async function Jy(f,b,E){if(f instanceof File){const H=f;if(!na())throw new Error("File import requires the local image generator server.");return await $y(H,b,E),{response:"Model imported successfully"}}if(ia()){const{listen:H}=await Uy(async()=>{const{listen:h}=await import("./event-BUMINqWq.js");return{listen:h}},[]);let w=null;b&&(w=await H("import-progress",h=>{b(h.payload)}));try{return{response:await ja("import_model_file",{sourcePath:f}),unlisten:w}}catch(h){throw w&&w(),h}}const r=f.split(/[\\/]/).pop()||"imported_model.gguf";console.log(`Web Mode: Simulating copying ${r} to USB models folder`);const x=40;for(let H=1;H<=x;H++){if(E?.aborted)throw new DOMException("The user aborted a request.","AbortError");await new Promise(U=>setTimeout(U,150));const w=H/x*100,h=40+Math.sin(H)*5+Math.random()*2,A=(x-H)*.15;b&&b({filename:r,progress:w,speed_mb_s:h,eta_secs:A,status:"Copying to USB..."})}const N=localStorage.getItem("imported-models"),G=N?JSON.parse(N):[];return G.includes(r)||(G.push({filename:r,sizeBytes:0,size:"Unknown"}),localStorage.setItem("imported-models",JSON.stringify(G))),{response:"Model imported successfully"}}function $y(f,b,E){return new Promise((r,x)=>{const N=new XMLHttpRequest,G=Date.now();let H=!1;N.open("POST",`/api/import-model?filename=${encodeURIComponent(f.name)}`),N.setRequestHeader("Content-Type","application/octet-stream");const w=()=>{H=!0,N.abort()};E&&(E.aborted?w():E.addEventListener("abort",w,{once:!0})),N.upload.onprogress=h=>{if(!h.lengthComputable||!b)return;const A=Math.max(.1,(Date.now()-G)/1e3),U=h.loaded/A,V=Math.max(0,h.total-h.loaded);b({filename:f.name,progress:h.loaded/h.total*100,speed_mb_s:U/(1024*1024),eta_secs:V/Math.max(1,U),status:"Copying to models folder..."})},N.onload=()=>{let h={};try{h=JSON.parse(N.responseText||"{}")}catch{}N.status>=200&&N.status<300&&h.ok!==!1?(b&&b({filename:f.name,progress:100,speed_mb_s:0,eta_secs:0,status:"Import complete"}),r(h)):x(new Error(h.error||`Import failed (HTTP ${N.status})`))},N.onerror=()=>x(new Error("Import failed while uploading the file.")),N.onabort=()=>x(new DOMException(H?"Import cancelled by user.":"Import aborted.","AbortError")),N.send(f)})}async function Wy(f){if(ia())return await ja("delete_model_file",{filename:f});if(typeof window<"u"&&(window.location.hostname==="localhost"||window.location.hostname==="127.0.0.1"))try{const x=await fetch("/api/delete-model",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({filename:f})}),N=await x.json();if(!x.ok)throw new Error(N.error||"Failed to delete model file");return N}catch(x){throw console.error("Failed to delete model via local API:",x),x}const E=localStorage.getItem("imported-models");let r=E?JSON.parse(E):[];return r=r.filter(x=>ui(x).filename!==f),localStorage.setItem("imported-models",JSON.stringify(r)),`Simulated deletion of ${f} from browser session`}async function hm(){const f=await mm();try{return(await fetch(`${f}/v1/models`,{method:"GET"})).ok}catch{return!1}}async function Fy(f=30){const b=ia()||na()?f:3;for(let E=0;EsetTimeout(x,500))}return!1}async function Iy(f){try{return await(await fetch("/api/download-model",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({url:f})})).json()}catch(b){return console.error("Failed to start model download:",b),{ok:!1,error:b.message}}}async function Py(){try{return await(await fetch("/api/cancel-download",{method:"POST"})).json()}catch(f){return console.error("Failed to cancel model download:",f),{ok:!1,error:f.message}}}async function cm(){try{return await(await fetch("/api/download-progress")).json()}catch(f){return console.error("Failed to get download progress:",f),{active:!1,error:f.message}}}async function eg(){try{return await(await fetch("/api/generation-progress")).json()}catch(f){return console.error("Failed to get generation progress:",f),{active:!1,error:f.message}}}const tg=O.memo(({img:f,idx:b,isSelected:E,onClick:r})=>{const x=N=>{r(b,N)};return c.jsxs("div",{className:`gallery-item ${E?"selected":""}`,onClick:x,title:`Prompt: ${f.prompt} + `,P=`data:image/svg+xml;base64,${btoa(unescape(encodeURIComponent(ke)))}`,ve=parseFloat(((Date.now()-H)/1e3).toFixed(1));return{image:P,seed:h.seed,duration_sec:ve}},U=!!h.image;let V=`${w}/v1/images/generations`,fe={prompt:h.prompt,negative_prompt:h.negative_prompt||"",n:1,size:`${h.width}x${h.height}`,response_format:"b64_json",steps:h.steps,cfg_scale:h.cfg_scale,seed:h.seed,sample_method:h.sampler};if(U){const X=String(h.image).replace(/^data:[^;]+;base64,/,"");V=`${w}/sdapi/v1/img2img`,fe={init_images:[X],prompt:h.prompt,negative_prompt:h.negative_prompt||"",denoising_strength:h.denoising_strength,steps:h.steps,cfg_scale:h.cfg_scale,seed:h.seed,width:h.width,height:h.height,sampler_name:h.sampler,sample_method:h.sampler,batch_size:1,n_iter:1,send_images:!0,save_images:!1}}try{const X=await fetch(V,{method:"POST",headers:{"Content-Type":"application/json"},signal:G,body:JSON.stringify(fe)});if(X.ok){const L=await X.json(),te=L?.data?.[0]?.b64_json??L?.images?.[0];if(te){const W=parseFloat(((Date.now()-H)/1e3).toFixed(1));return{image:`data:image/png;base64,${te}`,seed:L.data?.[0]?.seed??h.seed,duration_sec:W}}}else{let L=`Generation failed (HTTP ${X.status})`;try{const te=await X.json();(te?.detail||te?.error?.message)&&(L=te.detail||te.error.message)}catch{}throw new Error(L)}}catch(X){if(X.name==="AbortError"||X.message.startsWith("Generation failed"))throw X;console.warn("Could not reach local server. Falling back to simulation mode.",X)}return await A()}async function Jy(f,b,E){if(f instanceof File){const H=f;if(!na())throw new Error("File import requires the local image generator server.");return await $y(H,b,E),{response:"Model imported successfully"}}if(ia()){const{listen:H}=await Uy(async()=>{const{listen:h}=await import("./event-DeDJUvqC.js");return{listen:h}},[]);let w=null;b&&(w=await H("import-progress",h=>{b(h.payload)}));try{return{response:await ja("import_model_file",{sourcePath:f}),unlisten:w}}catch(h){throw w&&w(),h}}const r=f.split(/[\\/]/).pop()||"imported_model.gguf";console.log(`Web Mode: Simulating copying ${r} to USB models folder`);const x=40;for(let H=1;H<=x;H++){if(E?.aborted)throw new DOMException("The user aborted a request.","AbortError");await new Promise(U=>setTimeout(U,150));const w=H/x*100,h=40+Math.sin(H)*5+Math.random()*2,A=(x-H)*.15;b&&b({filename:r,progress:w,speed_mb_s:h,eta_secs:A,status:"Copying to USB..."})}const N=localStorage.getItem("imported-models"),G=N?JSON.parse(N):[];return G.includes(r)||(G.push({filename:r,sizeBytes:0,size:"Unknown"}),localStorage.setItem("imported-models",JSON.stringify(G))),{response:"Model imported successfully"}}function $y(f,b,E){return new Promise((r,x)=>{const N=new XMLHttpRequest,G=Date.now();let H=!1;N.open("POST",`/api/import-model?filename=${encodeURIComponent(f.name)}`),N.setRequestHeader("Content-Type","application/octet-stream");const w=()=>{H=!0,N.abort()};E&&(E.aborted?w():E.addEventListener("abort",w,{once:!0})),N.upload.onprogress=h=>{if(!h.lengthComputable||!b)return;const A=Math.max(.1,(Date.now()-G)/1e3),U=h.loaded/A,V=Math.max(0,h.total-h.loaded);b({filename:f.name,progress:h.loaded/h.total*100,speed_mb_s:U/(1024*1024),eta_secs:V/Math.max(1,U),status:"Copying to models folder..."})},N.onload=()=>{let h={};try{h=JSON.parse(N.responseText||"{}")}catch{}N.status>=200&&N.status<300&&h.ok!==!1?(b&&b({filename:f.name,progress:100,speed_mb_s:0,eta_secs:0,status:"Import complete"}),r(h)):x(new Error(h.error||`Import failed (HTTP ${N.status})`))},N.onerror=()=>x(new Error("Import failed while uploading the file.")),N.onabort=()=>x(new DOMException(H?"Import cancelled by user.":"Import aborted.","AbortError")),N.send(f)})}async function Wy(f){if(ia())return await ja("delete_model_file",{filename:f});if(typeof window<"u"&&(window.location.hostname==="localhost"||window.location.hostname==="127.0.0.1"))try{const x=await fetch("/api/delete-model",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({filename:f})}),N=await x.json();if(!x.ok)throw new Error(N.error||"Failed to delete model file");return N}catch(x){throw console.error("Failed to delete model via local API:",x),x}const E=localStorage.getItem("imported-models");let r=E?JSON.parse(E):[];return r=r.filter(x=>ui(x).filename!==f),localStorage.setItem("imported-models",JSON.stringify(r)),`Simulated deletion of ${f} from browser session`}async function hm(){const f=await mm();try{return(await fetch(`${f}/v1/models`,{method:"GET"})).ok}catch{return!1}}async function Fy(f=30){const b=ia()||na()?f:3;for(let E=0;EsetTimeout(x,500))}return!1}async function Iy(f){try{return await(await fetch("/api/download-model",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({url:f})})).json()}catch(b){return console.error("Failed to start model download:",b),{ok:!1,error:b.message}}}async function Py(){try{return await(await fetch("/api/cancel-download",{method:"POST"})).json()}catch(f){return console.error("Failed to cancel model download:",f),{ok:!1,error:f.message}}}async function cm(){try{return await(await fetch("/api/download-progress")).json()}catch(f){return console.error("Failed to get download progress:",f),{active:!1,error:f.message}}}async function eg(){try{return await(await fetch("/api/generation-progress")).json()}catch(f){return console.error("Failed to get generation progress:",f),{active:!1,error:f.message}}}const tg=O.memo(({img:f,idx:b,isSelected:E,onClick:r})=>{const x=N=>{r(b,N)};return c.jsxs("div",{className:`gallery-item ${E?"selected":""}`,onClick:x,title:`Prompt: ${f.prompt} Seed: ${f.seed}${f.duration_sec?` -Time: ${f.duration_sec.toFixed(1)}s`:""}`,children:[c.jsx("img",{src:f.url,className:"gallery-thumb",alt:"Thumbnail",loading:"lazy",decoding:"async"}),E&&c.jsx("div",{className:"gallery-select-badge",children:c.jsx(Xs,{size:14})})]})});function lg({prompt:f,setPrompt:b,negativePrompt:E,setNegativePrompt:r,constraints:x,setConstraints:N,activeModel:G,generatedImages:H,setGeneratedImages:w,isGenerating:h,setIsGenerating:A,generationProgress:U,setGenerationProgress:V,setActiveTab:fe,showAlert:k=async({message:te})=>window.alert(te),showConfirm:L=async({message:te})=>window.confirm(te)}){const[te,W]=O.useState(null),[Oe,de]=O.useState(null),[Ee,Xe]=O.useState(null),[Ae,P]=O.useState(!1),[ve,Ke]=O.useState(0),[yt,me]=O.useState(0),[Je,st]=O.useState(0),[$e,ke]=O.useState(""),[_,C]=O.useState(!1),[J,he]=O.useState(!1),[ce,d]=O.useState(!1),[j,B]=O.useState(null),[q,K]=O.useState(null),[ee,se]=O.useState(!1),[Ze,Ne]=O.useState([]),[gt,Et]=O.useState(null),We=O.useRef(null),Ht=O.useRef(null),Tt=O.useRef(!1),Z=Y=>{const ye=Y.target.files?.[0];if(Y.target.value="",!ye)return;if(!ye.type.startsWith("image/")){K("Please choose an image file (PNG, JPG, or WEBP).");return}const He=new FileReader;He.onload=()=>Et(He.result),He.onerror=()=>K("Could not read the selected image file."),He.readAsDataURL(ye)},ie=()=>Et(null),D=async()=>{if(!f.trim())return;K(null),d(!0),B(null);let Y=!1;try{const Se=await Cl();if(Se&&Se.settings){const xe=Se.settings,Ge=xe.model?xe.model.split(/[\\/]/).pop():null,_e=G?G.split(/[\\/]/).pop():null;(Ge!==_e||parseInt(xe.steps)!==parseInt(x.steps)||Math.abs(parseFloat(xe.cfgScale)-parseFloat(x.cfgScale))>.05||xe.sampler!==x.sampler||parseInt(xe.threads)!==parseInt(x.threads)||!!xe.useGpu!=(x.useGpu!==!1)||(xe.backendType||(xe.useGpu===!1?"cpu":"auto"))!==(x.backendType||(x.useGpu===!1?"cpu":"auto")))&&(Y=!0)}else Y=!0}catch{Y=!0}if(Y)try{console.log("Settings out of sync, restarting backend..."),await Vs(G,x);let Se=!1,xe=null;for(let Ge=0;Ge<240;Ge++){const _e=await Cl();if(_e.loading&&B({progress:_e.loading.progress||0,phase:_e.loading.phase||"Loading model...",speed:_e.loading.speed||"",current:_e.loading.current||0,total:_e.loading.total||0,backendMode:_e.loading.backendMode||_e.settings?.backendMode||"",device:_e.loading.device||_e.settings?.backendDevice||""}),_e.ready){Se=!0;break}if(_e.error){xe=_e.error;break}if(!_e.running&&Ge>3){xe="The backend process terminated immediately on startup.";break}await new Promise(Ie=>setTimeout(Ie,500))}if(!Se)throw new Error(xe||"Backend server failed to start after applying configuration changes.")}catch(Se){console.error("Failed to restart backend:",Se),K(Se.message||"Failed to sync settings with backend."),d(!1);return}d(!1),B(null),We.current&&clearInterval(We.current),A(!0),V(0),Ke(0),st(0),ke(""),Tt.current=!1,C(!1),se(!1),Xe(null),W(null);const ye=(x.width>=1024?140:35)*.04,He=x.width>=1024?140:35,pt=(x.backendType||(x.useGpu===!1?"cpu":"auto"))!=="cpu";let ft=pt?ye:He,tt=!1,qt=0,rt=0,vt=0;me(Math.round(x.steps*ft)),We.current=setInterval(async()=>{vt++,Ke(vt);try{const Se=await eg();if(Se&&Se.active){const xe=Se.decoding||!1;se(xe);const Ge=xe?Se.steps||x.steps||20:Se.step||0,_e=Se.steps||x.steps||20,Ie=xe?"":Se.speed||"";(xe||Se.steps>0)&&(Tt.current=!0,st(Ge)),ke(xe?"decoding":Ie);let je=0;xe?je=99:_e>0&&(je=Math.round(Ge/_e*100)),je=Math.min(99,je),xe||Se.steps>0?V(je):V(bt=>Math.max(bt,je));let dt=0;if(xe)dt=3;else{const bt=parseFloat(Ie);if(!isNaN(bt)&&bt>0){const cl=Math.max(0,_e-Ge);Ie.includes("it/s")?dt=cl/bt:Ie.includes("s/it")&&(dt=cl*bt)}else{const cl=pt?ye:He;dt=Math.max(0,(_e-Ge)*cl)}}if(pt&&!tt){const bt=Ie.includes("it/s")&&numericSpeed<.2,cl=Ie.includes("s/it")&&numericSpeed>5;(bt||cl)&&(tt=!0,C(!0))}me(Math.round(dt))}else V(xe=>Math.min(15,xe+1)),me(xe=>Math.max(1,xe-1))}catch(Se){console.warn("Failed to get generation progress, running simulation fallback:",Se),pt&&!tt&&vt>x.steps*ye*1.3&&(tt=!0,C(!0),ft=He,qt=vt,rt=Math.min(95,Math.round(vt/(x.steps*ye)*100)));let xe=Math.min(x.steps-1,Math.floor(vt/ft)),Ge=x.steps*ft;if(vt>=Ge){const je=Math.ceil(vt/Math.max(.5,xe));ft=Math.max(ft+15,je+15),Ge=x.steps*ft,xe=Math.min(x.steps-1,Math.floor(vt/ft))}const _e=Math.max(1,Ge-vt);me(Math.round(_e));let Ie=0;if(tt){const je=99-rt,dt=Ge-qt;if(dt>0){const bt=Math.min(1,(vt-qt)/dt);if(bt<.85)Ie=Math.round(rt+bt*je);else{const cl=(vt-(qt+dt*.85))/(ft*2),ci=1-Math.exp(-cl);Ie=Math.min(99,Math.round(rt+.85*je+.14*je*ci))}}else Ie=99}else if(vtMath.max(je,Ie))}},1e3);try{Ht.current=new AbortController;const Se=await Ky(f,E,x,G,gt,je=>V(dt=>Math.max(dt,je)),Ht.current.signal);We.current&&clearInterval(We.current),V(100),st(x.steps),me(0),ke("");const xe={prompt:f,negativePrompt:E,seed:Se.seed,steps:x.steps,cfgScale:x.cfgScale,width:x.width,height:x.height,sampler:x.sampler,model:G,mode:gt?"img2img":"txt2img",denoisingStrength:gt?x.denoisingStrength:null,duration_sec:Se.duration_sec,timestamp:new Date().toLocaleTimeString()};let Ge=null,_e=null;try{if(Ge=await Qy(Se.image,xe),_e=Ge.url,!_e)throw new Error("The local server saved the image but did not return a file URL.")}catch(je){throw console.error("Generated image could not be saved:",je),new Error(`Image generated but could not be saved to USB: ${je.message||je}`)}W(_e),de(Se.seed),Xe(Se.duration_sec);const Ie={...xe,...Ge||{},url:_e};w(je=>[Ie,...je])}catch(Se){Se.name==="AbortError"?console.log("Generation request was aborted by the user"):(console.error("Generation failed:",Se),K(Se.message||"Generation failed. Please try again.")),We.current&&clearInterval(We.current)}finally{A(!1),Ht.current=null}},R=async()=>{if(await L({title:"Stop Generation?",message:"The current image generation will be cancelled and the local model server may restart.",confirmLabel:"Stop",danger:!0})){We.current&&clearInterval(We.current),he(!0),Ht.current&&Ht.current.abort();try{console.log("Cancelling: Stopping server to kill generation threads..."),await Js(),st(0),ke(""),se(!1),Tt.current=!1,G&&(console.log("Cancelling: Restarting server for future generations..."),await Vs(G,x),await Fy()||console.warn("Server failed to restart properly."))}catch(Y){console.error("Failed to restart server on cancellation:",Y)}finally{he(!1),A(!1),V(0),me(0)}}},F=async()=>{if(te)try{if(te.startsWith("data:image")){const ye=await(await fetch(te)).blob();await navigator.clipboard.write([new ClipboardItem({[ye.type]:ye})])}else{const Y=new Image;Y.crossOrigin="anonymous",Y.src=te,Y.onload=async()=>{const ye=document.createElement("canvas");ye.width=Y.width,ye.height=Y.height,ye.getContext("2d").drawImage(Y,0,0),ye.toBlob(async pt=>{await navigator.clipboard.write([new ClipboardItem({[pt.type]:pt})])},"image/png")}}P(!0),setTimeout(()=>P(!1),2e3)}catch(Y){console.error("Failed to copy image:",Y)}},ae=()=>{if(!te)return;const Y=document.createElement("a");Y.href=te,Y.download=`diffusion-${Oe||Date.now()}.png`,document.body.appendChild(Y),Y.click(),document.body.removeChild(Y)},At=(Y,ye=`diffusion-${Date.now()}.png`)=>{if(!Y)return;const He=document.createElement("a");He.href=Y,He.download=ye,document.body.appendChild(He),He.click(),document.body.removeChild(He)},Gt=O.useCallback(Y=>{b(Y.prompt),r(Y.negativePrompt),N(ye=>({...ye,steps:Y.steps,cfgScale:Y.cfgScale,width:Y.width,height:Y.height,sampler:Y.sampler,seed:Y.seed})),W(Y.url),de(Y.seed),Xe(Y.duration_sec??Y.durationSec??null)},[b,r,N]),dl=O.useCallback((Y,ye)=>{const He=ye.ctrlKey||ye.metaKey||ye.shiftKey;Ne(pt=>He?pt.includes(Y)?pt.filter(ft=>ft!==Y):[...pt,Y]:[Y]),H[Y]&&Gt(H[Y])},[H,Gt]),Re=Ze.map(Y=>H[Y]).filter(Boolean),al=()=>{Ne([])},Fe=()=>{Re[0]&&Gt(Re[0])},za=()=>{Re.forEach((Y,ye)=>{const He=Y.seed??Date.now();At(Y.url,`diffusion-${He}-${ye+1}.png`)})},Ta=async()=>{if(Re.length===0)return;const Y=Re.length;if(await L({title:"Delete Selected Outputs?",message:`Delete ${Y} selected output${Y===1?"":"s"} from USB? This removes the image and metadata files.`,confirmLabel:"Delete",danger:!0}))try{await Vy(Re);const He=new Set(Ze);w(pt=>pt.filter((ft,tt)=>!He.has(tt))),Ne([]),Re.some(pt=>pt.url===te)&&(W(null),de(null),Xe(null))}catch(He){console.error("Failed to delete selected outputs:",He),k({title:"Delete Failed",message:He.message||String(He),danger:!0})}};return c.jsxs("div",{className:"workspace-area",children:[c.jsxs("div",{className:"workspace-title-section",children:[c.jsx("h2",{className:"workspace-title",children:"Generator Dashboard"}),c.jsx("p",{className:"workspace-subtitle",children:"Create high-fidelity images completely locally on your external drive."})]}),c.jsxs("div",{className:"generator-layout",children:[c.jsx("div",{children:c.jsxs("div",{className:"m3-card",children:[c.jsxs("h3",{className:"m3-card-title",children:[c.jsx(Su,{size:18,style:{color:"var(--md-sys-color-primary)"}}),"Generation Workspace"]}),c.jsxs("div",{className:"m3-field-group",children:[c.jsxs("div",{className:"m3-text-field",children:[c.jsx("label",{className:"m3-text-field-label",children:"Positive Prompt"}),c.jsx("textarea",{className:"m3-textarea",value:f,onChange:Y=>b(Y.target.value),placeholder:"Enter a descriptive prompt (e.g. 'A futuristic city in cyberpunk aesthetic, high details, cinematic lighting')...",disabled:h})]}),c.jsxs("div",{className:"m3-text-field",children:[c.jsx("label",{className:"m3-text-field-label",children:"Negative Prompt (Optional)"}),c.jsx("input",{type:"text",className:"m3-input",value:E,onChange:Y=>r(Y.target.value),placeholder:"Items to avoid (e.g. 'blurry, low quality, deformed hands, texts')...",disabled:h})]}),c.jsxs("div",{className:"m3-text-field",children:[c.jsx("label",{className:"m3-text-field-label",children:"Base Image (Optional)"}),gt?c.jsxs("div",{style:{display:"flex",gap:"12px",alignItems:"center",padding:"12px",background:"var(--md-sys-color-surface-variant)",borderRadius:"var(--md-shape-corner-medium)",border:"1px solid var(--md-sys-color-outline-variant)"},children:[c.jsx("img",{src:gt,alt:"Base",style:{width:"64px",height:"64px",objectFit:"cover",borderRadius:"8px",flexShrink:0}}),c.jsxs("div",{style:{flex:1,minWidth:0},children:[c.jsx("div",{style:{fontWeight:600,fontSize:"0.85rem"},children:"Base image ready"}),c.jsx("div",{style:{fontSize:"0.75rem",color:"var(--md-sys-color-outline)"},children:"The AI will redraw this image guided by your prompt."})]}),c.jsxs("button",{type:"button",className:"m3-btn m3-btn-error",style:{height:"34px",flexShrink:0},onClick:ie,disabled:h,children:[c.jsx(rn,{size:14}),c.jsx("span",{children:"Remove"})]})]}):c.jsxs("label",{className:"import-box",style:{margin:0,padding:"16px",cursor:h?"not-allowed":"pointer"},children:[c.jsx("input",{type:"file",accept:"image/png,image/jpeg,image/webp",style:{display:"none"},onChange:Z,disabled:h}),c.jsx(iy,{className:"import-icon"}),c.jsx("span",{style:{fontWeight:600},children:"Upload a base image"}),c.jsx("span",{style:{fontSize:"0.75rem",color:"var(--md-sys-color-outline)",textAlign:"center"},children:"Optional. Generate a new image based on one of your own."})]}),gt&&c.jsxs("div",{style:{marginTop:"12px"},children:[c.jsxs("div",{style:{display:"flex",justifyContent:"space-between",fontSize:"0.8rem",marginBottom:"4px"},children:[c.jsx("span",{children:"Transformation strength"}),c.jsx("span",{children:x.denoisingStrength.toFixed(2)})]}),c.jsx("input",{type:"range",min:"0.1",max:"1",step:"0.05",value:x.denoisingStrength,onChange:Y=>N(ye=>({...ye,denoisingStrength:parseFloat(Y.target.value)})),disabled:h,style:{width:"100%"}}),c.jsx("div",{style:{fontSize:"0.72rem",color:"var(--md-sys-color-outline)",marginTop:"2px"},children:"Lower = closer to your image; higher = more creative freedom. 0.7 is a good start."})]})]}),c.jsxs("div",{className:"m3-text-field",children:[c.jsx("label",{className:"m3-text-field-label",children:"Active Image Constraints"}),c.jsxs("div",{className:"chips-container",children:[c.jsxs("div",{className:"status-chip",onClick:()=>fe("constraints"),children:[c.jsx(Ks,{size:14}),c.jsxs("span",{children:["Resolution: ",x.width,"x",x.height]})]}),c.jsxs("div",{className:"status-chip",onClick:()=>fe("constraints"),children:[c.jsx(aa,{size:14}),c.jsxs("span",{children:["Steps: ",x.steps]})]}),c.jsxs("div",{className:"status-chip",onClick:()=>fe("constraints"),children:[c.jsx(Su,{size:14}),c.jsxs("span",{children:["Sampler: ",x.sampler]})]}),c.jsx("div",{className:"status-chip",onClick:()=>fe("constraints"),children:c.jsxs("span",{children:["Seed: ",x.seed===-1?"Random":x.seed]})})]})]}),c.jsxs("button",{className:"m3-btn m3-btn-filled",style:{height:"48px",marginTop:"8px"},onClick:D,disabled:h||!f.trim()||!G,children:[c.jsx(Su,{size:18}),c.jsx("span",{children:G?gt?"Generate from Base Image":"Generate Local Image":"Select Model to Generate"})]})]})]})}),c.jsxs("div",{className:"m3-card output-panel",children:[c.jsx("div",{className:"output-image-container",children:h||J||ce?c.jsx("div",{className:"progress-overlay",children:ce?c.jsxs("div",{style:{display:"flex",flexDirection:"column",alignItems:"center",gap:"16px",padding:"20px"},children:[c.jsx("div",{className:"progress-spinner"}),c.jsx("div",{className:"progress-text",style:{fontSize:"1.1rem",fontWeight:700,textAlign:"center"},children:"Syncing Settings & Initializing..."}),j?c.jsxs("div",{style:{width:"min(360px, 90%)"},children:[c.jsxs("div",{style:{display:"flex",justifyContent:"space-between",gap:"12px",fontSize:"0.82rem",fontWeight:700,marginBottom:"6px"},children:[c.jsxs("span",{children:[j.phase,j.speed?` (${j.speed})`:""]}),c.jsx("span",{children:j.total>0?`Loaded ${j.current} / ${j.total} tensors`:`${Math.round(j.progress)}%`})]}),c.jsx("div",{className:"progress-bar-container",style:{margin:0},children:c.jsx("div",{className:"progress-bar-fill",style:{width:`${Math.min(100,Math.max(0,j.progress))}%`,transition:"width 0.25s ease"}})}),(j.backendMode||j.device)&&c.jsxs("div",{style:{fontSize:"0.78rem",opacity:.8,textAlign:"center",marginTop:"8px"},children:["Loading on ",j.backendMode||"backend",j.device?` • ${j.device}`:""]})]}):c.jsx("p",{style:{fontSize:"0.85rem",opacity:.8,textAlign:"center",maxWidth:"280px",margin:0},children:"Adjusting inference settings and restarting the local model server."})]}):J?c.jsxs("div",{style:{display:"flex",flexDirection:"column",alignItems:"center",gap:"16px",padding:"20px"},children:[c.jsx("div",{className:"progress-spinner"}),c.jsx("div",{className:"progress-text",style:{fontSize:"1.1rem",fontWeight:700,textAlign:"center"},children:"Cancelling Generation..."}),c.jsx("p",{style:{fontSize:"0.85rem",opacity:.8,textAlign:"center",maxWidth:"280px",margin:0},children:"Stopping CPU/GPU execution threads and reloading model weights. Please wait a moment."})]}):c.jsxs(c.Fragment,{children:[c.jsx("div",{className:"progress-spinner"}),c.jsx("div",{className:"progress-text",style:{fontSize:"1.1rem",fontWeight:700},children:ee?"Decoding Latents...":"Generating Locally..."}),_&&c.jsx("div",{style:{fontSize:"0.8rem",color:"var(--md-sys-color-primary)",fontWeight:600,background:"var(--md-sys-color-primary-container)",padding:"4px 12px",borderRadius:"12px",margin:"4px 0 8px 0",animation:"pulse 2s infinite"},children:"⚠️ CPU Fallback Detected (Running Slower)"}),c.jsxs("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"16px",width:"80%",margin:"8px 0 0 0",fontSize:"0.85rem",opacity:.9},children:[c.jsxs("div",{style:{textAlign:"left"},children:[c.jsx("strong",{children:"Step:"})," ",Je," / ",x.steps," (",Math.max(0,x.steps-Je)," left)"]}),c.jsxs("div",{style:{textAlign:"right"},children:[c.jsx("strong",{children:"Elapsed:"})," ",ve,"s",$e&&` (${$e==="decoding"?"decoding":$e})`]})]}),c.jsx("div",{className:"progress-bar-container",style:{margin:"4px 0 10px 0"},children:c.jsx("div",{className:"progress-bar-fill",style:{width:`${U}%`,transition:"width 1s linear"}})}),c.jsxs("div",{style:{fontSize:"0.85rem",opacity:.8,display:"flex",gap:"8px",alignItems:"center"},children:[c.jsxs("span",{children:["Progress: ",U,"%"]}),c.jsx("span",{children:"•"}),c.jsxs("span",{children:["Est. remaining: ",yt,"s"]})]}),c.jsx("button",{className:"m3-btn m3-btn-error",style:{marginTop:"16px",height:"36px",padding:"0 24px"},onClick:R,children:"Stop Generating"})]})}):te?c.jsx("img",{src:te,className:"output-image",alt:"Generated Output"}):q?c.jsxs("div",{style:{textAlign:"center",padding:"24px",color:"var(--md-sys-color-error)",display:"flex",flexDirection:"column",alignItems:"center",gap:"16px"},children:[c.jsx("div",{style:{background:"rgba(239, 68, 68, 0.1)",padding:"16px",borderRadius:"50%",display:"flex",alignItems:"center",justifyContent:"center"},children:c.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",width:"48",height:"48",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:"2",children:c.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z"})})}),c.jsx("h3",{style:{margin:0,fontSize:"1.2rem",fontWeight:"bold"},children:"Generation Failed"}),c.jsx("p",{style:{margin:0,fontSize:"0.95rem",opacity:.9,maxWidth:"320px",lineHeight:"1.4"},children:q}),c.jsxs("div",{style:{marginTop:"8px",fontSize:"0.85rem",opacity:.8,color:"var(--md-sys-color-on-surface-variant)"},children:["Hint: Try lowering the resolution in the ",c.jsx("strong",{children:"Image Constraints"})," settings (e.g., to 512x512)."]})]}):c.jsxs("div",{style:{textAlign:"center"},children:[c.jsx(Su,{className:"output-placeholder-icon"}),c.jsxs("p",{className:"output-placeholder-text",children:["Your generated image will appear here.",c.jsx("br",{}),"Enter a prompt on the left and click Generate."]})]})}),te&&!h&&c.jsxs(c.Fragment,{children:[c.jsxs("div",{style:{width:"100%",display:"flex",justifyContent:"space-between",marginTop:"12px",fontSize:"0.8rem",color:"var(--md-sys-color-outline)"},children:[c.jsxs("span",{children:["Seed: ",Oe]}),Ee&&c.jsxs("span",{children:["Inference Time: ",Ee.toFixed(1),"s"]})]}),c.jsxs("div",{className:"image-actions",children:[c.jsxs("button",{className:"m3-btn m3-btn-tonal",onClick:F,children:[Ae?c.jsx(Xs,{size:16}):c.jsx(J0,{size:16}),c.jsx("span",{children:Ae?"Copied":"Copy"})]}),c.jsxs("button",{className:"m3-btn m3-btn-outlined",onClick:ae,children:[c.jsx(nm,{size:16}),c.jsx("span",{children:"Save to USB"})]})]})]})]})]}),c.jsxs("div",{className:"gallery-section",children:[c.jsxs("div",{className:"gallery-header",children:[c.jsx("h3",{className:"m3-card-title",style:{marginBottom:0},children:"Recent Outputs Gallery"}),Re.length>0&&c.jsxs("div",{className:"gallery-selection-actions",children:[c.jsxs("span",{className:"gallery-selection-count",children:[Re.length," selected"]}),c.jsxs("button",{className:"m3-btn m3-btn-tonal",onClick:Fe,children:[c.jsx(Xs,{size:14}),c.jsx("span",{children:"Use"})]}),c.jsxs("button",{className:"m3-btn m3-btn-outlined",onClick:za,children:[c.jsx(nm,{size:14}),c.jsx("span",{children:"Download"})]}),c.jsxs("button",{className:"m3-btn m3-btn-error",onClick:Ta,children:[c.jsx(rn,{size:14}),c.jsx("span",{children:"Delete"})]}),c.jsx("button",{className:"m3-btn m3-btn-outlined",onClick:al,children:"Clear"})]})]}),H.length===0?c.jsx("div",{className:"m3-card gallery-empty",children:"No images generated in this session yet. Everything will be saved directly on your external drive."}):c.jsxs(c.Fragment,{children:[c.jsx("div",{className:"gallery-hint",children:"Click to select one image. Ctrl-click or Shift-click to select multiple."}),c.jsx("div",{className:"gallery-grid",children:H.map((Y,ye)=>c.jsx(tg,{img:Y,idx:ye,isSelected:Ze.includes(ye),onClick:dl},Y.image||ye))})]})]})]})}const ag=O.memo(lg),ng=[{group:"SDXL - Best Quality",items:[{name:"Juggernaut XL v9 Lightning",filename:"Juggernaut_RunDiffusionPhoto2_Lightning_4Steps.safetensors",format:"Safetensors",approxSize:"6.6 GB",resolution:"1024x1024",notes:"Photorealistic SDXL model tuned for 4-8 step Lightning generation.",url:"https://huggingface.co/RunDiffusion/Juggernaut-XL-Lightning/resolve/main/Juggernaut_RunDiffusionPhoto2_Lightning_4Steps.safetensors"},{name:"DreamShaper XL Lightning",filename:"DreamShaperXL_Lightning.safetensors",format:"Safetensors",approxSize:"6.6 GB",resolution:"1024x1024",notes:"All-around SDXL model for fantasy art, renders, illustration, and stylized images.",url:"https://huggingface.co/Lykon/dreamshaper-xl-lightning/resolve/main/DreamShaperXL_Lightning.safetensors"},{name:"SDXL Base 1.0 Q4_0 GGUF",filename:"stable-diffusion-xl-base-1.0-Q4_0.gguf",format:"GGUF",approxSize:"3.8 GB",resolution:"1024x1024",notes:"Quantized SDXL base model for lower VRAM or CPU-friendly generation.",url:"https://huggingface.co/hum-ma/SDXL-models-GGUF/resolve/7e15380138e7069ca3aaef5bf0401c3406e3a593/stable-diffusion-xl-base-1.0-Q4_0.gguf"}]},{group:"SD 1.5 - Ultra Fast / Low VRAM",items:[{name:"DreamShaper 8",filename:"DreamShaper_8_pruned.safetensors",format:"Safetensors",approxSize:"2.1 GB",resolution:"512x512",notes:"General-purpose SD 1.5 model for illustration, anime, and semi-realistic portraits.",url:"https://huggingface.co/Lykon/DreamShaper/resolve/main/DreamShaper_8_pruned.safetensors"},{name:"CyberRealistic V8",filename:"CyberRealistic_V8_FP16.safetensors",format:"Safetensors",approxSize:"2.1 GB",resolution:"512x512",notes:"High-fidelity realism and photorealism in the SD 1.5 ecosystem.",url:"https://huggingface.co/cyberdelia/CyberRealistic/resolve/main/CyberRealistic_V8_FP16.safetensors"},{name:"ReV Animated v1.2.2",filename:"rev-animated-v1-2-2.safetensors",format:"Safetensors",approxSize:"2.1 GB",resolution:"512x512",notes:"Semi-realistic, 2.5D, anime, fantasy, and stylized digital art.",url:"https://huggingface.co/danbrown/RevAnimated-v1-2-2/resolve/main/rev-animated-v1-2-2.safetensors"}]}];function ig({activeModel:f,setActiveModel:b,serverRunning:E,setServerRunning:r,constraints:x,showAlert:N=async({message:H})=>window.alert(H),showConfirm:G=async({message:H})=>window.confirm(H)}){const[H,w]=O.useState([]),[h,A]=O.useState(null),[U,V]=O.useState(0),[fe,k]=O.useState(""),[L,te]=O.useState(null),[W,Oe]=O.useState(null),[de,Ee]=O.useState(null),[Xe,Ae]=O.useState({filename:"",speed:"0.0",eta:0,status:""}),[P,ve]=O.useState(""),[Ke,yt]=O.useState(null),[me,Je]=O.useState(!1),[st,$e]=O.useState({progress:0,phase:""}),[ke,_]=O.useState(null),[C,J]=O.useState({backendMode:"",backendBinary:"",backendDevice:""}),he=H.map(D=>ui(D).filename),ce=L!==null||me;O.useEffect(()=>{B(),d()},[]),O.useEffect(()=>{if(!E&&!L){J({backendMode:"",backendBinary:"",backendDevice:""});return}let D=!1;const R=async()=>{try{const ae=await Cl();if(D)return;J({backendMode:ae.settings?.backendMode||ae.loading?.backendMode||"",backendBinary:ae.settings?.backendBinary||ae.loading?.backendBinary||"",backendDevice:ae.settings?.backendDevice||ae.loading?.device||""})}catch{}};R();const F=setInterval(R,2e3);return()=>{D=!0,clearInterval(F)}},[E,L]);const d=async()=>{try{const D=await cm();D.active&&D.filename&&j(D.filename)}catch(D){console.error("Check active download failed:",D)}},j=D=>{A(D);const R=setInterval(async()=>{try{const F=await cm();F.active?(V(F.progress===-1?0:F.progress),k(`${F.speed} • ETA ${F.eta}s`)):(clearInterval(R),A(null),F.error?String(F.error).toLowerCase().includes("cancelled")||N({title:"Download Failed",message:F.error,danger:!0}):B())}catch(F){console.error("Polling error:",F)}},1e3)},B=async()=>{try{const D=await Xy();w(D.map(ui).filter(R=>R.filename))}catch(D){console.error(D)}},q=async(D,R)=>{if(h||he.includes(R)&&!await G({title:"Overwrite Model?",message:`"${R}" is already downloaded. Do you want to download and overwrite it?`,confirmLabel:"Overwrite"}))return;const F=typeof window<"u"&&window.__TAURI_INTERNALS__!==void 0,ae=typeof window<"u"&&(window.location.hostname==="localhost"||window.location.hostname==="127.0.0.1");if(!F&&!ae){N({title:"Server Required",message:"Model download requires the local image generator server.",danger:!0});return}try{const At=await Iy(D);At.ok?j(R):N({title:"Download Failed",message:At.error||"Unknown error",danger:!0})}catch(At){N({title:"Download Error",message:At.message,danger:!0})}},K=async D=>{if(D.preventDefault(),!P.trim())return;let R="model.gguf";try{const F=new URL(P.trim());if(F.protocol!=="http:"&&F.protocol!=="https:")throw new Error("URL protocol must be http or https");if(R=F.pathname.split("/").pop()||"",!R)throw new Error("Could not extract filename from URL");const ae=R.toLowerCase();if(!ae.endsWith(".gguf")&&!ae.endsWith(".safetensors")&&!ae.endsWith(".ckpt"))throw new Error("URL must point to a .gguf, .safetensors, or .ckpt weights file")}catch(F){N({title:"Invalid URL",message:F.message,danger:!0});return}await q(P.trim(),R),ve("")},ee=D=>{q(D.url,D.filename)},se=async()=>{await Py(),A(null),V(0),k(""),await B()},Ze=async D=>{if(f&&f!==D&&E){_(D);return}await Ne(D)},Ne=async D=>{const R=typeof window<"u"&&window.__TAURI_INTERNALS__!==void 0,F=typeof window<"u"&&(window.location.hostname==="localhost"||window.location.hostname==="127.0.0.1"),At=(await Cl())?.port||8080;if(!R&&!F){const Gt=await hm(),dl=`.\\backend\\win\\vulkan\\sd-vulkan.exe --listen-port ${At} --model .\\models\\${D} --threads 8`;Gt?await G({title:"Web Browser Mode",message:`To load "${D}" on the active GPU server, restart your terminal backend with: +Time: ${f.duration_sec.toFixed(1)}s`:""}`,children:[c.jsx("img",{src:f.url,className:"gallery-thumb",alt:"Thumbnail",loading:"lazy",decoding:"async"}),E&&c.jsx("div",{className:"gallery-select-badge",children:c.jsx(ks,{size:14})})]})});function lg({prompt:f,setPrompt:b,negativePrompt:E,setNegativePrompt:r,constraints:x,setConstraints:N,activeModel:G,generatedImages:H,setGeneratedImages:w,isGenerating:h,setIsGenerating:A,generationProgress:U,setGenerationProgress:V,setActiveTab:fe,showAlert:X=async({message:te})=>window.alert(te),showConfirm:L=async({message:te})=>window.confirm(te)}){const[te,W]=O.useState(null),[Oe,de]=O.useState(null),[Ee,ke]=O.useState(null),[Ae,P]=O.useState(!1),[ve,Ke]=O.useState(0),[yt,me]=O.useState(0),[Je,st]=O.useState(0),[$e,Xe]=O.useState(""),[_,C]=O.useState(!1),[J,he]=O.useState(!1),[ce,d]=O.useState(!1),[j,B]=O.useState(null),[q,K]=O.useState(null),[ee,se]=O.useState(!1),[Ze,Ne]=O.useState([]),[gt,Et]=O.useState(null),We=O.useRef(null),Ht=O.useRef(null),Tt=O.useRef(!1),Z=Y=>{const ye=Y.target.files?.[0];if(Y.target.value="",!ye)return;if(!ye.type.startsWith("image/")){K("Please choose an image file (PNG, JPG, or WEBP).");return}const He=new FileReader;He.onload=()=>Et(He.result),He.onerror=()=>K("Could not read the selected image file."),He.readAsDataURL(ye)},ie=()=>Et(null),D=async()=>{if(!f.trim())return;K(null),d(!0),B(null);let Y=!1;try{const Se=await Cl();if(Se&&Se.settings){const xe=Se.settings,Ge=xe.model?xe.model.split(/[\\/]/).pop():null,_e=G?G.split(/[\\/]/).pop():null;(Ge!==_e||parseInt(xe.steps)!==parseInt(x.steps)||Math.abs(parseFloat(xe.cfgScale)-parseFloat(x.cfgScale))>.05||xe.sampler!==x.sampler||parseInt(xe.threads)!==parseInt(x.threads)||!!xe.useGpu!=(x.useGpu!==!1)||(xe.backendType||(xe.useGpu===!1?"cpu":"auto"))!==(x.backendType||(x.useGpu===!1?"cpu":"auto")))&&(Y=!0)}else Y=!0}catch{Y=!0}if(Y)try{console.log("Settings out of sync, restarting backend..."),await Vs(G,x);let Se=!1,xe=null;for(let Ge=0;Ge<240;Ge++){const _e=await Cl();if(_e.loading&&B({progress:_e.loading.progress||0,phase:_e.loading.phase||"Loading model...",speed:_e.loading.speed||"",current:_e.loading.current||0,total:_e.loading.total||0,backendMode:_e.loading.backendMode||_e.settings?.backendMode||"",device:_e.loading.device||_e.settings?.backendDevice||""}),_e.ready){Se=!0;break}if(_e.error){xe=_e.error;break}if(!_e.running&&Ge>3){xe="The backend process terminated immediately on startup.";break}await new Promise(Ie=>setTimeout(Ie,500))}if(!Se)throw new Error(xe||"Backend server failed to start after applying configuration changes.")}catch(Se){console.error("Failed to restart backend:",Se),K(Se.message||"Failed to sync settings with backend."),d(!1);return}d(!1),B(null),We.current&&clearInterval(We.current),A(!0),V(0),Ke(0),st(0),Xe(""),Tt.current=!1,C(!1),se(!1),ke(null),W(null);const ye=(x.width>=1024?140:35)*.04,He=x.width>=1024?140:35,pt=(x.backendType||(x.useGpu===!1?"cpu":"auto"))!=="cpu";let ft=pt?ye:He,tt=!1,qt=0,rt=0,vt=0;me(Math.round(x.steps*ft)),We.current=setInterval(async()=>{vt++,Ke(vt);try{const Se=await eg();if(Se&&Se.active){const xe=Se.decoding||!1;se(xe);const Ge=xe?Se.steps||x.steps||20:Se.step||0,_e=Se.steps||x.steps||20,Ie=xe?"":Se.speed||"";(xe||Se.steps>0)&&(Tt.current=!0,st(Ge)),Xe(xe?"decoding":Ie);let je=0;xe?je=99:_e>0&&(je=Math.round(Ge/_e*100)),je=Math.min(99,je),xe||Se.steps>0?V(je):V(bt=>Math.max(bt,je));let dt=0;if(xe)dt=3;else{const bt=parseFloat(Ie);if(!isNaN(bt)&&bt>0){const cl=Math.max(0,_e-Ge);Ie.includes("it/s")?dt=cl/bt:Ie.includes("s/it")&&(dt=cl*bt)}else{const cl=pt?ye:He;dt=Math.max(0,(_e-Ge)*cl)}}if(pt&&!tt){const bt=Ie.includes("it/s")&&numericSpeed<.2,cl=Ie.includes("s/it")&&numericSpeed>5;(bt||cl)&&(tt=!0,C(!0))}me(Math.round(dt))}else V(xe=>Math.min(15,xe+1)),me(xe=>Math.max(1,xe-1))}catch(Se){console.warn("Failed to get generation progress, running simulation fallback:",Se),pt&&!tt&&vt>x.steps*ye*1.3&&(tt=!0,C(!0),ft=He,qt=vt,rt=Math.min(95,Math.round(vt/(x.steps*ye)*100)));let xe=Math.min(x.steps-1,Math.floor(vt/ft)),Ge=x.steps*ft;if(vt>=Ge){const je=Math.ceil(vt/Math.max(.5,xe));ft=Math.max(ft+15,je+15),Ge=x.steps*ft,xe=Math.min(x.steps-1,Math.floor(vt/ft))}const _e=Math.max(1,Ge-vt);me(Math.round(_e));let Ie=0;if(tt){const je=99-rt,dt=Ge-qt;if(dt>0){const bt=Math.min(1,(vt-qt)/dt);if(bt<.85)Ie=Math.round(rt+bt*je);else{const cl=(vt-(qt+dt*.85))/(ft*2),ci=1-Math.exp(-cl);Ie=Math.min(99,Math.round(rt+.85*je+.14*je*ci))}}else Ie=99}else if(vtMath.max(je,Ie))}},1e3);try{Ht.current=new AbortController;const Se=await Ky(f,E,x,G,gt,je=>V(dt=>Math.max(dt,je)),Ht.current.signal);We.current&&clearInterval(We.current),V(100),st(x.steps),me(0),Xe("");const xe={prompt:f,negativePrompt:E,seed:Se.seed,steps:x.steps,cfgScale:x.cfgScale,width:x.width,height:x.height,sampler:x.sampler,model:G,mode:gt?"img2img":"txt2img",denoisingStrength:gt?x.denoisingStrength:null,duration_sec:Se.duration_sec,timestamp:new Date().toLocaleTimeString()};let Ge=null,_e=null;try{if(Ge=await Qy(Se.image,xe),_e=Ge.url,!_e)throw new Error("The local server saved the image but did not return a file URL.")}catch(je){throw console.error("Generated image could not be saved:",je),new Error(`Image generated but could not be saved to USB: ${je.message||je}`)}W(_e),de(Se.seed),ke(Se.duration_sec);const Ie={...xe,...Ge||{},url:_e};w(je=>[Ie,...je])}catch(Se){Se.name==="AbortError"?console.log("Generation request was aborted by the user"):(console.error("Generation failed:",Se),K(Se.message||"Generation failed. Please try again.")),We.current&&clearInterval(We.current)}finally{A(!1),Ht.current=null}},R=async()=>{if(await L({title:"Stop Generation?",message:"The current image generation will be cancelled and the local model server may restart.",confirmLabel:"Stop",danger:!0})){We.current&&clearInterval(We.current),he(!0),Ht.current&&Ht.current.abort();try{console.log("Cancelling: Stopping server to kill generation threads..."),await Js(),st(0),Xe(""),se(!1),Tt.current=!1,G&&(console.log("Cancelling: Restarting server for future generations..."),await Vs(G,x),await Fy()||console.warn("Server failed to restart properly."))}catch(Y){console.error("Failed to restart server on cancellation:",Y)}finally{he(!1),A(!1),V(0),me(0)}}},F=async()=>{if(te)try{if(te.startsWith("data:image")){const ye=await(await fetch(te)).blob();await navigator.clipboard.write([new ClipboardItem({[ye.type]:ye})])}else{const Y=new Image;Y.crossOrigin="anonymous",Y.src=te,Y.onload=async()=>{const ye=document.createElement("canvas");ye.width=Y.width,ye.height=Y.height,ye.getContext("2d").drawImage(Y,0,0),ye.toBlob(async pt=>{await navigator.clipboard.write([new ClipboardItem({[pt.type]:pt})])},"image/png")}}P(!0),setTimeout(()=>P(!1),2e3)}catch(Y){console.error("Failed to copy image:",Y)}},ae=()=>{if(!te)return;const Y=document.createElement("a");Y.href=te,Y.download=`diffusion-${Oe||Date.now()}.png`,document.body.appendChild(Y),Y.click(),document.body.removeChild(Y)},At=(Y,ye=`diffusion-${Date.now()}.png`)=>{if(!Y)return;const He=document.createElement("a");He.href=Y,He.download=ye,document.body.appendChild(He),He.click(),document.body.removeChild(He)},Gt=O.useCallback(Y=>{b(Y.prompt),r(Y.negativePrompt),N(ye=>({...ye,steps:Y.steps,cfgScale:Y.cfgScale,width:Y.width,height:Y.height,sampler:Y.sampler,seed:Y.seed})),W(Y.url),de(Y.seed),ke(Y.duration_sec??Y.durationSec??null)},[b,r,N]),dl=O.useCallback((Y,ye)=>{const He=ye.ctrlKey||ye.metaKey||ye.shiftKey;Ne(pt=>He?pt.includes(Y)?pt.filter(ft=>ft!==Y):[...pt,Y]:[Y]),H[Y]&&Gt(H[Y])},[H,Gt]),Re=Ze.map(Y=>H[Y]).filter(Boolean),al=()=>{Ne([])},Fe=()=>{Re[0]&&Gt(Re[0])},za=()=>{Re.forEach((Y,ye)=>{const He=Y.seed??Date.now();At(Y.url,`diffusion-${He}-${ye+1}.png`)})},Ta=async()=>{if(Re.length===0)return;const Y=Re.length;if(await L({title:"Delete Selected Outputs?",message:`Delete ${Y} selected output${Y===1?"":"s"} from USB? This removes the image and metadata files.`,confirmLabel:"Delete",danger:!0}))try{await Vy(Re);const He=new Set(Ze);w(pt=>pt.filter((ft,tt)=>!He.has(tt))),Ne([]),Re.some(pt=>pt.url===te)&&(W(null),de(null),ke(null))}catch(He){console.error("Failed to delete selected outputs:",He),X({title:"Delete Failed",message:He.message||String(He),danger:!0})}};return c.jsxs("div",{className:"workspace-area",children:[c.jsxs("div",{className:"workspace-title-section",children:[c.jsx("h2",{className:"workspace-title",children:"Generator Dashboard"}),c.jsx("p",{className:"workspace-subtitle",children:"Create high-fidelity images completely locally on your external drive."})]}),c.jsxs("div",{className:"generator-layout",children:[c.jsx("div",{children:c.jsxs("div",{className:"m3-card",children:[c.jsxs("h3",{className:"m3-card-title",children:[c.jsx(Su,{size:18,style:{color:"var(--md-sys-color-primary)"}}),"Generation Workspace"]}),c.jsxs("div",{className:"m3-field-group",children:[c.jsxs("div",{className:"m3-text-field",children:[c.jsx("label",{className:"m3-text-field-label",children:"Positive Prompt"}),c.jsx("textarea",{className:"m3-textarea",value:f,onChange:Y=>b(Y.target.value),placeholder:"Enter a descriptive prompt (e.g. 'A futuristic city in cyberpunk aesthetic, high details, cinematic lighting')...",disabled:h})]}),c.jsxs("div",{className:"m3-text-field",children:[c.jsx("label",{className:"m3-text-field-label",children:"Negative Prompt (Optional)"}),c.jsx("input",{type:"text",className:"m3-input",value:E,onChange:Y=>r(Y.target.value),placeholder:"Items to avoid (e.g. 'blurry, low quality, deformed hands, texts')...",disabled:h})]}),c.jsxs("div",{className:"m3-text-field",children:[c.jsx("label",{className:"m3-text-field-label",children:"Base Image (Optional)"}),gt?c.jsxs("div",{style:{display:"flex",gap:"12px",alignItems:"center",padding:"12px",background:"var(--md-sys-color-surface-variant)",borderRadius:"var(--md-shape-corner-medium)",border:"1px solid var(--md-sys-color-outline-variant)"},children:[c.jsx("img",{src:gt,alt:"Base",style:{width:"64px",height:"64px",objectFit:"cover",borderRadius:"8px",flexShrink:0}}),c.jsxs("div",{style:{flex:1,minWidth:0},children:[c.jsx("div",{style:{fontWeight:600,fontSize:"0.85rem"},children:"Base image ready"}),c.jsx("div",{style:{fontSize:"0.75rem",color:"var(--md-sys-color-outline)"},children:"The AI will redraw this image guided by your prompt."})]}),c.jsxs("button",{type:"button",className:"m3-btn m3-btn-error",style:{height:"34px",flexShrink:0},onClick:ie,disabled:h,children:[c.jsx(rn,{size:14}),c.jsx("span",{children:"Remove"})]})]}):c.jsxs("label",{className:"import-box",style:{margin:0,padding:"16px",cursor:h?"not-allowed":"pointer"},children:[c.jsx("input",{type:"file",accept:"image/png,image/jpeg,image/webp",style:{display:"none"},onChange:Z,disabled:h}),c.jsx(iy,{className:"import-icon"}),c.jsx("span",{style:{fontWeight:600},children:"Upload a base image"}),c.jsx("span",{style:{fontSize:"0.75rem",color:"var(--md-sys-color-outline)",textAlign:"center"},children:"Optional. Generate a new image based on one of your own."})]}),gt&&c.jsxs("div",{style:{marginTop:"12px"},children:[c.jsxs("div",{style:{display:"flex",justifyContent:"space-between",fontSize:"0.8rem",marginBottom:"4px"},children:[c.jsx("span",{children:"Transformation strength"}),c.jsx("span",{children:x.denoisingStrength.toFixed(2)})]}),c.jsx("input",{type:"range",min:"0.1",max:"1",step:"0.05",value:x.denoisingStrength,onChange:Y=>N(ye=>({...ye,denoisingStrength:parseFloat(Y.target.value)})),disabled:h,style:{width:"100%"}}),c.jsx("div",{style:{fontSize:"0.72rem",color:"var(--md-sys-color-outline)",marginTop:"2px"},children:"Lower = closer to your image; higher = more creative freedom. 0.7 is a good start."})]})]}),c.jsxs("div",{className:"m3-text-field",children:[c.jsx("label",{className:"m3-text-field-label",children:"Active Image Constraints"}),c.jsxs("div",{className:"chips-container",children:[c.jsxs("div",{className:"status-chip",onClick:()=>fe("constraints"),children:[c.jsx(Ks,{size:14}),c.jsxs("span",{children:["Resolution: ",x.width,"x",x.height]})]}),c.jsxs("div",{className:"status-chip",onClick:()=>fe("constraints"),children:[c.jsx(aa,{size:14}),c.jsxs("span",{children:["Steps: ",x.steps]})]}),c.jsxs("div",{className:"status-chip",onClick:()=>fe("constraints"),children:[c.jsx(Su,{size:14}),c.jsxs("span",{children:["Sampler: ",x.sampler]})]}),c.jsx("div",{className:"status-chip",onClick:()=>fe("constraints"),children:c.jsxs("span",{children:["Seed: ",x.seed===-1?"Random":x.seed]})})]})]}),c.jsxs("button",{className:"m3-btn m3-btn-filled",style:{height:"48px",marginTop:"8px"},onClick:D,disabled:h||!f.trim()||!G,children:[c.jsx(Su,{size:18}),c.jsx("span",{children:G?gt?"Generate from Base Image":"Generate Local Image":"Select Model to Generate"})]})]})]})}),c.jsxs("div",{className:"m3-card output-panel",children:[c.jsx("div",{className:"output-image-container",children:h||J||ce?c.jsx("div",{className:"progress-overlay",children:ce?c.jsxs("div",{style:{display:"flex",flexDirection:"column",alignItems:"center",gap:"16px",padding:"20px"},children:[c.jsx("div",{className:"progress-spinner"}),c.jsx("div",{className:"progress-text",style:{fontSize:"1.1rem",fontWeight:700,textAlign:"center"},children:"Syncing Settings & Initializing..."}),j?c.jsxs("div",{style:{width:"min(360px, 90%)"},children:[c.jsxs("div",{style:{display:"flex",justifyContent:"space-between",gap:"12px",fontSize:"0.82rem",fontWeight:700,marginBottom:"6px"},children:[c.jsxs("span",{children:[j.phase,j.speed?` (${j.speed})`:""]}),c.jsx("span",{children:j.total>0?`Loaded ${j.current} / ${j.total} tensors`:`${Math.round(j.progress)}%`})]}),c.jsx("div",{className:"progress-bar-container",style:{margin:0},children:c.jsx("div",{className:"progress-bar-fill",style:{width:`${Math.min(100,Math.max(0,j.progress))}%`,transition:"width 0.25s ease"}})}),(j.backendMode||j.device)&&c.jsxs("div",{style:{fontSize:"0.78rem",opacity:.8,textAlign:"center",marginTop:"8px"},children:["Loading on ",j.backendMode||"backend",j.device?` • ${j.device}`:""]})]}):c.jsx("p",{style:{fontSize:"0.85rem",opacity:.8,textAlign:"center",maxWidth:"280px",margin:0},children:"Adjusting inference settings and restarting the local model server."})]}):J?c.jsxs("div",{style:{display:"flex",flexDirection:"column",alignItems:"center",gap:"16px",padding:"20px"},children:[c.jsx("div",{className:"progress-spinner"}),c.jsx("div",{className:"progress-text",style:{fontSize:"1.1rem",fontWeight:700,textAlign:"center"},children:"Cancelling Generation..."}),c.jsx("p",{style:{fontSize:"0.85rem",opacity:.8,textAlign:"center",maxWidth:"280px",margin:0},children:"Stopping CPU/GPU execution threads and reloading model weights. Please wait a moment."})]}):c.jsxs(c.Fragment,{children:[c.jsx("div",{className:"progress-spinner"}),c.jsx("div",{className:"progress-text",style:{fontSize:"1.1rem",fontWeight:700},children:ee?"Decoding Latents...":"Generating Locally..."}),_&&c.jsx("div",{style:{fontSize:"0.8rem",color:"var(--md-sys-color-primary)",fontWeight:600,background:"var(--md-sys-color-primary-container)",padding:"4px 12px",borderRadius:"12px",margin:"4px 0 8px 0",animation:"pulse 2s infinite"},children:"⚠️ CPU Fallback Detected (Running Slower)"}),c.jsxs("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"16px",width:"80%",margin:"8px 0 0 0",fontSize:"0.85rem",opacity:.9},children:[c.jsxs("div",{style:{textAlign:"left"},children:[c.jsx("strong",{children:"Step:"})," ",Je," / ",x.steps," (",Math.max(0,x.steps-Je)," left)"]}),c.jsxs("div",{style:{textAlign:"right"},children:[c.jsx("strong",{children:"Elapsed:"})," ",ve,"s",$e&&` (${$e==="decoding"?"decoding":$e})`]})]}),c.jsx("div",{className:"progress-bar-container",style:{margin:"4px 0 10px 0"},children:c.jsx("div",{className:"progress-bar-fill",style:{width:`${U}%`,transition:"width 1s linear"}})}),c.jsxs("div",{style:{fontSize:"0.85rem",opacity:.8,display:"flex",gap:"8px",alignItems:"center"},children:[c.jsxs("span",{children:["Progress: ",U,"%"]}),c.jsx("span",{children:"•"}),c.jsxs("span",{children:["Est. remaining: ",yt,"s"]})]}),c.jsx("button",{className:"m3-btn m3-btn-error",style:{marginTop:"16px",height:"36px",padding:"0 24px"},onClick:R,children:"Stop Generating"})]})}):te?c.jsx("img",{src:te,className:"output-image",alt:"Generated Output"}):q?c.jsxs("div",{style:{textAlign:"center",padding:"24px",color:"var(--md-sys-color-error)",display:"flex",flexDirection:"column",alignItems:"center",gap:"16px"},children:[c.jsx("div",{style:{background:"rgba(239, 68, 68, 0.1)",padding:"16px",borderRadius:"50%",display:"flex",alignItems:"center",justifyContent:"center"},children:c.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",width:"48",height:"48",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:"2",children:c.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z"})})}),c.jsx("h3",{style:{margin:0,fontSize:"1.2rem",fontWeight:"bold"},children:"Generation Failed"}),c.jsx("p",{style:{margin:0,fontSize:"0.95rem",opacity:.9,maxWidth:"320px",lineHeight:"1.4"},children:q}),c.jsxs("div",{style:{marginTop:"8px",fontSize:"0.85rem",opacity:.8,color:"var(--md-sys-color-on-surface-variant)"},children:["Hint: Try lowering the resolution in the ",c.jsx("strong",{children:"Image Constraints"})," settings (e.g., to 512x512)."]})]}):c.jsxs("div",{style:{textAlign:"center"},children:[c.jsx(Su,{className:"output-placeholder-icon"}),c.jsxs("p",{className:"output-placeholder-text",children:["Your generated image will appear here.",c.jsx("br",{}),"Enter a prompt on the left and click Generate."]})]})}),te&&!h&&c.jsxs(c.Fragment,{children:[c.jsxs("div",{style:{width:"100%",display:"flex",justifyContent:"space-between",marginTop:"12px",fontSize:"0.8rem",color:"var(--md-sys-color-outline)"},children:[c.jsxs("span",{children:["Seed: ",Oe]}),Ee&&c.jsxs("span",{children:["Inference Time: ",Ee.toFixed(1),"s"]})]}),c.jsxs("div",{className:"image-actions",children:[c.jsxs("button",{className:"m3-btn m3-btn-tonal",onClick:F,children:[Ae?c.jsx(ks,{size:16}):c.jsx(J0,{size:16}),c.jsx("span",{children:Ae?"Copied":"Copy"})]}),c.jsxs("button",{className:"m3-btn m3-btn-outlined",onClick:ae,children:[c.jsx(nm,{size:16}),c.jsx("span",{children:"Save to USB"})]})]})]})]})]}),c.jsxs("div",{className:"gallery-section",children:[c.jsxs("div",{className:"gallery-header",children:[c.jsx("h3",{className:"m3-card-title",style:{marginBottom:0},children:"Recent Outputs Gallery"}),Re.length>0&&c.jsxs("div",{className:"gallery-selection-actions",children:[c.jsxs("span",{className:"gallery-selection-count",children:[Re.length," selected"]}),c.jsxs("button",{className:"m3-btn m3-btn-tonal",onClick:Fe,children:[c.jsx(ks,{size:14}),c.jsx("span",{children:"Use"})]}),c.jsxs("button",{className:"m3-btn m3-btn-outlined",onClick:za,children:[c.jsx(nm,{size:14}),c.jsx("span",{children:"Download"})]}),c.jsxs("button",{className:"m3-btn m3-btn-error",onClick:Ta,children:[c.jsx(rn,{size:14}),c.jsx("span",{children:"Delete"})]}),c.jsx("button",{className:"m3-btn m3-btn-outlined",onClick:al,children:"Clear"})]})]}),H.length===0?c.jsx("div",{className:"m3-card gallery-empty",children:"No images generated in this session yet. Everything will be saved directly on your external drive."}):c.jsxs(c.Fragment,{children:[c.jsx("div",{className:"gallery-hint",children:"Click to select one image. Ctrl-click or Shift-click to select multiple."}),c.jsx("div",{className:"gallery-grid",children:H.map((Y,ye)=>c.jsx(tg,{img:Y,idx:ye,isSelected:Ze.includes(ye),onClick:dl},Y.image||ye))})]})]})]})}const ag=O.memo(lg),ng=[{group:"SDXL - Best Quality",items:[{name:"Juggernaut XL v9 Lightning",filename:"Juggernaut_RunDiffusionPhoto2_Lightning_4Steps.safetensors",format:"Safetensors",approxSize:"6.6 GB",resolution:"1024x1024",notes:"Photorealistic SDXL model tuned for 4-8 step Lightning generation.",url:"https://huggingface.co/RunDiffusion/Juggernaut-XL-Lightning/resolve/main/Juggernaut_RunDiffusionPhoto2_Lightning_4Steps.safetensors"},{name:"DreamShaper XL Lightning",filename:"DreamShaperXL_Lightning.safetensors",format:"Safetensors",approxSize:"6.6 GB",resolution:"1024x1024",notes:"All-around SDXL model for fantasy art, renders, illustration, and stylized images.",url:"https://huggingface.co/Lykon/dreamshaper-xl-lightning/resolve/main/DreamShaperXL_Lightning.safetensors"}]},{group:"SD 1.5 - Ultra Fast / Low VRAM",items:[{name:"DreamShaper 8",filename:"DreamShaper_8_pruned.safetensors",format:"Safetensors",approxSize:"2.1 GB",resolution:"512x512",notes:"General-purpose SD 1.5 model for illustration, anime, and semi-realistic portraits.",url:"https://huggingface.co/Lykon/DreamShaper/resolve/main/DreamShaper_8_pruned.safetensors"},{name:"CyberRealistic V8",filename:"CyberRealistic_V8_FP16.safetensors",format:"Safetensors",approxSize:"2.1 GB",resolution:"512x512",notes:"High-fidelity realism and photorealism in the SD 1.5 ecosystem.",url:"https://huggingface.co/cyberdelia/CyberRealistic/resolve/main/CyberRealistic_V8_FP16.safetensors"},{name:"ReV Animated v1.2.2",filename:"rev-animated-v1-2-2.safetensors",format:"Safetensors",approxSize:"2.1 GB",resolution:"512x512",notes:"Semi-realistic, 2.5D, anime, fantasy, and stylized digital art.",url:"https://huggingface.co/danbrown/RevAnimated-v1-2-2/resolve/main/rev-animated-v1-2-2.safetensors"}]}];function ig({activeModel:f,setActiveModel:b,serverRunning:E,setServerRunning:r,constraints:x,showAlert:N=async({message:H})=>window.alert(H),showConfirm:G=async({message:H})=>window.confirm(H)}){const[H,w]=O.useState([]),[h,A]=O.useState(null),[U,V]=O.useState(0),[fe,X]=O.useState(""),[L,te]=O.useState(null),[W,Oe]=O.useState(null),[de,Ee]=O.useState(null),[ke,Ae]=O.useState({filename:"",speed:"0.0",eta:0,status:""}),[P,ve]=O.useState(""),[Ke,yt]=O.useState(null),[me,Je]=O.useState(!1),[st,$e]=O.useState({progress:0,phase:""}),[Xe,_]=O.useState(null),[C,J]=O.useState({backendMode:"",backendBinary:"",backendDevice:""}),he=H.map(D=>ui(D).filename),ce=L!==null||me;O.useEffect(()=>{B(),d()},[]),O.useEffect(()=>{if(!E&&!L){J({backendMode:"",backendBinary:"",backendDevice:""});return}let D=!1;const R=async()=>{try{const ae=await Cl();if(D)return;J({backendMode:ae.settings?.backendMode||ae.loading?.backendMode||"",backendBinary:ae.settings?.backendBinary||ae.loading?.backendBinary||"",backendDevice:ae.settings?.backendDevice||ae.loading?.device||""})}catch{}};R();const F=setInterval(R,2e3);return()=>{D=!0,clearInterval(F)}},[E,L]);const d=async()=>{try{const D=await cm();D.active&&D.filename&&j(D.filename)}catch(D){console.error("Check active download failed:",D)}},j=D=>{A(D);const R=setInterval(async()=>{try{const F=await cm();F.active?(V(F.progress===-1?0:F.progress),X(`${F.speed} • ETA ${F.eta}s`)):(clearInterval(R),A(null),F.error?String(F.error).toLowerCase().includes("cancelled")||N({title:"Download Failed",message:F.error,danger:!0}):B())}catch(F){console.error("Polling error:",F)}},1e3)},B=async()=>{try{const D=await ky();w(D.map(ui).filter(R=>R.filename))}catch(D){console.error(D)}},q=async(D,R)=>{if(h||he.includes(R)&&!await G({title:"Overwrite Model?",message:`"${R}" is already downloaded. Do you want to download and overwrite it?`,confirmLabel:"Overwrite"}))return;const F=typeof window<"u"&&window.__TAURI_INTERNALS__!==void 0,ae=typeof window<"u"&&(window.location.hostname==="localhost"||window.location.hostname==="127.0.0.1");if(!F&&!ae){N({title:"Server Required",message:"Model download requires the local image generator server.",danger:!0});return}try{const At=await Iy(D);At.ok?j(R):N({title:"Download Failed",message:At.error||"Unknown error",danger:!0})}catch(At){N({title:"Download Error",message:At.message,danger:!0})}},K=async D=>{if(D.preventDefault(),!P.trim())return;let R="model.gguf";try{const F=new URL(P.trim());if(F.protocol!=="http:"&&F.protocol!=="https:")throw new Error("URL protocol must be http or https");if(R=F.pathname.split("/").pop()||"",!R)throw new Error("Could not extract filename from URL");const ae=R.toLowerCase();if(!ae.endsWith(".gguf")&&!ae.endsWith(".safetensors")&&!ae.endsWith(".ckpt"))throw new Error("URL must point to a .gguf, .safetensors, or .ckpt weights file")}catch(F){N({title:"Invalid URL",message:F.message,danger:!0});return}await q(P.trim(),R),ve("")},ee=D=>{q(D.url,D.filename)},se=async()=>{await Py(),A(null),V(0),X(""),await B()},Ze=async D=>{if(f&&f!==D&&E){_(D);return}await Ne(D)},Ne=async D=>{const R=typeof window<"u"&&window.__TAURI_INTERNALS__!==void 0,F=typeof window<"u"&&(window.location.hostname==="localhost"||window.location.hostname==="127.0.0.1"),At=(await Cl())?.port||8080;if(!R&&!F){const Gt=await hm(),dl=`.\\backend\\win\\vulkan\\sd-vulkan.exe --listen-port ${At} --model .\\models\\${D} --threads 8`;Gt?await G({title:"Web Browser Mode",message:`To load "${D}" on the active GPU server, restart your terminal backend with: ${dl} @@ -116,6 +116,6 @@ To run locally, start: ${dl} -Proceed in Simulation Mode instead?`,confirmLabel:"Proceed"})&&(b(D),r(!1));return}te(D),Oe({progress:0,phase:"Starting backend...",speed:"",current:0,total:0,model:D,backendMode:"",backendBinary:"",device:""});try{const Gt=await Vs(D,x);console.log(Gt);let dl=!1,Re=null;for(let al=0;al<240;al++){const Fe=await Cl();if(Fe.loading&&Oe({progress:Fe.loading.progress||0,phase:Fe.loading.phase||"Loading model...",speed:Fe.loading.speed||"",current:Fe.loading.current||0,total:Fe.loading.total||0,model:Fe.loading.model||D,backendMode:Fe.loading.backendMode||Fe.settings?.backendMode||"",backendBinary:Fe.loading.backendBinary||Fe.settings?.backendBinary||"",device:Fe.loading.device||Fe.settings?.backendDevice||""}),Fe.ready){dl=!0;break}if(Fe.error){Re=Fe.error;break}if(!Fe.running&&al>3){Re="The backend process terminated immediately on startup.";break}await new Promise(za=>setTimeout(za,500))}if(dl)Oe(al=>({...al||{},progress:100,phase:"Model ready",speed:"",current:al?.current||0,total:al?.total||0,model:D})),b(D),r(!0);else throw new Error(Re||`Model server failed to respond on port ${At}.`)}catch(Gt){console.error("Failed to load model:",Gt),N({title:"Model Load Failed",message:Gt.message||String(Gt),danger:!0})}finally{setTimeout(()=>Oe(null),800),te(null)}},gt=async()=>{const D=ke;_(null),await Et(),D&&await Ne(D)},Et=async()=>{if(me)return;Je(!0),$e({progress:10,phase:"Stopping backend process..."});const D=setInterval(async()=>{try{const R=await Cl();R.unloading?.active?$e({progress:R.unloading.progress||50,phase:R.unloading.phase||"Unloading model..."}):$e(F=>({progress:Math.min(95,F.progress+10),phase:F.phase||"Unloading model..."}))}catch{}},300);try{await Js(),$e({progress:100,phase:"Model unloaded"}),b(null),_(null),r(!1)}catch(R){console.error(R),N({title:"Unload Failed",message:R.message||String(R),danger:!0})}finally{clearInterval(D),setTimeout(()=>{Je(!1),$e({progress:0,phase:""})},500)}},We=async D=>{if(await G({title:"Delete Model?",message:`Delete "${D}" from your drive?`,confirmLabel:"Delete",danger:!0}))try{await Wy(D),await B(),f===D&&await Et()}catch(R){console.error("Failed to delete model:",R),N({title:"Delete Failed",message:R.message||String(R),danger:!0})}},Ht=async(D,R)=>{const F=new AbortController;yt(F),Ee(0),Ae({filename:R,speed:"0.0",eta:0,status:"Initiating file copy..."});try{await Jy(D,ae=>{Ee(Math.round(ae.progress)),Ae({filename:ae.filename,speed:ae.speed_mb_s.toFixed(1),eta:Math.round(ae.eta_secs),status:ae.status})},F.signal),await B()}catch(ae){console.error("Import failed:",ae),ae.name!=="AbortError"&&N({title:"Import Failed",message:ae.message||String(ae),danger:!0})}finally{Ee(null),yt(null)}},Tt=()=>{Ke&&Ke.abort()},Z=D=>{const R=D.target.files[0];R&&Ht(R,R.name),D.target.value=""},ie=!!h;return c.jsxs("div",{className:"workspace-area",children:[c.jsxs("div",{className:"workspace-title-section",children:[c.jsx("h2",{className:"workspace-title",children:"Model Manager"}),c.jsx("p",{className:"workspace-subtitle",children:"Manage local files and download recommended weights directly to your local models folder."})]}),f&&c.jsx("div",{className:"m3-card",style:{borderLeft:"4px solid var(--md-sys-color-primary)",background:"var(--md-sys-color-primary-container)",color:"var(--md-sys-color-on-primary-container)"},children:c.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center"},children:[c.jsxs("div",{children:[c.jsxs("h4",{style:{fontWeight:700},children:["Active Model: ",f]}),c.jsx("p",{style:{fontSize:"0.85rem",marginTop:"2px",opacity:.9},children:"The local C++ stable-diffusion server is running. Real-time telemetry is displaying performance status in the top bar."}),(C.backendMode||C.backendDevice||C.backendBinary)&&c.jsxs("div",{style:{display:"flex",flexWrap:"wrap",gap:"8px",marginTop:"10px"},children:[C.backendMode&&c.jsxs("span",{className:"status-chip",style:{cursor:"default"},children:[c.jsx(xu,{size:14}),c.jsxs("span",{children:["Loaded on ",C.backendMode]})]}),C.backendDevice&&c.jsx("span",{className:"status-chip",style:{cursor:"default"},children:c.jsx("span",{children:C.backendDevice})}),C.backendBinary&&c.jsx("span",{className:"status-chip",style:{cursor:"default"},children:c.jsx("span",{children:C.backendBinary})})]})]}),c.jsxs("button",{className:"m3-btn m3-btn-error",onClick:Et,disabled:me||L!==null,children:[me?c.jsx(aa,{className:"progress-spinner",size:16}):c.jsx(rn,{size:16}),c.jsx("span",{children:me?"Unloading":"Unload Server"})]})]})}),me&&c.jsxs("div",{className:"m3-card",style:{borderLeft:"4px solid var(--md-sys-color-error)",marginTop:"16px"},children:[c.jsx("h4",{style:{fontWeight:700,marginBottom:"8px"},children:"Unloading Model"}),c.jsxs("div",{className:"model-progress-section",style:{margin:"8px 0 0 0"},children:[c.jsxs("div",{className:"model-progress-label",children:[c.jsx("span",{children:st.phase||"Unloading model..."}),c.jsxs("span",{children:[Math.round(st.progress),"%"]})]}),c.jsx("div",{className:"model-progress-bar",children:c.jsx("div",{className:"model-progress-fill",style:{width:`${Math.min(100,Math.max(0,st.progress))}%`,transition:"width 0.25s ease"}})})]})]}),W&&c.jsxs("div",{className:"m3-card",style:{borderLeft:"4px solid var(--md-sys-color-secondary)",marginTop:"16px"},children:[c.jsxs("h4",{style:{fontWeight:700,marginBottom:"8px"},children:["Loading Model: ",W.model||L]}),(W.backendMode||W.backendBinary||W.device)&&c.jsxs("div",{style:{display:"flex",flexWrap:"wrap",gap:"8px",marginBottom:"10px"},children:[W.backendMode&&c.jsxs("span",{className:"status-chip",style:{cursor:"default"},children:[c.jsx(xu,{size:14}),c.jsxs("span",{children:["Loading on ",W.backendMode]})]}),W.device&&c.jsx("span",{className:"status-chip",style:{cursor:"default"},children:c.jsx("span",{children:W.device})}),W.backendBinary&&c.jsx("span",{className:"status-chip",style:{cursor:"default"},children:c.jsx("span",{children:W.backendBinary})})]}),c.jsxs("div",{className:"model-progress-section",style:{margin:"8px 0 0 0"},children:[c.jsxs("div",{className:"model-progress-label",children:[c.jsxs("span",{children:[W.phase,W.speed?` (${W.speed})`:""]}),c.jsx("span",{children:W.total>0?`Loaded ${W.current} / ${W.total} tensors`:`${Math.round(W.progress)}%`})]}),c.jsx("div",{className:"model-progress-bar",children:c.jsx("div",{className:"model-progress-fill",style:{width:`${Math.min(100,Math.max(0,W.progress))}%`,transition:"width 0.25s ease"}})})]})]}),c.jsxs("div",{className:"m3-card",style:{marginTop:"24px"},children:[c.jsxs("h3",{className:"m3-card-title",children:[c.jsx(ks,{size:18,style:{color:"var(--md-sys-color-primary)"}}),"Local Models (",H.length,")"]}),H.length===0?c.jsx("p",{style:{fontSize:"0.9rem",color:"var(--md-sys-color-outline)",textAlign:"center",padding:"16px 0"},children:"No models detected in app/models/. Download from the library below or import a file."}):c.jsx("div",{style:{display:"flex",flexDirection:"column",gap:"10px"},children:H.map(D=>{const R=D.filename,F=f===R;return c.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",padding:"12px 16px",background:F?"var(--md-sys-color-primary-container)":"var(--md-sys-color-surface-variant)",color:F?"var(--md-sys-color-on-primary-container)":"var(--md-sys-color-on-surface-variant)",borderRadius:"var(--md-shape-corner-medium)",border:"1px solid var(--md-sys-color-outline-variant)"},children:[c.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"2px"},children:[c.jsx("span",{style:{fontWeight:600,fontSize:"0.95rem"},children:R}),c.jsxs("span",{style:{fontSize:"0.75rem",opacity:.8},children:["Local Weights File • ",D.size||ii(D.sizeBytes)]})]}),c.jsx("div",{style:{display:"flex",gap:"8px"},children:F?c.jsxs("button",{className:"m3-btn m3-btn-error",style:{height:"36px",padding:"0 16px"},onClick:Et,disabled:me,children:[me?c.jsx(aa,{className:"progress-spinner",size:14}):c.jsx(rn,{size:14}),c.jsx("span",{children:me?"Unloading":"Unload"})]}):c.jsxs(c.Fragment,{children:[c.jsxs("button",{className:"m3-btn m3-btn-filled",style:{height:"36px",padding:"0 16px"},onClick:()=>Ze(R),disabled:ce,children:[L===R?c.jsx(aa,{className:"progress-spinner",size:14}):c.jsx(ks,{size:14}),c.jsx("span",{children:L===R?"Loading":"Load"})]}),c.jsx("button",{className:"m3-btn m3-btn-error",style:{height:"36px",width:"36px",padding:0,minWidth:"36px"},onClick:()=>We(R),disabled:ce,title:"Delete from models folder",children:c.jsx(rn,{size:14})})]})})]},R)})})]}),c.jsx("div",{className:"workspace-title-section",style:{marginTop:"32px",marginBottom:"16px"},children:c.jsxs("h3",{className:"m3-card-title",children:[c.jsx(ry,{size:20,style:{color:"var(--md-sys-color-primary)"}}),"Model Library"]})}),c.jsx("div",{style:{display:"flex",flexDirection:"column",gap:"16px"},children:ng.map(D=>c.jsxs("div",{className:"m3-card",style:{margin:0},children:[c.jsx("h4",{style:{fontWeight:700,marginBottom:"12px"},children:D.group}),c.jsx("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(280px, 1fr))",gap:"12px"},children:D.items.map(R=>{const F=he.includes(R.filename),ae=h===R.filename;return c.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"10px",padding:"14px",background:"var(--md-sys-color-surface-variant)",border:"1px solid var(--md-sys-color-outline-variant)",borderRadius:"var(--md-shape-corner-medium)"},children:[c.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"4px"},children:[c.jsx("span",{style:{fontWeight:700},children:R.name}),c.jsxs("span",{style:{fontSize:"0.75rem",color:"var(--md-sys-color-outline)"},children:[R.format," • approx. ",R.approxSize," • ",R.resolution]})]}),c.jsx("p",{style:{fontSize:"0.78rem",color:"var(--md-sys-color-on-surface-variant)",lineHeight:1.35,margin:0},children:R.notes}),ae&&c.jsxs("div",{className:"model-progress-section",style:{marginTop:"2px"},children:[c.jsxs("div",{className:"model-progress-label",children:[c.jsxs("span",{style:{display:"inline-flex",alignItems:"center",gap:"8px"},children:[c.jsx("span",{className:"loading-dot"}),"Downloading"]}),c.jsx("span",{children:U>0?`${U}%`:"Preparing"})]}),c.jsx("div",{className:"model-progress-bar",children:c.jsx("div",{className:"model-progress-fill",style:{width:`${Math.min(100,Math.max(0,U))}%`,transition:"width 0.2s ease"}})}),fe&&c.jsx("div",{style:{fontSize:"0.7rem",color:"var(--md-sys-color-outline)",marginTop:"4px"},children:fe})]}),c.jsxs("button",{className:F?"m3-btn m3-btn-tonal":"m3-btn m3-btn-filled",style:{height:"36px",marginTop:"auto"},onClick:()=>ee(R),disabled:F||h!==null,children:[F?c.jsx(xu,{size:14}):ae?c.jsx(aa,{className:"progress-spinner",size:14}):c.jsx(am,{size:14}),c.jsx("span",{children:F?"Downloaded":ae?"Downloading":"Download"})]})]},R.filename)})})]},D.group))}),c.jsx("div",{className:"workspace-title-section",style:{marginTop:"32px",marginBottom:"16px"},children:c.jsxs("h3",{className:"m3-card-title",children:[c.jsx(im,{size:20,style:{color:"var(--md-sys-color-primary)"}}),"Local Model Import"]})}),de!==null&&c.jsxs("div",{className:"m3-card",style:{borderLeft:"4px solid var(--md-sys-color-primary)",marginTop:"24px"},children:[c.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",gap:"12px"},children:[c.jsxs("h4",{style:{fontWeight:600},children:["Copying Model to local folder: ",Xe.filename]}),c.jsxs("button",{className:"m3-btn m3-btn-error",style:{height:"34px",padding:"0 14px"},onClick:Tt,children:[c.jsx(Qs,{size:14}),c.jsx("span",{children:"Stop Import"})]})]}),c.jsxs("div",{className:"model-progress-section",style:{margin:"12px 0 6px 0"},children:[c.jsxs("div",{className:"model-progress-label",children:[c.jsxs("span",{children:[Xe.status," (",Xe.speed," MB/s)"]}),c.jsxs("span",{children:[de,"% (",Xe.eta,"s remaining)"]})]}),c.jsx("div",{className:"model-progress-bar",children:c.jsx("div",{className:"model-progress-fill",style:{width:`${de}%`,transition:"width 0.15s ease"}})})]})]}),c.jsxs("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(300px, 1fr))",gap:"16px",marginTop:"16px"},children:[c.jsxs("label",{className:"import-box",style:{margin:0,height:"100%",justifyContent:"center"},children:[c.jsx("input",{type:"file",style:{display:"none"},accept:".gguf,.safetensors,.ckpt",onChange:Z,disabled:de!==null}),c.jsx(im,{className:"import-icon"}),c.jsx("span",{style:{fontWeight:600},children:"Choose weights file"}),c.jsx("span",{style:{fontSize:"0.75rem",color:"var(--md-sys-color-outline)",textAlign:"center"},children:"Select `.gguf`, `.safetensors` or `.ckpt` weights."})]}),c.jsxs("div",{className:"m3-card",style:{display:"flex",flexDirection:"column",justifyContent:"center",margin:0,padding:"20px"},children:[c.jsxs("h4",{style:{fontWeight:600,marginBottom:"8px",display:"flex",alignItems:"center",gap:"8px"},children:[c.jsx(am,{size:16}),"Download Model from URL"]}),c.jsx("p",{style:{fontSize:"0.75rem",color:"var(--md-sys-color-outline)",marginBottom:"12px"},children:"Download any GGUF or Safetensors model from Hugging Face or other sites directly to your models folder."}),ie?c.jsxs("div",{className:"model-progress-section",style:{marginTop:"0px"},children:[c.jsxs("div",{className:"model-progress-label",children:[c.jsx("span",{style:{fontSize:"0.75rem",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",maxWidth:"200px"},title:h,children:h}),c.jsxs("span",{children:[U,"%"]})]}),c.jsx("div",{className:"model-progress-bar",style:{margin:"4px 0"},children:c.jsx("div",{className:"model-progress-fill",style:{width:`${U}%`,transition:"width 0.15s ease"}})}),c.jsx("div",{style:{fontSize:"0.7rem",color:"var(--md-sys-color-outline)",marginTop:"2px"},children:fe}),c.jsxs("button",{className:"m3-btn m3-btn-error",style:{height:"34px",padding:"0 14px",marginTop:"10px"},onClick:se,children:[c.jsx(Qs,{size:14}),c.jsx("span",{children:"Stop Download"})]})]}):c.jsxs("form",{onSubmit:K,style:{display:"flex",gap:"8px"},children:[c.jsx("input",{type:"text",className:"m3-input",style:{flex:1,height:"40px"},placeholder:"e.g. https://huggingface.co/...",value:P,onChange:D=>ve(D.target.value),disabled:h!==null}),c.jsx("button",{type:"submit",className:"m3-btn m3-btn-filled",style:{height:"40px"},disabled:h!==null,children:"Download"})]})]})]}),ke&&c.jsx("div",{style:{position:"fixed",inset:0,zIndex:50,background:"rgba(0,0,0,0.55)",display:"flex",alignItems:"center",justifyContent:"center",padding:"24px"},children:c.jsxs("div",{className:"m3-card",style:{maxWidth:"460px",width:"100%",margin:0,border:"1px solid var(--md-sys-color-outline-variant)"},children:[c.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"10px",marginBottom:"10px"},children:[c.jsx(My,{size:22,style:{color:"var(--md-sys-color-error)"}}),c.jsx("h3",{style:{fontSize:"1.05rem",fontWeight:700},children:"Unload Current Model?"})]}),c.jsxs("p",{style:{fontSize:"0.9rem",color:"var(--md-sys-color-on-surface-variant)",lineHeight:1.45,marginBottom:"16px"},children:['"',f,'" is already loaded. Unload it before loading "',ke,'".']}),c.jsxs("div",{style:{display:"flex",justifyContent:"flex-end",gap:"10px"},children:[c.jsx("button",{className:"m3-btn m3-btn-outlined",onClick:()=>_(null),disabled:me,children:"Cancel"}),c.jsxs("button",{className:"m3-btn m3-btn-error",onClick:Et,disabled:me,children:[c.jsx(rn,{size:14}),c.jsx("span",{children:"Unload Only"})]}),c.jsxs("button",{className:"m3-btn m3-btn-filled",onClick:gt,disabled:me,children:[me?c.jsx(aa,{className:"progress-spinner",size:14}):c.jsx(aa,{size:14}),c.jsx("span",{children:"Unload and Load"})]})]})]})})]})}const ug=O.memo(ig),sm=[{id:"1:1",label:"1:1 Square",width:512,height:512,sdxl_width:1024,sdxl_height:1024,desc:"Social posts & avatars"},{id:"4:3",label:"4:3 Photo",width:640,height:480,sdxl_width:1152,sdxl_height:864,desc:"Classic photo look"},{id:"16:9",label:"16:9 Landscape",width:768,height:432,sdxl_width:1216,sdxl_height:684,desc:"Widescreen landscape"},{id:"9:16",label:"9:16 Portrait",width:432,height:768,sdxl_width:684,sdxl_height:1216,desc:"Tall phone screen"}],cg=f=>{if(!f)return!0;const b=f.toLowerCase();return!(b.includes("flux")||b.includes("schnell")||b.includes("sdxl")||b.includes("lightning")||b.includes("turbo")||b.includes("sd3"))};function sg({constraints:f,setConstraints:b,activeModel:E,specs:r,backendOptions:x}){const N=E?cg(E):!1,G=x?.options?.length?x.options:[{id:"cpu",label:"CPU",available:!0}],H=(A,U)=>{b(V=>({...V,[A]:U}))},w=(A,U)=>{const V=U==="sdxl"&&!N,fe=sm.find(k=>k.id===A);if(fe){let k=V?fe.sdxl_width:fe.width,L=V?fe.sdxl_height:fe.height;N&&(k>L?(L=Math.round(L*512/k),k=512):(k=Math.round(k*512/L),L=512),k=Math.round(k/64)*64,L=Math.round(L/64)*64),H("width",k),H("height",L)}},h=A=>{b(U=>({...U,backendType:A,useGpu:A!=="cpu"}))};return c.jsxs("div",{className:"workspace-area",children:[c.jsxs("div",{className:"workspace-title-section",children:[c.jsx("h2",{className:"workspace-title",children:"Image Constraints"}),c.jsx("p",{className:"workspace-subtitle",children:"Configure size, quality, and performance controls for image generation."})]}),c.jsxs("div",{className:"generator-layout",children:[c.jsxs("div",{children:[c.jsxs("div",{className:"m3-card",children:[c.jsxs("h3",{className:"m3-card-title",children:[c.jsx(F0,{size:18,style:{color:"var(--md-sys-color-primary)"}}),"1. Picture Size & Shape"]}),N&&c.jsxs("div",{style:{background:"rgba(251, 191, 36, 0.1)",border:"1px solid rgb(251, 191, 36)",color:"var(--md-sys-color-on-surface)",padding:"12px",borderRadius:"8px",marginBottom:"16px",fontSize:"0.85rem",display:"flex",gap:"8px",alignItems:"flex-start"},children:[c.jsx(fy,{size:16,style:{color:"rgb(251, 191, 36)",flexShrink:0,marginTop:"2px"}}),c.jsxs("div",{children:[c.jsx("strong",{children:"Low-VRAM Protection Active:"})," Capped at 512x512 for the loaded SD 1.x model (",c.jsx("code",{children:E}),"). Generating at larger sizes (like 1024x1024) is disabled to prevent out-of-memory crashes on your ",r&&r.gpu_name&&!r.gpu_name.includes("Loading")?r.gpu_name:"graphics processor","."]})]}),c.jsxs("div",{className:"m3-field-group",children:[c.jsxs("div",{className:"m3-text-field",children:[c.jsx("label",{className:"m3-text-field-label",children:"AI Generation Engine Optimization"}),c.jsxs("div",{className:"m3-segmented-button",children:[N?c.jsx("div",{className:"m3-segment-item disabled",style:{opacity:.5,cursor:"not-allowed",textDecoration:"line-through",backgroundColor:"var(--md-sys-color-surface-variant)"},title:"High Quality Mode is disabled for SD 1.x models.",children:"High Quality Mode (1024px)"}):c.jsx("div",{className:`m3-segment-item ${f.width>=1024?"active":""}`,onClick:()=>{H("width",1024),H("height",1024)},children:"High Quality Mode (1024px)"}),c.jsx("div",{className:`m3-segment-item ${f.width<1024||N?"active":""}`,onClick:()=>{H("width",512),H("height",512)},children:"Standard Speed Mode (512px)"})]}),c.jsx("span",{style:{fontSize:"0.75rem",color:"var(--md-sys-color-outline)",marginTop:"4px"},children:N?"*Standard Speed Mode (512px) is forced for SD 1.5 / custom models to ensure stable local generations.":"*Use High Quality (1024px) for Flux or SDXL models. Use Standard (512px) for SD 1.5."})]}),c.jsxs("div",{className:"m3-text-field",children:[c.jsx("label",{className:"m3-text-field-label",children:"Select Shape (Aspect Ratio)"}),c.jsx("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"8px"},children:sm.map(A=>{const U=Math.abs(f.width/f.height-A.width/A.height)<.1;return c.jsxs("button",{className:`m3-btn m3-btn-outlined aspect-ratio-btn ${U?"active":""}`,style:{height:"86px",display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",padding:"8px",borderRadius:"var(--md-shape-corner-medium)",borderColor:"var(--md-sys-color-outline-variant)"},onClick:()=>w(A.id,N?"sd15":f.width>=1024?"sdxl":"sd15"),children:[c.jsx("div",{className:`aspect-ratio-preview ratio-${A.id.replace(":","-")}`}),c.jsx("span",{style:{fontWeight:600,fontSize:"0.85rem",marginTop:"2px"},children:A.label}),c.jsx("span",{style:{fontSize:"0.68rem",opacity:.7},children:N?`Max: ${A.id==="1:1"?"512x512":A.id==="4:3"?"512x384":A.id==="16:9"?"512x288":"288x512"}`:A.desc})]},A.id)})})]})]})]}),c.jsxs("div",{className:"m3-card",children:[c.jsxs("h3",{className:"m3-card-title",children:[c.jsx(Ks,{size:18,style:{color:"var(--md-sys-color-primary)"}}),"2. Quality, Speed & Logic"]}),c.jsxs("div",{className:"m3-field-group",children:[c.jsxs("div",{className:"m3-slider-group",children:[c.jsxs("div",{className:"m3-slider-header",children:[c.jsx("span",{className:"m3-slider-label",children:"Detail Steps (Inference speed)"}),c.jsxs("span",{className:"m3-slider-value",children:[f.steps," steps"]})]}),c.jsx("input",{type:"range",className:"m3-slider",value:f.steps,onChange:A=>H("steps",parseInt(A.target.value)),min:"1",max:"60"}),c.jsx("span",{style:{fontSize:"0.75rem",color:"var(--md-sys-color-outline)",lineHeight:"1.3"},children:"The number of times the AI cleans up the image. More steps = sharper details, but takes longer."})]}),c.jsxs("div",{className:"m3-text-field",style:{marginTop:"8px"},children:[c.jsx("label",{className:"m3-text-field-label",children:"Image Blueprint (DNA Seed)"}),c.jsxs("div",{style:{display:"flex",gap:"8px"},children:[c.jsx("input",{type:"number",className:"m3-input",value:f.seed,onChange:A=>H("seed",parseInt(A.target.value)||-1),placeholder:"-1 for a brand new image...",style:{flex:1,height:"40px"}}),c.jsx("button",{className:"m3-btn m3-btn-tonal",onClick:()=>H("seed",-1),style:{height:"40px"},children:"Random (-1)"})]})]})]})]})]}),c.jsx("div",{children:c.jsxs("div",{className:"m3-card",children:[c.jsxs("h3",{className:"m3-card-title",children:[c.jsx(rm,{size:18,style:{color:"var(--md-sys-color-primary)"}}),"3. System Settings"]}),c.jsxs("div",{className:"m3-field-group",children:[c.jsxs("div",{className:"m3-text-field",children:[c.jsx("label",{className:"m3-text-field-label",children:"Generation Backend"}),c.jsx("div",{className:"m3-segmented-button",children:G.map(A=>c.jsx("div",{className:`m3-segment-item ${f.backendType===A.id||!f.backendType&&A.id==="cpu"?"active":""}`,onClick:()=>h(A.id),title:A.id==="cuda"?"CUDA appears only when an NVIDIA CUDA backend is available.":void 0,children:A.label},A.id))}),c.jsx("span",{style:{fontSize:"0.75rem",color:"var(--md-sys-color-outline)",marginTop:"4px",lineHeight:1.35},children:"CPU is slow but safest. Vulkan works on supported GPUs. CUDA is shown only when NVIDIA CUDA support is available."}),f.backendType==="cuda"&&r?.gpu_name&&String(r.gpu_name).toLowerCase().includes("gtx")&&c.jsxs("div",{style:{marginTop:"12px",padding:"10px 14px",background:"rgba(239, 68, 68, 0.08)",border:"1px dashed rgb(239, 68, 68)",borderRadius:"8px",fontSize:"0.75rem",color:"var(--md-sys-color-on-surface)",lineHeight:"1.45"},children:[c.jsx("strong",{children:"Performance Alert:"})," Your graphics card (",c.jsx("code",{children:r.gpu_name}),") is a GTX-series GPU which lacks hardware ",c.jsx("strong",{children:"Tensor Cores"}),". Running in CUDA mode will be up to 3x slower. We strongly recommend switching to ",c.jsx("strong",{children:"Vulkan GPU"})," for optimal generation speed."]}),x?.unavailable?.length>0&&c.jsx("div",{style:{marginTop:"8px",display:"flex",flexDirection:"column",gap:"4px"},children:x.unavailable.map(A=>c.jsxs("span",{style:{fontSize:"0.75rem",color:"var(--md-sys-color-error)",lineHeight:1.35},children:[A.label," unavailable: ",A.reason]},A.id))})]}),c.jsxs("div",{className:"m3-text-field",style:{marginTop:"20px"},children:[c.jsx("label",{className:"m3-text-field-label",children:"Memory Optimization (GPU VRAM)"}),c.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"14px",marginTop:"10px"},children:[c.jsxs("label",{style:{display:"flex",alignItems:"flex-start",gap:"10px",cursor:"pointer",fontSize:"0.85rem"},children:[c.jsx("input",{type:"checkbox",checked:f.vaeTiling!==!1,onChange:A=>H("vaeTiling",A.target.checked),style:{width:"16px",height:"16px",marginTop:"3px",accentColor:"var(--md-sys-color-primary)",cursor:"pointer"}}),c.jsxs("div",{children:[c.jsx("strong",{style:{color:"var(--md-sys-color-on-surface)"},children:"Enable VAE Tiling"}),c.jsx("div",{style:{fontSize:"0.75rem",color:"var(--md-sys-color-outline)",marginTop:"2px",lineHeight:1.35},children:"Processes VAE decoding in smaller tiles. Drastically reduces VRAM usage (from 2GB+ down to ~100MB) with no speed loss. Highly recommended for GPUs with 4GB-6GB VRAM."})]})]}),c.jsxs("label",{style:{display:"flex",alignItems:"flex-start",gap:"10px",cursor:"pointer",fontSize:"0.85rem"},children:[c.jsx("input",{type:"checkbox",checked:f.vaeOnCpu===!0,onChange:A=>H("vaeOnCpu",A.target.checked),style:{width:"16px",height:"16px",marginTop:"3px",accentColor:"var(--md-sys-color-primary)",cursor:"pointer"}}),c.jsxs("div",{children:[c.jsx("strong",{style:{color:"var(--md-sys-color-on-surface)"},children:"Run VAE on CPU"}),c.jsx("div",{style:{fontSize:"0.75rem",color:"var(--md-sys-color-outline)",marginTop:"2px",lineHeight:1.35},children:"Offloads the heavy VAE decoder computation from GPU VRAM to system memory (RAM). Saves ~2GB of VRAM, but makes the final decoding stage slightly slower."})]})]})]})]})]})]})})]})]})}const fg=O.memo(sg);function og(){const f=O.useRef(null),[b,E]=O.useState(null),r=O.useCallback(Z=>{const ie=f.current;f.current=null,E(null),ie&&ie(Z)},[]),x=O.useCallback(({title:Z="Confirm Action",message:ie,confirmLabel:D="OK",cancelLabel:R="Cancel",danger:F=!1})=>new Promise(ae=>{f.current=ae,E({type:"confirm",title:Z,message:ie,confirmLabel:D,cancelLabel:R,danger:F})}),[]),N=O.useCallback(({title:Z="Notice",message:ie,confirmLabel:D="OK",danger:R=!1})=>new Promise(F=>{f.current=F,E({type:"alert",title:Z,message:ie,confirmLabel:D,danger:R})}),[]),[G,H]=O.useState(()=>{const Z=localStorage.getItem("theme");return Z||(window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light")});O.useEffect(()=>{document.documentElement.setAttribute("data-theme",G),localStorage.setItem("theme",G)},[G]);const[w,h]=O.useState("generator"),[A,U]=O.useState(""),[V,fe]=O.useState(""),[k,L]=O.useState(null),[te,W]=O.useState(!1),[Oe,de]=O.useState(!1),[Ee,Xe]=O.useState({options:[{id:"cpu",label:"CPU",available:!0}],cudaAvailable:!1,vulkanAvailable:!1,defaultBackendType:"cpu"}),[Ae,P]=O.useState(null),[ve,Ke]=O.useState([]),[yt,me]=O.useState(!1),[Je,st]=O.useState(!1),[$e,ke]=O.useState([]),[_,C]=O.useState(!1),[J,he]=O.useState(0),[ce,d]=O.useState({os_name:"Loading Specs...",cpu_name:"Loading Specs...",cpu_cores_physical:4,cpu_cores_logical:8,ram_total_gb:0,gpu_name:"Loading Specs..."}),[j,B]=O.useState({cpu_usage:0,ram_used_gb:0,ram_total_gb:0,gpu_name:"Detecting...",vram_used_gb:0,vram_total_gb:0}),[q,K]=O.useState({width:1024,height:1024,steps:4,cfgScale:1,sampler:"euler_a",seed:-1,denoisingStrength:.7,useGpu:!0,useTaesd:!0,useFlashAttn:!0,useTiling:!1,vaeTiling:!0,vaeOnCpu:!1,threads:4,backendType:"auto"});O.useEffect(()=>{async function Z(){try{const ie=await qy(),D=await Yy();Xe(D),d(ie),K(R=>({...R,threads:ie.cpu_cores_physical||4,backendType:R.backendType==="auto"?D.defaultBackendType||"cpu":R.backendType,useGpu:(R.backendType==="auto"?D.defaultBackendType:R.backendType)!=="cpu"}))}catch(ie){console.error("Error fetching hardware specs:",ie)}}Z()},[]);const ee=O.useCallback(async()=>{me(!0);try{const[Z,ie]=await Promise.all([By(),Hy().catch(()=>[])]);P(Z),Ke(ie)}finally{me(!1)}},[]);O.useEffect(()=>{ee()},[ee]);const se=O.useCallback(async()=>{try{const Z=await Ry();await navigator.clipboard.writeText(JSON.stringify(Z,null,2)),st(!0),setTimeout(()=>st(!1),1800)}catch(Z){N({title:"Diagnostics Failed",message:Z.message||String(Z),danger:!0})}},[N]),Ze=O.useCallback(async()=>{if(ve.length===0)return;const Z=ve.reduce((D,R)=>D+Number(R.sizeBytes||0),0);if(await x({title:"Clean Safe Files?",message:`Delete ${ve.length} temporary/cache item${ve.length===1?"":"s"} and free about ${ii(Z)}? +Proceed in Simulation Mode instead?`,confirmLabel:"Proceed"})&&(b(D),r(!1));return}te(D),Oe({progress:0,phase:"Starting backend...",speed:"",current:0,total:0,model:D,backendMode:"",backendBinary:"",device:""});try{const Gt=await Vs(D,x);console.log(Gt);let dl=!1,Re=null;for(let al=0;al<240;al++){const Fe=await Cl();if(Fe.loading&&Oe({progress:Fe.loading.progress||0,phase:Fe.loading.phase||"Loading model...",speed:Fe.loading.speed||"",current:Fe.loading.current||0,total:Fe.loading.total||0,model:Fe.loading.model||D,backendMode:Fe.loading.backendMode||Fe.settings?.backendMode||"",backendBinary:Fe.loading.backendBinary||Fe.settings?.backendBinary||"",device:Fe.loading.device||Fe.settings?.backendDevice||""}),Fe.ready){dl=!0;break}if(Fe.error){Re=Fe.error;break}if(!Fe.running&&al>3){Re="The backend process terminated immediately on startup.";break}await new Promise(za=>setTimeout(za,500))}if(dl)Oe(al=>({...al||{},progress:100,phase:"Model ready",speed:"",current:al?.current||0,total:al?.total||0,model:D})),b(D),r(!0);else throw new Error(Re||`Model server failed to respond on port ${At}.`)}catch(Gt){console.error("Failed to load model:",Gt),N({title:"Model Load Failed",message:Gt.message||String(Gt),danger:!0})}finally{setTimeout(()=>Oe(null),800),te(null)}},gt=async()=>{const D=Xe;_(null),await Et(),D&&await Ne(D)},Et=async()=>{if(me)return;Je(!0),$e({progress:10,phase:"Stopping backend process..."});const D=setInterval(async()=>{try{const R=await Cl();R.unloading?.active?$e({progress:R.unloading.progress||50,phase:R.unloading.phase||"Unloading model..."}):$e(F=>({progress:Math.min(95,F.progress+10),phase:F.phase||"Unloading model..."}))}catch{}},300);try{await Js(),$e({progress:100,phase:"Model unloaded"}),b(null),_(null),r(!1)}catch(R){console.error(R),N({title:"Unload Failed",message:R.message||String(R),danger:!0})}finally{clearInterval(D),setTimeout(()=>{Je(!1),$e({progress:0,phase:""})},500)}},We=async D=>{if(await G({title:"Delete Model?",message:`Delete "${D}" from your drive?`,confirmLabel:"Delete",danger:!0}))try{await Wy(D),await B(),f===D&&await Et()}catch(R){console.error("Failed to delete model:",R),N({title:"Delete Failed",message:R.message||String(R),danger:!0})}},Ht=async(D,R)=>{const F=new AbortController;yt(F),Ee(0),Ae({filename:R,speed:"0.0",eta:0,status:"Initiating file copy..."});try{await Jy(D,ae=>{Ee(Math.round(ae.progress)),Ae({filename:ae.filename,speed:ae.speed_mb_s.toFixed(1),eta:Math.round(ae.eta_secs),status:ae.status})},F.signal),await B()}catch(ae){console.error("Import failed:",ae),ae.name!=="AbortError"&&N({title:"Import Failed",message:ae.message||String(ae),danger:!0})}finally{Ee(null),yt(null)}},Tt=()=>{Ke&&Ke.abort()},Z=D=>{const R=D.target.files[0];R&&Ht(R,R.name),D.target.value=""},ie=!!h;return c.jsxs("div",{className:"workspace-area",children:[c.jsxs("div",{className:"workspace-title-section",children:[c.jsx("h2",{className:"workspace-title",children:"Model Manager"}),c.jsx("p",{className:"workspace-subtitle",children:"Manage local files and download recommended weights directly to your local models folder."})]}),f&&c.jsx("div",{className:"m3-card",style:{borderLeft:"4px solid var(--md-sys-color-primary)",background:"var(--md-sys-color-primary-container)",color:"var(--md-sys-color-on-primary-container)"},children:c.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center"},children:[c.jsxs("div",{children:[c.jsxs("h4",{style:{fontWeight:700},children:["Active Model: ",f]}),c.jsx("p",{style:{fontSize:"0.85rem",marginTop:"2px",opacity:.9},children:"The local C++ stable-diffusion server is running. Real-time telemetry is displaying performance status in the top bar."}),(C.backendMode||C.backendDevice||C.backendBinary)&&c.jsxs("div",{style:{display:"flex",flexWrap:"wrap",gap:"8px",marginTop:"10px"},children:[C.backendMode&&c.jsxs("span",{className:"status-chip",style:{cursor:"default"},children:[c.jsx(xu,{size:14}),c.jsxs("span",{children:["Loaded on ",C.backendMode]})]}),C.backendDevice&&c.jsx("span",{className:"status-chip",style:{cursor:"default"},children:c.jsx("span",{children:C.backendDevice})}),C.backendBinary&&c.jsx("span",{className:"status-chip",style:{cursor:"default"},children:c.jsx("span",{children:C.backendBinary})})]})]}),c.jsxs("button",{className:"m3-btn m3-btn-error",onClick:Et,disabled:me||L!==null,children:[me?c.jsx(aa,{className:"progress-spinner",size:16}):c.jsx(rn,{size:16}),c.jsx("span",{children:me?"Unloading":"Unload Server"})]})]})}),me&&c.jsxs("div",{className:"m3-card",style:{borderLeft:"4px solid var(--md-sys-color-error)",marginTop:"16px"},children:[c.jsx("h4",{style:{fontWeight:700,marginBottom:"8px"},children:"Unloading Model"}),c.jsxs("div",{className:"model-progress-section",style:{margin:"8px 0 0 0"},children:[c.jsxs("div",{className:"model-progress-label",children:[c.jsx("span",{children:st.phase||"Unloading model..."}),c.jsxs("span",{children:[Math.round(st.progress),"%"]})]}),c.jsx("div",{className:"model-progress-bar",children:c.jsx("div",{className:"model-progress-fill",style:{width:`${Math.min(100,Math.max(0,st.progress))}%`,transition:"width 0.25s ease"}})})]})]}),W&&c.jsxs("div",{className:"m3-card",style:{borderLeft:"4px solid var(--md-sys-color-secondary)",marginTop:"16px"},children:[c.jsxs("h4",{style:{fontWeight:700,marginBottom:"8px"},children:["Loading Model: ",W.model||L]}),(W.backendMode||W.backendBinary||W.device)&&c.jsxs("div",{style:{display:"flex",flexWrap:"wrap",gap:"8px",marginBottom:"10px"},children:[W.backendMode&&c.jsxs("span",{className:"status-chip",style:{cursor:"default"},children:[c.jsx(xu,{size:14}),c.jsxs("span",{children:["Loading on ",W.backendMode]})]}),W.device&&c.jsx("span",{className:"status-chip",style:{cursor:"default"},children:c.jsx("span",{children:W.device})}),W.backendBinary&&c.jsx("span",{className:"status-chip",style:{cursor:"default"},children:c.jsx("span",{children:W.backendBinary})})]}),c.jsxs("div",{className:"model-progress-section",style:{margin:"8px 0 0 0"},children:[c.jsxs("div",{className:"model-progress-label",children:[c.jsxs("span",{children:[W.phase,W.speed?` (${W.speed})`:""]}),c.jsx("span",{children:W.total>0?`Loaded ${W.current} / ${W.total} tensors`:`${Math.round(W.progress)}%`})]}),c.jsx("div",{className:"model-progress-bar",children:c.jsx("div",{className:"model-progress-fill",style:{width:`${Math.min(100,Math.max(0,W.progress))}%`,transition:"width 0.25s ease"}})})]})]}),c.jsxs("div",{className:"m3-card",style:{marginTop:"24px"},children:[c.jsxs("h3",{className:"m3-card-title",children:[c.jsx(Xs,{size:18,style:{color:"var(--md-sys-color-primary)"}}),"Local Models (",H.length,")"]}),H.length===0?c.jsx("p",{style:{fontSize:"0.9rem",color:"var(--md-sys-color-outline)",textAlign:"center",padding:"16px 0"},children:"No models detected in app/models/. Download from the library below or import a file."}):c.jsx("div",{style:{display:"flex",flexDirection:"column",gap:"10px"},children:H.map(D=>{const R=D.filename,F=f===R;return c.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",padding:"12px 16px",background:F?"var(--md-sys-color-primary-container)":"var(--md-sys-color-surface-variant)",color:F?"var(--md-sys-color-on-primary-container)":"var(--md-sys-color-on-surface-variant)",borderRadius:"var(--md-shape-corner-medium)",border:"1px solid var(--md-sys-color-outline-variant)"},children:[c.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"2px"},children:[c.jsx("span",{style:{fontWeight:600,fontSize:"0.95rem"},children:R}),c.jsxs("span",{style:{fontSize:"0.75rem",opacity:.8},children:["Local Weights File • ",D.size||ii(D.sizeBytes)]})]}),c.jsx("div",{style:{display:"flex",gap:"8px"},children:F?c.jsxs("button",{className:"m3-btn m3-btn-error",style:{height:"36px",padding:"0 16px"},onClick:Et,disabled:me,children:[me?c.jsx(aa,{className:"progress-spinner",size:14}):c.jsx(rn,{size:14}),c.jsx("span",{children:me?"Unloading":"Unload"})]}):c.jsxs(c.Fragment,{children:[c.jsxs("button",{className:"m3-btn m3-btn-filled",style:{height:"36px",padding:"0 16px"},onClick:()=>Ze(R),disabled:ce,children:[L===R?c.jsx(aa,{className:"progress-spinner",size:14}):c.jsx(Xs,{size:14}),c.jsx("span",{children:L===R?"Loading":"Load"})]}),c.jsx("button",{className:"m3-btn m3-btn-error",style:{height:"36px",width:"36px",padding:0,minWidth:"36px"},onClick:()=>We(R),disabled:ce,title:"Delete from models folder",children:c.jsx(rn,{size:14})})]})})]},R)})})]}),c.jsx("div",{className:"workspace-title-section",style:{marginTop:"32px",marginBottom:"16px"},children:c.jsxs("h3",{className:"m3-card-title",children:[c.jsx(ry,{size:20,style:{color:"var(--md-sys-color-primary)"}}),"Model Library"]})}),c.jsx("div",{style:{display:"flex",flexDirection:"column",gap:"16px"},children:ng.map(D=>c.jsxs("div",{className:"m3-card",style:{margin:0},children:[c.jsx("h4",{style:{fontWeight:700,marginBottom:"12px"},children:D.group}),c.jsx("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(280px, 1fr))",gap:"12px"},children:D.items.map(R=>{const F=he.includes(R.filename),ae=h===R.filename;return c.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"10px",padding:"14px",background:"var(--md-sys-color-surface-variant)",border:"1px solid var(--md-sys-color-outline-variant)",borderRadius:"var(--md-shape-corner-medium)"},children:[c.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"4px"},children:[c.jsx("span",{style:{fontWeight:700},children:R.name}),c.jsxs("span",{style:{fontSize:"0.75rem",color:"var(--md-sys-color-outline)"},children:[R.format," • approx. ",R.approxSize," • ",R.resolution]})]}),c.jsx("p",{style:{fontSize:"0.78rem",color:"var(--md-sys-color-on-surface-variant)",lineHeight:1.35,margin:0},children:R.notes}),ae&&c.jsxs("div",{className:"model-progress-section",style:{marginTop:"2px"},children:[c.jsxs("div",{className:"model-progress-label",children:[c.jsxs("span",{style:{display:"inline-flex",alignItems:"center",gap:"8px"},children:[c.jsx("span",{className:"loading-dot"}),"Downloading"]}),c.jsx("span",{children:U>0?`${U}%`:"Preparing"})]}),c.jsx("div",{className:"model-progress-bar",children:c.jsx("div",{className:"model-progress-fill",style:{width:`${Math.min(100,Math.max(0,U))}%`,transition:"width 0.2s ease"}})}),fe&&c.jsx("div",{style:{fontSize:"0.7rem",color:"var(--md-sys-color-outline)",marginTop:"4px"},children:fe})]}),c.jsxs("button",{className:F?"m3-btn m3-btn-tonal":"m3-btn m3-btn-filled",style:{height:"36px",marginTop:"auto"},onClick:()=>ee(R),disabled:F||h!==null,children:[F?c.jsx(xu,{size:14}):ae?c.jsx(aa,{className:"progress-spinner",size:14}):c.jsx(am,{size:14}),c.jsx("span",{children:F?"Downloaded":ae?"Downloading":"Download"})]}),c.jsx("a",{href:R.url,target:"_blank",rel:"noreferrer",style:{alignSelf:"center",color:"var(--md-sys-color-primary)",fontSize:"0.75rem",fontWeight:600,lineHeight:1.2,textDecoration:"none"},children:"Save to Downloads folder"})]},R.filename)})})]},D.group))}),c.jsx("div",{className:"workspace-title-section",style:{marginTop:"32px",marginBottom:"16px"},children:c.jsxs("h3",{className:"m3-card-title",children:[c.jsx(im,{size:20,style:{color:"var(--md-sys-color-primary)"}}),"Local Model Import"]})}),de!==null&&c.jsxs("div",{className:"m3-card",style:{borderLeft:"4px solid var(--md-sys-color-primary)",marginTop:"24px"},children:[c.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",gap:"12px"},children:[c.jsxs("h4",{style:{fontWeight:600},children:["Copying Model to local folder: ",ke.filename]}),c.jsxs("button",{className:"m3-btn m3-btn-error",style:{height:"34px",padding:"0 14px"},onClick:Tt,children:[c.jsx(Qs,{size:14}),c.jsx("span",{children:"Stop Import"})]})]}),c.jsxs("div",{className:"model-progress-section",style:{margin:"12px 0 6px 0"},children:[c.jsxs("div",{className:"model-progress-label",children:[c.jsxs("span",{children:[ke.status," (",ke.speed," MB/s)"]}),c.jsxs("span",{children:[de,"% (",ke.eta,"s remaining)"]})]}),c.jsx("div",{className:"model-progress-bar",children:c.jsx("div",{className:"model-progress-fill",style:{width:`${de}%`,transition:"width 0.15s ease"}})})]})]}),c.jsxs("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(300px, 1fr))",gap:"16px",marginTop:"16px"},children:[c.jsxs("label",{className:"import-box",style:{margin:0,height:"100%",justifyContent:"center"},children:[c.jsx("input",{type:"file",style:{display:"none"},accept:".gguf,.safetensors,.ckpt",onChange:Z,disabled:de!==null}),c.jsx(im,{className:"import-icon"}),c.jsx("span",{style:{fontWeight:600},children:"Choose weights file"}),c.jsx("span",{style:{fontSize:"0.75rem",color:"var(--md-sys-color-outline)",textAlign:"center"},children:"Select `.gguf`, `.safetensors` or `.ckpt` weights."})]}),c.jsxs("div",{className:"m3-card",style:{display:"flex",flexDirection:"column",justifyContent:"center",margin:0,padding:"20px"},children:[c.jsxs("h4",{style:{fontWeight:600,marginBottom:"8px",display:"flex",alignItems:"center",gap:"8px"},children:[c.jsx(am,{size:16}),"Download Model from URL"]}),c.jsx("p",{style:{fontSize:"0.75rem",color:"var(--md-sys-color-outline)",marginBottom:"12px"},children:"Download any GGUF or Safetensors model from Hugging Face or other sites directly to your models folder."}),ie?c.jsxs("div",{className:"model-progress-section",style:{marginTop:"0px"},children:[c.jsxs("div",{className:"model-progress-label",children:[c.jsx("span",{style:{fontSize:"0.75rem",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",maxWidth:"200px"},title:h,children:h}),c.jsxs("span",{children:[U,"%"]})]}),c.jsx("div",{className:"model-progress-bar",style:{margin:"4px 0"},children:c.jsx("div",{className:"model-progress-fill",style:{width:`${U}%`,transition:"width 0.15s ease"}})}),c.jsx("div",{style:{fontSize:"0.7rem",color:"var(--md-sys-color-outline)",marginTop:"2px"},children:fe}),c.jsxs("button",{className:"m3-btn m3-btn-error",style:{height:"34px",padding:"0 14px",marginTop:"10px"},onClick:se,children:[c.jsx(Qs,{size:14}),c.jsx("span",{children:"Stop Download"})]})]}):c.jsxs("form",{onSubmit:K,style:{display:"flex",gap:"8px"},children:[c.jsx("input",{type:"text",className:"m3-input",style:{flex:1,height:"40px"},placeholder:"e.g. https://huggingface.co/...",value:P,onChange:D=>ve(D.target.value),disabled:h!==null}),c.jsx("button",{type:"submit",className:"m3-btn m3-btn-filled",style:{height:"40px"},disabled:h!==null,children:"Download"})]})]})]}),Xe&&c.jsx("div",{style:{position:"fixed",inset:0,zIndex:50,background:"rgba(0,0,0,0.55)",display:"flex",alignItems:"center",justifyContent:"center",padding:"24px"},children:c.jsxs("div",{className:"m3-card",style:{maxWidth:"460px",width:"100%",margin:0,border:"1px solid var(--md-sys-color-outline-variant)"},children:[c.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"10px",marginBottom:"10px"},children:[c.jsx(My,{size:22,style:{color:"var(--md-sys-color-error)"}}),c.jsx("h3",{style:{fontSize:"1.05rem",fontWeight:700},children:"Unload Current Model?"})]}),c.jsxs("p",{style:{fontSize:"0.9rem",color:"var(--md-sys-color-on-surface-variant)",lineHeight:1.45,marginBottom:"16px"},children:['"',f,'" is already loaded. Unload it before loading "',Xe,'".']}),c.jsxs("div",{style:{display:"flex",justifyContent:"flex-end",gap:"10px"},children:[c.jsx("button",{className:"m3-btn m3-btn-outlined",onClick:()=>_(null),disabled:me,children:"Cancel"}),c.jsxs("button",{className:"m3-btn m3-btn-error",onClick:Et,disabled:me,children:[c.jsx(rn,{size:14}),c.jsx("span",{children:"Unload Only"})]}),c.jsxs("button",{className:"m3-btn m3-btn-filled",onClick:gt,disabled:me,children:[me?c.jsx(aa,{className:"progress-spinner",size:14}):c.jsx(aa,{size:14}),c.jsx("span",{children:"Unload and Load"})]})]})]})})]})}const ug=O.memo(ig),sm=[{id:"1:1",label:"1:1 Square",width:512,height:512,sdxl_width:1024,sdxl_height:1024,desc:"Social posts & avatars"},{id:"4:3",label:"4:3 Photo",width:640,height:480,sdxl_width:1152,sdxl_height:864,desc:"Classic photo look"},{id:"16:9",label:"16:9 Landscape",width:768,height:432,sdxl_width:1216,sdxl_height:684,desc:"Widescreen landscape"},{id:"9:16",label:"9:16 Portrait",width:432,height:768,sdxl_width:684,sdxl_height:1216,desc:"Tall phone screen"}],cg=f=>{if(!f)return!0;const b=f.toLowerCase();return!(b.includes("flux")||b.includes("schnell")||b.includes("sdxl")||b.includes("lightning")||b.includes("turbo")||b.includes("sd3"))};function sg({constraints:f,setConstraints:b,activeModel:E,specs:r,backendOptions:x}){const N=E?cg(E):!1,G=x?.options?.length?x.options:[{id:"cpu",label:"CPU",available:!0}],H=(A,U)=>{b(V=>({...V,[A]:U}))},w=(A,U)=>{const V=U==="sdxl"&&!N,fe=sm.find(X=>X.id===A);if(fe){let X=V?fe.sdxl_width:fe.width,L=V?fe.sdxl_height:fe.height;N&&(X>L?(L=Math.round(L*512/X),X=512):(X=Math.round(X*512/L),L=512),X=Math.round(X/64)*64,L=Math.round(L/64)*64),H("width",X),H("height",L)}},h=A=>{b(U=>({...U,backendType:A,useGpu:A!=="cpu"}))};return c.jsxs("div",{className:"workspace-area",children:[c.jsxs("div",{className:"workspace-title-section",children:[c.jsx("h2",{className:"workspace-title",children:"Image Constraints"}),c.jsx("p",{className:"workspace-subtitle",children:"Configure size, quality, and performance controls for image generation."})]}),c.jsxs("div",{className:"generator-layout",children:[c.jsxs("div",{children:[c.jsxs("div",{className:"m3-card",children:[c.jsxs("h3",{className:"m3-card-title",children:[c.jsx(F0,{size:18,style:{color:"var(--md-sys-color-primary)"}}),"1. Picture Size & Shape"]}),N&&c.jsxs("div",{style:{background:"rgba(251, 191, 36, 0.1)",border:"1px solid rgb(251, 191, 36)",color:"var(--md-sys-color-on-surface)",padding:"12px",borderRadius:"8px",marginBottom:"16px",fontSize:"0.85rem",display:"flex",gap:"8px",alignItems:"flex-start"},children:[c.jsx(fy,{size:16,style:{color:"rgb(251, 191, 36)",flexShrink:0,marginTop:"2px"}}),c.jsxs("div",{children:[c.jsx("strong",{children:"Low-VRAM Protection Active:"})," Capped at 512x512 for the loaded SD 1.x model (",c.jsx("code",{children:E}),"). Generating at larger sizes (like 1024x1024) is disabled to prevent out-of-memory crashes on your ",r&&r.gpu_name&&!r.gpu_name.includes("Loading")?r.gpu_name:"graphics processor","."]})]}),c.jsxs("div",{className:"m3-field-group",children:[c.jsxs("div",{className:"m3-text-field",children:[c.jsx("label",{className:"m3-text-field-label",children:"AI Generation Engine Optimization"}),c.jsxs("div",{className:"m3-segmented-button",children:[N?c.jsx("div",{className:"m3-segment-item disabled",style:{opacity:.5,cursor:"not-allowed",textDecoration:"line-through",backgroundColor:"var(--md-sys-color-surface-variant)"},title:"High Quality Mode is disabled for SD 1.x models.",children:"High Quality Mode (1024px)"}):c.jsx("div",{className:`m3-segment-item ${f.width>=1024?"active":""}`,onClick:()=>{H("width",1024),H("height",1024)},children:"High Quality Mode (1024px)"}),c.jsx("div",{className:`m3-segment-item ${f.width<1024||N?"active":""}`,onClick:()=>{H("width",512),H("height",512)},children:"Standard Speed Mode (512px)"})]}),c.jsx("span",{style:{fontSize:"0.75rem",color:"var(--md-sys-color-outline)",marginTop:"4px"},children:N?"*Standard Speed Mode (512px) is forced for SD 1.5 / custom models to ensure stable local generations.":"*Use High Quality (1024px) for Flux or SDXL models. Use Standard (512px) for SD 1.5."})]}),c.jsxs("div",{className:"m3-text-field",children:[c.jsx("label",{className:"m3-text-field-label",children:"Select Shape (Aspect Ratio)"}),c.jsx("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"8px"},children:sm.map(A=>{const U=Math.abs(f.width/f.height-A.width/A.height)<.1;return c.jsxs("button",{className:`m3-btn m3-btn-outlined aspect-ratio-btn ${U?"active":""}`,style:{height:"86px",display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",padding:"8px",borderRadius:"var(--md-shape-corner-medium)",borderColor:"var(--md-sys-color-outline-variant)"},onClick:()=>w(A.id,N?"sd15":f.width>=1024?"sdxl":"sd15"),children:[c.jsx("div",{className:`aspect-ratio-preview ratio-${A.id.replace(":","-")}`}),c.jsx("span",{style:{fontWeight:600,fontSize:"0.85rem",marginTop:"2px"},children:A.label}),c.jsx("span",{style:{fontSize:"0.68rem",opacity:.7},children:N?`Max: ${A.id==="1:1"?"512x512":A.id==="4:3"?"512x384":A.id==="16:9"?"512x288":"288x512"}`:A.desc})]},A.id)})})]})]})]}),c.jsxs("div",{className:"m3-card",children:[c.jsxs("h3",{className:"m3-card-title",children:[c.jsx(Ks,{size:18,style:{color:"var(--md-sys-color-primary)"}}),"2. Quality, Speed & Logic"]}),c.jsxs("div",{className:"m3-field-group",children:[c.jsxs("div",{className:"m3-slider-group",children:[c.jsxs("div",{className:"m3-slider-header",children:[c.jsx("span",{className:"m3-slider-label",children:"Detail Steps (Inference speed)"}),c.jsxs("span",{className:"m3-slider-value",children:[f.steps," steps"]})]}),c.jsx("input",{type:"range",className:"m3-slider",value:f.steps,onChange:A=>H("steps",parseInt(A.target.value)),min:"1",max:"60"}),c.jsx("span",{style:{fontSize:"0.75rem",color:"var(--md-sys-color-outline)",lineHeight:"1.3"},children:"The number of times the AI cleans up the image. More steps = sharper details, but takes longer."})]}),c.jsxs("div",{className:"m3-text-field",style:{marginTop:"8px"},children:[c.jsx("label",{className:"m3-text-field-label",children:"Image Blueprint (DNA Seed)"}),c.jsxs("div",{style:{display:"flex",gap:"8px"},children:[c.jsx("input",{type:"number",className:"m3-input",value:f.seed,onChange:A=>H("seed",parseInt(A.target.value)||-1),placeholder:"-1 for a brand new image...",style:{flex:1,height:"40px"}}),c.jsx("button",{className:"m3-btn m3-btn-tonal",onClick:()=>H("seed",-1),style:{height:"40px"},children:"Random (-1)"})]})]})]})]})]}),c.jsx("div",{children:c.jsxs("div",{className:"m3-card",children:[c.jsxs("h3",{className:"m3-card-title",children:[c.jsx(rm,{size:18,style:{color:"var(--md-sys-color-primary)"}}),"3. System Settings"]}),c.jsxs("div",{className:"m3-field-group",children:[c.jsxs("div",{className:"m3-text-field",children:[c.jsx("label",{className:"m3-text-field-label",children:"Generation Backend"}),c.jsx("div",{className:"m3-segmented-button",children:G.map(A=>c.jsx("div",{className:`m3-segment-item ${f.backendType===A.id||!f.backendType&&A.id==="cpu"?"active":""}`,onClick:()=>h(A.id),title:A.id==="cuda"?"CUDA appears only when an NVIDIA CUDA backend is available.":void 0,children:A.label},A.id))}),c.jsx("span",{style:{fontSize:"0.75rem",color:"var(--md-sys-color-outline)",marginTop:"4px",lineHeight:1.35},children:"CPU is slow but safest. Vulkan works on supported GPUs. CUDA is shown only when NVIDIA CUDA support is available."}),f.backendType==="cuda"&&r?.gpu_name&&String(r.gpu_name).toLowerCase().includes("gtx")&&c.jsxs("div",{style:{marginTop:"12px",padding:"10px 14px",background:"rgba(239, 68, 68, 0.08)",border:"1px dashed rgb(239, 68, 68)",borderRadius:"8px",fontSize:"0.75rem",color:"var(--md-sys-color-on-surface)",lineHeight:"1.45"},children:[c.jsx("strong",{children:"Performance Alert:"})," Your graphics card (",c.jsx("code",{children:r.gpu_name}),") is a GTX-series GPU which lacks hardware ",c.jsx("strong",{children:"Tensor Cores"}),". Running in CUDA mode will be up to 3x slower. We strongly recommend switching to ",c.jsx("strong",{children:"Vulkan GPU"})," for optimal generation speed."]}),x?.unavailable?.length>0&&c.jsx("div",{style:{marginTop:"8px",display:"flex",flexDirection:"column",gap:"4px"},children:x.unavailable.map(A=>c.jsxs("span",{style:{fontSize:"0.75rem",color:"var(--md-sys-color-error)",lineHeight:1.35},children:[A.label," unavailable: ",A.reason]},A.id))})]}),c.jsxs("div",{className:"m3-text-field",style:{marginTop:"20px"},children:[c.jsx("label",{className:"m3-text-field-label",children:"Memory Optimization (GPU VRAM)"}),c.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"14px",marginTop:"10px"},children:[c.jsxs("label",{style:{display:"flex",alignItems:"flex-start",gap:"10px",cursor:"pointer",fontSize:"0.85rem"},children:[c.jsx("input",{type:"checkbox",checked:f.vaeTiling!==!1,onChange:A=>H("vaeTiling",A.target.checked),style:{width:"16px",height:"16px",marginTop:"3px",accentColor:"var(--md-sys-color-primary)",cursor:"pointer"}}),c.jsxs("div",{children:[c.jsx("strong",{style:{color:"var(--md-sys-color-on-surface)"},children:"Enable VAE Tiling"}),c.jsx("div",{style:{fontSize:"0.75rem",color:"var(--md-sys-color-outline)",marginTop:"2px",lineHeight:1.35},children:"Processes VAE decoding in smaller tiles. Drastically reduces VRAM usage (from 2GB+ down to ~100MB) with no speed loss. Highly recommended for GPUs with 4GB-6GB VRAM."})]})]}),c.jsxs("label",{style:{display:"flex",alignItems:"flex-start",gap:"10px",cursor:"pointer",fontSize:"0.85rem"},children:[c.jsx("input",{type:"checkbox",checked:f.vaeOnCpu===!0,onChange:A=>H("vaeOnCpu",A.target.checked),style:{width:"16px",height:"16px",marginTop:"3px",accentColor:"var(--md-sys-color-primary)",cursor:"pointer"}}),c.jsxs("div",{children:[c.jsx("strong",{style:{color:"var(--md-sys-color-on-surface)"},children:"Run VAE on CPU"}),c.jsx("div",{style:{fontSize:"0.75rem",color:"var(--md-sys-color-outline)",marginTop:"2px",lineHeight:1.35},children:"Offloads the heavy VAE decoder computation from GPU VRAM to system memory (RAM). Saves ~2GB of VRAM, but makes the final decoding stage slightly slower."})]})]})]})]})]})]})})]})]})}const fg=O.memo(sg);function og(){const f=O.useRef(null),[b,E]=O.useState(null),r=O.useCallback(Z=>{const ie=f.current;f.current=null,E(null),ie&&ie(Z)},[]),x=O.useCallback(({title:Z="Confirm Action",message:ie,confirmLabel:D="OK",cancelLabel:R="Cancel",danger:F=!1})=>new Promise(ae=>{f.current=ae,E({type:"confirm",title:Z,message:ie,confirmLabel:D,cancelLabel:R,danger:F})}),[]),N=O.useCallback(({title:Z="Notice",message:ie,confirmLabel:D="OK",danger:R=!1})=>new Promise(F=>{f.current=F,E({type:"alert",title:Z,message:ie,confirmLabel:D,danger:R})}),[]),[G,H]=O.useState(()=>{const Z=localStorage.getItem("theme");return Z||(window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light")});O.useEffect(()=>{document.documentElement.setAttribute("data-theme",G),localStorage.setItem("theme",G)},[G]);const[w,h]=O.useState("generator"),[A,U]=O.useState(""),[V,fe]=O.useState(""),[X,L]=O.useState(null),[te,W]=O.useState(!1),[Oe,de]=O.useState(!1),[Ee,ke]=O.useState({options:[{id:"cpu",label:"CPU",available:!0}],cudaAvailable:!1,vulkanAvailable:!1,defaultBackendType:"cpu"}),[Ae,P]=O.useState(null),[ve,Ke]=O.useState([]),[yt,me]=O.useState(!1),[Je,st]=O.useState(!1),[$e,Xe]=O.useState([]),[_,C]=O.useState(!1),[J,he]=O.useState(0),[ce,d]=O.useState({os_name:"Loading Specs...",cpu_name:"Loading Specs...",cpu_cores_physical:4,cpu_cores_logical:8,ram_total_gb:0,gpu_name:"Loading Specs..."}),[j,B]=O.useState({cpu_usage:0,ram_used_gb:0,ram_total_gb:0,gpu_name:"Detecting...",vram_used_gb:0,vram_total_gb:0}),[q,K]=O.useState({width:1024,height:1024,steps:4,cfgScale:1,sampler:"euler_a",seed:-1,denoisingStrength:.7,useGpu:!0,useTaesd:!0,useFlashAttn:!0,useTiling:!1,vaeTiling:!0,vaeOnCpu:!1,threads:4,backendType:"auto"});O.useEffect(()=>{async function Z(){try{const ie=await qy(),D=await Yy();ke(D),d(ie),K(R=>({...R,threads:ie.cpu_cores_physical||4,backendType:R.backendType==="auto"?D.defaultBackendType||"cpu":R.backendType,useGpu:(R.backendType==="auto"?D.defaultBackendType:R.backendType)!=="cpu"}))}catch(ie){console.error("Error fetching hardware specs:",ie)}}Z()},[]);const ee=O.useCallback(async()=>{me(!0);try{const[Z,ie]=await Promise.all([By(),Hy().catch(()=>[])]);P(Z),Ke(ie)}finally{me(!1)}},[]);O.useEffect(()=>{ee()},[ee]);const se=O.useCallback(async()=>{try{const Z=await Ry();await navigator.clipboard.writeText(JSON.stringify(Z,null,2)),st(!0),setTimeout(()=>st(!1),1800)}catch(Z){N({title:"Diagnostics Failed",message:Z.message||String(Z),danger:!0})}},[N]),Ze=O.useCallback(async()=>{if(ve.length===0)return;const Z=ve.reduce((D,R)=>D+Number(R.sizeBytes||0),0);if(await x({title:"Clean Safe Files?",message:`Delete ${ve.length} temporary/cache item${ve.length===1?"":"s"} and free about ${ii(Z)}? -Models and generated outputs are not included.`,confirmLabel:"Clean",danger:!0})){me(!0);try{await Gy(ve.map(D=>D.id)),await ee()}catch(D){N({title:"Cleanup Failed",message:D.message||String(D),danger:!0})}finally{me(!1)}}},[ve,ee,N,x]);O.useEffect(()=>{async function Z(){const ie=await ky();ke(ie)}Z()},[]),O.useEffect(()=>{k?localStorage.setItem("active-model",k):localStorage.removeItem("active-model")},[k]),O.useEffect(()=>{let Z=null;async function ie(){const D=await Cl();if(!!D.ready){Z&&clearInterval(Z);const F=localStorage.getItem("active-model");if(F)L(F),W(!0);else{try{if(D&&D.settings&&D.settings.model){const ae=D.settings.model.split(/[\\/]/).pop();L(ae)}}catch{}W(!0)}}else if(!(typeof window<"u"&&window.__TAURI_INTERNALS__!==void 0)){const ae=localStorage.getItem("active-model");ae&&(L(ae),W(!1))}}return ie(),Z=setInterval(ie,2e3),()=>{Z&&clearInterval(Z)}},[]),O.useEffect(()=>{async function Z(){try{const D=await Ly();B(R=>R.cpu_usage===D.cpu_usage&&R.ram_used_gb===D.ram_used_gb&&R.ram_total_gb===D.ram_total_gb&&R.gpu_name===D.gpu_name&&R.vram_used_gb===D.vram_used_gb&&R.vram_total_gb===D.vram_total_gb?R:D)}catch{}}Z();const ie=setInterval(Z,1500);return()=>clearInterval(ie)},[]),O.useEffect(()=>{if(k){const Z=k.toLowerCase();Z.includes("flux")||Z.includes("schnell")?K(ie=>({...ie,steps:4,cfgScale:1,width:1024,height:1024})):Z.includes("lightning")||Z.includes("turbo")?K(ie=>({...ie,steps:4,cfgScale:1.5,width:1024,height:1024})):Z.includes("sd15")?K(ie=>({...ie,steps:25,cfgScale:7,width:512,height:512})):Z.includes("sd35")?K(ie=>({...ie,steps:20,cfgScale:4.5,width:1024,height:1024})):K(ie=>({...ie,steps:20,cfgScale:7,width:512,height:512}))}},[k]);const Ne=O.useMemo(()=>{switch(w){case"generator":return c.jsx(ag,{prompt:A,setPrompt:U,negativePrompt:V,setNegativePrompt:fe,constraints:q,setConstraints:K,activeModel:k,generatedImages:$e,setGeneratedImages:ke,isGenerating:_,setIsGenerating:C,generationProgress:J,setGenerationProgress:he,setActiveTab:h,showAlert:N,showConfirm:x});case"models":return c.jsx(ug,{activeModel:k,setActiveModel:L,serverRunning:te,setServerRunning:W,constraints:q,showAlert:N,showConfirm:x});case"constraints":return c.jsx(fg,{constraints:q,setConstraints:K,activeModel:k,specs:ce,backendOptions:Ee});default:return null}},[w,A,V,q,k,$e,_,J,te,ce,Ee,N,x]),gt=O.useMemo(()=>c.jsx(Ny,{activeTab:w,setActiveTab:h,specs:ce}),[w,ce]),Et=O.useCallback(async()=>{if(!(!te||Oe)){de(!0);try{await Js(),W(!1),L(null)}catch(Z){console.error("Failed to stop server:",Z),N({title:"Stop Server Failed",message:Z.message||String(Z),danger:!0})}finally{de(!1)}}},[te,Oe,N]),We=[...Ae?.stale?["Restart Local AI Image Generator so the local server loads the latest API."]:[],...Ae?.issues||[]],Ht=ve.reduce((Z,ie)=>Z+Number(ie.sizeBytes||0),0),Tt=!!(Ae&&(We.length>0||ve.length>0));return c.jsxs("div",{className:"app-container",children:[gt,c.jsxs("div",{className:"main-content",children:[c.jsx(Dy,{telemetry:j,serverRunning:te,activeModel:k,onStopServer:Et,isStoppingServer:Oe,theme:G,setTheme:H}),Tt&&c.jsxs("div",{className:`m3-card readiness-card ${Ae?.stale||We.length>0?"readiness-card-warning":""}`,children:[c.jsxs("div",{className:"readiness-header",children:[c.jsxs("div",{children:[c.jsx("h3",{className:"m3-card-title",style:{marginBottom:"4px"},children:Ae?.stale?"Restart Required":We.length>0?"System Readiness":"Safe Cleanup Available"}),c.jsx("p",{className:"m3-card-subtitle",style:{margin:0},children:Ae?.stale?`Running server build: ${Ae.build||"unknown"}`:We.length>0?"Local AI Image Generator found setup items that may need attention.":`${ve.length} temporary item${ve.length===1?"":"s"} can be cleaned (${ii(Ht)}).`})]}),c.jsxs("div",{className:"readiness-actions",children:[c.jsx("button",{className:"m3-btn m3-btn-outlined",onClick:ee,disabled:yt,children:yt?"Checking":"Refresh"}),c.jsx("button",{className:"m3-btn m3-btn-tonal",onClick:se,children:Je?"Copied":"Copy Diagnostics"}),ve.length>0&&c.jsxs("button",{className:"m3-btn m3-btn-error",onClick:Ze,disabled:yt,children:["Clean ",ii(Ht)]})]})]}),We.length>0&&c.jsx("div",{className:"readiness-issues",children:We.slice(0,4).map(Z=>c.jsx("span",{children:Z},Z))}),ve.length>0&&c.jsx("div",{className:"readiness-cleanup-list",children:ve.slice(0,3).map(Z=>c.jsxs("span",{title:Z.path,children:[Z.name," · ",Z.size," · ",Z.reason]},Z.id))})]}),Ne]}),b&&c.jsx("div",{className:"app-dialog-backdrop",role:"presentation",children:c.jsxs("div",{className:"app-dialog",role:"dialog","aria-modal":"true","aria-labelledby":"app-dialog-title",children:[c.jsx("h3",{id:"app-dialog-title",className:"app-dialog-title",children:b.title}),c.jsx("p",{className:"app-dialog-message",children:b.message}),c.jsxs("div",{className:"app-dialog-actions",children:[b.type==="confirm"&&c.jsx("button",{className:"m3-btn m3-btn-outlined",onClick:()=>r(!1),children:b.cancelLabel}),c.jsx("button",{className:`m3-btn ${b.danger?"m3-btn-error":"m3-btn-filled"}`,onClick:()=>r(!0),children:b.confirmLabel})]})]})})]})}G0.createRoot(document.getElementById("root")).render(c.jsx(D0.StrictMode,{children:c.jsx(og,{})}));export{ja as i,rg as t}; +Models and generated outputs are not included.`,confirmLabel:"Clean",danger:!0})){me(!0);try{await Gy(ve.map(D=>D.id)),await ee()}catch(D){N({title:"Cleanup Failed",message:D.message||String(D),danger:!0})}finally{me(!1)}}},[ve,ee,N,x]);O.useEffect(()=>{async function Z(){const ie=await Xy();Xe(ie)}Z()},[]),O.useEffect(()=>{X?localStorage.setItem("active-model",X):localStorage.removeItem("active-model")},[X]),O.useEffect(()=>{let Z=null;async function ie(){const D=await Cl();if(!!D.ready){Z&&clearInterval(Z);const F=localStorage.getItem("active-model");if(F)L(F),W(!0);else{try{if(D&&D.settings&&D.settings.model){const ae=D.settings.model.split(/[\\/]/).pop();L(ae)}}catch{}W(!0)}}else if(!(typeof window<"u"&&window.__TAURI_INTERNALS__!==void 0)){const ae=localStorage.getItem("active-model");ae&&(L(ae),W(!1))}}return ie(),Z=setInterval(ie,2e3),()=>{Z&&clearInterval(Z)}},[]),O.useEffect(()=>{async function Z(){try{const D=await Ly();B(R=>R.cpu_usage===D.cpu_usage&&R.ram_used_gb===D.ram_used_gb&&R.ram_total_gb===D.ram_total_gb&&R.gpu_name===D.gpu_name&&R.vram_used_gb===D.vram_used_gb&&R.vram_total_gb===D.vram_total_gb?R:D)}catch{}}Z();const ie=setInterval(Z,1500);return()=>clearInterval(ie)},[]),O.useEffect(()=>{if(X){const Z=X.toLowerCase();Z.includes("flux")||Z.includes("schnell")?K(ie=>({...ie,steps:4,cfgScale:1,width:1024,height:1024})):Z.includes("lightning")||Z.includes("turbo")?K(ie=>({...ie,steps:4,cfgScale:1.5,width:1024,height:1024})):Z.includes("sd15")?K(ie=>({...ie,steps:25,cfgScale:7,width:512,height:512})):Z.includes("sd35")?K(ie=>({...ie,steps:20,cfgScale:4.5,width:1024,height:1024})):K(ie=>({...ie,steps:20,cfgScale:7,width:512,height:512}))}},[X]);const Ne=O.useMemo(()=>{switch(w){case"generator":return c.jsx(ag,{prompt:A,setPrompt:U,negativePrompt:V,setNegativePrompt:fe,constraints:q,setConstraints:K,activeModel:X,generatedImages:$e,setGeneratedImages:Xe,isGenerating:_,setIsGenerating:C,generationProgress:J,setGenerationProgress:he,setActiveTab:h,showAlert:N,showConfirm:x});case"models":return c.jsx(ug,{activeModel:X,setActiveModel:L,serverRunning:te,setServerRunning:W,constraints:q,showAlert:N,showConfirm:x});case"constraints":return c.jsx(fg,{constraints:q,setConstraints:K,activeModel:X,specs:ce,backendOptions:Ee});default:return null}},[w,A,V,q,X,$e,_,J,te,ce,Ee,N,x]),gt=O.useMemo(()=>c.jsx(Ny,{activeTab:w,setActiveTab:h,specs:ce}),[w,ce]),Et=O.useCallback(async()=>{if(!(!te||Oe)){de(!0);try{await Js(),W(!1),L(null)}catch(Z){console.error("Failed to stop server:",Z),N({title:"Stop Server Failed",message:Z.message||String(Z),danger:!0})}finally{de(!1)}}},[te,Oe,N]),We=[...Ae?.stale?["Restart Local AI Image Generator so the local server loads the latest API."]:[],...Ae?.issues||[]],Ht=ve.reduce((Z,ie)=>Z+Number(ie.sizeBytes||0),0),Tt=!!(Ae&&(We.length>0||ve.length>0));return c.jsxs("div",{className:"app-container",children:[gt,c.jsxs("div",{className:"main-content",children:[c.jsx(Dy,{telemetry:j,serverRunning:te,activeModel:X,onStopServer:Et,isStoppingServer:Oe,theme:G,setTheme:H}),Tt&&c.jsxs("div",{className:`m3-card readiness-card ${Ae?.stale||We.length>0?"readiness-card-warning":""}`,children:[c.jsxs("div",{className:"readiness-header",children:[c.jsxs("div",{children:[c.jsx("h3",{className:"m3-card-title",style:{marginBottom:"4px"},children:Ae?.stale?"Restart Required":We.length>0?"System Readiness":"Safe Cleanup Available"}),c.jsx("p",{className:"m3-card-subtitle",style:{margin:0},children:Ae?.stale?`Running server build: ${Ae.build||"unknown"}`:We.length>0?"Local AI Image Generator found setup items that may need attention.":`${ve.length} temporary item${ve.length===1?"":"s"} can be cleaned (${ii(Ht)}).`})]}),c.jsxs("div",{className:"readiness-actions",children:[c.jsx("button",{className:"m3-btn m3-btn-outlined",onClick:ee,disabled:yt,children:yt?"Checking":"Refresh"}),c.jsx("button",{className:"m3-btn m3-btn-tonal",onClick:se,children:Je?"Copied":"Copy Diagnostics"}),ve.length>0&&c.jsxs("button",{className:"m3-btn m3-btn-error",onClick:Ze,disabled:yt,children:["Clean ",ii(Ht)]})]})]}),We.length>0&&c.jsx("div",{className:"readiness-issues",children:We.slice(0,4).map(Z=>c.jsx("span",{children:Z},Z))}),ve.length>0&&c.jsx("div",{className:"readiness-cleanup-list",children:ve.slice(0,3).map(Z=>c.jsxs("span",{title:Z.path,children:[Z.name," · ",Z.size," · ",Z.reason]},Z.id))})]}),Ne]}),b&&c.jsx("div",{className:"app-dialog-backdrop",role:"presentation",children:c.jsxs("div",{className:"app-dialog",role:"dialog","aria-modal":"true","aria-labelledby":"app-dialog-title",children:[c.jsx("h3",{id:"app-dialog-title",className:"app-dialog-title",children:b.title}),c.jsx("p",{className:"app-dialog-message",children:b.message}),c.jsxs("div",{className:"app-dialog-actions",children:[b.type==="confirm"&&c.jsx("button",{className:"m3-btn m3-btn-outlined",onClick:()=>r(!1),children:b.cancelLabel}),c.jsx("button",{className:`m3-btn ${b.danger?"m3-btn-error":"m3-btn-filled"}`,onClick:()=>r(!0),children:b.confirmLabel})]})]})})]})}G0.createRoot(document.getElementById("root")).render(c.jsx(D0.StrictMode,{children:c.jsx(og,{})}));export{ja as i,rg as t}; diff --git a/app/dist/index.html b/app/dist/index.html index f8e7798..26edf65 100644 --- a/app/dist/index.html +++ b/app/dist/index.html @@ -8,7 +8,7 @@ Local AI Image Generator - + diff --git a/app/frontend/src/components/ModelManager.jsx b/app/frontend/src/components/ModelManager.jsx index dd3f93d..fa20bc8 100644 --- a/app/frontend/src/components/ModelManager.jsx +++ b/app/frontend/src/components/ModelManager.jsx @@ -24,15 +24,6 @@ const MODEL_LIBRARY = [ notes: "All-around SDXL model for fantasy art, renders, illustration, and stylized images.", url: "https://huggingface.co/Lykon/dreamshaper-xl-lightning/resolve/main/DreamShaperXL_Lightning.safetensors", }, - { - name: "SDXL Base 1.0 Q4_0 GGUF", - filename: "stable-diffusion-xl-base-1.0-Q4_0.gguf", - format: "GGUF", - approxSize: "3.8 GB", - resolution: "1024x1024", - notes: "Quantized SDXL base model for lower VRAM or CPU-friendly generation.", - url: "https://huggingface.co/hum-ma/SDXL-models-GGUF/resolve/7e15380138e7069ca3aaef5bf0401c3406e3a593/stable-diffusion-xl-base-1.0-Q4_0.gguf", - }, ], }, { @@ -709,6 +700,21 @@ function ModelManager({ activeModel, setActiveModel, serverRunning, setServerRun {installed ? : downloading ? : } {installed ? "Downloaded" : downloading ? "Downloading" : "Download"} + + Save to Downloads folder + ); })} diff --git a/scripts/serve.cjs b/scripts/serve.cjs index c6bad77..dc8993d 100644 --- a/scripts/serve.cjs +++ b/scripts/serve.cjs @@ -1197,7 +1197,11 @@ function getModelLoadIssue(modelPath) { } if (ext === ".gguf") { + const knownDiffusionOnlyGguf = + lower === "stable-diffusion-xl-base-1.0-q4_0.gguf" || + lower.includes("stable-diffusion-xl-base-1.0"); const requiresSeparateComponents = + knownDiffusionOnlyGguf || lower.includes("z_image") || lower.includes("z-image") || lower.includes("zimage") || @@ -1208,6 +1212,9 @@ function getModelLoadIssue(modelPath) { lower.includes("flux"); if (requiresSeparateComponents) { + if (knownDiffusionOnlyGguf) { + return `${filename} is not supported as a one-click model in this app. This SDXL GGUF is a diffusion-only component and needs matching VAE/text encoder files instead of being loaded with --model. Use one of the recommended Safetensors SDXL/SD 1.5 checkpoints, or import a complete single-file GGUF checkpoint.`; + } return `${filename} looks like a multi-file diffusion GGUF. This app currently loads single-file SD 1.5/SDXL checkpoints directly. Models like Z-Image, Qwen, Flux, HiDream, Hunyuan, and Wan usually need extra files such as VAE/text encoders and must be launched with --diffusion-model instead of --model.`; } } @@ -1227,6 +1234,9 @@ function describeBackendError(rawError, modelPath) { if (!raw.includes("new_sd_ctx_t failed")) return raw; if (lower.endsWith(".gguf")) { + if (lower === "stable-diffusion-xl-base-1.0-q4_0.gguf" || lower.includes("stable-diffusion-xl-base-1.0")) { + return `${raw}\n\n${filename} is not supported as a one-click model in this app. This SDXL GGUF is a diffusion-only component and needs matching VAE/text encoder files instead of being loaded with --model. Use one of the recommended Safetensors SDXL/SD 1.5 checkpoints, or import a complete single-file GGUF checkpoint.`; + } return `${raw}\n\n${filename} could not be loaded as a single checkpoint. Some GGUF files are only the diffusion part of a larger workflow and need separate VAE/text encoder files. Try a recommended SD 1.5/SDXL model, or re-download/import the file if this is meant to be a single-file SD/SDXL GGUF.`; }