diff --git a/internal/api/types.go b/internal/api/types.go index 4b921be..d87ebb9 100644 --- a/internal/api/types.go +++ b/internal/api/types.go @@ -75,8 +75,8 @@ type PVCInventory struct { LastJobState string `json:"last_job_state,omitempty"` LastJobStartedAt string `json:"last_job_started_at,omitempty"` LastJobProgressPct int `json:"last_job_progress_pct"` - LastBackupSizeBytes float64 `json:"last_backup_size_bytes,omitempty"` - TotalBackupSizeBytes float64 `json:"total_backup_size_bytes,omitempty"` + LastBackupSizeBytes float64 `json:"last_backup_size_bytes"` + TotalBackupSizeBytes float64 `json:"total_backup_size_bytes"` Healthy bool `json:"healthy"` HealthReason string `json:"health_reason,omitempty"` Error string `json:"error,omitempty"` diff --git a/internal/server/ui-dist/assets/index-C9X7C4pD.js b/internal/server/ui-dist/assets/index-C8vHBL9g.js similarity index 95% rename from internal/server/ui-dist/assets/index-C9X7C4pD.js rename to internal/server/ui-dist/assets/index-C8vHBL9g.js index 28cc949..4b8ebb0 100644 --- a/internal/server/ui-dist/assets/index-C9X7C4pD.js +++ b/internal/server/ui-dist/assets/index-C8vHBL9g.js @@ -37,4 +37,4 @@ `+l[i].replace(" at new "," at ");return e.displayName&&s.includes("")&&(s=s.replace("",e.displayName)),s}while(1<=i&&0<=u);break}}}finally{Vl=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?Un(e):""}function kf(e){switch(e.tag){case 5:return Un(e.type);case 16:return Un("Lazy");case 13:return Un("Suspense");case 19:return Un("SuspenseList");case 0:case 2:case 15:return e=Al(e.type,!1),e;case 11:return e=Al(e.type.render,!1),e;case 1:return e=Al(e.type,!0),e;default:return""}}function yo(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case en:return"Fragment";case bt:return"Portal";case ho:return"Profiler";case di:return"StrictMode";case mo:return"Suspense";case vo:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case Ls:return(e.displayName||"Context")+".Consumer";case Ts:return(e._context.displayName||"Context")+".Provider";case pi:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case hi:return t=e.displayName||null,t!==null?t:yo(e.type)||"Memo";case dt:t=e._payload,e=e._init;try{return yo(e(t))}catch{}}return null}function Sf(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=t.render,e=e.displayName||e.name||"",t.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return yo(t);case 8:return t===di?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t}return null}function Nt(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function Os(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function xf(e){var t=Os(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var l=n.get,o=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return l.call(this)},set:function(i){r=""+i,o.call(this,i)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(i){r=""+i},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function xr(e){e._valueTracker||(e._valueTracker=xf(e))}function Ms(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=Os(e)?e.checked?"true":"false":e.value),e=r,e!==n?(t.setValue(e),!0):!1}function Gr(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function go(e,t){var n=t.checked;return K({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n??e._wrapperState.initialChecked})}function cu(e,t){var n=t.defaultValue==null?"":t.defaultValue,r=t.checked!=null?t.checked:t.defaultChecked;n=Nt(t.value!=null?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function Ds(e,t){t=t.checked,t!=null&&fi(e,"checked",t,!1)}function wo(e,t){Ds(e,t);var n=Nt(t.value),r=t.type;if(n!=null)r==="number"?(n===0&&e.value===""||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if(r==="submit"||r==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?ko(e,t.type,n):t.hasOwnProperty("defaultValue")&&ko(e,t.type,Nt(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function fu(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!(r!=="submit"&&r!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}n=e.name,n!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,n!==""&&(e.name=n)}function ko(e,t,n){(t!=="number"||Gr(e.ownerDocument)!==e)&&(n==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var Bn=Array.isArray;function dn(e,t,n,r){if(e=e.options,t){t={};for(var l=0;l"+t.valueOf().toString()+"",t=_r.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function qn(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&n.nodeType===3){n.nodeValue=t;return}}e.textContent=t}var An={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},_f=["Webkit","ms","Moz","O"];Object.keys(An).forEach(function(e){_f.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),An[t]=An[e]})});function Bs(e,t,n){return t==null||typeof t=="boolean"||t===""?"":n||typeof t!="number"||t===0||An.hasOwnProperty(e)&&An[e]?(""+t).trim():t+"px"}function $s(e,t){e=e.style;for(var n in t)if(t.hasOwnProperty(n)){var r=n.indexOf("--")===0,l=Bs(n,t[n],r);n==="float"&&(n="cssFloat"),r?e.setProperty(n,l):e[n]=l}}var Ef=K({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function _o(e,t){if(t){if(Ef[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(w(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(w(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(w(61))}if(t.style!=null&&typeof t.style!="object")throw Error(w(62))}}function Eo(e,t){if(e.indexOf("-")===-1)return typeof t.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var Co=null;function mi(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var No=null,pn=null,hn=null;function hu(e){if(e=yr(e)){if(typeof No!="function")throw Error(w(280));var t=e.stateNode;t&&(t=El(t),No(e.stateNode,e.type,t))}}function Vs(e){pn?hn?hn.push(e):hn=[e]:pn=e}function As(){if(pn){var e=pn,t=hn;if(hn=pn=null,hu(e),t)for(e=0;e>>=0,e===0?32:31-(Df(e)/If|0)|0}var Er=64,Cr=4194304;function $n(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function br(e,t){var n=e.pendingLanes;if(n===0)return 0;var r=0,l=e.suspendedLanes,o=e.pingedLanes,i=n&268435455;if(i!==0){var u=i&~l;u!==0?r=$n(u):(o&=i,o!==0&&(r=$n(o)))}else i=n&~l,i!==0?r=$n(i):o!==0&&(r=$n(o));if(r===0)return 0;if(t!==0&&t!==r&&!(t&l)&&(l=r&-r,o=t&-t,l>=o||l===16&&(o&4194240)!==0))return t;if(r&4&&(r|=n&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=r;0n;n++)t.push(e);return t}function mr(e,t,n){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-Be(t),e[t]=n}function $f(e,t){var n=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var r=e.eventTimes;for(e=e.expirationTimes;0=Wn),_u=" ",Eu=!1;function sa(e,t){switch(e){case"keyup":return hd.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function aa(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var tn=!1;function vd(e,t){switch(e){case"compositionend":return aa(t);case"keypress":return t.which!==32?null:(Eu=!0,_u);case"textInput":return e=t.data,e===_u&&Eu?null:e;default:return null}}function yd(e,t){if(tn)return e==="compositionend"||!_i&&sa(e,t)?(e=ia(),$r=ki=vt=null,tn=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=r}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=Pu(n)}}function pa(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?pa(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function ha(){for(var e=window,t=Gr();t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href=="string"}catch{n=!1}if(n)e=t.contentWindow;else break;t=Gr(e.document)}return t}function Ei(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}function Nd(e){var t=ha(),n=e.focusedElem,r=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&pa(n.ownerDocument.documentElement,n)){if(r!==null&&Ei(n)){if(t=r.start,e=r.end,e===void 0&&(e=t),"selectionStart"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if(e=(t=n.ownerDocument||document)&&t.defaultView||window,e.getSelection){e=e.getSelection();var l=n.textContent.length,o=Math.min(r.start,l);r=r.end===void 0?o:Math.min(r.end,l),!e.extend&&o>r&&(l=r,r=o,o=l),l=zu(n,o);var i=zu(n,r);l&&i&&(e.rangeCount!==1||e.anchorNode!==l.node||e.anchorOffset!==l.offset||e.focusNode!==i.node||e.focusOffset!==i.offset)&&(t=t.createRange(),t.setStart(l.node,l.offset),e.removeAllRanges(),o>r?(e.addRange(t),e.extend(i.node,i.offset)):(t.setEnd(i.node,i.offset),e.addRange(t)))}}for(t=[],e=n;e=e.parentNode;)e.nodeType===1&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof n.focus=="function"&&n.focus(),n=0;n=document.documentMode,nn=null,Ro=null,Kn=null,Oo=!1;function Tu(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;Oo||nn==null||nn!==Gr(r)||(r=nn,"selectionStart"in r&&Ei(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),Kn&&lr(Kn,r)||(Kn=r,r=nl(Ro,"onSelect"),0on||(e.current=Bo[on],Bo[on]=null,on--)}function U(e,t){on++,Bo[on]=e.current,e.current=t}var jt={},ae=zt(jt),ge=zt(!1),$t=jt;function wn(e,t){var n=e.type.contextTypes;if(!n)return jt;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var l={},o;for(o in n)l[o]=t[o];return r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=l),l}function we(e){return e=e.childContextTypes,e!=null}function ll(){$(ge),$(ae)}function Fu(e,t,n){if(ae.current!==jt)throw Error(w(168));U(ae,t),U(ge,n)}function _a(e,t,n){var r=e.stateNode;if(t=t.childContextTypes,typeof r.getChildContext!="function")return n;r=r.getChildContext();for(var l in r)if(!(l in t))throw Error(w(108,Sf(e)||"Unknown",l));return K({},n,r)}function ol(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||jt,$t=ae.current,U(ae,e),U(ge,ge.current),!0}function Uu(e,t,n){var r=e.stateNode;if(!r)throw Error(w(169));n?(e=_a(e,t,$t),r.__reactInternalMemoizedMergedChildContext=e,$(ge),$(ae),U(ae,e)):$(ge),U(ge,n)}var be=null,Cl=!1,no=!1;function Ea(e){be===null?be=[e]:be.push(e)}function Ud(e){Cl=!0,Ea(e)}function Tt(){if(!no&&be!==null){no=!0;var e=0,t=I;try{var n=be;for(I=1;e>=i,l-=i,et=1<<32-Be(t)+l|n<z?(V=P,P=null):V=P.sibling;var R=h(f,P,d[z],g);if(R===null){P===null&&(P=V);break}e&&P&&R.alternate===null&&t(f,P),a=o(R,a,z),j===null?E=R:j.sibling=R,j=R,P=V}if(z===d.length)return n(f,P),H&&Ot(f,z),E;if(P===null){for(;zz?(V=P,P=null):V=P.sibling;var me=h(f,P,R.value,g);if(me===null){P===null&&(P=V);break}e&&P&&me.alternate===null&&t(f,P),a=o(me,a,z),j===null?E=me:j.sibling=me,j=me,P=V}if(R.done)return n(f,P),H&&Ot(f,z),E;if(P===null){for(;!R.done;z++,R=d.next())R=v(f,R.value,g),R!==null&&(a=o(R,a,z),j===null?E=R:j.sibling=R,j=R);return H&&Ot(f,z),E}for(P=r(f,P);!R.done;z++,R=d.next())R=k(P,f,z,R.value,g),R!==null&&(e&&R.alternate!==null&&P.delete(R.key===null?z:R.key),a=o(R,a,z),j===null?E=R:j.sibling=R,j=R);return e&&P.forEach(function(Ze){return t(f,Ze)}),H&&Ot(f,z),E}function F(f,a,d,g){if(typeof d=="object"&&d!==null&&d.type===en&&d.key===null&&(d=d.props.children),typeof d=="object"&&d!==null){switch(d.$$typeof){case Sr:e:{for(var E=d.key,j=a;j!==null;){if(j.key===E){if(E=d.type,E===en){if(j.tag===7){n(f,j.sibling),a=l(j,d.props.children),a.return=f,f=a;break e}}else if(j.elementType===E||typeof E=="object"&&E!==null&&E.$$typeof===dt&&Vu(E)===j.type){n(f,j.sibling),a=l(j,d.props),a.ref=Dn(f,j,d),a.return=f,f=a;break e}n(f,j);break}else t(f,j);j=j.sibling}d.type===en?(a=Bt(d.props.children,f.mode,g,d.key),a.return=f,f=a):(g=Xr(d.type,d.key,d.props,null,f.mode,g),g.ref=Dn(f,a,d),g.return=f,f=g)}return i(f);case bt:e:{for(j=d.key;a!==null;){if(a.key===j)if(a.tag===4&&a.stateNode.containerInfo===d.containerInfo&&a.stateNode.implementation===d.implementation){n(f,a.sibling),a=l(a,d.children||[]),a.return=f,f=a;break e}else{n(f,a);break}else t(f,a);a=a.sibling}a=co(d,f.mode,g),a.return=f,f=a}return i(f);case dt:return j=d._init,F(f,a,j(d._payload),g)}if(Bn(d))return x(f,a,d,g);if(Tn(d))return _(f,a,d,g);Rr(f,d)}return typeof d=="string"&&d!==""||typeof d=="number"?(d=""+d,a!==null&&a.tag===6?(n(f,a.sibling),a=l(a,d),a.return=f,f=a):(n(f,a),a=ao(d,f.mode,g),a.return=f,f=a),i(f)):n(f,a)}return F}var Sn=Pa(!0),za=Pa(!1),sl=zt(null),al=null,an=null,Pi=null;function zi(){Pi=an=al=null}function Ti(e){var t=sl.current;$(sl),e._currentValue=t}function Ao(e,t,n){for(;e!==null;){var r=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,r!==null&&(r.childLanes|=t)):r!==null&&(r.childLanes&t)!==t&&(r.childLanes|=t),e===n)break;e=e.return}}function vn(e,t){al=e,Pi=an=null,e=e.dependencies,e!==null&&e.firstContext!==null&&(e.lanes&t&&(ye=!0),e.firstContext=null)}function Re(e){var t=e._currentValue;if(Pi!==e)if(e={context:e,memoizedValue:t,next:null},an===null){if(al===null)throw Error(w(308));an=e,al.dependencies={lanes:0,firstContext:e}}else an=an.next=e;return t}var It=null;function Li(e){It===null?It=[e]:It.push(e)}function Ta(e,t,n,r){var l=t.interleaved;return l===null?(n.next=n,Li(t)):(n.next=l.next,l.next=n),t.interleaved=n,ot(e,r)}function ot(e,t){e.lanes|=t;var n=e.alternate;for(n!==null&&(n.lanes|=t),n=e,e=e.return;e!==null;)e.childLanes|=t,n=e.alternate,n!==null&&(n.childLanes|=t),n=e,e=e.return;return n.tag===3?n.stateNode:null}var pt=!1;function Ri(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function La(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function nt(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function xt(e,t,n){var r=e.updateQueue;if(r===null)return null;if(r=r.shared,D&2){var l=r.pending;return l===null?t.next=t:(t.next=l.next,l.next=t),r.pending=t,ot(e,n)}return l=r.interleaved,l===null?(t.next=t,Li(r)):(t.next=l.next,l.next=t),r.interleaved=t,ot(e,n)}function Ar(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,(n&4194240)!==0)){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,yi(e,n)}}function Au(e,t){var n=e.updateQueue,r=e.alternate;if(r!==null&&(r=r.updateQueue,n===r)){var l=null,o=null;if(n=n.firstBaseUpdate,n!==null){do{var i={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};o===null?l=o=i:o=o.next=i,n=n.next}while(n!==null);o===null?l=o=t:o=o.next=t}else l=o=t;n={baseState:r.baseState,firstBaseUpdate:l,lastBaseUpdate:o,shared:r.shared,effects:r.effects},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function cl(e,t,n,r){var l=e.updateQueue;pt=!1;var o=l.firstBaseUpdate,i=l.lastBaseUpdate,u=l.shared.pending;if(u!==null){l.shared.pending=null;var s=u,c=s.next;s.next=null,i===null?o=c:i.next=c,i=s;var y=e.alternate;y!==null&&(y=y.updateQueue,u=y.lastBaseUpdate,u!==i&&(u===null?y.firstBaseUpdate=c:u.next=c,y.lastBaseUpdate=s))}if(o!==null){var v=l.baseState;i=0,y=c=s=null,u=o;do{var h=u.lane,k=u.eventTime;if((r&h)===h){y!==null&&(y=y.next={eventTime:k,lane:0,tag:u.tag,payload:u.payload,callback:u.callback,next:null});e:{var x=e,_=u;switch(h=t,k=n,_.tag){case 1:if(x=_.payload,typeof x=="function"){v=x.call(k,v,h);break e}v=x;break e;case 3:x.flags=x.flags&-65537|128;case 0:if(x=_.payload,h=typeof x=="function"?x.call(k,v,h):x,h==null)break e;v=K({},v,h);break e;case 2:pt=!0}}u.callback!==null&&u.lane!==0&&(e.flags|=64,h=l.effects,h===null?l.effects=[u]:h.push(u))}else k={eventTime:k,lane:h,tag:u.tag,payload:u.payload,callback:u.callback,next:null},y===null?(c=y=k,s=v):y=y.next=k,i|=h;if(u=u.next,u===null){if(u=l.shared.pending,u===null)break;h=u,u=h.next,h.next=null,l.lastBaseUpdate=h,l.shared.pending=null}}while(!0);if(y===null&&(s=v),l.baseState=s,l.firstBaseUpdate=c,l.lastBaseUpdate=y,t=l.shared.interleaved,t!==null){l=t;do i|=l.lane,l=l.next;while(l!==t)}else o===null&&(l.shared.lanes=0);Ht|=i,e.lanes=i,e.memoizedState=v}}function Hu(e,t,n){if(e=t.effects,t.effects=null,e!==null)for(t=0;tn?n:4,e(!0);var r=lo.transition;lo.transition={};try{e(!1),t()}finally{I=n,lo.transition=r}}function Xa(){return Oe().memoizedState}function Ad(e,t,n){var r=Et(e);if(n={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null},Ga(e))Za(t,n);else if(n=Ta(e,t,n,r),n!==null){var l=de();$e(n,e,r,l),Ja(n,t,r)}}function Hd(e,t,n){var r=Et(e),l={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null};if(Ga(e))Za(t,l);else{var o=e.alternate;if(e.lanes===0&&(o===null||o.lanes===0)&&(o=t.lastRenderedReducer,o!==null))try{var i=t.lastRenderedState,u=o(i,n);if(l.hasEagerState=!0,l.eagerState=u,Ve(u,i)){var s=t.interleaved;s===null?(l.next=l,Li(t)):(l.next=s.next,s.next=l),t.interleaved=l;return}}catch{}finally{}n=Ta(e,t,l,r),n!==null&&(l=de(),$e(n,e,r,l),Ja(n,t,r))}}function Ga(e){var t=e.alternate;return e===Q||t!==null&&t===Q}function Za(e,t){Yn=dl=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function Ja(e,t,n){if(n&4194240){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,yi(e,n)}}var pl={readContext:Re,useCallback:ie,useContext:ie,useEffect:ie,useImperativeHandle:ie,useInsertionEffect:ie,useLayoutEffect:ie,useMemo:ie,useReducer:ie,useRef:ie,useState:ie,useDebugValue:ie,useDeferredValue:ie,useTransition:ie,useMutableSource:ie,useSyncExternalStore:ie,useId:ie,unstable_isNewReconciler:!1},Wd={readContext:Re,useCallback:function(e,t){return Ke().memoizedState=[e,t===void 0?null:t],e},useContext:Re,useEffect:Qu,useImperativeHandle:function(e,t,n){return n=n!=null?n.concat([e]):null,Wr(4194308,4,Ha.bind(null,t,e),n)},useLayoutEffect:function(e,t){return Wr(4194308,4,e,t)},useInsertionEffect:function(e,t){return Wr(4,2,e,t)},useMemo:function(e,t){var n=Ke();return t=t===void 0?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=Ke();return t=n!==void 0?n(t):t,r.memoizedState=r.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},r.queue=e,e=e.dispatch=Ad.bind(null,Q,e),[r.memoizedState,e]},useRef:function(e){var t=Ke();return e={current:e},t.memoizedState=e},useState:Wu,useDebugValue:$i,useDeferredValue:function(e){return Ke().memoizedState=e},useTransition:function(){var e=Wu(!1),t=e[0];return e=Vd.bind(null,e[1]),Ke().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var r=Q,l=Ke();if(H){if(n===void 0)throw Error(w(407));n=n()}else{if(n=t(),te===null)throw Error(w(349));At&30||Da(r,t,n)}l.memoizedState=n;var o={value:n,getSnapshot:t};return l.queue=o,Qu(Fa.bind(null,r,o,e),[e]),r.flags|=2048,dr(9,Ia.bind(null,r,o,n,t),void 0,null),n},useId:function(){var e=Ke(),t=te.identifierPrefix;if(H){var n=tt,r=et;n=(r&~(1<<32-Be(r)-1)).toString(32)+n,t=":"+t+"R"+n,n=cr++,0<\/script>",e=e.removeChild(e.firstChild)):typeof r.is=="string"?e=i.createElement(n,{is:r.is}):(e=i.createElement(n),n==="select"&&(i=e,r.multiple?i.multiple=!0:r.size&&(i.size=r.size))):e=i.createElementNS(e,n),e[Ye]=t,e[ur]=r,uc(e,t,!1,!1),t.stateNode=e;e:{switch(i=Eo(n,r),n){case"dialog":B("cancel",e),B("close",e),l=r;break;case"iframe":case"object":case"embed":B("load",e),l=r;break;case"video":case"audio":for(l=0;lEn&&(t.flags|=128,r=!0,In(o,!1),t.lanes=4194304)}else{if(!r)if(e=fl(i),e!==null){if(t.flags|=128,r=!0,n=e.updateQueue,n!==null&&(t.updateQueue=n,t.flags|=4),In(o,!0),o.tail===null&&o.tailMode==="hidden"&&!i.alternate&&!H)return ue(t),null}else 2*G()-o.renderingStartTime>En&&n!==1073741824&&(t.flags|=128,r=!0,In(o,!1),t.lanes=4194304);o.isBackwards?(i.sibling=t.child,t.child=i):(n=o.last,n!==null?n.sibling=i:t.child=i,o.last=i)}return o.tail!==null?(t=o.tail,o.rendering=t,o.tail=t.sibling,o.renderingStartTime=G(),t.sibling=null,n=W.current,U(W,r?n&1|2:n&1),t):(ue(t),null);case 22:case 23:return Ki(),r=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==r&&(t.flags|=8192),r&&t.mode&1?Se&1073741824&&(ue(t),t.subtreeFlags&6&&(t.flags|=8192)):ue(t),null;case 24:return null;case 25:return null}throw Error(w(156,t.tag))}function qd(e,t){switch(Ni(t),t.tag){case 1:return we(t.type)&&ll(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return xn(),$(ge),$(ae),Di(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 5:return Mi(t),null;case 13:if($(W),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(w(340));kn()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return $(W),null;case 4:return xn(),null;case 10:return Ti(t.type._context),null;case 22:case 23:return Ki(),null;case 24:return null;default:return null}}var Mr=!1,se=!1,bd=typeof WeakSet=="function"?WeakSet:Set,N=null;function cn(e,t){var n=e.ref;if(n!==null)if(typeof n=="function")try{n(null)}catch(r){Y(e,t,r)}else n.current=null}function Jo(e,t,n){try{n()}catch(r){Y(e,t,r)}}var ns=!1;function ep(e,t){if(Mo=el,e=ha(),Ei(e)){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{n=(n=e.ownerDocument)&&n.defaultView||window;var r=n.getSelection&&n.getSelection();if(r&&r.rangeCount!==0){n=r.anchorNode;var l=r.anchorOffset,o=r.focusNode;r=r.focusOffset;try{n.nodeType,o.nodeType}catch{n=null;break e}var i=0,u=-1,s=-1,c=0,y=0,v=e,h=null;t:for(;;){for(var k;v!==n||l!==0&&v.nodeType!==3||(u=i+l),v!==o||r!==0&&v.nodeType!==3||(s=i+r),v.nodeType===3&&(i+=v.nodeValue.length),(k=v.firstChild)!==null;)h=v,v=k;for(;;){if(v===e)break t;if(h===n&&++c===l&&(u=i),h===o&&++y===r&&(s=i),(k=v.nextSibling)!==null)break;v=h,h=v.parentNode}v=k}n=u===-1||s===-1?null:{start:u,end:s}}else n=null}n=n||{start:0,end:0}}else n=null;for(Do={focusedElem:e,selectionRange:n},el=!1,N=t;N!==null;)if(t=N,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,N=e;else for(;N!==null;){t=N;try{var x=t.alternate;if(t.flags&1024)switch(t.tag){case 0:case 11:case 15:break;case 1:if(x!==null){var _=x.memoizedProps,F=x.memoizedState,f=t.stateNode,a=f.getSnapshotBeforeUpdate(t.elementType===t.type?_:Ie(t.type,_),F);f.__reactInternalSnapshotBeforeUpdate=a}break;case 3:var d=t.stateNode.containerInfo;d.nodeType===1?d.textContent="":d.nodeType===9&&d.documentElement&&d.removeChild(d.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(w(163))}}catch(g){Y(t,t.return,g)}if(e=t.sibling,e!==null){e.return=t.return,N=e;break}N=t.return}return x=ns,ns=!1,x}function Xn(e,t,n){var r=t.updateQueue;if(r=r!==null?r.lastEffect:null,r!==null){var l=r=r.next;do{if((l.tag&e)===e){var o=l.destroy;l.destroy=void 0,o!==void 0&&Jo(t,n,o)}l=l.next}while(l!==r)}}function Pl(e,t){if(t=t.updateQueue,t=t!==null?t.lastEffect:null,t!==null){var n=t=t.next;do{if((n.tag&e)===e){var r=n.create;n.destroy=r()}n=n.next}while(n!==t)}}function qo(e){var t=e.ref;if(t!==null){var n=e.stateNode;switch(e.tag){case 5:e=n;break;default:e=n}typeof t=="function"?t(e):t.current=e}}function cc(e){var t=e.alternate;t!==null&&(e.alternate=null,cc(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[Ye],delete t[ur],delete t[Uo],delete t[Id],delete t[Fd])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function fc(e){return e.tag===5||e.tag===3||e.tag===4}function rs(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||fc(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function bo(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.nodeType===8?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(n.nodeType===8?(t=n.parentNode,t.insertBefore(e,n)):(t=n,t.appendChild(e)),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=rl));else if(r!==4&&(e=e.child,e!==null))for(bo(e,t,n),e=e.sibling;e!==null;)bo(e,t,n),e=e.sibling}function ei(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(r!==4&&(e=e.child,e!==null))for(ei(e,t,n),e=e.sibling;e!==null;)ei(e,t,n),e=e.sibling}var ne=null,Fe=!1;function ft(e,t,n){for(n=n.child;n!==null;)dc(e,t,n),n=n.sibling}function dc(e,t,n){if(Xe&&typeof Xe.onCommitFiberUnmount=="function")try{Xe.onCommitFiberUnmount(kl,n)}catch{}switch(n.tag){case 5:se||cn(n,t);case 6:var r=ne,l=Fe;ne=null,ft(e,t,n),ne=r,Fe=l,ne!==null&&(Fe?(e=ne,n=n.stateNode,e.nodeType===8?e.parentNode.removeChild(n):e.removeChild(n)):ne.removeChild(n.stateNode));break;case 18:ne!==null&&(Fe?(e=ne,n=n.stateNode,e.nodeType===8?to(e.parentNode,n):e.nodeType===1&&to(e,n),nr(e)):to(ne,n.stateNode));break;case 4:r=ne,l=Fe,ne=n.stateNode.containerInfo,Fe=!0,ft(e,t,n),ne=r,Fe=l;break;case 0:case 11:case 14:case 15:if(!se&&(r=n.updateQueue,r!==null&&(r=r.lastEffect,r!==null))){l=r=r.next;do{var o=l,i=o.destroy;o=o.tag,i!==void 0&&(o&2||o&4)&&Jo(n,t,i),l=l.next}while(l!==r)}ft(e,t,n);break;case 1:if(!se&&(cn(n,t),r=n.stateNode,typeof r.componentWillUnmount=="function"))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(u){Y(n,t,u)}ft(e,t,n);break;case 21:ft(e,t,n);break;case 22:n.mode&1?(se=(r=se)||n.memoizedState!==null,ft(e,t,n),se=r):ft(e,t,n);break;default:ft(e,t,n)}}function ls(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var n=e.stateNode;n===null&&(n=e.stateNode=new bd),t.forEach(function(r){var l=ap.bind(null,e,r);n.has(r)||(n.add(r),r.then(l,l))})}}function Me(e,t){var n=t.deletions;if(n!==null)for(var r=0;rl&&(l=i),r&=~o}if(r=l,r=G()-r,r=(120>r?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*np(r/1960))-r,10e?16:e,yt===null)var r=!1;else{if(e=yt,yt=null,vl=0,D&6)throw Error(w(331));var l=D;for(D|=4,N=e.current;N!==null;){var o=N,i=o.child;if(N.flags&16){var u=o.deletions;if(u!==null){for(var s=0;sG()-Wi?Ut(e,0):Hi|=n),ke(e,t)}function kc(e,t){t===0&&(e.mode&1?(t=Cr,Cr<<=1,!(Cr&130023424)&&(Cr=4194304)):t=1);var n=de();e=ot(e,t),e!==null&&(mr(e,t,n),ke(e,n))}function sp(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),kc(e,n)}function ap(e,t){var n=0;switch(e.tag){case 13:var r=e.stateNode,l=e.memoizedState;l!==null&&(n=l.retryLane);break;case 19:r=e.stateNode;break;default:throw Error(w(314))}r!==null&&r.delete(t),kc(e,n)}var Sc;Sc=function(e,t,n){if(e!==null)if(e.memoizedProps!==t.pendingProps||ge.current)ye=!0;else{if(!(e.lanes&n)&&!(t.flags&128))return ye=!1,Zd(e,t,n);ye=!!(e.flags&131072)}else ye=!1,H&&t.flags&1048576&&Ca(t,ul,t.index);switch(t.lanes=0,t.tag){case 2:var r=t.type;Qr(e,t),e=t.pendingProps;var l=wn(t,ae.current);vn(t,n),l=Fi(null,t,r,e,l,n);var o=Ui();return t.flags|=1,typeof l=="object"&&l!==null&&typeof l.render=="function"&&l.$$typeof===void 0?(t.tag=1,t.memoizedState=null,t.updateQueue=null,we(r)?(o=!0,ol(t)):o=!1,t.memoizedState=l.state!==null&&l.state!==void 0?l.state:null,Ri(t),l.updater=jl,t.stateNode=l,l._reactInternals=t,Wo(t,r,e,n),t=Yo(null,t,r,!0,o,n)):(t.tag=0,H&&o&&Ci(t),fe(null,t,l,n),t=t.child),t;case 16:r=t.elementType;e:{switch(Qr(e,t),e=t.pendingProps,l=r._init,r=l(r._payload),t.type=r,l=t.tag=fp(r),e=Ie(r,e),l){case 0:t=Ko(null,t,r,e,n);break e;case 1:t=bu(null,t,r,e,n);break e;case 11:t=Ju(null,t,r,e,n);break e;case 14:t=qu(null,t,r,Ie(r.type,e),n);break e}throw Error(w(306,r,""))}return t;case 0:return r=t.type,l=t.pendingProps,l=t.elementType===r?l:Ie(r,l),Ko(e,t,r,l,n);case 1:return r=t.type,l=t.pendingProps,l=t.elementType===r?l:Ie(r,l),bu(e,t,r,l,n);case 3:e:{if(lc(t),e===null)throw Error(w(387));r=t.pendingProps,o=t.memoizedState,l=o.element,La(e,t),cl(t,r,null,n);var i=t.memoizedState;if(r=i.element,o.isDehydrated)if(o={element:r,isDehydrated:!1,cache:i.cache,pendingSuspenseBoundaries:i.pendingSuspenseBoundaries,transitions:i.transitions},t.updateQueue.baseState=o,t.memoizedState=o,t.flags&256){l=_n(Error(w(423)),t),t=es(e,t,r,n,l);break e}else if(r!==l){l=_n(Error(w(424)),t),t=es(e,t,r,n,l);break e}else for(xe=St(t.stateNode.containerInfo.firstChild),_e=t,H=!0,Ue=null,n=za(t,null,r,n),t.child=n;n;)n.flags=n.flags&-3|4096,n=n.sibling;else{if(kn(),r===l){t=it(e,t,n);break e}fe(e,t,r,n)}t=t.child}return t;case 5:return Ra(t),e===null&&Vo(t),r=t.type,l=t.pendingProps,o=e!==null?e.memoizedProps:null,i=l.children,Io(r,l)?i=null:o!==null&&Io(r,o)&&(t.flags|=32),rc(e,t),fe(e,t,i,n),t.child;case 6:return e===null&&Vo(t),null;case 13:return oc(e,t,n);case 4:return Oi(t,t.stateNode.containerInfo),r=t.pendingProps,e===null?t.child=Sn(t,null,r,n):fe(e,t,r,n),t.child;case 11:return r=t.type,l=t.pendingProps,l=t.elementType===r?l:Ie(r,l),Ju(e,t,r,l,n);case 7:return fe(e,t,t.pendingProps,n),t.child;case 8:return fe(e,t,t.pendingProps.children,n),t.child;case 12:return fe(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(r=t.type._context,l=t.pendingProps,o=t.memoizedProps,i=l.value,U(sl,r._currentValue),r._currentValue=i,o!==null)if(Ve(o.value,i)){if(o.children===l.children&&!ge.current){t=it(e,t,n);break e}}else for(o=t.child,o!==null&&(o.return=t);o!==null;){var u=o.dependencies;if(u!==null){i=o.child;for(var s=u.firstContext;s!==null;){if(s.context===r){if(o.tag===1){s=nt(-1,n&-n),s.tag=2;var c=o.updateQueue;if(c!==null){c=c.shared;var y=c.pending;y===null?s.next=s:(s.next=y.next,y.next=s),c.pending=s}}o.lanes|=n,s=o.alternate,s!==null&&(s.lanes|=n),Ao(o.return,n,t),u.lanes|=n;break}s=s.next}}else if(o.tag===10)i=o.type===t.type?null:o.child;else if(o.tag===18){if(i=o.return,i===null)throw Error(w(341));i.lanes|=n,u=i.alternate,u!==null&&(u.lanes|=n),Ao(i,n,t),i=o.sibling}else i=o.child;if(i!==null)i.return=o;else for(i=o;i!==null;){if(i===t){i=null;break}if(o=i.sibling,o!==null){o.return=i.return,i=o;break}i=i.return}o=i}fe(e,t,l.children,n),t=t.child}return t;case 9:return l=t.type,r=t.pendingProps.children,vn(t,n),l=Re(l),r=r(l),t.flags|=1,fe(e,t,r,n),t.child;case 14:return r=t.type,l=Ie(r,t.pendingProps),l=Ie(r.type,l),qu(e,t,r,l,n);case 15:return tc(e,t,t.type,t.pendingProps,n);case 17:return r=t.type,l=t.pendingProps,l=t.elementType===r?l:Ie(r,l),Qr(e,t),t.tag=1,we(r)?(e=!0,ol(t)):e=!1,vn(t,n),qa(t,r,l),Wo(t,r,l,n),Yo(null,t,r,!0,e,n);case 19:return ic(e,t,n);case 22:return nc(e,t,n)}throw Error(w(156,t.tag))};function xc(e,t){return Gs(e,t)}function cp(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Te(e,t,n,r){return new cp(e,t,n,r)}function Xi(e){return e=e.prototype,!(!e||!e.isReactComponent)}function fp(e){if(typeof e=="function")return Xi(e)?1:0;if(e!=null){if(e=e.$$typeof,e===pi)return 11;if(e===hi)return 14}return 2}function Ct(e,t){var n=e.alternate;return n===null?(n=Te(e.tag,t,e.key,e.mode),n.elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=e.flags&14680064,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function Xr(e,t,n,r,l,o){var i=2;if(r=e,typeof e=="function")Xi(e)&&(i=1);else if(typeof e=="string")i=5;else e:switch(e){case en:return Bt(n.children,l,o,t);case di:i=8,l|=8;break;case ho:return e=Te(12,n,t,l|2),e.elementType=ho,e.lanes=o,e;case mo:return e=Te(13,n,t,l),e.elementType=mo,e.lanes=o,e;case vo:return e=Te(19,n,t,l),e.elementType=vo,e.lanes=o,e;case Rs:return Tl(n,l,o,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case Ts:i=10;break e;case Ls:i=9;break e;case pi:i=11;break e;case hi:i=14;break e;case dt:i=16,r=null;break e}throw Error(w(130,e==null?e:typeof e,""))}return t=Te(i,n,t,l),t.elementType=e,t.type=r,t.lanes=o,t}function Bt(e,t,n,r){return e=Te(7,e,r,t),e.lanes=n,e}function Tl(e,t,n,r){return e=Te(22,e,r,t),e.elementType=Rs,e.lanes=n,e.stateNode={isHidden:!1},e}function ao(e,t,n){return e=Te(6,e,null,t),e.lanes=n,e}function co(e,t,n){return t=Te(4,e.children!==null?e.children:[],e.key,t),t.lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function dp(e,t,n,r,l){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=Wl(0),this.expirationTimes=Wl(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Wl(0),this.identifierPrefix=r,this.onRecoverableError=l,this.mutableSourceEagerHydrationData=null}function Gi(e,t,n,r,l,o,i,u,s){return e=new dp(e,t,n,u,s),t===1?(t=1,o===!0&&(t|=8)):t=0,o=Te(3,null,null,t),e.current=o,o.stateNode=e,o.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},Ri(o),e}function pp(e,t,n){var r=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(Nc)}catch(e){console.error(e)}}Nc(),Ns.exports=Ce;var gp=Ns.exports,ds=gp;fo.createRoot=ds.createRoot,fo.hydrateRoot=ds.hydrateRoot;const ps={enabled:!1,available:!1,total_objects:0,total_bytes:0,recent_objects_24h:0,recent_bytes_24h:0,buckets:[]};function wp(e){const t=e.trim().slice(0,512).toLowerCase();return t.startsWith("\s*([^<]+)\s*<\/title>/i);return((n=t==null?void 0:t[1])==null?void 0:n.trim())||""}function Sp(e){var n;const t=e.match(/Request ID:\s*([0-9a-f-]+)/i);return((n=t==null?void 0:t[1])==null?void 0:n.trim())||""}function xp(e){return new Promise(t=>{window.setTimeout(t,e)})}async function De(e,t){const n=await fetch(e,t),r=await n.text();let l={};if(r.trim()!=="")try{l=JSON.parse(r)}catch{l={error:r}}if(!n.ok){let o=typeof l=="object"&&l!==null&&"error"in l?String(l.error):`${n.status} ${n.statusText}`;if(wp(r)){const i=kp(r),u=Sp(r);o=`upstream gateway error (${n.status}${i?` ${i}`:""})`,u&&(o=`${o}; request id ${u}`)}throw new Error(o)}return l}function Jt(e){if(e==null||Number.isNaN(e))return"n/a";if(e<=0)return"0 B";const t=["B","KiB","MiB","GiB","TiB"];let n=e,r=0;for(;n>=1024&&rString(l).padStart(2,"0"),r=[t.getUTCFullYear(),n(t.getUTCMonth()+1),n(t.getUTCDate()),n(t.getUTCHours()),n(t.getUTCMinutes())].join("");return`restore-${e}-${r}`.toLowerCase().replace(/[^a-z0-9-]/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,"").slice(0,63).replace(/-+$/g,"")}function hs(){const e=new Date,t=r=>String(r).padStart(2,"0");return`restore-${[e.getUTCFullYear(),t(e.getUTCMonth()+1),t(e.getUTCDate()),t(e.getUTCHours()),t(e.getUTCMinutes())].join("")}-`}function Np(){const[e,t]=M.useState(null),[n,r]=M.useState(""),[l,o]=M.useState(null),[i,u]=M.useState(""),[s,c]=M.useState([]),[y,v]=M.useState(""),[h,k]=M.useState(ps),[x,_]=M.useState(""),[F,f]=M.useState(!1),[a,d]=M.useState({kind:"none"}),[g,E]=M.useState(""),[j,P]=M.useState(""),[z,V]=M.useState(""),[R,me]=M.useState(""),[Ze,st]=M.useState(hs()),[Pn,wr]=M.useState(""),[Je,at]=M.useState(""),[C,T]=M.useState(""),[L,A]=M.useState(24),[X,Lt]=M.useState(!0),[Ae,Yt]=M.useState(!0),[He,Rt]=M.useState(0),[Dl,jc]=M.useState(!0),[Il,Pc]=M.useState(0),[zc,bi]=M.useState("No action yet."),[We,oe]=M.useState(!1),zn=M.useMemo(()=>{if(!l)return 0;let m=0;for(const S of l.namespaces)for(const Z of S.pvcs)m+=Z.active_backups||0;return m},[l]),Fl=M.useMemo(()=>l?l.namespaces.map(m=>m.name):[],[l]),ce=m=>{if(typeof m=="string"){bi(m);return}bi(JSON.stringify(m,null,2))},Tc=async()=>{try{const m=await De("/v1/whoami");t(m),r("")}catch(m){t(null),r(m instanceof Error?m.message:"failed to load auth")}},ct=async()=>{const m=async()=>De("/v1/inventory");try{const S=await m();o(S),u(""),!Je&&S.namespaces.length>0&&at(S.namespaces[0].name)}catch(S){let Z=S instanceof Error?S.message:"failed to load inventory";if(Z.includes("upstream gateway error"))try{await xp(1e3);const je=await m();o(je),u(""),!Je&&je.namespaces.length>0&&at(je.namespaces[0].name);return}catch(je){Z=je instanceof Error?je.message:Z}u(Z)}},Ul=async()=>{try{const m=await De("/v1/policies");c(m.policies||[]),v("")}catch(m){c([]),v(m instanceof Error?m.message:"failed to load policies")}},Xt=async(m=!1)=>{try{const S=await De(m?"/v1/b2?refresh=1":"/v1/b2");k(S),_("")}catch(S){k(ps),_(S instanceof Error?S.message:"failed to load B2 usage")}},Lc=async()=>{f(!0);try{await Xt(!0)}finally{f(!1)}},eu=async()=>{oe(!0);try{await Promise.all([Tc(),ct(),Ul(),Xt()])}finally{oe(!1)}};M.useEffect(()=>{eu()},[]),M.useEffect(()=>{if(zn<=0)return;const m=window.setInterval(()=>{ct()},8e3);return()=>{window.clearInterval(m)}},[zn]);const Rc=async(m,S)=>{oe(!0);try{const Z=await De("/v1/backup",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({namespace:m,pvc:S,dry_run:!1,dedupe:Dl,keep_last:Il})});ce(Z),await Promise.all([ct(),Xt()])}catch(Z){ce({error:Z instanceof Error?Z.message:"backup request failed",namespace:m,pvc:S})}finally{oe(!1)}},Oc=async m=>{oe(!0);try{const S=await De("/v1/backup/namespace",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({namespace:m,dry_run:!1,dedupe:Dl,keep_last:Il})});ce(S),await Promise.all([ct(),Xt()])}catch(S){ce({error:S instanceof Error?S.message:"namespace backup failed",namespace:m})}finally{oe(!1)}},Mc=async(m,S)=>{oe(!0);try{const Z=await De(`/v1/backups?namespace=${encodeURIComponent(m)}&pvc=${encodeURIComponent(S)}`),je=Z.backups.filter(Gt=>Gt.state==="Completed"&&Gt.url);d({kind:"pvc",namespace:m,pvc:S,volume:Z.volume,backups:je}),E(m),P(Cp(S)),V(je.length>0?String(je[0].url):""),ce(Z)}catch(Z){ce({error:Z instanceof Error?Z.message:"failed to load backups",namespace:m,pvc:S})}finally{oe(!1)}},Dc=m=>{d({kind:"namespace",namespace:m}),me(m),st(hs()),wr(""),ce(`Namespace restore planner loaded for ${m}.`)},tu=async m=>{if(a.kind==="pvc"){oe(!0);try{const S=await De("/v1/restores",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({namespace:a.namespace,pvc:a.pvc,backup_url:z,target_namespace:g,target_pvc:j,dry_run:m})});ce(S),await Promise.all([ct(),Xt()])}catch(S){ce({error:S instanceof Error?S.message:"restore failed",namespace:a.namespace,pvc:a.pvc,target_namespace:g,target_pvc:j,dry_run:m})}finally{oe(!1)}}},nu=async m=>{if(a.kind==="namespace"){oe(!0);try{const S=await De("/v1/restores/namespace",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({namespace:a.namespace,target_namespace:R,target_prefix:Ze,snapshot:Pn,dry_run:m})});ce(S),await Promise.all([ct(),Xt()])}catch(S){ce({error:S instanceof Error?S.message:"namespace restore failed",namespace:a.namespace,target_namespace:R,target_prefix:Ze,dry_run:m})}finally{oe(!1)}}},Ic=async()=>{oe(!0);try{const m=await De("/v1/policies",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({namespace:Je,pvc:C,interval_hours:L,enabled:X,dedupe:Ae,keep_last:He})});ce(m),await Promise.all([Ul(),ct()])}catch(m){ce({error:m instanceof Error?m.message:"policy save failed"})}finally{oe(!1)}},Fc=async m=>{oe(!0);try{const S=await De(`/v1/policies/${encodeURIComponent(m)}`,{method:"DELETE"});ce(S),await Promise.all([Ul(),ct()])}catch(S){ce({error:S instanceof Error?S.message:"policy delete failed",policy_id:m})}finally{oe(!1)}},Uc=e?`${e.user||e.email||"authenticated"} | groups: ${(e.groups||[]).join(", ")||"none"}`:n||"anonymous",Bc=e!=null&&e.allowed_groups&&e.allowed_groups.length>0?`Access requires: ${e.allowed_groups.join(", ")}`:"Access requires: any authenticated user";return p.jsxs("div",{className:"app-shell",children:[p.jsxs("header",{className:"topbar",children:[p.jsxs("div",{children:[p.jsx("h1",{children:"Soteria Backup Console"}),p.jsx("p",{className:"subtle",children:"Dark-mode React UI for backup drills, policy control, and B2 consumption visibility."})]}),p.jsxs("div",{className:"toolbar",children:[p.jsx("span",{className:`chip ${e?"good":"warn"}`,children:Uc}),p.jsx("span",{className:"chip",children:Bc}),zn>0&&p.jsxs("span",{className:"chip warn",children:[zn," backup job",zn===1?"":"s"," active"]}),p.jsx("button",{type:"button",className:"secondary",onClick:()=>void eu(),disabled:We,children:We?"Refreshing...":"Refresh"})]})]}),p.jsxs("main",{className:"layout",children:[p.jsxs("section",{className:"panel scroll-panel",children:[p.jsxs("div",{className:"panel-header",children:[p.jsx("h2",{children:"PVC Inventory"}),p.jsx("span",{className:"subtle",children:l!=null&&l.generated_at?`Updated ${qt(l.generated_at)}`:"No inventory yet"})]}),p.jsxs("label",{className:"checkbox-row",children:[p.jsx("input",{type:"checkbox",checked:Dl,onChange:m=>jc(m.target.checked)}),"Dedupe unchanged blocks (default)"]}),p.jsxs("label",{children:["Keep last snapshots per PVC (0 = keep all)",p.jsx("input",{type:"number",min:0,max:1e3,value:Il,onChange:m=>Pc(Math.max(0,Math.min(1e3,Number(m.target.value||0))))})]}),p.jsx("p",{className:"subtle tiny",children:"This setting applies to both `Backup now` and `Backup namespace` actions."}),i&&p.jsx("p",{className:"error",children:i}),!l&&!i&&p.jsx("p",{className:"subtle",children:"Loading inventory..."}),l==null?void 0:l.namespaces.map(m=>p.jsxs("article",{className:"namespace-block",children:[p.jsxs("div",{className:"namespace-row",children:[p.jsx("h3",{children:m.name}),p.jsxs("div",{className:"actions",children:[p.jsx("button",{type:"button",className:"secondary",onClick:()=>void Oc(m.name),disabled:We,children:"Backup namespace"}),p.jsx("button",{type:"button",className:"secondary",onClick:()=>Dc(m.name),children:"Restore namespace"})]})]}),p.jsx("div",{className:"pvc-grid",children:m.pvcs.map(S=>{const Z=S.healthy?"good":S.health_reason==="in_progress"?"warn":"bad",je=S.healthy?"Healthy":_p(S.health_reason),Gt=Math.max(0,Math.min(100,Number(S.last_job_progress_pct||0))),ru=Ep(S.last_job_state),$c=!!S.last_job_name||(S.active_backups||0)>0,Vc=Jt(S.last_backup_size_bytes),Ac=Jt(S.total_backup_size_bytes),Hc=S.driver==="restic"&&(S.last_backup_size_bytes===void 0||S.total_backup_size_bytes===void 0);return p.jsxs("article",{className:"pvc-card",children:[p.jsxs("div",{className:"pvc-title-row",children:[p.jsxs("div",{children:[p.jsx("h4",{children:S.pvc}),p.jsxs("p",{className:"subtle tiny",children:[S.volume||"unknown volume"," | ",S.storage_class||"no class"," | ",S.capacity||"unknown size"]})]}),p.jsx("span",{className:`chip ${Z}`,children:je})]}),p.jsxs("p",{className:"subtle tiny",children:["Last backup: ",S.last_backup_at?`${qt(S.last_backup_at)} (${(S.last_backup_age_hours||0).toFixed(1)}h ago)`:"never"]}),p.jsxs("p",{className:"subtle tiny",children:["Backups: ",S.completed_backups,"/",S.backup_count," completed | Latest size: ",Vc," | Total stored: ",Ac]}),Hc&&p.jsx("p",{className:"subtle tiny",children:"Per-PVC storage is estimated from restic upload summaries persisted by Soteria. Older backups created before tracking may show n/a until a new backup runs."}),$c&&p.jsxs("div",{className:"backup-progress",children:[p.jsxs("div",{className:"progress-header",children:[p.jsxs("p",{className:"subtle tiny",children:["Job: ",S.last_job_name||"n/a",S.last_job_started_at?` | Started ${qt(S.last_job_started_at)}`:""]}),p.jsx("span",{className:`chip ${ru}`,children:S.last_job_state||"Unknown"})]}),p.jsx("div",{className:"progress-track",role:"progressbar","aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":Gt,children:p.jsx("div",{className:`progress-fill ${ru} ${S.active_backups>0?"active":""}`,style:{width:`${Gt}%`}})}),p.jsxs("p",{className:"subtle tiny",children:["Progress ",Gt,"% | Active jobs: ",S.active_backups||0]})]}),S.error&&p.jsx("p",{className:"error tiny",children:S.error}),p.jsxs("div",{className:"actions",children:[p.jsx("button",{type:"button",onClick:()=>void Rc(S.namespace,S.pvc),disabled:We,children:"Backup now"}),p.jsx("button",{type:"button",className:"secondary",onClick:()=>void Mc(S.namespace,S.pvc),children:"Restore"})]})]},`${S.namespace}/${S.pvc}`)})})]},m.name))]}),p.jsxs("section",{className:"column",children:[p.jsxs("section",{className:"panel",children:[p.jsx("h2",{children:"Restore Planner"}),p.jsx("p",{className:"subtle tiny",children:"Inventory restore buttons preload this panel. This is where restore dry-runs and execution happen."}),a.kind==="none"&&p.jsx("p",{className:"subtle",children:"Choose Restore on a PVC or namespace to begin."}),a.kind==="pvc"&&p.jsxs("div",{className:"stack",children:[p.jsxs("p",{className:"subtle tiny",children:[p.jsx("strong",{children:"Source:"})," ",a.namespace,"/",a.pvc," (",a.volume,")"]}),p.jsxs("label",{children:["Backup snapshot",p.jsxs("select",{value:z,onChange:m=>V(m.target.value),children:[a.backups.length===0&&p.jsx("option",{value:"",children:"No completed backups"}),a.backups.map(m=>p.jsxs("option",{value:m.url||"",children:[m.name," | ",m.created||"unknown time"," | ",m.size||"size n/a"]},m.url||m.name))]})]}),p.jsxs("label",{children:["Target namespace",p.jsx("select",{value:g,onChange:m=>E(m.target.value),children:Fl.map(m=>p.jsx("option",{value:m,children:m},m))})]}),p.jsxs("label",{children:["Target PVC",p.jsx("input",{value:j,onChange:m=>P(m.target.value)})]}),p.jsxs("div",{className:"actions",children:[p.jsx("button",{type:"button",onClick:()=>void tu(!1),disabled:We||!z,children:"Create restore PVC"}),p.jsx("button",{type:"button",className:"secondary",onClick:()=>void tu(!0),disabled:We||!z,children:"Dry run"})]})]}),a.kind==="namespace"&&p.jsxs("div",{className:"stack",children:[p.jsxs("p",{className:"subtle tiny",children:[p.jsx("strong",{children:"Source namespace:"})," ",a.namespace]}),p.jsxs("label",{children:["Target namespace",p.jsx("select",{value:R,onChange:m=>me(m.target.value),children:Fl.map(m=>p.jsx("option",{value:m,children:m},m))})]}),p.jsxs("label",{children:["Target PVC prefix",p.jsx("input",{value:Ze,onChange:m=>st(m.target.value)})]}),p.jsxs("label",{children:["Snapshot hint (optional)",p.jsx("input",{value:Pn,onChange:m=>wr(m.target.value),placeholder:"blank = latest completed"})]}),p.jsxs("div",{className:"actions",children:[p.jsx("button",{type:"button",onClick:()=>void nu(!1),disabled:We,children:"Create restore PVCs"}),p.jsx("button",{type:"button",className:"secondary",onClick:()=>void nu(!0),disabled:We,children:"Dry run"})]})]})]}),p.jsxs("section",{className:"panel action-panel",children:[p.jsx("h2",{children:"Last Action"}),p.jsx("pre",{children:zc})]})]}),p.jsxs("section",{className:"column",children:[p.jsxs("section",{className:"panel",children:[p.jsxs("div",{className:"panel-header",children:[p.jsx("h2",{children:"B2 Consumption"}),p.jsx("button",{type:"button",className:"secondary",onClick:()=>void Lc(),disabled:F,children:F?"Refreshing...":"Refresh B2"})]}),x&&p.jsx("p",{className:"error",children:x}),!x&&!h.enabled&&p.jsx("p",{className:"subtle",children:"B2 monitoring is disabled in Soteria config."}),!x&&h.enabled&&!h.available&&p.jsx("p",{className:"error",children:h.error||"B2 usage currently unavailable."}),h.enabled&&p.jsxs("div",{className:"stack",children:[p.jsxs("p",{className:"subtle tiny",children:["Endpoint: ",h.endpoint||"n/a"," | Region: ",h.region||"n/a"]}),p.jsxs("p",{className:"subtle tiny",children:["Last scan: ",qt(h.scanned_at)," | Duration: ",h.scan_duration_ms||0,"ms"]}),p.jsxs("div",{className:"stat-grid",children:[p.jsxs("div",{className:"stat",children:[p.jsx("span",{className:"label",children:"Stored bytes"}),p.jsx("strong",{children:Jt(h.total_bytes)})]}),p.jsxs("div",{className:"stat",children:[p.jsx("span",{className:"label",children:"Objects"}),p.jsx("strong",{children:h.total_objects})]}),p.jsxs("div",{className:"stat",children:[p.jsx("span",{className:"label",children:"Recent bytes (24h)"}),p.jsx("strong",{children:Jt(h.recent_bytes_24h)})]}),p.jsxs("div",{className:"stat",children:[p.jsx("span",{className:"label",children:"Recent objects (24h)"}),p.jsx("strong",{children:h.recent_objects_24h})]})]}),p.jsx("p",{className:"subtle tiny",children:"Recent 24h values are object-change bandwidth proxy from bucket scans. B2 egress billing totals are not exposed by S3 object listing."}),p.jsx("div",{className:"bucket-table-wrap",children:p.jsxs("table",{children:[p.jsx("thead",{children:p.jsxs("tr",{children:[p.jsx("th",{children:"Bucket"}),p.jsx("th",{children:"Objects"}),p.jsx("th",{children:"Stored"}),p.jsx("th",{children:"Recent 24h"})]})}),p.jsx("tbody",{children:(h.buckets||[]).map(m=>p.jsxs("tr",{children:[p.jsxs("td",{children:[p.jsx("div",{children:m.name}),p.jsxs("div",{className:"subtle tiny",children:["Last object: ",qt(m.last_modified_at)]})]}),p.jsx("td",{children:m.object_count}),p.jsx("td",{children:Jt(m.total_bytes)}),p.jsx("td",{children:Jt(m.recent_bytes_24h)})]},m.name))})]})})]})]}),p.jsxs("section",{className:"panel scroll-panel",children:[p.jsx("h2",{children:"Backup Policies"}),p.jsx("p",{className:"subtle tiny",children:"Policy backups create new restic snapshots. `Keep last` controls version retention per PVC: 1 means only newest copy remains after each run. With dedupe on, unchanged blocks are reused in the shared repository. With dedupe off, Soteria isolates each PVC to its own repository path."}),p.jsxs("div",{className:"stack",children:[p.jsxs("label",{children:["Namespace",p.jsx("select",{value:Je,onChange:m=>at(m.target.value),children:Fl.map(m=>p.jsx("option",{value:m,children:m},m))})]}),p.jsxs("label",{children:["PVC (optional)",p.jsx("input",{value:C,onChange:m=>T(m.target.value),placeholder:"blank means all PVCs in namespace"})]}),p.jsxs("label",{children:["Interval hours",p.jsx("input",{type:"number",min:1,value:L,onChange:m=>A(Math.max(1,Number(m.target.value||1)))})]}),p.jsxs("label",{className:"checkbox-row",children:[p.jsx("input",{type:"checkbox",checked:X,onChange:m=>Lt(m.target.checked)}),"Enabled"]}),p.jsxs("label",{className:"checkbox-row",children:[p.jsx("input",{type:"checkbox",checked:Ae,onChange:m=>Yt(m.target.checked)}),"Dedupe unchanged blocks"]}),p.jsxs("label",{children:["Keep last snapshots per PVC (0 = keep all)",p.jsx("input",{type:"number",min:0,max:1e3,value:He,onChange:m=>Rt(Math.max(0,Math.min(1e3,Number(m.target.value||0))))})]}),p.jsx("button",{type:"button",onClick:()=>void Ic(),disabled:We||!Je,children:"Save policy"})]}),y&&p.jsx("p",{className:"error",children:y}),!y&&s.length===0&&p.jsx("p",{className:"subtle",children:"No policies yet."}),p.jsx("div",{className:"policy-list",children:s.map(m=>p.jsxs("article",{className:"policy-item",children:[p.jsxs("div",{className:"policy-head",children:[p.jsxs("strong",{children:[m.namespace,"/",m.pvc||"*"]}),p.jsx("span",{className:`chip ${m.enabled?"good":"bad"}`,children:m.enabled?"Enabled":"Disabled"})]}),p.jsxs("p",{className:"subtle tiny",children:["Every ",m.interval_hours,"h | Dedupe: ",m.dedupe===!1?"off":"on"," | Keep last: ",m.keep_last??0," | Updated ",qt(m.updated_at||m.created_at)]}),p.jsxs("div",{className:"actions",children:[p.jsx("button",{type:"button",className:"secondary",onClick:()=>{at(m.namespace),T(m.pvc||""),A(m.interval_hours),Lt(m.enabled),Yt(m.dedupe!==!1),Rt(m.keep_last??0)},children:"Load"}),p.jsx("button",{type:"button",className:"secondary",onClick:()=>void Fc(m.id),disabled:We,children:"Delete"})]})]},m.id))})]})]})]})]})}fo.createRoot(document.getElementById("root")).render(p.jsx(uf.StrictMode,{children:p.jsx(Np,{})})); +`+o.stack}return{value:e,source:t,stack:l,digest:null}}function uo(e,t,n){return{value:e,source:null,stack:n??null,digest:t??null}}function Qo(e,t){try{console.error(t.value)}catch(n){setTimeout(function(){throw n})}}var Yd=typeof WeakMap=="function"?WeakMap:Map;function ba(e,t,n){n=nt(-1,n),n.tag=3,n.payload={element:null};var r=t.value;return n.callback=function(){ml||(ml=!0,ti=r),Qo(e,t)},n}function ec(e,t,n){n=nt(-1,n),n.tag=3;var r=e.type.getDerivedStateFromError;if(typeof r=="function"){var l=t.value;n.payload=function(){return r(l)},n.callback=function(){Qo(e,t)}}var o=e.stateNode;return o!==null&&typeof o.componentDidCatch=="function"&&(n.callback=function(){Qo(e,t),typeof r!="function"&&(_t===null?_t=new Set([this]):_t.add(this));var i=t.stack;this.componentDidCatch(t.value,{componentStack:i!==null?i:""})}),n}function Xu(e,t,n){var r=e.pingCache;if(r===null){r=e.pingCache=new Yd;var l=new Set;r.set(t,l)}else l=r.get(t),l===void 0&&(l=new Set,r.set(t,l));l.has(n)||(l.add(n),e=up.bind(null,e,t,n),t.then(e,e))}function Gu(e){do{var t;if((t=e.tag===13)&&(t=e.memoizedState,t=t!==null?t.dehydrated!==null:!0),t)return e;e=e.return}while(e!==null);return null}function Zu(e,t,n,r,l){return e.mode&1?(e.flags|=65536,e.lanes=l,e):(e===t?e.flags|=65536:(e.flags|=128,n.flags|=131072,n.flags&=-52805,n.tag===1&&(n.alternate===null?n.tag=17:(t=nt(-1,1),t.tag=2,xt(n,t,1))),n.lanes|=1),e)}var Xd=ut.ReactCurrentOwner,ye=!1;function fe(e,t,n,r){t.child=e===null?za(t,null,n,r):Sn(t,e.child,n,r)}function Ju(e,t,n,r,l){n=n.render;var o=t.ref;return vn(t,l),r=Fi(e,t,n,r,o,l),n=Ui(),e!==null&&!ye?(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~l,it(e,t,l)):(H&&n&&Ci(t),t.flags|=1,fe(e,t,r,l),t.child)}function qu(e,t,n,r,l){if(e===null){var o=n.type;return typeof o=="function"&&!Xi(o)&&o.defaultProps===void 0&&n.compare===null&&n.defaultProps===void 0?(t.tag=15,t.type=o,tc(e,t,o,r,l)):(e=Xr(n.type,null,r,t,t.mode,l),e.ref=t.ref,e.return=t,t.child=e)}if(o=e.child,!(e.lanes&l)){var i=o.memoizedProps;if(n=n.compare,n=n!==null?n:lr,n(i,r)&&e.ref===t.ref)return it(e,t,l)}return t.flags|=1,e=Ct(o,r),e.ref=t.ref,e.return=t,t.child=e}function tc(e,t,n,r,l){if(e!==null){var o=e.memoizedProps;if(lr(o,r)&&e.ref===t.ref)if(ye=!1,t.pendingProps=r=o,(e.lanes&l)!==0)e.flags&131072&&(ye=!0);else return t.lanes=e.lanes,it(e,t,l)}return Ko(e,t,n,r,l)}function nc(e,t,n){var r=t.pendingProps,l=r.children,o=e!==null?e.memoizedState:null;if(r.mode==="hidden")if(!(t.mode&1))t.memoizedState={baseLanes:0,cachePool:null,transitions:null},U(fn,Se),Se|=n;else{if(!(n&1073741824))return e=o!==null?o.baseLanes|n:n,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e,cachePool:null,transitions:null},t.updateQueue=null,U(fn,Se),Se|=e,null;t.memoizedState={baseLanes:0,cachePool:null,transitions:null},r=o!==null?o.baseLanes:n,U(fn,Se),Se|=r}else o!==null?(r=o.baseLanes|n,t.memoizedState=null):r=n,U(fn,Se),Se|=r;return fe(e,t,l,n),t.child}function rc(e,t){var n=t.ref;(e===null&&n!==null||e!==null&&e.ref!==n)&&(t.flags|=512,t.flags|=2097152)}function Ko(e,t,n,r,l){var o=we(n)?$t:ae.current;return o=wn(t,o),vn(t,l),n=Fi(e,t,n,r,o,l),r=Ui(),e!==null&&!ye?(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~l,it(e,t,l)):(H&&r&&Ci(t),t.flags|=1,fe(e,t,n,l),t.child)}function bu(e,t,n,r,l){if(we(n)){var o=!0;ol(t)}else o=!1;if(vn(t,l),t.stateNode===null)Qr(e,t),qa(t,n,r),Wo(t,n,r,l),r=!0;else if(e===null){var i=t.stateNode,u=t.memoizedProps;i.props=u;var s=i.context,c=n.contextType;typeof c=="object"&&c!==null?c=Re(c):(c=we(n)?$t:ae.current,c=wn(t,c));var y=n.getDerivedStateFromProps,v=typeof y=="function"||typeof i.getSnapshotBeforeUpdate=="function";v||typeof i.UNSAFE_componentWillReceiveProps!="function"&&typeof i.componentWillReceiveProps!="function"||(u!==r||s!==c)&&Yu(t,i,r,c),pt=!1;var h=t.memoizedState;i.state=h,cl(t,r,i,l),s=t.memoizedState,u!==r||h!==s||ge.current||pt?(typeof y=="function"&&(Ho(t,n,y,r),s=t.memoizedState),(u=pt||Ku(t,n,u,r,h,s,c))?(v||typeof i.UNSAFE_componentWillMount!="function"&&typeof i.componentWillMount!="function"||(typeof i.componentWillMount=="function"&&i.componentWillMount(),typeof i.UNSAFE_componentWillMount=="function"&&i.UNSAFE_componentWillMount()),typeof i.componentDidMount=="function"&&(t.flags|=4194308)):(typeof i.componentDidMount=="function"&&(t.flags|=4194308),t.memoizedProps=r,t.memoizedState=s),i.props=r,i.state=s,i.context=c,r=u):(typeof i.componentDidMount=="function"&&(t.flags|=4194308),r=!1)}else{i=t.stateNode,La(e,t),u=t.memoizedProps,c=t.type===t.elementType?u:Ie(t.type,u),i.props=c,v=t.pendingProps,h=i.context,s=n.contextType,typeof s=="object"&&s!==null?s=Re(s):(s=we(n)?$t:ae.current,s=wn(t,s));var k=n.getDerivedStateFromProps;(y=typeof k=="function"||typeof i.getSnapshotBeforeUpdate=="function")||typeof i.UNSAFE_componentWillReceiveProps!="function"&&typeof i.componentWillReceiveProps!="function"||(u!==v||h!==s)&&Yu(t,i,r,s),pt=!1,h=t.memoizedState,i.state=h,cl(t,r,i,l);var x=t.memoizedState;u!==v||h!==x||ge.current||pt?(typeof k=="function"&&(Ho(t,n,k,r),x=t.memoizedState),(c=pt||Ku(t,n,c,r,h,x,s)||!1)?(y||typeof i.UNSAFE_componentWillUpdate!="function"&&typeof i.componentWillUpdate!="function"||(typeof i.componentWillUpdate=="function"&&i.componentWillUpdate(r,x,s),typeof i.UNSAFE_componentWillUpdate=="function"&&i.UNSAFE_componentWillUpdate(r,x,s)),typeof i.componentDidUpdate=="function"&&(t.flags|=4),typeof i.getSnapshotBeforeUpdate=="function"&&(t.flags|=1024)):(typeof i.componentDidUpdate!="function"||u===e.memoizedProps&&h===e.memoizedState||(t.flags|=4),typeof i.getSnapshotBeforeUpdate!="function"||u===e.memoizedProps&&h===e.memoizedState||(t.flags|=1024),t.memoizedProps=r,t.memoizedState=x),i.props=r,i.state=x,i.context=s,r=c):(typeof i.componentDidUpdate!="function"||u===e.memoizedProps&&h===e.memoizedState||(t.flags|=4),typeof i.getSnapshotBeforeUpdate!="function"||u===e.memoizedProps&&h===e.memoizedState||(t.flags|=1024),r=!1)}return Yo(e,t,n,r,o,l)}function Yo(e,t,n,r,l,o){rc(e,t);var i=(t.flags&128)!==0;if(!r&&!i)return l&&Uu(t,n,!1),it(e,t,o);r=t.stateNode,Xd.current=t;var u=i&&typeof n.getDerivedStateFromError!="function"?null:r.render();return t.flags|=1,e!==null&&i?(t.child=Sn(t,e.child,null,o),t.child=Sn(t,null,u,o)):fe(e,t,u,o),t.memoizedState=r.state,l&&Uu(t,n,!0),t.child}function lc(e){var t=e.stateNode;t.pendingContext?Fu(e,t.pendingContext,t.pendingContext!==t.context):t.context&&Fu(e,t.context,!1),Oi(e,t.containerInfo)}function es(e,t,n,r,l){return kn(),ji(l),t.flags|=256,fe(e,t,n,r),t.child}var Xo={dehydrated:null,treeContext:null,retryLane:0};function Go(e){return{baseLanes:e,cachePool:null,transitions:null}}function oc(e,t,n){var r=t.pendingProps,l=W.current,o=!1,i=(t.flags&128)!==0,u;if((u=i)||(u=e!==null&&e.memoizedState===null?!1:(l&2)!==0),u?(o=!0,t.flags&=-129):(e===null||e.memoizedState!==null)&&(l|=1),U(W,l&1),e===null)return Vo(t),e=t.memoizedState,e!==null&&(e=e.dehydrated,e!==null)?(t.mode&1?e.data==="$!"?t.lanes=8:t.lanes=1073741824:t.lanes=1,null):(i=r.children,e=r.fallback,o?(r=t.mode,o=t.child,i={mode:"hidden",children:i},!(r&1)&&o!==null?(o.childLanes=0,o.pendingProps=i):o=Tl(i,r,0,null),e=Bt(e,r,n,null),o.return=t,e.return=t,o.sibling=e,t.child=o,t.child.memoizedState=Go(n),t.memoizedState=Xo,e):Vi(t,i));if(l=e.memoizedState,l!==null&&(u=l.dehydrated,u!==null))return Gd(e,t,i,r,u,l,n);if(o){o=r.fallback,i=t.mode,l=e.child,u=l.sibling;var s={mode:"hidden",children:r.children};return!(i&1)&&t.child!==l?(r=t.child,r.childLanes=0,r.pendingProps=s,t.deletions=null):(r=Ct(l,s),r.subtreeFlags=l.subtreeFlags&14680064),u!==null?o=Ct(u,o):(o=Bt(o,i,n,null),o.flags|=2),o.return=t,r.return=t,r.sibling=o,t.child=r,r=o,o=t.child,i=e.child.memoizedState,i=i===null?Go(n):{baseLanes:i.baseLanes|n,cachePool:null,transitions:i.transitions},o.memoizedState=i,o.childLanes=e.childLanes&~n,t.memoizedState=Xo,r}return o=e.child,e=o.sibling,r=Ct(o,{mode:"visible",children:r.children}),!(t.mode&1)&&(r.lanes=n),r.return=t,r.sibling=null,e!==null&&(n=t.deletions,n===null?(t.deletions=[e],t.flags|=16):n.push(e)),t.child=r,t.memoizedState=null,r}function Vi(e,t){return t=Tl({mode:"visible",children:t},e.mode,0,null),t.return=e,e.child=t}function Or(e,t,n,r){return r!==null&&ji(r),Sn(t,e.child,null,n),e=Vi(t,t.pendingProps.children),e.flags|=2,t.memoizedState=null,e}function Gd(e,t,n,r,l,o,i){if(n)return t.flags&256?(t.flags&=-257,r=uo(Error(w(422))),Or(e,t,i,r)):t.memoizedState!==null?(t.child=e.child,t.flags|=128,null):(o=r.fallback,l=t.mode,r=Tl({mode:"visible",children:r.children},l,0,null),o=Bt(o,l,i,null),o.flags|=2,r.return=t,o.return=t,r.sibling=o,t.child=r,t.mode&1&&Sn(t,e.child,null,i),t.child.memoizedState=Go(i),t.memoizedState=Xo,o);if(!(t.mode&1))return Or(e,t,i,null);if(l.data==="$!"){if(r=l.nextSibling&&l.nextSibling.dataset,r)var u=r.dgst;return r=u,o=Error(w(419)),r=uo(o,r,void 0),Or(e,t,i,r)}if(u=(i&e.childLanes)!==0,ye||u){if(r=te,r!==null){switch(i&-i){case 4:l=2;break;case 16:l=8;break;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:l=32;break;case 536870912:l=268435456;break;default:l=0}l=l&(r.suspendedLanes|i)?0:l,l!==0&&l!==o.retryLane&&(o.retryLane=l,ot(e,l),$e(r,e,l,-1))}return Yi(),r=uo(Error(w(421))),Or(e,t,i,r)}return l.data==="$?"?(t.flags|=128,t.child=e.child,t=sp.bind(null,e),l._reactRetry=t,null):(e=o.treeContext,xe=St(l.nextSibling),_e=t,H=!0,Ue=null,e!==null&&(Pe[ze++]=et,Pe[ze++]=tt,Pe[ze++]=Vt,et=e.id,tt=e.overflow,Vt=t),t=Vi(t,r.children),t.flags|=4096,t)}function ts(e,t,n){e.lanes|=t;var r=e.alternate;r!==null&&(r.lanes|=t),Ao(e.return,t,n)}function so(e,t,n,r,l){var o=e.memoizedState;o===null?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:r,tail:n,tailMode:l}:(o.isBackwards=t,o.rendering=null,o.renderingStartTime=0,o.last=r,o.tail=n,o.tailMode=l)}function ic(e,t,n){var r=t.pendingProps,l=r.revealOrder,o=r.tail;if(fe(e,t,r.children,n),r=W.current,r&2)r=r&1|2,t.flags|=128;else{if(e!==null&&e.flags&128)e:for(e=t.child;e!==null;){if(e.tag===13)e.memoizedState!==null&&ts(e,n,t);else if(e.tag===19)ts(e,n,t);else if(e.child!==null){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;e.sibling===null;){if(e.return===null||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}r&=1}if(U(W,r),!(t.mode&1))t.memoizedState=null;else switch(l){case"forwards":for(n=t.child,l=null;n!==null;)e=n.alternate,e!==null&&fl(e)===null&&(l=n),n=n.sibling;n=l,n===null?(l=t.child,t.child=null):(l=n.sibling,n.sibling=null),so(t,!1,l,n,o);break;case"backwards":for(n=null,l=t.child,t.child=null;l!==null;){if(e=l.alternate,e!==null&&fl(e)===null){t.child=l;break}e=l.sibling,l.sibling=n,n=l,l=e}so(t,!0,n,null,o);break;case"together":so(t,!1,null,null,void 0);break;default:t.memoizedState=null}return t.child}function Qr(e,t){!(t.mode&1)&&e!==null&&(e.alternate=null,t.alternate=null,t.flags|=2)}function it(e,t,n){if(e!==null&&(t.dependencies=e.dependencies),Ht|=t.lanes,!(n&t.childLanes))return null;if(e!==null&&t.child!==e.child)throw Error(w(153));if(t.child!==null){for(e=t.child,n=Ct(e,e.pendingProps),t.child=n,n.return=t;e.sibling!==null;)e=e.sibling,n=n.sibling=Ct(e,e.pendingProps),n.return=t;n.sibling=null}return t.child}function Zd(e,t,n){switch(t.tag){case 3:lc(t),kn();break;case 5:Ra(t);break;case 1:we(t.type)&&ol(t);break;case 4:Oi(t,t.stateNode.containerInfo);break;case 10:var r=t.type._context,l=t.memoizedProps.value;U(sl,r._currentValue),r._currentValue=l;break;case 13:if(r=t.memoizedState,r!==null)return r.dehydrated!==null?(U(W,W.current&1),t.flags|=128,null):n&t.child.childLanes?oc(e,t,n):(U(W,W.current&1),e=it(e,t,n),e!==null?e.sibling:null);U(W,W.current&1);break;case 19:if(r=(n&t.childLanes)!==0,e.flags&128){if(r)return ic(e,t,n);t.flags|=128}if(l=t.memoizedState,l!==null&&(l.rendering=null,l.tail=null,l.lastEffect=null),U(W,W.current),r)break;return null;case 22:case 23:return t.lanes=0,nc(e,t,n)}return it(e,t,n)}var uc,Zo,sc,ac;uc=function(e,t){for(var n=t.child;n!==null;){if(n.tag===5||n.tag===6)e.appendChild(n.stateNode);else if(n.tag!==4&&n.child!==null){n.child.return=n,n=n.child;continue}if(n===t)break;for(;n.sibling===null;){if(n.return===null||n.return===t)return;n=n.return}n.sibling.return=n.return,n=n.sibling}};Zo=function(){};sc=function(e,t,n,r){var l=e.memoizedProps;if(l!==r){e=t.stateNode,Ft(Ge.current);var o=null;switch(n){case"input":l=go(e,l),r=go(e,r),o=[];break;case"select":l=K({},l,{value:void 0}),r=K({},r,{value:void 0}),o=[];break;case"textarea":l=So(e,l),r=So(e,r),o=[];break;default:typeof l.onClick!="function"&&typeof r.onClick=="function"&&(e.onclick=rl)}_o(n,r);var i;n=null;for(c in l)if(!r.hasOwnProperty(c)&&l.hasOwnProperty(c)&&l[c]!=null)if(c==="style"){var u=l[c];for(i in u)u.hasOwnProperty(i)&&(n||(n={}),n[i]="")}else c!=="dangerouslySetInnerHTML"&&c!=="children"&&c!=="suppressContentEditableWarning"&&c!=="suppressHydrationWarning"&&c!=="autoFocus"&&(Jn.hasOwnProperty(c)?o||(o=[]):(o=o||[]).push(c,null));for(c in r){var s=r[c];if(u=l!=null?l[c]:void 0,r.hasOwnProperty(c)&&s!==u&&(s!=null||u!=null))if(c==="style")if(u){for(i in u)!u.hasOwnProperty(i)||s&&s.hasOwnProperty(i)||(n||(n={}),n[i]="");for(i in s)s.hasOwnProperty(i)&&u[i]!==s[i]&&(n||(n={}),n[i]=s[i])}else n||(o||(o=[]),o.push(c,n)),n=s;else c==="dangerouslySetInnerHTML"?(s=s?s.__html:void 0,u=u?u.__html:void 0,s!=null&&u!==s&&(o=o||[]).push(c,s)):c==="children"?typeof s!="string"&&typeof s!="number"||(o=o||[]).push(c,""+s):c!=="suppressContentEditableWarning"&&c!=="suppressHydrationWarning"&&(Jn.hasOwnProperty(c)?(s!=null&&c==="onScroll"&&B("scroll",e),o||u===s||(o=[])):(o=o||[]).push(c,s))}n&&(o=o||[]).push("style",n);var c=o;(t.updateQueue=c)&&(t.flags|=4)}};ac=function(e,t,n,r){n!==r&&(t.flags|=4)};function In(e,t){if(!H)switch(e.tailMode){case"hidden":t=e.tail;for(var n=null;t!==null;)t.alternate!==null&&(n=t),t=t.sibling;n===null?e.tail=null:n.sibling=null;break;case"collapsed":n=e.tail;for(var r=null;n!==null;)n.alternate!==null&&(r=n),n=n.sibling;r===null?t||e.tail===null?e.tail=null:e.tail.sibling=null:r.sibling=null}}function ue(e){var t=e.alternate!==null&&e.alternate.child===e.child,n=0,r=0;if(t)for(var l=e.child;l!==null;)n|=l.lanes|l.childLanes,r|=l.subtreeFlags&14680064,r|=l.flags&14680064,l.return=e,l=l.sibling;else for(l=e.child;l!==null;)n|=l.lanes|l.childLanes,r|=l.subtreeFlags,r|=l.flags,l.return=e,l=l.sibling;return e.subtreeFlags|=r,e.childLanes=n,t}function Jd(e,t,n){var r=t.pendingProps;switch(Ni(t),t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return ue(t),null;case 1:return we(t.type)&&ll(),ue(t),null;case 3:return r=t.stateNode,xn(),$(ge),$(ae),Di(),r.pendingContext&&(r.context=r.pendingContext,r.pendingContext=null),(e===null||e.child===null)&&(Lr(t)?t.flags|=4:e===null||e.memoizedState.isDehydrated&&!(t.flags&256)||(t.flags|=1024,Ue!==null&&(li(Ue),Ue=null))),Zo(e,t),ue(t),null;case 5:Mi(t);var l=Ft(ar.current);if(n=t.type,e!==null&&t.stateNode!=null)sc(e,t,n,r,l),e.ref!==t.ref&&(t.flags|=512,t.flags|=2097152);else{if(!r){if(t.stateNode===null)throw Error(w(166));return ue(t),null}if(e=Ft(Ge.current),Lr(t)){r=t.stateNode,n=t.type;var o=t.memoizedProps;switch(r[Ye]=t,r[ur]=o,e=(t.mode&1)!==0,n){case"dialog":B("cancel",r),B("close",r);break;case"iframe":case"object":case"embed":B("load",r);break;case"video":case"audio":for(l=0;l<\/script>",e=e.removeChild(e.firstChild)):typeof r.is=="string"?e=i.createElement(n,{is:r.is}):(e=i.createElement(n),n==="select"&&(i=e,r.multiple?i.multiple=!0:r.size&&(i.size=r.size))):e=i.createElementNS(e,n),e[Ye]=t,e[ur]=r,uc(e,t,!1,!1),t.stateNode=e;e:{switch(i=Eo(n,r),n){case"dialog":B("cancel",e),B("close",e),l=r;break;case"iframe":case"object":case"embed":B("load",e),l=r;break;case"video":case"audio":for(l=0;lEn&&(t.flags|=128,r=!0,In(o,!1),t.lanes=4194304)}else{if(!r)if(e=fl(i),e!==null){if(t.flags|=128,r=!0,n=e.updateQueue,n!==null&&(t.updateQueue=n,t.flags|=4),In(o,!0),o.tail===null&&o.tailMode==="hidden"&&!i.alternate&&!H)return ue(t),null}else 2*G()-o.renderingStartTime>En&&n!==1073741824&&(t.flags|=128,r=!0,In(o,!1),t.lanes=4194304);o.isBackwards?(i.sibling=t.child,t.child=i):(n=o.last,n!==null?n.sibling=i:t.child=i,o.last=i)}return o.tail!==null?(t=o.tail,o.rendering=t,o.tail=t.sibling,o.renderingStartTime=G(),t.sibling=null,n=W.current,U(W,r?n&1|2:n&1),t):(ue(t),null);case 22:case 23:return Ki(),r=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==r&&(t.flags|=8192),r&&t.mode&1?Se&1073741824&&(ue(t),t.subtreeFlags&6&&(t.flags|=8192)):ue(t),null;case 24:return null;case 25:return null}throw Error(w(156,t.tag))}function qd(e,t){switch(Ni(t),t.tag){case 1:return we(t.type)&&ll(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return xn(),$(ge),$(ae),Di(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 5:return Mi(t),null;case 13:if($(W),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(w(340));kn()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return $(W),null;case 4:return xn(),null;case 10:return Ti(t.type._context),null;case 22:case 23:return Ki(),null;case 24:return null;default:return null}}var Mr=!1,se=!1,bd=typeof WeakSet=="function"?WeakSet:Set,N=null;function cn(e,t){var n=e.ref;if(n!==null)if(typeof n=="function")try{n(null)}catch(r){Y(e,t,r)}else n.current=null}function Jo(e,t,n){try{n()}catch(r){Y(e,t,r)}}var ns=!1;function ep(e,t){if(Mo=el,e=ha(),Ei(e)){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{n=(n=e.ownerDocument)&&n.defaultView||window;var r=n.getSelection&&n.getSelection();if(r&&r.rangeCount!==0){n=r.anchorNode;var l=r.anchorOffset,o=r.focusNode;r=r.focusOffset;try{n.nodeType,o.nodeType}catch{n=null;break e}var i=0,u=-1,s=-1,c=0,y=0,v=e,h=null;t:for(;;){for(var k;v!==n||l!==0&&v.nodeType!==3||(u=i+l),v!==o||r!==0&&v.nodeType!==3||(s=i+r),v.nodeType===3&&(i+=v.nodeValue.length),(k=v.firstChild)!==null;)h=v,v=k;for(;;){if(v===e)break t;if(h===n&&++c===l&&(u=i),h===o&&++y===r&&(s=i),(k=v.nextSibling)!==null)break;v=h,h=v.parentNode}v=k}n=u===-1||s===-1?null:{start:u,end:s}}else n=null}n=n||{start:0,end:0}}else n=null;for(Do={focusedElem:e,selectionRange:n},el=!1,N=t;N!==null;)if(t=N,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,N=e;else for(;N!==null;){t=N;try{var x=t.alternate;if(t.flags&1024)switch(t.tag){case 0:case 11:case 15:break;case 1:if(x!==null){var _=x.memoizedProps,F=x.memoizedState,f=t.stateNode,a=f.getSnapshotBeforeUpdate(t.elementType===t.type?_:Ie(t.type,_),F);f.__reactInternalSnapshotBeforeUpdate=a}break;case 3:var d=t.stateNode.containerInfo;d.nodeType===1?d.textContent="":d.nodeType===9&&d.documentElement&&d.removeChild(d.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(w(163))}}catch(g){Y(t,t.return,g)}if(e=t.sibling,e!==null){e.return=t.return,N=e;break}N=t.return}return x=ns,ns=!1,x}function Xn(e,t,n){var r=t.updateQueue;if(r=r!==null?r.lastEffect:null,r!==null){var l=r=r.next;do{if((l.tag&e)===e){var o=l.destroy;l.destroy=void 0,o!==void 0&&Jo(t,n,o)}l=l.next}while(l!==r)}}function Pl(e,t){if(t=t.updateQueue,t=t!==null?t.lastEffect:null,t!==null){var n=t=t.next;do{if((n.tag&e)===e){var r=n.create;n.destroy=r()}n=n.next}while(n!==t)}}function qo(e){var t=e.ref;if(t!==null){var n=e.stateNode;switch(e.tag){case 5:e=n;break;default:e=n}typeof t=="function"?t(e):t.current=e}}function cc(e){var t=e.alternate;t!==null&&(e.alternate=null,cc(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[Ye],delete t[ur],delete t[Uo],delete t[Id],delete t[Fd])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function fc(e){return e.tag===5||e.tag===3||e.tag===4}function rs(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||fc(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function bo(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.nodeType===8?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(n.nodeType===8?(t=n.parentNode,t.insertBefore(e,n)):(t=n,t.appendChild(e)),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=rl));else if(r!==4&&(e=e.child,e!==null))for(bo(e,t,n),e=e.sibling;e!==null;)bo(e,t,n),e=e.sibling}function ei(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(r!==4&&(e=e.child,e!==null))for(ei(e,t,n),e=e.sibling;e!==null;)ei(e,t,n),e=e.sibling}var ne=null,Fe=!1;function ft(e,t,n){for(n=n.child;n!==null;)dc(e,t,n),n=n.sibling}function dc(e,t,n){if(Xe&&typeof Xe.onCommitFiberUnmount=="function")try{Xe.onCommitFiberUnmount(kl,n)}catch{}switch(n.tag){case 5:se||cn(n,t);case 6:var r=ne,l=Fe;ne=null,ft(e,t,n),ne=r,Fe=l,ne!==null&&(Fe?(e=ne,n=n.stateNode,e.nodeType===8?e.parentNode.removeChild(n):e.removeChild(n)):ne.removeChild(n.stateNode));break;case 18:ne!==null&&(Fe?(e=ne,n=n.stateNode,e.nodeType===8?to(e.parentNode,n):e.nodeType===1&&to(e,n),nr(e)):to(ne,n.stateNode));break;case 4:r=ne,l=Fe,ne=n.stateNode.containerInfo,Fe=!0,ft(e,t,n),ne=r,Fe=l;break;case 0:case 11:case 14:case 15:if(!se&&(r=n.updateQueue,r!==null&&(r=r.lastEffect,r!==null))){l=r=r.next;do{var o=l,i=o.destroy;o=o.tag,i!==void 0&&(o&2||o&4)&&Jo(n,t,i),l=l.next}while(l!==r)}ft(e,t,n);break;case 1:if(!se&&(cn(n,t),r=n.stateNode,typeof r.componentWillUnmount=="function"))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(u){Y(n,t,u)}ft(e,t,n);break;case 21:ft(e,t,n);break;case 22:n.mode&1?(se=(r=se)||n.memoizedState!==null,ft(e,t,n),se=r):ft(e,t,n);break;default:ft(e,t,n)}}function ls(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var n=e.stateNode;n===null&&(n=e.stateNode=new bd),t.forEach(function(r){var l=ap.bind(null,e,r);n.has(r)||(n.add(r),r.then(l,l))})}}function Me(e,t){var n=t.deletions;if(n!==null)for(var r=0;rl&&(l=i),r&=~o}if(r=l,r=G()-r,r=(120>r?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*np(r/1960))-r,10e?16:e,yt===null)var r=!1;else{if(e=yt,yt=null,vl=0,D&6)throw Error(w(331));var l=D;for(D|=4,N=e.current;N!==null;){var o=N,i=o.child;if(N.flags&16){var u=o.deletions;if(u!==null){for(var s=0;sG()-Wi?Ut(e,0):Hi|=n),ke(e,t)}function kc(e,t){t===0&&(e.mode&1?(t=Cr,Cr<<=1,!(Cr&130023424)&&(Cr=4194304)):t=1);var n=de();e=ot(e,t),e!==null&&(mr(e,t,n),ke(e,n))}function sp(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),kc(e,n)}function ap(e,t){var n=0;switch(e.tag){case 13:var r=e.stateNode,l=e.memoizedState;l!==null&&(n=l.retryLane);break;case 19:r=e.stateNode;break;default:throw Error(w(314))}r!==null&&r.delete(t),kc(e,n)}var Sc;Sc=function(e,t,n){if(e!==null)if(e.memoizedProps!==t.pendingProps||ge.current)ye=!0;else{if(!(e.lanes&n)&&!(t.flags&128))return ye=!1,Zd(e,t,n);ye=!!(e.flags&131072)}else ye=!1,H&&t.flags&1048576&&Ca(t,ul,t.index);switch(t.lanes=0,t.tag){case 2:var r=t.type;Qr(e,t),e=t.pendingProps;var l=wn(t,ae.current);vn(t,n),l=Fi(null,t,r,e,l,n);var o=Ui();return t.flags|=1,typeof l=="object"&&l!==null&&typeof l.render=="function"&&l.$$typeof===void 0?(t.tag=1,t.memoizedState=null,t.updateQueue=null,we(r)?(o=!0,ol(t)):o=!1,t.memoizedState=l.state!==null&&l.state!==void 0?l.state:null,Ri(t),l.updater=jl,t.stateNode=l,l._reactInternals=t,Wo(t,r,e,n),t=Yo(null,t,r,!0,o,n)):(t.tag=0,H&&o&&Ci(t),fe(null,t,l,n),t=t.child),t;case 16:r=t.elementType;e:{switch(Qr(e,t),e=t.pendingProps,l=r._init,r=l(r._payload),t.type=r,l=t.tag=fp(r),e=Ie(r,e),l){case 0:t=Ko(null,t,r,e,n);break e;case 1:t=bu(null,t,r,e,n);break e;case 11:t=Ju(null,t,r,e,n);break e;case 14:t=qu(null,t,r,Ie(r.type,e),n);break e}throw Error(w(306,r,""))}return t;case 0:return r=t.type,l=t.pendingProps,l=t.elementType===r?l:Ie(r,l),Ko(e,t,r,l,n);case 1:return r=t.type,l=t.pendingProps,l=t.elementType===r?l:Ie(r,l),bu(e,t,r,l,n);case 3:e:{if(lc(t),e===null)throw Error(w(387));r=t.pendingProps,o=t.memoizedState,l=o.element,La(e,t),cl(t,r,null,n);var i=t.memoizedState;if(r=i.element,o.isDehydrated)if(o={element:r,isDehydrated:!1,cache:i.cache,pendingSuspenseBoundaries:i.pendingSuspenseBoundaries,transitions:i.transitions},t.updateQueue.baseState=o,t.memoizedState=o,t.flags&256){l=_n(Error(w(423)),t),t=es(e,t,r,n,l);break e}else if(r!==l){l=_n(Error(w(424)),t),t=es(e,t,r,n,l);break e}else for(xe=St(t.stateNode.containerInfo.firstChild),_e=t,H=!0,Ue=null,n=za(t,null,r,n),t.child=n;n;)n.flags=n.flags&-3|4096,n=n.sibling;else{if(kn(),r===l){t=it(e,t,n);break e}fe(e,t,r,n)}t=t.child}return t;case 5:return Ra(t),e===null&&Vo(t),r=t.type,l=t.pendingProps,o=e!==null?e.memoizedProps:null,i=l.children,Io(r,l)?i=null:o!==null&&Io(r,o)&&(t.flags|=32),rc(e,t),fe(e,t,i,n),t.child;case 6:return e===null&&Vo(t),null;case 13:return oc(e,t,n);case 4:return Oi(t,t.stateNode.containerInfo),r=t.pendingProps,e===null?t.child=Sn(t,null,r,n):fe(e,t,r,n),t.child;case 11:return r=t.type,l=t.pendingProps,l=t.elementType===r?l:Ie(r,l),Ju(e,t,r,l,n);case 7:return fe(e,t,t.pendingProps,n),t.child;case 8:return fe(e,t,t.pendingProps.children,n),t.child;case 12:return fe(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(r=t.type._context,l=t.pendingProps,o=t.memoizedProps,i=l.value,U(sl,r._currentValue),r._currentValue=i,o!==null)if(Ve(o.value,i)){if(o.children===l.children&&!ge.current){t=it(e,t,n);break e}}else for(o=t.child,o!==null&&(o.return=t);o!==null;){var u=o.dependencies;if(u!==null){i=o.child;for(var s=u.firstContext;s!==null;){if(s.context===r){if(o.tag===1){s=nt(-1,n&-n),s.tag=2;var c=o.updateQueue;if(c!==null){c=c.shared;var y=c.pending;y===null?s.next=s:(s.next=y.next,y.next=s),c.pending=s}}o.lanes|=n,s=o.alternate,s!==null&&(s.lanes|=n),Ao(o.return,n,t),u.lanes|=n;break}s=s.next}}else if(o.tag===10)i=o.type===t.type?null:o.child;else if(o.tag===18){if(i=o.return,i===null)throw Error(w(341));i.lanes|=n,u=i.alternate,u!==null&&(u.lanes|=n),Ao(i,n,t),i=o.sibling}else i=o.child;if(i!==null)i.return=o;else for(i=o;i!==null;){if(i===t){i=null;break}if(o=i.sibling,o!==null){o.return=i.return,i=o;break}i=i.return}o=i}fe(e,t,l.children,n),t=t.child}return t;case 9:return l=t.type,r=t.pendingProps.children,vn(t,n),l=Re(l),r=r(l),t.flags|=1,fe(e,t,r,n),t.child;case 14:return r=t.type,l=Ie(r,t.pendingProps),l=Ie(r.type,l),qu(e,t,r,l,n);case 15:return tc(e,t,t.type,t.pendingProps,n);case 17:return r=t.type,l=t.pendingProps,l=t.elementType===r?l:Ie(r,l),Qr(e,t),t.tag=1,we(r)?(e=!0,ol(t)):e=!1,vn(t,n),qa(t,r,l),Wo(t,r,l,n),Yo(null,t,r,!0,e,n);case 19:return ic(e,t,n);case 22:return nc(e,t,n)}throw Error(w(156,t.tag))};function xc(e,t){return Gs(e,t)}function cp(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Te(e,t,n,r){return new cp(e,t,n,r)}function Xi(e){return e=e.prototype,!(!e||!e.isReactComponent)}function fp(e){if(typeof e=="function")return Xi(e)?1:0;if(e!=null){if(e=e.$$typeof,e===pi)return 11;if(e===hi)return 14}return 2}function Ct(e,t){var n=e.alternate;return n===null?(n=Te(e.tag,t,e.key,e.mode),n.elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=e.flags&14680064,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function Xr(e,t,n,r,l,o){var i=2;if(r=e,typeof e=="function")Xi(e)&&(i=1);else if(typeof e=="string")i=5;else e:switch(e){case en:return Bt(n.children,l,o,t);case di:i=8,l|=8;break;case ho:return e=Te(12,n,t,l|2),e.elementType=ho,e.lanes=o,e;case mo:return e=Te(13,n,t,l),e.elementType=mo,e.lanes=o,e;case vo:return e=Te(19,n,t,l),e.elementType=vo,e.lanes=o,e;case Rs:return Tl(n,l,o,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case Ts:i=10;break e;case Ls:i=9;break e;case pi:i=11;break e;case hi:i=14;break e;case dt:i=16,r=null;break e}throw Error(w(130,e==null?e:typeof e,""))}return t=Te(i,n,t,l),t.elementType=e,t.type=r,t.lanes=o,t}function Bt(e,t,n,r){return e=Te(7,e,r,t),e.lanes=n,e}function Tl(e,t,n,r){return e=Te(22,e,r,t),e.elementType=Rs,e.lanes=n,e.stateNode={isHidden:!1},e}function ao(e,t,n){return e=Te(6,e,null,t),e.lanes=n,e}function co(e,t,n){return t=Te(4,e.children!==null?e.children:[],e.key,t),t.lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function dp(e,t,n,r,l){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=Wl(0),this.expirationTimes=Wl(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Wl(0),this.identifierPrefix=r,this.onRecoverableError=l,this.mutableSourceEagerHydrationData=null}function Gi(e,t,n,r,l,o,i,u,s){return e=new dp(e,t,n,u,s),t===1?(t=1,o===!0&&(t|=8)):t=0,o=Te(3,null,null,t),e.current=o,o.stateNode=e,o.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},Ri(o),e}function pp(e,t,n){var r=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(Nc)}catch(e){console.error(e)}}Nc(),Ns.exports=Ce;var gp=Ns.exports,ds=gp;fo.createRoot=ds.createRoot,fo.hydrateRoot=ds.hydrateRoot;const ps={enabled:!1,available:!1,total_objects:0,total_bytes:0,recent_objects_24h:0,recent_bytes_24h:0,buckets:[]};function wp(e){const t=e.trim().slice(0,512).toLowerCase();return t.startsWith("\s*([^<]+)\s*<\/title>/i);return((n=t==null?void 0:t[1])==null?void 0:n.trim())||""}function Sp(e){var n;const t=e.match(/Request ID:\s*([0-9a-f-]+)/i);return((n=t==null?void 0:t[1])==null?void 0:n.trim())||""}function xp(e){return new Promise(t=>{window.setTimeout(t,e)})}async function De(e,t){const n=await fetch(e,t),r=await n.text();let l={};if(r.trim()!=="")try{l=JSON.parse(r)}catch{l={error:r}}if(!n.ok){let o=typeof l=="object"&&l!==null&&"error"in l?String(l.error):`${n.status} ${n.statusText}`;if(wp(r)){const i=kp(r),u=Sp(r);o=`upstream gateway error (${n.status}${i?` ${i}`:""})`,u&&(o=`${o}; request id ${u}`)}throw new Error(o)}return l}function Jt(e){if(e==null||Number.isNaN(e))return"n/a";if(e<=0)return"0 B";const t=["B","KiB","MiB","GiB","TiB"];let n=e,r=0;for(;n>=1024&&rString(l).padStart(2,"0"),r=[t.getUTCFullYear(),n(t.getUTCMonth()+1),n(t.getUTCDate()),n(t.getUTCHours()),n(t.getUTCMinutes())].join("");return`restore-${e}-${r}`.toLowerCase().replace(/[^a-z0-9-]/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,"").slice(0,63).replace(/-+$/g,"")}function hs(){const e=new Date,t=r=>String(r).padStart(2,"0");return`restore-${[e.getUTCFullYear(),t(e.getUTCMonth()+1),t(e.getUTCDate()),t(e.getUTCHours()),t(e.getUTCMinutes())].join("")}-`}function Np(){const[e,t]=M.useState(null),[n,r]=M.useState(""),[l,o]=M.useState(null),[i,u]=M.useState(""),[s,c]=M.useState([]),[y,v]=M.useState(""),[h,k]=M.useState(ps),[x,_]=M.useState(""),[F,f]=M.useState(!1),[a,d]=M.useState({kind:"none"}),[g,E]=M.useState(""),[j,P]=M.useState(""),[z,V]=M.useState(""),[R,me]=M.useState(""),[Ze,st]=M.useState(hs()),[Pn,wr]=M.useState(""),[Je,at]=M.useState(""),[C,T]=M.useState(""),[L,A]=M.useState(24),[X,Lt]=M.useState(!0),[Ae,Yt]=M.useState(!0),[He,Rt]=M.useState(0),[Dl,jc]=M.useState(!0),[Il,Pc]=M.useState(0),[zc,bi]=M.useState("No action yet."),[We,oe]=M.useState(!1),zn=M.useMemo(()=>{if(!l)return 0;let m=0;for(const S of l.namespaces)for(const Z of S.pvcs)m+=Z.active_backups||0;return m},[l]),Fl=M.useMemo(()=>l?l.namespaces.map(m=>m.name):[],[l]),ce=m=>{if(typeof m=="string"){bi(m);return}bi(JSON.stringify(m,null,2))},Tc=async()=>{try{const m=await De("/v1/whoami");t(m),r("")}catch(m){t(null),r(m instanceof Error?m.message:"failed to load auth")}},ct=async()=>{const m=async()=>De("/v1/inventory");try{const S=await m();o(S),u(""),!Je&&S.namespaces.length>0&&at(S.namespaces[0].name)}catch(S){let Z=S instanceof Error?S.message:"failed to load inventory";if(Z.includes("upstream gateway error"))try{await xp(1e3);const je=await m();o(je),u(""),!Je&&je.namespaces.length>0&&at(je.namespaces[0].name);return}catch(je){Z=je instanceof Error?je.message:Z}u(Z)}},Ul=async()=>{try{const m=await De("/v1/policies");c(m.policies||[]),v("")}catch(m){c([]),v(m instanceof Error?m.message:"failed to load policies")}},Xt=async(m=!1)=>{try{const S=await De(m?"/v1/b2?refresh=1":"/v1/b2");k(S),_("")}catch(S){k(ps),_(S instanceof Error?S.message:"failed to load B2 usage")}},Lc=async()=>{f(!0);try{await Xt(!0)}finally{f(!1)}},eu=async()=>{oe(!0);try{await Promise.all([Tc(),ct(),Ul(),Xt()])}finally{oe(!1)}};M.useEffect(()=>{eu()},[]),M.useEffect(()=>{if(zn<=0)return;const m=window.setInterval(()=>{ct()},8e3);return()=>{window.clearInterval(m)}},[zn]);const Rc=async(m,S)=>{oe(!0);try{const Z=await De("/v1/backup",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({namespace:m,pvc:S,dry_run:!1,dedupe:Dl,keep_last:Il})});ce(Z),await Promise.all([ct(),Xt()])}catch(Z){ce({error:Z instanceof Error?Z.message:"backup request failed",namespace:m,pvc:S})}finally{oe(!1)}},Oc=async m=>{oe(!0);try{const S=await De("/v1/backup/namespace",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({namespace:m,dry_run:!1,dedupe:Dl,keep_last:Il})});ce(S),await Promise.all([ct(),Xt()])}catch(S){ce({error:S instanceof Error?S.message:"namespace backup failed",namespace:m})}finally{oe(!1)}},Mc=async(m,S)=>{oe(!0);try{const Z=await De(`/v1/backups?namespace=${encodeURIComponent(m)}&pvc=${encodeURIComponent(S)}`),je=Z.backups.filter(Gt=>Gt.state==="Completed"&&Gt.url);d({kind:"pvc",namespace:m,pvc:S,volume:Z.volume,backups:je}),E(m),P(Cp(S)),V(je.length>0?String(je[0].url):""),ce(Z)}catch(Z){ce({error:Z instanceof Error?Z.message:"failed to load backups",namespace:m,pvc:S})}finally{oe(!1)}},Dc=m=>{d({kind:"namespace",namespace:m}),me(m),st(hs()),wr(""),ce(`Namespace restore planner loaded for ${m}.`)},tu=async m=>{if(a.kind==="pvc"){oe(!0);try{const S=await De("/v1/restores",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({namespace:a.namespace,pvc:a.pvc,backup_url:z,target_namespace:g,target_pvc:j,dry_run:m})});ce(S),await Promise.all([ct(),Xt()])}catch(S){ce({error:S instanceof Error?S.message:"restore failed",namespace:a.namespace,pvc:a.pvc,target_namespace:g,target_pvc:j,dry_run:m})}finally{oe(!1)}}},nu=async m=>{if(a.kind==="namespace"){oe(!0);try{const S=await De("/v1/restores/namespace",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({namespace:a.namespace,target_namespace:R,target_prefix:Ze,snapshot:Pn,dry_run:m})});ce(S),await Promise.all([ct(),Xt()])}catch(S){ce({error:S instanceof Error?S.message:"namespace restore failed",namespace:a.namespace,target_namespace:R,target_prefix:Ze,dry_run:m})}finally{oe(!1)}}},Ic=async()=>{oe(!0);try{const m=await De("/v1/policies",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({namespace:Je,pvc:C,interval_hours:L,enabled:X,dedupe:Ae,keep_last:He})});ce(m),await Promise.all([Ul(),ct()])}catch(m){ce({error:m instanceof Error?m.message:"policy save failed"})}finally{oe(!1)}},Fc=async m=>{oe(!0);try{const S=await De(`/v1/policies/${encodeURIComponent(m)}`,{method:"DELETE"});ce(S),await Promise.all([Ul(),ct()])}catch(S){ce({error:S instanceof Error?S.message:"policy delete failed",policy_id:m})}finally{oe(!1)}},Uc=e?`${e.user||e.email||"authenticated"} | groups: ${(e.groups||[]).join(", ")||"none"}`:n||"anonymous",Bc=e!=null&&e.allowed_groups&&e.allowed_groups.length>0?`Access requires: ${e.allowed_groups.join(", ")}`:"Access requires: any authenticated user";return p.jsxs("div",{className:"app-shell",children:[p.jsxs("header",{className:"topbar",children:[p.jsxs("div",{children:[p.jsx("h1",{children:"Soteria Backup Console"}),p.jsx("p",{className:"subtle",children:"Dark-mode React UI for backup drills, policy control, and B2 consumption visibility."})]}),p.jsxs("div",{className:"toolbar",children:[p.jsx("span",{className:`chip ${e?"good":"warn"}`,children:Uc}),p.jsx("span",{className:"chip",children:Bc}),zn>0&&p.jsxs("span",{className:"chip warn",children:[zn," backup job",zn===1?"":"s"," active"]}),p.jsx("button",{type:"button",className:"secondary",onClick:()=>void eu(),disabled:We,children:We?"Refreshing...":"Refresh"})]})]}),p.jsxs("main",{className:"layout",children:[p.jsxs("section",{className:"panel scroll-panel",children:[p.jsxs("div",{className:"panel-header",children:[p.jsx("h2",{children:"PVC Inventory"}),p.jsx("span",{className:"subtle",children:l!=null&&l.generated_at?`Updated ${qt(l.generated_at)}`:"No inventory yet"})]}),p.jsxs("label",{className:"checkbox-row",children:[p.jsx("input",{type:"checkbox",checked:Dl,onChange:m=>jc(m.target.checked)}),"Dedupe unchanged blocks (default)"]}),p.jsxs("label",{children:["Keep last snapshots per PVC (0 = keep all)",p.jsx("input",{type:"number",min:0,max:1e3,value:Il,onChange:m=>Pc(Math.max(0,Math.min(1e3,Number(m.target.value||0))))})]}),p.jsx("p",{className:"subtle tiny",children:"This setting applies to both `Backup now` and `Backup namespace` actions."}),i&&p.jsx("p",{className:"error",children:i}),!l&&!i&&p.jsx("p",{className:"subtle",children:"Loading inventory..."}),l==null?void 0:l.namespaces.map(m=>p.jsxs("article",{className:"namespace-block",children:[p.jsxs("div",{className:"namespace-row",children:[p.jsx("h3",{children:m.name}),p.jsxs("div",{className:"actions",children:[p.jsx("button",{type:"button",className:"secondary",onClick:()=>void Oc(m.name),disabled:We,children:"Backup namespace"}),p.jsx("button",{type:"button",className:"secondary",onClick:()=>Dc(m.name),children:"Restore namespace"})]})]}),p.jsx("div",{className:"pvc-grid",children:m.pvcs.map(S=>{const Z=S.healthy?"good":S.health_reason==="in_progress"?"warn":"bad",je=S.healthy?"Healthy":_p(S.health_reason),Gt=Math.max(0,Math.min(100,Number(S.last_job_progress_pct||0))),ru=Ep(S.last_job_state),$c=!!S.last_job_name||(S.active_backups||0)>0,Vc=Jt(S.last_backup_size_bytes),Ac=Jt(S.total_backup_size_bytes),Hc=S.driver==="restic"&&(S.last_backup_size_bytes===void 0||S.total_backup_size_bytes===void 0);return p.jsxs("article",{className:"pvc-card",children:[p.jsxs("div",{className:"pvc-title-row",children:[p.jsxs("div",{children:[p.jsx("h4",{children:S.pvc}),p.jsxs("p",{className:"subtle tiny",children:[S.volume||"unknown volume"," | ",S.storage_class||"no class"," | ",S.capacity||"unknown size"]})]}),p.jsx("span",{className:`chip ${Z}`,children:je})]}),p.jsxs("p",{className:"subtle tiny",children:["Last backup: ",S.last_backup_at?`${qt(S.last_backup_at)} (${(S.last_backup_age_hours||0).toFixed(1)}h ago)`:"never"]}),p.jsxs("p",{className:"subtle tiny",children:["Backups: ",S.completed_backups,"/",S.backup_count," completed | Latest size: ",Vc," | Total stored: ",Ac]}),Hc&&p.jsx("p",{className:"subtle tiny",children:"Per-PVC storage is estimated from restic upload summaries persisted by Soteria. Older backups created before tracking may show n/a until a new backup runs."}),$c&&p.jsxs("div",{className:"backup-progress",children:[p.jsxs("div",{className:"progress-header",children:[p.jsxs("p",{className:"subtle tiny",children:["Job: ",S.last_job_name||"n/a",S.last_job_started_at?` | Started ${qt(S.last_job_started_at)}`:""]}),p.jsx("span",{className:`chip ${ru}`,children:S.last_job_state||"Unknown"})]}),p.jsx("div",{className:"progress-track",role:"progressbar","aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":Gt,children:p.jsx("div",{className:`progress-fill ${ru} ${S.active_backups>0?"active":""}`,style:{width:`${Gt}%`}})}),p.jsxs("p",{className:"subtle tiny",children:["Progress ",Gt,"% | Active jobs: ",S.active_backups||0]})]}),S.error&&p.jsx("p",{className:"error tiny",children:S.error}),p.jsxs("div",{className:"actions",children:[p.jsx("button",{type:"button",onClick:()=>void Rc(S.namespace,S.pvc),disabled:We,children:"Backup now"}),p.jsx("button",{type:"button",className:"secondary",onClick:()=>void Mc(S.namespace,S.pvc),children:"Restore"})]})]},`${S.namespace}/${S.pvc}`)})})]},m.name))]}),p.jsxs("section",{className:"column",children:[p.jsxs("section",{className:"panel",children:[p.jsxs("div",{className:"panel-header",children:[p.jsx("h2",{children:"B2 Consumption"}),p.jsx("button",{type:"button",className:"secondary",onClick:()=>void Lc(),disabled:F,children:F?"Refreshing...":"Refresh B2"})]}),x&&p.jsx("p",{className:"error",children:x}),!x&&!h.enabled&&p.jsx("p",{className:"subtle",children:"B2 monitoring is disabled in Soteria config."}),!x&&h.enabled&&!h.available&&p.jsx("p",{className:"error",children:h.error||"B2 usage currently unavailable."}),h.enabled&&p.jsxs("div",{className:"stack",children:[p.jsxs("p",{className:"subtle tiny",children:["Endpoint: ",h.endpoint||"n/a"," | Region: ",h.region||"n/a"]}),p.jsxs("p",{className:"subtle tiny",children:["Last scan: ",qt(h.scanned_at)," | Duration: ",h.scan_duration_ms||0,"ms"]}),p.jsxs("div",{className:"stat-grid",children:[p.jsxs("div",{className:"stat",children:[p.jsx("span",{className:"label",children:"Stored bytes"}),p.jsx("strong",{children:Jt(h.total_bytes)})]}),p.jsxs("div",{className:"stat",children:[p.jsx("span",{className:"label",children:"Objects"}),p.jsx("strong",{children:h.total_objects})]}),p.jsxs("div",{className:"stat",children:[p.jsx("span",{className:"label",children:"Recent bytes (24h)"}),p.jsx("strong",{children:Jt(h.recent_bytes_24h)})]}),p.jsxs("div",{className:"stat",children:[p.jsx("span",{className:"label",children:"Recent objects (24h)"}),p.jsx("strong",{children:h.recent_objects_24h})]})]}),p.jsx("p",{className:"subtle tiny",children:"Recent 24h values are object-change bandwidth proxy from bucket scans. B2 egress billing totals are not exposed by S3 object listing."}),p.jsx("div",{className:"bucket-table-wrap",children:p.jsxs("table",{children:[p.jsx("thead",{children:p.jsxs("tr",{children:[p.jsx("th",{children:"Bucket"}),p.jsx("th",{children:"Objects"}),p.jsx("th",{children:"Stored"}),p.jsx("th",{children:"Recent 24h"})]})}),p.jsx("tbody",{children:(h.buckets||[]).map(m=>p.jsxs("tr",{children:[p.jsxs("td",{children:[p.jsx("div",{children:m.name}),p.jsxs("div",{className:"subtle tiny",children:["Last object: ",qt(m.last_modified_at)]})]}),p.jsx("td",{children:m.object_count}),p.jsx("td",{children:Jt(m.total_bytes)}),p.jsx("td",{children:Jt(m.recent_bytes_24h)})]},m.name))})]})})]})]}),p.jsxs("section",{className:"panel",children:[p.jsx("h2",{children:"Restore Planner"}),p.jsx("p",{className:"subtle tiny",children:"Inventory restore buttons preload this panel. This is where restore dry-runs and execution happen."}),a.kind==="none"&&p.jsx("p",{className:"subtle",children:"Choose Restore on a PVC or namespace to begin."}),a.kind==="pvc"&&p.jsxs("div",{className:"stack",children:[p.jsxs("p",{className:"subtle tiny",children:[p.jsx("strong",{children:"Source:"})," ",a.namespace,"/",a.pvc," (",a.volume,")"]}),p.jsxs("label",{children:["Backup snapshot",p.jsxs("select",{value:z,onChange:m=>V(m.target.value),children:[a.backups.length===0&&p.jsx("option",{value:"",children:"No completed backups"}),a.backups.map(m=>p.jsxs("option",{value:m.url||"",children:[m.name," | ",m.created||"unknown time"," | ",m.size||"size n/a"]},m.url||m.name))]})]}),p.jsxs("label",{children:["Target namespace",p.jsx("select",{value:g,onChange:m=>E(m.target.value),children:Fl.map(m=>p.jsx("option",{value:m,children:m},m))})]}),p.jsxs("label",{children:["Target PVC",p.jsx("input",{value:j,onChange:m=>P(m.target.value)})]}),p.jsxs("div",{className:"actions",children:[p.jsx("button",{type:"button",onClick:()=>void tu(!1),disabled:We||!z,children:"Create restore PVC"}),p.jsx("button",{type:"button",className:"secondary",onClick:()=>void tu(!0),disabled:We||!z,children:"Dry run"})]})]}),a.kind==="namespace"&&p.jsxs("div",{className:"stack",children:[p.jsxs("p",{className:"subtle tiny",children:[p.jsx("strong",{children:"Source namespace:"})," ",a.namespace]}),p.jsxs("label",{children:["Target namespace",p.jsx("select",{value:R,onChange:m=>me(m.target.value),children:Fl.map(m=>p.jsx("option",{value:m,children:m},m))})]}),p.jsxs("label",{children:["Target PVC prefix",p.jsx("input",{value:Ze,onChange:m=>st(m.target.value)})]}),p.jsxs("label",{children:["Snapshot hint (optional)",p.jsx("input",{value:Pn,onChange:m=>wr(m.target.value),placeholder:"blank = latest completed"})]}),p.jsxs("div",{className:"actions",children:[p.jsx("button",{type:"button",onClick:()=>void nu(!1),disabled:We,children:"Create restore PVCs"}),p.jsx("button",{type:"button",className:"secondary",onClick:()=>void nu(!0),disabled:We,children:"Dry run"})]})]})]}),p.jsxs("section",{className:"panel action-panel",children:[p.jsx("h2",{children:"Last Action"}),p.jsx("pre",{children:zc})]})]}),p.jsx("section",{className:"column",children:p.jsxs("section",{className:"panel scroll-panel",children:[p.jsx("h2",{children:"Backup Policies"}),p.jsx("p",{className:"subtle tiny",children:"Policy backups create new restic snapshots. `Keep last` controls version retention per PVC: 1 means only newest copy remains after each run. With dedupe on, unchanged blocks are reused in the shared repository. With dedupe off, Soteria isolates each PVC to its own repository path."}),p.jsxs("div",{className:"stack",children:[p.jsxs("label",{children:["Namespace",p.jsx("select",{value:Je,onChange:m=>at(m.target.value),children:Fl.map(m=>p.jsx("option",{value:m,children:m},m))})]}),p.jsxs("label",{children:["PVC (optional)",p.jsx("input",{value:C,onChange:m=>T(m.target.value),placeholder:"blank means all PVCs in namespace"})]}),p.jsxs("label",{children:["Interval hours",p.jsx("input",{type:"number",min:1,value:L,onChange:m=>A(Math.max(1,Number(m.target.value||1)))})]}),p.jsxs("label",{className:"checkbox-row",children:[p.jsx("input",{type:"checkbox",checked:X,onChange:m=>Lt(m.target.checked)}),"Enabled"]}),p.jsxs("label",{className:"checkbox-row",children:[p.jsx("input",{type:"checkbox",checked:Ae,onChange:m=>Yt(m.target.checked)}),"Dedupe unchanged blocks"]}),p.jsxs("label",{children:["Keep last snapshots per PVC (0 = keep all)",p.jsx("input",{type:"number",min:0,max:1e3,value:He,onChange:m=>Rt(Math.max(0,Math.min(1e3,Number(m.target.value||0))))})]}),p.jsx("button",{type:"button",onClick:()=>void Ic(),disabled:We||!Je,children:"Save policy"})]}),y&&p.jsx("p",{className:"error",children:y}),!y&&s.length===0&&p.jsx("p",{className:"subtle",children:"No policies yet."}),p.jsx("div",{className:"policy-list",children:s.map(m=>p.jsxs("article",{className:"policy-item",children:[p.jsxs("div",{className:"policy-head",children:[p.jsxs("strong",{children:[m.namespace,"/",m.pvc||"*"]}),p.jsx("span",{className:`chip ${m.enabled?"good":"bad"}`,children:m.enabled?"Enabled":"Disabled"})]}),p.jsxs("p",{className:"subtle tiny",children:["Every ",m.interval_hours,"h | Dedupe: ",m.dedupe===!1?"off":"on"," | Keep last: ",m.keep_last??0," | Updated ",qt(m.updated_at||m.created_at)]}),p.jsxs("div",{className:"actions",children:[p.jsx("button",{type:"button",className:"secondary",onClick:()=>{at(m.namespace),T(m.pvc||""),A(m.interval_hours),Lt(m.enabled),Yt(m.dedupe!==!1),Rt(m.keep_last??0)},children:"Load"}),p.jsx("button",{type:"button",className:"secondary",onClick:()=>void Fc(m.id),disabled:We,children:"Delete"})]})]},m.id))})]})})]})]})}fo.createRoot(document.getElementById("root")).render(p.jsx(uf.StrictMode,{children:p.jsx(Np,{})})); diff --git a/internal/server/ui-dist/index.html b/internal/server/ui-dist/index.html index d0bfc5f..c5ef92e 100644 --- a/internal/server/ui-dist/index.html +++ b/internal/server/ui-dist/index.html @@ -4,7 +4,7 @@ Soteria Backup Console - + diff --git a/web/src/App.tsx b/web/src/App.tsx index b050aed..31a62f8 100644 --- a/web/src/App.tsx +++ b/web/src/App.tsx @@ -694,6 +694,68 @@ function App() {
+
+
+

B2 Consumption

+ +
+ {b2Error &&

{b2Error}

} + {!b2Error && !b2Usage.enabled &&

B2 monitoring is disabled in Soteria config.

} + {!b2Error && b2Usage.enabled && !b2Usage.available &&

{b2Usage.error || 'B2 usage currently unavailable.'}

} + {b2Usage.enabled && ( +
+

Endpoint: {b2Usage.endpoint || 'n/a'} | Region: {b2Usage.region || 'n/a'}

+

Last scan: {formatTimestamp(b2Usage.scanned_at)} | Duration: {b2Usage.scan_duration_ms || 0}ms

+
+
+ Stored bytes + {formatBytes(b2Usage.total_bytes)} +
+
+ Objects + {b2Usage.total_objects} +
+
+ Recent bytes (24h) + {formatBytes(b2Usage.recent_bytes_24h)} +
+
+ Recent objects (24h) + {b2Usage.recent_objects_24h} +
+
+

Recent 24h values are object-change bandwidth proxy from bucket scans. B2 egress billing totals are not exposed by S3 object listing.

+
+ + + + + + + + + + + {(b2Usage.buckets || []).map((bucket) => ( + + + + + + + ))} + +
BucketObjectsStoredRecent 24h
+
{bucket.name}
+
Last object: {formatTimestamp(bucket.last_modified_at)}
+
{bucket.object_count}{formatBytes(bucket.total_bytes)}{formatBytes(bucket.recent_bytes_24h)}
+
+
+ )} +
+

Restore Planner

Inventory restore buttons preload this panel. This is where restore dry-runs and execution happen.

@@ -770,68 +832,6 @@ function App() {
-
-
-

B2 Consumption

- -
- {b2Error &&

{b2Error}

} - {!b2Error && !b2Usage.enabled &&

B2 monitoring is disabled in Soteria config.

} - {!b2Error && b2Usage.enabled && !b2Usage.available &&

{b2Usage.error || 'B2 usage currently unavailable.'}

} - {b2Usage.enabled && ( -
-

Endpoint: {b2Usage.endpoint || 'n/a'} | Region: {b2Usage.region || 'n/a'}

-

Last scan: {formatTimestamp(b2Usage.scanned_at)} | Duration: {b2Usage.scan_duration_ms || 0}ms

-
-
- Stored bytes - {formatBytes(b2Usage.total_bytes)} -
-
- Objects - {b2Usage.total_objects} -
-
- Recent bytes (24h) - {formatBytes(b2Usage.recent_bytes_24h)} -
-
- Recent objects (24h) - {b2Usage.recent_objects_24h} -
-
-

Recent 24h values are object-change bandwidth proxy from bucket scans. B2 egress billing totals are not exposed by S3 object listing.

-
- - - - - - - - - - - {(b2Usage.buckets || []).map((bucket) => ( - - - - - - - ))} - -
BucketObjectsStoredRecent 24h
-
{bucket.name}
-
Last object: {formatTimestamp(bucket.last_modified_at)}
-
{bucket.object_count}{formatBytes(bucket.total_bytes)}{formatBytes(bucket.recent_bytes_24h)}
-
-
- )} -
-

Backup Policies

Policy backups create new restic snapshots. `Keep last` controls version retention per PVC: 1 means only newest copy remains after each run. With dedupe on, unchanged blocks are reused in the shared repository. With dedupe off, Soteria isolates each PVC to its own repository path.