diff --git a/.gitignore b/.gitignore index 9b11349..0f59259 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,6 @@ -gsm-frontend/ +node_modules/ +dist/ +*.tar.gz +.env +.env.* +!.env.example diff --git a/gsm-frontend/.gitignore b/gsm-frontend/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/gsm-frontend/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/gsm-frontend/README.md b/gsm-frontend/README.md new file mode 100644 index 0000000..18bc70e --- /dev/null +++ b/gsm-frontend/README.md @@ -0,0 +1,16 @@ +# React + Vite + +This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. + +Currently, two official plugins are available: + +- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Babel](https://babeljs.io/) (or [oxc](https://oxc.rs) when used in [rolldown-vite](https://vite.dev/guide/rolldown)) for Fast Refresh +- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh + +## React Compiler + +The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see [this documentation](https://react.dev/learn/react-compiler/installation). + +## Expanding the ESLint configuration + +If you are developing a production application, we recommend using TypeScript with type-aware lint rules enabled. Check out the [TS template](https://github.com/vitejs/vite/tree/main/packages/create-vite/template-react-ts) for information on how to integrate TypeScript and [`typescript-eslint`](https://typescript-eslint.io) in your project. diff --git a/gsm-frontend/assets/index-CA30OFan.js b/gsm-frontend/assets/index-CA30OFan.js new file mode 100644 index 0000000..279f9a2 --- /dev/null +++ b/gsm-frontend/assets/index-CA30OFan.js @@ -0,0 +1,134 @@ +function SP(e,t){for(var r=0;rn[i]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))n(i);new MutationObserver(i=>{for(const a of i)if(a.type==="childList")for(const o of a.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&n(o)}).observe(document,{childList:!0,subtree:!0});function r(i){const a={};return i.integrity&&(a.integrity=i.integrity),i.referrerPolicy&&(a.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?a.credentials="include":i.crossOrigin==="anonymous"?a.credentials="omit":a.credentials="same-origin",a}function n(i){if(i.ep)return;i.ep=!0;const a=r(i);fetch(i.href,a)}})();var El=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function ve(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var Ox={exports:{}},Fs={},_x={exports:{}},ee={};/** + * @license React + * react.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var fl=Symbol.for("react.element"),OP=Symbol.for("react.portal"),_P=Symbol.for("react.fragment"),PP=Symbol.for("react.strict_mode"),AP=Symbol.for("react.profiler"),EP=Symbol.for("react.provider"),$P=Symbol.for("react.context"),jP=Symbol.for("react.forward_ref"),TP=Symbol.for("react.suspense"),CP=Symbol.for("react.memo"),kP=Symbol.for("react.lazy"),bm=Symbol.iterator;function MP(e){return e===null||typeof e!="object"?null:(e=bm&&e[bm]||e["@@iterator"],typeof e=="function"?e:null)}var Px={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},Ax=Object.assign,Ex={};function ua(e,t,r){this.props=e,this.context=t,this.refs=Ex,this.updater=r||Px}ua.prototype.isReactComponent={};ua.prototype.setState=function(e,t){if(typeof e!="object"&&typeof e!="function"&&e!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")};ua.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function $x(){}$x.prototype=ua.prototype;function mh(e,t,r){this.props=e,this.context=t,this.refs=Ex,this.updater=r||Px}var yh=mh.prototype=new $x;yh.constructor=mh;Ax(yh,ua.prototype);yh.isPureReactComponent=!0;var xm=Array.isArray,jx=Object.prototype.hasOwnProperty,gh={current:null},Tx={key:!0,ref:!0,__self:!0,__source:!0};function Cx(e,t,r){var n,i={},a=null,o=null;if(t!=null)for(n in t.ref!==void 0&&(o=t.ref),t.key!==void 0&&(a=""+t.key),t)jx.call(t,n)&&!Tx.hasOwnProperty(n)&&(i[n]=t[n]);var l=arguments.length-2;if(l===1)i.children=r;else if(1>>1,W=N[V];if(0>>1;Vi(xe,U))Tei(Tt,xe)?(N[V]=Tt,N[Te]=U,V=Te):(N[V]=xe,N[ne]=U,V=ne);else if(Tei(Tt,U))N[V]=Tt,N[Te]=U,V=Te;else break e}}return R}function i(N,R){var U=N.sortIndex-R.sortIndex;return U!==0?U:N.id-R.id}if(typeof performance=="object"&&typeof performance.now=="function"){var a=performance;e.unstable_now=function(){return a.now()}}else{var o=Date,l=o.now();e.unstable_now=function(){return o.now()-l}}var u=[],s=[],f=1,c=null,d=3,p=!1,b=!1,m=!1,y=typeof setTimeout=="function"?setTimeout:null,v=typeof clearTimeout=="function"?clearTimeout:null,h=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function x(N){for(var R=r(s);R!==null;){if(R.callback===null)n(s);else if(R.startTime<=N)n(s),R.sortIndex=R.expirationTime,t(u,R);else break;R=r(s)}}function S(N){if(m=!1,x(N),!b)if(r(u)!==null)b=!0,I(g);else{var R=r(s);R!==null&&B(S,R.startTime-N)}}function g(N,R){b=!1,m&&(m=!1,v(P),P=-1),p=!0;var U=d;try{for(x(R),c=r(u);c!==null&&(!(c.expirationTime>R)||N&&!$());){var V=c.callback;if(typeof V=="function"){c.callback=null,d=c.priorityLevel;var W=V(c.expirationTime<=R);R=e.unstable_now(),typeof W=="function"?c.callback=W:c===r(u)&&n(u),x(R)}else n(u);c=r(u)}if(c!==null)var q=!0;else{var ne=r(s);ne!==null&&B(S,ne.startTime-R),q=!1}return q}finally{c=null,d=U,p=!1}}var w=!1,O=null,P=-1,A=5,T=-1;function $(){return!(e.unstable_now()-TN||125V?(N.sortIndex=U,t(s,N),r(u)===null&&N===r(s)&&(m?(v(P),P=-1):m=!0,B(S,U-V))):(N.sortIndex=W,t(u,N),b||p||(b=!0,I(g))),N},e.unstable_shouldYield=$,e.unstable_wrapCallback=function(N){var R=d;return function(){var U=d;d=R;try{return N.apply(this,arguments)}finally{d=U}}}})(Dx);Ix.exports=Dx;var VP=Ix.exports;/** + * @license React + * react-dom.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var KP=E,Pt=VP;function F(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,r=1;r"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Jf=Object.prototype.hasOwnProperty,GP=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,Sm={},Om={};function XP(e){return Jf.call(Om,e)?!0:Jf.call(Sm,e)?!1:GP.test(e)?Om[e]=!0:(Sm[e]=!0,!1)}function qP(e,t,r,n){if(r!==null&&r.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return n?!1:r!==null?!r.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function YP(e,t,r,n){if(t===null||typeof t>"u"||qP(e,t,r,n))return!0;if(n)return!1;if(r!==null)switch(r.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function st(e,t,r,n,i,a,o){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=n,this.attributeNamespace=i,this.mustUseProperty=r,this.propertyName=e,this.type=t,this.sanitizeURL=a,this.removeEmptyString=o}var Ze={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){Ze[e]=new st(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];Ze[t]=new st(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){Ze[e]=new st(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){Ze[e]=new st(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){Ze[e]=new st(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){Ze[e]=new st(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){Ze[e]=new st(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){Ze[e]=new st(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){Ze[e]=new st(e,5,!1,e.toLowerCase(),null,!1,!1)});var xh=/[\-:]([a-z])/g;function wh(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(xh,wh);Ze[t]=new st(t,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(xh,wh);Ze[t]=new st(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(xh,wh);Ze[t]=new st(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){Ze[e]=new st(e,1,!1,e.toLowerCase(),null,!1,!1)});Ze.xlinkHref=new st("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){Ze[e]=new st(e,1,!1,e.toLowerCase(),null,!0,!0)});function Sh(e,t,r,n){var i=Ze.hasOwnProperty(t)?Ze[t]:null;(i!==null?i.type!==0:n||!(2l||i[o]!==a[l]){var u=` +`+i[o].replace(" at new "," at ");return e.displayName&&u.includes("")&&(u=u.replace("",e.displayName)),u}while(1<=o&&0<=l);break}}}finally{Qc=!1,Error.prepareStackTrace=r}return(e=e?e.displayName||e.name:"")?Ha(e):""}function QP(e){switch(e.tag){case 5:return Ha(e.type);case 16:return Ha("Lazy");case 13:return Ha("Suspense");case 19:return Ha("SuspenseList");case 0:case 2:case 15:return e=Zc(e.type,!1),e;case 11:return e=Zc(e.type.render,!1),e;case 1:return e=Zc(e.type,!0),e;default:return""}}function nd(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 si:return"Fragment";case ui:return"Portal";case ed:return"Profiler";case Oh:return"StrictMode";case td:return"Suspense";case rd:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case Bx:return(e.displayName||"Context")+".Consumer";case Rx:return(e._context.displayName||"Context")+".Provider";case _h:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case Ph:return t=e.displayName||null,t!==null?t:nd(e.type)||"Memo";case Fr:t=e._payload,e=e._init;try{return nd(e(t))}catch{}}return null}function ZP(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 nd(t);case 8:return t===Oh?"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 sn(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function Ux(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function JP(e){var t=Ux(e)?"checked":"value",r=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),n=""+e[t];if(!e.hasOwnProperty(t)&&typeof r<"u"&&typeof r.get=="function"&&typeof r.set=="function"){var i=r.get,a=r.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return i.call(this)},set:function(o){n=""+o,a.call(this,o)}}),Object.defineProperty(e,t,{enumerable:r.enumerable}),{getValue:function(){return n},setValue:function(o){n=""+o},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function Tl(e){e._valueTracker||(e._valueTracker=JP(e))}function Fx(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var r=t.getValue(),n="";return e&&(n=Ux(e)?e.checked?"true":"false":e.value),e=n,e!==r?(t.setValue(e),!0):!1}function gu(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 id(e,t){var r=t.checked;return Ae({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:r??e._wrapperState.initialChecked})}function Pm(e,t){var r=t.defaultValue==null?"":t.defaultValue,n=t.checked!=null?t.checked:t.defaultChecked;r=sn(t.value!=null?t.value:r),e._wrapperState={initialChecked:n,initialValue:r,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function Wx(e,t){t=t.checked,t!=null&&Sh(e,"checked",t,!1)}function ad(e,t){Wx(e,t);var r=sn(t.value),n=t.type;if(r!=null)n==="number"?(r===0&&e.value===""||e.value!=r)&&(e.value=""+r):e.value!==""+r&&(e.value=""+r);else if(n==="submit"||n==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?od(e,t.type,r):t.hasOwnProperty("defaultValue")&&od(e,t.type,sn(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function Am(e,t,r){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var n=t.type;if(!(n!=="submit"&&n!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,r||t===e.value||(e.value=t),e.defaultValue=t}r=e.name,r!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,r!==""&&(e.name=r)}function od(e,t,r){(t!=="number"||gu(e.ownerDocument)!==e)&&(r==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+r&&(e.defaultValue=""+r))}var Va=Array.isArray;function Oi(e,t,r,n){if(e=e.options,t){t={};for(var i=0;i"+t.valueOf().toString()+"",t=Cl.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function co(e,t){if(t){var r=e.firstChild;if(r&&r===e.lastChild&&r.nodeType===3){r.nodeValue=t;return}}e.textContent=t}var qa={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},eA=["Webkit","ms","Moz","O"];Object.keys(qa).forEach(function(e){eA.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),qa[t]=qa[e]})});function Gx(e,t,r){return t==null||typeof t=="boolean"||t===""?"":r||typeof t!="number"||t===0||qa.hasOwnProperty(e)&&qa[e]?(""+t).trim():t+"px"}function Xx(e,t){e=e.style;for(var r in t)if(t.hasOwnProperty(r)){var n=r.indexOf("--")===0,i=Gx(r,t[r],n);r==="float"&&(r="cssFloat"),n?e.setProperty(r,i):e[r]=i}}var tA=Ae({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 sd(e,t){if(t){if(tA[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(F(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(F(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(F(61))}if(t.style!=null&&typeof t.style!="object")throw Error(F(62))}}function cd(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 fd=null;function Ah(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var dd=null,_i=null,Pi=null;function jm(e){if(e=hl(e)){if(typeof dd!="function")throw Error(F(280));var t=e.stateNode;t&&(t=Gs(t),dd(e.stateNode,e.type,t))}}function qx(e){_i?Pi?Pi.push(e):Pi=[e]:_i=e}function Yx(){if(_i){var e=_i,t=Pi;if(Pi=_i=null,jm(e),t)for(e=0;e>>=0,e===0?32:31-(dA(e)/pA|0)|0}var kl=64,Ml=4194304;function Ka(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 Su(e,t){var r=e.pendingLanes;if(r===0)return 0;var n=0,i=e.suspendedLanes,a=e.pingedLanes,o=r&268435455;if(o!==0){var l=o&~i;l!==0?n=Ka(l):(a&=o,a!==0&&(n=Ka(a)))}else o=r&~i,o!==0?n=Ka(o):a!==0&&(n=Ka(a));if(n===0)return 0;if(t!==0&&t!==n&&!(t&i)&&(i=n&-n,a=t&-t,i>=a||i===16&&(a&4194240)!==0))return t;if(n&4&&(n|=r&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=n;0r;r++)t.push(e);return t}function dl(e,t,r){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-er(t),e[t]=r}function yA(e,t){var r=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var n=e.eventTimes;for(e=e.expirationTimes;0=Qa),Rm=" ",Bm=!1;function m1(e,t){switch(e){case"keyup":return VA.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function y1(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var ci=!1;function GA(e,t){switch(e){case"compositionend":return y1(t);case"keypress":return t.which!==32?null:(Bm=!0,Rm);case"textInput":return e=t.data,e===Rm&&Bm?null:e;default:return null}}function XA(e,t){if(ci)return e==="compositionend"||!Nh&&m1(e,t)?(e=h1(),uu=Ch=Gr=null,ci=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:r,offset:t-e};e=n}e:{for(;r;){if(r.nextSibling){r=r.nextSibling;break e}r=r.parentNode}r=void 0}r=Wm(r)}}function w1(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?w1(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function S1(){for(var e=window,t=gu();t instanceof e.HTMLIFrameElement;){try{var r=typeof t.contentWindow.location.href=="string"}catch{r=!1}if(r)e=t.contentWindow;else break;t=gu(e.document)}return t}function Ih(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 nE(e){var t=S1(),r=e.focusedElem,n=e.selectionRange;if(t!==r&&r&&r.ownerDocument&&w1(r.ownerDocument.documentElement,r)){if(n!==null&&Ih(r)){if(t=n.start,e=n.end,e===void 0&&(e=t),"selectionStart"in r)r.selectionStart=t,r.selectionEnd=Math.min(e,r.value.length);else if(e=(t=r.ownerDocument||document)&&t.defaultView||window,e.getSelection){e=e.getSelection();var i=r.textContent.length,a=Math.min(n.start,i);n=n.end===void 0?a:Math.min(n.end,i),!e.extend&&a>n&&(i=n,n=a,a=i),i=Hm(r,a);var o=Hm(r,n);i&&o&&(e.rangeCount!==1||e.anchorNode!==i.node||e.anchorOffset!==i.offset||e.focusNode!==o.node||e.focusOffset!==o.offset)&&(t=t.createRange(),t.setStart(i.node,i.offset),e.removeAllRanges(),a>n?(e.addRange(t),e.extend(o.node,o.offset)):(t.setEnd(o.node,o.offset),e.addRange(t)))}}for(t=[],e=r;e=e.parentNode;)e.nodeType===1&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof r.focus=="function"&&r.focus(),r=0;r=document.documentMode,fi=null,gd=null,Ja=null,bd=!1;function Vm(e,t,r){var n=r.window===r?r.document:r.nodeType===9?r:r.ownerDocument;bd||fi==null||fi!==gu(n)||(n=fi,"selectionStart"in n&&Ih(n)?n={start:n.selectionStart,end:n.selectionEnd}:(n=(n.ownerDocument&&n.ownerDocument.defaultView||window).getSelection(),n={anchorNode:n.anchorNode,anchorOffset:n.anchorOffset,focusNode:n.focusNode,focusOffset:n.focusOffset}),Ja&&yo(Ja,n)||(Ja=n,n=Pu(gd,"onSelect"),0hi||(e.current=Pd[hi],Pd[hi]=null,hi--)}function he(e,t){hi++,Pd[hi]=e.current,e.current=t}var cn={},it=dn(cn),vt=dn(!1),Fn=cn;function Ni(e,t){var r=e.type.contextTypes;if(!r)return cn;var n=e.stateNode;if(n&&n.__reactInternalMemoizedUnmaskedChildContext===t)return n.__reactInternalMemoizedMaskedChildContext;var i={},a;for(a in r)i[a]=t[a];return n&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=i),i}function mt(e){return e=e.childContextTypes,e!=null}function Eu(){be(vt),be(it)}function Zm(e,t,r){if(it.current!==cn)throw Error(F(168));he(it,t),he(vt,r)}function C1(e,t,r){var n=e.stateNode;if(t=t.childContextTypes,typeof n.getChildContext!="function")return r;n=n.getChildContext();for(var i in n)if(!(i in t))throw Error(F(108,ZP(e)||"Unknown",i));return Ae({},r,n)}function $u(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||cn,Fn=it.current,he(it,e),he(vt,vt.current),!0}function Jm(e,t,r){var n=e.stateNode;if(!n)throw Error(F(169));r?(e=C1(e,t,Fn),n.__reactInternalMemoizedMergedChildContext=e,be(vt),be(it),he(it,e)):be(vt),he(vt,r)}var br=null,Xs=!1,pf=!1;function k1(e){br===null?br=[e]:br.push(e)}function vE(e){Xs=!0,k1(e)}function pn(){if(!pf&&br!==null){pf=!0;var e=0,t=se;try{var r=br;for(se=1;e>=o,i-=o,xr=1<<32-er(t)+i|r<P?(A=O,O=null):A=O.sibling;var T=d(v,O,x[P],S);if(T===null){O===null&&(O=A);break}e&&O&&T.alternate===null&&t(v,O),h=a(T,h,P),w===null?g=T:w.sibling=T,w=T,O=A}if(P===x.length)return r(v,O),we&&On(v,P),g;if(O===null){for(;PP?(A=O,O=null):A=O.sibling;var $=d(v,O,T.value,S);if($===null){O===null&&(O=A);break}e&&O&&$.alternate===null&&t(v,O),h=a($,h,P),w===null?g=$:w.sibling=$,w=$,O=A}if(T.done)return r(v,O),we&&On(v,P),g;if(O===null){for(;!T.done;P++,T=x.next())T=c(v,T.value,S),T!==null&&(h=a(T,h,P),w===null?g=T:w.sibling=T,w=T);return we&&On(v,P),g}for(O=n(v,O);!T.done;P++,T=x.next())T=p(O,v,P,T.value,S),T!==null&&(e&&T.alternate!==null&&O.delete(T.key===null?P:T.key),h=a(T,h,P),w===null?g=T:w.sibling=T,w=T);return e&&O.forEach(function(M){return t(v,M)}),we&&On(v,P),g}function y(v,h,x,S){if(typeof x=="object"&&x!==null&&x.type===si&&x.key===null&&(x=x.props.children),typeof x=="object"&&x!==null){switch(x.$$typeof){case jl:e:{for(var g=x.key,w=h;w!==null;){if(w.key===g){if(g=x.type,g===si){if(w.tag===7){r(v,w.sibling),h=i(w,x.props.children),h.return=v,v=h;break e}}else if(w.elementType===g||typeof g=="object"&&g!==null&&g.$$typeof===Fr&&ry(g)===w.type){r(v,w.sibling),h=i(w,x.props),h.ref=Ca(v,w,x),h.return=v,v=h;break e}r(v,w);break}else t(v,w);w=w.sibling}x.type===si?(h=Ln(x.props.children,v.mode,S,x.key),h.return=v,v=h):(S=mu(x.type,x.key,x.props,null,v.mode,S),S.ref=Ca(v,h,x),S.return=v,v=S)}return o(v);case ui:e:{for(w=x.key;h!==null;){if(h.key===w)if(h.tag===4&&h.stateNode.containerInfo===x.containerInfo&&h.stateNode.implementation===x.implementation){r(v,h.sibling),h=i(h,x.children||[]),h.return=v,v=h;break e}else{r(v,h);break}else t(v,h);h=h.sibling}h=wf(x,v.mode,S),h.return=v,v=h}return o(v);case Fr:return w=x._init,y(v,h,w(x._payload),S)}if(Va(x))return b(v,h,x,S);if(Aa(x))return m(v,h,x,S);zl(v,x)}return typeof x=="string"&&x!==""||typeof x=="number"?(x=""+x,h!==null&&h.tag===6?(r(v,h.sibling),h=i(h,x),h.return=v,v=h):(r(v,h),h=xf(x,v.mode,S),h.return=v,v=h),o(v)):r(v,h)}return y}var Di=D1(!0),L1=D1(!1),Cu=dn(null),ku=null,yi=null,Bh=null;function zh(){Bh=yi=ku=null}function Uh(e){var t=Cu.current;be(Cu),e._currentValue=t}function $d(e,t,r){for(;e!==null;){var n=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,n!==null&&(n.childLanes|=t)):n!==null&&(n.childLanes&t)!==t&&(n.childLanes|=t),e===r)break;e=e.return}}function Ei(e,t){ku=e,Bh=yi=null,e=e.dependencies,e!==null&&e.firstContext!==null&&(e.lanes&t&&(pt=!0),e.firstContext=null)}function Ut(e){var t=e._currentValue;if(Bh!==e)if(e={context:e,memoizedValue:t,next:null},yi===null){if(ku===null)throw Error(F(308));yi=e,ku.dependencies={lanes:0,firstContext:e}}else yi=yi.next=e;return t}var jn=null;function Fh(e){jn===null?jn=[e]:jn.push(e)}function R1(e,t,r,n){var i=t.interleaved;return i===null?(r.next=r,Fh(t)):(r.next=i.next,i.next=r),t.interleaved=r,jr(e,n)}function jr(e,t){e.lanes|=t;var r=e.alternate;for(r!==null&&(r.lanes|=t),r=e,e=e.return;e!==null;)e.childLanes|=t,r=e.alternate,r!==null&&(r.childLanes|=t),r=e,e=e.return;return r.tag===3?r.stateNode:null}var Wr=!1;function Wh(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function B1(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 _r(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function rn(e,t,r){var n=e.updateQueue;if(n===null)return null;if(n=n.shared,ae&2){var i=n.pending;return i===null?t.next=t:(t.next=i.next,i.next=t),n.pending=t,jr(e,r)}return i=n.interleaved,i===null?(t.next=t,Fh(n)):(t.next=i.next,i.next=t),n.interleaved=t,jr(e,r)}function cu(e,t,r){if(t=t.updateQueue,t!==null&&(t=t.shared,(r&4194240)!==0)){var n=t.lanes;n&=e.pendingLanes,r|=n,t.lanes=r,$h(e,r)}}function ny(e,t){var r=e.updateQueue,n=e.alternate;if(n!==null&&(n=n.updateQueue,r===n)){var i=null,a=null;if(r=r.firstBaseUpdate,r!==null){do{var o={eventTime:r.eventTime,lane:r.lane,tag:r.tag,payload:r.payload,callback:r.callback,next:null};a===null?i=a=o:a=a.next=o,r=r.next}while(r!==null);a===null?i=a=t:a=a.next=t}else i=a=t;r={baseState:n.baseState,firstBaseUpdate:i,lastBaseUpdate:a,shared:n.shared,effects:n.effects},e.updateQueue=r;return}e=r.lastBaseUpdate,e===null?r.firstBaseUpdate=t:e.next=t,r.lastBaseUpdate=t}function Mu(e,t,r,n){var i=e.updateQueue;Wr=!1;var a=i.firstBaseUpdate,o=i.lastBaseUpdate,l=i.shared.pending;if(l!==null){i.shared.pending=null;var u=l,s=u.next;u.next=null,o===null?a=s:o.next=s,o=u;var f=e.alternate;f!==null&&(f=f.updateQueue,l=f.lastBaseUpdate,l!==o&&(l===null?f.firstBaseUpdate=s:l.next=s,f.lastBaseUpdate=u))}if(a!==null){var c=i.baseState;o=0,f=s=u=null,l=a;do{var d=l.lane,p=l.eventTime;if((n&d)===d){f!==null&&(f=f.next={eventTime:p,lane:0,tag:l.tag,payload:l.payload,callback:l.callback,next:null});e:{var b=e,m=l;switch(d=t,p=r,m.tag){case 1:if(b=m.payload,typeof b=="function"){c=b.call(p,c,d);break e}c=b;break e;case 3:b.flags=b.flags&-65537|128;case 0:if(b=m.payload,d=typeof b=="function"?b.call(p,c,d):b,d==null)break e;c=Ae({},c,d);break e;case 2:Wr=!0}}l.callback!==null&&l.lane!==0&&(e.flags|=64,d=i.effects,d===null?i.effects=[l]:d.push(l))}else p={eventTime:p,lane:d,tag:l.tag,payload:l.payload,callback:l.callback,next:null},f===null?(s=f=p,u=c):f=f.next=p,o|=d;if(l=l.next,l===null){if(l=i.shared.pending,l===null)break;d=l,l=d.next,d.next=null,i.lastBaseUpdate=d,i.shared.pending=null}}while(!0);if(f===null&&(u=c),i.baseState=u,i.firstBaseUpdate=s,i.lastBaseUpdate=f,t=i.shared.interleaved,t!==null){i=t;do o|=i.lane,i=i.next;while(i!==t)}else a===null&&(i.shared.lanes=0);Vn|=o,e.lanes=o,e.memoizedState=c}}function iy(e,t,r){if(e=t.effects,t.effects=null,e!==null)for(t=0;tr?r:4,e(!0);var n=vf.transition;vf.transition={};try{e(!1),t()}finally{se=r,vf.transition=n}}function rw(){return Ft().memoizedState}function bE(e,t,r){var n=an(e);if(r={lane:n,action:r,hasEagerState:!1,eagerState:null,next:null},nw(e))iw(t,r);else if(r=R1(e,t,r,n),r!==null){var i=lt();tr(r,e,n,i),aw(r,t,n)}}function xE(e,t,r){var n=an(e),i={lane:n,action:r,hasEagerState:!1,eagerState:null,next:null};if(nw(e))iw(t,i);else{var a=e.alternate;if(e.lanes===0&&(a===null||a.lanes===0)&&(a=t.lastRenderedReducer,a!==null))try{var o=t.lastRenderedState,l=a(o,r);if(i.hasEagerState=!0,i.eagerState=l,nr(l,o)){var u=t.interleaved;u===null?(i.next=i,Fh(t)):(i.next=u.next,u.next=i),t.interleaved=i;return}}catch{}finally{}r=R1(e,t,i,n),r!==null&&(i=lt(),tr(r,e,n,i),aw(r,t,n))}}function nw(e){var t=e.alternate;return e===Pe||t!==null&&t===Pe}function iw(e,t){eo=Iu=!0;var r=e.pending;r===null?t.next=t:(t.next=r.next,r.next=t),e.pending=t}function aw(e,t,r){if(r&4194240){var n=t.lanes;n&=e.pendingLanes,r|=n,t.lanes=r,$h(e,r)}}var Du={readContext:Ut,useCallback:Je,useContext:Je,useEffect:Je,useImperativeHandle:Je,useInsertionEffect:Je,useLayoutEffect:Je,useMemo:Je,useReducer:Je,useRef:Je,useState:Je,useDebugValue:Je,useDeferredValue:Je,useTransition:Je,useMutableSource:Je,useSyncExternalStore:Je,useId:Je,unstable_isNewReconciler:!1},wE={readContext:Ut,useCallback:function(e,t){return or().memoizedState=[e,t===void 0?null:t],e},useContext:Ut,useEffect:oy,useImperativeHandle:function(e,t,r){return r=r!=null?r.concat([e]):null,du(4194308,4,Q1.bind(null,t,e),r)},useLayoutEffect:function(e,t){return du(4194308,4,e,t)},useInsertionEffect:function(e,t){return du(4,2,e,t)},useMemo:function(e,t){var r=or();return t=t===void 0?null:t,e=e(),r.memoizedState=[e,t],e},useReducer:function(e,t,r){var n=or();return t=r!==void 0?r(t):t,n.memoizedState=n.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},n.queue=e,e=e.dispatch=bE.bind(null,Pe,e),[n.memoizedState,e]},useRef:function(e){var t=or();return e={current:e},t.memoizedState=e},useState:ay,useDebugValue:Qh,useDeferredValue:function(e){return or().memoizedState=e},useTransition:function(){var e=ay(!1),t=e[0];return e=gE.bind(null,e[1]),or().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,r){var n=Pe,i=or();if(we){if(r===void 0)throw Error(F(407));r=r()}else{if(r=t(),Ke===null)throw Error(F(349));Hn&30||W1(n,t,r)}i.memoizedState=r;var a={value:r,getSnapshot:t};return i.queue=a,oy(V1.bind(null,n,a,e),[e]),n.flags|=2048,Po(9,H1.bind(null,n,a,r,t),void 0,null),r},useId:function(){var e=or(),t=Ke.identifierPrefix;if(we){var r=wr,n=xr;r=(n&~(1<<32-er(n)-1)).toString(32)+r,t=":"+t+"R"+r,r=Oo++,0<\/script>",e=e.removeChild(e.firstChild)):typeof n.is=="string"?e=o.createElement(r,{is:n.is}):(e=o.createElement(r),r==="select"&&(o=e,n.multiple?o.multiple=!0:n.size&&(o.size=n.size))):e=o.createElementNS(e,r),e[ur]=t,e[xo]=n,vw(e,t,!1,!1),t.stateNode=e;e:{switch(o=cd(r,n),r){case"dialog":me("cancel",e),me("close",e),i=n;break;case"iframe":case"object":case"embed":me("load",e),i=n;break;case"video":case"audio":for(i=0;iBi&&(t.flags|=128,n=!0,ka(a,!1),t.lanes=4194304)}else{if(!n)if(e=Nu(o),e!==null){if(t.flags|=128,n=!0,r=e.updateQueue,r!==null&&(t.updateQueue=r,t.flags|=4),ka(a,!0),a.tail===null&&a.tailMode==="hidden"&&!o.alternate&&!we)return et(t),null}else 2*Ce()-a.renderingStartTime>Bi&&r!==1073741824&&(t.flags|=128,n=!0,ka(a,!1),t.lanes=4194304);a.isBackwards?(o.sibling=t.child,t.child=o):(r=a.last,r!==null?r.sibling=o:t.child=o,a.last=o)}return a.tail!==null?(t=a.tail,a.rendering=t,a.tail=t.sibling,a.renderingStartTime=Ce(),t.sibling=null,r=Oe.current,he(Oe,n?r&1|2:r&1),t):(et(t),null);case 22:case 23:return nv(),n=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==n&&(t.flags|=8192),n&&t.mode&1?xt&1073741824&&(et(t),t.subtreeFlags&6&&(t.flags|=8192)):et(t),null;case 24:return null;case 25:return null}throw Error(F(156,t.tag))}function jE(e,t){switch(Lh(t),t.tag){case 1:return mt(t.type)&&Eu(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return Li(),be(vt),be(it),Kh(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 5:return Vh(t),null;case 13:if(be(Oe),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(F(340));Ii()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return be(Oe),null;case 4:return Li(),null;case 10:return Uh(t.type._context),null;case 22:case 23:return nv(),null;case 24:return null;default:return null}}var Fl=!1,rt=!1,TE=typeof WeakSet=="function"?WeakSet:Set,G=null;function gi(e,t){var r=e.ref;if(r!==null)if(typeof r=="function")try{r(null)}catch(n){$e(e,t,n)}else r.current=null}function Ld(e,t,r){try{r()}catch(n){$e(e,t,n)}}var yy=!1;function CE(e,t){if(xd=Ou,e=S1(),Ih(e)){if("selectionStart"in e)var r={start:e.selectionStart,end:e.selectionEnd};else e:{r=(r=e.ownerDocument)&&r.defaultView||window;var n=r.getSelection&&r.getSelection();if(n&&n.rangeCount!==0){r=n.anchorNode;var i=n.anchorOffset,a=n.focusNode;n=n.focusOffset;try{r.nodeType,a.nodeType}catch{r=null;break e}var o=0,l=-1,u=-1,s=0,f=0,c=e,d=null;t:for(;;){for(var p;c!==r||i!==0&&c.nodeType!==3||(l=o+i),c!==a||n!==0&&c.nodeType!==3||(u=o+n),c.nodeType===3&&(o+=c.nodeValue.length),(p=c.firstChild)!==null;)d=c,c=p;for(;;){if(c===e)break t;if(d===r&&++s===i&&(l=o),d===a&&++f===n&&(u=o),(p=c.nextSibling)!==null)break;c=d,d=c.parentNode}c=p}r=l===-1||u===-1?null:{start:l,end:u}}else r=null}r=r||{start:0,end:0}}else r=null;for(wd={focusedElem:e,selectionRange:r},Ou=!1,G=t;G!==null;)if(t=G,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,G=e;else for(;G!==null;){t=G;try{var b=t.alternate;if(t.flags&1024)switch(t.tag){case 0:case 11:case 15:break;case 1:if(b!==null){var m=b.memoizedProps,y=b.memoizedState,v=t.stateNode,h=v.getSnapshotBeforeUpdate(t.elementType===t.type?m:Xt(t.type,m),y);v.__reactInternalSnapshotBeforeUpdate=h}break;case 3:var x=t.stateNode.containerInfo;x.nodeType===1?x.textContent="":x.nodeType===9&&x.documentElement&&x.removeChild(x.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(F(163))}}catch(S){$e(t,t.return,S)}if(e=t.sibling,e!==null){e.return=t.return,G=e;break}G=t.return}return b=yy,yy=!1,b}function to(e,t,r){var n=t.updateQueue;if(n=n!==null?n.lastEffect:null,n!==null){var i=n=n.next;do{if((i.tag&e)===e){var a=i.destroy;i.destroy=void 0,a!==void 0&&Ld(t,r,a)}i=i.next}while(i!==n)}}function Qs(e,t){if(t=t.updateQueue,t=t!==null?t.lastEffect:null,t!==null){var r=t=t.next;do{if((r.tag&e)===e){var n=r.create;r.destroy=n()}r=r.next}while(r!==t)}}function Rd(e){var t=e.ref;if(t!==null){var r=e.stateNode;switch(e.tag){case 5:e=r;break;default:e=r}typeof t=="function"?t(e):t.current=e}}function gw(e){var t=e.alternate;t!==null&&(e.alternate=null,gw(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[ur],delete t[xo],delete t[_d],delete t[pE],delete t[hE])),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 bw(e){return e.tag===5||e.tag===3||e.tag===4}function gy(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||bw(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 Bd(e,t,r){var n=e.tag;if(n===5||n===6)e=e.stateNode,t?r.nodeType===8?r.parentNode.insertBefore(e,t):r.insertBefore(e,t):(r.nodeType===8?(t=r.parentNode,t.insertBefore(e,r)):(t=r,t.appendChild(e)),r=r._reactRootContainer,r!=null||t.onclick!==null||(t.onclick=Au));else if(n!==4&&(e=e.child,e!==null))for(Bd(e,t,r),e=e.sibling;e!==null;)Bd(e,t,r),e=e.sibling}function zd(e,t,r){var n=e.tag;if(n===5||n===6)e=e.stateNode,t?r.insertBefore(e,t):r.appendChild(e);else if(n!==4&&(e=e.child,e!==null))for(zd(e,t,r),e=e.sibling;e!==null;)zd(e,t,r),e=e.sibling}var qe=null,qt=!1;function zr(e,t,r){for(r=r.child;r!==null;)xw(e,t,r),r=r.sibling}function xw(e,t,r){if(fr&&typeof fr.onCommitFiberUnmount=="function")try{fr.onCommitFiberUnmount(Ws,r)}catch{}switch(r.tag){case 5:rt||gi(r,t);case 6:var n=qe,i=qt;qe=null,zr(e,t,r),qe=n,qt=i,qe!==null&&(qt?(e=qe,r=r.stateNode,e.nodeType===8?e.parentNode.removeChild(r):e.removeChild(r)):qe.removeChild(r.stateNode));break;case 18:qe!==null&&(qt?(e=qe,r=r.stateNode,e.nodeType===8?df(e.parentNode,r):e.nodeType===1&&df(e,r),vo(e)):df(qe,r.stateNode));break;case 4:n=qe,i=qt,qe=r.stateNode.containerInfo,qt=!0,zr(e,t,r),qe=n,qt=i;break;case 0:case 11:case 14:case 15:if(!rt&&(n=r.updateQueue,n!==null&&(n=n.lastEffect,n!==null))){i=n=n.next;do{var a=i,o=a.destroy;a=a.tag,o!==void 0&&(a&2||a&4)&&Ld(r,t,o),i=i.next}while(i!==n)}zr(e,t,r);break;case 1:if(!rt&&(gi(r,t),n=r.stateNode,typeof n.componentWillUnmount=="function"))try{n.props=r.memoizedProps,n.state=r.memoizedState,n.componentWillUnmount()}catch(l){$e(r,t,l)}zr(e,t,r);break;case 21:zr(e,t,r);break;case 22:r.mode&1?(rt=(n=rt)||r.memoizedState!==null,zr(e,t,r),rt=n):zr(e,t,r);break;default:zr(e,t,r)}}function by(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var r=e.stateNode;r===null&&(r=e.stateNode=new TE),t.forEach(function(n){var i=zE.bind(null,e,n);r.has(n)||(r.add(n),n.then(i,i))})}}function Kt(e,t){var r=t.deletions;if(r!==null)for(var n=0;ni&&(i=o),n&=~a}if(n=i,n=Ce()-n,n=(120>n?120:480>n?480:1080>n?1080:1920>n?1920:3e3>n?3e3:4320>n?4320:1960*ME(n/1960))-n,10e?16:e,Xr===null)var n=!1;else{if(e=Xr,Xr=null,Bu=0,ae&6)throw Error(F(331));var i=ae;for(ae|=4,G=e.current;G!==null;){var a=G,o=a.child;if(G.flags&16){var l=a.deletions;if(l!==null){for(var u=0;uCe()-tv?Dn(e,0):ev|=r),yt(e,t)}function $w(e,t){t===0&&(e.mode&1?(t=Ml,Ml<<=1,!(Ml&130023424)&&(Ml=4194304)):t=1);var r=lt();e=jr(e,t),e!==null&&(dl(e,t,r),yt(e,r))}function BE(e){var t=e.memoizedState,r=0;t!==null&&(r=t.retryLane),$w(e,r)}function zE(e,t){var r=0;switch(e.tag){case 13:var n=e.stateNode,i=e.memoizedState;i!==null&&(r=i.retryLane);break;case 19:n=e.stateNode;break;default:throw Error(F(314))}n!==null&&n.delete(t),$w(e,r)}var jw;jw=function(e,t,r){if(e!==null)if(e.memoizedProps!==t.pendingProps||vt.current)pt=!0;else{if(!(e.lanes&r)&&!(t.flags&128))return pt=!1,EE(e,t,r);pt=!!(e.flags&131072)}else pt=!1,we&&t.flags&1048576&&M1(t,Tu,t.index);switch(t.lanes=0,t.tag){case 2:var n=t.type;pu(e,t),e=t.pendingProps;var i=Ni(t,it.current);Ei(t,r),i=Xh(null,t,n,e,i,r);var a=qh();return t.flags|=1,typeof i=="object"&&i!==null&&typeof i.render=="function"&&i.$$typeof===void 0?(t.tag=1,t.memoizedState=null,t.updateQueue=null,mt(n)?(a=!0,$u(t)):a=!1,t.memoizedState=i.state!==null&&i.state!==void 0?i.state:null,Wh(t),i.updater=Ys,t.stateNode=i,i._reactInternals=t,Td(t,n,e,r),t=Md(null,t,n,!0,a,r)):(t.tag=0,we&&a&&Dh(t),at(null,t,i,r),t=t.child),t;case 16:n=t.elementType;e:{switch(pu(e,t),e=t.pendingProps,i=n._init,n=i(n._payload),t.type=n,i=t.tag=FE(n),e=Xt(n,e),i){case 0:t=kd(null,t,n,e,r);break e;case 1:t=hy(null,t,n,e,r);break e;case 11:t=dy(null,t,n,e,r);break e;case 14:t=py(null,t,n,Xt(n.type,e),r);break e}throw Error(F(306,n,""))}return t;case 0:return n=t.type,i=t.pendingProps,i=t.elementType===n?i:Xt(n,i),kd(e,t,n,i,r);case 1:return n=t.type,i=t.pendingProps,i=t.elementType===n?i:Xt(n,i),hy(e,t,n,i,r);case 3:e:{if(dw(t),e===null)throw Error(F(387));n=t.pendingProps,a=t.memoizedState,i=a.element,B1(e,t),Mu(t,n,null,r);var o=t.memoizedState;if(n=o.element,a.isDehydrated)if(a={element:n,isDehydrated:!1,cache:o.cache,pendingSuspenseBoundaries:o.pendingSuspenseBoundaries,transitions:o.transitions},t.updateQueue.baseState=a,t.memoizedState=a,t.flags&256){i=Ri(Error(F(423)),t),t=vy(e,t,n,r,i);break e}else if(n!==i){i=Ri(Error(F(424)),t),t=vy(e,t,n,r,i);break e}else for(Ot=tn(t.stateNode.containerInfo.firstChild),_t=t,we=!0,Qt=null,r=L1(t,null,n,r),t.child=r;r;)r.flags=r.flags&-3|4096,r=r.sibling;else{if(Ii(),n===i){t=Tr(e,t,r);break e}at(e,t,n,r)}t=t.child}return t;case 5:return z1(t),e===null&&Ed(t),n=t.type,i=t.pendingProps,a=e!==null?e.memoizedProps:null,o=i.children,Sd(n,i)?o=null:a!==null&&Sd(n,a)&&(t.flags|=32),fw(e,t),at(e,t,o,r),t.child;case 6:return e===null&&Ed(t),null;case 13:return pw(e,t,r);case 4:return Hh(t,t.stateNode.containerInfo),n=t.pendingProps,e===null?t.child=Di(t,null,n,r):at(e,t,n,r),t.child;case 11:return n=t.type,i=t.pendingProps,i=t.elementType===n?i:Xt(n,i),dy(e,t,n,i,r);case 7:return at(e,t,t.pendingProps,r),t.child;case 8:return at(e,t,t.pendingProps.children,r),t.child;case 12:return at(e,t,t.pendingProps.children,r),t.child;case 10:e:{if(n=t.type._context,i=t.pendingProps,a=t.memoizedProps,o=i.value,he(Cu,n._currentValue),n._currentValue=o,a!==null)if(nr(a.value,o)){if(a.children===i.children&&!vt.current){t=Tr(e,t,r);break e}}else for(a=t.child,a!==null&&(a.return=t);a!==null;){var l=a.dependencies;if(l!==null){o=a.child;for(var u=l.firstContext;u!==null;){if(u.context===n){if(a.tag===1){u=_r(-1,r&-r),u.tag=2;var s=a.updateQueue;if(s!==null){s=s.shared;var f=s.pending;f===null?u.next=u:(u.next=f.next,f.next=u),s.pending=u}}a.lanes|=r,u=a.alternate,u!==null&&(u.lanes|=r),$d(a.return,r,t),l.lanes|=r;break}u=u.next}}else if(a.tag===10)o=a.type===t.type?null:a.child;else if(a.tag===18){if(o=a.return,o===null)throw Error(F(341));o.lanes|=r,l=o.alternate,l!==null&&(l.lanes|=r),$d(o,r,t),o=a.sibling}else o=a.child;if(o!==null)o.return=a;else for(o=a;o!==null;){if(o===t){o=null;break}if(a=o.sibling,a!==null){a.return=o.return,o=a;break}o=o.return}a=o}at(e,t,i.children,r),t=t.child}return t;case 9:return i=t.type,n=t.pendingProps.children,Ei(t,r),i=Ut(i),n=n(i),t.flags|=1,at(e,t,n,r),t.child;case 14:return n=t.type,i=Xt(n,t.pendingProps),i=Xt(n.type,i),py(e,t,n,i,r);case 15:return sw(e,t,t.type,t.pendingProps,r);case 17:return n=t.type,i=t.pendingProps,i=t.elementType===n?i:Xt(n,i),pu(e,t),t.tag=1,mt(n)?(e=!0,$u(t)):e=!1,Ei(t,r),ow(t,n,i),Td(t,n,i,r),Md(null,t,n,!0,e,r);case 19:return hw(e,t,r);case 22:return cw(e,t,r)}throw Error(F(156,t.tag))};function Tw(e,t){return n1(e,t)}function UE(e,t,r,n){this.tag=e,this.key=r,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=n,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Lt(e,t,r,n){return new UE(e,t,r,n)}function av(e){return e=e.prototype,!(!e||!e.isReactComponent)}function FE(e){if(typeof e=="function")return av(e)?1:0;if(e!=null){if(e=e.$$typeof,e===_h)return 11;if(e===Ph)return 14}return 2}function on(e,t){var r=e.alternate;return r===null?(r=Lt(e.tag,t,e.key,e.mode),r.elementType=e.elementType,r.type=e.type,r.stateNode=e.stateNode,r.alternate=e,e.alternate=r):(r.pendingProps=t,r.type=e.type,r.flags=0,r.subtreeFlags=0,r.deletions=null),r.flags=e.flags&14680064,r.childLanes=e.childLanes,r.lanes=e.lanes,r.child=e.child,r.memoizedProps=e.memoizedProps,r.memoizedState=e.memoizedState,r.updateQueue=e.updateQueue,t=e.dependencies,r.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},r.sibling=e.sibling,r.index=e.index,r.ref=e.ref,r}function mu(e,t,r,n,i,a){var o=2;if(n=e,typeof e=="function")av(e)&&(o=1);else if(typeof e=="string")o=5;else e:switch(e){case si:return Ln(r.children,i,a,t);case Oh:o=8,i|=8;break;case ed:return e=Lt(12,r,t,i|2),e.elementType=ed,e.lanes=a,e;case td:return e=Lt(13,r,t,i),e.elementType=td,e.lanes=a,e;case rd:return e=Lt(19,r,t,i),e.elementType=rd,e.lanes=a,e;case zx:return Js(r,i,a,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case Rx:o=10;break e;case Bx:o=9;break e;case _h:o=11;break e;case Ph:o=14;break e;case Fr:o=16,n=null;break e}throw Error(F(130,e==null?e:typeof e,""))}return t=Lt(o,r,t,i),t.elementType=e,t.type=n,t.lanes=a,t}function Ln(e,t,r,n){return e=Lt(7,e,n,t),e.lanes=r,e}function Js(e,t,r,n){return e=Lt(22,e,n,t),e.elementType=zx,e.lanes=r,e.stateNode={isHidden:!1},e}function xf(e,t,r){return e=Lt(6,e,null,t),e.lanes=r,e}function wf(e,t,r){return t=Lt(4,e.children!==null?e.children:[],e.key,t),t.lanes=r,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function WE(e,t,r,n,i){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=ef(0),this.expirationTimes=ef(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=ef(0),this.identifierPrefix=n,this.onRecoverableError=i,this.mutableSourceEagerHydrationData=null}function ov(e,t,r,n,i,a,o,l,u){return e=new WE(e,t,r,l,u),t===1?(t=1,a===!0&&(t|=8)):t=0,a=Lt(3,null,null,t),e.current=a,a.stateNode=e,a.memoizedState={element:n,isDehydrated:r,cache:null,transitions:null,pendingSuspenseBoundaries:null},Wh(a),e}function HE(e,t,r){var n=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(Nw)}catch(e){console.error(e)}}Nw(),Nx.exports=Et;var qE=Nx.exports,Ey=qE;Zf.createRoot=Ey.createRoot,Zf.hydrateRoot=Ey.hydrateRoot;/** + * @remix-run/router v1.23.1 + * + * Copyright (c) Remix Software Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE.md file in the root directory of this source tree. + * + * @license MIT + */function Eo(){return Eo=Object.assign?Object.assign.bind():function(e){for(var t=1;t"u")throw new Error(t)}function cv(e,t){if(!e){typeof console<"u"&&console.warn(t);try{throw new Error(t)}catch{}}}function QE(){return Math.random().toString(36).substr(2,8)}function jy(e,t){return{usr:e.state,key:e.key,idx:t}}function Vd(e,t,r,n){return r===void 0&&(r=null),Eo({pathname:typeof e=="string"?e:e.pathname,search:"",hash:""},typeof t=="string"?fa(t):t,{state:r,key:t&&t.key||n||QE()})}function Iw(e){let{pathname:t="/",search:r="",hash:n=""}=e;return r&&r!=="?"&&(t+=r.charAt(0)==="?"?r:"?"+r),n&&n!=="#"&&(t+=n.charAt(0)==="#"?n:"#"+n),t}function fa(e){let t={};if(e){let r=e.indexOf("#");r>=0&&(t.hash=e.substr(r),e=e.substr(0,r));let n=e.indexOf("?");n>=0&&(t.search=e.substr(n),e=e.substr(0,n)),e&&(t.pathname=e)}return t}function ZE(e,t,r,n){n===void 0&&(n={});let{window:i=document.defaultView,v5Compat:a=!1}=n,o=i.history,l=qr.Pop,u=null,s=f();s==null&&(s=0,o.replaceState(Eo({},o.state,{idx:s}),""));function f(){return(o.state||{idx:null}).idx}function c(){l=qr.Pop;let y=f(),v=y==null?null:y-s;s=y,u&&u({action:l,location:m.location,delta:v})}function d(y,v){l=qr.Push;let h=Vd(m.location,y,v);s=f()+1;let x=jy(h,s),S=m.createHref(h);try{o.pushState(x,"",S)}catch(g){if(g instanceof DOMException&&g.name==="DataCloneError")throw g;i.location.assign(S)}a&&u&&u({action:l,location:m.location,delta:1})}function p(y,v){l=qr.Replace;let h=Vd(m.location,y,v);s=f();let x=jy(h,s),S=m.createHref(h);o.replaceState(x,"",S),a&&u&&u({action:l,location:m.location,delta:0})}function b(y){let v=i.location.origin!=="null"?i.location.origin:i.location.href,h=typeof y=="string"?y:Iw(y);return h=h.replace(/ $/,"%20"),Ne(v,"No window.location.(origin|href) available to create URL for href: "+h),new URL(h,v)}let m={get action(){return l},get location(){return e(i,o)},listen(y){if(u)throw new Error("A history only accepts one active listener");return i.addEventListener($y,c),u=y,()=>{i.removeEventListener($y,c),u=null}},createHref(y){return t(i,y)},createURL:b,encodeLocation(y){let v=b(y);return{pathname:v.pathname,search:v.search,hash:v.hash}},push:d,replace:p,go(y){return o.go(y)}};return m}var Ty;(function(e){e.data="data",e.deferred="deferred",e.redirect="redirect",e.error="error"})(Ty||(Ty={}));function JE(e,t,r){return r===void 0&&(r="/"),e$(e,t,r)}function e$(e,t,r,n){let i=typeof t=="string"?fa(t):t,a=Rw(i.pathname||"/",r);if(a==null)return null;let o=Dw(e);t$(o);let l=null;for(let u=0;l==null&&u{let u={relativePath:l===void 0?a.path||"":l,caseSensitive:a.caseSensitive===!0,childrenIndex:o,route:a};u.relativePath.startsWith("/")&&(Ne(u.relativePath.startsWith(n),'Absolute route path "'+u.relativePath+'" nested under path '+('"'+n+'" is not valid. An absolute child route path ')+"must start with the combined path of all its parent routes."),u.relativePath=u.relativePath.slice(n.length));let s=Rn([n,u.relativePath]),f=r.concat(u);a.children&&a.children.length>0&&(Ne(a.index!==!0,"Index routes must not have child routes. Please remove "+('all child routes from route path "'+s+'".')),Dw(a.children,t,f,s)),!(a.path==null&&!a.index)&&t.push({path:s,score:u$(s,a.index),routesMeta:f})};return e.forEach((a,o)=>{var l;if(a.path===""||!((l=a.path)!=null&&l.includes("?")))i(a,o);else for(let u of Lw(a.path))i(a,o,u)}),t}function Lw(e){let t=e.split("/");if(t.length===0)return[];let[r,...n]=t,i=r.endsWith("?"),a=r.replace(/\?$/,"");if(n.length===0)return i?[a,""]:[a];let o=Lw(n.join("/")),l=[];return l.push(...o.map(u=>u===""?a:[a,u].join("/"))),i&&l.push(...o),l.map(u=>e.startsWith("/")&&u===""?"/":u)}function t$(e){e.sort((t,r)=>t.score!==r.score?r.score-t.score:s$(t.routesMeta.map(n=>n.childrenIndex),r.routesMeta.map(n=>n.childrenIndex)))}const r$=/^:[\w-]+$/,n$=3,i$=2,a$=1,o$=10,l$=-2,Cy=e=>e==="*";function u$(e,t){let r=e.split("/"),n=r.length;return r.some(Cy)&&(n+=l$),t&&(n+=i$),r.filter(i=>!Cy(i)).reduce((i,a)=>i+(r$.test(a)?n$:a===""?a$:o$),n)}function s$(e,t){return e.length===t.length&&e.slice(0,-1).every((n,i)=>n===t[i])?e[e.length-1]-t[t.length-1]:0}function c$(e,t,r){let{routesMeta:n}=e,i={},a="/",o=[];for(let l=0;l{let{paramName:d,isOptional:p}=f;if(d==="*"){let m=l[c]||"";o=a.slice(0,a.length-m.length).replace(/(.)\/+$/,"$1")}const b=l[c];return p&&!b?s[d]=void 0:s[d]=(b||"").replace(/%2F/g,"/"),s},{}),pathname:a,pathnameBase:o,pattern:e}}function d$(e,t,r){t===void 0&&(t=!1),r===void 0&&(r=!0),cv(e==="*"||!e.endsWith("*")||e.endsWith("/*"),'Route path "'+e+'" will be treated as if it were '+('"'+e.replace(/\*$/,"/*")+'" because the `*` character must ')+"always follow a `/` in the pattern. To get rid of this warning, "+('please change the route path to "'+e.replace(/\*$/,"/*")+'".'));let n=[],i="^"+e.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(o,l,u)=>(n.push({paramName:l,isOptional:u!=null}),u?"/?([^\\/]+)?":"/([^\\/]+)"));return e.endsWith("*")?(n.push({paramName:"*"}),i+=e==="*"||e==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):r?i+="\\/*$":e!==""&&e!=="/"&&(i+="(?:(?=\\/|$))"),[new RegExp(i,t?void 0:"i"),n]}function p$(e){try{return e.split("/").map(t=>decodeURIComponent(t).replace(/\//g,"%2F")).join("/")}catch(t){return cv(!1,'The URL path "'+e+'" could not be decoded because it is is a malformed URL segment. This is probably due to a bad percent '+("encoding ("+t+").")),e}}function Rw(e,t){if(t==="/")return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let r=t.endsWith("/")?t.length-1:t.length,n=e.charAt(r);return n&&n!=="/"?null:e.slice(r)||"/"}const h$=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,v$=e=>h$.test(e);function m$(e,t){t===void 0&&(t="/");let{pathname:r,search:n="",hash:i=""}=typeof e=="string"?fa(e):e,a;if(r)if(v$(r))a=r;else{if(r.includes("//")){let o=r;r=r.replace(/\/\/+/g,"/"),cv(!1,"Pathnames cannot have embedded double slashes - normalizing "+(o+" -> "+r))}r.startsWith("/")?a=ky(r.substring(1),"/"):a=ky(r,t)}else a=t;return{pathname:a,search:b$(n),hash:x$(i)}}function ky(e,t){let r=t.replace(/\/+$/,"").split("/");return e.split("/").forEach(i=>{i===".."?r.length>1&&r.pop():i!=="."&&r.push(i)}),r.length>1?r.join("/"):"/"}function Sf(e,t,r,n){return"Cannot include a '"+e+"' character in a manually specified "+("`to."+t+"` field ["+JSON.stringify(n)+"]. Please separate it out to the ")+("`to."+r+"` field. Alternatively you may provide the full path as ")+'a string in and the router will parse it for you.'}function y$(e){return e.filter((t,r)=>r===0||t.route.path&&t.route.path.length>0)}function Bw(e,t){let r=y$(e);return t?r.map((n,i)=>i===r.length-1?n.pathname:n.pathnameBase):r.map(n=>n.pathnameBase)}function zw(e,t,r,n){n===void 0&&(n=!1);let i;typeof e=="string"?i=fa(e):(i=Eo({},e),Ne(!i.pathname||!i.pathname.includes("?"),Sf("?","pathname","search",i)),Ne(!i.pathname||!i.pathname.includes("#"),Sf("#","pathname","hash",i)),Ne(!i.search||!i.search.includes("#"),Sf("#","search","hash",i)));let a=e===""||i.pathname==="",o=a?"/":i.pathname,l;if(o==null)l=r;else{let c=t.length-1;if(!n&&o.startsWith("..")){let d=o.split("/");for(;d[0]==="..";)d.shift(),c-=1;i.pathname=d.join("/")}l=c>=0?t[c]:"/"}let u=m$(i,l),s=o&&o!=="/"&&o.endsWith("/"),f=(a||o===".")&&r.endsWith("/");return!u.pathname.endsWith("/")&&(s||f)&&(u.pathname+="/"),u}const Rn=e=>e.join("/").replace(/\/\/+/g,"/"),g$=e=>e.replace(/\/+$/,"").replace(/^\/*/,"/"),b$=e=>!e||e==="?"?"":e.startsWith("?")?e:"?"+e,x$=e=>!e||e==="#"?"":e.startsWith("#")?e:"#"+e;function w$(e){return e!=null&&typeof e.status=="number"&&typeof e.statusText=="string"&&typeof e.internal=="boolean"&&"data"in e}const Uw=["post","put","patch","delete"];new Set(Uw);const S$=["get",...Uw];new Set(S$);/** + * React Router v6.30.2 + * + * Copyright (c) Remix Software Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE.md file in the root directory of this source tree. + * + * @license MIT + */function $o(){return $o=Object.assign?Object.assign.bind():function(e){for(var t=1;t{l.current=!0}),E.useCallback(function(s,f){if(f===void 0&&(f={}),!l.current)return;if(typeof s=="number"){n.go(s);return}let c=zw(s,JSON.parse(o),a,f.relative==="path");e==null&&t!=="/"&&(c.pathname=c.pathname==="/"?t:Rn([t,c.pathname])),(f.replace?n.replace:n.push)(c,f.state,f)},[t,n,o,a,e])}function P$(){let{matches:e}=E.useContext(hn),t=e[e.length-1];return t?t.params:{}}function A$(e,t){return E$(e,t)}function E$(e,t,r,n){yl()||Ne(!1);let{navigator:i}=E.useContext(ml),{matches:a}=E.useContext(hn),o=a[a.length-1],l=o?o.params:{};o&&o.pathname;let u=o?o.pathnameBase:"/";o&&o.route;let s=dv(),f;if(t){var c;let y=typeof t=="string"?fa(t):t;u==="/"||(c=y.pathname)!=null&&c.startsWith(u)||Ne(!1),f=y}else f=s;let d=f.pathname||"/",p=d;if(u!=="/"){let y=u.replace(/^\//,"").split("/");p="/"+d.replace(/^\//,"").split("/").slice(y.length).join("/")}let b=JE(e,{pathname:p}),m=k$(b&&b.map(y=>Object.assign({},y,{params:Object.assign({},l,y.params),pathname:Rn([u,i.encodeLocation?i.encodeLocation(y.pathname).pathname:y.pathname]),pathnameBase:y.pathnameBase==="/"?u:Rn([u,i.encodeLocation?i.encodeLocation(y.pathnameBase).pathname:y.pathnameBase])})),a,r,n);return t&&m?E.createElement(ic.Provider,{value:{location:$o({pathname:"/",search:"",hash:"",state:null,key:"default"},f),navigationType:qr.Pop}},m):m}function $$(){let e=D$(),t=w$(e)?e.status+" "+e.statusText:e instanceof Error?e.message:JSON.stringify(e),r=e instanceof Error?e.stack:null,i={padding:"0.5rem",backgroundColor:"rgba(200,200,200, 0.5)"};return E.createElement(E.Fragment,null,E.createElement("h2",null,"Unexpected Application Error!"),E.createElement("h3",{style:{fontStyle:"italic"}},t),r?E.createElement("pre",{style:i},r):null,null)}const j$=E.createElement($$,null);class T$ extends E.Component{constructor(t){super(t),this.state={location:t.location,revalidation:t.revalidation,error:t.error}}static getDerivedStateFromError(t){return{error:t}}static getDerivedStateFromProps(t,r){return r.location!==t.location||r.revalidation!=="idle"&&t.revalidation==="idle"?{error:t.error,location:t.location,revalidation:t.revalidation}:{error:t.error!==void 0?t.error:r.error,location:r.location,revalidation:t.revalidation||r.revalidation}}componentDidCatch(t,r){console.error("React Router caught the following error during render",t,r)}render(){return this.state.error!==void 0?E.createElement(hn.Provider,{value:this.props.routeContext},E.createElement(Fw.Provider,{value:this.state.error,children:this.props.component})):this.props.children}}function C$(e){let{routeContext:t,match:r,children:n}=e,i=E.useContext(fv);return i&&i.static&&i.staticContext&&(r.route.errorElement||r.route.ErrorBoundary)&&(i.staticContext._deepestRenderedBoundaryId=r.route.id),E.createElement(hn.Provider,{value:t},n)}function k$(e,t,r,n){var i;if(t===void 0&&(t=[]),r===void 0&&(r=null),n===void 0&&(n=null),e==null){var a;if(!r)return null;if(r.errors)e=r.matches;else if((a=n)!=null&&a.v7_partialHydration&&t.length===0&&!r.initialized&&r.matches.length>0)e=r.matches;else return null}let o=e,l=(i=r)==null?void 0:i.errors;if(l!=null){let f=o.findIndex(c=>c.route.id&&(l==null?void 0:l[c.route.id])!==void 0);f>=0||Ne(!1),o=o.slice(0,Math.min(o.length,f+1))}let u=!1,s=-1;if(r&&n&&n.v7_partialHydration)for(let f=0;f=0?o=o.slice(0,s+1):o=[o[0]];break}}}return o.reduceRight((f,c,d)=>{let p,b=!1,m=null,y=null;r&&(p=l&&c.route.id?l[c.route.id]:void 0,m=c.route.errorElement||j$,u&&(s<0&&d===0?(R$("route-fallback"),b=!0,y=null):s===d&&(b=!0,y=c.route.hydrateFallbackElement||null)));let v=t.concat(o.slice(0,d+1)),h=()=>{let x;return p?x=m:b?x=y:c.route.Component?x=E.createElement(c.route.Component,null):c.route.element?x=c.route.element:x=f,E.createElement(C$,{match:c,routeContext:{outlet:f,matches:v,isDataRoute:r!=null},children:x})};return r&&(c.route.ErrorBoundary||c.route.errorElement||d===0)?E.createElement(T$,{location:r.location,revalidation:r.revalidation,component:m,error:p,children:h(),routeContext:{outlet:null,matches:v,isDataRoute:!0}}):h()},null)}var Hw=function(e){return e.UseBlocker="useBlocker",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e}(Hw||{}),Vw=function(e){return e.UseBlocker="useBlocker",e.UseLoaderData="useLoaderData",e.UseActionData="useActionData",e.UseRouteError="useRouteError",e.UseNavigation="useNavigation",e.UseRouteLoaderData="useRouteLoaderData",e.UseMatches="useMatches",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e.UseRouteId="useRouteId",e}(Vw||{});function M$(e){let t=E.useContext(fv);return t||Ne(!1),t}function N$(e){let t=E.useContext(O$);return t||Ne(!1),t}function I$(e){let t=E.useContext(hn);return t||Ne(!1),t}function Kw(e){let t=I$(),r=t.matches[t.matches.length-1];return r.route.id||Ne(!1),r.route.id}function D$(){var e;let t=E.useContext(Fw),r=N$(),n=Kw();return t!==void 0?t:(e=r.errors)==null?void 0:e[n]}function L$(){let{router:e}=M$(Hw.UseNavigateStable),t=Kw(Vw.UseNavigateStable),r=E.useRef(!1);return Ww(()=>{r.current=!0}),E.useCallback(function(i,a){a===void 0&&(a={}),r.current&&(typeof i=="number"?e.navigate(i):e.navigate(i,$o({fromRouteId:t},a)))},[e,t])}const My={};function R$(e,t,r){My[e]||(My[e]=!0)}function B$(e,t){e==null||e.v7_startTransition,e==null||e.v7_relativeSplatPath}function z$(e){let{to:t,replace:r,state:n,relative:i}=e;yl()||Ne(!1);let{future:a,static:o}=E.useContext(ml),{matches:l}=E.useContext(hn),{pathname:u}=dv(),s=pv(),f=zw(t,Bw(l,a.v7_relativeSplatPath),u,i==="path"),c=JSON.stringify(f);return E.useEffect(()=>s(JSON.parse(c),{replace:r,state:n,relative:i}),[s,c,i,r,n]),null}function yu(e){Ne(!1)}function U$(e){let{basename:t="/",children:r=null,location:n,navigationType:i=qr.Pop,navigator:a,static:o=!1,future:l}=e;yl()&&Ne(!1);let u=t.replace(/^\/*/,"/"),s=E.useMemo(()=>({basename:u,navigator:a,static:o,future:$o({v7_relativeSplatPath:!1},l)}),[u,l,a,o]);typeof n=="string"&&(n=fa(n));let{pathname:f="/",search:c="",hash:d="",state:p=null,key:b="default"}=n,m=E.useMemo(()=>{let y=Rw(f,u);return y==null?null:{location:{pathname:y,search:c,hash:d,state:p,key:b},navigationType:i}},[u,f,c,d,p,b,i]);return m==null?null:E.createElement(ml.Provider,{value:s},E.createElement(ic.Provider,{children:r,value:m}))}function F$(e){let{children:t,location:r}=e;return A$(Kd(t),r)}new Promise(()=>{});function Kd(e,t){t===void 0&&(t=[]);let r=[];return E.Children.forEach(e,(n,i)=>{if(!E.isValidElement(n))return;let a=[...t,i];if(n.type===E.Fragment){r.push.apply(r,Kd(n.props.children,a));return}n.type!==yu&&Ne(!1),!n.props.index||!n.props.children||Ne(!1);let o={id:n.props.id||a.join("-"),caseSensitive:n.props.caseSensitive,element:n.props.element,Component:n.props.Component,index:n.props.index,path:n.props.path,loader:n.props.loader,action:n.props.action,errorElement:n.props.errorElement,ErrorBoundary:n.props.ErrorBoundary,hasErrorBoundary:n.props.ErrorBoundary!=null||n.props.errorElement!=null,shouldRevalidate:n.props.shouldRevalidate,handle:n.props.handle,lazy:n.props.lazy};n.props.children&&(o.children=Kd(n.props.children,a)),r.push(o)}),r}/** + * React Router DOM v6.30.2 + * + * Copyright (c) Remix Software Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE.md file in the root directory of this source tree. + * + * @license MIT + */const W$="6";try{window.__reactRouterVersion=W$}catch{}const H$="startTransition",Ny=RP[H$];function V$(e){let{basename:t,children:r,future:n,window:i}=e,a=E.useRef();a.current==null&&(a.current=YE({window:i,v5Compat:!0}));let o=a.current,[l,u]=E.useState({action:o.action,location:o.location}),{v7_startTransition:s}=n||{},f=E.useCallback(c=>{s&&Ny?Ny(()=>u(c)):u(c)},[u,s]);return E.useLayoutEffect(()=>o.listen(f),[o,f]),E.useEffect(()=>B$(n),[n]),E.createElement(U$,{basename:t,children:r,location:l.location,navigationType:l.action,navigator:o,future:n})}var Iy;(function(e){e.UseScrollRestoration="useScrollRestoration",e.UseSubmit="useSubmit",e.UseSubmitFetcher="useSubmitFetcher",e.UseFetcher="useFetcher",e.useViewTransitionState="useViewTransitionState"})(Iy||(Iy={}));var Dy;(function(e){e.UseFetcher="useFetcher",e.UseFetchers="useFetchers",e.UseScrollRestoration="useScrollRestoration"})(Dy||(Dy={}));const K$="https://monitor.dimension47.de/api";async function jt(e,t={}){const r=await fetch(`${K$}${e}`,{...t,headers:{"Content-Type":"application/json",...t.headers}});if(!r.ok){const n=await r.json().catch(()=>({message:"Request failed"}));throw new Error(n.message||`HTTP ${r.status}`)}return r.json()}async function G$(e,t){return jt("/auth/login",{method:"POST",body:JSON.stringify({username:e,password:t})})}async function X$(e){return jt("/auth/me",{headers:{Authorization:`Bearer ${e}`}})}async function q$(e,t){const r=localStorage.getItem("gsm_token");return jt("/auth/change-password",{method:"POST",headers:{Authorization:`Bearer ${r}`},body:JSON.stringify({currentPassword:e,newPassword:t})})}async function Gw(e){return jt("/servers",{headers:{Authorization:`Bearer ${e}`}})}async function Y$(e,t,r){return jt(`/servers/${t}/${r}`,{method:"POST",headers:{Authorization:`Bearer ${e}`}})}async function Q$(e,t,r){return jt(`/servers/${t}/rcon`,{method:"POST",headers:{Authorization:`Bearer ${e}`},body:JSON.stringify({command:r})})}async function Z$(e,t,r=50){return jt(`/servers/${t}/logs?lines=${r}`,{headers:{Authorization:`Bearer ${e}`}})}async function J$(e,t,r="1h"){return jt(`/servers/${t}/metrics/history?range=${r}`,{headers:{Authorization:`Bearer ${e}`}})}async function ej(e){return jt("/auth/users",{headers:{Authorization:`Bearer ${e}`}})}async function tj(e,t){return jt("/auth/users",{method:"POST",headers:{Authorization:`Bearer ${e}`},body:JSON.stringify(t)})}async function rj(e,t,r){return jt(`/auth/users/${t}/role`,{method:"PATCH",headers:{Authorization:`Bearer ${e}`},body:JSON.stringify({role:r})})}async function nj(e,t,r){return jt(`/auth/users/${t}/password`,{method:"PATCH",headers:{Authorization:`Bearer ${e}`},body:JSON.stringify({password:r})})}async function ij(e,t){return jt(`/auth/users/${t}`,{method:"DELETE",headers:{Authorization:`Bearer ${e}`}})}const Xw=E.createContext(null);function aj({children:e,token:t}){const[r,n]=E.useState(null),[i,a]=E.useState(!0);E.useEffect(()=>{t?(async()=>{try{const f=await X$(t);n(f)}catch(f){console.error("Failed to fetch user:",f)}finally{a(!1)}})():a(!1)},[t]);const o=(r==null?void 0:r.role)||"user",l=o==="moderator"||o==="superadmin",u=o==="superadmin";return _.jsx(Xw.Provider,{value:{user:r,token:t,loading:i,role:o,isModerator:l,isSuperadmin:u},children:e})}function gl(){const e=E.useContext(Xw);if(!e)throw new Error("useUser must be used within a UserProvider");return e}function oj({onLogin:e}){const[t,r]=E.useState(""),[n,i]=E.useState(""),[a,o]=E.useState(""),[l,u]=E.useState(!1);document.title="Login | Zeasy GSM";const s=async f=>{f.preventDefault(),o(""),u(!0);try{const{token:c}=await G$(t,n);e(c)}catch(c){o(c.message||"Login failed")}finally{u(!1)}};return _.jsx("div",{className:"min-h-screen flex items-center justify-center p-4",children:_.jsxs("div",{className:"w-full max-w-sm",children:[_.jsxs("div",{className:"text-center mb-8",children:[_.jsx("img",{src:"/transparent_hellgrau.png",alt:"Gameserver Monitor",className:"h-96 mx-auto mb-2"}),_.jsx("h1",{className:"text-2xl font-semibold text-white mb-2",children:"Gameserver Monitoring"}),_.jsx("p",{className:"text-neutral-500",children:"Sign in to your account"})]}),_.jsx("div",{className:"card p-6 fade-in-scale",children:_.jsxs("form",{onSubmit:s,className:"space-y-4",children:[a&&_.jsx("div",{className:"alert alert-error",children:a}),_.jsxs("div",{className:"form-group",children:[_.jsx("label",{className:"form-label",children:"Username"}),_.jsx("input",{type:"text",value:t,onChange:f=>r(f.target.value),className:"input",placeholder:"Enter username",required:!0,autoFocus:!0})]}),_.jsxs("div",{className:"form-group",children:[_.jsx("label",{className:"form-label",children:"Password"}),_.jsx("input",{type:"password",value:n,onChange:f=>i(f.target.value),className:"input",placeholder:"Enter password",required:!0})]}),_.jsx("button",{type:"submit",disabled:l,className:"btn btn-primary w-full",children:l?"Signing in...":"Sign in"})]})})]})})}const Ly={minecraft:{address:"minecraft.dimension47.de",links:[{label:"ATM10 Modpack",url:"https://www.curseforge.com/minecraft/modpacks/all-the-mods-10"}]},factorio:{address:"factorio.dimension47.de",links:[{label:"Steam",url:"https://store.steampowered.com/app/427520/Factorio/"}]}},lj=e=>{const t=e.toLowerCase();return t.includes("minecraft")||t.includes("all the mods")?Ly.minecraft:t.includes("factorio")?Ly.factorio:null};function uj({server:e,onClick:t}){var l,u,s,f;const r=lj(e.name),n=c=>{const d=Math.floor(c/3600);if(d>24)return Math.floor(d/24)+"d "+d%24+"h";const p=Math.floor(c%3600/60);return d+"h "+p+"m"},i=Math.min(e.metrics.cpu,100),a=Math.min(e.metrics.memory,100),o=c=>c>80?"progress-bar-danger":c>60?"progress-bar-warning":"progress-bar-success";return _.jsxs("div",{className:"card card-clickable p-5",onClick:t,children:[_.jsxs("div",{className:"flex items-center justify-between mb-2",children:[_.jsx("h3",{className:"text-lg font-semibold text-white",children:e.name}),_.jsx("span",{className:e.running?"badge badge-success":"badge badge-destructive",children:e.running?"Online":"Offline"})]}),r&&_.jsxs("div",{className:"mb-4 flex items-center gap-3 text-sm",children:[_.jsx("code",{className:"text-neutral-400 bg-neutral-800 px-2 py-0.5 rounded",children:r.address}),r.links.map((c,d)=>_.jsx("a",{href:c.url,target:"_blank",rel:"noopener noreferrer",onClick:p=>p.stopPropagation(),className:"text-blue-400 hover:text-blue-300 hover:underline",children:c.label},d))]}),_.jsxs("div",{className:"space-y-3",children:[_.jsxs("div",{children:[_.jsxs("div",{className:"flex justify-between text-sm mb-1",children:[_.jsx("span",{className:"text-neutral-400",children:"CPU"}),_.jsxs("span",{className:"text-white",children:[e.metrics.cpu.toFixed(1),"%"]})]}),_.jsx("div",{className:"progress",children:_.jsx("div",{className:"progress-bar "+o(i),style:{width:i+"%"}})})]}),_.jsxs("div",{children:[_.jsxs("div",{className:"flex justify-between text-sm mb-1",children:[_.jsx("span",{className:"text-neutral-400",children:"Memory"}),_.jsxs("span",{className:"text-white",children:[((l=e.metrics.memoryUsed)==null?void 0:l.toFixed(1))||0," / ",((u=e.metrics.memoryTotal)==null?void 0:u.toFixed(1))||0," ",e.metrics.memoryUnit]})]}),_.jsx("div",{className:"progress",children:_.jsx("div",{className:"progress-bar "+o(a),style:{width:a+"%"}})})]})]}),_.jsxs("div",{className:"flex items-center justify-between mt-4 pt-4 border-t border-neutral-800 text-sm",children:[_.jsxs("div",{className:"text-neutral-400",children:[_.jsx("span",{className:"text-white font-medium",children:e.players.online}),e.players.max?" / "+e.players.max:""," players"]}),e.running&&_.jsxs("div",{className:"text-neutral-400",children:["Uptime: ",_.jsx("span",{className:"text-white",children:n(e.metrics.uptime)})]})]}),((f=(s=e.players)==null?void 0:s.list)==null?void 0:f.length)>0&&_.jsx("div",{className:"mt-3 pt-3 border-t border-neutral-800",children:_.jsx("div",{className:"flex flex-wrap gap-1.5",children:e.players.list.map((c,d)=>_.jsx("span",{className:"badge badge-secondary",children:c},d))})})]})}function sj({onClose:e}){const{user:t}=gl(),[r,n]=E.useState(""),[i,a]=E.useState(""),[o,l]=E.useState(""),[u,s]=E.useState(""),[f,c]=E.useState(""),[d,p]=E.useState(!1),b=async m=>{if(m.preventDefault(),s(""),c(""),i!==o){s("Passwords do not match");return}if(i.length<6){s("Password must be at least 6 characters");return}p(!0);try{await q$(r,i),c("Password changed successfully"),n(""),a(""),l("")}catch(y){s(y.message||"Failed to change password")}finally{p(!1)}};return _.jsx("div",{className:"modal-backdrop fade-in",onClick:e,children:_.jsxs("div",{className:"modal fade-in-scale",onClick:m=>m.stopPropagation(),children:[_.jsxs("div",{className:"modal-header",children:[_.jsx("h2",{className:"modal-title",children:"Settings"}),_.jsx("button",{onClick:e,className:"btn btn-ghost",children:"Close"})]}),_.jsxs("div",{className:"modal-body",children:[_.jsxs("div",{className:"mb-6",children:[_.jsx("h3",{className:"text-sm font-medium text-neutral-300 mb-2",children:"Account"}),_.jsx("div",{className:"card p-4",children:_.jsxs("div",{className:"flex justify-between items-center",children:[_.jsx("span",{className:"text-neutral-400",children:"Username"}),_.jsx("span",{className:"text-white",children:t==null?void 0:t.username})]})})]}),_.jsxs("div",{children:[_.jsx("h3",{className:"text-sm font-medium text-neutral-300 mb-2",children:"Change Password"}),_.jsxs("form",{onSubmit:b,className:"space-y-4",children:[u&&_.jsx("div",{className:"alert alert-error",children:u}),f&&_.jsx("div",{className:"alert alert-success",children:f}),_.jsxs("div",{className:"form-group",children:[_.jsx("label",{className:"form-label",children:"Current Password"}),_.jsx("input",{type:"password",value:r,onChange:m=>n(m.target.value),className:"input",required:!0})]}),_.jsxs("div",{className:"form-group",children:[_.jsx("label",{className:"form-label",children:"New Password"}),_.jsx("input",{type:"password",value:i,onChange:m=>a(m.target.value),className:"input",required:!0})]}),_.jsxs("div",{className:"form-group",children:[_.jsx("label",{className:"form-label",children:"Confirm New Password"}),_.jsx("input",{type:"password",value:o,onChange:m=>l(m.target.value),className:"input",required:!0})]}),_.jsx("button",{type:"submit",disabled:d,className:"btn btn-primary w-full",children:d?"Changing...":"Change Password"})]})]})]})]})})}function cj({onClose:e}){const{token:t}=gl(),[r,n]=E.useState([]),[i,a]=E.useState(!0),[o,l]=E.useState(""),[u,s]=E.useState(!1),[f,c]=E.useState(null),[d,p]=E.useState(""),[b,m]=E.useState(""),[y,v]=E.useState("user"),[h,x]=E.useState(!1),[S,g]=E.useState(""),w=async()=>{try{const k=await ej(t);n(k),l("")}catch{l("Failed to load users")}finally{a(!1)}};E.useEffect(()=>{w()},[t]);const O=()=>{p(""),m(""),v("user"),g(""),s(!1),c(null)},P=async k=>{k.preventDefault(),g(""),x(!0);try{await tj(t,{username:d,password:b,role:y}),await w(),O()}catch(L){g(L.message||"Failed to create user")}finally{x(!1)}},A=async k=>{k.preventDefault(),g(""),x(!0);try{y!==f.role&&await rj(t,f.id,y),b&&await nj(t,f.id,b),await w(),O()}catch(L){g(L.message||"Failed to update user")}finally{x(!1)}},T=async k=>{if(confirm("Are you sure you want to delete this user?"))try{await ij(t,k),await w()}catch(L){l(L.message||"Failed to delete user")}},$=k=>{c(k),p(k.username),v(k.role),m(""),s(!1)},M={user:"Viewer",moderator:"Operator",superadmin:"Admin"};return _.jsx("div",{className:"modal-backdrop fade-in",onClick:e,children:_.jsxs("div",{className:"modal fade-in-scale",style:{maxWidth:"32rem"},onClick:k=>k.stopPropagation(),children:[_.jsxs("div",{className:"modal-header",children:[_.jsx("h2",{className:"modal-title",children:"User Management"}),_.jsx("button",{onClick:e,className:"btn btn-ghost",children:"Close"})]}),_.jsxs("div",{className:"modal-body",children:[o&&_.jsx("div",{className:"alert alert-error mb-4",children:o}),i?_.jsx("div",{className:"text-center py-4 text-neutral-400",children:"Loading users..."}):_.jsx("div",{className:"space-y-2 mb-4",children:r.map(k=>_.jsxs("div",{className:"card p-3 flex items-center justify-between",children:[_.jsxs("div",{children:[_.jsx("div",{className:"text-white font-medium",children:k.username}),_.jsx("div",{className:"text-xs text-neutral-500",children:M[k.role]})]}),_.jsxs("div",{className:"flex gap-2",children:[_.jsx("button",{onClick:()=>$(k),className:"btn btn-ghost text-sm",children:"Edit"}),_.jsx("button",{onClick:()=>T(k.id),className:"btn btn-ghost text-sm text-red-400",children:"Delete"})]})]},k.id))}),u||f?_.jsx("form",{onSubmit:f?A:P,className:"space-y-4",children:_.jsxs("div",{className:"border-t border-neutral-800 pt-4",children:[_.jsx("h3",{className:"text-sm font-medium text-neutral-300 mb-3",children:f?"Edit User":"Add New User"}),S&&_.jsx("div",{className:"alert alert-error mb-4",children:S}),!f&&_.jsxs("div",{className:"form-group",children:[_.jsx("label",{className:"form-label",children:"Username"}),_.jsx("input",{type:"text",value:d,onChange:k=>p(k.target.value),className:"input",required:!0})]}),_.jsxs("div",{className:"form-group",children:[_.jsx("label",{className:"form-label",children:f?"New Password (leave empty to keep current)":"Password"}),_.jsx("input",{type:"password",value:b,onChange:k=>m(k.target.value),className:"input",required:!f})]}),_.jsxs("div",{className:"form-group",children:[_.jsx("label",{className:"form-label",children:"Role"}),_.jsxs("select",{value:y,onChange:k=>v(k.target.value),className:"select w-full",children:[_.jsx("option",{value:"user",children:"Viewer"}),_.jsx("option",{value:"moderator",children:"Operator"}),_.jsx("option",{value:"superadmin",children:"Admin"})]})]}),_.jsxs("div",{className:"flex gap-2",children:[_.jsx("button",{type:"submit",disabled:h,className:"btn btn-primary flex-1",children:h?"Saving...":f?"Update User":"Add User"}),_.jsx("button",{type:"button",onClick:O,className:"btn btn-secondary",children:"Cancel"})]})]})}):_.jsx("button",{onClick:()=>s(!0),className:"btn btn-primary w-full",children:"Add User"})]})]})})}function fj({onLogout:e}){const t=pv(),{user:r,token:n,loading:i,isSuperadmin:a,role:o}=gl(),[l,u]=E.useState([]),[s,f]=E.useState(!0),[c,d]=E.useState(""),[p,b]=E.useState(!1),[m,y]=E.useState(!1),v=async()=>{try{const g=await Gw(n);u(g),d("")}catch(g){d("Failed to connect to server"),(g.message.includes("401")||g.message.includes("403"))&&e()}finally{f(!1)}};E.useEffect(()=>{if(!i){v();const g=setInterval(v,1e4);return()=>clearInterval(g)}},[n,i]);const h={user:"Viewer",moderator:"Operator",superadmin:"Admin"};if(i)return _.jsx("div",{className:"min-h-screen flex items-center justify-center",children:_.jsx("div",{className:"text-neutral-400",children:"Loading..."})});const x=l.filter(g=>g.running).length;document.title="Dashboard | Zeasy GSM";const S=l.reduce((g,w)=>{var O;return g+(((O=w.players)==null?void 0:O.online)||0)},0);return _.jsxs("div",{className:"min-h-screen page-enter",children:[_.jsx("header",{className:"border-b border-neutral-800 bg-neutral-900/50 backdrop-blur-sm sticky top-0 z-10",children:_.jsx("div",{className:"container-main py-4",children:_.jsxs("div",{className:"flex items-center justify-between",children:[_.jsxs("div",{className:"flex items-center gap-3",children:[_.jsx("img",{src:"/navbarlogograuer.png",alt:"Logo",className:"h-8"}),_.jsx("span",{className:"text-xl font-semibold text-white hidden sm:inline",children:"Gameserver Management"})]}),_.jsxs("div",{className:"hidden md:flex items-center gap-4 text-sm text-neutral-400",children:[_.jsxs("span",{children:[_.jsx("span",{className:"text-white font-medium",children:x}),"/",l.length," online"]}),_.jsx("span",{className:"text-neutral-600",children:"|"}),_.jsxs("span",{children:[_.jsx("span",{className:"text-white font-medium",children:S})," players"]})]}),_.jsxs("div",{className:"flex items-center gap-3",children:[_.jsxs("div",{className:"hidden sm:block text-right mr-2",children:[_.jsx("div",{className:"text-sm text-white",children:r==null?void 0:r.username}),_.jsx("div",{className:"text-xs text-neutral-500",children:h[o]})]}),a&&_.jsx("button",{onClick:()=>y(!0),className:"btn btn-ghost",children:"Users"}),_.jsx("button",{onClick:()=>b(!0),className:"btn btn-ghost",children:"Settings"}),_.jsx("button",{onClick:e,className:"btn btn-outline",children:"Sign out"})]})]})})}),_.jsxs("main",{className:"container-main py-8",children:[c&&_.jsx("div",{className:"mb-6 alert alert-error fade-in",children:c}),s?_.jsx("div",{className:"text-center py-12",children:_.jsx("div",{className:"text-neutral-400",children:"Loading servers..."})}):_.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:l.map((g,w)=>_.jsx("div",{className:"fade-in-up",style:{animationDelay:`${w*50}ms`,animationFillMode:"both"},children:_.jsx(uj,{server:g,onClick:()=>t("/server/"+g.id)})},g.id))})]}),p&&_.jsx(sj,{onClose:()=>b(!1)}),m&&_.jsx(cj,{onClose:()=>y(!1)})]})}function qw(e){var t,r,n="";if(typeof e=="string"||typeof e=="number")n+=e;else if(typeof e=="object")if(Array.isArray(e)){var i=e.length;for(t=0;t-1}var cC=sC,fC=oc;function dC(e,t){var r=this.__data__,n=fC(r,e);return n<0?(++this.size,r.push([e,t])):r[n][1]=t,this}var pC=dC,hC=YT,vC=iC,mC=lC,yC=cC,gC=pC;function va(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t0?1:-1},Cn=function(t){return Gn(t)&&t.indexOf("%")===t.length-1},H=function(t){return Rk(t)&&!ya(t)},Fk=function(t){return re(t)},Fe=function(t){return H(t)||Gn(t)},Wk=0,xl=function(t){var r=++Wk;return"".concat(t||"").concat(r)},Xn=function(t,r){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1;if(!H(t)&&!Gn(t))return n;var a;if(Cn(t)){var o=t.indexOf("%");a=r*parseFloat(t.slice(0,o))/100}else a=+t;return ya(a)&&(a=n),i&&a>r&&(a=r),a},li=function(t){if(!t)return null;var r=Object.keys(t);return r&&r.length?t[r[0]]:null},Hk=function(t){if(!Array.isArray(t))return!1;for(var r=t.length,n={},i=0;i=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function Qk(e,t){if(e==null)return{};var r={};for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){if(t.indexOf(n)>=0)continue;r[n]=e[n]}return r}function Xd(e){"@babel/helpers - typeof";return Xd=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Xd(e)}var qy={click:"onClick",mousedown:"onMouseDown",mouseup:"onMouseUp",mouseover:"onMouseOver",mousemove:"onMouseMove",mouseout:"onMouseOut",mouseenter:"onMouseEnter",mouseleave:"onMouseLeave",touchcancel:"onTouchCancel",touchend:"onTouchEnd",touchmove:"onTouchMove",touchstart:"onTouchStart",contextmenu:"onContextMenu",dblclick:"onDoubleClick"},Pr=function(t){return typeof t=="string"?t:t?t.displayName||t.name||"Component":""},Yy=null,Pf=null,Pv=function e(t){if(t===Yy&&Array.isArray(Pf))return Pf;var r=[];return E.Children.forEach(t,function(n){re(n)||(Mk.isFragment(n)?r=r.concat(e(n.props.children)):r.push(n))}),Pf=r,Yy=t,r};function rr(e,t){var r=[],n=[];return Array.isArray(t)?n=t.map(function(i){return Pr(i)}):n=[Pr(t)],Pv(e).forEach(function(i){var a=zt(i,"type.displayName")||zt(i,"type.name");n.indexOf(a)!==-1&&r.push(i)}),r}function wt(e,t){var r=rr(e,t);return r&&r[0]}var Qy=function(t){if(!t||!t.props)return!1;var r=t.props,n=r.width,i=r.height;return!(!H(n)||n<=0||!H(i)||i<=0)},Zk=["a","altGlyph","altGlyphDef","altGlyphItem","animate","animateColor","animateMotion","animateTransform","circle","clipPath","color-profile","cursor","defs","desc","ellipse","feBlend","feColormatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","filter","font","font-face","font-face-format","font-face-name","font-face-url","foreignObject","g","glyph","glyphRef","hkern","image","line","lineGradient","marker","mask","metadata","missing-glyph","mpath","path","pattern","polygon","polyline","radialGradient","rect","script","set","stop","style","svg","switch","symbol","text","textPath","title","tref","tspan","use","view","vkern"],Jk=function(t){return t&&t.type&&Gn(t.type)&&Zk.indexOf(t.type)>=0},e2=function(t){return t&&Xd(t)==="object"&&"clipDot"in t},t2=function(t,r,n,i){var a,o=(a=_f==null?void 0:_f[i])!==null&&a!==void 0?a:[];return r.startsWith("data-")||!J(t)&&(i&&o.includes(r)||Gk.includes(r))||n&&_v.includes(r)},te=function(t,r,n){if(!t||typeof t=="function"||typeof t=="boolean")return null;var i=t;if(E.isValidElement(t)&&(i=t.props),!pa(i))return null;var a={};return Object.keys(i).forEach(function(o){var l;t2((l=i)===null||l===void 0?void 0:l[o],o,r,n)&&(a[o]=i[o])}),a},qd=function e(t,r){if(t===r)return!0;var n=E.Children.count(t);if(n!==E.Children.count(r))return!1;if(n===0)return!0;if(n===1)return Zy(Array.isArray(t)?t[0]:t,Array.isArray(r)?r[0]:r);for(var i=0;i=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function o2(e,t){if(e==null)return{};var r={};for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){if(t.indexOf(n)>=0)continue;r[n]=e[n]}return r}function Qd(e){var t=e.children,r=e.width,n=e.height,i=e.viewBox,a=e.className,o=e.style,l=e.title,u=e.desc,s=a2(e,i2),f=i||{width:r,height:n,x:0,y:0},c=oe("recharts-surface",a);return j.createElement("svg",Yd({},te(s,!0,"svg"),{className:c,width:r,height:n,style:o,viewBox:"".concat(f.x," ").concat(f.y," ").concat(f.width," ").concat(f.height)}),j.createElement("title",null,l),j.createElement("desc",null,u),t)}var l2=["children","className"];function Zd(){return Zd=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function s2(e,t){if(e==null)return{};var r={};for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){if(t.indexOf(n)>=0)continue;r[n]=e[n]}return r}var _e=j.forwardRef(function(e,t){var r=e.children,n=e.className,i=u2(e,l2),a=oe("recharts-layer",n);return j.createElement("g",Zd({className:a},te(i,!0),{ref:t}),r)}),Bn=function(t,r){for(var n=arguments.length,i=new Array(n>2?n-2:0),a=2;ai?0:i+t),r=r>i?i:r,r<0&&(r+=i),i=t>r?0:r-t>>>0,t>>>=0;for(var a=Array(i);++n=n?e:d2(e,t,r)}var h2=p2,v2="\\ud800-\\udfff",m2="\\u0300-\\u036f",y2="\\ufe20-\\ufe2f",g2="\\u20d0-\\u20ff",b2=m2+y2+g2,x2="\\ufe0e\\ufe0f",w2="\\u200d",S2=RegExp("["+w2+v2+b2+x2+"]");function O2(e){return S2.test(e)}var uS=O2;function _2(e){return e.split("")}var P2=_2,sS="\\ud800-\\udfff",A2="\\u0300-\\u036f",E2="\\ufe20-\\ufe2f",$2="\\u20d0-\\u20ff",j2=A2+E2+$2,T2="\\ufe0e\\ufe0f",C2="["+sS+"]",Jd="["+j2+"]",ep="\\ud83c[\\udffb-\\udfff]",k2="(?:"+Jd+"|"+ep+")",cS="[^"+sS+"]",fS="(?:\\ud83c[\\udde6-\\uddff]){2}",dS="[\\ud800-\\udbff][\\udc00-\\udfff]",M2="\\u200d",pS=k2+"?",hS="["+T2+"]?",N2="(?:"+M2+"(?:"+[cS,fS,dS].join("|")+")"+hS+pS+")*",I2=hS+pS+N2,D2="(?:"+[cS+Jd+"?",Jd,fS,dS,C2].join("|")+")",L2=RegExp(ep+"(?="+ep+")|"+D2+I2,"g");function R2(e){return e.match(L2)||[]}var B2=R2,z2=P2,U2=uS,F2=B2;function W2(e){return U2(e)?F2(e):z2(e)}var H2=W2,V2=h2,K2=uS,G2=H2,X2=rS;function q2(e){return function(t){t=X2(t);var r=K2(t)?G2(t):void 0,n=r?r[0]:t.charAt(0),i=r?V2(r,1).join(""):t.slice(1);return n[e]()+i}}var Y2=q2,Q2=Y2,Z2=Q2("toUpperCase"),J2=Z2;const xc=ve(J2);function pe(e){return function(){return e}}const vS=Math.cos,Vu=Math.sin,ir=Math.sqrt,Ku=Math.PI,wc=2*Ku,tp=Math.PI,rp=2*tp,Pn=1e-6,eM=rp-Pn;function mS(e){this._+=e[0];for(let t=1,r=e.length;t=0))throw new Error(`invalid digits: ${e}`);if(t>15)return mS;const r=10**t;return function(n){this._+=n[0];for(let i=1,a=n.length;iPn)if(!(Math.abs(c*u-s*f)>Pn)||!a)this._append`L${this._x1=t},${this._y1=r}`;else{let p=n-o,b=i-l,m=u*u+s*s,y=p*p+b*b,v=Math.sqrt(m),h=Math.sqrt(d),x=a*Math.tan((tp-Math.acos((m+d-y)/(2*v*h)))/2),S=x/h,g=x/v;Math.abs(S-1)>Pn&&this._append`L${t+S*f},${r+S*c}`,this._append`A${a},${a},0,0,${+(c*p>f*b)},${this._x1=t+g*u},${this._y1=r+g*s}`}}arc(t,r,n,i,a,o){if(t=+t,r=+r,n=+n,o=!!o,n<0)throw new Error(`negative radius: ${n}`);let l=n*Math.cos(i),u=n*Math.sin(i),s=t+l,f=r+u,c=1^o,d=o?i-a:a-i;this._x1===null?this._append`M${s},${f}`:(Math.abs(this._x1-s)>Pn||Math.abs(this._y1-f)>Pn)&&this._append`L${s},${f}`,n&&(d<0&&(d=d%rp+rp),d>eM?this._append`A${n},${n},0,1,${c},${t-l},${r-u}A${n},${n},0,1,${c},${this._x1=s},${this._y1=f}`:d>Pn&&this._append`A${n},${n},0,${+(d>=tp)},${c},${this._x1=t+n*Math.cos(a)},${this._y1=r+n*Math.sin(a)}`)}rect(t,r,n,i){this._append`M${this._x0=this._x1=+t},${this._y0=this._y1=+r}h${n=+n}v${+i}h${-n}Z`}toString(){return this._}}function Av(e){let t=3;return e.digits=function(r){if(!arguments.length)return t;if(r==null)t=null;else{const n=Math.floor(r);if(!(n>=0))throw new RangeError(`invalid digits: ${r}`);t=n}return e},()=>new rM(t)}function Ev(e){return typeof e=="object"&&"length"in e?e:Array.from(e)}function yS(e){this._context=e}yS.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:this._context.lineTo(e,t);break}}};function Sc(e){return new yS(e)}function gS(e){return e[0]}function bS(e){return e[1]}function xS(e,t){var r=pe(!0),n=null,i=Sc,a=null,o=Av(l);e=typeof e=="function"?e:e===void 0?gS:pe(e),t=typeof t=="function"?t:t===void 0?bS:pe(t);function l(u){var s,f=(u=Ev(u)).length,c,d=!1,p;for(n==null&&(a=i(p=o())),s=0;s<=f;++s)!(s=p;--b)l.point(x[b],S[b]);l.lineEnd(),l.areaEnd()}v&&(x[d]=+e(y,d,c),S[d]=+t(y,d,c),l.point(n?+n(y,d,c):x[d],r?+r(y,d,c):S[d]))}if(h)return l=null,h+""||null}function f(){return xS().defined(i).curve(o).context(a)}return s.x=function(c){return arguments.length?(e=typeof c=="function"?c:pe(+c),n=null,s):e},s.x0=function(c){return arguments.length?(e=typeof c=="function"?c:pe(+c),s):e},s.x1=function(c){return arguments.length?(n=c==null?null:typeof c=="function"?c:pe(+c),s):n},s.y=function(c){return arguments.length?(t=typeof c=="function"?c:pe(+c),r=null,s):t},s.y0=function(c){return arguments.length?(t=typeof c=="function"?c:pe(+c),s):t},s.y1=function(c){return arguments.length?(r=c==null?null:typeof c=="function"?c:pe(+c),s):r},s.lineX0=s.lineY0=function(){return f().x(e).y(t)},s.lineY1=function(){return f().x(e).y(r)},s.lineX1=function(){return f().x(n).y(t)},s.defined=function(c){return arguments.length?(i=typeof c=="function"?c:pe(!!c),s):i},s.curve=function(c){return arguments.length?(o=c,a!=null&&(l=o(a)),s):o},s.context=function(c){return arguments.length?(c==null?a=l=null:l=o(a=c),s):a},s}class wS{constructor(t,r){this._context=t,this._x=r}areaStart(){this._line=0}areaEnd(){this._line=NaN}lineStart(){this._point=0}lineEnd(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line}point(t,r){switch(t=+t,r=+r,this._point){case 0:{this._point=1,this._line?this._context.lineTo(t,r):this._context.moveTo(t,r);break}case 1:this._point=2;default:{this._x?this._context.bezierCurveTo(this._x0=(this._x0+t)/2,this._y0,this._x0,r,t,r):this._context.bezierCurveTo(this._x0,this._y0=(this._y0+r)/2,t,this._y0,t,r);break}}this._x0=t,this._y0=r}}function nM(e){return new wS(e,!0)}function iM(e){return new wS(e,!1)}const $v={draw(e,t){const r=ir(t/Ku);e.moveTo(r,0),e.arc(0,0,r,0,wc)}},aM={draw(e,t){const r=ir(t/5)/2;e.moveTo(-3*r,-r),e.lineTo(-r,-r),e.lineTo(-r,-3*r),e.lineTo(r,-3*r),e.lineTo(r,-r),e.lineTo(3*r,-r),e.lineTo(3*r,r),e.lineTo(r,r),e.lineTo(r,3*r),e.lineTo(-r,3*r),e.lineTo(-r,r),e.lineTo(-3*r,r),e.closePath()}},SS=ir(1/3),oM=SS*2,lM={draw(e,t){const r=ir(t/oM),n=r*SS;e.moveTo(0,-r),e.lineTo(n,0),e.lineTo(0,r),e.lineTo(-n,0),e.closePath()}},uM={draw(e,t){const r=ir(t),n=-r/2;e.rect(n,n,r,r)}},sM=.8908130915292852,OS=Vu(Ku/10)/Vu(7*Ku/10),cM=Vu(wc/10)*OS,fM=-vS(wc/10)*OS,dM={draw(e,t){const r=ir(t*sM),n=cM*r,i=fM*r;e.moveTo(0,-r),e.lineTo(n,i);for(let a=1;a<5;++a){const o=wc*a/5,l=vS(o),u=Vu(o);e.lineTo(u*r,-l*r),e.lineTo(l*n-u*i,u*n+l*i)}e.closePath()}},Af=ir(3),pM={draw(e,t){const r=-ir(t/(Af*3));e.moveTo(0,r*2),e.lineTo(-Af*r,-r),e.lineTo(Af*r,-r),e.closePath()}},Ct=-.5,kt=ir(3)/2,np=1/ir(12),hM=(np/2+1)*3,vM={draw(e,t){const r=ir(t/hM),n=r/2,i=r*np,a=n,o=r*np+r,l=-a,u=o;e.moveTo(n,i),e.lineTo(a,o),e.lineTo(l,u),e.lineTo(Ct*n-kt*i,kt*n+Ct*i),e.lineTo(Ct*a-kt*o,kt*a+Ct*o),e.lineTo(Ct*l-kt*u,kt*l+Ct*u),e.lineTo(Ct*n+kt*i,Ct*i-kt*n),e.lineTo(Ct*a+kt*o,Ct*o-kt*a),e.lineTo(Ct*l+kt*u,Ct*u-kt*l),e.closePath()}};function mM(e,t){let r=null,n=Av(i);e=typeof e=="function"?e:pe(e||$v),t=typeof t=="function"?t:pe(t===void 0?64:+t);function i(){let a;if(r||(r=a=n()),e.apply(this,arguments).draw(r,+t.apply(this,arguments)),a)return r=null,a+""||null}return i.type=function(a){return arguments.length?(e=typeof a=="function"?a:pe(a),i):e},i.size=function(a){return arguments.length?(t=typeof a=="function"?a:pe(+a),i):t},i.context=function(a){return arguments.length?(r=a??null,i):r},i}function Gu(){}function Xu(e,t,r){e._context.bezierCurveTo((2*e._x0+e._x1)/3,(2*e._y0+e._y1)/3,(e._x0+2*e._x1)/3,(e._y0+2*e._y1)/3,(e._x0+4*e._x1+t)/6,(e._y0+4*e._y1+r)/6)}function _S(e){this._context=e}_S.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:Xu(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:Xu(this,e,t);break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function yM(e){return new _S(e)}function PS(e){this._context=e}PS.prototype={areaStart:Gu,areaEnd:Gu,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:{this._context.moveTo(this._x2,this._y2),this._context.closePath();break}case 2:{this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break}case 3:{this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4);break}}},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._x2=e,this._y2=t;break;case 1:this._point=2,this._x3=e,this._y3=t;break;case 2:this._point=3,this._x4=e,this._y4=t,this._context.moveTo((this._x0+4*this._x1+e)/6,(this._y0+4*this._y1+t)/6);break;default:Xu(this,e,t);break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function gM(e){return new PS(e)}function AS(e){this._context=e}AS.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var r=(this._x0+4*this._x1+e)/6,n=(this._y0+4*this._y1+t)/6;this._line?this._context.lineTo(r,n):this._context.moveTo(r,n);break;case 3:this._point=4;default:Xu(this,e,t);break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function bM(e){return new AS(e)}function ES(e){this._context=e}ES.prototype={areaStart:Gu,areaEnd:Gu,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(e,t){e=+e,t=+t,this._point?this._context.lineTo(e,t):(this._point=1,this._context.moveTo(e,t))}};function xM(e){return new ES(e)}function eg(e){return e<0?-1:1}function tg(e,t,r){var n=e._x1-e._x0,i=t-e._x1,a=(e._y1-e._y0)/(n||i<0&&-0),o=(r-e._y1)/(i||n<0&&-0),l=(a*i+o*n)/(n+i);return(eg(a)+eg(o))*Math.min(Math.abs(a),Math.abs(o),.5*Math.abs(l))||0}function rg(e,t){var r=e._x1-e._x0;return r?(3*(e._y1-e._y0)/r-t)/2:t}function Ef(e,t,r){var n=e._x0,i=e._y0,a=e._x1,o=e._y1,l=(a-n)/3;e._context.bezierCurveTo(n+l,i+l*t,a-l,o-l*r,a,o)}function qu(e){this._context=e}qu.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:Ef(this,this._t0,rg(this,this._t0));break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){var r=NaN;if(e=+e,t=+t,!(e===this._x1&&t===this._y1)){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3,Ef(this,rg(this,r=tg(this,e,t)),r);break;default:Ef(this,this._t0,r=tg(this,e,t));break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t,this._t0=r}}};function $S(e){this._context=new jS(e)}($S.prototype=Object.create(qu.prototype)).point=function(e,t){qu.prototype.point.call(this,t,e)};function jS(e){this._context=e}jS.prototype={moveTo:function(e,t){this._context.moveTo(t,e)},closePath:function(){this._context.closePath()},lineTo:function(e,t){this._context.lineTo(t,e)},bezierCurveTo:function(e,t,r,n,i,a){this._context.bezierCurveTo(t,e,n,r,a,i)}};function wM(e){return new qu(e)}function SM(e){return new $S(e)}function TS(e){this._context=e}TS.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=[],this._y=[]},lineEnd:function(){var e=this._x,t=this._y,r=e.length;if(r)if(this._line?this._context.lineTo(e[0],t[0]):this._context.moveTo(e[0],t[0]),r===2)this._context.lineTo(e[1],t[1]);else for(var n=ng(e),i=ng(t),a=0,o=1;o=0;--t)i[t]=(o[t]-i[t+1])/a[t];for(a[r-1]=(e[r]+i[r-1])/2,t=0;t=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:{if(this._t<=0)this._context.lineTo(this._x,t),this._context.lineTo(e,t);else{var r=this._x*(1-this._t)+e*this._t;this._context.lineTo(r,this._y),this._context.lineTo(r,t)}break}}this._x=e,this._y=t}};function _M(e){return new Oc(e,.5)}function PM(e){return new Oc(e,0)}function AM(e){return new Oc(e,1)}function zi(e,t){if((o=e.length)>1)for(var r=1,n,i,a=e[t[0]],o,l=a.length;r=0;)r[t]=t;return r}function EM(e,t){return e[t]}function $M(e){const t=[];return t.key=e,t}function jM(){var e=pe([]),t=ip,r=zi,n=EM;function i(a){var o=Array.from(e.apply(this,arguments),$M),l,u=o.length,s=-1,f;for(const c of a)for(l=0,++s;l0){for(var r,n,i=0,a=e[0].length,o;i0){for(var r=0,n=e[t[0]],i,a=n.length;r0)||!((a=(i=e[t[0]]).length)>0))){for(var r=0,n=1,i,a,o;n=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function RM(e,t){if(e==null)return{};var r={};for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){if(t.indexOf(n)>=0)continue;r[n]=e[n]}return r}var CS={symbolCircle:$v,symbolCross:aM,symbolDiamond:lM,symbolSquare:uM,symbolStar:dM,symbolTriangle:pM,symbolWye:vM},BM=Math.PI/180,zM=function(t){var r="symbol".concat(xc(t));return CS[r]||$v},UM=function(t,r,n){if(r==="area")return t;switch(n){case"cross":return 5*t*t/9;case"diamond":return .5*t*t/Math.sqrt(3);case"square":return t*t;case"star":{var i=18*BM;return 1.25*t*t*(Math.tan(i)-Math.tan(i*2)*Math.pow(Math.tan(i),2))}case"triangle":return Math.sqrt(3)*t*t/4;case"wye":return(21-10*Math.sqrt(3))*t*t/8;default:return Math.PI*t*t/4}},FM=function(t,r){CS["symbol".concat(xc(t))]=r},jv=function(t){var r=t.type,n=r===void 0?"circle":r,i=t.size,a=i===void 0?64:i,o=t.sizeType,l=o===void 0?"area":o,u=LM(t,MM),s=ag(ag({},u),{},{type:n,size:a,sizeType:l}),f=function(){var y=zM(n),v=mM().type(y).size(UM(a,l,n));return v()},c=s.className,d=s.cx,p=s.cy,b=te(s,!0);return d===+d&&p===+p&&a===+a?j.createElement("path",ap({},b,{className:oe("recharts-symbols",c),transform:"translate(".concat(d,", ").concat(p,")"),d:f()})):null};jv.registerSymbol=FM;function Ui(e){"@babel/helpers - typeof";return Ui=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Ui(e)}function op(){return op=Object.assign?Object.assign.bind():function(e){for(var t=1;t`);var h=p.inactive?s:p.color;return j.createElement("li",op({className:y,style:c,key:"legend-item-".concat(b)},Hu(n.props,p,b)),j.createElement(Qd,{width:o,height:o,viewBox:f,style:d},n.renderIcon(p)),j.createElement("span",{className:"recharts-legend-item-text",style:{color:h}},m?m(v,p,b):v))})}},{key:"render",value:function(){var n=this.props,i=n.payload,a=n.layout,o=n.align;if(!i||!i.length)return null;var l={padding:0,margin:0,textAlign:a==="horizontal"?o:"left"};return j.createElement("ul",{className:"recharts-default-legend",style:l},this.renderItems())}}])}(E.PureComponent);To(Tv,"displayName","Legend");To(Tv,"defaultProps",{iconSize:14,layout:"horizontal",align:"center",verticalAlign:"middle",inactiveColor:"#ccc"});var ZM=lc;function JM(){this.__data__=new ZM,this.size=0}var eN=JM;function tN(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r}var rN=tN;function nN(e){return this.__data__.get(e)}var iN=nN;function aN(e){return this.__data__.has(e)}var oN=aN,lN=lc,uN=yv,sN=gv,cN=200;function fN(e,t){var r=this.__data__;if(r instanceof lN){var n=r.__data__;if(!uN||n.lengthl))return!1;var s=a.get(e),f=a.get(t);if(s&&f)return s==t&&f==e;var c=-1,d=!0,p=r&MN?new jN:void 0;for(a.set(e,t),a.set(t,e);++c-1&&e%1==0&&e-1&&e%1==0&&e<=LI}var Nv=RI,BI=Dr,zI=Nv,UI=Lr,FI="[object Arguments]",WI="[object Array]",HI="[object Boolean]",VI="[object Date]",KI="[object Error]",GI="[object Function]",XI="[object Map]",qI="[object Number]",YI="[object Object]",QI="[object RegExp]",ZI="[object Set]",JI="[object String]",eD="[object WeakMap]",tD="[object ArrayBuffer]",rD="[object DataView]",nD="[object Float32Array]",iD="[object Float64Array]",aD="[object Int8Array]",oD="[object Int16Array]",lD="[object Int32Array]",uD="[object Uint8Array]",sD="[object Uint8ClampedArray]",cD="[object Uint16Array]",fD="[object Uint32Array]",ye={};ye[nD]=ye[iD]=ye[aD]=ye[oD]=ye[lD]=ye[uD]=ye[sD]=ye[cD]=ye[fD]=!0;ye[FI]=ye[WI]=ye[tD]=ye[HI]=ye[rD]=ye[VI]=ye[KI]=ye[GI]=ye[XI]=ye[qI]=ye[YI]=ye[QI]=ye[ZI]=ye[JI]=ye[eD]=!1;function dD(e){return UI(e)&&zI(e.length)&&!!ye[BI(e)]}var pD=dD;function hD(e){return function(t){return e(t)}}var FS=hD,Ju={exports:{}};Ju.exports;(function(e,t){var r=Yw,n=t&&!t.nodeType&&t,i=n&&!0&&e&&!e.nodeType&&e,a=i&&i.exports===n,o=a&&r.process,l=function(){try{var u=i&&i.require&&i.require("util").types;return u||o&&o.binding&&o.binding("util")}catch{}}();e.exports=l})(Ju,Ju.exports);var vD=Ju.exports,mD=pD,yD=FS,dg=vD,pg=dg&&dg.isTypedArray,gD=pg?yD(pg):mD,WS=gD,bD=SI,xD=kv,wD=gt,SD=US,OD=Mv,_D=WS,PD=Object.prototype,AD=PD.hasOwnProperty;function ED(e,t){var r=wD(e),n=!r&&xD(e),i=!r&&!n&&SD(e),a=!r&&!n&&!i&&_D(e),o=r||n||i||a,l=o?bD(e.length,String):[],u=l.length;for(var s in e)(t||AD.call(e,s))&&!(o&&(s=="length"||i&&(s=="offset"||s=="parent")||a&&(s=="buffer"||s=="byteLength"||s=="byteOffset")||OD(s,u)))&&l.push(s);return l}var $D=ED,jD=Object.prototype;function TD(e){var t=e&&e.constructor,r=typeof t=="function"&&t.prototype||jD;return e===r}var CD=TD;function kD(e,t){return function(r){return e(t(r))}}var HS=kD,MD=HS,ND=MD(Object.keys,Object),ID=ND,DD=CD,LD=ID,RD=Object.prototype,BD=RD.hasOwnProperty;function zD(e){if(!DD(e))return LD(e);var t=[];for(var r in Object(e))BD.call(e,r)&&r!="constructor"&&t.push(r);return t}var UD=zD,FD=vv,WD=Nv;function HD(e){return e!=null&&WD(e.length)&&!FD(e)}var _c=HD,VD=$D,KD=UD,GD=_c;function XD(e){return GD(e)?VD(e):KD(e)}var Iv=XD,qD=cI,YD=xI,QD=Iv;function ZD(e){return qD(e,QD,YD)}var JD=ZD,hg=JD,eL=1,tL=Object.prototype,rL=tL.hasOwnProperty;function nL(e,t,r,n,i,a){var o=r&eL,l=hg(e),u=l.length,s=hg(t),f=s.length;if(u!=f&&!o)return!1;for(var c=u;c--;){var d=l[c];if(!(o?d in t:rL.call(t,d)))return!1}var p=a.get(e),b=a.get(t);if(p&&b)return p==t&&b==e;var m=!0;a.set(e,t),a.set(t,e);for(var y=o;++c-1}var r3=t3;function n3(e,t,r){for(var n=-1,i=e==null?0:e.length;++n=g3){var s=t?null:m3(e);if(s)return y3(s);o=!1,i=v3,u=new d3}else u=t?[]:l;e:for(;++n=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function N3(e,t){if(e==null)return{};var r={};for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){if(t.indexOf(n)>=0)continue;r[n]=e[n]}return r}function I3(e){return e.value}function D3(e,t){if(j.isValidElement(e))return j.cloneElement(e,t);if(typeof e=="function")return j.createElement(e,t);t.ref;var r=M3(t,P3);return j.createElement(Tv,r)}var Tg=1,Ti=function(e){function t(){var r;A3(this,t);for(var n=arguments.length,i=new Array(n),a=0;aTg||Math.abs(i.height-this.lastBoundingBox.height)>Tg)&&(this.lastBoundingBox.width=i.width,this.lastBoundingBox.height=i.height,n&&n(i)):(this.lastBoundingBox.width!==-1||this.lastBoundingBox.height!==-1)&&(this.lastBoundingBox.width=-1,this.lastBoundingBox.height=-1,n&&n(null))}},{key:"getBBoxSnapshot",value:function(){return this.lastBoundingBox.width>=0&&this.lastBoundingBox.height>=0?yr({},this.lastBoundingBox):{width:0,height:0}}},{key:"getDefaultPosition",value:function(n){var i=this.props,a=i.layout,o=i.align,l=i.verticalAlign,u=i.margin,s=i.chartWidth,f=i.chartHeight,c,d;if(!n||(n.left===void 0||n.left===null)&&(n.right===void 0||n.right===null))if(o==="center"&&a==="vertical"){var p=this.getBBoxSnapshot();c={left:((s||0)-p.width)/2}}else c=o==="right"?{right:u&&u.right||0}:{left:u&&u.left||0};if(!n||(n.top===void 0||n.top===null)&&(n.bottom===void 0||n.bottom===null))if(l==="middle"){var b=this.getBBoxSnapshot();d={top:((f||0)-b.height)/2}}else d=l==="bottom"?{bottom:u&&u.bottom||0}:{top:u&&u.top||0};return yr(yr({},c),d)}},{key:"render",value:function(){var n=this,i=this.props,a=i.content,o=i.width,l=i.height,u=i.wrapperStyle,s=i.payloadUniqBy,f=i.payload,c=yr(yr({position:"absolute",width:o||"auto",height:l||"auto"},this.getDefaultPosition(u)),u);return j.createElement("div",{className:"recharts-legend-wrapper",style:c,ref:function(p){n.wrapperNode=p}},D3(a,yr(yr({},this.props),{},{payload:YS(f,s,I3)})))}}],[{key:"getWithHeight",value:function(n,i){var a=yr(yr({},this.defaultProps),n.props),o=a.layout;return o==="vertical"&&H(n.props.height)?{height:n.props.height}:o==="horizontal"?{width:n.props.width||i}:null}}])}(E.PureComponent);Pc(Ti,"displayName","Legend");Pc(Ti,"defaultProps",{iconSize:14,layout:"horizontal",align:"center",verticalAlign:"bottom"});var Cg=bl,L3=kv,R3=gt,kg=Cg?Cg.isConcatSpreadable:void 0;function B3(e){return R3(e)||L3(e)||!!(kg&&e&&e[kg])}var z3=B3,U3=BS,F3=z3;function JS(e,t,r,n,i){var a=-1,o=e.length;for(r||(r=F3),i||(i=[]);++a0&&r(l)?t>1?JS(l,t-1,r,n,i):U3(i,l):n||(i[i.length]=l)}return i}var eO=JS;function W3(e){return function(t,r,n){for(var i=-1,a=Object(t),o=n(t),l=o.length;l--;){var u=o[e?l:++i];if(r(a[u],u,a)===!1)break}return t}}var H3=W3,V3=H3,K3=V3(),G3=K3,X3=G3,q3=Iv;function Y3(e,t){return e&&X3(e,t,q3)}var tO=Y3,Q3=_c;function Z3(e,t){return function(r,n){if(r==null)return r;if(!Q3(r))return e(r,n);for(var i=r.length,a=t?i:-1,o=Object(r);(t?a--:++at||a&&o&&u&&!l&&!s||n&&o&&u||!r&&u||!i)return 1;if(!n&&!a&&!s&&e=l)return u;var s=r[n];return u*(s=="desc"?-1:1)}}return e.index-t.index}var dB=fB,Cf=xv,pB=wv,hB=wa,vB=rO,mB=lB,yB=FS,gB=dB,bB=xa,xB=gt;function wB(e,t,r){t.length?t=Cf(t,function(a){return xB(a)?function(o){return pB(o,a.length===1?a[0]:a)}:a}):t=[bB];var n=-1;t=Cf(t,yB(hB));var i=vB(e,function(a,o,l){var u=Cf(t,function(s){return s(a)});return{criteria:u,index:++n,value:a}});return mB(i,function(a,o){return gB(a,o,r)})}var SB=wB;function OB(e,t,r){switch(r.length){case 0:return e.call(t);case 1:return e.call(t,r[0]);case 2:return e.call(t,r[0],r[1]);case 3:return e.call(t,r[0],r[1],r[2])}return e.apply(t,r)}var _B=OB,PB=_B,Ng=Math.max;function AB(e,t,r){return t=Ng(t===void 0?e.length-1:t,0),function(){for(var n=arguments,i=-1,a=Ng(n.length-t,0),o=Array(a);++i0){if(++t>=DB)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}var zB=BB,UB=IB,FB=zB,WB=FB(UB),HB=WB,VB=xa,KB=EB,GB=HB;function XB(e,t){return GB(KB(e,t,VB),e+"")}var qB=XB,YB=mv,QB=_c,ZB=Mv,JB=vn;function e4(e,t,r){if(!JB(r))return!1;var n=typeof t;return(n=="number"?QB(r)&&ZB(t,r.length):n=="string"&&t in r)?YB(r[t],e):!1}var Ac=e4,t4=eO,r4=SB,n4=qB,Dg=Ac,i4=n4(function(e,t){if(e==null)return[];var r=t.length;return r>1&&Dg(e,t[0],t[1])?t=[]:r>2&&Dg(t[0],t[1],t[2])&&(t=[t[0]]),r4(e,t4(t,1),[])}),a4=i4;const Rv=ve(a4);function Co(e){"@babel/helpers - typeof";return Co=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Co(e)}function hp(){return hp=Object.assign?Object.assign.bind():function(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=new Array(t);r=t.x),"".concat(Ia,"-left"),H(r)&&t&&H(t.x)&&r=t.y),"".concat(Ia,"-top"),H(n)&&t&&H(t.y)&&nm?Math.max(f,u[n]):Math.max(c,u[n])}function x4(e){var t=e.translateX,r=e.translateY,n=e.useTranslate3d;return{transform:n?"translate3d(".concat(t,"px, ").concat(r,"px, 0)"):"translate(".concat(t,"px, ").concat(r,"px)")}}function w4(e){var t=e.allowEscapeViewBox,r=e.coordinate,n=e.offsetTopLeft,i=e.position,a=e.reverseDirection,o=e.tooltipBox,l=e.useTranslate3d,u=e.viewBox,s,f,c;return o.height>0&&o.width>0&&r?(f=Bg({allowEscapeViewBox:t,coordinate:r,key:"x",offsetTopLeft:n,position:i,reverseDirection:a,tooltipDimension:o.width,viewBox:u,viewBoxDimension:u.width}),c=Bg({allowEscapeViewBox:t,coordinate:r,key:"y",offsetTopLeft:n,position:i,reverseDirection:a,tooltipDimension:o.height,viewBox:u,viewBoxDimension:u.height}),s=x4({translateX:f,translateY:c,useTranslate3d:l})):s=g4,{cssProperties:s,cssClasses:b4({translateX:f,translateY:c,coordinate:r})}}function Wi(e){"@babel/helpers - typeof";return Wi=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Wi(e)}function zg(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Ug(e){for(var t=1;tFg||Math.abs(n.height-this.state.lastBoundingBox.height)>Fg)&&this.setState({lastBoundingBox:{width:n.width,height:n.height}})}else(this.state.lastBoundingBox.width!==-1||this.state.lastBoundingBox.height!==-1)&&this.setState({lastBoundingBox:{width:-1,height:-1}})}},{key:"componentDidMount",value:function(){document.addEventListener("keydown",this.handleKeyDown),this.updateBBox()}},{key:"componentWillUnmount",value:function(){document.removeEventListener("keydown",this.handleKeyDown)}},{key:"componentDidUpdate",value:function(){var n,i;this.props.active&&this.updateBBox(),this.state.dismissed&&(((n=this.props.coordinate)===null||n===void 0?void 0:n.x)!==this.state.dismissedAtCoordinate.x||((i=this.props.coordinate)===null||i===void 0?void 0:i.y)!==this.state.dismissedAtCoordinate.y)&&(this.state.dismissed=!1)}},{key:"render",value:function(){var n=this,i=this.props,a=i.active,o=i.allowEscapeViewBox,l=i.animationDuration,u=i.animationEasing,s=i.children,f=i.coordinate,c=i.hasPayload,d=i.isAnimationActive,p=i.offset,b=i.position,m=i.reverseDirection,y=i.useTranslate3d,v=i.viewBox,h=i.wrapperStyle,x=w4({allowEscapeViewBox:o,coordinate:f,offsetTopLeft:p,position:b,reverseDirection:m,tooltipBox:this.state.lastBoundingBox,useTranslate3d:y,viewBox:v}),S=x.cssClasses,g=x.cssProperties,w=Ug(Ug({transition:d&&a?"transform ".concat(l,"ms ").concat(u):void 0},g),{},{pointerEvents:"none",visibility:!this.state.dismissed&&a&&c?"visible":"hidden",position:"absolute",top:0,left:0},h);return j.createElement("div",{tabIndex:-1,className:S,style:w,ref:function(P){n.wrapperNode=P}},s)}}])}(E.PureComponent),C4=function(){return!(typeof window<"u"&&window.document&&window.document.createElement&&window.setTimeout)},Sa={isSsr:C4()};function Hi(e){"@babel/helpers - typeof";return Hi=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Hi(e)}function Wg(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Hg(e){for(var t=1;t0;return j.createElement(T4,{allowEscapeViewBox:o,animationDuration:l,animationEasing:u,isAnimationActive:d,active:a,coordinate:f,hasPayload:w,offset:p,position:y,reverseDirection:v,useTranslate3d:h,viewBox:x,wrapperStyle:S},U4(s,Hg(Hg({},this.props),{},{payload:g})))}}])}(E.PureComponent);Bv(lr,"displayName","Tooltip");Bv(lr,"defaultProps",{accessibilityLayer:!1,allowEscapeViewBox:{x:!1,y:!1},animationDuration:400,animationEasing:"ease",contentStyle:{},coordinate:{x:0,y:0},cursor:!0,cursorStyle:{},filterNull:!0,isAnimationActive:!Sa.isSsr,itemStyle:{},labelStyle:{},offset:10,reverseDirection:{x:!1,y:!1},separator:" : ",trigger:"hover",useTranslate3d:!1,viewBox:{x:0,y:0,height:0,width:0},wrapperStyle:{}});var F4=mr,W4=function(){return F4.Date.now()},H4=W4,V4=/\s/;function K4(e){for(var t=e.length;t--&&V4.test(e.charAt(t)););return t}var G4=K4,X4=G4,q4=/^\s+/;function Y4(e){return e&&e.slice(0,X4(e)+1).replace(q4,"")}var Q4=Y4,Z4=Q4,Vg=vn,J4=da,Kg=NaN,ez=/^[-+]0x[0-9a-f]+$/i,tz=/^0b[01]+$/i,rz=/^0o[0-7]+$/i,nz=parseInt;function iz(e){if(typeof e=="number")return e;if(J4(e))return Kg;if(Vg(e)){var t=typeof e.valueOf=="function"?e.valueOf():e;e=Vg(t)?t+"":t}if(typeof e!="string")return e===0?e:+e;e=Z4(e);var r=tz.test(e);return r||rz.test(e)?nz(e.slice(2),r?2:8):ez.test(e)?Kg:+e}var uO=iz,az=vn,Mf=H4,Gg=uO,oz="Expected a function",lz=Math.max,uz=Math.min;function sz(e,t,r){var n,i,a,o,l,u,s=0,f=!1,c=!1,d=!0;if(typeof e!="function")throw new TypeError(oz);t=Gg(t)||0,az(r)&&(f=!!r.leading,c="maxWait"in r,a=c?lz(Gg(r.maxWait)||0,t):a,d="trailing"in r?!!r.trailing:d);function p(w){var O=n,P=i;return n=i=void 0,s=w,o=e.apply(P,O),o}function b(w){return s=w,l=setTimeout(v,t),f?p(w):o}function m(w){var O=w-u,P=w-s,A=t-O;return c?uz(A,a-P):A}function y(w){var O=w-u,P=w-s;return u===void 0||O>=t||O<0||c&&P>=a}function v(){var w=Mf();if(y(w))return h(w);l=setTimeout(v,m(w))}function h(w){return l=void 0,d&&n?p(w):(n=i=void 0,o)}function x(){l!==void 0&&clearTimeout(l),s=0,n=u=i=l=void 0}function S(){return l===void 0?o:h(Mf())}function g(){var w=Mf(),O=y(w);if(n=arguments,i=this,u=w,O){if(l===void 0)return b(u);if(c)return clearTimeout(l),l=setTimeout(v,t),p(u)}return l===void 0&&(l=setTimeout(v,t)),o}return g.cancel=x,g.flush=S,g}var cz=sz,fz=cz,dz=vn,pz="Expected a function";function hz(e,t,r){var n=!0,i=!0;if(typeof e!="function")throw new TypeError(pz);return dz(r)&&(n="leading"in r?!!r.leading:n,i="trailing"in r?!!r.trailing:i),fz(e,t,{leading:n,maxWait:t,trailing:i})}var vz=hz;const sO=ve(vz);function Mo(e){"@babel/helpers - typeof";return Mo=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Mo(e)}function Xg(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Xl(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=new Array(t);r0&&(k=sO(k,m,{trailing:!0,leading:!1}));var L=new ResizeObserver(k),C=g.current.getBoundingClientRect(),I=C.width,B=C.height;return $(I,B),L.observe(g.current),function(){L.disconnect()}},[$,m]);var M=E.useMemo(function(){var k=A.containerWidth,L=A.containerHeight;if(k<0||L<0)return null;Bn(Cn(o)||Cn(u),`The width(%s) and height(%s) are both fixed numbers, + maybe you don't need to use a ResponsiveContainer.`,o,u),Bn(!r||r>0,"The aspect(%s) must be greater than zero.",r);var C=Cn(o)?k:o,I=Cn(u)?L:u;r&&r>0&&(C?I=C/r:I&&(C=I*r),d&&I>d&&(I=d)),Bn(C>0||I>0,`The width(%s) and height(%s) of chart should be greater than 0, + please check the style of container, or the props width(%s) and height(%s), + or add a minWidth(%s) or minHeight(%s) or use aspect(%s) to control the + height and width.`,C,I,o,u,f,c,r);var B=!Array.isArray(p)&&Pr(p.type).endsWith("Chart");return j.Children.map(p,function(N){return j.isValidElement(N)?E.cloneElement(N,Xl({width:C,height:I},B?{style:Xl({height:"100%",width:"100%",maxHeight:I,maxWidth:C},N.props.style)}:{})):N})},[r,p,u,d,c,f,A,o]);return j.createElement("div",{id:y?"".concat(y):void 0,className:oe("recharts-responsive-container",v),style:Xl(Xl({},S),{},{width:o,height:u,minWidth:f,minHeight:c,maxHeight:d}),ref:g},M)}),cO=function(t){return null};cO.displayName="Cell";function No(e){"@babel/helpers - typeof";return No=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},No(e)}function Yg(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function gp(e){for(var t=1;t1&&arguments[1]!==void 0?arguments[1]:{};if(t==null||Sa.isSsr)return{width:0,height:0};var n=Tz(r),i=JSON.stringify({text:t,copyStyle:n});if(ai.widthCache[i])return ai.widthCache[i];try{var a=document.getElementById(Qg);a||(a=document.createElement("span"),a.setAttribute("id",Qg),a.setAttribute("aria-hidden","true"),document.body.appendChild(a));var o=gp(gp({},jz),n);Object.assign(a.style,o),a.textContent="".concat(t);var l=a.getBoundingClientRect(),u={width:l.width,height:l.height};return ai.widthCache[i]=u,++ai.cacheCount>$z&&(ai.cacheCount=0,ai.widthCache={}),u}catch{return{width:0,height:0}}},Cz=function(t){return{top:t.top+window.scrollY-document.documentElement.clientTop,left:t.left+window.scrollX-document.documentElement.clientLeft}};function Io(e){"@babel/helpers - typeof";return Io=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Io(e)}function ns(e,t){return Iz(e)||Nz(e,t)||Mz(e,t)||kz()}function kz(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function Mz(e,t){if(e){if(typeof e=="string")return Zg(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if(r==="Object"&&e.constructor&&(r=e.constructor.name),r==="Map"||r==="Set")return Array.from(e);if(r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return Zg(e,t)}}function Zg(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function qz(e,t){if(e==null)return{};var r={};for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){if(t.indexOf(n)>=0)continue;r[n]=e[n]}return r}function i0(e,t){return Jz(e)||Zz(e,t)||Qz(e,t)||Yz()}function Yz(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function Qz(e,t){if(e){if(typeof e=="string")return a0(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if(r==="Object"&&e.constructor&&(r=e.constructor.name),r==="Map"||r==="Set")return Array.from(e);if(r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return a0(e,t)}}function a0(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r0&&arguments[0]!==void 0?arguments[0]:[];return C.reduce(function(I,B){var N=B.word,R=B.width,U=I[I.length-1];if(U&&(i==null||a||U.width+R+nB.width?I:B})};if(!f)return p;for(var m="…",y=function(C){var I=c.slice(0,C),B=hO({breakAll:s,style:u,children:I+m}).wordsWithComputedWidth,N=d(B),R=N.length>o||b(N).width>Number(i);return[R,N]},v=0,h=c.length-1,x=0,S;v<=h&&x<=c.length-1;){var g=Math.floor((v+h)/2),w=g-1,O=y(w),P=i0(O,2),A=P[0],T=P[1],$=y(g),M=i0($,1),k=M[0];if(!A&&!k&&(v=g+1),A&&k&&(h=g-1),!A&&k){S=T;break}x++}return S||p},o0=function(t){var r=re(t)?[]:t.toString().split(pO);return[{words:r}]},tU=function(t){var r=t.width,n=t.scaleToFit,i=t.children,a=t.style,o=t.breakAll,l=t.maxLines;if((r||n)&&!Sa.isSsr){var u,s,f=hO({breakAll:o,children:i,style:a});if(f){var c=f.wordsWithComputedWidth,d=f.spaceWidth;u=c,s=d}else return o0(i);return eU({breakAll:o,children:i,maxLines:l,style:a},u,s,r,n)}return o0(i)},l0="#808080",is=function(t){var r=t.x,n=r===void 0?0:r,i=t.y,a=i===void 0?0:i,o=t.lineHeight,l=o===void 0?"1em":o,u=t.capHeight,s=u===void 0?"0.71em":u,f=t.scaleToFit,c=f===void 0?!1:f,d=t.textAnchor,p=d===void 0?"start":d,b=t.verticalAnchor,m=b===void 0?"end":b,y=t.fill,v=y===void 0?l0:y,h=n0(t,Gz),x=E.useMemo(function(){return tU({breakAll:h.breakAll,children:h.children,maxLines:h.maxLines,scaleToFit:c,style:h.style,width:h.width})},[h.breakAll,h.children,h.maxLines,c,h.style,h.width]),S=h.dx,g=h.dy,w=h.angle,O=h.className,P=h.breakAll,A=n0(h,Xz);if(!Fe(n)||!Fe(a))return null;var T=n+(H(S)?S:0),$=a+(H(g)?g:0),M;switch(m){case"start":M=Nf("calc(".concat(s,")"));break;case"middle":M=Nf("calc(".concat((x.length-1)/2," * -").concat(l," + (").concat(s," / 2))"));break;default:M=Nf("calc(".concat(x.length-1," * -").concat(l,")"));break}var k=[];if(c){var L=x[0].width,C=h.width;k.push("scale(".concat((H(C)?C/L:1)/L,")"))}return w&&k.push("rotate(".concat(w,", ").concat(T,", ").concat($,")")),k.length&&(A.transform=k.join(" ")),j.createElement("text",bp({},te(A,!0),{x:T,y:$,className:oe("recharts-text",O),textAnchor:p,fill:v.includes("url")?l0:v}),x.map(function(I,B){var N=I.words.join(P?"":" ");return j.createElement("tspan",{x:T,dy:B===0?M:l,key:"".concat(N,"-").concat(B)},N)}))};function ln(e,t){return e==null||t==null?NaN:et?1:e>=t?0:NaN}function rU(e,t){return e==null||t==null?NaN:te?1:t>=e?0:NaN}function zv(e){let t,r,n;e.length!==2?(t=ln,r=(l,u)=>ln(e(l),u),n=(l,u)=>e(l)-u):(t=e===ln||e===rU?e:nU,r=e,n=e);function i(l,u,s=0,f=l.length){if(s>>1;r(l[c],u)<0?s=c+1:f=c}while(s>>1;r(l[c],u)<=0?s=c+1:f=c}while(ss&&n(l[c-1],u)>-n(l[c],u)?c-1:c}return{left:i,center:o,right:a}}function nU(){return 0}function vO(e){return e===null?NaN:+e}function*iU(e,t){for(let r of e)r!=null&&(r=+r)>=r&&(yield r)}const aU=zv(ln),wl=aU.right;zv(vO).center;class u0 extends Map{constructor(t,r=uU){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:r}}),t!=null)for(const[n,i]of t)this.set(n,i)}get(t){return super.get(s0(this,t))}has(t){return super.has(s0(this,t))}set(t,r){return super.set(oU(this,t),r)}delete(t){return super.delete(lU(this,t))}}function s0({_intern:e,_key:t},r){const n=t(r);return e.has(n)?e.get(n):r}function oU({_intern:e,_key:t},r){const n=t(r);return e.has(n)?e.get(n):(e.set(n,r),r)}function lU({_intern:e,_key:t},r){const n=t(r);return e.has(n)&&(r=e.get(n),e.delete(n)),r}function uU(e){return e!==null&&typeof e=="object"?e.valueOf():e}function sU(e=ln){if(e===ln)return mO;if(typeof e!="function")throw new TypeError("compare is not a function");return(t,r)=>{const n=e(t,r);return n||n===0?n:(e(r,r)===0)-(e(t,t)===0)}}function mO(e,t){return(e==null||!(e>=e))-(t==null||!(t>=t))||(et?1:0)}const cU=Math.sqrt(50),fU=Math.sqrt(10),dU=Math.sqrt(2);function as(e,t,r){const n=(t-e)/Math.max(0,r),i=Math.floor(Math.log10(n)),a=n/Math.pow(10,i),o=a>=cU?10:a>=fU?5:a>=dU?2:1;let l,u,s;return i<0?(s=Math.pow(10,-i)/o,l=Math.round(e*s),u=Math.round(t*s),l/st&&--u,s=-s):(s=Math.pow(10,i)*o,l=Math.round(e/s),u=Math.round(t/s),l*st&&--u),u0))return[];if(e===t)return[e];const n=t=i))return[];const l=a-i+1,u=new Array(l);if(n)if(o<0)for(let s=0;s=n)&&(r=n);return r}function f0(e,t){let r;for(const n of e)n!=null&&(r>n||r===void 0&&n>=n)&&(r=n);return r}function yO(e,t,r=0,n=1/0,i){if(t=Math.floor(t),r=Math.floor(Math.max(0,r)),n=Math.floor(Math.min(e.length-1,n)),!(r<=t&&t<=n))return e;for(i=i===void 0?mO:sU(i);n>r;){if(n-r>600){const u=n-r+1,s=t-r+1,f=Math.log(u),c=.5*Math.exp(2*f/3),d=.5*Math.sqrt(f*c*(u-c)/u)*(s-u/2<0?-1:1),p=Math.max(r,Math.floor(t-s*c/u+d)),b=Math.min(n,Math.floor(t+(u-s)*c/u+d));yO(e,t,p,b,i)}const a=e[t];let o=r,l=n;for(Da(e,r,t),i(e[n],a)>0&&Da(e,r,n);o0;)--l}i(e[r],a)===0?Da(e,r,l):(++l,Da(e,l,n)),l<=t&&(r=l+1),t<=l&&(n=l-1)}return e}function Da(e,t,r){const n=e[t];e[t]=e[r],e[r]=n}function pU(e,t,r){if(e=Float64Array.from(iU(e)),!(!(n=e.length)||isNaN(t=+t))){if(t<=0||n<2)return f0(e);if(t>=1)return c0(e);var n,i=(n-1)*t,a=Math.floor(i),o=c0(yO(e,a).subarray(0,a+1)),l=f0(e.subarray(a+1));return o+(l-o)*(i-a)}}function hU(e,t,r=vO){if(!(!(n=e.length)||isNaN(t=+t))){if(t<=0||n<2)return+r(e[0],0,e);if(t>=1)return+r(e[n-1],n-1,e);var n,i=(n-1)*t,a=Math.floor(i),o=+r(e[a],a,e),l=+r(e[a+1],a+1,e);return o+(l-o)*(i-a)}}function vU(e,t,r){e=+e,t=+t,r=(i=arguments.length)<2?(t=e,e=0,1):i<3?1:+r;for(var n=-1,i=Math.max(0,Math.ceil((t-e)/r))|0,a=new Array(i);++n>8&15|t>>4&240,t>>4&15|t&240,(t&15)<<4|t&15,1):r===8?Yl(t>>24&255,t>>16&255,t>>8&255,(t&255)/255):r===4?Yl(t>>12&15|t>>8&240,t>>8&15|t>>4&240,t>>4&15|t&240,((t&15)<<4|t&15)/255):null):(t=yU.exec(e))?new ht(t[1],t[2],t[3],1):(t=gU.exec(e))?new ht(t[1]*255/100,t[2]*255/100,t[3]*255/100,1):(t=bU.exec(e))?Yl(t[1],t[2],t[3],t[4]):(t=xU.exec(e))?Yl(t[1]*255/100,t[2]*255/100,t[3]*255/100,t[4]):(t=wU.exec(e))?g0(t[1],t[2]/100,t[3]/100,1):(t=SU.exec(e))?g0(t[1],t[2]/100,t[3]/100,t[4]):d0.hasOwnProperty(e)?v0(d0[e]):e==="transparent"?new ht(NaN,NaN,NaN,0):null}function v0(e){return new ht(e>>16&255,e>>8&255,e&255,1)}function Yl(e,t,r,n){return n<=0&&(e=t=r=NaN),new ht(e,t,r,n)}function PU(e){return e instanceof Sl||(e=Bo(e)),e?(e=e.rgb(),new ht(e.r,e.g,e.b,e.opacity)):new ht}function _p(e,t,r,n){return arguments.length===1?PU(e):new ht(e,t,r,n??1)}function ht(e,t,r,n){this.r=+e,this.g=+t,this.b=+r,this.opacity=+n}Fv(ht,_p,bO(Sl,{brighter(e){return e=e==null?os:Math.pow(os,e),new ht(this.r*e,this.g*e,this.b*e,this.opacity)},darker(e){return e=e==null?Lo:Math.pow(Lo,e),new ht(this.r*e,this.g*e,this.b*e,this.opacity)},rgb(){return this},clamp(){return new ht(zn(this.r),zn(this.g),zn(this.b),ls(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:m0,formatHex:m0,formatHex8:AU,formatRgb:y0,toString:y0}));function m0(){return`#${kn(this.r)}${kn(this.g)}${kn(this.b)}`}function AU(){return`#${kn(this.r)}${kn(this.g)}${kn(this.b)}${kn((isNaN(this.opacity)?1:this.opacity)*255)}`}function y0(){const e=ls(this.opacity);return`${e===1?"rgb(":"rgba("}${zn(this.r)}, ${zn(this.g)}, ${zn(this.b)}${e===1?")":`, ${e})`}`}function ls(e){return isNaN(e)?1:Math.max(0,Math.min(1,e))}function zn(e){return Math.max(0,Math.min(255,Math.round(e)||0))}function kn(e){return e=zn(e),(e<16?"0":"")+e.toString(16)}function g0(e,t,r,n){return n<=0?e=t=r=NaN:r<=0||r>=1?e=t=NaN:t<=0&&(e=NaN),new Zt(e,t,r,n)}function xO(e){if(e instanceof Zt)return new Zt(e.h,e.s,e.l,e.opacity);if(e instanceof Sl||(e=Bo(e)),!e)return new Zt;if(e instanceof Zt)return e;e=e.rgb();var t=e.r/255,r=e.g/255,n=e.b/255,i=Math.min(t,r,n),a=Math.max(t,r,n),o=NaN,l=a-i,u=(a+i)/2;return l?(t===a?o=(r-n)/l+(r0&&u<1?0:o,new Zt(o,l,u,e.opacity)}function EU(e,t,r,n){return arguments.length===1?xO(e):new Zt(e,t,r,n??1)}function Zt(e,t,r,n){this.h=+e,this.s=+t,this.l=+r,this.opacity=+n}Fv(Zt,EU,bO(Sl,{brighter(e){return e=e==null?os:Math.pow(os,e),new Zt(this.h,this.s,this.l*e,this.opacity)},darker(e){return e=e==null?Lo:Math.pow(Lo,e),new Zt(this.h,this.s,this.l*e,this.opacity)},rgb(){var e=this.h%360+(this.h<0)*360,t=isNaN(e)||isNaN(this.s)?0:this.s,r=this.l,n=r+(r<.5?r:1-r)*t,i=2*r-n;return new ht(If(e>=240?e-240:e+120,i,n),If(e,i,n),If(e<120?e+240:e-120,i,n),this.opacity)},clamp(){return new Zt(b0(this.h),Ql(this.s),Ql(this.l),ls(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const e=ls(this.opacity);return`${e===1?"hsl(":"hsla("}${b0(this.h)}, ${Ql(this.s)*100}%, ${Ql(this.l)*100}%${e===1?")":`, ${e})`}`}}));function b0(e){return e=(e||0)%360,e<0?e+360:e}function Ql(e){return Math.max(0,Math.min(1,e||0))}function If(e,t,r){return(e<60?t+(r-t)*e/60:e<180?r:e<240?t+(r-t)*(240-e)/60:t)*255}const Wv=e=>()=>e;function $U(e,t){return function(r){return e+r*t}}function jU(e,t,r){return e=Math.pow(e,r),t=Math.pow(t,r)-e,r=1/r,function(n){return Math.pow(e+n*t,r)}}function TU(e){return(e=+e)==1?wO:function(t,r){return r-t?jU(t,r,e):Wv(isNaN(t)?r:t)}}function wO(e,t){var r=t-e;return r?$U(e,r):Wv(isNaN(e)?t:e)}const x0=function e(t){var r=TU(t);function n(i,a){var o=r((i=_p(i)).r,(a=_p(a)).r),l=r(i.g,a.g),u=r(i.b,a.b),s=wO(i.opacity,a.opacity);return function(f){return i.r=o(f),i.g=l(f),i.b=u(f),i.opacity=s(f),i+""}}return n.gamma=e,n}(1);function CU(e,t){t||(t=[]);var r=e?Math.min(t.length,e.length):0,n=t.slice(),i;return function(a){for(i=0;ir&&(a=t.slice(r,a),l[o]?l[o]+=a:l[++o]=a),(n=n[0])===(i=i[0])?l[o]?l[o]+=i:l[++o]=i:(l[++o]=null,u.push({i:o,x:us(n,i)})),r=Df.lastIndex;return rt&&(r=e,e=t,t=r),function(n){return Math.max(e,Math.min(t,n))}}function FU(e,t,r){var n=e[0],i=e[1],a=t[0],o=t[1];return i2?WU:FU,u=s=null,c}function c(d){return d==null||isNaN(d=+d)?a:(u||(u=l(e.map(n),t,r)))(n(o(d)))}return c.invert=function(d){return o(i((s||(s=l(t,e.map(n),us)))(d)))},c.domain=function(d){return arguments.length?(e=Array.from(d,ss),f()):e.slice()},c.range=function(d){return arguments.length?(t=Array.from(d),f()):t.slice()},c.rangeRound=function(d){return t=Array.from(d),r=Hv,f()},c.clamp=function(d){return arguments.length?(o=d?!0:ot,f()):o!==ot},c.interpolate=function(d){return arguments.length?(r=d,f()):r},c.unknown=function(d){return arguments.length?(a=d,c):a},function(d,p){return n=d,i=p,f()}}function Vv(){return Ec()(ot,ot)}function HU(e){return Math.abs(e=Math.round(e))>=1e21?e.toLocaleString("en").replace(/,/g,""):e.toString(10)}function cs(e,t){if((r=(e=t?e.toExponential(t-1):e.toExponential()).indexOf("e"))<0)return null;var r,n=e.slice(0,r);return[n.length>1?n[0]+n.slice(2):n,+e.slice(r+1)]}function Vi(e){return e=cs(Math.abs(e)),e?e[1]:NaN}function VU(e,t){return function(r,n){for(var i=r.length,a=[],o=0,l=e[0],u=0;i>0&&l>0&&(u+l+1>n&&(l=Math.max(1,n-u)),a.push(r.substring(i-=l,i+l)),!((u+=l+1)>n));)l=e[o=(o+1)%e.length];return a.reverse().join(t)}}function KU(e){return function(t){return t.replace(/[0-9]/g,function(r){return e[+r]})}}var GU=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function zo(e){if(!(t=GU.exec(e)))throw new Error("invalid format: "+e);var t;return new Kv({fill:t[1],align:t[2],sign:t[3],symbol:t[4],zero:t[5],width:t[6],comma:t[7],precision:t[8]&&t[8].slice(1),trim:t[9],type:t[10]})}zo.prototype=Kv.prototype;function Kv(e){this.fill=e.fill===void 0?" ":e.fill+"",this.align=e.align===void 0?">":e.align+"",this.sign=e.sign===void 0?"-":e.sign+"",this.symbol=e.symbol===void 0?"":e.symbol+"",this.zero=!!e.zero,this.width=e.width===void 0?void 0:+e.width,this.comma=!!e.comma,this.precision=e.precision===void 0?void 0:+e.precision,this.trim=!!e.trim,this.type=e.type===void 0?"":e.type+""}Kv.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type};function XU(e){e:for(var t=e.length,r=1,n=-1,i;r0&&(n=0);break}return n>0?e.slice(0,n)+e.slice(i+1):e}var SO;function qU(e,t){var r=cs(e,t);if(!r)return e+"";var n=r[0],i=r[1],a=i-(SO=Math.max(-8,Math.min(8,Math.floor(i/3)))*3)+1,o=n.length;return a===o?n:a>o?n+new Array(a-o+1).join("0"):a>0?n.slice(0,a)+"."+n.slice(a):"0."+new Array(1-a).join("0")+cs(e,Math.max(0,t+a-1))[0]}function S0(e,t){var r=cs(e,t);if(!r)return e+"";var n=r[0],i=r[1];return i<0?"0."+new Array(-i).join("0")+n:n.length>i+1?n.slice(0,i+1)+"."+n.slice(i+1):n+new Array(i-n.length+2).join("0")}const O0={"%":(e,t)=>(e*100).toFixed(t),b:e=>Math.round(e).toString(2),c:e=>e+"",d:HU,e:(e,t)=>e.toExponential(t),f:(e,t)=>e.toFixed(t),g:(e,t)=>e.toPrecision(t),o:e=>Math.round(e).toString(8),p:(e,t)=>S0(e*100,t),r:S0,s:qU,X:e=>Math.round(e).toString(16).toUpperCase(),x:e=>Math.round(e).toString(16)};function _0(e){return e}var P0=Array.prototype.map,A0=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function YU(e){var t=e.grouping===void 0||e.thousands===void 0?_0:VU(P0.call(e.grouping,Number),e.thousands+""),r=e.currency===void 0?"":e.currency[0]+"",n=e.currency===void 0?"":e.currency[1]+"",i=e.decimal===void 0?".":e.decimal+"",a=e.numerals===void 0?_0:KU(P0.call(e.numerals,String)),o=e.percent===void 0?"%":e.percent+"",l=e.minus===void 0?"−":e.minus+"",u=e.nan===void 0?"NaN":e.nan+"";function s(c){c=zo(c);var d=c.fill,p=c.align,b=c.sign,m=c.symbol,y=c.zero,v=c.width,h=c.comma,x=c.precision,S=c.trim,g=c.type;g==="n"?(h=!0,g="g"):O0[g]||(x===void 0&&(x=12),S=!0,g="g"),(y||d==="0"&&p==="=")&&(y=!0,d="0",p="=");var w=m==="$"?r:m==="#"&&/[boxX]/.test(g)?"0"+g.toLowerCase():"",O=m==="$"?n:/[%p]/.test(g)?o:"",P=O0[g],A=/[defgprs%]/.test(g);x=x===void 0?6:/[gprs]/.test(g)?Math.max(1,Math.min(21,x)):Math.max(0,Math.min(20,x));function T($){var M=w,k=O,L,C,I;if(g==="c")k=P($)+k,$="";else{$=+$;var B=$<0||1/$<0;if($=isNaN($)?u:P(Math.abs($),x),S&&($=XU($)),B&&+$==0&&b!=="+"&&(B=!1),M=(B?b==="("?b:l:b==="-"||b==="("?"":b)+M,k=(g==="s"?A0[8+SO/3]:"")+k+(B&&b==="("?")":""),A){for(L=-1,C=$.length;++LI||I>57){k=(I===46?i+$.slice(L+1):$.slice(L))+k,$=$.slice(0,L);break}}}h&&!y&&($=t($,1/0));var N=M.length+$.length+k.length,R=N>1)+M+$+k+R.slice(N);break;default:$=R+M+$+k;break}return a($)}return T.toString=function(){return c+""},T}function f(c,d){var p=s((c=zo(c),c.type="f",c)),b=Math.max(-8,Math.min(8,Math.floor(Vi(d)/3)))*3,m=Math.pow(10,-b),y=A0[8+b/3];return function(v){return p(m*v)+y}}return{format:s,formatPrefix:f}}var Zl,Gv,OO;QU({thousands:",",grouping:[3],currency:["$",""]});function QU(e){return Zl=YU(e),Gv=Zl.format,OO=Zl.formatPrefix,Zl}function ZU(e){return Math.max(0,-Vi(Math.abs(e)))}function JU(e,t){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(Vi(t)/3)))*3-Vi(Math.abs(e)))}function e8(e,t){return e=Math.abs(e),t=Math.abs(t)-e,Math.max(0,Vi(t)-Vi(e))+1}function _O(e,t,r,n){var i=Sp(e,t,r),a;switch(n=zo(n??",f"),n.type){case"s":{var o=Math.max(Math.abs(e),Math.abs(t));return n.precision==null&&!isNaN(a=JU(i,o))&&(n.precision=a),OO(n,o)}case"":case"e":case"g":case"p":case"r":{n.precision==null&&!isNaN(a=e8(i,Math.max(Math.abs(e),Math.abs(t))))&&(n.precision=a-(n.type==="e"));break}case"f":case"%":{n.precision==null&&!isNaN(a=ZU(i))&&(n.precision=a-(n.type==="%")*2);break}}return Gv(n)}function mn(e){var t=e.domain;return e.ticks=function(r){var n=t();return xp(n[0],n[n.length-1],r??10)},e.tickFormat=function(r,n){var i=t();return _O(i[0],i[i.length-1],r??10,n)},e.nice=function(r){r==null&&(r=10);var n=t(),i=0,a=n.length-1,o=n[i],l=n[a],u,s,f=10;for(l0;){if(s=wp(o,l,r),s===u)return n[i]=o,n[a]=l,t(n);if(s>0)o=Math.floor(o/s)*s,l=Math.ceil(l/s)*s;else if(s<0)o=Math.ceil(o*s)/s,l=Math.floor(l*s)/s;else break;u=s}return e},e}function fs(){var e=Vv();return e.copy=function(){return Ol(e,fs())},Vt.apply(e,arguments),mn(e)}function PO(e){var t;function r(n){return n==null||isNaN(n=+n)?t:n}return r.invert=r,r.domain=r.range=function(n){return arguments.length?(e=Array.from(n,ss),r):e.slice()},r.unknown=function(n){return arguments.length?(t=n,r):t},r.copy=function(){return PO(e).unknown(t)},e=arguments.length?Array.from(e,ss):[0,1],mn(r)}function AO(e,t){e=e.slice();var r=0,n=e.length-1,i=e[r],a=e[n],o;return aMath.pow(e,t)}function a8(e){return e===Math.E?Math.log:e===10&&Math.log10||e===2&&Math.log2||(e=Math.log(e),t=>Math.log(t)/e)}function j0(e){return(t,r)=>-e(-t,r)}function Xv(e){const t=e(E0,$0),r=t.domain;let n=10,i,a;function o(){return i=a8(n),a=i8(n),r()[0]<0?(i=j0(i),a=j0(a),e(t8,r8)):e(E0,$0),t}return t.base=function(l){return arguments.length?(n=+l,o()):n},t.domain=function(l){return arguments.length?(r(l),o()):r()},t.ticks=l=>{const u=r();let s=u[0],f=u[u.length-1];const c=f0){for(;d<=p;++d)for(b=1;bf)break;v.push(m)}}else for(;d<=p;++d)for(b=n-1;b>=1;--b)if(m=d>0?b/a(-d):b*a(d),!(mf)break;v.push(m)}v.length*2{if(l==null&&(l=10),u==null&&(u=n===10?"s":","),typeof u!="function"&&(!(n%1)&&(u=zo(u)).precision==null&&(u.trim=!0),u=Gv(u)),l===1/0)return u;const s=Math.max(1,n*l/t.ticks().length);return f=>{let c=f/a(Math.round(i(f)));return c*nr(AO(r(),{floor:l=>a(Math.floor(i(l))),ceil:l=>a(Math.ceil(i(l)))})),t}function EO(){const e=Xv(Ec()).domain([1,10]);return e.copy=()=>Ol(e,EO()).base(e.base()),Vt.apply(e,arguments),e}function T0(e){return function(t){return Math.sign(t)*Math.log1p(Math.abs(t/e))}}function C0(e){return function(t){return Math.sign(t)*Math.expm1(Math.abs(t))*e}}function qv(e){var t=1,r=e(T0(t),C0(t));return r.constant=function(n){return arguments.length?e(T0(t=+n),C0(t)):t},mn(r)}function $O(){var e=qv(Ec());return e.copy=function(){return Ol(e,$O()).constant(e.constant())},Vt.apply(e,arguments)}function k0(e){return function(t){return t<0?-Math.pow(-t,e):Math.pow(t,e)}}function o8(e){return e<0?-Math.sqrt(-e):Math.sqrt(e)}function l8(e){return e<0?-e*e:e*e}function Yv(e){var t=e(ot,ot),r=1;function n(){return r===1?e(ot,ot):r===.5?e(o8,l8):e(k0(r),k0(1/r))}return t.exponent=function(i){return arguments.length?(r=+i,n()):r},mn(t)}function Qv(){var e=Yv(Ec());return e.copy=function(){return Ol(e,Qv()).exponent(e.exponent())},Vt.apply(e,arguments),e}function u8(){return Qv.apply(null,arguments).exponent(.5)}function M0(e){return Math.sign(e)*e*e}function s8(e){return Math.sign(e)*Math.sqrt(Math.abs(e))}function jO(){var e=Vv(),t=[0,1],r=!1,n;function i(a){var o=s8(e(a));return isNaN(o)?n:r?Math.round(o):o}return i.invert=function(a){return e.invert(M0(a))},i.domain=function(a){return arguments.length?(e.domain(a),i):e.domain()},i.range=function(a){return arguments.length?(e.range((t=Array.from(a,ss)).map(M0)),i):t.slice()},i.rangeRound=function(a){return i.range(a).round(!0)},i.round=function(a){return arguments.length?(r=!!a,i):r},i.clamp=function(a){return arguments.length?(e.clamp(a),i):e.clamp()},i.unknown=function(a){return arguments.length?(n=a,i):n},i.copy=function(){return jO(e.domain(),t).round(r).clamp(e.clamp()).unknown(n)},Vt.apply(i,arguments),mn(i)}function TO(){var e=[],t=[],r=[],n;function i(){var o=0,l=Math.max(1,t.length);for(r=new Array(l-1);++o0?r[l-1]:e[0],l=r?[n[r-1],t]:[n[s-1],n[s]]},o.unknown=function(u){return arguments.length&&(a=u),o},o.thresholds=function(){return n.slice()},o.copy=function(){return CO().domain([e,t]).range(i).unknown(a)},Vt.apply(mn(o),arguments)}function kO(){var e=[.5],t=[0,1],r,n=1;function i(a){return a!=null&&a<=a?t[wl(e,a,0,n)]:r}return i.domain=function(a){return arguments.length?(e=Array.from(a),n=Math.min(e.length,t.length-1),i):e.slice()},i.range=function(a){return arguments.length?(t=Array.from(a),n=Math.min(e.length,t.length-1),i):t.slice()},i.invertExtent=function(a){var o=t.indexOf(a);return[e[o-1],e[o]]},i.unknown=function(a){return arguments.length?(r=a,i):r},i.copy=function(){return kO().domain(e).range(t).unknown(r)},Vt.apply(i,arguments)}const Lf=new Date,Rf=new Date;function We(e,t,r,n){function i(a){return e(a=arguments.length===0?new Date:new Date(+a)),a}return i.floor=a=>(e(a=new Date(+a)),a),i.ceil=a=>(e(a=new Date(a-1)),t(a,1),e(a),a),i.round=a=>{const o=i(a),l=i.ceil(a);return a-o(t(a=new Date(+a),o==null?1:Math.floor(o)),a),i.range=(a,o,l)=>{const u=[];if(a=i.ceil(a),l=l==null?1:Math.floor(l),!(a0))return u;let s;do u.push(s=new Date(+a)),t(a,l),e(a);while(sWe(o=>{if(o>=o)for(;e(o),!a(o);)o.setTime(o-1)},(o,l)=>{if(o>=o)if(l<0)for(;++l<=0;)for(;t(o,-1),!a(o););else for(;--l>=0;)for(;t(o,1),!a(o););}),r&&(i.count=(a,o)=>(Lf.setTime(+a),Rf.setTime(+o),e(Lf),e(Rf),Math.floor(r(Lf,Rf))),i.every=a=>(a=Math.floor(a),!isFinite(a)||!(a>0)?null:a>1?i.filter(n?o=>n(o)%a===0:o=>i.count(0,o)%a===0):i)),i}const ds=We(()=>{},(e,t)=>{e.setTime(+e+t)},(e,t)=>t-e);ds.every=e=>(e=Math.floor(e),!isFinite(e)||!(e>0)?null:e>1?We(t=>{t.setTime(Math.floor(t/e)*e)},(t,r)=>{t.setTime(+t+r*e)},(t,r)=>(r-t)/e):ds);ds.range;const Sr=1e3,Rt=Sr*60,Or=Rt*60,Cr=Or*24,Zv=Cr*7,N0=Cr*30,Bf=Cr*365,Mn=We(e=>{e.setTime(e-e.getMilliseconds())},(e,t)=>{e.setTime(+e+t*Sr)},(e,t)=>(t-e)/Sr,e=>e.getUTCSeconds());Mn.range;const Jv=We(e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*Sr)},(e,t)=>{e.setTime(+e+t*Rt)},(e,t)=>(t-e)/Rt,e=>e.getMinutes());Jv.range;const em=We(e=>{e.setUTCSeconds(0,0)},(e,t)=>{e.setTime(+e+t*Rt)},(e,t)=>(t-e)/Rt,e=>e.getUTCMinutes());em.range;const tm=We(e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*Sr-e.getMinutes()*Rt)},(e,t)=>{e.setTime(+e+t*Or)},(e,t)=>(t-e)/Or,e=>e.getHours());tm.range;const rm=We(e=>{e.setUTCMinutes(0,0,0)},(e,t)=>{e.setTime(+e+t*Or)},(e,t)=>(t-e)/Or,e=>e.getUTCHours());rm.range;const _l=We(e=>e.setHours(0,0,0,0),(e,t)=>e.setDate(e.getDate()+t),(e,t)=>(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*Rt)/Cr,e=>e.getDate()-1);_l.range;const $c=We(e=>{e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCDate(e.getUTCDate()+t)},(e,t)=>(t-e)/Cr,e=>e.getUTCDate()-1);$c.range;const MO=We(e=>{e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCDate(e.getUTCDate()+t)},(e,t)=>(t-e)/Cr,e=>Math.floor(e/Cr));MO.range;function ei(e){return We(t=>{t.setDate(t.getDate()-(t.getDay()+7-e)%7),t.setHours(0,0,0,0)},(t,r)=>{t.setDate(t.getDate()+r*7)},(t,r)=>(r-t-(r.getTimezoneOffset()-t.getTimezoneOffset())*Rt)/Zv)}const jc=ei(0),ps=ei(1),c8=ei(2),f8=ei(3),Ki=ei(4),d8=ei(5),p8=ei(6);jc.range;ps.range;c8.range;f8.range;Ki.range;d8.range;p8.range;function ti(e){return We(t=>{t.setUTCDate(t.getUTCDate()-(t.getUTCDay()+7-e)%7),t.setUTCHours(0,0,0,0)},(t,r)=>{t.setUTCDate(t.getUTCDate()+r*7)},(t,r)=>(r-t)/Zv)}const Tc=ti(0),hs=ti(1),h8=ti(2),v8=ti(3),Gi=ti(4),m8=ti(5),y8=ti(6);Tc.range;hs.range;h8.range;v8.range;Gi.range;m8.range;y8.range;const nm=We(e=>{e.setDate(1),e.setHours(0,0,0,0)},(e,t)=>{e.setMonth(e.getMonth()+t)},(e,t)=>t.getMonth()-e.getMonth()+(t.getFullYear()-e.getFullYear())*12,e=>e.getMonth());nm.range;const im=We(e=>{e.setUTCDate(1),e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCMonth(e.getUTCMonth()+t)},(e,t)=>t.getUTCMonth()-e.getUTCMonth()+(t.getUTCFullYear()-e.getUTCFullYear())*12,e=>e.getUTCMonth());im.range;const kr=We(e=>{e.setMonth(0,1),e.setHours(0,0,0,0)},(e,t)=>{e.setFullYear(e.getFullYear()+t)},(e,t)=>t.getFullYear()-e.getFullYear(),e=>e.getFullYear());kr.every=e=>!isFinite(e=Math.floor(e))||!(e>0)?null:We(t=>{t.setFullYear(Math.floor(t.getFullYear()/e)*e),t.setMonth(0,1),t.setHours(0,0,0,0)},(t,r)=>{t.setFullYear(t.getFullYear()+r*e)});kr.range;const Mr=We(e=>{e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCFullYear(e.getUTCFullYear()+t)},(e,t)=>t.getUTCFullYear()-e.getUTCFullYear(),e=>e.getUTCFullYear());Mr.every=e=>!isFinite(e=Math.floor(e))||!(e>0)?null:We(t=>{t.setUTCFullYear(Math.floor(t.getUTCFullYear()/e)*e),t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},(t,r)=>{t.setUTCFullYear(t.getUTCFullYear()+r*e)});Mr.range;function NO(e,t,r,n,i,a){const o=[[Mn,1,Sr],[Mn,5,5*Sr],[Mn,15,15*Sr],[Mn,30,30*Sr],[a,1,Rt],[a,5,5*Rt],[a,15,15*Rt],[a,30,30*Rt],[i,1,Or],[i,3,3*Or],[i,6,6*Or],[i,12,12*Or],[n,1,Cr],[n,2,2*Cr],[r,1,Zv],[t,1,N0],[t,3,3*N0],[e,1,Bf]];function l(s,f,c){const d=fy).right(o,d);if(p===o.length)return e.every(Sp(s/Bf,f/Bf,c));if(p===0)return ds.every(Math.max(Sp(s,f,c),1));const[b,m]=o[d/o[p-1][2]53)return null;"w"in z||(z.w=1),"Z"in z?(ie=Uf(La(z.y,0,1)),De=ie.getUTCDay(),ie=De>4||De===0?hs.ceil(ie):hs(ie),ie=$c.offset(ie,(z.V-1)*7),z.y=ie.getUTCFullYear(),z.m=ie.getUTCMonth(),z.d=ie.getUTCDate()+(z.w+6)%7):(ie=zf(La(z.y,0,1)),De=ie.getDay(),ie=De>4||De===0?ps.ceil(ie):ps(ie),ie=_l.offset(ie,(z.V-1)*7),z.y=ie.getFullYear(),z.m=ie.getMonth(),z.d=ie.getDate()+(z.w+6)%7)}else("W"in z||"U"in z)&&("w"in z||(z.w="u"in z?z.u%7:"W"in z?1:0),De="Z"in z?Uf(La(z.y,0,1)).getUTCDay():zf(La(z.y,0,1)).getDay(),z.m=0,z.d="W"in z?(z.w+6)%7+z.W*7-(De+5)%7:z.w+z.U*7-(De+6)%7);return"Z"in z?(z.H+=z.Z/100|0,z.M+=z.Z%100,Uf(z)):zf(z)}}function P(K,Q,Z,z){for(var Ee=0,ie=Q.length,De=Z.length,Le,ft;Ee=De)return-1;if(Le=Q.charCodeAt(Ee++),Le===37){if(Le=Q.charAt(Ee++),ft=g[Le in I0?Q.charAt(Ee++):Le],!ft||(z=ft(K,Z,z))<0)return-1}else if(Le!=Z.charCodeAt(z++))return-1}return z}function A(K,Q,Z){var z=s.exec(Q.slice(Z));return z?(K.p=f.get(z[0].toLowerCase()),Z+z[0].length):-1}function T(K,Q,Z){var z=p.exec(Q.slice(Z));return z?(K.w=b.get(z[0].toLowerCase()),Z+z[0].length):-1}function $(K,Q,Z){var z=c.exec(Q.slice(Z));return z?(K.w=d.get(z[0].toLowerCase()),Z+z[0].length):-1}function M(K,Q,Z){var z=v.exec(Q.slice(Z));return z?(K.m=h.get(z[0].toLowerCase()),Z+z[0].length):-1}function k(K,Q,Z){var z=m.exec(Q.slice(Z));return z?(K.m=y.get(z[0].toLowerCase()),Z+z[0].length):-1}function L(K,Q,Z){return P(K,t,Q,Z)}function C(K,Q,Z){return P(K,r,Q,Z)}function I(K,Q,Z){return P(K,n,Q,Z)}function B(K){return o[K.getDay()]}function N(K){return a[K.getDay()]}function R(K){return u[K.getMonth()]}function U(K){return l[K.getMonth()]}function V(K){return i[+(K.getHours()>=12)]}function W(K){return 1+~~(K.getMonth()/3)}function q(K){return o[K.getUTCDay()]}function ne(K){return a[K.getUTCDay()]}function xe(K){return u[K.getUTCMonth()]}function Te(K){return l[K.getUTCMonth()]}function Tt(K){return i[+(K.getUTCHours()>=12)]}function ct(K){return 1+~~(K.getUTCMonth()/3)}return{format:function(K){var Q=w(K+="",x);return Q.toString=function(){return K},Q},parse:function(K){var Q=O(K+="",!1);return Q.toString=function(){return K},Q},utcFormat:function(K){var Q=w(K+="",S);return Q.toString=function(){return K},Q},utcParse:function(K){var Q=O(K+="",!0);return Q.toString=function(){return K},Q}}}var I0={"-":"",_:" ",0:"0"},Ge=/^\s*\d+/,O8=/^%/,_8=/[\\^$*+?|[\]().{}]/g;function le(e,t,r){var n=e<0?"-":"",i=(n?-e:e)+"",a=i.length;return n+(a[t.toLowerCase(),r]))}function A8(e,t,r){var n=Ge.exec(t.slice(r,r+1));return n?(e.w=+n[0],r+n[0].length):-1}function E8(e,t,r){var n=Ge.exec(t.slice(r,r+1));return n?(e.u=+n[0],r+n[0].length):-1}function $8(e,t,r){var n=Ge.exec(t.slice(r,r+2));return n?(e.U=+n[0],r+n[0].length):-1}function j8(e,t,r){var n=Ge.exec(t.slice(r,r+2));return n?(e.V=+n[0],r+n[0].length):-1}function T8(e,t,r){var n=Ge.exec(t.slice(r,r+2));return n?(e.W=+n[0],r+n[0].length):-1}function D0(e,t,r){var n=Ge.exec(t.slice(r,r+4));return n?(e.y=+n[0],r+n[0].length):-1}function L0(e,t,r){var n=Ge.exec(t.slice(r,r+2));return n?(e.y=+n[0]+(+n[0]>68?1900:2e3),r+n[0].length):-1}function C8(e,t,r){var n=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(t.slice(r,r+6));return n?(e.Z=n[1]?0:-(n[2]+(n[3]||"00")),r+n[0].length):-1}function k8(e,t,r){var n=Ge.exec(t.slice(r,r+1));return n?(e.q=n[0]*3-3,r+n[0].length):-1}function M8(e,t,r){var n=Ge.exec(t.slice(r,r+2));return n?(e.m=n[0]-1,r+n[0].length):-1}function R0(e,t,r){var n=Ge.exec(t.slice(r,r+2));return n?(e.d=+n[0],r+n[0].length):-1}function N8(e,t,r){var n=Ge.exec(t.slice(r,r+3));return n?(e.m=0,e.d=+n[0],r+n[0].length):-1}function B0(e,t,r){var n=Ge.exec(t.slice(r,r+2));return n?(e.H=+n[0],r+n[0].length):-1}function I8(e,t,r){var n=Ge.exec(t.slice(r,r+2));return n?(e.M=+n[0],r+n[0].length):-1}function D8(e,t,r){var n=Ge.exec(t.slice(r,r+2));return n?(e.S=+n[0],r+n[0].length):-1}function L8(e,t,r){var n=Ge.exec(t.slice(r,r+3));return n?(e.L=+n[0],r+n[0].length):-1}function R8(e,t,r){var n=Ge.exec(t.slice(r,r+6));return n?(e.L=Math.floor(n[0]/1e3),r+n[0].length):-1}function B8(e,t,r){var n=O8.exec(t.slice(r,r+1));return n?r+n[0].length:-1}function z8(e,t,r){var n=Ge.exec(t.slice(r));return n?(e.Q=+n[0],r+n[0].length):-1}function U8(e,t,r){var n=Ge.exec(t.slice(r));return n?(e.s=+n[0],r+n[0].length):-1}function z0(e,t){return le(e.getDate(),t,2)}function F8(e,t){return le(e.getHours(),t,2)}function W8(e,t){return le(e.getHours()%12||12,t,2)}function H8(e,t){return le(1+_l.count(kr(e),e),t,3)}function IO(e,t){return le(e.getMilliseconds(),t,3)}function V8(e,t){return IO(e,t)+"000"}function K8(e,t){return le(e.getMonth()+1,t,2)}function G8(e,t){return le(e.getMinutes(),t,2)}function X8(e,t){return le(e.getSeconds(),t,2)}function q8(e){var t=e.getDay();return t===0?7:t}function Y8(e,t){return le(jc.count(kr(e)-1,e),t,2)}function DO(e){var t=e.getDay();return t>=4||t===0?Ki(e):Ki.ceil(e)}function Q8(e,t){return e=DO(e),le(Ki.count(kr(e),e)+(kr(e).getDay()===4),t,2)}function Z8(e){return e.getDay()}function J8(e,t){return le(ps.count(kr(e)-1,e),t,2)}function eF(e,t){return le(e.getFullYear()%100,t,2)}function tF(e,t){return e=DO(e),le(e.getFullYear()%100,t,2)}function rF(e,t){return le(e.getFullYear()%1e4,t,4)}function nF(e,t){var r=e.getDay();return e=r>=4||r===0?Ki(e):Ki.ceil(e),le(e.getFullYear()%1e4,t,4)}function iF(e){var t=e.getTimezoneOffset();return(t>0?"-":(t*=-1,"+"))+le(t/60|0,"0",2)+le(t%60,"0",2)}function U0(e,t){return le(e.getUTCDate(),t,2)}function aF(e,t){return le(e.getUTCHours(),t,2)}function oF(e,t){return le(e.getUTCHours()%12||12,t,2)}function lF(e,t){return le(1+$c.count(Mr(e),e),t,3)}function LO(e,t){return le(e.getUTCMilliseconds(),t,3)}function uF(e,t){return LO(e,t)+"000"}function sF(e,t){return le(e.getUTCMonth()+1,t,2)}function cF(e,t){return le(e.getUTCMinutes(),t,2)}function fF(e,t){return le(e.getUTCSeconds(),t,2)}function dF(e){var t=e.getUTCDay();return t===0?7:t}function pF(e,t){return le(Tc.count(Mr(e)-1,e),t,2)}function RO(e){var t=e.getUTCDay();return t>=4||t===0?Gi(e):Gi.ceil(e)}function hF(e,t){return e=RO(e),le(Gi.count(Mr(e),e)+(Mr(e).getUTCDay()===4),t,2)}function vF(e){return e.getUTCDay()}function mF(e,t){return le(hs.count(Mr(e)-1,e),t,2)}function yF(e,t){return le(e.getUTCFullYear()%100,t,2)}function gF(e,t){return e=RO(e),le(e.getUTCFullYear()%100,t,2)}function bF(e,t){return le(e.getUTCFullYear()%1e4,t,4)}function xF(e,t){var r=e.getUTCDay();return e=r>=4||r===0?Gi(e):Gi.ceil(e),le(e.getUTCFullYear()%1e4,t,4)}function wF(){return"+0000"}function F0(){return"%"}function W0(e){return+e}function H0(e){return Math.floor(+e/1e3)}var oi,BO,zO;SF({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});function SF(e){return oi=S8(e),BO=oi.format,oi.parse,zO=oi.utcFormat,oi.utcParse,oi}function OF(e){return new Date(e)}function _F(e){return e instanceof Date?+e:+new Date(+e)}function am(e,t,r,n,i,a,o,l,u,s){var f=Vv(),c=f.invert,d=f.domain,p=s(".%L"),b=s(":%S"),m=s("%I:%M"),y=s("%I %p"),v=s("%a %d"),h=s("%b %d"),x=s("%B"),S=s("%Y");function g(w){return(u(w)t(i/(e.length-1)))},r.quantiles=function(n){return Array.from({length:n+1},(i,a)=>pU(e,a/n))},r.copy=function(){return HO(t).domain(e)},Rr.apply(r,arguments)}function kc(){var e=0,t=.5,r=1,n=1,i,a,o,l,u,s=ot,f,c=!1,d;function p(m){return isNaN(m=+m)?d:(m=.5+((m=+f(m))-a)*(n*mt}var kF=CF,MF=XO,NF=kF,IF=xa;function DF(e){return e&&e.length?MF(e,IF,NF):void 0}var LF=DF;const Yr=ve(LF);function RF(e,t){return ee.e^a.s<0?1:-1;for(n=a.d.length,i=e.d.length,t=0,r=ne.d[t]^a.s<0?1:-1;return n===i?0:n>i^a.s<0?1:-1};X.decimalPlaces=X.dp=function(){var e=this,t=e.d.length-1,r=(t-e.e)*ge;if(t=e.d[t],t)for(;t%10==0;t/=10)r--;return r<0?0:r};X.dividedBy=X.div=function(e){return Ar(this,new this.constructor(e))};X.dividedToIntegerBy=X.idiv=function(e){var t=this,r=t.constructor;return de(Ar(t,new r(e),0,1),r.precision)};X.equals=X.eq=function(e){return!this.cmp(e)};X.exponent=function(){return Ie(this)};X.greaterThan=X.gt=function(e){return this.cmp(e)>0};X.greaterThanOrEqualTo=X.gte=function(e){return this.cmp(e)>=0};X.isInteger=X.isint=function(){return this.e>this.d.length-2};X.isNegative=X.isneg=function(){return this.s<0};X.isPositive=X.ispos=function(){return this.s>0};X.isZero=function(){return this.s===0};X.lessThan=X.lt=function(e){return this.cmp(e)<0};X.lessThanOrEqualTo=X.lte=function(e){return this.cmp(e)<1};X.logarithm=X.log=function(e){var t,r=this,n=r.constructor,i=n.precision,a=i+5;if(e===void 0)e=new n(10);else if(e=new n(e),e.s<1||e.eq(St))throw Error(Wt+"NaN");if(r.s<1)throw Error(Wt+(r.s?"NaN":"-Infinity"));return r.eq(St)?new n(0):(Se=!1,t=Ar(Fo(r,a),Fo(e,a),a),Se=!0,de(t,i))};X.minus=X.sub=function(e){var t=this;return e=new t.constructor(e),t.s==e.s?ZO(t,e):YO(t,(e.s=-e.s,e))};X.modulo=X.mod=function(e){var t,r=this,n=r.constructor,i=n.precision;if(e=new n(e),!e.s)throw Error(Wt+"NaN");return r.s?(Se=!1,t=Ar(r,e,0,1).times(e),Se=!0,r.minus(t)):de(new n(r),i)};X.naturalExponential=X.exp=function(){return QO(this)};X.naturalLogarithm=X.ln=function(){return Fo(this)};X.negated=X.neg=function(){var e=new this.constructor(this);return e.s=-e.s||0,e};X.plus=X.add=function(e){var t=this;return e=new t.constructor(e),t.s==e.s?YO(t,e):ZO(t,(e.s=-e.s,e))};X.precision=X.sd=function(e){var t,r,n,i=this;if(e!==void 0&&e!==!!e&&e!==1&&e!==0)throw Error(Un+e);if(t=Ie(i)+1,n=i.d.length-1,r=n*ge+1,n=i.d[n],n){for(;n%10==0;n/=10)r--;for(n=i.d[0];n>=10;n/=10)r++}return e&&t>r?t:r};X.squareRoot=X.sqrt=function(){var e,t,r,n,i,a,o,l=this,u=l.constructor;if(l.s<1){if(!l.s)return new u(0);throw Error(Wt+"NaN")}for(e=Ie(l),Se=!1,i=Math.sqrt(+l),i==0||i==1/0?(t=sr(l.d),(t.length+e)%2==0&&(t+="0"),i=Math.sqrt(t),e=Pa((e+1)/2)-(e<0||e%2),i==1/0?t="5e"+e:(t=i.toExponential(),t=t.slice(0,t.indexOf("e")+1)+e),n=new u(t)):n=new u(i.toString()),r=u.precision,i=o=r+3;;)if(a=n,n=a.plus(Ar(l,a,o+2)).times(.5),sr(a.d).slice(0,o)===(t=sr(n.d)).slice(0,o)){if(t=t.slice(o-3,o+1),i==o&&t=="4999"){if(de(a,r+1,0),a.times(a).eq(l)){n=a;break}}else if(t!="9999")break;o+=4}return Se=!0,de(n,r)};X.times=X.mul=function(e){var t,r,n,i,a,o,l,u,s,f=this,c=f.constructor,d=f.d,p=(e=new c(e)).d;if(!f.s||!e.s)return new c(0);for(e.s*=f.s,r=f.e+e.e,u=d.length,s=p.length,u=0;){for(t=0,i=u+n;i>n;)l=a[i]+p[n]*d[i-n-1]+t,a[i--]=l%He|0,t=l/He|0;a[i]=(a[i]+t)%He|0}for(;!a[--o];)a.pop();return t?++r:a.shift(),e.d=a,e.e=r,Se?de(e,c.precision):e};X.toDecimalPlaces=X.todp=function(e,t){var r=this,n=r.constructor;return r=new n(r),e===void 0?r:(vr(e,0,_a),t===void 0?t=n.rounding:vr(t,0,8),de(r,e+Ie(r)+1,t))};X.toExponential=function(e,t){var r,n=this,i=n.constructor;return e===void 0?r=qn(n,!0):(vr(e,0,_a),t===void 0?t=i.rounding:vr(t,0,8),n=de(new i(n),e+1,t),r=qn(n,!0,e+1)),r};X.toFixed=function(e,t){var r,n,i=this,a=i.constructor;return e===void 0?qn(i):(vr(e,0,_a),t===void 0?t=a.rounding:vr(t,0,8),n=de(new a(i),e+Ie(i)+1,t),r=qn(n.abs(),!1,e+Ie(n)+1),i.isneg()&&!i.isZero()?"-"+r:r)};X.toInteger=X.toint=function(){var e=this,t=e.constructor;return de(new t(e),Ie(e)+1,t.rounding)};X.toNumber=function(){return+this};X.toPower=X.pow=function(e){var t,r,n,i,a,o,l=this,u=l.constructor,s=12,f=+(e=new u(e));if(!e.s)return new u(St);if(l=new u(l),!l.s){if(e.s<1)throw Error(Wt+"Infinity");return l}if(l.eq(St))return l;if(n=u.precision,e.eq(St))return de(l,n);if(t=e.e,r=e.d.length-1,o=t>=r,a=l.s,o){if((r=f<0?-f:f)<=qO){for(i=new u(St),t=Math.ceil(n/ge+4),Se=!1;r%2&&(i=i.times(l),G0(i.d,t)),r=Pa(r/2),r!==0;)l=l.times(l),G0(l.d,t);return Se=!0,e.s<0?new u(St).div(i):de(i,n)}}else if(a<0)throw Error(Wt+"NaN");return a=a<0&&e.d[Math.max(t,r)]&1?-1:1,l.s=1,Se=!1,i=e.times(Fo(l,n+s)),Se=!0,i=QO(i),i.s=a,i};X.toPrecision=function(e,t){var r,n,i=this,a=i.constructor;return e===void 0?(r=Ie(i),n=qn(i,r<=a.toExpNeg||r>=a.toExpPos)):(vr(e,1,_a),t===void 0?t=a.rounding:vr(t,0,8),i=de(new a(i),e,t),r=Ie(i),n=qn(i,e<=r||r<=a.toExpNeg,e)),n};X.toSignificantDigits=X.tosd=function(e,t){var r=this,n=r.constructor;return e===void 0?(e=n.precision,t=n.rounding):(vr(e,1,_a),t===void 0?t=n.rounding:vr(t,0,8)),de(new n(r),e,t)};X.toString=X.valueOf=X.val=X.toJSON=X[Symbol.for("nodejs.util.inspect.custom")]=function(){var e=this,t=Ie(e),r=e.constructor;return qn(e,t<=r.toExpNeg||t>=r.toExpPos)};function YO(e,t){var r,n,i,a,o,l,u,s,f=e.constructor,c=f.precision;if(!e.s||!t.s)return t.s||(t=new f(e)),Se?de(t,c):t;if(u=e.d,s=t.d,o=e.e,i=t.e,u=u.slice(),a=o-i,a){for(a<0?(n=u,a=-a,l=s.length):(n=s,i=o,l=u.length),o=Math.ceil(c/ge),l=o>l?o+1:l+1,a>l&&(a=l,n.length=1),n.reverse();a--;)n.push(0);n.reverse()}for(l=u.length,a=s.length,l-a<0&&(a=l,n=s,s=u,u=n),r=0;a;)r=(u[--a]=u[a]+s[a]+r)/He|0,u[a]%=He;for(r&&(u.unshift(r),++i),l=u.length;u[--l]==0;)u.pop();return t.d=u,t.e=i,Se?de(t,c):t}function vr(e,t,r){if(e!==~~e||er)throw Error(Un+e)}function sr(e){var t,r,n,i=e.length-1,a="",o=e[0];if(i>0){for(a+=o,t=1;to?1:-1;else for(l=u=0;li[l]?1:-1;break}return u}function r(n,i,a){for(var o=0;a--;)n[a]-=o,o=n[a]1;)n.shift()}return function(n,i,a,o){var l,u,s,f,c,d,p,b,m,y,v,h,x,S,g,w,O,P,A=n.constructor,T=n.s==i.s?1:-1,$=n.d,M=i.d;if(!n.s)return new A(n);if(!i.s)throw Error(Wt+"Division by zero");for(u=n.e-i.e,O=M.length,g=$.length,p=new A(T),b=p.d=[],s=0;M[s]==($[s]||0);)++s;if(M[s]>($[s]||0)&&--u,a==null?h=a=A.precision:o?h=a+(Ie(n)-Ie(i))+1:h=a,h<0)return new A(0);if(h=h/ge+2|0,s=0,O==1)for(f=0,M=M[0],h++;(s1&&(M=e(M,f),$=e($,f),O=M.length,g=$.length),S=O,m=$.slice(0,O),y=m.length;y=He/2&&++w;do f=0,l=t(M,m,O,y),l<0?(v=m[0],O!=y&&(v=v*He+(m[1]||0)),f=v/w|0,f>1?(f>=He&&(f=He-1),c=e(M,f),d=c.length,y=m.length,l=t(c,m,d,y),l==1&&(f--,r(c,O16)throw Error(um+Ie(e));if(!e.s)return new f(St);for(Se=!1,l=c,o=new f(.03125);e.abs().gte(.1);)e=e.times(o),s+=5;for(n=Math.log(En(2,s))/Math.LN10*2+5|0,l+=n,r=i=a=new f(St),f.precision=l;;){if(i=de(i.times(e),l),r=r.times(++u),o=a.plus(Ar(i,r,l)),sr(o.d).slice(0,l)===sr(a.d).slice(0,l)){for(;s--;)a=de(a.times(a),l);return f.precision=c,t==null?(Se=!0,de(a,c)):a}a=o}}function Ie(e){for(var t=e.e*ge,r=e.d[0];r>=10;r/=10)t++;return t}function Ff(e,t,r){if(t>e.LN10.sd())throw Se=!0,r&&(e.precision=r),Error(Wt+"LN10 precision limit exceeded");return de(new e(e.LN10),t)}function Hr(e){for(var t="";e--;)t+="0";return t}function Fo(e,t){var r,n,i,a,o,l,u,s,f,c=1,d=10,p=e,b=p.d,m=p.constructor,y=m.precision;if(p.s<1)throw Error(Wt+(p.s?"NaN":"-Infinity"));if(p.eq(St))return new m(0);if(t==null?(Se=!1,s=y):s=t,p.eq(10))return t==null&&(Se=!0),Ff(m,s);if(s+=d,m.precision=s,r=sr(b),n=r.charAt(0),a=Ie(p),Math.abs(a)<15e14){for(;n<7&&n!=1||n==1&&r.charAt(1)>3;)p=p.times(e),r=sr(p.d),n=r.charAt(0),c++;a=Ie(p),n>1?(p=new m("0."+r),a++):p=new m(n+"."+r.slice(1))}else return u=Ff(m,s+2,y).times(a+""),p=Fo(new m(n+"."+r.slice(1)),s-d).plus(u),m.precision=y,t==null?(Se=!0,de(p,y)):p;for(l=o=p=Ar(p.minus(St),p.plus(St),s),f=de(p.times(p),s),i=3;;){if(o=de(o.times(f),s),u=l.plus(Ar(o,new m(i),s)),sr(u.d).slice(0,s)===sr(l.d).slice(0,s))return l=l.times(2),a!==0&&(l=l.plus(Ff(m,s+2,y).times(a+""))),l=Ar(l,new m(c),s),m.precision=y,t==null?(Se=!0,de(l,y)):l;l=u,i+=2}}function K0(e,t){var r,n,i;for((r=t.indexOf("."))>-1&&(t=t.replace(".","")),(n=t.search(/e/i))>0?(r<0&&(r=n),r+=+t.slice(n+1),t=t.substring(0,n)):r<0&&(r=t.length),n=0;t.charCodeAt(n)===48;)++n;for(i=t.length;t.charCodeAt(i-1)===48;)--i;if(t=t.slice(n,i),t){if(i-=n,r=r-n-1,e.e=Pa(r/ge),e.d=[],n=(r+1)%ge,r<0&&(n+=ge),nvs||e.e<-vs))throw Error(um+r)}else e.s=0,e.e=0,e.d=[0];return e}function de(e,t,r){var n,i,a,o,l,u,s,f,c=e.d;for(o=1,a=c[0];a>=10;a/=10)o++;if(n=t-o,n<0)n+=ge,i=t,s=c[f=0];else{if(f=Math.ceil((n+1)/ge),a=c.length,f>=a)return e;for(s=a=c[f],o=1;a>=10;a/=10)o++;n%=ge,i=n-ge+o}if(r!==void 0&&(a=En(10,o-i-1),l=s/a%10|0,u=t<0||c[f+1]!==void 0||s%a,u=r<4?(l||u)&&(r==0||r==(e.s<0?3:2)):l>5||l==5&&(r==4||u||r==6&&(n>0?i>0?s/En(10,o-i):0:c[f-1])%10&1||r==(e.s<0?8:7))),t<1||!c[0])return u?(a=Ie(e),c.length=1,t=t-a-1,c[0]=En(10,(ge-t%ge)%ge),e.e=Pa(-t/ge)||0):(c.length=1,c[0]=e.e=e.s=0),e;if(n==0?(c.length=f,a=1,f--):(c.length=f+1,a=En(10,ge-n),c[f]=i>0?(s/En(10,o-i)%En(10,i)|0)*a:0),u)for(;;)if(f==0){(c[0]+=a)==He&&(c[0]=1,++e.e);break}else{if(c[f]+=a,c[f]!=He)break;c[f--]=0,a=1}for(n=c.length;c[--n]===0;)c.pop();if(Se&&(e.e>vs||e.e<-vs))throw Error(um+Ie(e));return e}function ZO(e,t){var r,n,i,a,o,l,u,s,f,c,d=e.constructor,p=d.precision;if(!e.s||!t.s)return t.s?t.s=-t.s:t=new d(e),Se?de(t,p):t;if(u=e.d,c=t.d,n=t.e,s=e.e,u=u.slice(),o=s-n,o){for(f=o<0,f?(r=u,o=-o,l=c.length):(r=c,n=s,l=u.length),i=Math.max(Math.ceil(p/ge),l)+2,o>i&&(o=i,r.length=1),r.reverse(),i=o;i--;)r.push(0);r.reverse()}else{for(i=u.length,l=c.length,f=i0;--i)u[l++]=0;for(i=c.length;i>o;){if(u[--i]0?a=a.charAt(0)+"."+a.slice(1)+Hr(n):o>1&&(a=a.charAt(0)+"."+a.slice(1)),a=a+(i<0?"e":"e+")+i):i<0?(a="0."+Hr(-i-1)+a,r&&(n=r-o)>0&&(a+=Hr(n))):i>=o?(a+=Hr(i+1-o),r&&(n=r-i-1)>0&&(a=a+"."+Hr(n))):((n=i+1)0&&(i+1===o&&(a+="."),a+=Hr(n))),e.s<0?"-"+a:a}function G0(e,t){if(e.length>t)return e.length=t,!0}function JO(e){var t,r,n;function i(a){var o=this;if(!(o instanceof i))return new i(a);if(o.constructor=i,a instanceof i){o.s=a.s,o.e=a.e,o.d=(a=a.d)?a.slice():a;return}if(typeof a=="number"){if(a*0!==0)throw Error(Un+a);if(a>0)o.s=1;else if(a<0)a=-a,o.s=-1;else{o.s=0,o.e=0,o.d=[0];return}if(a===~~a&&a<1e7){o.e=0,o.d=[a];return}return K0(o,a.toString())}else if(typeof a!="string")throw Error(Un+a);if(a.charCodeAt(0)===45?(a=a.slice(1),o.s=-1):o.s=1,o5.test(a))K0(o,a);else throw Error(Un+a)}if(i.prototype=X,i.ROUND_UP=0,i.ROUND_DOWN=1,i.ROUND_CEIL=2,i.ROUND_FLOOR=3,i.ROUND_HALF_UP=4,i.ROUND_HALF_DOWN=5,i.ROUND_HALF_EVEN=6,i.ROUND_HALF_CEIL=7,i.ROUND_HALF_FLOOR=8,i.clone=JO,i.config=i.set=l5,e===void 0&&(e={}),e)for(n=["precision","rounding","toExpNeg","toExpPos","LN10"],t=0;t=i[t+1]&&n<=i[t+2])this[r]=n;else throw Error(Un+r+": "+n);if((n=e[r="LN10"])!==void 0)if(n==Math.LN10)this[r]=new this(n);else throw Error(Un+r+": "+n);return this}var sm=JO(a5);St=new sm(1);const fe=sm;function u5(e){return d5(e)||f5(e)||c5(e)||s5()}function s5(){throw new TypeError(`Invalid attempt to spread non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function c5(e,t){if(e){if(typeof e=="string")return Ep(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if(r==="Object"&&e.constructor&&(r=e.constructor.name),r==="Map"||r==="Set")return Array.from(e);if(r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return Ep(e,t)}}function f5(e){if(typeof Symbol<"u"&&Symbol.iterator in Object(e))return Array.from(e)}function d5(e){if(Array.isArray(e))return Ep(e)}function Ep(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r=t?r.apply(void 0,i):e(t-o,X0(function(){for(var l=arguments.length,u=new Array(l),s=0;se.length)&&(t=e.length);for(var r=0,n=new Array(t);r"u"||!(Symbol.iterator in Object(e)))){var r=[],n=!0,i=!1,a=void 0;try{for(var o=e[Symbol.iterator](),l;!(n=(l=o.next()).done)&&(r.push(l.value),!(t&&r.length===t));n=!0);}catch(u){i=!0,a=u}finally{try{!n&&o.return!=null&&o.return()}finally{if(i)throw a}}return r}}function E5(e){if(Array.isArray(e))return e}function i_(e){var t=Wo(e,2),r=t[0],n=t[1],i=r,a=n;return r>n&&(i=n,a=r),[i,a]}function a_(e,t,r){if(e.lte(0))return new fe(0);var n=Ic.getDigitCount(e.toNumber()),i=new fe(10).pow(n),a=e.div(i),o=n!==1?.05:.1,l=new fe(Math.ceil(a.div(o).toNumber())).add(r).mul(o),u=l.mul(i);return t?u:new fe(Math.ceil(u))}function $5(e,t,r){var n=1,i=new fe(e);if(!i.isint()&&r){var a=Math.abs(e);a<1?(n=new fe(10).pow(Ic.getDigitCount(e)-1),i=new fe(Math.floor(i.div(n).toNumber())).mul(n)):a>1&&(i=new fe(Math.floor(e)))}else e===0?i=new fe(Math.floor((t-1)/2)):r||(i=new fe(Math.floor(e)));var o=Math.floor((t-1)/2),l=m5(v5(function(u){return i.add(new fe(u-o).mul(n)).toNumber()}),$p);return l(0,t)}function o_(e,t,r,n){var i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:0;if(!Number.isFinite((t-e)/(r-1)))return{step:new fe(0),tickMin:new fe(0),tickMax:new fe(0)};var a=a_(new fe(t).sub(e).div(r-1),n,i),o;e<=0&&t>=0?o=new fe(0):(o=new fe(e).add(t).div(2),o=o.sub(new fe(o).mod(a)));var l=Math.ceil(o.sub(e).div(a).toNumber()),u=Math.ceil(new fe(t).sub(o).div(a).toNumber()),s=l+u+1;return s>r?o_(e,t,r,n,i+1):(s0?u+(r-s):u,l=t>0?l:l+(r-s)),{step:a,tickMin:o.sub(new fe(l).mul(a)),tickMax:o.add(new fe(u).mul(a))})}function j5(e){var t=Wo(e,2),r=t[0],n=t[1],i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:6,a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,o=Math.max(i,2),l=i_([r,n]),u=Wo(l,2),s=u[0],f=u[1];if(s===-1/0||f===1/0){var c=f===1/0?[s].concat(Tp($p(0,i-1).map(function(){return 1/0}))):[].concat(Tp($p(0,i-1).map(function(){return-1/0})),[f]);return r>n?jp(c):c}if(s===f)return $5(s,i,a);var d=o_(s,f,o,a),p=d.step,b=d.tickMin,m=d.tickMax,y=Ic.rangeStep(b,m.add(new fe(.1).mul(p)),p);return r>n?jp(y):y}function T5(e,t){var r=Wo(e,2),n=r[0],i=r[1],a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,o=i_([n,i]),l=Wo(o,2),u=l[0],s=l[1];if(u===-1/0||s===1/0)return[n,i];if(u===s)return[u];var f=Math.max(t,2),c=a_(new fe(s).sub(u).div(f-1),a,0),d=[].concat(Tp(Ic.rangeStep(new fe(u),new fe(s).sub(new fe(.99).mul(c)),c)),[s]);return n>i?jp(d):d}var C5=r_(j5),k5=r_(T5),M5="Invariant failed";function Yn(e,t){throw new Error(M5)}var N5=["offset","layout","width","dataKey","data","dataPointFormatter","xAxis","yAxis"];function Xi(e){"@babel/helpers - typeof";return Xi=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Xi(e)}function ms(){return ms=Object.assign?Object.assign.bind():function(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=new Array(t);r=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function U5(e,t){if(e==null)return{};var r={};for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){if(t.indexOf(n)>=0)continue;r[n]=e[n]}return r}function F5(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function W5(e,t){for(var r=0;re.length)&&(t=e.length);for(var r=0,n=new Array(t);r1&&arguments[1]!==void 0?arguments[1]:[],i=arguments.length>2?arguments[2]:void 0,a=arguments.length>3?arguments[3]:void 0,o=-1,l=(r=n==null?void 0:n.length)!==null&&r!==void 0?r:0;if(l<=1)return 0;if(a&&a.axisType==="angleAxis"&&Math.abs(Math.abs(a.range[1]-a.range[0])-360)<=1e-6)for(var u=a.range,s=0;s0?i[s-1].coordinate:i[l-1].coordinate,c=i[s].coordinate,d=s>=l-1?i[0].coordinate:i[s+1].coordinate,p=void 0;if(Jt(c-f)!==Jt(d-c)){var b=[];if(Jt(d-c)===Jt(u[1]-u[0])){p=d;var m=c+u[1]-u[0];b[0]=Math.min(m,(m+f)/2),b[1]=Math.max(m,(m+f)/2)}else{p=f;var y=d+u[1]-u[0];b[0]=Math.min(c,(y+c)/2),b[1]=Math.max(c,(y+c)/2)}var v=[Math.min(c,(p+c)/2),Math.max(c,(p+c)/2)];if(t>v[0]&&t<=v[1]||t>=b[0]&&t<=b[1]){o=i[s].index;break}}else{var h=Math.min(f,d),x=Math.max(f,d);if(t>(h+c)/2&&t<=(x+c)/2){o=i[s].index;break}}}else for(var S=0;S0&&S(n[S].coordinate+n[S-1].coordinate)/2&&t<=(n[S].coordinate+n[S+1].coordinate)/2||S===l-1&&t>(n[S].coordinate+n[S-1].coordinate)/2){o=n[S].index;break}return o},cm=function(t){var r,n=t,i=n.type.displayName,a=(r=t.type)!==null&&r!==void 0&&r.defaultProps?je(je({},t.type.defaultProps),t.props):t.props,o=a.stroke,l=a.fill,u;switch(i){case"Line":u=o;break;case"Area":case"Radar":u=o&&o!=="none"?o:l;break;default:u=l;break}return u},o6=function(t){var r=t.barSize,n=t.totalSize,i=t.stackGroups,a=i===void 0?{}:i;if(!a)return{};for(var o={},l=Object.keys(a),u=0,s=l.length;u=0});if(v&&v.length){var h=v[0].type.defaultProps,x=h!==void 0?je(je({},h),v[0].props):v[0].props,S=x.barSize,g=x[y];o[g]||(o[g]=[]);var w=re(S)?r:S;o[g].push({item:v[0],stackList:v.slice(1),barSize:re(w)?void 0:Xn(w,n,0)})}}return o},l6=function(t){var r=t.barGap,n=t.barCategoryGap,i=t.bandSize,a=t.sizeList,o=a===void 0?[]:a,l=t.maxBarSize,u=o.length;if(u<1)return null;var s=Xn(r,i,0,!0),f,c=[];if(o[0].barSize===+o[0].barSize){var d=!1,p=i/u,b=o.reduce(function(S,g){return S+g.barSize||0},0);b+=(u-1)*s,b>=i&&(b-=(u-1)*s,s=0),b>=i&&p>0&&(d=!0,p*=.9,b=u*p);var m=(i-b)/2>>0,y={offset:m-s,size:0};f=o.reduce(function(S,g){var w={item:g.item,position:{offset:y.offset+y.size+s,size:d?p:g.barSize}},O=[].concat(Q0(S),[w]);return y=O[O.length-1].position,g.stackList&&g.stackList.length&&g.stackList.forEach(function(P){O.push({item:P,position:y})}),O},c)}else{var v=Xn(n,i,0,!0);i-2*v-(u-1)*s<=0&&(s=0);var h=(i-2*v-(u-1)*s)/u;h>1&&(h>>=0);var x=l===+l?Math.min(h,l):h;f=o.reduce(function(S,g,w){var O=[].concat(Q0(S),[{item:g.item,position:{offset:v+(h+s)*w+(h-x)/2,size:x}}]);return g.stackList&&g.stackList.length&&g.stackList.forEach(function(P){O.push({item:P,position:O[O.length-1].position})}),O},c)}return f},u6=function(t,r,n,i){var a=n.children,o=n.width,l=n.margin,u=o-(l.left||0)-(l.right||0),s=c_({children:a,legendWidth:u});if(s){var f=i||{},c=f.width,d=f.height,p=s.align,b=s.verticalAlign,m=s.layout;if((m==="vertical"||m==="horizontal"&&b==="middle")&&p!=="center"&&H(t[p]))return je(je({},t),{},ki({},p,t[p]+(c||0)));if((m==="horizontal"||m==="vertical"&&p==="center")&&b!=="middle"&&H(t[b]))return je(je({},t),{},ki({},b,t[b]+(d||0)))}return t},s6=function(t,r,n){return re(r)?!0:t==="horizontal"?r==="yAxis":t==="vertical"||n==="x"?r==="xAxis":n==="y"?r==="yAxis":!0},f_=function(t,r,n,i,a){var o=r.props.children,l=rr(o,Dc).filter(function(s){return s6(i,a,s.props.direction)});if(l&&l.length){var u=l.map(function(s){return s.props.dataKey});return t.reduce(function(s,f){var c=At(f,n);if(re(c))return s;var d=Array.isArray(c)?[Mc(c),Yr(c)]:[c,c],p=u.reduce(function(b,m){var y=At(f,m,0),v=d[0]-Math.abs(Array.isArray(y)?y[0]:y),h=d[1]+Math.abs(Array.isArray(y)?y[1]:y);return[Math.min(v,b[0]),Math.max(h,b[1])]},[1/0,-1/0]);return[Math.min(p[0],s[0]),Math.max(p[1],s[1])]},[1/0,-1/0])}return null},c6=function(t,r,n,i,a){var o=r.map(function(l){return f_(t,l,n,a,i)}).filter(function(l){return!re(l)});return o&&o.length?o.reduce(function(l,u){return[Math.min(l[0],u[0]),Math.max(l[1],u[1])]},[1/0,-1/0]):null},d_=function(t,r,n,i,a){var o=r.map(function(u){var s=u.props.dataKey;return n==="number"&&s&&f_(t,u,s,i)||oo(t,s,n,a)});if(n==="number")return o.reduce(function(u,s){return[Math.min(u[0],s[0]),Math.max(u[1],s[1])]},[1/0,-1/0]);var l={};return o.reduce(function(u,s){for(var f=0,c=s.length;f=2?Jt(l[0]-l[1])*2*s:s,r&&(t.ticks||t.niceTicks)){var f=(t.ticks||t.niceTicks).map(function(c){var d=a?a.indexOf(c):c;return{coordinate:i(d)+s,value:c,offset:s}});return f.filter(function(c){return!ya(c.coordinate)})}return t.isCategorical&&t.categoricalDomain?t.categoricalDomain.map(function(c,d){return{coordinate:i(c)+s,value:c,index:d,offset:s}}):i.ticks&&!n?i.ticks(t.tickCount).map(function(c){return{coordinate:i(c)+s,value:c,offset:s}}):i.domain().map(function(c,d){return{coordinate:i(c)+s,value:a?a[c]:c,index:d,offset:s}})},Wf=new WeakMap,Jl=function(t,r){if(typeof r!="function")return t;Wf.has(t)||Wf.set(t,new WeakMap);var n=Wf.get(t);if(n.has(r))return n.get(r);var i=function(){t.apply(void 0,arguments),r.apply(void 0,arguments)};return n.set(r,i),i},f6=function(t,r,n){var i=t.scale,a=t.type,o=t.layout,l=t.axisType;if(i==="auto")return o==="radial"&&l==="radiusAxis"?{scale:Do(),realScaleType:"band"}:o==="radial"&&l==="angleAxis"?{scale:fs(),realScaleType:"linear"}:a==="category"&&r&&(r.indexOf("LineChart")>=0||r.indexOf("AreaChart")>=0||r.indexOf("ComposedChart")>=0&&!n)?{scale:ao(),realScaleType:"point"}:a==="category"?{scale:Do(),realScaleType:"band"}:{scale:fs(),realScaleType:"linear"};if(Gn(i)){var u="scale".concat(xc(i));return{scale:(V0[u]||ao)(),realScaleType:V0[u]?u:"point"}}return J(i)?{scale:i}:{scale:ao(),realScaleType:"point"}},J0=1e-4,d6=function(t){var r=t.domain();if(!(!r||r.length<=2)){var n=r.length,i=t.range(),a=Math.min(i[0],i[1])-J0,o=Math.max(i[0],i[1])+J0,l=t(r[0]),u=t(r[n-1]);(lo||uo)&&t.domain([r[0],r[n-1]])}},p6=function(t,r){if(!t)return null;for(var n=0,i=t.length;ni)&&(a[1]=i),a[0]>i&&(a[0]=i),a[1]=0?(t[l][n][0]=a,t[l][n][1]=a+u,a=t[l][n][1]):(t[l][n][0]=o,t[l][n][1]=o+u,o=t[l][n][1])}},m6=function(t){var r=t.length;if(!(r<=0))for(var n=0,i=t[0].length;n=0?(t[o][n][0]=a,t[o][n][1]=a+l,a=t[o][n][1]):(t[o][n][0]=0,t[o][n][1]=0)}},y6={sign:v6,expand:TM,none:zi,silhouette:CM,wiggle:kM,positive:m6},g6=function(t,r,n){var i=r.map(function(l){return l.props.dataKey}),a=y6[n],o=jM().keys(i).value(function(l,u){return+At(l,u,0)}).order(ip).offset(a);return o(t)},b6=function(t,r,n,i,a,o){if(!t)return null;var l=o?r.reverse():r,u={},s=l.reduce(function(c,d){var p,b=(p=d.type)!==null&&p!==void 0&&p.defaultProps?je(je({},d.type.defaultProps),d.props):d.props,m=b.stackId,y=b.hide;if(y)return c;var v=b[n],h=c[v]||{hasStack:!1,stackGroups:{}};if(Fe(m)){var x=h.stackGroups[m]||{numericAxisId:n,cateAxisId:i,items:[]};x.items.push(d),h.hasStack=!0,h.stackGroups[m]=x}else h.stackGroups[xl("_stackId_")]={numericAxisId:n,cateAxisId:i,items:[d]};return je(je({},c),{},ki({},v,h))},u),f={};return Object.keys(s).reduce(function(c,d){var p=s[d];if(p.hasStack){var b={};p.stackGroups=Object.keys(p.stackGroups).reduce(function(m,y){var v=p.stackGroups[y];return je(je({},m),{},ki({},y,{numericAxisId:n,cateAxisId:i,items:v.items,stackedData:g6(t,v.items,a)}))},b)}return je(je({},c),{},ki({},d,p))},f)},x6=function(t,r){var n=r.realScaleType,i=r.type,a=r.tickCount,o=r.originalDomain,l=r.allowDecimals,u=n||r.scale;if(u!=="auto"&&u!=="linear")return null;if(a&&i==="number"&&o&&(o[0]==="auto"||o[1]==="auto")){var s=t.domain();if(!s.length)return null;var f=C5(s,a,l);return t.domain([Mc(f),Yr(f)]),{niceTicks:f}}if(a&&i==="number"){var c=t.domain(),d=k5(c,a,l);return{niceTicks:d}}return null};function eb(e){var t=e.axis,r=e.ticks,n=e.bandSize,i=e.entry,a=e.index,o=e.dataKey;if(t.type==="category"){if(!t.allowDuplicatedCategory&&t.dataKey&&!re(i[t.dataKey])){var l=Fu(r,"value",i[t.dataKey]);if(l)return l.coordinate+n/2}return r[a]?r[a].coordinate+n/2:null}var u=At(i,re(o)?t.dataKey:o);return re(u)?null:t.scale(u)}var tb=function(t){var r=t.axis,n=t.ticks,i=t.offset,a=t.bandSize,o=t.entry,l=t.index;if(r.type==="category")return n[l]?n[l].coordinate+i:null;var u=At(o,r.dataKey,r.domain[l]);return re(u)?null:r.scale(u)-a/2+i},w6=function(t){var r=t.numericAxis,n=r.scale.domain();if(r.type==="number"){var i=Math.min(n[0],n[1]),a=Math.max(n[0],n[1]);return i<=0&&a>=0?0:a<0?a:i}return n[0]},S6=function(t,r){var n,i=(n=t.type)!==null&&n!==void 0&&n.defaultProps?je(je({},t.type.defaultProps),t.props):t.props,a=i.stackId;if(Fe(a)){var o=r[a];if(o){var l=o.items.indexOf(t);return l>=0?o.stackedData[l]:null}}return null},O6=function(t){return t.reduce(function(r,n){return[Mc(n.concat([r[0]]).filter(H)),Yr(n.concat([r[1]]).filter(H))]},[1/0,-1/0])},h_=function(t,r,n){return Object.keys(t).reduce(function(i,a){var o=t[a],l=o.stackedData,u=l.reduce(function(s,f){var c=O6(f.slice(r,n+1));return[Math.min(s[0],c[0]),Math.max(s[1],c[1])]},[1/0,-1/0]);return[Math.min(u[0],i[0]),Math.max(u[1],i[1])]},[1/0,-1/0]).map(function(i){return i===1/0||i===-1/0?0:i})},rb=/^dataMin[\s]*-[\s]*([0-9]+([.]{1}[0-9]+){0,1})$/,nb=/^dataMax[\s]*\+[\s]*([0-9]+([.]{1}[0-9]+){0,1})$/,Np=function(t,r,n){if(J(t))return t(r,n);if(!Array.isArray(t))return r;var i=[];if(H(t[0]))i[0]=n?t[0]:Math.min(t[0],r[0]);else if(rb.test(t[0])){var a=+rb.exec(t[0])[1];i[0]=r[0]-a}else J(t[0])?i[0]=t[0](r[0]):i[0]=r[0];if(H(t[1]))i[1]=n?t[1]:Math.max(t[1],r[1]);else if(nb.test(t[1])){var o=+nb.exec(t[1])[1];i[1]=r[1]+o}else J(t[1])?i[1]=t[1](r[1]):i[1]=r[1];return i},gs=function(t,r,n){if(t&&t.scale&&t.scale.bandwidth){var i=t.scale.bandwidth();if(!n||i>0)return i}if(t&&r&&r.length>=2){for(var a=Rv(r,function(c){return c.coordinate}),o=1/0,l=1,u=a.length;lo&&(s=2*Math.PI-s),{radius:l,angle:E6(s),angleInRadian:s}},T6=function(t){var r=t.startAngle,n=t.endAngle,i=Math.floor(r/360),a=Math.floor(n/360),o=Math.min(i,a);return{startAngle:r-o*360,endAngle:n-o*360}},C6=function(t,r){var n=r.startAngle,i=r.endAngle,a=Math.floor(n/360),o=Math.floor(i/360),l=Math.min(a,o);return t+l*360},lb=function(t,r){var n=t.x,i=t.y,a=j6({x:n,y:i},r),o=a.radius,l=a.angle,u=r.innerRadius,s=r.outerRadius;if(os)return!1;if(o===0)return!0;var f=T6(r),c=f.startAngle,d=f.endAngle,p=l,b;if(c<=d){for(;p>d;)p-=360;for(;p=c&&p<=d}else{for(;p>c;)p-=360;for(;p=d&&p<=c}return b?ob(ob({},r),{},{radius:o,angle:C6(p,r)}):null};function Go(e){"@babel/helpers - typeof";return Go=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Go(e)}var k6=["offset"];function M6(e){return L6(e)||D6(e)||I6(e)||N6()}function N6(){throw new TypeError(`Invalid attempt to spread non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function I6(e,t){if(e){if(typeof e=="string")return Ip(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if(r==="Object"&&e.constructor&&(r=e.constructor.name),r==="Map"||r==="Set")return Array.from(e);if(r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return Ip(e,t)}}function D6(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function L6(e){if(Array.isArray(e))return Ip(e)}function Ip(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function B6(e,t){if(e==null)return{};var r={};for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){if(t.indexOf(n)>=0)continue;r[n]=e[n]}return r}function ub(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Be(e){for(var t=1;t=0?1:-1,x,S;i==="insideStart"?(x=p+h*o,S=m):i==="insideEnd"?(x=b-h*o,S=!m):i==="end"&&(x=b+h*o,S=m),S=v<=0?S:!S;var g=Ye(s,f,y,x),w=Ye(s,f,y,x+(S?1:-1)*359),O="M".concat(g.x,",").concat(g.y,` + A`).concat(y,",").concat(y,",0,1,").concat(S?0:1,`, + `).concat(w.x,",").concat(w.y),P=re(t.id)?xl("recharts-radial-line-"):t.id;return j.createElement("text",Xo({},n,{dominantBaseline:"central",className:oe("recharts-radial-bar-label",l)}),j.createElement("defs",null,j.createElement("path",{id:P,d:O})),j.createElement("textPath",{xlinkHref:"#".concat(P)},r))},K6=function(t){var r=t.viewBox,n=t.offset,i=t.position,a=r,o=a.cx,l=a.cy,u=a.innerRadius,s=a.outerRadius,f=a.startAngle,c=a.endAngle,d=(f+c)/2;if(i==="outside"){var p=Ye(o,l,s+n,d),b=p.x,m=p.y;return{x:b,y:m,textAnchor:b>=o?"start":"end",verticalAnchor:"middle"}}if(i==="center")return{x:o,y:l,textAnchor:"middle",verticalAnchor:"middle"};if(i==="centerTop")return{x:o,y:l,textAnchor:"middle",verticalAnchor:"start"};if(i==="centerBottom")return{x:o,y:l,textAnchor:"middle",verticalAnchor:"end"};var y=(u+s)/2,v=Ye(o,l,y,d),h=v.x,x=v.y;return{x:h,y:x,textAnchor:"middle",verticalAnchor:"middle"}},G6=function(t){var r=t.viewBox,n=t.parentViewBox,i=t.offset,a=t.position,o=r,l=o.x,u=o.y,s=o.width,f=o.height,c=f>=0?1:-1,d=c*i,p=c>0?"end":"start",b=c>0?"start":"end",m=s>=0?1:-1,y=m*i,v=m>0?"end":"start",h=m>0?"start":"end";if(a==="top"){var x={x:l+s/2,y:u-c*i,textAnchor:"middle",verticalAnchor:p};return Be(Be({},x),n?{height:Math.max(u-n.y,0),width:s}:{})}if(a==="bottom"){var S={x:l+s/2,y:u+f+d,textAnchor:"middle",verticalAnchor:b};return Be(Be({},S),n?{height:Math.max(n.y+n.height-(u+f),0),width:s}:{})}if(a==="left"){var g={x:l-y,y:u+f/2,textAnchor:v,verticalAnchor:"middle"};return Be(Be({},g),n?{width:Math.max(g.x-n.x,0),height:f}:{})}if(a==="right"){var w={x:l+s+y,y:u+f/2,textAnchor:h,verticalAnchor:"middle"};return Be(Be({},w),n?{width:Math.max(n.x+n.width-w.x,0),height:f}:{})}var O=n?{width:s,height:f}:{};return a==="insideLeft"?Be({x:l+y,y:u+f/2,textAnchor:h,verticalAnchor:"middle"},O):a==="insideRight"?Be({x:l+s-y,y:u+f/2,textAnchor:v,verticalAnchor:"middle"},O):a==="insideTop"?Be({x:l+s/2,y:u+d,textAnchor:"middle",verticalAnchor:b},O):a==="insideBottom"?Be({x:l+s/2,y:u+f-d,textAnchor:"middle",verticalAnchor:p},O):a==="insideTopLeft"?Be({x:l+y,y:u+d,textAnchor:h,verticalAnchor:b},O):a==="insideTopRight"?Be({x:l+s-y,y:u+d,textAnchor:v,verticalAnchor:b},O):a==="insideBottomLeft"?Be({x:l+y,y:u+f-d,textAnchor:h,verticalAnchor:p},O):a==="insideBottomRight"?Be({x:l+s-y,y:u+f-d,textAnchor:v,verticalAnchor:p},O):pa(a)&&(H(a.x)||Cn(a.x))&&(H(a.y)||Cn(a.y))?Be({x:l+Xn(a.x,s),y:u+Xn(a.y,f),textAnchor:"end",verticalAnchor:"end"},O):Be({x:l+s/2,y:u+f/2,textAnchor:"middle",verticalAnchor:"middle"},O)},X6=function(t){return"cx"in t&&H(t.cx)};function nt(e){var t=e.offset,r=t===void 0?5:t,n=R6(e,k6),i=Be({offset:r},n),a=i.viewBox,o=i.position,l=i.value,u=i.children,s=i.content,f=i.className,c=f===void 0?"":f,d=i.textBreakAll;if(!a||re(l)&&re(u)&&!E.isValidElement(s)&&!J(s))return null;if(E.isValidElement(s))return E.cloneElement(s,i);var p;if(J(s)){if(p=E.createElement(s,i),E.isValidElement(p))return p}else p=W6(i);var b=X6(a),m=te(i,!0);if(b&&(o==="insideStart"||o==="insideEnd"||o==="end"))return V6(i,p,m);var y=b?K6(i):G6(i);return j.createElement(is,Xo({className:oe("recharts-label",c)},m,y,{breakAll:d}),p)}nt.displayName="Label";var m_=function(t){var r=t.cx,n=t.cy,i=t.angle,a=t.startAngle,o=t.endAngle,l=t.r,u=t.radius,s=t.innerRadius,f=t.outerRadius,c=t.x,d=t.y,p=t.top,b=t.left,m=t.width,y=t.height,v=t.clockWise,h=t.labelViewBox;if(h)return h;if(H(m)&&H(y)){if(H(c)&&H(d))return{x:c,y:d,width:m,height:y};if(H(p)&&H(b))return{x:p,y:b,width:m,height:y}}return H(c)&&H(d)?{x:c,y:d,width:0,height:0}:H(r)&&H(n)?{cx:r,cy:n,startAngle:a||i||0,endAngle:o||i||0,innerRadius:s||0,outerRadius:f||u||l||0,clockWise:v}:t.viewBox?t.viewBox:{}},q6=function(t,r){return t?t===!0?j.createElement(nt,{key:"label-implicit",viewBox:r}):Fe(t)?j.createElement(nt,{key:"label-implicit",viewBox:r,value:t}):E.isValidElement(t)?t.type===nt?E.cloneElement(t,{key:"label-implicit",viewBox:r}):j.createElement(nt,{key:"label-implicit",content:t,viewBox:r}):J(t)?j.createElement(nt,{key:"label-implicit",content:t,viewBox:r}):pa(t)?j.createElement(nt,Xo({viewBox:r},t,{key:"label-implicit"})):null:null},Y6=function(t,r){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;if(!t||!t.children&&n&&!t.label)return null;var i=t.children,a=m_(t),o=rr(i,nt).map(function(u,s){return E.cloneElement(u,{viewBox:r||a,key:"label-".concat(s)})});if(!n)return o;var l=q6(t.label,r||a);return[l].concat(M6(o))};nt.parseViewBox=m_;nt.renderCallByParent=Y6;function Q6(e){var t=e==null?0:e.length;return t?e[t-1]:void 0}var Z6=Q6;const J6=ve(Z6);function qo(e){"@babel/helpers - typeof";return qo=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},qo(e)}var eW=["valueAccessor"],tW=["data","dataKey","clockWise","id","textBreakAll"];function rW(e){return oW(e)||aW(e)||iW(e)||nW()}function nW(){throw new TypeError(`Invalid attempt to spread non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function iW(e,t){if(e){if(typeof e=="string")return Dp(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if(r==="Object"&&e.constructor&&(r=e.constructor.name),r==="Map"||r==="Set")return Array.from(e);if(r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return Dp(e,t)}}function aW(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function oW(e){if(Array.isArray(e))return Dp(e)}function Dp(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function cW(e,t){if(e==null)return{};var r={};for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){if(t.indexOf(n)>=0)continue;r[n]=e[n]}return r}var fW=function(t){return Array.isArray(t.value)?J6(t.value):t.value};function un(e){var t=e.valueAccessor,r=t===void 0?fW:t,n=fb(e,eW),i=n.data,a=n.dataKey,o=n.clockWise,l=n.id,u=n.textBreakAll,s=fb(n,tW);return!i||!i.length?null:j.createElement(_e,{className:"recharts-label-list"},i.map(function(f,c){var d=re(a)?r(f,c):At(f&&f.payload,a),p=re(l)?{}:{id:"".concat(l,"-").concat(c)};return j.createElement(nt,xs({},te(f,!0),s,p,{parentViewBox:f.parentViewBox,value:d,textBreakAll:u,viewBox:nt.parseViewBox(re(o)?f:cb(cb({},f),{},{clockWise:o})),key:"label-".concat(c),index:c}))}))}un.displayName="LabelList";function dW(e,t){return e?e===!0?j.createElement(un,{key:"labelList-implicit",data:t}):j.isValidElement(e)||J(e)?j.createElement(un,{key:"labelList-implicit",data:t,content:e}):pa(e)?j.createElement(un,xs({data:t},e,{key:"labelList-implicit"})):null:null}function pW(e,t){var r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;if(!e||!e.children&&r&&!e.label)return null;var n=e.children,i=rr(n,un).map(function(o,l){return E.cloneElement(o,{data:t,key:"labelList-".concat(l)})});if(!r)return i;var a=dW(e.label,t);return[a].concat(rW(i))}un.renderCallByParent=pW;function Yo(e){"@babel/helpers - typeof";return Yo=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Yo(e)}function Lp(){return Lp=Object.assign?Object.assign.bind():function(e){for(var t=1;t180),",").concat(+(o>s),`, + `).concat(c.x,",").concat(c.y,` + `);if(i>0){var p=Ye(r,n,i,o),b=Ye(r,n,i,s);d+="L ".concat(b.x,",").concat(b.y,` + A `).concat(i,",").concat(i,`,0, + `).concat(+(Math.abs(u)>180),",").concat(+(o<=s),`, + `).concat(p.x,",").concat(p.y," Z")}else d+="L ".concat(r,",").concat(n," Z");return d},gW=function(t){var r=t.cx,n=t.cy,i=t.innerRadius,a=t.outerRadius,o=t.cornerRadius,l=t.forceCornerRadius,u=t.cornerIsExternal,s=t.startAngle,f=t.endAngle,c=Jt(f-s),d=eu({cx:r,cy:n,radius:a,angle:s,sign:c,cornerRadius:o,cornerIsExternal:u}),p=d.circleTangency,b=d.lineTangency,m=d.theta,y=eu({cx:r,cy:n,radius:a,angle:f,sign:-c,cornerRadius:o,cornerIsExternal:u}),v=y.circleTangency,h=y.lineTangency,x=y.theta,S=u?Math.abs(s-f):Math.abs(s-f)-m-x;if(S<0)return l?"M ".concat(b.x,",").concat(b.y,` + a`).concat(o,",").concat(o,",0,0,1,").concat(o*2,`,0 + a`).concat(o,",").concat(o,",0,0,1,").concat(-o*2,`,0 + `):y_({cx:r,cy:n,innerRadius:i,outerRadius:a,startAngle:s,endAngle:f});var g="M ".concat(b.x,",").concat(b.y,` + A`).concat(o,",").concat(o,",0,0,").concat(+(c<0),",").concat(p.x,",").concat(p.y,` + A`).concat(a,",").concat(a,",0,").concat(+(S>180),",").concat(+(c<0),",").concat(v.x,",").concat(v.y,` + A`).concat(o,",").concat(o,",0,0,").concat(+(c<0),",").concat(h.x,",").concat(h.y,` + `);if(i>0){var w=eu({cx:r,cy:n,radius:i,angle:s,sign:c,isExternal:!0,cornerRadius:o,cornerIsExternal:u}),O=w.circleTangency,P=w.lineTangency,A=w.theta,T=eu({cx:r,cy:n,radius:i,angle:f,sign:-c,isExternal:!0,cornerRadius:o,cornerIsExternal:u}),$=T.circleTangency,M=T.lineTangency,k=T.theta,L=u?Math.abs(s-f):Math.abs(s-f)-A-k;if(L<0&&o===0)return"".concat(g,"L").concat(r,",").concat(n,"Z");g+="L".concat(M.x,",").concat(M.y,` + A`).concat(o,",").concat(o,",0,0,").concat(+(c<0),",").concat($.x,",").concat($.y,` + A`).concat(i,",").concat(i,",0,").concat(+(L>180),",").concat(+(c>0),",").concat(O.x,",").concat(O.y,` + A`).concat(o,",").concat(o,",0,0,").concat(+(c<0),",").concat(P.x,",").concat(P.y,"Z")}else g+="L".concat(r,",").concat(n,"Z");return g},bW={cx:0,cy:0,innerRadius:0,outerRadius:0,startAngle:0,endAngle:0,cornerRadius:0,forceCornerRadius:!1,cornerIsExternal:!1},g_=function(t){var r=pb(pb({},bW),t),n=r.cx,i=r.cy,a=r.innerRadius,o=r.outerRadius,l=r.cornerRadius,u=r.forceCornerRadius,s=r.cornerIsExternal,f=r.startAngle,c=r.endAngle,d=r.className;if(o0&&Math.abs(f-c)<360?y=gW({cx:n,cy:i,innerRadius:a,outerRadius:o,cornerRadius:Math.min(m,b/2),forceCornerRadius:u,cornerIsExternal:s,startAngle:f,endAngle:c}):y=y_({cx:n,cy:i,innerRadius:a,outerRadius:o,startAngle:f,endAngle:c}),j.createElement("path",Lp({},te(r,!0),{className:p,d:y,role:"img"}))};function Qo(e){"@babel/helpers - typeof";return Qo=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Qo(e)}function Rp(){return Rp=Object.assign?Object.assign.bind():function(e){for(var t=1;tkW.call(e,t));function ri(e,t){return e===t||!e&&!t&&e!==e&&t!==t}const IW="__v",DW="__o",LW="_owner",{getOwnPropertyDescriptor:gb,keys:bb}=Object;function RW(e,t){return e.byteLength===t.byteLength&&ws(new Uint8Array(e),new Uint8Array(t))}function BW(e,t,r){let n=e.length;if(t.length!==n)return!1;for(;n-- >0;)if(!r.equals(e[n],t[n],n,n,e,t,r))return!1;return!0}function zW(e,t){return e.byteLength===t.byteLength&&ws(new Uint8Array(e.buffer,e.byteOffset,e.byteLength),new Uint8Array(t.buffer,t.byteOffset,t.byteLength))}function UW(e,t){return ri(e.getTime(),t.getTime())}function FW(e,t){return e.name===t.name&&e.message===t.message&&e.cause===t.cause&&e.stack===t.stack}function WW(e,t){return e===t}function xb(e,t,r){const n=e.size;if(n!==t.size)return!1;if(!n)return!0;const i=new Array(n),a=e.entries();let o,l,u=0;for(;(o=a.next())&&!o.done;){const s=t.entries();let f=!1,c=0;for(;(l=s.next())&&!l.done;){if(i[c]){c++;continue}const d=o.value,p=l.value;if(r.equals(d[0],p[0],u,c,e,t,r)&&r.equals(d[1],p[1],d[0],p[0],e,t,r)){f=i[c]=!0;break}c++}if(!f)return!1;u++}return!0}const HW=ri;function VW(e,t,r){const n=bb(e);let i=n.length;if(bb(t).length!==i)return!1;for(;i-- >0;)if(!S_(e,t,r,n[i]))return!1;return!0}function Fa(e,t,r){const n=yb(e);let i=n.length;if(yb(t).length!==i)return!1;let a,o,l;for(;i-- >0;)if(a=n[i],!S_(e,t,r,a)||(o=gb(e,a),l=gb(t,a),(o||l)&&(!o||!l||o.configurable!==l.configurable||o.enumerable!==l.enumerable||o.writable!==l.writable)))return!1;return!0}function KW(e,t){return ri(e.valueOf(),t.valueOf())}function GW(e,t){return e.source===t.source&&e.flags===t.flags}function wb(e,t,r){const n=e.size;if(n!==t.size)return!1;if(!n)return!0;const i=new Array(n),a=e.values();let o,l;for(;(o=a.next())&&!o.done;){const u=t.values();let s=!1,f=0;for(;(l=u.next())&&!l.done;){if(!i[f]&&r.equals(o.value,l.value,o.value,l.value,e,t,r)){s=i[f]=!0;break}f++}if(!s)return!1}return!0}function ws(e,t){let r=e.byteLength;if(t.byteLength!==r||e.byteOffset!==t.byteOffset)return!1;for(;r-- >0;)if(e[r]!==t[r])return!1;return!0}function XW(e,t){return e.hostname===t.hostname&&e.pathname===t.pathname&&e.protocol===t.protocol&&e.port===t.port&&e.hash===t.hash&&e.username===t.username&&e.password===t.password}function S_(e,t,r,n){return(n===LW||n===DW||n===IW)&&(e.$$typeof||t.$$typeof)?!0:NW(t,n)&&r.equals(e[n],t[n],n,n,e,t,r)}const qW="[object ArrayBuffer]",YW="[object Arguments]",QW="[object Boolean]",ZW="[object DataView]",JW="[object Date]",e9="[object Error]",t9="[object Map]",r9="[object Number]",n9="[object Object]",i9="[object RegExp]",a9="[object Set]",o9="[object String]",l9={"[object Int8Array]":!0,"[object Uint8Array]":!0,"[object Uint8ClampedArray]":!0,"[object Int16Array]":!0,"[object Uint16Array]":!0,"[object Int32Array]":!0,"[object Uint32Array]":!0,"[object Float16Array]":!0,"[object Float32Array]":!0,"[object Float64Array]":!0,"[object BigInt64Array]":!0,"[object BigUint64Array]":!0},u9="[object URL]",s9=Object.prototype.toString;function c9({areArrayBuffersEqual:e,areArraysEqual:t,areDataViewsEqual:r,areDatesEqual:n,areErrorsEqual:i,areFunctionsEqual:a,areMapsEqual:o,areNumbersEqual:l,areObjectsEqual:u,arePrimitiveWrappersEqual:s,areRegExpsEqual:f,areSetsEqual:c,areTypedArraysEqual:d,areUrlsEqual:p,unknownTagComparators:b}){return function(y,v,h){if(y===v)return!0;if(y==null||v==null)return!1;const x=typeof y;if(x!==typeof v)return!1;if(x!=="object")return x==="number"?l(y,v,h):x==="function"?a(y,v,h):!1;const S=y.constructor;if(S!==v.constructor)return!1;if(S===Object)return u(y,v,h);if(Array.isArray(y))return t(y,v,h);if(S===Date)return n(y,v,h);if(S===RegExp)return f(y,v,h);if(S===Map)return o(y,v,h);if(S===Set)return c(y,v,h);const g=s9.call(y);if(g===JW)return n(y,v,h);if(g===i9)return f(y,v,h);if(g===t9)return o(y,v,h);if(g===a9)return c(y,v,h);if(g===n9)return typeof y.then!="function"&&typeof v.then!="function"&&u(y,v,h);if(g===u9)return p(y,v,h);if(g===e9)return i(y,v,h);if(g===YW)return u(y,v,h);if(l9[g])return d(y,v,h);if(g===qW)return e(y,v,h);if(g===ZW)return r(y,v,h);if(g===QW||g===r9||g===o9)return s(y,v,h);if(b){let w=b[g];if(!w){const O=MW(y);O&&(w=b[O])}if(w)return w(y,v,h)}return!1}}function f9({circular:e,createCustomConfig:t,strict:r}){let n={areArrayBuffersEqual:RW,areArraysEqual:r?Fa:BW,areDataViewsEqual:zW,areDatesEqual:UW,areErrorsEqual:FW,areFunctionsEqual:WW,areMapsEqual:r?Hf(xb,Fa):xb,areNumbersEqual:HW,areObjectsEqual:r?Fa:VW,arePrimitiveWrappersEqual:KW,areRegExpsEqual:GW,areSetsEqual:r?Hf(wb,Fa):wb,areTypedArraysEqual:r?Hf(ws,Fa):ws,areUrlsEqual:XW,unknownTagComparators:void 0};if(t&&(n=Object.assign({},n,t(n))),e){const i=ru(n.areArraysEqual),a=ru(n.areMapsEqual),o=ru(n.areObjectsEqual),l=ru(n.areSetsEqual);n=Object.assign({},n,{areArraysEqual:i,areMapsEqual:a,areObjectsEqual:o,areSetsEqual:l})}return n}function d9(e){return function(t,r,n,i,a,o,l){return e(t,r,l)}}function p9({circular:e,comparator:t,createState:r,equals:n,strict:i}){if(r)return function(l,u){const{cache:s=e?new WeakMap:void 0,meta:f}=r();return t(l,u,{cache:s,equals:n,meta:f,strict:i})};if(e)return function(l,u){return t(l,u,{cache:new WeakMap,equals:n,meta:void 0,strict:i})};const a={cache:void 0,equals:n,meta:void 0,strict:i};return function(l,u){return t(l,u,a)}}const h9=gn();gn({strict:!0});gn({circular:!0});gn({circular:!0,strict:!0});gn({createInternalComparator:()=>ri});gn({strict:!0,createInternalComparator:()=>ri});gn({circular:!0,createInternalComparator:()=>ri});gn({circular:!0,createInternalComparator:()=>ri,strict:!0});function gn(e={}){const{circular:t=!1,createInternalComparator:r,createState:n,strict:i=!1}=e,a=f9(e),o=c9(a),l=r?r(o):d9(o);return p9({circular:t,comparator:o,createState:n,equals:l,strict:i})}function v9(e){typeof requestAnimationFrame<"u"&&requestAnimationFrame(e)}function Sb(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,r=-1,n=function i(a){r<0&&(r=a),a-r>t?(e(a),r=-1):v9(i)};requestAnimationFrame(n)}function Bp(e){"@babel/helpers - typeof";return Bp=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Bp(e)}function m9(e){return x9(e)||b9(e)||g9(e)||y9()}function y9(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function g9(e,t){if(e){if(typeof e=="string")return Ob(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if(r==="Object"&&e.constructor&&(r=e.constructor.name),r==="Map"||r==="Set")return Array.from(e);if(r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return Ob(e,t)}}function Ob(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);re.length)&&(t=e.length);for(var r=0,n=new Array(t);r1?1:v<0?0:v},m=function(v){for(var h=v>1?1:v,x=h,S=0;S<8;++S){var g=c(x)-h,w=p(x);if(Math.abs(g-h)0&&arguments[0]!==void 0?arguments[0]:{},r=t.stiff,n=r===void 0?100:r,i=t.damping,a=i===void 0?8:i,o=t.dt,l=o===void 0?17:o,u=function(f,c,d){var p=-(f-c)*n,b=d*a,m=d+(p-b)*l/1e3,y=d*l/1e3+f;return Math.abs(y-c)e.length)&&(t=e.length);for(var r=0,n=new Array(t);r=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function Q9(e,t){if(e==null)return{};var r={},n=Object.keys(e),i,a;for(a=0;a=0)&&(r[i]=e[i]);return r}function Vf(e){return tH(e)||eH(e)||J9(e)||Z9()}function Z9(){throw new TypeError(`Invalid attempt to spread non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function J9(e,t){if(e){if(typeof e=="string")return Hp(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if(r==="Object"&&e.constructor&&(r=e.constructor.name),r==="Map"||r==="Set")return Array.from(e);if(r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return Hp(e,t)}}function eH(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function tH(e){if(Array.isArray(e))return Hp(e)}function Hp(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function _s(e){return _s=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(r){return r.__proto__||Object.getPrototypeOf(r)},_s(e)}var Nr=function(e){oH(r,e);var t=lH(r);function r(n,i){var a;rH(this,r),a=t.call(this,n,i);var o=a.props,l=o.isActive,u=o.attributeName,s=o.from,f=o.to,c=o.steps,d=o.children,p=o.duration;if(a.handleStyleChange=a.handleStyleChange.bind(Gp(a)),a.changeStyle=a.changeStyle.bind(Gp(a)),!l||p<=0)return a.state={style:{}},typeof d=="function"&&(a.state={style:f}),Kp(a);if(c&&c.length)a.state={style:c[0].style};else if(s){if(typeof d=="function")return a.state={style:s},Kp(a);a.state={style:u?Xa({},u,s):s}}else a.state={style:{}};return a}return iH(r,[{key:"componentDidMount",value:function(){var i=this.props,a=i.isActive,o=i.canBegin;this.mounted=!0,!(!a||!o)&&this.runAnimation(this.props)}},{key:"componentDidUpdate",value:function(i){var a=this.props,o=a.isActive,l=a.canBegin,u=a.attributeName,s=a.shouldReAnimate,f=a.to,c=a.from,d=this.state.style;if(l){if(!o){var p={style:u?Xa({},u,f):f};this.state&&d&&(u&&d[u]!==f||!u&&d!==f)&&this.setState(p);return}if(!(h9(i.to,f)&&i.canBegin&&i.isActive)){var b=!i.canBegin||!i.isActive;this.manager&&this.manager.stop(),this.stopJSAnimation&&this.stopJSAnimation();var m=b||s?c:i.to;if(this.state&&d){var y={style:u?Xa({},u,m):m};(u&&d[u]!==m||!u&&d!==m)&&this.setState(y)}this.runAnimation(Gt(Gt({},this.props),{},{from:m,begin:0}))}}}},{key:"componentWillUnmount",value:function(){this.mounted=!1;var i=this.props.onAnimationEnd;this.unSubscribe&&this.unSubscribe(),this.manager&&(this.manager.stop(),this.manager=null),this.stopJSAnimation&&this.stopJSAnimation(),i&&i()}},{key:"handleStyleChange",value:function(i){this.changeStyle(i)}},{key:"changeStyle",value:function(i){this.mounted&&this.setState({style:i})}},{key:"runJSAnimation",value:function(i){var a=this,o=i.from,l=i.to,u=i.duration,s=i.easing,f=i.begin,c=i.onAnimationEnd,d=i.onAnimationStart,p=X9(o,l,L9(s),u,this.changeStyle),b=function(){a.stopJSAnimation=p()};this.manager.start([d,f,b,u,c])}},{key:"runStepAnimation",value:function(i){var a=this,o=i.steps,l=i.begin,u=i.onAnimationStart,s=o[0],f=s.style,c=s.duration,d=c===void 0?0:c,p=function(m,y,v){if(v===0)return m;var h=y.duration,x=y.easing,S=x===void 0?"ease":x,g=y.style,w=y.properties,O=y.onAnimationEnd,P=v>0?o[v-1]:y,A=w||Object.keys(g);if(typeof S=="function"||S==="spring")return[].concat(Vf(m),[a.runJSAnimation.bind(a,{from:P.style,to:g,duration:h,easing:S}),h]);var T=Ab(A,h,S),$=Gt(Gt(Gt({},P.style),g),{},{transition:T});return[].concat(Vf(m),[$,h,O]).filter(P9)};return this.manager.start([u].concat(Vf(o.reduce(p,[f,Math.max(d,l)])),[i.onAnimationEnd]))}},{key:"runAnimation",value:function(i){this.manager||(this.manager=w9());var a=i.begin,o=i.duration,l=i.attributeName,u=i.to,s=i.easing,f=i.onAnimationStart,c=i.onAnimationEnd,d=i.steps,p=i.children,b=this.manager;if(this.unSubscribe=b.subscribe(this.handleStyleChange),typeof s=="function"||typeof p=="function"||s==="spring"){this.runJSAnimation(i);return}if(d.length>1){this.runStepAnimation(i);return}var m=l?Xa({},l,u):u,y=Ab(Object.keys(m),o,s);b.start([f,a,Gt(Gt({},m),{},{transition:y}),o,c])}},{key:"render",value:function(){var i=this.props,a=i.children;i.begin;var o=i.duration;i.attributeName,i.easing;var l=i.isActive;i.steps,i.from,i.to,i.canBegin,i.onAnimationEnd,i.shouldReAnimate,i.onAnimationReStart;var u=Y9(i,q9),s=E.Children.count(a),f=this.state.style;if(typeof a=="function")return a(f);if(!l||s===0||o<=0)return a;var c=function(p){var b=p.props,m=b.style,y=m===void 0?{}:m,v=b.className,h=E.cloneElement(p,Gt(Gt({},u),{},{style:Gt(Gt({},y),f),className:v}));return h};return s===1?c(E.Children.only(a)):j.createElement("div",null,E.Children.map(a,function(d){return c(d)}))}}]),r}(E.PureComponent);Nr.displayName="Animate";Nr.defaultProps={begin:0,duration:1e3,from:"",to:"",attributeName:"",easing:"ease",isActive:!0,canBegin:!0,steps:[],onAnimationEnd:function(){},onAnimationStart:function(){}};Nr.propTypes={from:ue.oneOfType([ue.object,ue.string]),to:ue.oneOfType([ue.object,ue.string]),attributeName:ue.string,duration:ue.number,begin:ue.number,easing:ue.oneOfType([ue.string,ue.func]),steps:ue.arrayOf(ue.shape({duration:ue.number.isRequired,style:ue.object.isRequired,easing:ue.oneOfType([ue.oneOf(["ease","ease-in","ease-out","ease-in-out","linear"]),ue.func]),properties:ue.arrayOf("string"),onAnimationEnd:ue.func})),children:ue.oneOfType([ue.node,ue.func]),isActive:ue.bool,canBegin:ue.bool,onAnimationEnd:ue.func,shouldReAnimate:ue.bool,onAnimationStart:ue.func,onAnimationReStart:ue.func};function el(e){"@babel/helpers - typeof";return el=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},el(e)}function Ps(){return Ps=Object.assign?Object.assign.bind():function(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=new Array(t);r=0?1:-1,u=n>=0?1:-1,s=i>=0&&n>=0||i<0&&n<0?1:0,f;if(o>0&&a instanceof Array){for(var c=[0,0,0,0],d=0,p=4;do?o:a[d];f="M".concat(t,",").concat(r+l*c[0]),c[0]>0&&(f+="A ".concat(c[0],",").concat(c[0],",0,0,").concat(s,",").concat(t+u*c[0],",").concat(r)),f+="L ".concat(t+n-u*c[1],",").concat(r),c[1]>0&&(f+="A ".concat(c[1],",").concat(c[1],",0,0,").concat(s,`, + `).concat(t+n,",").concat(r+l*c[1])),f+="L ".concat(t+n,",").concat(r+i-l*c[2]),c[2]>0&&(f+="A ".concat(c[2],",").concat(c[2],",0,0,").concat(s,`, + `).concat(t+n-u*c[2],",").concat(r+i)),f+="L ".concat(t+u*c[3],",").concat(r+i),c[3]>0&&(f+="A ".concat(c[3],",").concat(c[3],",0,0,").concat(s,`, + `).concat(t,",").concat(r+i-l*c[3])),f+="Z"}else if(o>0&&a===+a&&a>0){var b=Math.min(o,a);f="M ".concat(t,",").concat(r+l*b,` + A `).concat(b,",").concat(b,",0,0,").concat(s,",").concat(t+u*b,",").concat(r,` + L `).concat(t+n-u*b,",").concat(r,` + A `).concat(b,",").concat(b,",0,0,").concat(s,",").concat(t+n,",").concat(r+l*b,` + L `).concat(t+n,",").concat(r+i-l*b,` + A `).concat(b,",").concat(b,",0,0,").concat(s,",").concat(t+n-u*b,",").concat(r+i,` + L `).concat(t+u*b,",").concat(r+i,` + A `).concat(b,",").concat(b,",0,0,").concat(s,",").concat(t,",").concat(r+i-l*b," Z")}else f="M ".concat(t,",").concat(r," h ").concat(n," v ").concat(i," h ").concat(-n," Z");return f},yH=function(t,r){if(!t||!r)return!1;var n=t.x,i=t.y,a=r.x,o=r.y,l=r.width,u=r.height;if(Math.abs(l)>0&&Math.abs(u)>0){var s=Math.min(a,a+l),f=Math.max(a,a+l),c=Math.min(o,o+u),d=Math.max(o,o+u);return n>=s&&n<=f&&i>=c&&i<=d}return!1},gH={x:0,y:0,width:0,height:0,radius:0,isAnimationActive:!1,isUpdateAnimationActive:!1,animationBegin:0,animationDuration:1500,animationEasing:"ease"},fm=function(t){var r=Nb(Nb({},gH),t),n=E.useRef(),i=E.useState(-1),a=sH(i,2),o=a[0],l=a[1];E.useEffect(function(){if(n.current&&n.current.getTotalLength)try{var S=n.current.getTotalLength();S&&l(S)}catch{}},[]);var u=r.x,s=r.y,f=r.width,c=r.height,d=r.radius,p=r.className,b=r.animationEasing,m=r.animationDuration,y=r.animationBegin,v=r.isAnimationActive,h=r.isUpdateAnimationActive;if(u!==+u||s!==+s||f!==+f||c!==+c||f===0||c===0)return null;var x=oe("recharts-rectangle",p);return h?j.createElement(Nr,{canBegin:o>0,from:{width:f,height:c,x:u,y:s},to:{width:f,height:c,x:u,y:s},duration:m,animationEasing:b,isActive:h},function(S){var g=S.width,w=S.height,O=S.x,P=S.y;return j.createElement(Nr,{canBegin:o>0,from:"0px ".concat(o===-1?1:o,"px"),to:"".concat(o,"px 0px"),attributeName:"strokeDasharray",begin:y,duration:m,isActive:v,easing:b},j.createElement("path",Ps({},te(r,!0),{className:x,d:Ib(O,P,g,w,d),ref:n})))}):j.createElement("path",Ps({},te(r,!0),{className:x,d:Ib(u,s,f,c,d)}))};function Xp(){return Xp=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function PH(e,t){if(e==null)return{};var r={};for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){if(t.indexOf(n)>=0)continue;r[n]=e[n]}return r}var AH=function(t,r,n,i,a,o){return"M".concat(t,",").concat(a,"v").concat(i,"M").concat(o,",").concat(r,"h").concat(n)},EH=function(t){var r=t.x,n=r===void 0?0:r,i=t.y,a=i===void 0?0:i,o=t.top,l=o===void 0?0:o,u=t.left,s=u===void 0?0:u,f=t.width,c=f===void 0?0:f,d=t.height,p=d===void 0?0:d,b=t.className,m=_H(t,bH),y=xH({x:n,y:a,top:l,left:s,width:c,height:p},m);return!H(n)||!H(a)||!H(c)||!H(p)||!H(l)||!H(s)?null:j.createElement("path",qp({},te(y,!0),{className:oe("recharts-cross",b),d:AH(n,a,c,p,l,s)}))},$H=HS,jH=$H(Object.getPrototypeOf,Object),TH=jH,CH=Dr,kH=TH,MH=Lr,NH="[object Object]",IH=Function.prototype,DH=Object.prototype,j_=IH.toString,LH=DH.hasOwnProperty,RH=j_.call(Object);function BH(e){if(!MH(e)||CH(e)!=NH)return!1;var t=kH(e);if(t===null)return!0;var r=LH.call(t,"constructor")&&t.constructor;return typeof r=="function"&&r instanceof r&&j_.call(r)==RH}var zH=BH;const UH=ve(zH);var FH=Dr,WH=Lr,HH="[object Boolean]";function VH(e){return e===!0||e===!1||WH(e)&&FH(e)==HH}var KH=VH;const GH=ve(KH);function rl(e){"@babel/helpers - typeof";return rl=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},rl(e)}function As(){return As=Object.assign?Object.assign.bind():function(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=new Array(t);r0,from:{upperWidth:0,lowerWidth:0,height:d,x:u,y:s},to:{upperWidth:f,lowerWidth:c,height:d,x:u,y:s},duration:m,animationEasing:b,isActive:v},function(x){var S=x.upperWidth,g=x.lowerWidth,w=x.height,O=x.x,P=x.y;return j.createElement(Nr,{canBegin:o>0,from:"0px ".concat(o===-1?1:o,"px"),to:"".concat(o,"px 0px"),attributeName:"strokeDasharray",begin:y,duration:m,easing:b},j.createElement("path",As({},te(r,!0),{className:h,d:zb(O,P,S,g,w),ref:n})))}):j.createElement("g",null,j.createElement("path",As({},te(r,!0),{className:h,d:zb(u,s,f,c,d)})))},i7=["option","shapeType","propTransformer","activeClassName","isActive"];function nl(e){"@babel/helpers - typeof";return nl=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},nl(e)}function a7(e,t){if(e==null)return{};var r=o7(e,t),n,i;if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function o7(e,t){if(e==null)return{};var r={};for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){if(t.indexOf(n)>=0)continue;r[n]=e[n]}return r}function Ub(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Es(e){for(var t=1;t0&&n.handleDrag(i.changedTouches[0])}),bt(n,"handleDragEnd",function(){n.setState({isTravellerMoving:!1,isSlideMoving:!1},function(){var i=n.props,a=i.endIndex,o=i.onDragEnd,l=i.startIndex;o==null||o({endIndex:a,startIndex:l})}),n.detachDragEndListener()}),bt(n,"handleLeaveWrapper",function(){(n.state.isTravellerMoving||n.state.isSlideMoving)&&(n.leaveTimer=window.setTimeout(n.handleDragEnd,n.props.leaveTimeOut))}),bt(n,"handleEnterSlideOrTraveller",function(){n.setState({isTextActive:!0})}),bt(n,"handleLeaveSlideOrTraveller",function(){n.setState({isTextActive:!1})}),bt(n,"handleSlideDragStart",function(i){var a=Xb(i)?i.changedTouches[0]:i;n.setState({isTravellerMoving:!1,isSlideMoving:!0,slideMoveStartX:a.pageX}),n.attachDragEndListener()}),n.travellerDragStartHandlers={startX:n.handleTravellerDragStart.bind(n,"startX"),endX:n.handleTravellerDragStart.bind(n,"endX")},n.state={},n}return V7(t,e),U7(t,[{key:"componentWillUnmount",value:function(){this.leaveTimer&&(clearTimeout(this.leaveTimer),this.leaveTimer=null),this.detachDragEndListener()}},{key:"getIndex",value:function(n){var i=n.startX,a=n.endX,o=this.state.scaleValues,l=this.props,u=l.gap,s=l.data,f=s.length-1,c=Math.min(i,a),d=Math.max(i,a),p=t.getIndexInRange(o,c),b=t.getIndexInRange(o,d);return{startIndex:p-p%u,endIndex:b===f?f:b-b%u}}},{key:"getTextOfTick",value:function(n){var i=this.props,a=i.data,o=i.tickFormatter,l=i.dataKey,u=At(a[n],l,n);return J(o)?o(u,n):u}},{key:"attachDragEndListener",value:function(){window.addEventListener("mouseup",this.handleDragEnd,!0),window.addEventListener("touchend",this.handleDragEnd,!0),window.addEventListener("mousemove",this.handleDrag,!0)}},{key:"detachDragEndListener",value:function(){window.removeEventListener("mouseup",this.handleDragEnd,!0),window.removeEventListener("touchend",this.handleDragEnd,!0),window.removeEventListener("mousemove",this.handleDrag,!0)}},{key:"handleSlideDrag",value:function(n){var i=this.state,a=i.slideMoveStartX,o=i.startX,l=i.endX,u=this.props,s=u.x,f=u.width,c=u.travellerWidth,d=u.startIndex,p=u.endIndex,b=u.onChange,m=n.pageX-a;m>0?m=Math.min(m,s+f-c-l,s+f-c-o):m<0&&(m=Math.max(m,s-o,s-l));var y=this.getIndex({startX:o+m,endX:l+m});(y.startIndex!==d||y.endIndex!==p)&&b&&b(y),this.setState({startX:o+m,endX:l+m,slideMoveStartX:n.pageX})}},{key:"handleTravellerDragStart",value:function(n,i){var a=Xb(i)?i.changedTouches[0]:i;this.setState({isSlideMoving:!1,isTravellerMoving:!0,movingTravellerId:n,brushMoveStartX:a.pageX}),this.attachDragEndListener()}},{key:"handleTravellerMove",value:function(n){var i=this.state,a=i.brushMoveStartX,o=i.movingTravellerId,l=i.endX,u=i.startX,s=this.state[o],f=this.props,c=f.x,d=f.width,p=f.travellerWidth,b=f.onChange,m=f.gap,y=f.data,v={startX:this.state.startX,endX:this.state.endX},h=n.pageX-a;h>0?h=Math.min(h,c+d-p-s):h<0&&(h=Math.max(h,c-s)),v[o]=s+h;var x=this.getIndex(v),S=x.startIndex,g=x.endIndex,w=function(){var P=y.length-1;return o==="startX"&&(l>u?S%m===0:g%m===0)||lu?g%m===0:S%m===0)||l>u&&g===P};this.setState(bt(bt({},o,s+h),"brushMoveStartX",n.pageX),function(){b&&w()&&b(x)})}},{key:"handleTravellerMoveKeyboard",value:function(n,i){var a=this,o=this.state,l=o.scaleValues,u=o.startX,s=o.endX,f=this.state[i],c=l.indexOf(f);if(c!==-1){var d=c+n;if(!(d===-1||d>=l.length)){var p=l[d];i==="startX"&&p>=s||i==="endX"&&p<=u||this.setState(bt({},i,p),function(){a.props.onChange(a.getIndex({startX:a.state.startX,endX:a.state.endX}))})}}}},{key:"renderBackground",value:function(){var n=this.props,i=n.x,a=n.y,o=n.width,l=n.height,u=n.fill,s=n.stroke;return j.createElement("rect",{stroke:s,fill:u,x:i,y:a,width:o,height:l})}},{key:"renderPanorama",value:function(){var n=this.props,i=n.x,a=n.y,o=n.width,l=n.height,u=n.data,s=n.children,f=n.padding,c=E.Children.only(s);return c?j.cloneElement(c,{x:i,y:a,width:o,height:l,margin:f,compact:!0,data:u}):null}},{key:"renderTravellerLayer",value:function(n,i){var a,o,l=this,u=this.props,s=u.y,f=u.travellerWidth,c=u.height,d=u.traveller,p=u.ariaLabel,b=u.data,m=u.startIndex,y=u.endIndex,v=Math.max(n,this.props.x),h=Gf(Gf({},te(this.props,!1)),{},{x:v,y:s,width:f,height:c}),x=p||"Min value: ".concat((a=b[m])===null||a===void 0?void 0:a.name,", Max value: ").concat((o=b[y])===null||o===void 0?void 0:o.name);return j.createElement(_e,{tabIndex:0,role:"slider","aria-label":x,"aria-valuenow":n,className:"recharts-brush-traveller",onMouseEnter:this.handleEnterSlideOrTraveller,onMouseLeave:this.handleLeaveSlideOrTraveller,onMouseDown:this.travellerDragStartHandlers[i],onTouchStart:this.travellerDragStartHandlers[i],onKeyDown:function(g){["ArrowLeft","ArrowRight"].includes(g.key)&&(g.preventDefault(),g.stopPropagation(),l.handleTravellerMoveKeyboard(g.key==="ArrowRight"?1:-1,i))},onFocus:function(){l.setState({isTravellerFocused:!0})},onBlur:function(){l.setState({isTravellerFocused:!1})},style:{cursor:"col-resize"}},t.renderTraveller(d,h))}},{key:"renderSlide",value:function(n,i){var a=this.props,o=a.y,l=a.height,u=a.stroke,s=a.travellerWidth,f=Math.min(n,i)+s,c=Math.max(Math.abs(i-n)-s,0);return j.createElement("rect",{className:"recharts-brush-slide",onMouseEnter:this.handleEnterSlideOrTraveller,onMouseLeave:this.handleLeaveSlideOrTraveller,onMouseDown:this.handleSlideDragStart,onTouchStart:this.handleSlideDragStart,style:{cursor:"move"},stroke:"none",fill:u,fillOpacity:.2,x:f,y:o,width:c,height:l})}},{key:"renderText",value:function(){var n=this.props,i=n.startIndex,a=n.endIndex,o=n.y,l=n.height,u=n.travellerWidth,s=n.stroke,f=this.state,c=f.startX,d=f.endX,p=5,b={pointerEvents:"none",fill:s};return j.createElement(_e,{className:"recharts-brush-texts"},j.createElement(is,js({textAnchor:"end",verticalAnchor:"middle",x:Math.min(c,d)-p,y:o+l/2},b),this.getTextOfTick(i)),j.createElement(is,js({textAnchor:"start",verticalAnchor:"middle",x:Math.max(c,d)+u+p,y:o+l/2},b),this.getTextOfTick(a)))}},{key:"render",value:function(){var n=this.props,i=n.data,a=n.className,o=n.children,l=n.x,u=n.y,s=n.width,f=n.height,c=n.alwaysShowText,d=this.state,p=d.startX,b=d.endX,m=d.isTextActive,y=d.isSlideMoving,v=d.isTravellerMoving,h=d.isTravellerFocused;if(!i||!i.length||!H(l)||!H(u)||!H(s)||!H(f)||s<=0||f<=0)return null;var x=oe("recharts-brush",a),S=j.Children.count(o)===1,g=B7("userSelect","none");return j.createElement(_e,{className:x,onMouseLeave:this.handleLeaveWrapper,onTouchMove:this.handleTouchMove,style:g},this.renderBackground(),S&&this.renderPanorama(),this.renderSlide(p,b),this.renderTravellerLayer(p,"startX"),this.renderTravellerLayer(b,"endX"),(m||y||v||h||c)&&this.renderText())}}],[{key:"renderDefaultTraveller",value:function(n){var i=n.x,a=n.y,o=n.width,l=n.height,u=n.stroke,s=Math.floor(a+l/2)-1;return j.createElement(j.Fragment,null,j.createElement("rect",{x:i,y:a,width:o,height:l,fill:u,stroke:"none"}),j.createElement("line",{x1:i+1,y1:s,x2:i+o-1,y2:s,fill:"none",stroke:"#fff"}),j.createElement("line",{x1:i+1,y1:s+2,x2:i+o-1,y2:s+2,fill:"none",stroke:"#fff"}))}},{key:"renderTraveller",value:function(n,i){var a;return j.isValidElement(n)?a=j.cloneElement(n,i):J(n)?a=n(i):a=t.renderDefaultTraveller(i),a}},{key:"getDerivedStateFromProps",value:function(n,i){var a=n.data,o=n.width,l=n.x,u=n.travellerWidth,s=n.updateId,f=n.startIndex,c=n.endIndex;if(a!==i.prevData||s!==i.prevUpdateId)return Gf({prevData:a,prevTravellerWidth:u,prevUpdateId:s,prevX:l,prevWidth:o},a&&a.length?G7({data:a,width:o,x:l,travellerWidth:u,startIndex:f,endIndex:c}):{scale:null,scaleValues:null});if(i.scale&&(o!==i.prevWidth||l!==i.prevX||u!==i.prevTravellerWidth)){i.scale.range([l,l+o-u]);var d=i.scale.domain().map(function(p){return i.scale(p)});return{prevData:a,prevTravellerWidth:u,prevUpdateId:s,prevX:l,prevWidth:o,startX:i.scale(n.startIndex),endX:i.scale(n.endIndex),scaleValues:d}}return null}},{key:"getIndexInRange",value:function(n,i){for(var a=n.length,o=0,l=a-1;l-o>1;){var u=Math.floor((o+l)/2);n[u]>i?l=u:o=u}return i>=n[l]?l:o}}])}(E.PureComponent);bt(Qi,"displayName","Brush");bt(Qi,"defaultProps",{height:40,travellerWidth:5,gap:1,fill:"#fff",stroke:"#666",padding:{top:1,right:1,bottom:1,left:1},leaveTimeOut:1e3,alwaysShowText:!1});var X7=Lv;function q7(e,t){var r;return X7(e,function(n,i,a){return r=t(n,i,a),!r}),!!r}var Y7=q7,Q7=DS,Z7=wa,J7=Y7,eV=gt,tV=Ac;function rV(e,t,r){var n=eV(e)?Q7:J7;return r&&tV(e,t,r)&&(t=void 0),n(e,Z7(t))}var nV=rV;const iV=ve(nV);var hr=function(t,r){var n=t.alwaysShow,i=t.ifOverflow;return n&&(i="extendDomain"),i===r},qb=nO;function aV(e,t,r){t=="__proto__"&&qb?qb(e,t,{configurable:!0,enumerable:!0,value:r,writable:!0}):e[t]=r}var oV=aV,lV=oV,uV=tO,sV=wa;function cV(e,t){var r={};return t=sV(t),uV(e,function(n,i,a){lV(r,i,t(n,i,a))}),r}var fV=cV;const dV=ve(fV);function pV(e,t){for(var r=-1,n=e==null?0:e.length;++r=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function CV(e,t){if(e==null)return{};var r={};for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){if(t.indexOf(n)>=0)continue;r[n]=e[n]}return r}function kV(e,t){var r=e.x,n=e.y,i=TV(e,AV),a="".concat(r),o=parseInt(a,10),l="".concat(n),u=parseInt(l,10),s="".concat(t.height||i.height),f=parseInt(s,10),c="".concat(t.width||i.width),d=parseInt(c,10);return Wa(Wa(Wa(Wa(Wa({},t),i),o?{x:o}:{}),u?{y:u}:{}),{},{height:f,width:d,name:t.name,radius:t.radius})}function Qb(e){return j.createElement(p7,Qp({shapeType:"rectangle",propTransformer:kV,activeClassName:"recharts-active-bar"},e))}var MV=function(t){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;return function(n,i){if(typeof t=="number")return t;var a=H(n)||Fk(n);return a?t(n,i):(a||Yn(),r)}},NV=["value","background"],M_;function Zi(e){"@babel/helpers - typeof";return Zi=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Zi(e)}function IV(e,t){if(e==null)return{};var r=DV(e,t),n,i;if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function DV(e,t){if(e==null)return{};var r={};for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){if(t.indexOf(n)>=0)continue;r[n]=e[n]}return r}function Cs(){return Cs=Object.assign?Object.assign.bind():function(e){for(var t=1;t0&&Math.abs(C)0&&Math.abs(L)0&&(k=Math.min((ne||0)-(L[xe-1]||0),k))}),Number.isFinite(k)){var C=k/M,I=m.layout==="vertical"?n.height:n.width;if(m.padding==="gap"&&(O=C*I/2),m.padding==="no-gap"){var B=Xn(t.barCategoryGap,C*I),N=C*I/2;O=N-B-(N-B)/I*B}}}i==="xAxis"?P=[n.left+(x.left||0)+(O||0),n.left+n.width-(x.right||0)-(O||0)]:i==="yAxis"?P=u==="horizontal"?[n.top+n.height-(x.bottom||0),n.top+(x.top||0)]:[n.top+(x.top||0)+(O||0),n.top+n.height-(x.bottom||0)-(O||0)]:P=m.range,g&&(P=[P[1],P[0]]);var R=f6(m,a,d),U=R.scale,V=R.realScaleType;U.domain(v).range(P),d6(U);var W=x6(U,Yt(Yt({},m),{},{realScaleType:V}));i==="xAxis"?($=y==="top"&&!S||y==="bottom"&&S,A=n.left,T=c[w]-$*m.height):i==="yAxis"&&($=y==="left"&&!S||y==="right"&&S,A=c[w]-$*m.width,T=n.top);var q=Yt(Yt(Yt({},m),W),{},{realScaleType:V,x:A,y:T,scale:U,width:i==="xAxis"?n.width:m.width,height:i==="yAxis"?n.height:m.height});return q.bandSize=gs(q,W),!m.hide&&i==="xAxis"?c[w]+=($?-1:1)*q.height:m.hide||(c[w]+=($?-1:1)*q.width),Yt(Yt({},p),{},Bc({},b,q))},{})},L_=function(t,r){var n=t.x,i=t.y,a=r.x,o=r.y;return{x:Math.min(n,a),y:Math.min(i,o),width:Math.abs(a-n),height:Math.abs(o-i)}},XV=function(t){var r=t.x1,n=t.y1,i=t.x2,a=t.y2;return L_({x:r,y:n},{x:i,y:a})},R_=function(){function e(t){HV(this,e),this.scale=t}return VV(e,[{key:"domain",get:function(){return this.scale.domain}},{key:"range",get:function(){return this.scale.range}},{key:"rangeMin",get:function(){return this.range()[0]}},{key:"rangeMax",get:function(){return this.range()[1]}},{key:"bandwidth",get:function(){return this.scale.bandwidth}},{key:"apply",value:function(r){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=n.bandAware,a=n.position;if(r!==void 0){if(a)switch(a){case"start":return this.scale(r);case"middle":{var o=this.bandwidth?this.bandwidth()/2:0;return this.scale(r)+o}case"end":{var l=this.bandwidth?this.bandwidth():0;return this.scale(r)+l}default:return this.scale(r)}if(i){var u=this.bandwidth?this.bandwidth()/2:0;return this.scale(r)+u}return this.scale(r)}}},{key:"isInRange",value:function(r){var n=this.range(),i=n[0],a=n[n.length-1];return i<=a?r>=i&&r<=a:r>=a&&r<=i}}],[{key:"create",value:function(r){return new e(r)}}])}();Bc(R_,"EPS",1e-4);var pm=function(t){var r=Object.keys(t).reduce(function(n,i){return Yt(Yt({},n),{},Bc({},i,R_.create(t[i])))},{});return Yt(Yt({},r),{},{apply:function(i){var a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},o=a.bandAware,l=a.position;return dV(i,function(u,s){return r[s].apply(u,{bandAware:o,position:l})})},isInRange:function(i){return PV(i,function(a,o){return r[o].isInRange(a)})}})};function qV(e){return(e%180+180)%180}var YV=function(t){var r=t.width,n=t.height,i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,a=qV(i),o=a*Math.PI/180,l=Math.atan(n/r),u=o>l&&oe.length)&&(t=e.length);for(var r=0,n=new Array(t);re*i)return!1;var a=r();return e*(t-e*a/2-n)>=0&&e*(t+e*a/2-i)<=0}function LK(e,t){return tP(e,t+1)}function RK(e,t,r,n,i){for(var a=(n||[]).slice(),o=t.start,l=t.end,u=0,s=1,f=o,c=function(){var b=n==null?void 0:n[u];if(b===void 0)return{v:tP(n,s)};var m=u,y,v=function(){return y===void 0&&(y=r(b,m)),y},h=b.coordinate,x=u===0||Ds(e,h,v,f,l);x||(u=0,f=o,s+=1),x&&(f=h+e*(v()/2+i),u+=s)},d;s<=a.length;)if(d=c(),d)return d.v;return[]}function ul(e){"@babel/helpers - typeof";return ul=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ul(e)}function cx(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function tt(e){for(var t=1;t0?p.coordinate-y*e:p.coordinate})}else a[d]=p=tt(tt({},p),{},{tickCoord:p.coordinate});var v=Ds(e,p.tickCoord,m,l,u);v&&(u=p.tickCoord-e*(m()/2+i),a[d]=tt(tt({},p),{},{isShow:!0}))},f=o-1;f>=0;f--)s(f);return a}function WK(e,t,r,n,i,a){var o=(n||[]).slice(),l=o.length,u=t.start,s=t.end;if(a){var f=n[l-1],c=r(f,l-1),d=e*(f.coordinate+e*c/2-s);o[l-1]=f=tt(tt({},f),{},{tickCoord:d>0?f.coordinate-d*e:f.coordinate});var p=Ds(e,f.tickCoord,function(){return c},u,s);p&&(s=f.tickCoord-e*(c/2+i),o[l-1]=tt(tt({},f),{},{isShow:!0}))}for(var b=a?l-1:l,m=function(h){var x=o[h],S,g=function(){return S===void 0&&(S=r(x,h)),S};if(h===0){var w=e*(x.coordinate-e*g()/2-u);o[h]=x=tt(tt({},x),{},{tickCoord:w<0?x.coordinate-w*e:x.coordinate})}else o[h]=x=tt(tt({},x),{},{tickCoord:x.coordinate});var O=Ds(e,x.tickCoord,g,u,s);O&&(u=x.tickCoord+e*(g()/2+i),o[h]=tt(tt({},x),{},{isShow:!0}))},y=0;y=2?Jt(i[1].coordinate-i[0].coordinate):1,v=DK(a,y,p);return u==="equidistantPreserveStart"?RK(y,v,m,i,o):(u==="preserveStart"||u==="preserveStartEnd"?d=WK(y,v,m,i,o,u==="preserveStartEnd"):d=FK(y,v,m,i,o),d.filter(function(h){return h.isShow}))}var VK=["viewBox"],KK=["viewBox"],GK=["ticks"];function ra(e){"@babel/helpers - typeof";return ra=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ra(e)}function wi(){return wi=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function XK(e,t){if(e==null)return{};var r={};for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){if(t.indexOf(n)>=0)continue;r[n]=e[n]}return r}function qK(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function dx(e,t){for(var r=0;r0?u(this.props):u(p)),o<=0||l<=0||!b||!b.length?null:j.createElement(_e,{className:oe("recharts-cartesian-axis",s),ref:function(y){n.layerReference=y}},a&&this.renderAxisLine(),this.renderTicks(b,this.state.fontSize,this.state.letterSpacing),nt.renderCallByParent(this.props))}}],[{key:"renderTickItem",value:function(n,i,a){var o,l=oe(i.className,"recharts-cartesian-axis-tick-value");return j.isValidElement(n)?o=j.cloneElement(n,Re(Re({},i),{},{className:l})):J(n)?o=n(Re(Re({},i),{},{className:l})):o=j.createElement(is,wi({},i,{className:"recharts-cartesian-axis-tick-value"}),a),o}}])}(E.Component);mm(Hc,"displayName","CartesianAxis");mm(Hc,"defaultProps",{x:0,y:0,width:0,height:0,viewBox:{x:0,y:0,width:0,height:0},orientation:"bottom",ticks:[],stroke:"#666",tickLine:!0,axisLine:!0,tick:!0,mirror:!1,minTickGap:5,tickSize:6,tickMargin:2,interval:"preserveEnd"});var rG=["layout","type","stroke","connectNulls","isRange","ref"],nG=["key"],iP;function na(e){"@babel/helpers - typeof";return na=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},na(e)}function aP(e,t){if(e==null)return{};var r=iG(e,t),n,i;if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function iG(e,t){if(e==null)return{};var r={};for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){if(t.indexOf(n)>=0)continue;r[n]=e[n]}return r}function In(){return In=Object.assign?Object.assign.bind():function(e){for(var t=1;t0||!Uo(f,o)||!Uo(c,l))?this.renderAreaWithAnimation(n,i):this.renderAreaStatically(o,l,n,i)}},{key:"render",value:function(){var n,i=this.props,a=i.hide,o=i.dot,l=i.points,u=i.className,s=i.top,f=i.left,c=i.xAxis,d=i.yAxis,p=i.width,b=i.height,m=i.isAnimationActive,y=i.id;if(a||!l||!l.length)return null;var v=this.state.isAnimationFinished,h=l.length===1,x=oe("recharts-area",u),S=c&&c.allowDataOverflow,g=d&&d.allowDataOverflow,w=S||g,O=re(y)?this.id:y,P=(n=te(o,!1))!==null&&n!==void 0?n:{r:3,strokeWidth:2},A=P.r,T=A===void 0?3:A,$=P.strokeWidth,M=$===void 0?2:$,k=e2(o)?o:{},L=k.clipDot,C=L===void 0?!0:L,I=T*2+M;return j.createElement(_e,{className:x},S||g?j.createElement("defs",null,j.createElement("clipPath",{id:"clipPath-".concat(O)},j.createElement("rect",{x:S?f:f-p/2,y:g?s:s-b/2,width:S?p:p*2,height:g?b:b*2})),!C&&j.createElement("clipPath",{id:"clipPath-dots-".concat(O)},j.createElement("rect",{x:f-I/2,y:s-I/2,width:p+I,height:b+I}))):null,h?null:this.renderArea(w,O),(o||h)&&this.renderDots(w,C,O),(!m||v)&&un.renderCallByParent(this.props,l))}}],[{key:"getDerivedStateFromProps",value:function(n,i){return n.animationId!==i.prevAnimationId?{prevAnimationId:n.animationId,curPoints:n.points,curBaseLine:n.baseLine,prevPoints:i.curPoints,prevBaseLine:i.curBaseLine}:n.points!==i.curPoints||n.baseLine!==i.curBaseLine?{curPoints:n.points,curBaseLine:n.baseLine}:null}}])}(E.PureComponent);iP=bn;cr(bn,"displayName","Area");cr(bn,"defaultProps",{stroke:"#3182bd",fill:"#3182bd",fillOpacity:.6,xAxisId:0,yAxisId:0,legendType:"line",connectNulls:!1,points:[],dot:!1,activeDot:!0,hide:!1,isAnimationActive:!Sa.isSsr,animationBegin:0,animationDuration:1500,animationEasing:"ease"});cr(bn,"getBaseValue",function(e,t,r,n){var i=e.layout,a=e.baseValue,o=t.props.baseValue,l=o??a;if(H(l)&&typeof l=="number")return l;var u=i==="horizontal"?n:r,s=u.scale.domain();if(u.type==="number"){var f=Math.max(s[0],s[1]),c=Math.min(s[0],s[1]);return l==="dataMin"?c:l==="dataMax"||f<0?f:Math.max(Math.min(s[0],s[1]),0)}return l==="dataMin"?s[0]:l==="dataMax"?s[1]:s[0]});cr(bn,"getComposedData",function(e){var t=e.props,r=e.item,n=e.xAxis,i=e.yAxis,a=e.xAxisTicks,o=e.yAxisTicks,l=e.bandSize,u=e.dataKey,s=e.stackedData,f=e.dataStartIndex,c=e.displayedData,d=e.offset,p=t.layout,b=s&&s.length,m=iP.getBaseValue(t,r,n,i),y=p==="horizontal",v=!1,h=c.map(function(S,g){var w;b?w=s[f+g]:(w=At(S,u),Array.isArray(w)?v=!0:w=[m,w]);var O=w[1]==null||b&&At(S,u)==null;return y?{x:eb({axis:n,ticks:a,bandSize:l,entry:S,index:g}),y:O?null:i.scale(w[1]),value:w,payload:S}:{x:O?null:n.scale(w[1]),y:eb({axis:i,ticks:o,bandSize:l,entry:S,index:g}),value:w,payload:S}}),x;return b||v?x=h.map(function(S){var g=Array.isArray(S.value)?S.value[0]:null;return y?{x:S.x,y:g!=null&&S.y!=null?i.scale(g):null}:{x:g!=null?n.scale(g):null,y:S.y}}):x=y?i.scale(m):n.scale(m),Ur({points:h,baseLine:x,layout:p,isRange:v},d)});cr(bn,"renderDotItem",function(e,t){var r;if(j.isValidElement(e))r=j.cloneElement(e,t);else if(J(e))r=e(t);else{var n=oe("recharts-area-dot",typeof e!="boolean"?e.className:""),i=t.key,a=aP(t,nG);r=j.createElement(dm,In({},a,{key:i,className:n}))}return r});function ia(e){"@babel/helpers - typeof";return ia=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ia(e)}function dG(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function pG(e,t){for(var r=0;re.length)&&(t=e.length);for(var r=0,n=new Array(t);r=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function JG(e,t){if(e==null)return{};var r={};for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){if(t.indexOf(n)>=0)continue;r[n]=e[n]}return r}function eX(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function tX(e,t){for(var r=0;re.length)&&(t=e.length);for(var r=0,n=new Array(t);r0?o:t&&t.length&&H(i)&&H(a)?t.slice(i,a+1):[]};function wP(e){return e==="number"?[0,"auto"]:void 0}var vh=function(t,r,n,i){var a=t.graphicalItems,o=t.tooltipAxis,l=Gc(r,t);return n<0||!a||!a.length||n>=l.length?null:a.reduce(function(u,s){var f,c=(f=s.props.data)!==null&&f!==void 0?f:r;c&&t.dataStartIndex+t.dataEndIndex!==0&&t.dataEndIndex-t.dataStartIndex>=n&&(c=c.slice(t.dataStartIndex,t.dataEndIndex+1));var d;if(o.dataKey&&!o.allowDuplicatedCategory){var p=c===void 0?l:c;d=Fu(p,o.dataKey,i)}else d=c&&c[n]||l[n];return d?[].concat(la(u),[v_(s,d)]):u},[])},xx=function(t,r,n,i){var a=i||{x:t.chartX,y:t.chartY},o=pX(a,n),l=t.orderedTooltipTicks,u=t.tooltipAxis,s=t.tooltipTicks,f=a6(o,l,s,u);if(f>=0&&s){var c=s[f]&&s[f].value,d=vh(t,r,f,c),p=hX(n,l,f,a);return{activeTooltipIndex:f,activeLabel:c,activePayload:d,activeCoordinate:p}}return null},vX=function(t,r){var n=r.axes,i=r.graphicalItems,a=r.axisType,o=r.axisIdKey,l=r.stackGroups,u=r.dataStartIndex,s=r.dataEndIndex,f=t.layout,c=t.children,d=t.stackOffset,p=p_(f,a);return n.reduce(function(b,m){var y,v=m.type.defaultProps!==void 0?D(D({},m.type.defaultProps),m.props):m.props,h=v.type,x=v.dataKey,S=v.allowDataOverflow,g=v.allowDuplicatedCategory,w=v.scale,O=v.ticks,P=v.includeHidden,A=v[o];if(b[A])return b;var T=Gc(t.data,{graphicalItems:i.filter(function(W){var q,ne=o in W.props?W.props[o]:(q=W.type.defaultProps)===null||q===void 0?void 0:q[o];return ne===A}),dataStartIndex:u,dataEndIndex:s}),$=T.length,M,k,L;UG(v.domain,S,h)&&(M=Np(v.domain,null,S),p&&(h==="number"||w!=="auto")&&(L=oo(T,x,"category")));var C=wP(h);if(!M||M.length===0){var I,B=(I=v.domain)!==null&&I!==void 0?I:C;if(x){if(M=oo(T,x,h),h==="category"&&p){var N=Hk(M);g&&N?(k=M,M=$s(0,$)):g||(M=ib(B,M,m).reduce(function(W,q){return W.indexOf(q)>=0?W:[].concat(la(W),[q])},[]))}else if(h==="category")g?M=M.filter(function(W){return W!==""&&!re(W)}):M=ib(B,M,m).reduce(function(W,q){return W.indexOf(q)>=0||q===""||re(q)?W:[].concat(la(W),[q])},[]);else if(h==="number"){var R=c6(T,i.filter(function(W){var q,ne,xe=o in W.props?W.props[o]:(q=W.type.defaultProps)===null||q===void 0?void 0:q[o],Te="hide"in W.props?W.props.hide:(ne=W.type.defaultProps)===null||ne===void 0?void 0:ne.hide;return xe===A&&(P||!Te)}),x,a,f);R&&(M=R)}p&&(h==="number"||w!=="auto")&&(L=oo(T,x,"category"))}else p?M=$s(0,$):l&&l[A]&&l[A].hasStack&&h==="number"?M=d==="expand"?[0,1]:h_(l[A].stackGroups,u,s):M=d_(T,i.filter(function(W){var q=o in W.props?W.props[o]:W.type.defaultProps[o],ne="hide"in W.props?W.props.hide:W.type.defaultProps.hide;return q===A&&(P||!ne)}),h,f,!0);if(h==="number")M=dh(c,M,A,a,O),B&&(M=Np(B,M,S));else if(h==="category"&&B){var U=B,V=M.every(function(W){return U.indexOf(W)>=0});V&&(M=U)}}return D(D({},b),{},Y({},A,D(D({},v),{},{axisType:a,domain:M,categoricalDomain:L,duplicateDomain:k,originalDomain:(y=v.domain)!==null&&y!==void 0?y:C,isCategorical:p,layout:f})))},{})},mX=function(t,r){var n=r.graphicalItems,i=r.Axis,a=r.axisType,o=r.axisIdKey,l=r.stackGroups,u=r.dataStartIndex,s=r.dataEndIndex,f=t.layout,c=t.children,d=Gc(t.data,{graphicalItems:n,dataStartIndex:u,dataEndIndex:s}),p=d.length,b=p_(f,a),m=-1;return n.reduce(function(y,v){var h=v.type.defaultProps!==void 0?D(D({},v.type.defaultProps),v.props):v.props,x=h[o],S=wP("number");if(!y[x]){m++;var g;return b?g=$s(0,p):l&&l[x]&&l[x].hasStack?(g=h_(l[x].stackGroups,u,s),g=dh(c,g,x,a)):(g=Np(S,d_(d,n.filter(function(w){var O,P,A=o in w.props?w.props[o]:(O=w.type.defaultProps)===null||O===void 0?void 0:O[o],T="hide"in w.props?w.props.hide:(P=w.type.defaultProps)===null||P===void 0?void 0:P.hide;return A===x&&!T}),"number",f),i.defaultProps.allowDataOverflow),g=dh(c,g,x,a)),D(D({},y),{},Y({},x,D(D({axisType:a},i.defaultProps),{},{hide:!0,orientation:zt(fX,"".concat(a,".").concat(m%2),null),domain:g,originalDomain:S,isCategorical:b,layout:f})))}return y},{})},yX=function(t,r){var n=r.axisType,i=n===void 0?"xAxis":n,a=r.AxisComp,o=r.graphicalItems,l=r.stackGroups,u=r.dataStartIndex,s=r.dataEndIndex,f=t.children,c="".concat(i,"Id"),d=rr(f,a),p={};return d&&d.length?p=vX(t,{axes:d,graphicalItems:o,axisType:i,axisIdKey:c,stackGroups:l,dataStartIndex:u,dataEndIndex:s}):o&&o.length&&(p=mX(t,{Axis:a,graphicalItems:o,axisType:i,axisIdKey:c,stackGroups:l,dataStartIndex:u,dataEndIndex:s})),p},gX=function(t){var r=li(t),n=Nn(r,!1,!0);return{tooltipTicks:n,orderedTooltipTicks:Rv(n,function(i){return i.coordinate}),tooltipAxis:r,tooltipAxisBandSize:gs(r,n)}},wx=function(t){var r=t.children,n=t.defaultShowTooltip,i=wt(r,Qi),a=0,o=0;return t.data&&t.data.length!==0&&(o=t.data.length-1),i&&i.props&&(i.props.startIndex>=0&&(a=i.props.startIndex),i.props.endIndex>=0&&(o=i.props.endIndex)),{chartX:0,chartY:0,dataStartIndex:a,dataEndIndex:o,activeTooltipIndex:-1,isTooltipActive:!!n}},bX=function(t){return!t||!t.length?!1:t.some(function(r){var n=Pr(r&&r.type);return n&&n.indexOf("Bar")>=0})},Sx=function(t){return t==="horizontal"?{numericAxisName:"yAxis",cateAxisName:"xAxis"}:t==="vertical"?{numericAxisName:"xAxis",cateAxisName:"yAxis"}:t==="centric"?{numericAxisName:"radiusAxis",cateAxisName:"angleAxis"}:{numericAxisName:"angleAxis",cateAxisName:"radiusAxis"}},xX=function(t,r){var n=t.props,i=t.graphicalItems,a=t.xAxisMap,o=a===void 0?{}:a,l=t.yAxisMap,u=l===void 0?{}:l,s=n.width,f=n.height,c=n.children,d=n.margin||{},p=wt(c,Qi),b=wt(c,Ti),m=Object.keys(u).reduce(function(g,w){var O=u[w],P=O.orientation;return!O.mirror&&!O.hide?D(D({},g),{},Y({},P,g[P]+O.width)):g},{left:d.left||0,right:d.right||0}),y=Object.keys(o).reduce(function(g,w){var O=o[w],P=O.orientation;return!O.mirror&&!O.hide?D(D({},g),{},Y({},P,zt(g,"".concat(P))+O.height)):g},{top:d.top||0,bottom:d.bottom||0}),v=D(D({},y),m),h=v.bottom;p&&(v.bottom+=p.props.height||Qi.defaultProps.height),b&&r&&(v=u6(v,i,n,r));var x=s-v.left-v.right,S=f-v.top-v.bottom;return D(D({brushBottom:h},v),{},{width:Math.max(x,0),height:Math.max(S,0)})},wX=function(t,r){if(r==="xAxis")return t[r].width;if(r==="yAxis")return t[r].height},SX=function(t){var r=t.chartName,n=t.GraphicalChild,i=t.defaultTooltipEventType,a=i===void 0?"axis":i,o=t.validateTooltipEventTypes,l=o===void 0?["axis"]:o,u=t.axisComponents,s=t.legendContent,f=t.formatAxisMap,c=t.defaultProps,d=function(v,h){var x=h.graphicalItems,S=h.stackGroups,g=h.offset,w=h.updateId,O=h.dataStartIndex,P=h.dataEndIndex,A=v.barSize,T=v.layout,$=v.barGap,M=v.barCategoryGap,k=v.maxBarSize,L=Sx(T),C=L.numericAxisName,I=L.cateAxisName,B=bX(x),N=[];return x.forEach(function(R,U){var V=Gc(v.data,{graphicalItems:[R],dataStartIndex:O,dataEndIndex:P}),W=R.type.defaultProps!==void 0?D(D({},R.type.defaultProps),R.props):R.props,q=W.dataKey,ne=W.maxBarSize,xe=W["".concat(C,"Id")],Te=W["".concat(I,"Id")],Tt={},ct=u.reduce(function(xn,wn){var Xc=h["".concat(wn.axisType,"Map")],ym=W["".concat(wn.axisType,"Id")];Xc&&Xc[ym]||wn.axisType==="zAxis"||Yn();var gm=Xc[ym];return D(D({},xn),{},Y(Y({},wn.axisType,gm),"".concat(wn.axisType,"Ticks"),Nn(gm)))},Tt),K=ct[I],Q=ct["".concat(I,"Ticks")],Z=S&&S[xe]&&S[xe].hasStack&&S6(R,S[xe].stackGroups),z=Pr(R.type).indexOf("Bar")>=0,Ee=gs(K,Q),ie=[],De=B&&o6({barSize:A,stackGroups:S,totalSize:wX(ct,I)});if(z){var Le,ft,Br=re(ne)?k:ne,ni=(Le=(ft=gs(K,Q,!0))!==null&&ft!==void 0?ft:Br)!==null&&Le!==void 0?Le:0;ie=l6({barGap:$,barCategoryGap:M,bandSize:ni!==Ee?ni:Ee,sizeList:De[Te],maxBarSize:Br}),ni!==Ee&&(ie=ie.map(function(xn){return D(D({},xn),{},{position:D(D({},xn.position),{},{offset:xn.position.offset-ni/2})})}))}var Al=R&&R.type&&R.type.getComposedData;Al&&N.push({props:D(D({},Al(D(D({},ct),{},{displayedData:V,props:v,dataKey:q,item:R,bandSize:Ee,barPosition:ie,offset:g,stackedData:Z,layout:T,dataStartIndex:O,dataEndIndex:P}))),{},Y(Y(Y({key:R.key||"item-".concat(U)},C,ct[C]),I,ct[I]),"animationId",w)),childIndex:n2(R,v.children),item:R})}),N},p=function(v,h){var x=v.props,S=v.dataStartIndex,g=v.dataEndIndex,w=v.updateId;if(!Qy({props:x}))return null;var O=x.children,P=x.layout,A=x.stackOffset,T=x.data,$=x.reverseStackOrder,M=Sx(P),k=M.numericAxisName,L=M.cateAxisName,C=rr(O,n),I=b6(T,C,"".concat(k,"Id"),"".concat(L,"Id"),A,$),B=u.reduce(function(W,q){var ne="".concat(q.axisType,"Map");return D(D({},W),{},Y({},ne,yX(x,D(D({},q),{},{graphicalItems:C,stackGroups:q.axisType===k&&I,dataStartIndex:S,dataEndIndex:g}))))},{}),N=xX(D(D({},B),{},{props:x,graphicalItems:C}),h==null?void 0:h.legendBBox);Object.keys(B).forEach(function(W){B[W]=f(x,B[W],N,W.replace("Map",""),r)});var R=B["".concat(L,"Map")],U=gX(R),V=d(x,D(D({},B),{},{dataStartIndex:S,dataEndIndex:g,updateId:w,graphicalItems:C,stackGroups:I,offset:N}));return D(D({formattedGraphicalItems:V,graphicalItems:C,offset:N,stackGroups:I},U),B)},b=function(y){function v(h){var x,S,g;return eX(this,v),g=nX(this,v,[h]),Y(g,"eventEmitterSymbol",Symbol("rechartsEventEmitter")),Y(g,"accessibilityManager",new zG),Y(g,"handleLegendBBoxUpdate",function(w){if(w){var O=g.state,P=O.dataStartIndex,A=O.dataEndIndex,T=O.updateId;g.setState(D({legendBBox:w},p({props:g.props,dataStartIndex:P,dataEndIndex:A,updateId:T},D(D({},g.state),{},{legendBBox:w}))))}}),Y(g,"handleReceiveSyncEvent",function(w,O,P){if(g.props.syncId===w){if(P===g.eventEmitterSymbol&&typeof g.props.syncMethod!="function")return;g.applySyncEvent(O)}}),Y(g,"handleBrushChange",function(w){var O=w.startIndex,P=w.endIndex;if(O!==g.state.dataStartIndex||P!==g.state.dataEndIndex){var A=g.state.updateId;g.setState(function(){return D({dataStartIndex:O,dataEndIndex:P},p({props:g.props,dataStartIndex:O,dataEndIndex:P,updateId:A},g.state))}),g.triggerSyncEvent({dataStartIndex:O,dataEndIndex:P})}}),Y(g,"handleMouseEnter",function(w){var O=g.getMouseInfo(w);if(O){var P=D(D({},O),{},{isTooltipActive:!0});g.setState(P),g.triggerSyncEvent(P);var A=g.props.onMouseEnter;J(A)&&A(P,w)}}),Y(g,"triggeredAfterMouseMove",function(w){var O=g.getMouseInfo(w),P=O?D(D({},O),{},{isTooltipActive:!0}):{isTooltipActive:!1};g.setState(P),g.triggerSyncEvent(P);var A=g.props.onMouseMove;J(A)&&A(P,w)}),Y(g,"handleItemMouseEnter",function(w){g.setState(function(){return{isTooltipActive:!0,activeItem:w,activePayload:w.tooltipPayload,activeCoordinate:w.tooltipPosition||{x:w.cx,y:w.cy}}})}),Y(g,"handleItemMouseLeave",function(){g.setState(function(){return{isTooltipActive:!1}})}),Y(g,"handleMouseMove",function(w){w.persist(),g.throttleTriggeredAfterMouseMove(w)}),Y(g,"handleMouseLeave",function(w){g.throttleTriggeredAfterMouseMove.cancel();var O={isTooltipActive:!1};g.setState(O),g.triggerSyncEvent(O);var P=g.props.onMouseLeave;J(P)&&P(O,w)}),Y(g,"handleOuterEvent",function(w){var O=r2(w),P=zt(g.props,"".concat(O));if(O&&J(P)){var A,T;/.*touch.*/i.test(O)?T=g.getMouseInfo(w.changedTouches[0]):T=g.getMouseInfo(w),P((A=T)!==null&&A!==void 0?A:{},w)}}),Y(g,"handleClick",function(w){var O=g.getMouseInfo(w);if(O){var P=D(D({},O),{},{isTooltipActive:!0});g.setState(P),g.triggerSyncEvent(P);var A=g.props.onClick;J(A)&&A(P,w)}}),Y(g,"handleMouseDown",function(w){var O=g.props.onMouseDown;if(J(O)){var P=g.getMouseInfo(w);O(P,w)}}),Y(g,"handleMouseUp",function(w){var O=g.props.onMouseUp;if(J(O)){var P=g.getMouseInfo(w);O(P,w)}}),Y(g,"handleTouchMove",function(w){w.changedTouches!=null&&w.changedTouches.length>0&&g.throttleTriggeredAfterMouseMove(w.changedTouches[0])}),Y(g,"handleTouchStart",function(w){w.changedTouches!=null&&w.changedTouches.length>0&&g.handleMouseDown(w.changedTouches[0])}),Y(g,"handleTouchEnd",function(w){w.changedTouches!=null&&w.changedTouches.length>0&&g.handleMouseUp(w.changedTouches[0])}),Y(g,"handleDoubleClick",function(w){var O=g.props.onDoubleClick;if(J(O)){var P=g.getMouseInfo(w);O(P,w)}}),Y(g,"handleContextMenu",function(w){var O=g.props.onContextMenu;if(J(O)){var P=g.getMouseInfo(w);O(P,w)}}),Y(g,"triggerSyncEvent",function(w){g.props.syncId!==void 0&&qf.emit(Yf,g.props.syncId,w,g.eventEmitterSymbol)}),Y(g,"applySyncEvent",function(w){var O=g.props,P=O.layout,A=O.syncMethod,T=g.state.updateId,$=w.dataStartIndex,M=w.dataEndIndex;if(w.dataStartIndex!==void 0||w.dataEndIndex!==void 0)g.setState(D({dataStartIndex:$,dataEndIndex:M},p({props:g.props,dataStartIndex:$,dataEndIndex:M,updateId:T},g.state)));else if(w.activeTooltipIndex!==void 0){var k=w.chartX,L=w.chartY,C=w.activeTooltipIndex,I=g.state,B=I.offset,N=I.tooltipTicks;if(!B)return;if(typeof A=="function")C=A(N,w);else if(A==="value"){C=-1;for(var R=0;R=0){var Z,z;if(k.dataKey&&!k.allowDuplicatedCategory){var Ee=typeof k.dataKey=="function"?Q:"payload.".concat(k.dataKey.toString());Z=Fu(R,Ee,C),z=U&&V&&Fu(V,Ee,C)}else Z=R==null?void 0:R[L],z=U&&V&&V[L];if(Te||xe){var ie=w.props.activeIndex!==void 0?w.props.activeIndex:L;return[E.cloneElement(w,D(D(D({},A.props),ct),{},{activeIndex:ie})),null,null]}if(!re(Z))return[K].concat(la(g.renderActivePoints({item:A,activePoint:Z,basePoint:z,childIndex:L,isRange:U})))}else{var De,Le=(De=g.getItemByXY(g.state.activeCoordinate))!==null&&De!==void 0?De:{graphicalItem:K},ft=Le.graphicalItem,Br=ft.item,ni=Br===void 0?w:Br,Al=ft.childIndex,xn=D(D(D({},A.props),ct),{},{activeIndex:Al});return[E.cloneElement(ni,xn),null,null]}return U?[K,null,null]:[K,null]}),Y(g,"renderCustomized",function(w,O,P){return E.cloneElement(w,D(D({key:"recharts-customized-".concat(P)},g.props),g.state))}),Y(g,"renderMap",{CartesianGrid:{handler:iu,once:!0},ReferenceArea:{handler:g.renderReferenceElement},ReferenceLine:{handler:iu},ReferenceDot:{handler:g.renderReferenceElement},XAxis:{handler:iu},YAxis:{handler:iu},Brush:{handler:g.renderBrush,once:!0},Bar:{handler:g.renderGraphicChild},Line:{handler:g.renderGraphicChild},Area:{handler:g.renderGraphicChild},Radar:{handler:g.renderGraphicChild},RadialBar:{handler:g.renderGraphicChild},Scatter:{handler:g.renderGraphicChild},Pie:{handler:g.renderGraphicChild},Funnel:{handler:g.renderGraphicChild},Tooltip:{handler:g.renderCursor,once:!0},PolarGrid:{handler:g.renderPolarGrid,once:!0},PolarAngleAxis:{handler:g.renderPolarAxis},PolarRadiusAxis:{handler:g.renderPolarAxis},Customized:{handler:g.renderCustomized}}),g.clipPathId="".concat((x=h.id)!==null&&x!==void 0?x:xl("recharts"),"-clip"),g.throttleTriggeredAfterMouseMove=sO(g.triggeredAfterMouseMove,(S=h.throttleDelay)!==null&&S!==void 0?S:1e3/60),g.state={},g}return oX(v,y),rX(v,[{key:"componentDidMount",value:function(){var x,S;this.addListener(),this.accessibilityManager.setDetails({container:this.container,offset:{left:(x=this.props.margin.left)!==null&&x!==void 0?x:0,top:(S=this.props.margin.top)!==null&&S!==void 0?S:0},coordinateList:this.state.tooltipTicks,mouseHandlerCallback:this.triggeredAfterMouseMove,layout:this.props.layout}),this.displayDefaultTooltip()}},{key:"displayDefaultTooltip",value:function(){var x=this.props,S=x.children,g=x.data,w=x.height,O=x.layout,P=wt(S,lr);if(P){var A=P.props.defaultIndex;if(!(typeof A!="number"||A<0||A>this.state.tooltipTicks.length-1)){var T=this.state.tooltipTicks[A]&&this.state.tooltipTicks[A].value,$=vh(this.state,g,A,T),M=this.state.tooltipTicks[A].coordinate,k=(this.state.offset.top+w)/2,L=O==="horizontal",C=L?{x:M,y:k}:{y:M,x:k},I=this.state.formattedGraphicalItems.find(function(N){var R=N.item;return R.type.name==="Scatter"});I&&(C=D(D({},C),I.props.points[A].tooltipPosition),$=I.props.points[A].tooltipPayload);var B={activeTooltipIndex:A,isTooltipActive:!0,activeLabel:T,activePayload:$,activeCoordinate:C};this.setState(B),this.renderCursor(P),this.accessibilityManager.setIndex(A)}}}},{key:"getSnapshotBeforeUpdate",value:function(x,S){if(!this.props.accessibilityLayer)return null;if(this.state.tooltipTicks!==S.tooltipTicks&&this.accessibilityManager.setDetails({coordinateList:this.state.tooltipTicks}),this.props.layout!==x.layout&&this.accessibilityManager.setDetails({layout:this.props.layout}),this.props.margin!==x.margin){var g,w;this.accessibilityManager.setDetails({offset:{left:(g=this.props.margin.left)!==null&&g!==void 0?g:0,top:(w=this.props.margin.top)!==null&&w!==void 0?w:0}})}return null}},{key:"componentDidUpdate",value:function(x){qd([wt(x.children,lr)],[wt(this.props.children,lr)])||this.displayDefaultTooltip()}},{key:"componentWillUnmount",value:function(){this.removeListener(),this.throttleTriggeredAfterMouseMove.cancel()}},{key:"getTooltipEventType",value:function(){var x=wt(this.props.children,lr);if(x&&typeof x.props.shared=="boolean"){var S=x.props.shared?"axis":"item";return l.indexOf(S)>=0?S:a}return a}},{key:"getMouseInfo",value:function(x){if(!this.container)return null;var S=this.container,g=S.getBoundingClientRect(),w=Cz(g),O={chartX:Math.round(x.pageX-w.left),chartY:Math.round(x.pageY-w.top)},P=g.width/S.offsetWidth||1,A=this.inRange(O.chartX,O.chartY,P);if(!A)return null;var T=this.state,$=T.xAxisMap,M=T.yAxisMap,k=this.getTooltipEventType(),L=xx(this.state,this.props.data,this.props.layout,A);if(k!=="axis"&&$&&M){var C=li($).scale,I=li(M).scale,B=C&&C.invert?C.invert(O.chartX):null,N=I&&I.invert?I.invert(O.chartY):null;return D(D({},O),{},{xValue:B,yValue:N},L)}return L?D(D({},O),L):null}},{key:"inRange",value:function(x,S){var g=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1,w=this.props.layout,O=x/g,P=S/g;if(w==="horizontal"||w==="vertical"){var A=this.state.offset,T=O>=A.left&&O<=A.left+A.width&&P>=A.top&&P<=A.top+A.height;return T?{x:O,y:P}:null}var $=this.state,M=$.angleAxisMap,k=$.radiusAxisMap;if(M&&k){var L=li(M);return lb({x:O,y:P},L)}return null}},{key:"parseEventsOfWrapper",value:function(){var x=this.props.children,S=this.getTooltipEventType(),g=wt(x,lr),w={};g&&S==="axis"&&(g.props.trigger==="click"?w={onClick:this.handleClick}:w={onMouseEnter:this.handleMouseEnter,onDoubleClick:this.handleDoubleClick,onMouseMove:this.handleMouseMove,onMouseLeave:this.handleMouseLeave,onTouchMove:this.handleTouchMove,onTouchStart:this.handleTouchStart,onTouchEnd:this.handleTouchEnd,onContextMenu:this.handleContextMenu});var O=Wu(this.props,this.handleOuterEvent);return D(D({},O),w)}},{key:"addListener",value:function(){qf.on(Yf,this.handleReceiveSyncEvent)}},{key:"removeListener",value:function(){qf.removeListener(Yf,this.handleReceiveSyncEvent)}},{key:"filterFormatItem",value:function(x,S,g){for(var w=this.state.formattedGraphicalItems,O=0,P=w.length;O{const m=async()=>{try{const v=await J$(n,e,u);a(v)}catch(v){console.error("Failed to fetch metrics:",v)}finally{l(!1)}};m();const y=setInterval(m,6e4);return()=>clearInterval(y)},[n,e,u]);const f=m=>new Date(m).toLocaleTimeString("de-DE",{hour:"2-digit",minute:"2-digit"}),c=m=>m<1024?m.toFixed(0)+" B/s":m<1024*1024?(m/1024).toFixed(1)+" KB/s":(m/1024/1024).toFixed(1)+" MB/s";if(o)return _.jsx("div",{className:"card p-4",children:_.jsx("div",{className:"h-20 flex items-center justify-center",children:_.jsx("span",{className:"text-neutral-500 text-sm",children:"Loading metrics..."})})});if(!i||i.cpu.length===0)return _.jsx("div",{className:"card p-4",children:_.jsx("div",{className:"h-20 flex items-center justify-center",children:_.jsx("span",{className:"text-neutral-500 text-sm",children:"No data available"})})});const d=i.cpu.map((m,y)=>{var v,h,x;return{timestamp:m.timestamp,cpu:m.value,memory:((v=i.memory[y])==null?void 0:v.value)||0,networkRx:((h=i.networkRx[y])==null?void 0:h.value)||0,networkTx:((x=i.networkTx[y])==null?void 0:x.value)||0}}),p=({active:m,payload:y,label:v})=>m&&y&&y.length?_.jsxs("div",{className:"bg-neutral-900 border border-neutral-700 rounded-md p-3 text-xs shadow-lg",children:[_.jsx("div",{className:"text-neutral-400 mb-2",children:f(v)}),y.map((h,x)=>_.jsxs("div",{className:"flex justify-between gap-4",style:{color:h.color},children:[_.jsxs("span",{children:[h.name,":"]}),_.jsx("span",{className:"font-semibold",children:h.name.includes("Network")?c(h.value):h.value.toFixed(1)+"%"})]},x))]}):null,b=({title:m,dataKey:y,color:v,domain:h,formatter:x})=>{var S,g;return _.jsxs("div",{className:"card p-4",children:[_.jsxs("div",{className:"flex justify-between items-center mb-3",children:[_.jsx("span",{className:"text-neutral-400 text-xs uppercase tracking-wide",children:m}),_.jsx("span",{className:"text-white text-sm font-semibold",children:x?x(((S=d[d.length-1])==null?void 0:S[y])||0):(((g=d[d.length-1])==null?void 0:g[y])||0).toFixed(1)+"%"})]}),_.jsx(_z,{width:"100%",height:r?150:80,children:_.jsxs(OX,{data:d,children:[_.jsx("defs",{children:_.jsxs("linearGradient",{id:`gradient-${y}`,x1:"0",y1:"0",x2:"0",y2:"1",children:[_.jsx("stop",{offset:"5%",stopColor:v,stopOpacity:.3}),_.jsx("stop",{offset:"95%",stopColor:v,stopOpacity:.05})]})}),r&&_.jsxs(_.Fragment,{children:[_.jsx(Vc,{dataKey:"timestamp",tickFormatter:f,tick:{fill:"#737373",fontSize:10},axisLine:{stroke:"#404040"},tickLine:!1,minTickGap:50}),_.jsx(Kc,{domain:h||[0,"auto"],tick:{fill:"#737373",fontSize:10},axisLine:{stroke:"#404040"},tickLine:!1,width:40,tickFormatter:x?w=>c(w).split(" ")[0]:w=>w.toFixed(0)}),_.jsx(lr,{content:_.jsx(p,{})})]}),_.jsx(bn,{type:"monotone",dataKey:y,name:m,stroke:v,strokeWidth:2,fill:`url(#gradient-${y})`,isAnimationActive:!0,animationDuration:500})]})})]})};return _.jsxs("div",{className:"space-y-4",children:[_.jsxs("div",{className:"flex items-center justify-between",children:[_.jsx("span",{className:"text-neutral-400 text-sm",children:"Metrics History"}),_.jsxs("div",{className:"flex items-center gap-3",children:[_.jsxs("select",{value:u,onChange:m=>s(m.target.value),className:"select",children:[_.jsx("option",{value:"15m",children:"15 min"}),_.jsx("option",{value:"1h",children:"1 hour"}),_.jsx("option",{value:"6h",children:"6 hours"}),_.jsx("option",{value:"24h",children:"24 hours"})]}),_.jsx("a",{href:`${_X}/d/rYdddlPWk/node-exporter-full?var-job=${e}`,target:"_blank",rel:"noopener noreferrer",className:"btn btn-secondary text-sm",children:"Grafana"})]})]}),r?_.jsxs("div",{className:"space-y-4",children:[_.jsx(b,{title:"CPU Usage",dataKey:"cpu",color:"#22c55e",domain:[0,100]}),_.jsx(b,{title:"Memory Usage",dataKey:"memory",color:"#3b82f6",domain:[0,100]}),_.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[_.jsx(b,{title:"Network RX",dataKey:"networkRx",color:"#a855f7",formatter:c}),_.jsx(b,{title:"Network TX",dataKey:"networkTx",color:"#eab308",formatter:c})]})]}):_.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[_.jsx(b,{title:"CPU",dataKey:"cpu",color:"#22c55e",domain:[0,100]}),_.jsx(b,{title:"Memory",dataKey:"memory",color:"#3b82f6",domain:[0,100]})]})]})}function AX(){var $,M,k,L;const{serverId:e}=P$(),t=pv(),{token:r,isModerator:n}=gl(),[i,a]=E.useState(null),[o,l]=E.useState(!0),[u,s]=E.useState(!1),[f,c]=E.useState("overview"),[d,p]=E.useState(""),[b,m]=E.useState([]),[y,v]=E.useState(""),h=E.useRef(null),x=E.useRef(null),S=async()=>{try{const I=(await Gw(r)).find(B=>B.id===e);I?(a(I),document.title=I.name+" | Zeasy GSM"):t("/")}catch(C){console.error(C),t("/")}finally{l(!1)}};E.useEffect(()=>{S();const C=setInterval(S,1e4);return()=>clearInterval(C)},[r,e]);const g=async C=>{s(!0);try{await Y$(r,i.id,C),setTimeout(()=>{S(),s(!1)},2e3)}catch(I){console.error(I),s(!1)}},w=async C=>{if(C.preventDefault(),!d.trim())return;const I=d;p("");try{const{response:B}=await Q$(r,i.id,I);m([...b,{cmd:I,res:B,time:new Date}])}catch(B){m([...b,{cmd:I,res:"Error: "+B.message,time:new Date,error:!0}])}},O=async()=>{try{const C=await Z$(r,i.id,20);v(C.logs||""),h.current&&(h.current.scrollTop=h.current.scrollHeight)}catch(C){console.error(C)}};E.useEffect(()=>{if(f==="console"&&n&&i){O();const C=setInterval(O,5e3);return()=>clearInterval(C)}},[f,n,i]),E.useEffect(()=>{x.current&&(x.current.scrollTop=x.current.scrollHeight)},[b]);const P=C=>{const I=Math.floor(C/86400),B=Math.floor(C%86400/3600),N=Math.floor(C%3600/60);return I>0?I+"d "+B+"h "+N+"m":B+"h "+N+"m"},A=[{id:"overview",label:"Overview"},{id:"metrics",label:"Metrics"},...n?[{id:"console",label:"Console"}]:[]];if(o)return _.jsx("div",{className:"min-h-screen flex items-center justify-center",children:_.jsx("div",{className:"text-neutral-400",children:"Loading..."})});if(!i)return _.jsx("div",{className:"min-h-screen flex items-center justify-center",children:_.jsx("div",{className:"text-neutral-400",children:"Server not found"})});const T=Math.min(i.metrics.cpu,100);return Math.min(i.metrics.memory,100),_.jsxs("div",{className:"min-h-screen page-enter",children:[_.jsx("header",{className:"border-b border-neutral-800 bg-neutral-900/50 backdrop-blur-sm sticky top-0 z-10",children:_.jsxs("div",{className:"container-main py-4",children:[_.jsxs("div",{className:"flex items-center gap-4",children:[_.jsx("button",{onClick:()=>t("/"),className:"btn btn-ghost",children:"Back"}),_.jsxs("div",{className:"flex-1",children:[_.jsxs("div",{className:"flex items-center gap-3",children:[_.jsx("h1",{className:"text-xl font-semibold text-white",children:i.name}),_.jsx("span",{className:i.running?"badge badge-success":"badge badge-destructive",children:i.running?"Online":"Offline"})]}),i.running&&_.jsxs("p",{className:"text-sm text-neutral-400 mt-1",children:["Uptime: ",P(i.metrics.uptime)]})]})]}),_.jsx("div",{className:"tabs mt-4",children:A.map(C=>_.jsx("button",{onClick:()=>c(C.id),className:"tab "+(f===C.id?"tab-active":""),children:C.label},C.id))})]})}),_.jsxs("main",{className:"container-main py-6",children:[f==="overview"&&_.jsxs("div",{className:"space-y-6 tab-content",children:[_.jsxs("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-4",children:[_.jsxs("div",{className:"card p-4",children:[_.jsx("div",{className:"text-sm text-neutral-400",children:"CPU Usage"}),_.jsxs("div",{className:"text-2xl font-semibold text-white mt-1",children:[i.metrics.cpu.toFixed(1),"%"]}),_.jsx("div",{className:"progress mt-2",children:_.jsx("div",{className:"progress-bar",style:{width:T+"%"}})})]}),_.jsxs("div",{className:"card p-4",children:[_.jsx("div",{className:"text-sm text-neutral-400",children:"Memory"}),_.jsxs("div",{className:"text-2xl font-semibold text-white mt-1",children:[($=i.metrics.memoryUsed)==null?void 0:$.toFixed(1)," ",i.metrics.memoryUnit]}),_.jsxs("div",{className:"text-xs text-neutral-500 mt-1",children:["of ",(M=i.metrics.memoryTotal)==null?void 0:M.toFixed(1)," ",i.metrics.memoryUnit]})]}),_.jsxs("div",{className:"card p-4",children:[_.jsx("div",{className:"text-sm text-neutral-400",children:"Players"}),_.jsx("div",{className:"text-2xl font-semibold text-white mt-1",children:i.players.online}),_.jsx("div",{className:"text-xs text-neutral-500 mt-1",children:i.players.max?"of "+i.players.max+" max":"No limit"})]}),_.jsxs("div",{className:"card p-4",children:[_.jsx("div",{className:"text-sm text-neutral-400",children:"CPU Cores"}),_.jsx("div",{className:"text-2xl font-semibold text-white mt-1",children:i.metrics.cpuCores})]})]}),((L=(k=i.players)==null?void 0:k.list)==null?void 0:L.length)>0&&_.jsxs("div",{className:"card p-4",children:[_.jsx("h3",{className:"text-sm font-medium text-neutral-300 mb-3",children:"Online Players"}),_.jsx("div",{className:"flex flex-wrap gap-2",children:i.players.list.map((C,I)=>_.jsx("span",{className:"badge badge-secondary",children:C},I))})]}),n&&_.jsxs("div",{className:"card p-4",children:[_.jsx("h3",{className:"text-sm font-medium text-neutral-300 mb-3",children:"Server Controls"}),_.jsx("div",{className:"flex flex-wrap gap-3",children:i.running?_.jsxs(_.Fragment,{children:[_.jsx("button",{onClick:()=>g("stop"),disabled:u,className:"btn btn-destructive",children:u?"Processing...":"Stop Server"}),_.jsx("button",{onClick:()=>g("restart"),disabled:u,className:"btn btn-secondary",children:u?"Processing...":"Restart Server"})]}):_.jsx("button",{onClick:()=>g("start"),disabled:u,className:"btn btn-primary",children:u?"Processing...":"Start Server"})})]})]}),f==="metrics"&&_.jsx("div",{className:"tab-content",children:_.jsx(PX,{serverId:i.id,serverName:i.name,expanded:!0})}),f==="console"&&n&&_.jsxs("div",{className:"space-y-4 tab-content",children:[_.jsxs("div",{className:"flex justify-between items-center",children:[_.jsx("span",{className:"text-sm text-neutral-400",children:"Server Logs (last 20 lines)"}),_.jsx("button",{onClick:O,className:"btn btn-secondary",children:"Refresh"})]}),_.jsx("div",{ref:h,className:"terminal p-4 logs-container text-xs text-neutral-300 whitespace-pre-wrap",children:y||"Loading..."}),b.length>0&&_.jsxs("div",{ref:x,className:"terminal p-4 max-h-40 overflow-y-auto",children:[_.jsx("div",{className:"text-neutral-500 text-xs mb-2",children:"RCON History"}),b.map((C,I)=>_.jsxs("div",{className:"mb-2 text-sm",children:[_.jsxs("div",{className:"text-neutral-400",children:[_.jsxs("span",{className:"text-neutral-600",children:["[",C.time.toLocaleTimeString("de-DE"),"]"]})," > ",C.cmd]}),_.jsx("div",{className:"whitespace-pre-wrap pl-4 "+(C.error?"text-red-400":"text-neutral-300"),children:C.res})]},I))]}),i.hasRcon&&_.jsxs("form",{onSubmit:w,className:"flex gap-2",children:[_.jsx("input",{type:"text",value:d,onChange:C=>p(C.target.value),placeholder:"RCON command...",className:"input flex-1"}),_.jsx("button",{type:"submit",className:"btn btn-primary",children:"Send"})]})]})]})]})}function EX(){const[e,t]=E.useState(localStorage.getItem("gsm_token")),r=i=>{localStorage.setItem("gsm_token",i),t(i)},n=()=>{localStorage.removeItem("gsm_token"),t(null)};return e?_.jsx(aj,{token:e,children:_.jsx(V$,{children:_.jsxs(F$,{children:[_.jsx(yu,{path:"/",element:_.jsx(fj,{onLogout:n})}),_.jsx(yu,{path:"/server/:serverId",element:_.jsx(AX,{})}),_.jsx(yu,{path:"*",element:_.jsx(z$,{to:"/",replace:!0})})]})})}):_.jsx(oj,{onLogin:r})}Zf.createRoot(document.getElementById("root")).render(_.jsx(j.StrictMode,{children:_.jsx(EX,{})})); diff --git a/gsm-frontend/assets/index-pyCQ9v8N.css b/gsm-frontend/assets/index-pyCQ9v8N.css new file mode 100644 index 0000000..ed7e816 --- /dev/null +++ b/gsm-frontend/assets/index-pyCQ9v8N.css @@ -0,0 +1 @@ +*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.sticky{position:sticky}.top-0{top:0}.z-10{z-index:10}.mx-auto{margin-left:auto;margin-right:auto}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.mr-2{margin-right:.5rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.flex{display:flex}.grid{display:grid}.hidden{display:none}.h-20{height:5rem}.h-8{height:2rem}.h-96{height:24rem}.max-h-40{max-height:10rem}.min-h-screen{min-height:100vh}.w-full{width:100%}.max-w-sm{max-width:24rem}.flex-1{flex:1 1 0%}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.overflow-y-auto{overflow-y:auto}.whitespace-pre-wrap{white-space:pre-wrap}.rounded{border-radius:.25rem}.rounded-md{border-radius:.375rem}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-t{border-top-width:1px}.border-neutral-700{--tw-border-opacity: 1;border-color:rgb(64 64 64 / var(--tw-border-opacity, 1))}.border-neutral-800{--tw-border-opacity: 1;border-color:rgb(38 38 38 / var(--tw-border-opacity, 1))}.bg-neutral-800{--tw-bg-opacity: 1;background-color:rgb(38 38 38 / var(--tw-bg-opacity, 1))}.bg-neutral-900{--tw-bg-opacity: 1;background-color:rgb(23 23 23 / var(--tw-bg-opacity, 1))}.bg-neutral-900\/50{background-color:#17171780}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.px-2{padding-left:.5rem;padding-right:.5rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.pl-4{padding-left:1rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.text-center{text-align:center}.text-right{text-align:right}.text-2xl{font-size:1.5rem;line-height:2rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-medium{font-weight:500}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.tracking-wide{letter-spacing:.025em}.text-blue-400{--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.text-neutral-300{--tw-text-opacity: 1;color:rgb(212 212 212 / var(--tw-text-opacity, 1))}.text-neutral-400{--tw-text-opacity: 1;color:rgb(163 163 163 / var(--tw-text-opacity, 1))}.text-neutral-500{--tw-text-opacity: 1;color:rgb(115 115 115 / var(--tw-text-opacity, 1))}.text-neutral-600{--tw-text-opacity: 1;color:rgb(82 82 82 / var(--tw-text-opacity, 1))}.text-red-400{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur-sm{--tw-backdrop-blur: blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}*{scrollbar-width:thin;scrollbar-color:#404040 #171717}*::-webkit-scrollbar{width:8px}*::-webkit-scrollbar-track{background:#171717}*::-webkit-scrollbar-thumb{background:#404040;border-radius:4px}*::-webkit-scrollbar-thumb:hover{background:#525252}body{background-color:#0a0a0a;color:#fafafa;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}button{background:transparent}.btn{display:inline-flex;align-items:center;justify-content:center;gap:.5rem;border-radius:.375rem;font-size:.875rem;font-weight:500;padding:.5rem 1rem;transition:all .15s ease;cursor:pointer;border:none}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary{background-color:#fafafa;color:#0a0a0a}.btn-primary:hover:not(:disabled){background-color:#e5e5e5}.btn-secondary{background-color:#262626;color:#fafafa}.btn-secondary:hover:not(:disabled){background-color:#363636}.btn-destructive{background-color:#dc2626;color:#fafafa}.btn-destructive:hover:not(:disabled){background-color:#b91c1c}.btn-outline{background:transparent;border:1px solid #404040;color:#fafafa}.btn-outline:hover:not(:disabled){background-color:#262626;border-color:#525252}.btn-ghost{background:transparent;color:#a3a3a3}.btn-ghost:hover:not(:disabled){background-color:#262626;color:#fafafa}.card{background-color:#171717;border:1px solid #262626;border-radius:.5rem}.card-clickable{cursor:pointer;transition:all .15s ease}.card-clickable:hover{background-color:#1c1c1c;border-color:#404040}.input{display:flex;width:100%;border-radius:.375rem;border:1px solid #404040;background-color:#171717;color:#fafafa;padding:.625rem .875rem;font-size:.875rem;transition:border-color .15s ease,box-shadow .15s ease}.input:focus{outline:none;border-color:#737373;box-shadow:0 0 0 2px #73737333}.input::-moz-placeholder{color:#737373}.input::placeholder{color:#737373}.select{display:flex;border-radius:.375rem;border:1px solid #404040;background-color:#171717;color:#fafafa;padding:.5rem .75rem;font-size:.875rem;cursor:pointer;transition:border-color .15s ease}.select:focus{outline:none;border-color:#737373}.select option{background-color:#171717;color:#fafafa}.badge{display:inline-flex;align-items:center;border-radius:9999px;padding:.25rem .75rem;font-size:.75rem;font-weight:500}.badge-success{background-color:#14532d;color:#86efac}.badge-destructive{background-color:#450a0a;color:#fca5a5}.badge-secondary{background-color:#262626;color:#a3a3a3}.progress{height:.5rem;background-color:#262626;border-radius:9999px;overflow:hidden}.progress-bar{height:100%;background-color:#fafafa;border-radius:9999px;transition:width .3s ease}.progress-bar-success{background-color:#22c55e}.progress-bar-warning{background-color:#eab308}.progress-bar-danger{background-color:#ef4444}.tabs{display:flex;gap:.25rem;border-bottom:1px solid #262626}.tab{padding:.75rem 1rem;font-size:.875rem;font-weight:500;color:#737373;border-bottom:2px solid transparent;margin-bottom:-1px;cursor:pointer;transition:all .15s ease;background:transparent}.tab:hover{color:#a3a3a3}.tab-active{color:#fafafa;border-bottom-color:#fafafa}.status-dot{width:.5rem;height:.5rem;border-radius:9999px}.status-online{background-color:#22c55e}.status-offline{background-color:#ef4444}.terminal{background-color:#0a0a0a;border:1px solid #262626;border-radius:.375rem;font-family:JetBrains Mono,Fira Code,ui-monospace,monospace}.logs-container{height:320px;max-height:320px;min-height:320px;overflow-y:scroll}.container-main{max-width:1200px;margin-left:auto;margin-right:auto;padding-left:1.5rem;padding-right:1.5rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes fadeInUp{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes fadeInScale{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}@keyframes slideInRight{0%{opacity:0;transform:translate(20px)}to{opacity:1;transform:translate(0)}}@keyframes slideInLeft{0%{opacity:0;transform:translate(-20px)}to{opacity:1;transform:translate(0)}}.fade-in{animation:fadeIn .2s ease-out}.fade-in-up{animation:fadeInUp .3s ease-out}.fade-in-scale{animation:fadeInScale .2s ease-out}.slide-in-right{animation:slideInRight .3s ease-out}.slide-in-left{animation:slideInLeft .3s ease-out}.page-enter{animation:fadeInUp .3s ease-out}.tab-content{animation:fadeIn .2s ease-out}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background-color:#000c;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;z-index:50}.modal{background-color:#171717;border:1px solid #262626;border-radius:.5rem;width:100%;max-width:28rem;max-height:90vh;overflow-y:auto}.modal-header{display:flex;align-items:center;justify-content:space-between;padding:1rem 1.5rem;border-bottom:1px solid #262626}.modal-title{font-size:1.125rem;font-weight:600;color:#fafafa}.modal-body{padding:1.5rem}.modal-footer{display:flex;justify-content:flex-end;gap:.75rem;padding:1rem 1.5rem;border-top:1px solid #262626}.form-group{margin-bottom:1rem}.form-label{display:block;font-size:.875rem;font-weight:500;color:#a3a3a3;margin-bottom:.5rem}.table{width:100%;border-collapse:collapse}.table th,.table td{padding:.75rem 1rem;text-align:left;border-bottom:1px solid #262626}.table th{font-size:.75rem;font-weight:500;color:#737373;text-transform:uppercase;letter-spacing:.05em}.table td{font-size:.875rem;color:#fafafa}.table tbody tr:hover{background-color:#1c1c1c}.alert{padding:.75rem 1rem;border-radius:.375rem;font-size:.875rem}.alert-error{background-color:#ef44441a;border:1px solid rgba(239,68,68,.2);color:#fca5a5}.alert-success{background-color:#22c55e1a;border:1px solid rgba(34,197,94,.2);color:#86efac}.hover\:text-blue-300:hover{--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity, 1))}.hover\:underline:hover{text-decoration-line:underline}@media (min-width: 640px){.sm\:block{display:block}.sm\:inline{display:inline}}@media (min-width: 768px){.md\:flex{display:flex}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}} diff --git a/gsm-frontend/eslint.config.js b/gsm-frontend/eslint.config.js new file mode 100644 index 0000000..4fa125d --- /dev/null +++ b/gsm-frontend/eslint.config.js @@ -0,0 +1,29 @@ +import js from '@eslint/js' +import globals from 'globals' +import reactHooks from 'eslint-plugin-react-hooks' +import reactRefresh from 'eslint-plugin-react-refresh' +import { defineConfig, globalIgnores } from 'eslint/config' + +export default defineConfig([ + globalIgnores(['dist']), + { + files: ['**/*.{js,jsx}'], + extends: [ + js.configs.recommended, + reactHooks.configs.flat.recommended, + reactRefresh.configs.vite, + ], + languageOptions: { + ecmaVersion: 2020, + globals: globals.browser, + parserOptions: { + ecmaVersion: 'latest', + ecmaFeatures: { jsx: true }, + sourceType: 'module', + }, + }, + rules: { + 'no-unused-vars': ['error', { varsIgnorePattern: '^[A-Z_]' }], + }, + }, +]) diff --git a/gsm-frontend/favicon.png b/gsm-frontend/favicon.png new file mode 100644 index 0000000..6ee93b8 Binary files /dev/null and b/gsm-frontend/favicon.png differ diff --git a/gsm-frontend/index.html b/gsm-frontend/index.html new file mode 100644 index 0000000..ba965e7 --- /dev/null +++ b/gsm-frontend/index.html @@ -0,0 +1,13 @@ + + + + + + + Zeasy GSM + + +
+ + + diff --git a/gsm-frontend/navbarlogograuer.png b/gsm-frontend/navbarlogograuer.png new file mode 100644 index 0000000..77e6d14 Binary files /dev/null and b/gsm-frontend/navbarlogograuer.png differ diff --git a/gsm-frontend/package-lock.json b/gsm-frontend/package-lock.json new file mode 100644 index 0000000..c32afb4 --- /dev/null +++ b/gsm-frontend/package-lock.json @@ -0,0 +1,4060 @@ +{ + "name": "frontend", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "frontend", + "version": "0.0.0", + "dependencies": { + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "lucide-react": "^0.562.0", + "react": "^19.2.0", + "react-dom": "^19.2.0", + "react-router-dom": "^7.11.0", + "recharts": "^3.6.0", + "tailwind-merge": "^3.4.0", + "tailwindcss-animate": "^1.0.7" + }, + "devDependencies": { + "@eslint/js": "^9.39.1", + "@tailwindcss/postcss": "^4.1.18", + "@types/react": "^19.2.5", + "@types/react-dom": "^19.2.3", + "@vitejs/plugin-react": "^5.1.1", + "autoprefixer": "^10.4.23", + "eslint": "^9.39.1", + "eslint-plugin-react-hooks": "^7.0.1", + "eslint-plugin-react-refresh": "^0.4.24", + "globals": "^16.5.0", + "postcss": "^8.5.6", + "tailwindcss": "^4.1.18", + "vite": "^7.2.4" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.5.tgz", + "integrity": "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz", + "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.5", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.28.3", + "@babel/helpers": "^7.28.4", + "@babel/parser": "^7.28.5", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.5", + "@babel/types": "^7.28.5", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz", + "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.5", + "@babel/types": "^7.28.5", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", + "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.28.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", + "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", + "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.5" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", + "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", + "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz", + "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.5", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.5", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.5", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", + "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz", + "integrity": "sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.2.tgz", + "integrity": "sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz", + "integrity": "sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.2.tgz", + "integrity": "sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz", + "integrity": "sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz", + "integrity": "sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz", + "integrity": "sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz", + "integrity": "sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz", + "integrity": "sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz", + "integrity": "sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz", + "integrity": "sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz", + "integrity": "sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz", + "integrity": "sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz", + "integrity": "sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz", + "integrity": "sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz", + "integrity": "sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz", + "integrity": "sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz", + "integrity": "sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz", + "integrity": "sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz", + "integrity": "sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz", + "integrity": "sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz", + "integrity": "sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz", + "integrity": "sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz", + "integrity": "sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz", + "integrity": "sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz", + "integrity": "sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz", + "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.7", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz", + "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", + "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.3.tgz", + "integrity": "sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.1", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "9.39.2", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.2.tgz", + "integrity": "sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", + "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", + "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", + "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.4.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@reduxjs/toolkit": { + "version": "2.11.2", + "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-2.11.2.tgz", + "integrity": "sha512-Kd6kAHTA6/nUpp8mySPqj3en3dm0tdMIgbttnQ1xFMVpufoj+ADi8pXLBsd4xzTRHQa7t/Jv8W5UnCuW4kuWMQ==", + "license": "MIT", + "dependencies": { + "@standard-schema/spec": "^1.0.0", + "@standard-schema/utils": "^0.3.0", + "immer": "^11.0.0", + "redux": "^5.0.1", + "redux-thunk": "^3.1.0", + "reselect": "^5.1.0" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18 || ^19", + "react-redux": "^7.2.1 || ^8.1.3 || ^9.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-redux": { + "optional": true + } + } + }, + "node_modules/@reduxjs/toolkit/node_modules/immer": { + "version": "11.1.3", + "resolved": "https://registry.npmjs.org/immer/-/immer-11.1.3.tgz", + "integrity": "sha512-6jQTc5z0KJFtr1UgFpIL3N9XSC3saRaI9PwWtzM2pSqkNGtiNkYY2OSwkOGDK2XcTRcLb1pi/aNkKZz0nxVH4Q==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.53", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.53.tgz", + "integrity": "sha512-vENRlFU4YbrwVqNDZ7fLvy+JR1CRkyr01jhSiDpE1u6py3OMzQfztQU2jxykW3ALNxO4kSlqIDeYyD0Y9RcQeQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.54.0.tgz", + "integrity": "sha512-OywsdRHrFvCdvsewAInDKCNyR3laPA2mc9bRYJ6LBp5IyvF3fvXbbNR0bSzHlZVFtn6E0xw2oZlyjg4rKCVcng==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.54.0.tgz", + "integrity": "sha512-Skx39Uv+u7H224Af+bDgNinitlmHyQX1K/atIA32JP3JQw6hVODX5tkbi2zof/E69M1qH2UoN3Xdxgs90mmNYw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.54.0.tgz", + "integrity": "sha512-k43D4qta/+6Fq+nCDhhv9yP2HdeKeP56QrUUTW7E6PhZP1US6NDqpJj4MY0jBHlJivVJD5P8NxrjuobZBJTCRw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.54.0.tgz", + "integrity": "sha512-cOo7biqwkpawslEfox5Vs8/qj83M/aZCSSNIWpVzfU2CYHa2G3P1UN5WF01RdTHSgCkri7XOlTdtk17BezlV3A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.54.0.tgz", + "integrity": "sha512-miSvuFkmvFbgJ1BevMa4CPCFt5MPGw094knM64W9I0giUIMMmRYcGW/JWZDriaw/k1kOBtsWh1z6nIFV1vPNtA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.54.0.tgz", + "integrity": "sha512-KGXIs55+b/ZfZsq9aR026tmr/+7tq6VG6MsnrvF4H8VhwflTIuYh+LFUlIsRdQSgrgmtM3fVATzEAj4hBQlaqQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.54.0.tgz", + "integrity": "sha512-EHMUcDwhtdRGlXZsGSIuXSYwD5kOT9NVnx9sqzYiwAc91wfYOE1g1djOEDseZJKKqtHAHGwnGPQu3kytmfaXLQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.54.0.tgz", + "integrity": "sha512-+pBrqEjaakN2ySv5RVrj/qLytYhPKEUwk+e3SFU5jTLHIcAtqh2rLrd/OkbNuHJpsBgxsD8ccJt5ga/SeG0JmA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.54.0.tgz", + "integrity": "sha512-NSqc7rE9wuUaRBsBp5ckQ5CVz5aIRKCwsoa6WMF7G01sX3/qHUw/z4pv+D+ahL1EIKy6Enpcnz1RY8pf7bjwng==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.54.0.tgz", + "integrity": "sha512-gr5vDbg3Bakga5kbdpqx81m2n9IX8M6gIMlQQIXiLTNeQW6CucvuInJ91EuCJ/JYvc+rcLLsDFcfAD1K7fMofg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.54.0.tgz", + "integrity": "sha512-gsrtB1NA3ZYj2vq0Rzkylo9ylCtW/PhpLEivlgWe0bpgtX5+9j9EZa0wtZiCjgu6zmSeZWyI/e2YRX1URozpIw==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.54.0.tgz", + "integrity": "sha512-y3qNOfTBStmFNq+t4s7Tmc9hW2ENtPg8FeUD/VShI7rKxNW7O4fFeaYbMsd3tpFlIg1Q8IapFgy7Q9i2BqeBvA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.54.0.tgz", + "integrity": "sha512-89sepv7h2lIVPsFma8iwmccN7Yjjtgz0Rj/Ou6fEqg3HDhpCa+Et+YSufy27i6b0Wav69Qv4WBNl3Rs6pwhebQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.54.0.tgz", + "integrity": "sha512-ZcU77ieh0M2Q8Ur7D5X7KvK+UxbXeDHwiOt/CPSBTI1fBmeDMivW0dPkdqkT4rOgDjrDDBUed9x4EgraIKoR2A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.54.0.tgz", + "integrity": "sha512-2AdWy5RdDF5+4YfG/YesGDDtbyJlC9LHmL6rZw6FurBJ5n4vFGupsOBGfwMRjBYH7qRQowT8D/U4LoSvVwOhSQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.54.0.tgz", + "integrity": "sha512-WGt5J8Ij/rvyqpFexxk3ffKqqbLf9AqrTBbWDk7ApGUzaIs6V+s2s84kAxklFwmMF/vBNGrVdYgbblCOFFezMQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.54.0.tgz", + "integrity": "sha512-JzQmb38ATzHjxlPHuTH6tE7ojnMKM2kYNzt44LO/jJi8BpceEC8QuXYA908n8r3CNuG/B3BV8VR3Hi1rYtmPiw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.54.0.tgz", + "integrity": "sha512-huT3fd0iC7jigGh7n3q/+lfPcXxBi+om/Rs3yiFxjvSxbSB6aohDFXbWvlspaqjeOh+hx7DDHS+5Es5qRkWkZg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.54.0.tgz", + "integrity": "sha512-c2V0W1bsKIKfbLMBu/WGBz6Yci8nJ/ZJdheE0EwB73N3MvHYKiKGs3mVilX4Gs70eGeDaMqEob25Tw2Gb9Nqyw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.54.0.tgz", + "integrity": "sha512-woEHgqQqDCkAzrDhvDipnSirm5vxUXtSKDYTVpZG3nUdW/VVB5VdCYA2iReSj/u3yCZzXID4kuKG7OynPnB3WQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.54.0.tgz", + "integrity": "sha512-dzAc53LOuFvHwbCEOS0rPbXp6SIhAf2txMP5p6mGyOXXw5mWY8NGGbPMPrs4P1WItkfApDathBj/NzMLUZ9rtQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.54.0.tgz", + "integrity": "sha512-hYT5d3YNdSh3mbCU1gwQyPgQd3T2ne0A3KG8KSBdav5TiBg6eInVmV+TeR5uHufiIgSFg0XsOWGW5/RhNcSvPg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", + "license": "MIT" + }, + "node_modules/@standard-schema/utils": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@standard-schema/utils/-/utils-0.3.0.tgz", + "integrity": "sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==", + "license": "MIT" + }, + "node_modules/@tailwindcss/node": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.18.tgz", + "integrity": "sha512-DoR7U1P7iYhw16qJ49fgXUlry1t4CpXeErJHnQ44JgTSKMaZUdf17cfn5mHchfJ4KRBZRFA/Coo+MUF5+gOaCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.4", + "enhanced-resolve": "^5.18.3", + "jiti": "^2.6.1", + "lightningcss": "1.30.2", + "magic-string": "^0.30.21", + "source-map-js": "^1.2.1", + "tailwindcss": "4.1.18" + } + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.18.tgz", + "integrity": "sha512-EgCR5tTS5bUSKQgzeMClT6iCY3ToqE1y+ZB0AKldj809QXk1Y+3jB0upOYZrn9aGIzPtUsP7sX4QQ4XtjBB95A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.1.18", + "@tailwindcss/oxide-darwin-arm64": "4.1.18", + "@tailwindcss/oxide-darwin-x64": "4.1.18", + "@tailwindcss/oxide-freebsd-x64": "4.1.18", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.18", + "@tailwindcss/oxide-linux-arm64-gnu": "4.1.18", + "@tailwindcss/oxide-linux-arm64-musl": "4.1.18", + "@tailwindcss/oxide-linux-x64-gnu": "4.1.18", + "@tailwindcss/oxide-linux-x64-musl": "4.1.18", + "@tailwindcss/oxide-wasm32-wasi": "4.1.18", + "@tailwindcss/oxide-win32-arm64-msvc": "4.1.18", + "@tailwindcss/oxide-win32-x64-msvc": "4.1.18" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.18.tgz", + "integrity": "sha512-dJHz7+Ugr9U/diKJA0W6N/6/cjI+ZTAoxPf9Iz9BFRF2GzEX8IvXxFIi/dZBloVJX/MZGvRuFA9rqwdiIEZQ0Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.18.tgz", + "integrity": "sha512-Gc2q4Qhs660bhjyBSKgq6BYvwDz4G+BuyJ5H1xfhmDR3D8HnHCmT/BSkvSL0vQLy/nkMLY20PQ2OoYMO15Jd0A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.18.tgz", + "integrity": "sha512-FL5oxr2xQsFrc3X9o1fjHKBYBMD1QZNyc1Xzw/h5Qu4XnEBi3dZn96HcHm41c/euGV+GRiXFfh2hUCyKi/e+yw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.18.tgz", + "integrity": "sha512-Fj+RHgu5bDodmV1dM9yAxlfJwkkWvLiRjbhuO2LEtwtlYlBgiAT4x/j5wQr1tC3SANAgD+0YcmWVrj8R9trVMA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.18.tgz", + "integrity": "sha512-Fp+Wzk/Ws4dZn+LV2Nqx3IilnhH51YZoRaYHQsVq3RQvEl+71VGKFpkfHrLM/Li+kt5c0DJe/bHXK1eHgDmdiA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.18.tgz", + "integrity": "sha512-S0n3jboLysNbh55Vrt7pk9wgpyTTPD0fdQeh7wQfMqLPM/Hrxi+dVsLsPrycQjGKEQk85Kgbx+6+QnYNiHalnw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.18.tgz", + "integrity": "sha512-1px92582HkPQlaaCkdRcio71p8bc8i/ap5807tPRDK/uw953cauQBT8c5tVGkOwrHMfc2Yh6UuxaH4vtTjGvHg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.18.tgz", + "integrity": "sha512-v3gyT0ivkfBLoZGF9LyHmts0Isc8jHZyVcbzio6Wpzifg/+5ZJpDiRiUhDLkcr7f/r38SWNe7ucxmGW3j3Kb/g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.18.tgz", + "integrity": "sha512-bhJ2y2OQNlcRwwgOAGMY0xTFStt4/wyU6pvI6LSuZpRgKQwxTec0/3Scu91O8ir7qCR3AuepQKLU/kX99FouqQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.18.tgz", + "integrity": "sha512-LffYTvPjODiP6PT16oNeUQJzNVyJl1cjIebq/rWWBF+3eDst5JGEFSc5cWxyRCJ0Mxl+KyIkqRxk1XPEs9x8TA==", + "bundleDependencies": [ + "@napi-rs/wasm-runtime", + "@emnapi/core", + "@emnapi/runtime", + "@tybys/wasm-util", + "@emnapi/wasi-threads", + "tslib" + ], + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1", + "@emnapi/wasi-threads": "^1.1.0", + "@napi-rs/wasm-runtime": "^1.1.0", + "@tybys/wasm-util": "^0.10.1", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.18.tgz", + "integrity": "sha512-HjSA7mr9HmC8fu6bdsZvZ+dhjyGCLdotjVOgLA2vEqxEBZaQo9YTX4kwgEvPCpRh8o4uWc4J/wEoFzhEmjvPbA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.18.tgz", + "integrity": "sha512-bJWbyYpUlqamC8dpR7pfjA0I7vdF6t5VpUGMWRkXVE3AXgIZjYUYAK7II1GNaxR8J1SSrSrppRar8G++JekE3Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/postcss": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/postcss/-/postcss-4.1.18.tgz", + "integrity": "sha512-Ce0GFnzAOuPyfV5SxjXGn0CubwGcuDB0zcdaPuCSzAa/2vII24JTkH+I6jcbXLb1ctjZMZZI6OjDaLPJQL1S0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "@tailwindcss/node": "4.1.18", + "@tailwindcss/oxide": "4.1.18", + "postcss": "^8.4.41", + "tailwindcss": "4.1.18" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.2" + } + }, + "node_modules/@types/d3-array": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.2.tgz", + "integrity": "sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==", + "license": "MIT" + }, + "node_modules/@types/d3-color": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz", + "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==", + "license": "MIT" + }, + "node_modules/@types/d3-ease": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz", + "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==", + "license": "MIT" + }, + "node_modules/@types/d3-interpolate": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz", + "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==", + "license": "MIT", + "dependencies": { + "@types/d3-color": "*" + } + }, + "node_modules/@types/d3-path": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.1.tgz", + "integrity": "sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==", + "license": "MIT" + }, + "node_modules/@types/d3-scale": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.9.tgz", + "integrity": "sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==", + "license": "MIT", + "dependencies": { + "@types/d3-time": "*" + } + }, + "node_modules/@types/d3-shape": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.7.tgz", + "integrity": "sha512-VLvUQ33C+3J+8p+Daf+nYSOsjB4GXp19/S/aGo60m9h1v6XaxjiT82lKVWJCfzhtuZ3yD7i/TPeC/fuKLLOSmg==", + "license": "MIT", + "dependencies": { + "@types/d3-path": "*" + } + }, + "node_modules/@types/d3-time": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.4.tgz", + "integrity": "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==", + "license": "MIT" + }, + "node_modules/@types/d3-timer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz", + "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==", + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "19.2.7", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.7.tgz", + "integrity": "sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "csstype": "^3.2.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz", + "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.2.0" + } + }, + "node_modules/@types/use-sync-external-store": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.6.tgz", + "integrity": "sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==", + "license": "MIT" + }, + "node_modules/@vitejs/plugin-react": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-5.1.2.tgz", + "integrity": "sha512-EcA07pHJouywpzsoTUqNh5NwGayl2PPVEJKUSinGGSxFGYn+shYbqMGBg6FXDqgXum9Ou/ecb+411ssw8HImJQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.28.5", + "@babel/plugin-transform-react-jsx-self": "^7.27.1", + "@babel/plugin-transform-react-jsx-source": "^7.27.1", + "@rolldown/pluginutils": "1.0.0-beta.53", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.18.0" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" + } + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/autoprefixer": { + "version": "10.4.23", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.23.tgz", + "integrity": "sha512-YYTXSFulfwytnjAPlw8QHncHJmlvFKtczb8InXaAx9Q0LbfDnfEYDE55omerIJKihhmU61Ft+cAOSzQVaBUmeA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.1", + "caniuse-lite": "^1.0.30001760", + "fraction.js": "^5.3.4", + "picocolors": "^1.1.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/baseline-browser-mapping": { + "version": "2.9.11", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.11.tgz", + "integrity": "sha512-Sg0xJUNDU1sJNGdfGWhVHX0kkZ+HWcvmVymJbj6NSgZZmW/8S9Y2HQ5euytnIgakgxN6papOAWiwDo1ctFDcoQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/browserslist": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.2.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001762", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001762.tgz", + "integrity": "sha512-PxZwGNvH7Ak8WX5iXzoK1KPZttBXNPuaOvI2ZYU7NrlM+d9Ov+TUvlLOBNGzVXAntMSMMlJPd+jY6ovrVjSmUw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/class-variance-authority": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz", + "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==", + "license": "Apache-2.0", + "dependencies": { + "clsx": "^2.1.1" + }, + "funding": { + "url": "https://polar.sh/cva" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cookie": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz", + "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "license": "ISC", + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-format": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", + "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "license": "ISC", + "dependencies": { + "d3-color": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-scale": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "license": "ISC", + "dependencies": { + "d3-array": "2.10.0 - 3", + "d3-format": "1 - 3", + "d3-interpolate": "1.2.0 - 3", + "d3-time": "2.1.1 - 3", + "d3-time-format": "2 - 4" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-shape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", + "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", + "license": "ISC", + "dependencies": { + "d3-path": "^3.1.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", + "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", + "license": "ISC", + "dependencies": { + "d3-array": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time-format": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", + "license": "ISC", + "dependencies": { + "d3-time": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decimal.js-light": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz", + "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==", + "license": "MIT" + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.267", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz", + "integrity": "sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==", + "dev": true, + "license": "ISC" + }, + "node_modules/enhanced-resolve": { + "version": "5.18.4", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.4.tgz", + "integrity": "sha512-LgQMM4WXU3QI+SYgEc2liRgznaD5ojbmY3sb8LxyguVkIg5FxdpTkvk72te2R38/TGKxH634oLxXRGY6d7AP+Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/es-toolkit": { + "version": "1.43.0", + "resolved": "https://registry.npmjs.org/es-toolkit/-/es-toolkit-1.43.0.tgz", + "integrity": "sha512-SKCT8AsWvYzBBuUqMk4NPwFlSdqLpJwmy6AP322ERn8W2YLIB6JBXnwMI2Qsh2gfphT3q7EKAxKb23cvFHFwKA==", + "license": "MIT", + "workspaces": [ + "docs", + "benchmarks" + ] + }, + "node_modules/esbuild": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.2.tgz", + "integrity": "sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.2", + "@esbuild/android-arm": "0.27.2", + "@esbuild/android-arm64": "0.27.2", + "@esbuild/android-x64": "0.27.2", + "@esbuild/darwin-arm64": "0.27.2", + "@esbuild/darwin-x64": "0.27.2", + "@esbuild/freebsd-arm64": "0.27.2", + "@esbuild/freebsd-x64": "0.27.2", + "@esbuild/linux-arm": "0.27.2", + "@esbuild/linux-arm64": "0.27.2", + "@esbuild/linux-ia32": "0.27.2", + "@esbuild/linux-loong64": "0.27.2", + "@esbuild/linux-mips64el": "0.27.2", + "@esbuild/linux-ppc64": "0.27.2", + "@esbuild/linux-riscv64": "0.27.2", + "@esbuild/linux-s390x": "0.27.2", + "@esbuild/linux-x64": "0.27.2", + "@esbuild/netbsd-arm64": "0.27.2", + "@esbuild/netbsd-x64": "0.27.2", + "@esbuild/openbsd-arm64": "0.27.2", + "@esbuild/openbsd-x64": "0.27.2", + "@esbuild/openharmony-arm64": "0.27.2", + "@esbuild/sunos-x64": "0.27.2", + "@esbuild/win32-arm64": "0.27.2", + "@esbuild/win32-ia32": "0.27.2", + "@esbuild/win32-x64": "0.27.2" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.39.2", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.2.tgz", + "integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.1", + "@eslint/config-helpers": "^0.4.2", + "@eslint/core": "^0.17.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.39.2", + "@eslint/plugin-kit": "^0.4.1", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-7.0.1.tgz", + "integrity": "sha512-O0d0m04evaNzEPoSW+59Mezf8Qt0InfgGIBJnpC0h3NH/WjUAR7BIKUfysC6todmtiZ/A0oUVS8Gce0WhBrHsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.24.4", + "@babel/parser": "^7.24.4", + "hermes-parser": "^0.25.1", + "zod": "^3.25.0 || ^4.0.0", + "zod-validation-error": "^3.5.0 || ^4.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" + } + }, + "node_modules/eslint-plugin-react-refresh": { + "version": "0.4.26", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.26.tgz", + "integrity": "sha512-1RETEylht2O6FM/MvgnyvT+8K21wLqDNg4qD51Zj3guhjt433XbnnkVttHMyaVyAFD03QSV4LPS5iE3VQmO7XQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "eslint": ">=8.40" + } + }, + "node_modules/eslint-scope": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true, + "license": "ISC" + }, + "node_modules/fraction.js": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-5.3.4.tgz", + "integrity": "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "16.5.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-16.5.0.tgz", + "integrity": "sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/hermes-estree": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz", + "integrity": "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==", + "dev": true, + "license": "MIT" + }, + "node_modules/hermes-parser": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.25.1.tgz", + "integrity": "sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "hermes-estree": "0.25.1" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/immer": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/immer/-/immer-10.2.0.tgz", + "integrity": "sha512-d/+XTN3zfODyjr89gM3mPq1WNX2B8pYsu7eORitdwyA2sBubnTl3laYlBk4sXY5FUa5qTZGBDPJICVbvqzjlbw==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/internmap": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/jiti": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", + "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lightningcss": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.2.tgz", + "integrity": "sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.30.2", + "lightningcss-darwin-arm64": "1.30.2", + "lightningcss-darwin-x64": "1.30.2", + "lightningcss-freebsd-x64": "1.30.2", + "lightningcss-linux-arm-gnueabihf": "1.30.2", + "lightningcss-linux-arm64-gnu": "1.30.2", + "lightningcss-linux-arm64-musl": "1.30.2", + "lightningcss-linux-x64-gnu": "1.30.2", + "lightningcss-linux-x64-musl": "1.30.2", + "lightningcss-win32-arm64-msvc": "1.30.2", + "lightningcss-win32-x64-msvc": "1.30.2" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.30.2.tgz", + "integrity": "sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.2.tgz", + "integrity": "sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.2.tgz", + "integrity": "sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.2.tgz", + "integrity": "sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.2.tgz", + "integrity": "sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.2.tgz", + "integrity": "sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.2.tgz", + "integrity": "sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.2.tgz", + "integrity": "sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.2.tgz", + "integrity": "sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.2.tgz", + "integrity": "sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.2.tgz", + "integrity": "sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/lucide-react": { + "version": "0.562.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.562.0.tgz", + "integrity": "sha512-82hOAu7y0dbVuFfmO4bYF1XEwYk/mEbM5E+b1jgci/udUBEE/R7LF5Ip0CCEmXe8AybRM8L+04eP+LGZeDvkiw==", + "license": "ISC", + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.27", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/react": { + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.3.tgz", + "integrity": "sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.3.tgz", + "integrity": "sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.27.0" + }, + "peerDependencies": { + "react": "^19.2.3" + } + }, + "node_modules/react-is": { + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.2.3.tgz", + "integrity": "sha512-qJNJfu81ByyabuG7hPFEbXqNcWSU3+eVus+KJs+0ncpGfMyYdvSmxiJxbWR65lYi1I+/0HBcliO029gc4F+PnA==", + "license": "MIT", + "peer": true + }, + "node_modules/react-redux": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.2.0.tgz", + "integrity": "sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==", + "license": "MIT", + "dependencies": { + "@types/use-sync-external-store": "^0.0.6", + "use-sync-external-store": "^1.4.0" + }, + "peerDependencies": { + "@types/react": "^18.2.25 || ^19", + "react": "^18.0 || ^19", + "redux": "^5.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "redux": { + "optional": true + } + } + }, + "node_modules/react-refresh": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.18.0.tgz", + "integrity": "sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-router": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.11.0.tgz", + "integrity": "sha512-uI4JkMmjbWCZc01WVP2cH7ZfSzH91JAZUDd7/nIprDgWxBV1TkkmLToFh7EbMTcMak8URFRa2YoBL/W8GWnCTQ==", + "license": "MIT", + "dependencies": { + "cookie": "^1.0.1", + "set-cookie-parser": "^2.6.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + } + } + }, + "node_modules/react-router-dom": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.11.0.tgz", + "integrity": "sha512-e49Ir/kMGRzFOOrYQBdoitq3ULigw4lKbAyKusnvtDu2t4dBX4AGYPrzNvorXmVuOyeakai6FUPW5MmibvVG8g==", + "license": "MIT", + "dependencies": { + "react-router": "7.11.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/recharts": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/recharts/-/recharts-3.6.0.tgz", + "integrity": "sha512-L5bjxvQRAe26RlToBAziKUB7whaGKEwD3znoM6fz3DrTowCIC/FnJYnuq1GEzB8Zv2kdTfaxQfi5GoH0tBinyg==", + "license": "MIT", + "workspaces": [ + "www" + ], + "dependencies": { + "@reduxjs/toolkit": "1.x.x || 2.x.x", + "clsx": "^2.1.1", + "decimal.js-light": "^2.5.1", + "es-toolkit": "^1.39.3", + "eventemitter3": "^5.0.1", + "immer": "^10.1.1", + "react-redux": "8.x.x || 9.x.x", + "reselect": "5.1.1", + "tiny-invariant": "^1.3.3", + "use-sync-external-store": "^1.2.2", + "victory-vendor": "^37.0.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-is": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/redux": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz", + "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==", + "license": "MIT" + }, + "node_modules/redux-thunk": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-3.1.0.tgz", + "integrity": "sha512-NW2r5T6ksUKXCabzhL9z+h206HQw/NJkcLm1GPImRQ8IzfXwRGqjVhKJGauHirT0DAuyy6hjdnMZaRoAcy0Klw==", + "license": "MIT", + "peerDependencies": { + "redux": "^5.0.0" + } + }, + "node_modules/reselect": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-5.1.1.tgz", + "integrity": "sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==", + "license": "MIT" + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/rollup": { + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.54.0.tgz", + "integrity": "sha512-3nk8Y3a9Ea8szgKhinMlGMhGMw89mqule3KWczxhIzqudyHdCIOHw8WJlj/r329fACjKLEh13ZSk7oE22kyeIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.54.0", + "@rollup/rollup-android-arm64": "4.54.0", + "@rollup/rollup-darwin-arm64": "4.54.0", + "@rollup/rollup-darwin-x64": "4.54.0", + "@rollup/rollup-freebsd-arm64": "4.54.0", + "@rollup/rollup-freebsd-x64": "4.54.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.54.0", + "@rollup/rollup-linux-arm-musleabihf": "4.54.0", + "@rollup/rollup-linux-arm64-gnu": "4.54.0", + "@rollup/rollup-linux-arm64-musl": "4.54.0", + "@rollup/rollup-linux-loong64-gnu": "4.54.0", + "@rollup/rollup-linux-ppc64-gnu": "4.54.0", + "@rollup/rollup-linux-riscv64-gnu": "4.54.0", + "@rollup/rollup-linux-riscv64-musl": "4.54.0", + "@rollup/rollup-linux-s390x-gnu": "4.54.0", + "@rollup/rollup-linux-x64-gnu": "4.54.0", + "@rollup/rollup-linux-x64-musl": "4.54.0", + "@rollup/rollup-openharmony-arm64": "4.54.0", + "@rollup/rollup-win32-arm64-msvc": "4.54.0", + "@rollup/rollup-win32-ia32-msvc": "4.54.0", + "@rollup/rollup-win32-x64-gnu": "4.54.0", + "@rollup/rollup-win32-x64-msvc": "4.54.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/scheduler": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/set-cookie-parser": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.2.tgz", + "integrity": "sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==", + "license": "MIT" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tailwind-merge": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.4.0.tgz", + "integrity": "sha512-uSaO4gnW+b3Y2aWoWfFpX62vn2sR3skfhbjsEnaBI81WD1wBLlHZe5sWf0AqjksNdYTbGBEd0UasQMT3SNV15g==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/dcastil" + } + }, + "node_modules/tailwindcss": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.18.tgz", + "integrity": "sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw==", + "license": "MIT" + }, + "node_modules/tailwindcss-animate": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz", + "integrity": "sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==", + "license": "MIT", + "peerDependencies": { + "tailwindcss": ">=3.0.0 || insiders" + } + }, + "node_modules/tapable": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", + "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/tiny-invariant": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", + "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", + "license": "MIT" + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/use-sync-external-store": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz", + "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/victory-vendor": { + "version": "37.3.6", + "resolved": "https://registry.npmjs.org/victory-vendor/-/victory-vendor-37.3.6.tgz", + "integrity": "sha512-SbPDPdDBYp+5MJHhBCAyI7wKM3d5ivekigc2Dk2s7pgbZ9wIgIBYGVw4zGHBml/qTFbexrofXW6Gu4noGxrOwQ==", + "license": "MIT AND ISC", + "dependencies": { + "@types/d3-array": "^3.0.3", + "@types/d3-ease": "^3.0.0", + "@types/d3-interpolate": "^3.0.1", + "@types/d3-scale": "^4.0.2", + "@types/d3-shape": "^3.1.0", + "@types/d3-time": "^3.0.0", + "@types/d3-timer": "^3.0.0", + "d3-array": "^3.1.6", + "d3-ease": "^3.0.1", + "d3-interpolate": "^3.0.1", + "d3-scale": "^4.0.2", + "d3-shape": "^3.1.0", + "d3-time": "^3.0.0", + "d3-timer": "^3.0.1" + } + }, + "node_modules/vite": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.0.tgz", + "integrity": "sha512-dZwN5L1VlUBewiP6H9s2+B3e3Jg96D0vzN+Ry73sOefebhYr9f94wwkMNN/9ouoU8pV1BqA1d1zGk8928cx0rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.27.0", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.4.tgz", + "integrity": "sha512-Zw/uYiiyF6pUT1qmKbZziChgNPRu+ZRneAsMUDU6IwmXdWt5JwcUfy2bvLOCUtz5UniaN/Zx5aFttZYbYc7O/A==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-validation-error": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-4.0.2.tgz", + "integrity": "sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "zod": "^3.25.0 || ^4.0.0" + } + } + } +} diff --git a/gsm-frontend/package.json b/gsm-frontend/package.json new file mode 100644 index 0000000..5078756 --- /dev/null +++ b/gsm-frontend/package.json @@ -0,0 +1,38 @@ +{ + "name": "frontend", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "lint": "eslint .", + "preview": "vite preview" + }, + "dependencies": { + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "lucide-react": "^0.562.0", + "react": "^19.2.0", + "react-dom": "^19.2.0", + "react-router-dom": "^7.11.0", + "recharts": "^3.6.0", + "tailwind-merge": "^3.4.0", + "tailwindcss-animate": "^1.0.7" + }, + "devDependencies": { + "@eslint/js": "^9.39.1", + "@tailwindcss/postcss": "^4.1.18", + "@types/react": "^19.2.5", + "@types/react-dom": "^19.2.3", + "@vitejs/plugin-react": "^5.1.1", + "autoprefixer": "^10.4.23", + "eslint": "^9.39.1", + "eslint-plugin-react-hooks": "^7.0.1", + "eslint-plugin-react-refresh": "^0.4.24", + "globals": "^16.5.0", + "postcss": "^8.5.6", + "tailwindcss": "^4.1.18", + "vite": "^7.2.4" + } +} diff --git a/gsm-frontend/postcss.config.js b/gsm-frontend/postcss.config.js new file mode 100644 index 0000000..a7f73a2 --- /dev/null +++ b/gsm-frontend/postcss.config.js @@ -0,0 +1,5 @@ +export default { + plugins: { + '@tailwindcss/postcss': {}, + }, +} diff --git a/gsm-frontend/public/factorio.png b/gsm-frontend/public/factorio.png new file mode 100644 index 0000000..58bcb9c Binary files /dev/null and b/gsm-frontend/public/factorio.png differ diff --git a/gsm-frontend/public/minecraft.png b/gsm-frontend/public/minecraft.png new file mode 100644 index 0000000..a9690b9 Binary files /dev/null and b/gsm-frontend/public/minecraft.png differ diff --git a/gsm-frontend/public/navbarlogograuer.png b/gsm-frontend/public/navbarlogograuer.png new file mode 100644 index 0000000..77e6d14 Binary files /dev/null and b/gsm-frontend/public/navbarlogograuer.png differ diff --git a/gsm-frontend/public/navbarlogoweiß.png b/gsm-frontend/public/navbarlogoweiß.png new file mode 100644 index 0000000..9de2bd8 Binary files /dev/null and b/gsm-frontend/public/navbarlogoweiß.png differ diff --git a/gsm-frontend/public/vite.svg b/gsm-frontend/public/vite.svg new file mode 100644 index 0000000..e7b8dfb --- /dev/null +++ b/gsm-frontend/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/gsm-frontend/public/vrising.png b/gsm-frontend/public/vrising.png new file mode 100644 index 0000000..09a41e2 Binary files /dev/null and b/gsm-frontend/public/vrising.png differ diff --git a/gsm-frontend/src/App.css b/gsm-frontend/src/App.css new file mode 100644 index 0000000..b9d355d --- /dev/null +++ b/gsm-frontend/src/App.css @@ -0,0 +1,42 @@ +#root { + max-width: 1280px; + margin: 0 auto; + padding: 2rem; + text-align: center; +} + +.logo { + height: 6em; + padding: 1.5em; + will-change: filter; + transition: filter 300ms; +} +.logo:hover { + filter: drop-shadow(0 0 2em #646cffaa); +} +.logo.react:hover { + filter: drop-shadow(0 0 2em #61dafbaa); +} + +@keyframes logo-spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} + +@media (prefers-reduced-motion: no-preference) { + a:nth-of-type(2) .logo { + animation: logo-spin infinite 20s linear; + } +} + +.card { + padding: 2em; +} + +.read-the-docs { + color: #888; +} diff --git a/temp/App.jsx b/gsm-frontend/src/App.jsx similarity index 59% rename from temp/App.jsx rename to gsm-frontend/src/App.jsx index 059a9d0..3741ce6 100644 --- a/temp/App.jsx +++ b/gsm-frontend/src/App.jsx @@ -1,38 +1,31 @@ import { useState } from 'react' import { BrowserRouter, Routes, Route, Navigate } from 'react-router-dom' import { UserProvider } from './context/UserContext' -import Login from './pages/Login' import Dashboard from './pages/Dashboard' import ServerDetail from './pages/ServerDetail' -function App() { - const [token, setToken] = useState(localStorage.getItem('token')) +export default function App() { + const [token, setToken] = useState(localStorage.getItem('gsm_token')) const handleLogin = (newToken) => { - localStorage.setItem('token', newToken) + localStorage.setItem('gsm_token', newToken) setToken(newToken) } const handleLogout = () => { - localStorage.removeItem('token') + localStorage.removeItem('gsm_token') setToken(null) } - if (!token) { - return - } - return ( - + - } /> - } /> + } /> + } /> } /> ) } - -export default App diff --git a/gsm-frontend/src/api.js b/gsm-frontend/src/api.js new file mode 100644 index 0000000..d76f1bb --- /dev/null +++ b/gsm-frontend/src/api.js @@ -0,0 +1,181 @@ +const API_URL = import.meta.env.VITE_API_URL || 'https://monitor.dimension47.de/api' + +async function fetchAPI(endpoint, options = {}) { + const response = await fetch(`${API_URL}${endpoint}`, { + ...options, + headers: { + 'Content-Type': 'application/json', + ...options.headers, + }, + }) + + if (!response.ok) { + const error = await response.json().catch(() => ({ message: 'Request failed' })) + throw new Error(error.message || `HTTP ${response.status}`) + } + + return response.json() +} + +// Auth +export async function login(username, password) { + return fetchAPI('/auth/login', { + method: 'POST', + body: JSON.stringify({ username, password }), + }) +} + +export async function getMe(token) { + return fetchAPI('/auth/me', { + headers: { Authorization: `Bearer ${token}` }, + }) +} + +export async function changePassword(currentPassword, newPassword) { + const token = localStorage.getItem('gsm_token') + return fetchAPI('/auth/change-password', { + method: 'POST', + headers: { Authorization: `Bearer ${token}` }, + body: JSON.stringify({ currentPassword, newPassword }), + }) +} + +// Servers +export async function getServers(token) { + return fetchAPI('/servers', { + headers: { Authorization: `Bearer ${token}` }, + }) +} + +export async function serverAction(token, serverId, action, body = null) { + return fetchAPI(`/servers/${serverId}/${action}`, { + method: 'POST', + headers: { Authorization: `Bearer ${token}` }, + ...(body && { body: JSON.stringify(body) }), + }) +} + +export async function getWhitelist(token, serverId) { + const headers = token ? { Authorization: `Bearer ${token}` } : {} + return fetchAPI(`/servers/${serverId}/whitelist`, { headers }) +} + +export async function sendRcon(token, serverId, command) { + return fetchAPI(`/servers/${serverId}/rcon`, { + method: 'POST', + headers: { Authorization: `Bearer ${token}` }, + body: JSON.stringify({ command }), + }) +} + +export async function getServerLogs(token, serverId, lines = 50) { + return fetchAPI(`/servers/${serverId}/logs?lines=${lines}`, { + headers: { Authorization: `Bearer ${token}` }, + }) +} + +// Metrics +export async function getMetricsHistory(token, serverId, range = '1h') { + return fetchAPI(`/servers/${serverId}/metrics/history?range=${range}`, { + headers: { Authorization: `Bearer ${token}` }, + }) +} + +// Users (admin only) +export async function getUsers(token) { + return fetchAPI('/auth/users', { + headers: { Authorization: `Bearer ${token}` }, + }) +} + +export async function createUser(token, userData) { + return fetchAPI('/auth/users', { + method: 'POST', + headers: { Authorization: `Bearer ${token}` }, + body: JSON.stringify(userData), + }) +} + +export async function updateUserRole(token, userId, role) { + return fetchAPI(`/auth/users/${userId}/role`, { + method: 'PATCH', + headers: { Authorization: `Bearer ${token}` }, + body: JSON.stringify({ role }), + }) +} + +export async function updateUserPassword(token, userId, password) { + return fetchAPI(`/auth/users/${userId}/password`, { + method: 'PATCH', + headers: { Authorization: `Bearer ${token}` }, + body: JSON.stringify({ password }), + }) +} + +export async function deleteUser(token, userId) { + return fetchAPI(`/auth/users/${userId}`, { + method: 'DELETE', + headers: { Authorization: `Bearer ${token}` }, + }) +} + +// Factorio World Management +export async function getFactorioSaves(token) { + return fetchAPI('/servers/factorio/saves', { + headers: { Authorization: `Bearer ${token}` }, + }) +} + +export async function getFactorioPresets(token) { + return fetchAPI('/servers/factorio/presets', { + headers: { Authorization: `Bearer ${token}` }, + }) +} + +export async function getFactorioPreset(token, name) { + return fetchAPI(`/servers/factorio/presets/${name}`, { + headers: { Authorization: `Bearer ${token}` }, + }) +} + +export async function getFactorioTemplates(token) { + return fetchAPI('/servers/factorio/templates', { + headers: { Authorization: `Bearer ${token}` }, + }) +} + +export async function createFactorioTemplate(token, name, settings) { + return fetchAPI('/servers/factorio/templates', { + method: 'POST', + headers: { Authorization: `Bearer ${token}` }, + body: JSON.stringify({ name, settings }), + }) +} + +export async function deleteFactorioTemplate(token, id) { + return fetchAPI(`/servers/factorio/templates/${id}`, { + method: 'DELETE', + headers: { Authorization: `Bearer ${token}` }, + }) +} + +export async function createFactorioWorld(token, saveName, settings) { + return fetchAPI('/servers/factorio/create-world', { + method: 'POST', + headers: { Authorization: `Bearer ${token}` }, + body: JSON.stringify({ saveName, settings }), + }) +} + +export async function deleteFactorioSave(token, saveName) { + return fetchAPI(`/servers/factorio/saves/${encodeURIComponent(saveName)}`, { + method: 'DELETE', + headers: { Authorization: `Bearer ${token}` }, + }) +} + +export async function getFactorioCurrentSave(token) { + return fetchAPI('/servers/factorio/current-save', { + headers: { Authorization: `Bearer ${token}` }, + }) +} diff --git a/gsm-frontend/src/assets/react.svg b/gsm-frontend/src/assets/react.svg new file mode 100644 index 0000000..6c87de9 --- /dev/null +++ b/gsm-frontend/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/gsm-frontend/src/components/FactorioWorldManager.jsx b/gsm-frontend/src/components/FactorioWorldManager.jsx new file mode 100644 index 0000000..a52e1b3 --- /dev/null +++ b/gsm-frontend/src/components/FactorioWorldManager.jsx @@ -0,0 +1,331 @@ +import { useState, useEffect } from 'react' +import { + getFactorioSaves, + getFactorioPresets, + getFactorioPreset, + getFactorioTemplates, + createFactorioTemplate, + deleteFactorioTemplate, + createFactorioWorld, + deleteFactorioSave, + serverAction +} from '../api' +import WorldGenForm from './WorldGenForm' + +export default function FactorioWorldManager({ server, token, onServerAction }) { + const [saves, setSaves] = useState([]) + const [templates, setTemplates] = useState([]) + const [presets, setPresets] = useState([]) + const [defaultSettings, setDefaultSettings] = useState(null) + const [loading, setLoading] = useState(true) + const [error, setError] = useState('') + const [showCreateWorld, setShowCreateWorld] = useState(false) + const [newWorldName, setNewWorldName] = useState('') + const [worldSettings, setWorldSettings] = useState(null) + const [creating, setCreating] = useState(false) + const [deleteConfirm, setDeleteConfirm] = useState(null) + const [actionLoading, setActionLoading] = useState(null) + + const fetchData = async () => { + try { + setLoading(true) + const [savesData, presetsData, templatesData] = await Promise.all([ + getFactorioSaves(token), + getFactorioPresets(token), + getFactorioTemplates(token) + ]) + setSaves(savesData.saves || []) + setPresets(presetsData.presets || []) + setDefaultSettings(presetsData.defaultSettings) + setWorldSettings(presetsData.defaultSettings) + setTemplates(templatesData.templates || []) + setError('') + } catch (err) { + setError(err.message) + } finally { + setLoading(false) + } + } + + useEffect(() => { + fetchData() + }, [token]) + + const handleLoadPreset = async (presetName) => { + try { + const data = await getFactorioPreset(token, presetName) + setWorldSettings(data.settings) + } catch (err) { + setError(err.message) + } + } + + const handleLoadTemplate = (templateId) => { + const template = templates.find(t => t.id === templateId) + if (template) { + setWorldSettings(template.settings) + } + } + + const handleSaveTemplate = async (name) => { + try { + await createFactorioTemplate(token, name, worldSettings) + const templatesData = await getFactorioTemplates(token) + setTemplates(templatesData.templates || []) + } catch (err) { + setError(err.message) + } + } + + const handleDeleteTemplate = async (id) => { + try { + await deleteFactorioTemplate(token, id) + setTemplates(templates.filter(t => t.id !== id)) + } catch (err) { + setError(err.message) + } + } + + const handleCreateWorld = async () => { + if (!newWorldName.trim()) { + setError('World name is required') + return + } + + if (!/^[a-zA-Z0-9_-]+$/.test(newWorldName)) { + setError('World name can only contain letters, numbers, hyphens and underscores') + return + } + + try { + setCreating(true) + setError('') + await createFactorioWorld(token, newWorldName, worldSettings) + setShowCreateWorld(false) + setNewWorldName('') + setWorldSettings(defaultSettings) + await fetchData() + } catch (err) { + setError(err.message) + } finally { + setCreating(false) + } + } + + const handleStartWithSave = async (saveName) => { + try { + setActionLoading(saveName) + await serverAction(token, server.id, 'start', { save: saveName }) + if (onServerAction) onServerAction() + } catch (err) { + setError(err.message) + } finally { + setActionLoading(null) + } + } + + const handleDeleteSave = async (saveName) => { + try { + setActionLoading(saveName) + await deleteFactorioSave(token, saveName) + setDeleteConfirm(null) + await fetchData() + } catch (err) { + setError(err.message) + } finally { + setActionLoading(null) + } + } + + if (loading) { + return ( +
+
Loading world data...
+
+ ) + } + + return ( +
+ {error && ( +
+ {error} +
+ )} + + {/* Create World Modal */} + {showCreateWorld && ( +
!creating && setShowCreateWorld(false)}> +
e.stopPropagation()}> +
+

Create New World

+ +
+ +
+
+ + setNewWorldName(e.target.value)} + placeholder="my-new-world" + disabled={creating} + className="input" + /> +
+ + +
+ +
+ + +
+
+
+ )} + + {/* Delete Confirmation Modal */} + {deleteConfirm && ( +
setDeleteConfirm(null)}> +
e.stopPropagation()}> +
+

Delete Save?

+
+
+

+ Are you sure you want to delete {deleteConfirm}? This action cannot be undone. +

+
+
+ + +
+
+
+ )} + + {/* Header */} +
+

Saved Worlds

+ +
+ + {/* Saves List */} + {saves.length === 0 ? ( +
+
No saved worlds found
+
Create a new world to get started
+
+ ) : ( +
+ {saves.map((save) => ( +
+
+
+ 🌍 +
+
{save.name}
+
+ {save.size} · {save.modified} +
+
+
+
+ + +
+
+
+ ))} +
+ )} + + {/* Templates Section */} + {templates.length > 0 && ( +
+

Saved Templates

+
+ {templates.map((template) => ( +
+ {template.name} + +
+ ))} +
+
+ )} +
+ ) +} diff --git a/temp/Login.jsx b/gsm-frontend/src/components/LoginModal.jsx similarity index 58% rename from temp/Login.jsx rename to gsm-frontend/src/components/LoginModal.jsx index 6b4f490..82bf883 100644 --- a/temp/Login.jsx +++ b/gsm-frontend/src/components/LoginModal.jsx @@ -1,7 +1,7 @@ import { useState } from 'react' import { login } from '../api' -export default function Login({ onLogin }) { +export default function LoginModal({ onLogin, onClose }) { const [username, setUsername] = useState('') const [password, setPassword] = useState('') const [error, setError] = useState('') @@ -9,60 +9,58 @@ export default function Login({ onLogin }) { const handleSubmit = async (e) => { e.preventDefault() - setLoading(true) setError('') + setLoading(true) try { const { token } = await login(username, password) onLogin(token) + onClose() } catch (err) { - setError('Invalid username or password') + setError(err.message || 'Login failed') } finally { setLoading(false) } } return ( -
-
-
-

Gameserver Monitor

-

Sign in to your account

+
+
e.stopPropagation()}> +
+

Sign in

+
- -
+
{error && ( -
+
{error}
)} -
- +
+ setUsername(e.target.value)} className="input" - placeholder="Enter your username" + placeholder="Enter username" required autoFocus />
-
- +
+ setPassword(e.target.value)} className="input" - placeholder="Enter your password" + placeholder="Enter password" required />
@@ -76,10 +74,6 @@ export default function Login({ onLogin }) {
- -

- Gameserver Monitor v2.0 -

) diff --git a/temp/MetricsChart.jsx b/gsm-frontend/src/components/MetricsChart.jsx similarity index 69% rename from temp/MetricsChart.jsx rename to gsm-frontend/src/components/MetricsChart.jsx index 87cbca4..e76c453 100644 --- a/temp/MetricsChart.jsx +++ b/gsm-frontend/src/components/MetricsChart.jsx @@ -41,9 +41,9 @@ export default function MetricsChart({ serverId, serverName, expanded = false }) if (loading) { return ( -
+
- LOADING_METRICS... + Loading metrics...
) @@ -51,9 +51,9 @@ export default function MetricsChart({ serverId, serverName, expanded = false }) if (!data || data.cpu.length === 0) { return ( -
+
- NO_DATA_AVAILABLE + No data available
) @@ -70,12 +70,12 @@ export default function MetricsChart({ serverId, serverName, expanded = false }) const CustomTooltip = ({ active, payload, label }) => { if (active && payload && payload.length) { return ( -
-
{formatTime(label)}
+
+
{formatTime(label)}
{payload.map((entry, i) => (
{entry.name}: - + {entry.name.includes('Network') ? formatBytes(entry.value) : entry.value.toFixed(1) + '%'}
@@ -87,10 +87,10 @@ export default function MetricsChart({ serverId, serverName, expanded = false }) } const ChartCard = ({ title, dataKey, color, domain, formatter }) => ( -
+
- {title} - + {title} + {formatter ? formatter(combinedData[combinedData.length - 1]?.[dataKey] || 0) : (combinedData[combinedData.length - 1]?.[dataKey] || 0).toFixed(1) + '%' @@ -101,7 +101,7 @@ export default function MetricsChart({ serverId, serverName, expanded = false }) - + @@ -110,15 +110,15 @@ export default function MetricsChart({ serverId, serverName, expanded = false }) formatBytes(v).split(' ')[0] : (v) => v.toFixed(0)} @@ -145,28 +145,25 @@ export default function MetricsChart({ serverId, serverName, expanded = false })
{/* Header */}
- - // METRICS_HISTORY - + Metrics History
- 📊 - GRAFANA + Grafana
@@ -174,17 +171,17 @@ export default function MetricsChart({ serverId, serverName, expanded = false }) {/* Charts */} {expanded ? (
- - + +
- - + +
) : (
- - + +
)}
diff --git a/gsm-frontend/src/components/ServerCard.jsx b/gsm-frontend/src/components/ServerCard.jsx new file mode 100644 index 0000000..db8d6ef --- /dev/null +++ b/gsm-frontend/src/components/ServerCard.jsx @@ -0,0 +1,190 @@ +const serverInfo = { + minecraft: { + address: 'minecraft.dimension47.de', + logo: '/minecraft.png', + links: [ + { label: 'ATM10 Modpack', url: 'https://www.curseforge.com/minecraft/modpacks/all-the-mods-10' } + ] + }, + factorio: { + hint: 'Serverpasswort: affe', + address: 'factorio.dimension47.de', + logo: '/factorio.png', + links: [ + { label: 'Steam', url: 'https://store.steampowered.com/app/427520/Factorio/' } + ] + }, + vrising: { + address: 'Zeasy Software Vampire', + logo: '/vrising.png', + links: [ + { label: 'Steam', url: 'https://store.steampowered.com/app/1604030/V_Rising/' } + ] + } +} + +const getServerInfo = (serverName) => { + const name = serverName.toLowerCase() + if (name.includes('minecraft') || name.includes('all the mods')) return serverInfo.minecraft + if (name.includes('factorio')) return serverInfo.factorio + if (name.includes('vrising') || name.includes('v rising')) return serverInfo.vrising + return null +} + +export default function ServerCard({ server, onClick, isAuthenticated }) { + const info = getServerInfo(server.name) + + const formatUptime = (seconds) => { + const hours = Math.floor(seconds / 3600) + if (hours > 24) { + const days = Math.floor(hours / 24) + return days + 'd ' + (hours % 24) + 'h' + } + const minutes = Math.floor((seconds % 3600) / 60) + return hours + 'h ' + minutes + 'm' + } + + const cpuPercent = Math.min(server.metrics.cpu, 100) + const memPercent = Math.min(server.metrics.memory, 100) + + const getProgressColor = (percent) => { + if (percent > 80) return 'progress-bar-danger' + if (percent > 60) return 'progress-bar-warning' + return 'progress-bar-success' + } + + const getStatusBadge = () => { + const status = server.status || (server.running ? 'online' : 'offline') + switch (status) { + case 'online': + return { class: 'badge badge-success', text: 'Online' } + case 'starting': + return { class: 'badge badge-warning', text: 'Starting...' } + case 'stopping': + return { class: 'badge badge-warning', text: 'Stopping...' } + default: + return { class: 'badge badge-destructive', text: 'Offline' } + } + } + + const statusBadge = getStatusBadge() + + return ( +
+ {/* Header */} +
+
+ {info && info.logo && } +

{server.name}

+
+ + {statusBadge.text} + +
+ + {/* Server Address & Links */} + {info && ( + + )} + + {/* Whitelist notice for Minecraft - only for authenticated users */} + {isAuthenticated && server.type === 'minecraft' && ( +
+ Whitelist erforderlich - im Whitelist-Tab freischalten +
+ )} + + {/* Factorio notice - only for authenticated users */} + {isAuthenticated && server.type === 'factorio' && ( +
+ Serverpasswort: affe +
+ )} + + {/* V Rising notice - only for authenticated users */} + {isAuthenticated && server.type === 'vrising' && ( +
+ In der Serverliste suchen - Passwort: affe +
+ )} + + {/* Metrics */} +
+ {/* CPU */} +
+
+ CPU + {server.metrics.cpu.toFixed(1)}% +
+
+
+
+
+ + {/* RAM */} +
+
+ Memory + + {server.metrics.memoryUsed?.toFixed(1) || 0} / {server.metrics.memoryTotal?.toFixed(1) || 0} {server.metrics.memoryUnit} + +
+
+
+
+
+
+ + {/* Footer Stats */} +
+
+ {server.players.online} + {server.players.max ? ' / ' + server.players.max : ''} players +
+ {server.running && ( +
+ Uptime: {formatUptime(server.metrics.uptime)} +
+ )} +
+ + {/* Players List */} + {server.players?.list?.length > 0 && ( +
+
+ {server.players.list.map((player, i) => ( + + {player} + + ))} +
+
+ )} +
+ ) +} diff --git a/temp/ServerDetailModal.jsx b/gsm-frontend/src/components/ServerDetailModal.jsx similarity index 96% rename from temp/ServerDetailModal.jsx rename to gsm-frontend/src/components/ServerDetailModal.jsx index bf93c83..5154ce2 100644 --- a/temp/ServerDetailModal.jsx +++ b/gsm-frontend/src/components/ServerDetailModal.jsx @@ -2,6 +2,7 @@ import { useState, useEffect, useRef } from 'react' import { serverAction, sendRcon, getServerLogs } from '../api' import { useUser } from '../context/UserContext' import MetricsChart from './MetricsChart' +import FactorioWorldManager from './FactorioWorldManager' export default function ServerDetailModal({ server, onClose, onUpdate }) { const { token, isModerator } = useUser() @@ -95,6 +96,7 @@ export default function ServerDetailModal({ server, onClose, onUpdate }) { ...(isModerator ? [ { id: 'console', label: 'CONSOLE', icon: '💻' }, { id: 'logs', label: 'LOGS', icon: '📜' }, + ...(server.type === 'factorio' ? [{ id: 'worlds', label: 'WORLDS', icon: '🌍' }] : []), ] : []), ] @@ -301,6 +303,15 @@ export default function ServerDetailModal({ server, onClose, onUpdate }) {
)} + + {/* Worlds Tab (Factorio only) */} + {activeTab === 'worlds' && isModerator && server.type === 'factorio' && ( + + )}
{/* Footer */} diff --git a/gsm-frontend/src/components/SettingsModal.jsx b/gsm-frontend/src/components/SettingsModal.jsx new file mode 100644 index 0000000..8b7c2c4 --- /dev/null +++ b/gsm-frontend/src/components/SettingsModal.jsx @@ -0,0 +1,120 @@ +import { useState } from 'react' +import { useUser } from '../context/UserContext' +import { changePassword } from '../api' + +export default function SettingsModal({ onClose }) { + const { user } = useUser() + const [currentPassword, setCurrentPassword] = useState('') + const [newPassword, setNewPassword] = useState('') + const [confirmPassword, setConfirmPassword] = useState('') + const [error, setError] = useState('') + const [success, setSuccess] = useState('') + const [loading, setLoading] = useState(false) + + const handleChangePassword = async (e) => { + e.preventDefault() + setError('') + setSuccess('') + + if (newPassword !== confirmPassword) { + setError('Passwords do not match') + return + } + + if (newPassword.length < 6) { + setError('Password must be at least 6 characters') + return + } + + setLoading(true) + try { + await changePassword(currentPassword, newPassword) + setSuccess('Password changed successfully') + setCurrentPassword('') + setNewPassword('') + setConfirmPassword('') + } catch (err) { + setError(err.message || 'Failed to change password') + } finally { + setLoading(false) + } + } + + return ( +
+
e.stopPropagation()}> +
+

Settings

+ +
+ +
+
+

Account

+
+
+ Username + {user?.username} +
+
+
+ +
+

Change Password

+
+ {error && ( +
{error}
+ )} + {success && ( +
{success}
+ )} + +
+ + setCurrentPassword(e.target.value)} + className="input" + required + /> +
+ +
+ + setNewPassword(e.target.value)} + className="input" + required + /> +
+ +
+ + setConfirmPassword(e.target.value)} + className="input" + required + /> +
+ + +
+
+
+
+
+ ) +} diff --git a/gsm-frontend/src/components/UserManagement.jsx b/gsm-frontend/src/components/UserManagement.jsx new file mode 100644 index 0000000..ee45a0c --- /dev/null +++ b/gsm-frontend/src/components/UserManagement.jsx @@ -0,0 +1,235 @@ +import { useState, useEffect } from 'react' +import { useUser } from '../context/UserContext' +import { getUsers, createUser, updateUserRole, updateUserPassword, deleteUser } from '../api' + +export default function UserManagement({ onClose }) { + const { token } = useUser() + const [users, setUsers] = useState([]) + const [loading, setLoading] = useState(true) + const [error, setError] = useState('') + const [showAddUser, setShowAddUser] = useState(false) + const [editingUser, setEditingUser] = useState(null) + + // Form state + const [username, setUsername] = useState('') + const [password, setPassword] = useState('') + const [role, setRole] = useState('user') + const [formLoading, setFormLoading] = useState(false) + const [formError, setFormError] = useState('') + + const fetchUsers = async () => { + try { + const data = await getUsers(token) + setUsers(data) + setError('') + } catch (err) { + setError('Failed to load users') + } finally { + setLoading(false) + } + } + + useEffect(() => { + fetchUsers() + }, [token]) + + const resetForm = () => { + setUsername('') + setPassword('') + setRole('user') + setFormError('') + setShowAddUser(false) + setEditingUser(null) + } + + const handleAddUser = async (e) => { + e.preventDefault() + setFormError('') + setFormLoading(true) + + try { + await createUser(token, { username, password, role }) + await fetchUsers() + resetForm() + } catch (err) { + setFormError(err.message || 'Failed to create user') + } finally { + setFormLoading(false) + } + } + + const handleUpdateUser = async (e) => { + e.preventDefault() + setFormError('') + setFormLoading(true) + + try { + // Update role if changed + if (role !== editingUser.role) { + await updateUserRole(token, editingUser.id, role) + } + // Update password if provided + if (password) { + await updateUserPassword(token, editingUser.id, password) + } + await fetchUsers() + resetForm() + } catch (err) { + setFormError(err.message || 'Failed to update user') + } finally { + setFormLoading(false) + } + } + + const handleDeleteUser = async (userId) => { + if (!confirm('Are you sure you want to delete this user?')) return + + try { + await deleteUser(token, userId) + await fetchUsers() + } catch (err) { + setError(err.message || 'Failed to delete user') + } + } + + const startEdit = (user) => { + setEditingUser(user) + setUsername(user.username) + setRole(user.role) + setPassword('') + setShowAddUser(false) + } + + const roleLabels = { + user: 'Viewer', + moderator: 'Operator', + superadmin: 'Admin' + } + + return ( +
+
e.stopPropagation()}> +
+

User Management

+ +
+ +
+ {error && ( +
{error}
+ )} + + {/* User List */} + {loading ? ( +
Loading users...
+ ) : ( +
+ {users.map((user) => ( +
+
+
{user.username}
+
{roleLabels[user.role]}
+
+
+ + +
+
+ ))} +
+ )} + + {/* Add/Edit Form */} + {(showAddUser || editingUser) ? ( +
+
+

+ {editingUser ? 'Edit User' : 'Add New User'} +

+ + {formError && ( +
{formError}
+ )} + + {!editingUser && ( +
+ + setUsername(e.target.value)} + className="input" + required + /> +
+ )} + +
+ + setPassword(e.target.value)} + className="input" + required={!editingUser} + /> +
+ +
+ + +
+ +
+ + +
+
+
+ ) : ( + + )} +
+
+
+ ) +} diff --git a/gsm-frontend/src/components/WorldGenForm.jsx b/gsm-frontend/src/components/WorldGenForm.jsx new file mode 100644 index 0000000..36fafe5 --- /dev/null +++ b/gsm-frontend/src/components/WorldGenForm.jsx @@ -0,0 +1,370 @@ +import { useState } from 'react' + +const SLIDER_VALUES = [0, 0.167, 0.5, 1, 2, 3] +const SLIDER_LABELS = ['None', 'Very Low', 'Low', 'Normal', 'High', 'Very High'] + +function valueToSlider(value) { + if (value === 0 || value === undefined) return 0 + if (value <= 0.167) return 1 + if (value <= 0.5) return 2 + if (value <= 1) return 3 + if (value <= 2) return 4 + return 5 +} + +function sliderToValue(index) { + return SLIDER_VALUES[index] +} + +function ValueSelect({ value, onChange }) { + const index = valueToSlider(value) + return ( + + ) +} + +function ResourceRow({ label, settings, onChange }) { + const freq = settings?.frequency ?? 1 + const size = settings?.size ?? 1 + const richness = settings?.richness ?? 1 + + return ( +
+
{label}
+ onChange({ ...settings, frequency: v })} /> + onChange({ ...settings, size: v })} /> + onChange({ ...settings, richness: v })} /> +
+ ) +} + +function SimpleSlider({ label, value, onChange }) { + const sliderIndex = valueToSlider(value) + + return ( +
+
{label}
+ onChange(sliderToValue(parseInt(e.target.value)))} + className="slider flex-1 max-w-48" + /> + {SLIDER_LABELS[sliderIndex]} +
+ ) +} + +function EvolutionSlider({ label, value, onChange }) { + const displayValue = (value * 100).toFixed(0) + + return ( +
+
{label}
+ onChange(parseInt(e.target.value) / 100)} + className="slider flex-1 max-w-48" + /> + {displayValue}% +
+ ) +} + +export default function WorldGenForm({ + settings, + onSettingsChange, + presets, + templates, + onLoadPreset, + onLoadTemplate, + onSaveTemplate +}) { + const [selectedPreset, setSelectedPreset] = useState('default') + const [templateName, setTemplateName] = useState('') + const [showSaveTemplate, setShowSaveTemplate] = useState(false) + + const handlePresetChange = (presetName) => { + setSelectedPreset(presetName) + onLoadPreset(presetName) + } + + const handleSaveTemplate = () => { + if (templateName.trim()) { + onSaveTemplate(templateName.trim()) + setTemplateName('') + setShowSaveTemplate(false) + } + } + + const updateAutoplace = (key, value) => { + onSettingsChange({ + ...settings, + autoplace_controls: { + ...settings.autoplace_controls, + [key]: value + } + }) + } + + const updateCliff = (key, value) => { + onSettingsChange({ + ...settings, + cliff_settings: { + ...settings.cliff_settings, + [key]: value + } + }) + } + + const updateProperty = (key, value) => { + onSettingsChange({ + ...settings, + property_expression_names: { + ...settings.property_expression_names, + [key]: value + } + }) + } + + return ( +
+ {/* Preset & Template Selection */} +
+
+
+ Preset: + +
+ + {templates?.length > 0 && ( +
+ Template: + +
+ )} + + +
+ + {showSaveTemplate && ( +
+ setTemplateName(e.target.value)} + placeholder="Template name..." + className="input flex-1" + /> + + +
+ )} +
+ + {/* Terrain Section */} +
+

Terrain

+ + updateAutoplace('water', { frequency: v, size: v })} + /> + updateAutoplace('trees', { frequency: v, size: v, richness: v })} + /> + updateCliff('richness', v)} + /> + onSettingsChange({ ...settings, starting_area: v })} + /> +
+ + {/* Resources Section */} +
+

Resources

+ +
+
+
Frequency
+
Size
+
Richness
+
+ + updateAutoplace('iron-ore', v)} + /> + updateAutoplace('copper-ore', v)} + /> + updateAutoplace('coal', v)} + /> + updateAutoplace('stone', v)} + /> + updateAutoplace('uranium-ore', v)} + /> + updateAutoplace('crude-oil', v)} + /> +
+ + {/* Enemies Section */} +
+

Enemies

+ +
+
+
Frequency
+
Size
+
Richness
+
+ + updateAutoplace('enemy-base', v)} + /> + +
+ +
+
+ + {/* Evolution Section */} +
+

Evolution

+ + updateProperty('enemy-evolution-factor-by-time', v)} + /> + updateProperty('enemy-evolution-factor-by-pollution', v)} + /> + updateProperty('enemy-evolution-factor-by-killing-spawners', v)} + /> +
+ + {/* Advanced Section */} +
+

Advanced

+ +
+
+ + onSettingsChange({ ...settings, seed: e.target.value ? parseInt(e.target.value) : null })} + placeholder="Random" + className="input" + /> +
+
+
+ + onSettingsChange({ ...settings, width: parseInt(e.target.value) || 0 })} + className="input" + /> +
+
+ + onSettingsChange({ ...settings, height: parseInt(e.target.value) || 0 })} + className="input" + /> +
+
+
+
+
+ ) +} diff --git a/gsm-frontend/src/context/UserContext.jsx b/gsm-frontend/src/context/UserContext.jsx new file mode 100644 index 0000000..1bbd94f --- /dev/null +++ b/gsm-frontend/src/context/UserContext.jsx @@ -0,0 +1,50 @@ +import { createContext, useContext, useState, useEffect } from 'react' +import { getMe } from '../api' + +const UserContext = createContext(null) + +export function UserProvider({ children, token, onLogout }) { + const [user, setUser] = useState(null) + const [loading, setLoading] = useState(true) + + useEffect(() => { + if (!token) { + setUser(null) + setLoading(false) + return + } + + getMe(token) + .then(data => { + setUser(data) + setLoading(false) + }) + .catch(() => { + onLogout() + setLoading(false) + }) + }, [token]) + + const value = { + user, + token, + loading, + role: user?.role || 'user', + isModerator: ['moderator', 'superadmin'].includes(user?.role), + isSuperadmin: user?.role === 'superadmin' + } + + return ( + + {children} + + ) +} + +export function useUser() { + const context = useContext(UserContext) + if (!context) { + throw new Error('useUser must be used within UserProvider') + } + return context +} diff --git a/gsm-frontend/src/index.css b/gsm-frontend/src/index.css new file mode 100644 index 0000000..34db70c --- /dev/null +++ b/gsm-frontend/src/index.css @@ -0,0 +1,641 @@ +@import "tailwindcss"; + +* { + scrollbar-width: thin; + scrollbar-color: #404040 #171717; +} + +*::-webkit-scrollbar { + width: 8px; +} + +*::-webkit-scrollbar-track { + background: #171717; +} + +*::-webkit-scrollbar-thumb { + background: #404040; + border-radius: 4px; +} + +*::-webkit-scrollbar-thumb:hover { + background: #525252; +} + +body { + background-color: #0a0a0a; + color: #fafafa; + font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; +} + +/* Buttons */ +button { + background: transparent; +} + +.btn { + display: inline-flex; + align-items: center; + justify-content: center; + gap: 0.5rem; + border-radius: 0.375rem; + font-size: 0.875rem; + font-weight: 500; + padding: 0.5rem 1rem; + transition: all 0.15s ease; + cursor: pointer; + border: none; +} + +.btn:disabled { + opacity: 0.5; + cursor: not-allowed; +} + +.btn-primary { + background-color: #fafafa; + color: #0a0a0a; +} + +.btn-primary:hover:not(:disabled) { + background-color: #e5e5e5; +} + +.btn-secondary { + background-color: #262626; + color: #fafafa; +} + +.btn-secondary:hover:not(:disabled) { + background-color: #363636; +} + +.btn-destructive { + background-color: #dc2626; + color: #fafafa; +} + +.btn-destructive:hover:not(:disabled) { + background-color: #b91c1c; +} + +.btn-outline { + background: transparent; + border: 1px solid #404040; + color: #fafafa; +} + +.btn-outline:hover:not(:disabled) { + background-color: #262626; + border-color: #525252; +} + +.btn-ghost { + background: transparent; + color: #a3a3a3; +} + +.btn-ghost:hover:not(:disabled) { + background-color: #262626; + color: #fafafa; +} + +/* Cards */ +.card { + background-color: #171717; + border: 1px solid #262626; + border-radius: 0.5rem; +} + +.card-clickable { + cursor: pointer; + transition: all 0.15s ease; +} + +.card-clickable:hover { + background-color: #1c1c1c; + border-color: #404040; +} + +/* Inputs */ +.input { + display: flex; + width: 100%; + border-radius: 0.375rem; + border: 1px solid #404040; + background-color: #171717; + color: #fafafa; + padding: 0.625rem 0.875rem; + font-size: 0.875rem; + transition: border-color 0.15s ease, box-shadow 0.15s ease; +} + +.input:focus { + outline: none; + border-color: #737373; + box-shadow: 0 0 0 2px rgba(115, 115, 115, 0.2); +} + +.input::placeholder { + color: #737373; +} + +/* Select */ +.select { + display: flex; + border-radius: 0.375rem; + border: 1px solid #404040; + background-color: #171717; + color: #fafafa; + padding: 0.5rem 0.75rem; + font-size: 0.875rem; + cursor: pointer; + transition: border-color 0.15s ease; +} + +.select:focus { + outline: none; + border-color: #737373; +} + +.select option { + background-color: #171717; + color: #fafafa; +} + +/* Badges */ +.badge { + display: inline-flex; + align-items: center; + border-radius: 9999px; + padding: 0.25rem 0.75rem; + font-size: 0.75rem; + font-weight: 500; +} + +.badge-success { + background-color: #14532d; + color: #86efac; +} + +.badge-destructive { + background-color: #450a0a; + color: #fca5a5; +} + +.badge-secondary { + background-color: #262626; + color: #a3a3a3; +} + +.badge-warning { + background-color: #422006; + color: #fcd34d; +} + +/* Progress */ +.progress { + height: 0.5rem; + background-color: #262626; + border-radius: 9999px; + overflow: hidden; +} + +.progress-bar { + height: 100%; + background-color: #fafafa; + border-radius: 9999px; + transition: width 0.3s ease; +} + +.progress-bar-success { + background-color: #22c55e; +} + +.progress-bar-warning { + background-color: #eab308; +} + +.progress-bar-danger { + background-color: #ef4444; +} + +/* Tabs */ +.tabs { + display: flex; + gap: 0.25rem; + border-bottom: 1px solid #262626; +} + +.tab { + padding: 0.75rem 1rem; + font-size: 0.875rem; + font-weight: 500; + color: #737373; + border-bottom: 2px solid transparent; + margin-bottom: -1px; + cursor: pointer; + transition: all 0.15s ease; + background: transparent; +} + +.tab:hover { + color: #a3a3a3; +} + +.tab-active { + color: #fafafa; + border-bottom-color: #fafafa; +} + +/* Status */ +.status-dot { + width: 0.5rem; + height: 0.5rem; + border-radius: 9999px; +} + +.status-online { + background-color: #22c55e; +} + +.status-offline { + background-color: #ef4444; +} + +/* Terminal/Logs */ +.terminal { + background-color: #0a0a0a; + border: 1px solid #262626; + border-radius: 0.375rem; + font-family: 'JetBrains Mono', 'Fira Code', ui-monospace, monospace; +} + +.logs-container { + height: 320px; + max-height: 320px; + min-height: 320px; + overflow-y: scroll; +} + +/* Layout */ +.container-main { + max-width: 1200px; + margin-left: auto; + margin-right: auto; + padding-left: 1.5rem; + padding-right: 1.5rem; +} + +/* Utilities */ +.gap-6 { + gap: 1.5rem; +} + +.gap-8 { + gap: 2rem; +} + +/* Animations */ +@keyframes fadeIn { + from { opacity: 0; } + to { opacity: 1; } +} + +@keyframes fadeInUp { + from { + opacity: 0; + transform: translateY(10px); + } + to { + opacity: 1; + transform: translateY(0); + } +} + +@keyframes fadeInScale { + from { + opacity: 0; + transform: scale(0.95); + } + to { + opacity: 1; + transform: scale(1); + } +} + +@keyframes slideInRight { + from { + opacity: 0; + transform: translateX(20px); + } + to { + opacity: 1; + transform: translateX(0); + } +} + +@keyframes slideInLeft { + from { + opacity: 0; + transform: translateX(-20px); + } + to { + opacity: 1; + transform: translateX(0); + } +} + +.fade-in { + animation: fadeIn 0.2s ease-out; +} + +.fade-in-up { + animation: fadeInUp 0.3s ease-out; +} + +.fade-in-scale { + animation: fadeInScale 0.2s ease-out; +} + +.slide-in-right { + animation: slideInRight 0.3s ease-out; +} + +.slide-in-left { + animation: slideInLeft 0.3s ease-out; +} + +/* Page transitions */ +.page-enter { + animation: fadeInUp 0.3s ease-out; +} + +/* Tab content transitions */ +.tab-content { + animation: fadeIn 0.2s ease-out; +} + +/* Modal */ +.modal-backdrop { + position: fixed; + inset: 0; + background-color: rgba(0, 0, 0, 0.8); + backdrop-filter: blur(4px); + display: flex; + align-items: center; + justify-content: center; + z-index: 50; +} + +.modal { + background-color: #171717; + border: 1px solid #262626; + border-radius: 0.5rem; + width: 100%; + max-width: 28rem; + max-height: 90vh; + overflow-y: auto; +} + +.modal-header { + display: flex; + align-items: center; + justify-content: space-between; + padding: 1rem 1.5rem; + border-bottom: 1px solid #262626; +} + +.modal-title { + font-size: 1.125rem; + font-weight: 600; + color: #fafafa; +} + +.modal-body { + padding: 1.5rem; +} + +.modal-footer { + display: flex; + justify-content: flex-end; + gap: 0.75rem; + padding: 1rem 1.5rem; + border-top: 1px solid #262626; +} + +/* Form */ +.form-group { + margin-bottom: 1rem; +} + +.form-label { + display: block; + font-size: 0.875rem; + font-weight: 500; + color: #a3a3a3; + margin-bottom: 0.5rem; +} + +/* Table */ +.table { + width: 100%; + border-collapse: collapse; +} + +.table th, +.table td { + padding: 0.75rem 1rem; + text-align: left; + border-bottom: 1px solid #262626; +} + +.table th { + font-size: 0.75rem; + font-weight: 500; + color: #737373; + text-transform: uppercase; + letter-spacing: 0.05em; +} + +.table td { + font-size: 0.875rem; + color: #fafafa; +} + +.table tbody tr:hover { + background-color: #1c1c1c; +} + +/* Alert */ +.alert { + padding: 0.75rem 1rem; + border-radius: 0.375rem; + font-size: 0.875rem; +} + +.alert-error { + background-color: rgba(239, 68, 68, 0.1); + border: 1px solid rgba(239, 68, 68, 0.2); + color: #fca5a5; +} + +.alert-success { + background-color: rgba(34, 197, 94, 0.1); + border: 1px solid rgba(34, 197, 94, 0.2); + color: #86efac; +} + +/* Slider */ +.slider { + -webkit-appearance: none; + appearance: none; + width: 100%; + height: 4px; + background: #404040; + border-radius: 2px; + outline: none; + cursor: pointer; +} + +.slider::-webkit-slider-thumb { + -webkit-appearance: none; + appearance: none; + width: 14px; + height: 14px; + background: #fafafa; + border-radius: 50%; + cursor: pointer; + transition: transform 0.15s ease; +} + +.slider::-webkit-slider-thumb:hover { + transform: scale(1.15); +} + +.slider::-moz-range-thumb { + width: 14px; + height: 14px; + background: #fafafa; + border: none; + border-radius: 50%; + cursor: pointer; +} + +/* Matrix Theme Styles */ +.btn-matrix { + display: inline-flex; + align-items: center; + justify-content: center; + font-family: ui-monospace, SFMono-Regular, monospace; + border: 1px solid #00ff41; + background: transparent; + color: #00ff41; + cursor: pointer; + transition: all 0.2s ease; +} + +.btn-matrix:hover:not(:disabled) { + background: rgba(0, 255, 65, 0.1); + box-shadow: 0 0 10px rgba(0, 255, 65, 0.3); +} + +.btn-matrix:disabled { + opacity: 0.5; + cursor: not-allowed; +} + +.btn-matrix-solid { + display: inline-flex; + align-items: center; + justify-content: center; + font-family: ui-monospace, SFMono-Regular, monospace; + border: 1px solid #00ff41; + background: rgba(0, 255, 65, 0.2); + color: #00ff41; + cursor: pointer; + transition: all 0.2s ease; +} + +.btn-matrix-solid:hover:not(:disabled) { + background: rgba(0, 255, 65, 0.3); + box-shadow: 0 0 15px rgba(0, 255, 65, 0.4); +} + +.btn-matrix-solid:disabled { + opacity: 0.5; + cursor: not-allowed; +} + +.input-matrix { + border: 1px solid rgba(0, 255, 65, 0.3); + background: rgba(0, 0, 0, 0.5); + color: #00ff41; + font-family: ui-monospace, SFMono-Regular, monospace; + transition: border-color 0.2s ease, box-shadow 0.2s ease; +} + +.input-matrix:focus { + outline: none; + border-color: #00ff41; + box-shadow: 0 0 10px rgba(0, 255, 65, 0.2); +} + +.input-matrix::placeholder { + color: rgba(0, 255, 65, 0.4); +} + +.glow-green { + text-shadow: 0 0 10px rgba(0, 255, 65, 0.5); +} + +.glow-box { + box-shadow: 0 0 20px rgba(0, 255, 65, 0.2); +} + +.slider-matrix { + -webkit-appearance: none; + appearance: none; + width: 100%; + height: 4px; + background: rgba(0, 255, 65, 0.2); + border-radius: 2px; + outline: none; + cursor: pointer; +} + +.slider-matrix::-webkit-slider-thumb { + -webkit-appearance: none; + appearance: none; + width: 14px; + height: 14px; + background: #00ff41; + border-radius: 50%; + cursor: pointer; + box-shadow: 0 0 8px rgba(0, 255, 65, 0.5); + transition: transform 0.15s ease, box-shadow 0.15s ease; +} + +.slider-matrix::-webkit-slider-thumb:hover { + transform: scale(1.2); + box-shadow: 0 0 12px rgba(0, 255, 65, 0.7); +} + +.slider-matrix::-moz-range-thumb { + width: 14px; + height: 14px; + background: #00ff41; + border: none; + border-radius: 50%; + cursor: pointer; + box-shadow: 0 0 8px rgba(0, 255, 65, 0.5); +} + +.metric-value { + transition: text-shadow 0.3s ease; +} + +.metric-value:hover { + text-shadow: 0 0 15px rgba(0, 255, 65, 0.7); +} +/* 04 Jan 2026 23:35:31 */ diff --git a/gsm-frontend/src/main.jsx b/gsm-frontend/src/main.jsx new file mode 100644 index 0000000..b9a1a6d --- /dev/null +++ b/gsm-frontend/src/main.jsx @@ -0,0 +1,10 @@ +import { StrictMode } from 'react' +import { createRoot } from 'react-dom/client' +import './index.css' +import App from './App.jsx' + +createRoot(document.getElementById('root')).render( + + + , +) diff --git a/gsm-frontend/src/pages/Dashboard.jsx b/gsm-frontend/src/pages/Dashboard.jsx new file mode 100644 index 0000000..f363b78 --- /dev/null +++ b/gsm-frontend/src/pages/Dashboard.jsx @@ -0,0 +1,168 @@ +import { useState, useEffect } from 'react' +import { useNavigate } from 'react-router-dom' +import { getServers } from '../api' +import { useUser } from '../context/UserContext' +import ServerCard from '../components/ServerCard' +import SettingsModal from '../components/SettingsModal' +import UserManagement from '../components/UserManagement' +import LoginModal from '../components/LoginModal' + +export default function Dashboard({ onLogin, onLogout }) { + const navigate = useNavigate() + const { user, token, loading: userLoading, isSuperadmin, role } = useUser() + const [servers, setServers] = useState([]) + const [loading, setLoading] = useState(true) + const [error, setError] = useState('') + const [showSettings, setShowSettings] = useState(false) + const [showUserMgmt, setShowUserMgmt] = useState(false) + const [showLogin, setShowLogin] = useState(false) + + const isAuthenticated = !!token + + const fetchServers = async () => { + try { + const data = await getServers(token) + setServers(data) + setError('') + } catch (err) { + if (err.message.includes('401') || err.message.includes('403')) { + if (isAuthenticated) { + onLogout() + } + } else { + setError('Failed to connect to server') + } + } finally { + setLoading(false) + } + } + + useEffect(() => { + if (!userLoading) { + fetchServers() + const interval = setInterval(fetchServers, 10000) + return () => clearInterval(interval) + } + }, [token, userLoading]) + + const roleLabels = { + user: 'Viewer', + moderator: 'Operator', + superadmin: 'Admin' + } + + if (userLoading) { + return ( +
+
Loading...
+
+ ) + } + + const onlineCount = servers.filter(s => s.running).length + document.title = 'Dashboard | Zeasy GSM' + const totalPlayers = servers.reduce((sum, s) => sum + (s.players?.online || 0), 0) + + return ( +
+ {/* Header */} +
+
+
+
+ LogoLogo + Gameserver Management +
+
+ + {onlineCount}/{servers.length} online + + | + + {totalPlayers} players + +
+
+ {isAuthenticated ? ( + <> +
+
{user?.username}
+
{roleLabels[role]}
+
+ {isSuperadmin && ( + + )} + + + + ) : ( + + )} +
+
+
+
+ + {/* Main Content */} +
+ {error && ( +
+ {error} +
+ )} + {loading ? ( +
+
Loading servers...
+
+ ) : ( +
+ {servers.map((server, index) => ( +
+ navigate('/server/' + server.id)} + isAuthenticated={isAuthenticated} + /> +
+ ))} +
+ )} +
+ + {/* Modals */} + {showSettings && ( + setShowSettings(false)} /> + )} + {showUserMgmt && ( + setShowUserMgmt(false)} /> + )} + {showLogin && ( + setShowLogin(false)} /> + )} +
+ ) +} diff --git a/gsm-frontend/src/pages/ServerDetail.jsx b/gsm-frontend/src/pages/ServerDetail.jsx new file mode 100644 index 0000000..785644c --- /dev/null +++ b/gsm-frontend/src/pages/ServerDetail.jsx @@ -0,0 +1,488 @@ +import { useState, useEffect, useRef } from 'react' +import { useParams, useNavigate } from 'react-router-dom' +import { getServers, serverAction, sendRcon, getServerLogs, getWhitelist, getFactorioCurrentSave } from '../api' +import { useUser } from '../context/UserContext' +import MetricsChart from '../components/MetricsChart' +import FactorioWorldManager from '../components/FactorioWorldManager' + +const getServerLogo = (serverName) => { + const name = serverName.toLowerCase() + if (name.includes("minecraft") || name.includes("all the mods")) return "/minecraft.png" + if (name.includes("factorio")) return "/factorio.png" + if (name.includes("vrising") || name.includes("v rising")) return "/vrising.png" + return null +} +export default function ServerDetail() { + const { serverId } = useParams() + const navigate = useNavigate() + const { token, isModerator } = useUser() + const [server, setServer] = useState(null) + const [loading, setLoading] = useState(true) + + const [activeTab, setActiveTab] = useState('overview') + const [rconCommand, setRconCommand] = useState('') + const [rconHistory, setRconHistory] = useState([]) + const [logs, setLogs] = useState('') + const [whitelistPlayers, setWhitelistPlayers] = useState([]) + + const [whitelistInput, setWhitelistInput] = useState('') + const [whitelistLoading, setWhitelistLoading] = useState(false) + const [currentSave, setCurrentSave] = useState(null) + const logsRef = useRef(null) + const rconRef = useRef(null) + + const fetchCurrentSave = async () => { + if (token && serverId === 'factorio') { + try { + const result = await getFactorioCurrentSave(token) + setCurrentSave(result) + } catch (err) { + console.error('Failed to fetch current save:', err) + } + } + } + + const fetchServer = async () => { + try { + const servers = await getServers(token) + const found = servers.find(s => s.id === serverId) + if (found) { + setServer(found); document.title = found.name + " | Zeasy GSM" + } else { + navigate('/') + } + } catch (err) { + console.error(err) + navigate('/') + } finally { + setLoading(false) + } + } + + useEffect(() => { + fetchServer() + fetchCurrentSave() + const interval = setInterval(fetchServer, 10000) + return () => clearInterval(interval) + }, [token, serverId]) + + const handleAction = async (action) => { + // Immediately set status locally + const newStatus = action === 'start' ? 'starting' : (action === 'stop' ? 'stopping' : 'starting') + setServer(prev => ({ ...prev, status: newStatus })) + try { + await serverAction(token, server.id, action) + setTimeout(() => { + fetchServer() + + }, 2000) + } catch (err) { + console.error(err) + + } + } + + const handleRcon = async (e) => { + e.preventDefault() + if (!rconCommand.trim()) return + const cmd = rconCommand + setRconCommand('') + try { + const { response } = await sendRcon(token, server.id, cmd) + setRconHistory([...rconHistory, { cmd, res: response, time: new Date() }]) + } catch (err) { + setRconHistory([...rconHistory, { cmd, res: 'Error: ' + err.message, time: new Date(), error: true }]) + } + } + + const fetchLogs = async () => { + try { + const data = await getServerLogs(token, server.id, 20) + setLogs(data.logs || '') + if (logsRef.current) { + logsRef.current.scrollTop = logsRef.current.scrollHeight + } + } catch (err) { + console.error(err) + } + } + + useEffect(() => { + if (activeTab === 'console' && isModerator && server) { + fetchLogs() + const interval = setInterval(fetchLogs, 5000) + return () => clearInterval(interval) + } + }, [activeTab, isModerator, server]) + + useEffect(() => { + if (activeTab === 'whitelist' && isModerator && server?.type === 'minecraft') { + fetchWhitelist() + } + }, [activeTab, server]) + + useEffect(() => { + if (rconRef.current) { + rconRef.current.scrollTop = rconRef.current.scrollHeight + } + }, [rconHistory]) + + + const fetchWhitelist = async () => { + if (!server?.hasRcon) return + try { + const { players } = await getWhitelist(token, server.id) + setWhitelistPlayers(players) + } catch (err) { + console.error("Failed to fetch whitelist:", err) + } + } + + const addToWhitelist = async (e) => { + e.preventDefault() + if (!whitelistInput.trim()) return + setWhitelistLoading(true) + try { + await sendRcon(token, server.id, 'whitelist add ' + whitelistInput.trim()) + setWhitelistInput('') + await fetchWhitelist() + } catch (err) { + console.error('Failed to add to whitelist:', err) + } finally { + setWhitelistLoading(false) + } + } + + const removeFromWhitelist = async (player) => { + setWhitelistLoading(true) + try { + await sendRcon(token, server.id, 'whitelist remove ' + player) + await fetchWhitelist() + } catch (err) { + console.error('Failed to remove from whitelist:', err) + } finally { + setWhitelistLoading(false) + } + } + +const formatUptime = (seconds) => { + const days = Math.floor(seconds / 86400) + const hours = Math.floor((seconds % 86400) / 3600) + const minutes = Math.floor((seconds % 3600) / 60) + if (days > 0) return days + 'd ' + hours + 'h ' + minutes + 'm' + return hours + 'h ' + minutes + 'm' + } + + const tabs = [ + { id: 'overview', label: 'Overview' }, + { id: 'metrics', label: 'Metrics' }, + ...(isModerator ? [ + { id: 'console', label: 'Console' }, + ] : []), + ...(isModerator && server?.type === 'minecraft' ? [ + { id: 'whitelist', label: 'Whitelist' }, + ] : []), + ...(isModerator && server?.type === 'factorio' ? [ + { id: 'worlds', label: 'Worlds' }, + ] : []), + ] + + if (loading) { + return ( +
+
Loading...
+
+ ) + } + + if (!server) { + return ( +
+
Server not found
+
+ ) + } + + const cpuPercent = Math.min(server.metrics.cpu, 100) + const memPercent = Math.min(server.metrics.memory, 100) + + const getStatusBadge = () => { + const status = server.status || (server.running ? 'online' : 'offline') + switch (status) { + case 'online': + return { class: 'badge badge-success', text: 'Online' } + case 'starting': + return { class: 'badge badge-warning', text: 'Starting...' } + case 'stopping': + return { class: 'badge badge-warning', text: 'Stopping...' } + default: + return { class: 'badge badge-destructive', text: 'Offline' } + } + } + + const statusBadge = getStatusBadge() + + return ( +
+ {/* Header */} +
+
+
+ +
+
+ {getServerLogo(server.name) && } +

{server.name}

+ + {statusBadge.text} + +
+ {server.running && ( +

+ Uptime: {formatUptime(server.metrics.uptime)} +

+ )} +
+
+ + {/* Tabs */} +
+ {tabs.map((tab) => ( + + ))} +
+
+
+ + {/* Content */} +
+ {/* Overview Tab */} + {activeTab === 'overview' && ( +
+ {/* Stats Grid */} +
+
+
CPU Usage
+
{server.metrics.cpu.toFixed(1)}%
+
+
+
+
+
+
Memory
+
+ {server.metrics.memoryUsed?.toFixed(1)} {server.metrics.memoryUnit} +
+
+ of {server.metrics.memoryTotal?.toFixed(1)} {server.metrics.memoryUnit} +
+
+
+
Players
+
{server.players.online}
+
+ {server.players.max ? 'of ' + server.players.max + ' max' : 'No limit'} +
+
+
+
CPU Cores
+
{server.metrics.cpuCores}
+
+
+ + {/* Players List */} + {server.players?.list?.length > 0 && ( +
+

Online Players

+
+ {server.players.list.map((player, i) => ( + {player} + ))} +
+
+ )} + + {/* Power Controls */} + {isModerator && ( +
+

Server Controls

+ + {/* Factorio: Show which save will be loaded */} + {server.type === 'factorio' && !server.running && currentSave?.save && ( +
+ Will load: {currentSave.save} + {currentSave.source === 'newest' && (newest save)} +
+ )} + +
+ {(server.status === 'online' || (server.running && server.status !== 'starting' && server.status !== 'stopping')) ? ( + <> + + + + ) : ( + + )} +
+
+ )} +
+ )} + + {/* Metrics Tab */} + {activeTab === 'metrics' && ( +
+ )} + + {/* Console Tab - Logs + RCON */} + {activeTab === 'console' && isModerator && ( +
+ {/* Logs */} +
+ Server Logs (last 20 lines) + +
+
+ {logs || 'Loading...'} +
+ + {/* RCON History */} + {rconHistory.length > 0 && ( +
+
RCON History
+ {rconHistory.map((entry, i) => ( +
+
+ [{entry.time.toLocaleTimeString('de-DE')}] > {entry.cmd} +
+
+ {entry.res} +
+
+ ))} +
+ )} + + {/* RCON Input */} + {server.hasRcon && ( +
+ setRconCommand(e.target.value)} + placeholder="RCON command..." + className="input flex-1" + /> + +
+ )} +
+ )} + + {/* Whitelist Tab - Minecraft only */} + {activeTab === 'whitelist' && isModerator && server.type === 'minecraft' && ( +
+
+

Add to Whitelist

+
+ setWhitelistInput(e.target.value)} + placeholder="Minecraft username..." + className="input flex-1" + disabled={whitelistLoading || !server.running} + /> + +
+
+ +
+
+

Whitelisted Players ({whitelistPlayers.length})

+ +
+ {whitelistPlayers.length > 0 ? ( +
+ {whitelistPlayers.map((player, i) => ( +
+ {player} + +
+ ))} +
+ ) : ( +
No players whitelisted
+ )} +
+
+ )} + + {/* Worlds Tab - Factorio only */} + {activeTab === 'worlds' && isModerator && server.type === 'factorio' && ( +
+ {server.running || server.status === 'starting' || server.status === 'stopping' ? ( +
+
World management is locked while the server is running
+
Stop the server to manage saves
+
+ ) : ( + + )} +
+ )} +
+
+ ) +} diff --git a/gsm-frontend/tailwind.config.js b/gsm-frontend/tailwind.config.js new file mode 100644 index 0000000..dca8ba0 --- /dev/null +++ b/gsm-frontend/tailwind.config.js @@ -0,0 +1,11 @@ +/** @type {import('tailwindcss').Config} */ +export default { + content: [ + "./index.html", + "./src/**/*.{js,ts,jsx,tsx}", + ], + theme: { + extend: {}, + }, + plugins: [], +} diff --git a/gsm-frontend/transparent_hellgrau.png b/gsm-frontend/transparent_hellgrau.png new file mode 100644 index 0000000..13398cc Binary files /dev/null and b/gsm-frontend/transparent_hellgrau.png differ diff --git a/gsm-frontend/vite.config.js b/gsm-frontend/vite.config.js new file mode 100644 index 0000000..b3debc2 --- /dev/null +++ b/gsm-frontend/vite.config.js @@ -0,0 +1,11 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' + +export default defineConfig({ + plugins: [react()], + server: { + proxy: { + '/api': 'http://localhost:3000' + } + } +}) diff --git a/temp/Dashboard.jsx b/temp/Dashboard.jsx deleted file mode 100644 index 1710409..0000000 --- a/temp/Dashboard.jsx +++ /dev/null @@ -1,147 +0,0 @@ -import { useState, useEffect } from 'react' -import { useNavigate } from 'react-router-dom' -import { getServers } from '../api' -import { useUser } from '../context/UserContext' -import ServerCard from '../components/ServerCard' -import SettingsModal from '../components/SettingsModal' -import UserManagement from '../components/UserManagement' - -export default function Dashboard({ onLogout }) { - const navigate = useNavigate() - const { user, token, loading: userLoading, isSuperadmin, role } = useUser() - const [servers, setServers] = useState([]) - const [loading, setLoading] = useState(true) - const [error, setError] = useState('') - const [showSettings, setShowSettings] = useState(false) - const [showUserMgmt, setShowUserMgmt] = useState(false) - - const fetchServers = async () => { - try { - const data = await getServers(token) - setServers(data) - setError('') - } catch (err) { - setError('Failed to connect to server') - if (err.message.includes('401') || err.message.includes('403')) { - onLogout() - } - } finally { - setLoading(false) - } - } - - useEffect(() => { - if (!userLoading) { - fetchServers() - const interval = setInterval(fetchServers, 10000) - return () => clearInterval(interval) - } - }, [token, userLoading]) - - const roleLabels = { - user: 'Viewer', - moderator: 'Operator', - superadmin: 'Admin' - } - - if (userLoading) { - return ( -
-
Loading...
-
- ) - } - - const onlineCount = servers.filter(s => s.running).length - const totalPlayers = servers.reduce((sum, s) => sum + (s.players?.online || 0), 0) - - return ( -
- {/* Header */} -
-
-
-
-

- Gameserver Monitor -

-
- - {onlineCount}/{servers.length} online - - | - - {totalPlayers} players - -
-
- -
-
-
{user?.username}
-
{roleLabels[role]}
-
- - {isSuperadmin && ( - - )} - - - - -
-
-
-
- - {/* Main Content */} -
- {error && ( -
- {error} -
- )} - - {loading ? ( -
-
Loading servers...
-
- ) : ( -
- {servers.map((server) => ( - navigate('/server/' + server.id)} - /> - ))} -
- )} -
- - {/* Modals */} - {showSettings && ( - setShowSettings(false)} /> - )} - - {showUserMgmt && ( - setShowUserMgmt(false)} /> - )} -
- ) -} diff --git a/temp/Dashboard_current.jsx b/temp/Dashboard_current.jsx deleted file mode 100644 index 92a3d6a..0000000 --- a/temp/Dashboard_current.jsx +++ /dev/null @@ -1,196 +0,0 @@ -import { useState, useEffect } from 'react' -import { useNavigate } from 'react-router-dom' -import { getServers } from '../api' -import { useUser } from '../context/UserContext' -import ServerCard from '../components/ServerCard' -import SettingsModal from '../components/SettingsModal' -import UserManagement from '../components/UserManagement' - -export default function Dashboard({ onLogout }) { - const navigate = useNavigate() - const { user, token, loading: userLoading, isSuperadmin, role } = useUser() - const [servers, setServers] = useState([]) - const [loading, setLoading] = useState(true) - const [error, setError] = useState('') - const [showSettings, setShowSettings] = useState(false) - const [showUserMgmt, setShowUserMgmt] = useState(false) - const [currentTime, setCurrentTime] = useState(new Date()) - - const fetchServers = async () => { - try { - const data = await getServers(token) - setServers(data) - setError('') - } catch (err) { - setError('CONNECTION_FAILED: Unable to reach server cluster') - if (err.message.includes('401') || err.message.includes('403')) { - onLogout() - } - } finally { - setLoading(false) - } - } - - useEffect(() => { - if (!userLoading) { - fetchServers() - const interval = setInterval(fetchServers, 10000) - return () => clearInterval(interval) - } - }, [token, userLoading]) - - useEffect(() => { - const timer = setInterval(() => setCurrentTime(new Date()), 1000) - return () => clearInterval(timer) - }, []) - - const roleLabels = { - user: 'VIEWER', - moderator: 'OPERATOR', - superadmin: 'SYSADMIN' - } - - if (userLoading) { - return ( -
-
INITIALIZING SYSTEM...
-
- ) - } - - const onlineCount = servers.filter(s => s.running).length - const totalPlayers = servers.reduce((sum, s) => sum + (s.players?.online || 0), 0) - - return ( -
- {/* Matrix rain overlay */} -
- - {/* Header */} -
-
-
-
-

- GAMESERVER_MONITOR -

-
- - - {onlineCount}/{servers.length} NODES - - | - {totalPlayers} USERS_CONNECTED -
-
- -
-
- {currentTime.toLocaleTimeString('de-DE', { hour: '2-digit', minute: '2-digit', second: '2-digit' })} -
- -
-
-
{user?.username?.toUpperCase()}
-
[{roleLabels[role]}]
-
- - {isSuperadmin && ( - - )} - - - - -
-
-
-
-
- -
- {/* System Status Bar */} -
-
- > - SYSTEM_STATUS: {error ? 'ERROR' : 'OPERATIONAL'} -
- {error && ( -
- ! - {error} -
- )} -
- - {loading ? ( -
-
- LOADING_NODES... -
-
- {[...Array(5)].map((_, i) => ( -
- ))} -
-
- ) : ( -
- {servers.map((server, index) => ( -
- navigate(`/server/${server.id}`)} - /> -
- ))} -
- )} - - {/* Footer Stats */} -
-
- REFRESH_RATE: 10s - PROTOCOL: RCON/SSH - METRICS: PROMETHEUS - BUILD: v2.0.0-matrix -
-
-
- - {/* Modals */} - {showSettings && ( - setShowSettings(false)} /> - )} - - {showUserMgmt && ( - setShowUserMgmt(false)} /> - )} -
- ) -} diff --git a/temp/ServerCard.jsx b/temp/ServerCard.jsx deleted file mode 100644 index dfb29c4..0000000 --- a/temp/ServerCard.jsx +++ /dev/null @@ -1,96 +0,0 @@ -export default function ServerCard({ server, onClick }) { - const formatUptime = (seconds) => { - const hours = Math.floor(seconds / 3600) - if (hours > 24) { - const days = Math.floor(hours / 24) - return days + 'd ' + (hours % 24) + 'h' - } - const minutes = Math.floor((seconds % 3600) / 60) - return hours + 'h ' + minutes + 'm' - } - - const cpuPercent = Math.min(server.metrics.cpu, 100) - const memPercent = Math.min(server.metrics.memory, 100) - - const getProgressColor = (percent) => { - if (percent > 80) return 'progress-bar-danger' - if (percent > 60) return 'progress-bar-warning' - return 'progress-bar-success' - } - - return ( -
- {/* Header */} -
-

- {server.name} -

- - {server.running ? 'Online' : 'Offline'} - -
- - {/* Metrics */} -
- {/* CPU */} -
-
- CPU - {server.metrics.cpu.toFixed(1)}% -
-
-
-
-
- - {/* RAM */} -
-
- Memory - - {server.metrics.memoryUsed?.toFixed(1) || 0} / {server.metrics.memoryTotal?.toFixed(1) || 0} {server.metrics.memoryUnit} - -
-
-
-
-
-
- - {/* Footer Stats */} -
-
- {server.players.online} - {server.players.max ? ' / ' + server.players.max : ''} players -
- {server.running && ( -
- Uptime: {formatUptime(server.metrics.uptime)} -
- )} -
- - {/* Players List */} - {server.players?.list?.length > 0 && ( -
-
- {server.players.list.map((player, i) => ( - - {player} - - ))} -
-
- )} -
- ) -} diff --git a/temp/ServerCard_new.jsx b/temp/ServerCard_new.jsx deleted file mode 100644 index 6196258..0000000 --- a/temp/ServerCard_new.jsx +++ /dev/null @@ -1,109 +0,0 @@ -import { useState } from 'react' - -export default function ServerCard({ server, onClick }) { - const [isHovered, setIsHovered] = useState(false) - - const formatUptime = (seconds) => { - const hours = Math.floor(seconds / 3600) - if (hours > 24) { - const days = Math.floor(hours / 24) - return days + 'd ' + (hours % 24) + 'h' - } - const minutes = Math.floor((seconds % 3600) / 60) - return hours + 'h ' + minutes + 'm' - } - - const cpuPercent = Math.min(server.metrics.cpu, 100) - const memPercent = Math.min(server.metrics.memory, 100) - - return ( -
setIsHovered(true)} - onMouseLeave={() => setIsHovered(false)} - > - {/* Header */} -
-

- {server.name.toUpperCase()} -

-
- - - {server.running ? 'ONLINE' : 'OFFLINE'} - -
-
- - {/* CPU & RAM Bars */} -
- {/* CPU */} -
-
- CPU - {server.metrics.cpu.toFixed(1)}% -
-
-
-
-
- - {/* RAM */} -
-
- RAM - - {server.metrics.memoryUsed?.toFixed(1) || 0} / {server.metrics.memoryTotal?.toFixed(1) || 0} {server.metrics.memoryUnit} - -
-
-
-
-
-
- - {/* Stats Row */} -
-
-
{server.players.online}
-
PLAYERS
-
- {server.running && ( -
-
{formatUptime(server.metrics.uptime)}
-
UPTIME
-
- )} -
-
{server.metrics.cpuCores}
-
CORES
-
-
- - {/* Players List */} - {server.players?.list?.length > 0 && ( -
-
- {server.players.list.map((player, i) => ( - - {player} - - ))} -
-
- )} - - {/* Click Indicator */} -
- CLICK FOR DETAILS -
-
- ) -} diff --git a/temp/ServerDetail.jsx b/temp/ServerDetail.jsx deleted file mode 100644 index 895658b..0000000 --- a/temp/ServerDetail.jsx +++ /dev/null @@ -1,323 +0,0 @@ -import { useState, useEffect, useRef } from 'react' -import { useParams, useNavigate } from 'react-router-dom' -import { getServers, serverAction, sendRcon, getServerLogs } from '../api' -import { useUser } from '../context/UserContext' -import MetricsChart from '../components/MetricsChart' - -export default function ServerDetail() { - const { serverId } = useParams() - const navigate = useNavigate() - const { token, isModerator } = useUser() - const [server, setServer] = useState(null) - const [loading, setLoading] = useState(true) - const [actionLoading, setActionLoading] = useState(false) - const [activeTab, setActiveTab] = useState('overview') - const [rconCommand, setRconCommand] = useState('') - const [rconHistory, setRconHistory] = useState([]) - const [logs, setLogs] = useState('') - const logsRef = useRef(null) - const rconRef = useRef(null) - - const fetchServer = async () => { - try { - const servers = await getServers(token) - const found = servers.find(s => s.id === serverId) - if (found) { - setServer(found) - } else { - navigate('/') - } - } catch (err) { - console.error(err) - navigate('/') - } finally { - setLoading(false) - } - } - - useEffect(() => { - fetchServer() - const interval = setInterval(fetchServer, 10000) - return () => clearInterval(interval) - }, [token, serverId]) - - const handleAction = async (action) => { - setActionLoading(true) - try { - await serverAction(token, server.id, action) - setTimeout(() => { - fetchServer() - setActionLoading(false) - }, 2000) - } catch (err) { - console.error(err) - setActionLoading(false) - } - } - - const handleRcon = async (e) => { - e.preventDefault() - if (!rconCommand.trim()) return - const cmd = rconCommand - setRconCommand('') - try { - const { response } = await sendRcon(token, server.id, cmd) - setRconHistory([...rconHistory, { cmd, res: response, time: new Date() }]) - } catch (err) { - setRconHistory([...rconHistory, { cmd, res: 'Error: ' + err.message, time: new Date(), error: true }]) - } - } - - const fetchLogs = async () => { - try { - const data = await getServerLogs(token, server.id, 20) - setLogs(data.logs || '') - if (logsRef.current) { - logsRef.current.scrollTop = logsRef.current.scrollHeight - } - } catch (err) { - console.error(err) - } - } - - useEffect(() => { - if (activeTab === 'logs' && isModerator && server) { - fetchLogs() - const interval = setInterval(fetchLogs, 5000) - return () => clearInterval(interval) - } - }, [activeTab, isModerator, server]) - - useEffect(() => { - if (rconRef.current) { - rconRef.current.scrollTop = rconRef.current.scrollHeight - } - }, [rconHistory]) - - const formatUptime = (seconds) => { - const days = Math.floor(seconds / 86400) - const hours = Math.floor((seconds % 86400) / 3600) - const minutes = Math.floor((seconds % 3600) / 60) - if (days > 0) return days + 'd ' + hours + 'h ' + minutes + 'm' - return hours + 'h ' + minutes + 'm' - } - - const tabs = [ - { id: 'overview', label: 'Overview' }, - { id: 'metrics', label: 'Metrics' }, - ...(isModerator ? [ - { id: 'console', label: 'Console' }, - { id: 'logs', label: 'Logs' }, - ] : []), - ] - - if (loading) { - return ( -
-
Loading...
-
- ) - } - - if (!server) { - return ( -
-
Server not found
-
- ) - } - - const cpuPercent = Math.min(server.metrics.cpu, 100) - const memPercent = Math.min(server.metrics.memory, 100) - - return ( -
- {/* Header */} -
-
-
- -
-
-

{server.name}

- - {server.running ? 'Online' : 'Offline'} - -
- {server.running && ( -

- Uptime: {formatUptime(server.metrics.uptime)} -

- )} -
-
- - {/* Tabs */} -
- {tabs.map((tab) => ( - - ))} -
-
-
- - {/* Content */} -
- {/* Overview Tab */} - {activeTab === 'overview' && ( -
- {/* Stats Grid */} -
-
-
CPU Usage
-
{server.metrics.cpu.toFixed(1)}%
-
-
-
-
-
-
Memory
-
- {server.metrics.memoryUsed?.toFixed(1)} {server.metrics.memoryUnit} -
-
- of {server.metrics.memoryTotal?.toFixed(1)} {server.metrics.memoryUnit} -
-
-
-
Players
-
{server.players.online}
-
- {server.players.max ? 'of ' + server.players.max + ' max' : 'No limit'} -
-
-
-
CPU Cores
-
{server.metrics.cpuCores}
-
-
- - {/* Players List */} - {server.players?.list?.length > 0 && ( -
-

Online Players

-
- {server.players.list.map((player, i) => ( - {player} - ))} -
-
- )} - - {/* Power Controls */} - {isModerator && ( -
-

Server Controls

-
- {server.running ? ( - <> - - - - ) : ( - - )} -
-
- )} -
- )} - - {/* Metrics Tab */} - {activeTab === 'metrics' && ( - - )} - - {/* Console Tab */} - {activeTab === 'console' && isModerator && ( -
-
-
RCON Console - {server.name}
- {rconHistory.length === 0 && ( -
Waiting for commands...
- )} - {rconHistory.map((entry, i) => ( -
-
- [{entry.time.toLocaleTimeString()}] > {entry.cmd} -
-
- {entry.res} -
-
- ))} -
- -
- setRconCommand(e.target.value)} - placeholder="Enter command..." - className="input flex-1" - /> - -
-
- )} - - {/* Logs Tab */} - {activeTab === 'logs' && isModerator && ( -
-
- Last 20 lines - -
-
- {logs || 'Loading...'} -
-
- )} -
-
- ) -} diff --git a/temp/index.css b/temp/index.css deleted file mode 100644 index f7c2774..0000000 --- a/temp/index.css +++ /dev/null @@ -1,291 +0,0 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; - -* { - scrollbar-width: thin; - scrollbar-color: #404040 #171717; -} - -*::-webkit-scrollbar { - width: 8px; -} - -*::-webkit-scrollbar-track { - background: #171717; -} - -*::-webkit-scrollbar-thumb { - background: #404040; - border-radius: 4px; -} - -*::-webkit-scrollbar-thumb:hover { - background: #525252; -} - -body { - background-color: #0a0a0a; - color: #fafafa; - font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; -} - -/* Buttons */ -button { - background: transparent; -} - -.btn { - display: inline-flex; - align-items: center; - justify-content: center; - gap: 0.5rem; - border-radius: 0.375rem; - font-size: 0.875rem; - font-weight: 500; - padding: 0.5rem 1rem; - transition: all 0.15s ease; - cursor: pointer; - border: none; -} - -.btn:disabled { - opacity: 0.5; - cursor: not-allowed; -} - -.btn-primary { - background-color: #fafafa; - color: #0a0a0a; -} - -.btn-primary:hover:not(:disabled) { - background-color: #e5e5e5; -} - -.btn-secondary { - background-color: #262626; - color: #fafafa; -} - -.btn-secondary:hover:not(:disabled) { - background-color: #363636; -} - -.btn-destructive { - background-color: #dc2626; - color: #fafafa; -} - -.btn-destructive:hover:not(:disabled) { - background-color: #b91c1c; -} - -.btn-outline { - background: transparent; - border: 1px solid #404040; - color: #fafafa; -} - -.btn-outline:hover:not(:disabled) { - background-color: #262626; - border-color: #525252; -} - -.btn-ghost { - background: transparent; - color: #a3a3a3; -} - -.btn-ghost:hover:not(:disabled) { - background-color: #262626; - color: #fafafa; -} - -/* Cards */ -.card { - background-color: #171717; - border: 1px solid #262626; - border-radius: 0.5rem; -} - -.card:hover { - border-color: #404040; -} - -.card-clickable { - cursor: pointer; - transition: all 0.15s ease; -} - -.card-clickable:hover { - background-color: #1c1c1c; - border-color: #404040; -} - -/* Inputs */ -.input { - display: flex; - width: 100%; - border-radius: 0.375rem; - border: 1px solid #404040; - background-color: #171717; - color: #fafafa; - padding: 0.625rem 0.875rem; - font-size: 0.875rem; - transition: border-color 0.15s ease, box-shadow 0.15s ease; -} - -.input:focus { - outline: none; - border-color: #737373; - box-shadow: 0 0 0 2px rgba(115, 115, 115, 0.2); -} - -.input::placeholder { - color: #737373; -} - -/* Badges */ -.badge { - display: inline-flex; - align-items: center; - border-radius: 9999px; - padding: 0.25rem 0.75rem; - font-size: 0.75rem; - font-weight: 500; -} - -.badge-success { - background-color: #14532d; - color: #86efac; -} - -.badge-destructive { - background-color: #450a0a; - color: #fca5a5; -} - -.badge-secondary { - background-color: #262626; - color: #a3a3a3; -} - -/* Progress */ -.progress { - height: 0.5rem; - background-color: #262626; - border-radius: 9999px; - overflow: hidden; -} - -.progress-bar { - height: 100%; - background-color: #fafafa; - border-radius: 9999px; - transition: width 0.3s ease; -} - -.progress-bar-success { - background-color: #22c55e; -} - -.progress-bar-warning { - background-color: #eab308; -} - -.progress-bar-danger { - background-color: #ef4444; -} - -/* Tabs */ -.tabs { - display: flex; - gap: 0.25rem; - border-bottom: 1px solid #262626; -} - -.tab { - padding: 0.75rem 1rem; - font-size: 0.875rem; - font-weight: 500; - color: #737373; - border-bottom: 2px solid transparent; - margin-bottom: -1px; - cursor: pointer; - transition: all 0.15s ease; - background: transparent; -} - -.tab:hover { - color: #a3a3a3; -} - -.tab-active { - color: #fafafa; - border-bottom-color: #fafafa; -} - -/* Status */ -.status-dot { - width: 0.5rem; - height: 0.5rem; - border-radius: 9999px; -} - -.status-online { - background-color: #22c55e; -} - -.status-offline { - background-color: #ef4444; -} - -/* Terminal/Logs */ -.terminal { - background-color: #0a0a0a; - border: 1px solid #262626; - border-radius: 0.375rem; - font-family: 'JetBrains Mono', 'Fira Code', ui-monospace, monospace; -} - -.logs-container { - height: 320px; - max-height: 320px; - min-height: 320px; - overflow-y: scroll; -} - -/* Layout */ -.container-main { - max-width: 900px; - margin-left: auto; - margin-right: auto; - padding-left: 1.5rem; - padding-right: 1.5rem; -} - -/* Utilities */ -.gap-6 { - gap: 1.5rem; -} - -.gap-8 { - gap: 2rem; -} - -/* Animations */ -@keyframes fadeIn { - from { opacity: 0; } - to { opacity: 1; } -} - -.fade-in { - animation: fadeIn 0.2s ease-out; -} - -/* Modal */ -.modal-backdrop { - background-color: rgba(0, 0, 0, 0.8); - backdrop-filter: blur(4px); -}