From 12b5e18f0a4bd20647d8568d2bf5e4d8bceff580 Mon Sep 17 00:00:00 2001 From: legop3 Date: Mon, 17 Nov 2025 21:36:09 -0500 Subject: [PATCH] guh --- server/public/assets/index-BMozRdoG.css | 1 - server/public/assets/index-Bsnm9v3l.js | 11 + server/public/assets/index-CkUABVeV.css | 1 + server/public/assets/index-De1-bHUg.js | 11 - server/public/index.html | 4 +- webui/src/App.jsx | 28 +-- webui/src/components/MobileControls.jsx | 203 +++++++++++++----- .../controls/inputs/KeyboardInputManager.jsx | 101 +++++++-- 8 files changed, 268 insertions(+), 92 deletions(-) delete mode 100644 server/public/assets/index-BMozRdoG.css create mode 100644 server/public/assets/index-Bsnm9v3l.js create mode 100644 server/public/assets/index-CkUABVeV.css delete mode 100644 server/public/assets/index-De1-bHUg.js diff --git a/server/public/assets/index-BMozRdoG.css b/server/public/assets/index-BMozRdoG.css deleted file mode 100644 index 53087ba9..00000000 --- a/server/public/assets/index-BMozRdoG.css +++ /dev/null @@ -1 +0,0 @@ -*,: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}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.\!visible{visibility:visible!important}.visible{visibility:visible}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{inset:0}.left-1\/2{left:50%}.top-1{top:.25rem}.z-50{z-index:50}.col-span-full{grid-column:1 / -1}.mx-auto{margin-left:auto;margin-right:auto}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.flex{display:flex}.grid{display:grid}.aspect-video{aspect-ratio:16 / 9}.h-2{height:.5rem}.h-4{height:1rem}.h-6{height:1.5rem}.h-60{height:15rem}.h-64{height:16rem}.h-full{height:100%}.min-h-\[8rem\]{min-height:8rem}.min-h-screen{min-height:100vh}.w-1\/4{width:25%}.w-2{width:.5rem}.w-full{width:100%}.max-w-7xl{max-width:80rem}.max-w-md{max-width:28rem}.flex-1{flex:1 1 0%}.-translate-x-1\/2{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}.resize{resize:both}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-\[minmax\(0\,0\.7fr\)_minmax\(0\,2\.1fr\)_minmax\(0\,0\.7fr\)\]{grid-template-columns:minmax(0,.7fr) minmax(0,2.1fr) minmax(0,.7fr)}.grid-cols-\[minmax\(0\,1\.8fr\)_minmax\(0\,1fr\)\]{grid-template-columns:minmax(0,1.8fr) minmax(0,1fr)}.grid-cols-\[minmax\(0\,1fr\)_minmax\(0\,1fr\)\]{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.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))}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.text-wrap{text-wrap:wrap}.break-words{overflow-wrap:break-word}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-3xl{border-radius:1.5rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-sm{border-radius:.125rem}.border{border-width:1px}.border-slate-800{--tw-border-opacity: 1;border-color:rgb(30 41 59 / var(--tw-border-opacity))}.border-slate-800\/80{border-color:#1e293bcc}.bg-\[\#141821\]{--tw-bg-opacity: 1;background-color:rgb(20 24 33 / var(--tw-bg-opacity))}.bg-\[\#1a1d23\]{--tw-bg-opacity: 1;background-color:rgb(26 29 35 / var(--tw-bg-opacity))}.bg-\[\#1e1e1e\]{--tw-bg-opacity: 1;background-color:rgb(30 30 30 / var(--tw-bg-opacity))}.bg-\[\#242a32\]{--tw-bg-opacity: 1;background-color:rgb(36 42 50 / var(--tw-bg-opacity))}.bg-amber-400{--tw-bg-opacity: 1;background-color:rgb(251 191 36 / var(--tw-bg-opacity))}.bg-amber-500\/30{background-color:#f59e0b4d}.bg-black{--tw-bg-opacity: 1;background-color:rgb(0 0 0 / var(--tw-bg-opacity))}.bg-black\/30{background-color:#0000004d}.bg-black\/40{background-color:#0006}.bg-black\/50{background-color:#00000080}.bg-black\/85{background-color:#000000d9}.bg-blue-600\/40{background-color:#2563eb66}.bg-emerald-300{--tw-bg-opacity: 1;background-color:rgb(110 231 183 / var(--tw-bg-opacity))}.bg-emerald-500{--tw-bg-opacity: 1;background-color:rgb(16 185 129 / var(--tw-bg-opacity))}.bg-emerald-500\/20{background-color:#10b98133}.bg-emerald-500\/30{background-color:#10b9814d}.bg-emerald-600{--tw-bg-opacity: 1;background-color:rgb(5 150 105 / var(--tw-bg-opacity))}.bg-emerald-900{--tw-bg-opacity: 1;background-color:rgb(6 78 59 / var(--tw-bg-opacity))}.bg-gray-700{--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity))}.bg-indigo-600{--tw-bg-opacity: 1;background-color:rgb(79 70 229 / var(--tw-bg-opacity))}.bg-lime-300{--tw-bg-opacity: 1;background-color:rgb(190 242 100 / var(--tw-bg-opacity))}.bg-red-500{--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity))}.bg-red-500\/20{background-color:#ef444433}.bg-red-500\/30{background-color:#ef44444d}.bg-red-600{--tw-bg-opacity: 1;background-color:rgb(220 38 38 / var(--tw-bg-opacity))}.bg-red-900\/60{background-color:#7f1d1d99}.bg-slate-100{--tw-bg-opacity: 1;background-color:rgb(241 245 249 / var(--tw-bg-opacity))}.bg-slate-200{--tw-bg-opacity: 1;background-color:rgb(226 232 240 / var(--tw-bg-opacity))}.bg-slate-700{--tw-bg-opacity: 1;background-color:rgb(51 65 85 / var(--tw-bg-opacity))}.bg-slate-800{--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity))}.bg-slate-900\/70{background-color:#0f172ab3}.bg-slate-950{--tw-bg-opacity: 1;background-color:rgb(2 6 23 / var(--tw-bg-opacity))}.bg-slate-950\/40{background-color:#02061766}.bg-slate-950\/50{background-color:#02061780}.bg-transparent{background-color:transparent}.object-contain{-o-object-fit:contain;object-fit:contain}.p-0\.5{padding:.125rem}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-2xl{font-size:1.5rem;line-height:2rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-\[0\.55rem\]{font-size:.55rem}.text-\[0\.65rem\]{font-size:.65rem}.text-\[0\.75rem\]{font-size:.75rem}.text-\[0\.7rem\]{font-size:.7rem}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.tracking-\[0\.3em\]{letter-spacing:.3em}.tracking-wide{letter-spacing:.025em}.text-amber-100{--tw-text-opacity: 1;color:rgb(254 243 199 / var(--tw-text-opacity))}.text-amber-400{--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity))}.text-black{--tw-text-opacity: 1;color:rgb(0 0 0 / var(--tw-text-opacity))}.text-black\/80{color:#000c}.text-blue-100{--tw-text-opacity: 1;color:rgb(219 234 254 / var(--tw-text-opacity))}.text-cyan-300{--tw-text-opacity: 1;color:rgb(103 232 249 / var(--tw-text-opacity))}.text-emerald-100{--tw-text-opacity: 1;color:rgb(209 250 229 / var(--tw-text-opacity))}.text-emerald-200{--tw-text-opacity: 1;color:rgb(167 243 208 / var(--tw-text-opacity))}.text-emerald-50{--tw-text-opacity: 1;color:rgb(236 253 245 / var(--tw-text-opacity))}.text-emerald-50\/80{color:#ecfdf5cc}.text-emerald-900{--tw-text-opacity: 1;color:rgb(6 78 59 / var(--tw-text-opacity))}.text-indigo-50{--tw-text-opacity: 1;color:rgb(238 242 255 / var(--tw-text-opacity))}.text-lime-300{--tw-text-opacity: 1;color:rgb(190 242 100 / var(--tw-text-opacity))}.text-lime-400{--tw-text-opacity: 1;color:rgb(163 230 53 / var(--tw-text-opacity))}.text-pink-300{--tw-text-opacity: 1;color:rgb(249 168 212 / var(--tw-text-opacity))}.text-red-100{--tw-text-opacity: 1;color:rgb(254 226 226 / var(--tw-text-opacity))}.text-red-200{--tw-text-opacity: 1;color:rgb(254 202 202 / var(--tw-text-opacity))}.text-slate-100{--tw-text-opacity: 1;color:rgb(241 245 249 / var(--tw-text-opacity))}.text-slate-200{--tw-text-opacity: 1;color:rgb(226 232 240 / var(--tw-text-opacity))}.text-slate-300{--tw-text-opacity: 1;color:rgb(203 213 225 / var(--tw-text-opacity))}.text-slate-400{--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity))}.text-slate-50{--tw-text-opacity: 1;color:rgb(248 250 252 / var(--tw-text-opacity))}.text-slate-500{--tw-text-opacity: 1;color:rgb(100 116 139 / var(--tw-text-opacity))}.text-slate-900{--tw-text-opacity: 1;color:rgb(15 23 42 / var(--tw-text-opacity))}.text-teal-400{--tw-text-opacity: 1;color:rgb(45 212 191 / var(--tw-text-opacity))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.text-white\/90{color:#ffffffe6}.accent-emerald-400{accent-color:#34d399}.shadow-2xl{--tw-shadow: 0 25px 50px -12px rgb(0 0 0 / .25);--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_4px_rgba\(16\,185\,129\,0\.8\)\]{--tw-shadow: 0 0 4px rgba(16,185,129,.8);--tw-shadow-colored: 0 0 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)}.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)}.shadow-black\/60{--tw-shadow-color: rgb(0 0 0 / .6);--tw-shadow: var(--tw-shadow-colored)}.blur{--tw-blur: blur(8px);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)}.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)}.transition-\[width\]{transition-property:width;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}:root{font-family:Inter,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;color:#0f172a;background-color:#f8fafc}body{margin:0;min-height:100vh;background-color:#0f172a}.hover\:bg-slate-600:hover{--tw-bg-opacity: 1;background-color:rgb(71 85 105 / var(--tw-bg-opacity))}.hover\:bg-slate-700:hover{--tw-bg-opacity: 1;background-color:rgb(51 65 85 / var(--tw-bg-opacity))}.disabled\:opacity-30:disabled{opacity:.3}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}@media(min-width:640px){.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(min-width:1024px){.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}} diff --git a/server/public/assets/index-Bsnm9v3l.js b/server/public/assets/index-Bsnm9v3l.js new file mode 100644 index 00000000..73b4d908 --- /dev/null +++ b/server/public/assets/index-Bsnm9v3l.js @@ -0,0 +1,11 @@ +(function(){const a=document.createElement("link").relList;if(a&&a.supports&&a.supports("modulepreload"))return;for(const f of document.querySelectorAll('link[rel="modulepreload"]'))r(f);new MutationObserver(f=>{for(const d of f)if(d.type==="childList")for(const y of d.addedNodes)y.tagName==="LINK"&&y.rel==="modulepreload"&&r(y)}).observe(document,{childList:!0,subtree:!0});function s(f){const d={};return f.integrity&&(d.integrity=f.integrity),f.referrerPolicy&&(d.referrerPolicy=f.referrerPolicy),f.crossOrigin==="use-credentials"?d.credentials="include":f.crossOrigin==="anonymous"?d.credentials="omit":d.credentials="same-origin",d}function r(f){if(f.ep)return;f.ep=!0;const d=s(f);fetch(f.href,d)}})();var ar={exports:{}},Ga={};var nm;function Y0(){if(nm)return Ga;nm=1;var i=Symbol.for("react.transitional.element"),a=Symbol.for("react.fragment");function s(r,f,d){var y=null;if(d!==void 0&&(y=""+d),f.key!==void 0&&(y=""+f.key),"key"in f){d={};for(var b in f)b!=="key"&&(d[b]=f[b])}else d=f;return f=d.ref,{$$typeof:i,type:r,key:y,ref:f!==void 0?f:null,props:d}}return Ga.Fragment=a,Ga.jsx=s,Ga.jsxs=s,Ga}var lm;function k0(){return lm||(lm=1,ar.exports=Y0()),ar.exports}var m=k0(),ir={exports:{}},te={};var am;function V0(){if(am)return te;am=1;var i=Symbol.for("react.transitional.element"),a=Symbol.for("react.portal"),s=Symbol.for("react.fragment"),r=Symbol.for("react.strict_mode"),f=Symbol.for("react.profiler"),d=Symbol.for("react.consumer"),y=Symbol.for("react.context"),b=Symbol.for("react.forward_ref"),p=Symbol.for("react.suspense"),v=Symbol.for("react.memo"),A=Symbol.for("react.lazy"),T=Symbol.for("react.activity"),D=Symbol.iterator;function R(E){return E===null||typeof E!="object"?null:(E=D&&E[D]||E["@@iterator"],typeof E=="function"?E:null)}var M={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},V=Object.assign,Y={};function k(E,H,G){this.props=E,this.context=H,this.refs=Y,this.updater=G||M}k.prototype.isReactComponent={},k.prototype.setState=function(E,H){if(typeof E!="object"&&typeof E!="function"&&E!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,E,H,"setState")},k.prototype.forceUpdate=function(E){this.updater.enqueueForceUpdate(this,E,"forceUpdate")};function B(){}B.prototype=k.prototype;function q(E,H,G){this.props=E,this.context=H,this.refs=Y,this.updater=G||M}var Z=q.prototype=new B;Z.constructor=q,V(Z,k.prototype),Z.isPureReactComponent=!0;var I=Array.isArray;function ae(){}var Q={H:null,A:null,T:null,S:null},ue=Object.prototype.hasOwnProperty;function ee(E,H,G){var J=G.ref;return{$$typeof:i,type:E,key:H,ref:J!==void 0?J:null,props:G}}function Me(E,H){return ee(E.type,H,E.props)}function Ve(E){return typeof E=="object"&&E!==null&&E.$$typeof===i}function Fe(E){var H={"=":"=0",":":"=2"};return"$"+E.replace(/[=:]/g,function(G){return H[G]})}var kn=/\/+/g;function Xt(E,H){return typeof E=="object"&&E!==null&&E.key!=null?Fe(""+E.key):H.toString(36)}function Ot(E){switch(E.status){case"fulfilled":return E.value;case"rejected":throw E.reason;default:switch(typeof E.status=="string"?E.then(ae,ae):(E.status="pending",E.then(function(H){E.status==="pending"&&(E.status="fulfilled",E.value=H)},function(H){E.status==="pending"&&(E.status="rejected",E.reason=H)})),E.status){case"fulfilled":return E.value;case"rejected":throw E.reason}}throw E}function j(E,H,G,J,ne){var se=typeof E;(se==="undefined"||se==="boolean")&&(E=null);var ve=!1;if(E===null)ve=!0;else switch(se){case"bigint":case"string":case"number":ve=!0;break;case"object":switch(E.$$typeof){case i:case a:ve=!0;break;case A:return ve=E._init,j(ve(E._payload),H,G,J,ne)}}if(ve)return ne=ne(E),ve=J===""?"."+Xt(E,0):J,I(ne)?(G="",ve!=null&&(G=ve.replace(kn,"$&/")+"/"),j(ne,H,G,"",function(Wl){return Wl})):ne!=null&&(Ve(ne)&&(ne=Me(ne,G+(ne.key==null||E&&E.key===ne.key?"":(""+ne.key).replace(kn,"$&/")+"/")+ve)),H.push(ne)),1;ve=0;var Ie=J===""?".":J+":";if(I(E))for(var we=0;we>>1,Ae=j[xe];if(0>>1;xef(G,P))Jf(ne,G)?(j[xe]=ne,j[J]=P,xe=J):(j[xe]=G,j[H]=P,xe=H);else if(Jf(ne,P))j[xe]=ne,j[J]=P,xe=J;else break e}}return X}function f(j,X){var P=j.sortIndex-X.sortIndex;return P!==0?P:j.id-X.id}if(i.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var d=performance;i.unstable_now=function(){return d.now()}}else{var y=Date,b=y.now();i.unstable_now=function(){return y.now()-b}}var p=[],v=[],A=1,T=null,D=3,R=!1,M=!1,V=!1,Y=!1,k=typeof setTimeout=="function"?setTimeout:null,B=typeof clearTimeout=="function"?clearTimeout:null,q=typeof setImmediate<"u"?setImmediate:null;function Z(j){for(var X=s(v);X!==null;){if(X.callback===null)r(v);else if(X.startTime<=j)r(v),X.sortIndex=X.expirationTime,a(p,X);else break;X=s(v)}}function I(j){if(V=!1,Z(j),!M)if(s(p)!==null)M=!0,ae||(ae=!0,Fe());else{var X=s(v);X!==null&&Ot(I,X.startTime-j)}}var ae=!1,Q=-1,ue=5,ee=-1;function Me(){return Y?!0:!(i.unstable_now()-eej&&Me());){var xe=T.callback;if(typeof xe=="function"){T.callback=null,D=T.priorityLevel;var Ae=xe(T.expirationTime<=j);if(j=i.unstable_now(),typeof Ae=="function"){T.callback=Ae,Z(j),X=!0;break t}T===s(p)&&r(p),Z(j)}else r(p);T=s(p)}if(T!==null)X=!0;else{var E=s(v);E!==null&&Ot(I,E.startTime-j),X=!1}}break e}finally{T=null,D=P,R=!1}X=void 0}}finally{X?Fe():ae=!1}}}var Fe;if(typeof q=="function")Fe=function(){q(Ve)};else if(typeof MessageChannel<"u"){var kn=new MessageChannel,Xt=kn.port2;kn.port1.onmessage=Ve,Fe=function(){Xt.postMessage(null)}}else Fe=function(){k(Ve,0)};function Ot(j,X){Q=k(function(){j(i.unstable_now())},X)}i.unstable_IdlePriority=5,i.unstable_ImmediatePriority=1,i.unstable_LowPriority=4,i.unstable_NormalPriority=3,i.unstable_Profiling=null,i.unstable_UserBlockingPriority=2,i.unstable_cancelCallback=function(j){j.callback=null},i.unstable_forceFrameRate=function(j){0>j||125xe?(j.sortIndex=P,a(v,j),s(p)===null&&j===s(v)&&(V?(B(Q),Q=-1):V=!0,Ot(I,P-xe))):(j.sortIndex=Ae,a(p,j),M||R||(M=!0,ae||(ae=!0,Fe()))),j},i.unstable_shouldYield=Me,i.unstable_wrapCallback=function(j){var X=D;return function(){var P=D;D=X;try{return j.apply(this,arguments)}finally{D=P}}}})(cr)),cr}var sm;function G0(){return sm||(sm=1,sr.exports=X0()),sr.exports}var rr={exports:{}},We={};var cm;function Q0(){if(cm)return We;cm=1;var i=jr();function a(p){var v="https://react.dev/errors/"+p;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(i)}catch(a){console.error(a)}}return i(),rr.exports=Q0(),rr.exports}var om;function K0(){if(om)return Qa;om=1;var i=G0(),a=jr(),s=Z0();function r(e){var t="https://react.dev/errors/"+e;if(1Ae||(e.current=xe[Ae],xe[Ae]=null,Ae--)}function G(e,t){Ae++,xe[Ae]=e.current,e.current=t}var J=E(null),ne=E(null),se=E(null),ve=E(null);function Ie(e,t){switch(G(se,t),G(ne,e),G(J,null),t.nodeType){case 9:case 11:e=(e=t.documentElement)&&(e=e.namespaceURI)?Th(e):0;break;default:if(e=t.tagName,t=t.namespaceURI)t=Th(t),e=Ch(t,e);else switch(e){case"svg":e=1;break;case"math":e=2;break;default:e=0}}H(J),G(J,e)}function we(){H(J),H(ne),H(se)}function Wl(e){e.memoizedState!==null&&G(ve,e);var t=J.current,n=Ch(t,e.type);t!==n&&(G(ne,e),G(J,n))}function ti(e){ne.current===e&&(H(J),H(ne)),ve.current===e&&(H(ve),Ya._currentValue=P)}var Yu,Pr;function Vn(e){if(Yu===void 0)try{throw Error()}catch(n){var t=n.stack.trim().match(/\n( *(at )?)/);Yu=t&&t[1]||"",Pr=-1)":-1u||x[l]!==N[u]){var w=` +`+x[l].replace(" at new "," at ");return e.displayName&&w.includes("")&&(w=w.replace("",e.displayName)),w}while(1<=l&&0<=u);break}}}finally{ku=!1,Error.prepareStackTrace=n}return(n=e?e.displayName||e.name:"")?Vn(n):""}function vp(e,t){switch(e.tag){case 26:case 27:case 5:return Vn(e.type);case 16:return Vn("Lazy");case 13:return e.child!==t&&t!==null?Vn("Suspense Fallback"):Vn("Suspense");case 19:return Vn("SuspenseList");case 0:case 15:return Vu(e.type,!1);case 11:return Vu(e.type.render,!1);case 1:return Vu(e.type,!0);case 31:return Vn("Activity");default:return""}}function eo(e){try{var t="",n=null;do t+=vp(e,n),n=e,e=e.return;while(e);return t}catch(l){return` +Error generating stack: `+l.message+` +`+l.stack}}var Xu=Object.prototype.hasOwnProperty,Gu=i.unstable_scheduleCallback,Qu=i.unstable_cancelCallback,gp=i.unstable_shouldYield,bp=i.unstable_requestPaint,st=i.unstable_now,xp=i.unstable_getCurrentPriorityLevel,to=i.unstable_ImmediatePriority,no=i.unstable_UserBlockingPriority,ni=i.unstable_NormalPriority,Sp=i.unstable_LowPriority,lo=i.unstable_IdlePriority,Ep=i.log,_p=i.unstable_setDisableYieldValue,Il=null,ct=null;function hn(e){if(typeof Ep=="function"&&_p(e),ct&&typeof ct.setStrictMode=="function")try{ct.setStrictMode(Il,e)}catch{}}var rt=Math.clz32?Math.clz32:Cp,Ap=Math.log,Tp=Math.LN2;function Cp(e){return e>>>=0,e===0?32:31-(Ap(e)/Tp|0)|0}var li=256,ai=262144,ii=4194304;function Xn(e){var t=e&42;if(t!==0)return t;switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return e&261888;case 262144:case 524288:case 1048576:case 2097152:return e&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return e&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return e}}function ui(e,t,n){var l=e.pendingLanes;if(l===0)return 0;var u=0,c=e.suspendedLanes,o=e.pingedLanes;e=e.warmLanes;var h=l&134217727;return h!==0?(l=h&~c,l!==0?u=Xn(l):(o&=h,o!==0?u=Xn(o):n||(n=h&~e,n!==0&&(u=Xn(n))))):(h=l&~c,h!==0?u=Xn(h):o!==0?u=Xn(o):n||(n=l&~e,n!==0&&(u=Xn(n)))),u===0?0:t!==0&&t!==u&&(t&c)===0&&(c=u&-u,n=t&-t,c>=n||c===32&&(n&4194048)!==0)?t:u}function Pl(e,t){return(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&t)===0}function Np(e,t){switch(e){case 1:case 2:case 4:case 8:case 64:return t+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function ao(){var e=ii;return ii<<=1,(ii&62914560)===0&&(ii=4194304),e}function Zu(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function ea(e,t){e.pendingLanes|=t,t!==268435456&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function Rp(e,t,n,l,u,c){var o=e.pendingLanes;e.pendingLanes=n,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=n,e.entangledLanes&=n,e.errorRecoveryDisabledLanes&=n,e.shellSuspendCounter=0;var h=e.entanglements,x=e.expirationTimes,N=e.hiddenUpdates;for(n=o&~n;0"u")return null;try{return e.activeElement||e.body}catch{return e.body}}var jp=/[\n"\\]/g;function bt(e){return e.replace(jp,function(t){return"\\"+t.charCodeAt(0).toString(16)+" "})}function Iu(e,t,n,l,u,c,o,h){e.name="",o!=null&&typeof o!="function"&&typeof o!="symbol"&&typeof o!="boolean"?e.type=o:e.removeAttribute("type"),t!=null?o==="number"?(t===0&&e.value===""||e.value!=t)&&(e.value=""+gt(t)):e.value!==""+gt(t)&&(e.value=""+gt(t)):o!=="submit"&&o!=="reset"||e.removeAttribute("value"),t!=null?Pu(e,o,gt(t)):n!=null?Pu(e,o,gt(n)):l!=null&&e.removeAttribute("value"),u==null&&c!=null&&(e.defaultChecked=!!c),u!=null&&(e.checked=u&&typeof u!="function"&&typeof u!="symbol"),h!=null&&typeof h!="function"&&typeof h!="symbol"&&typeof h!="boolean"?e.name=""+gt(h):e.removeAttribute("name")}function go(e,t,n,l,u,c,o,h){if(c!=null&&typeof c!="function"&&typeof c!="symbol"&&typeof c!="boolean"&&(e.type=c),t!=null||n!=null){if(!(c!=="submit"&&c!=="reset"||t!=null)){Wu(e);return}n=n!=null?""+gt(n):"",t=t!=null?""+gt(t):n,h||t===e.value||(e.value=t),e.defaultValue=t}l=l??u,l=typeof l!="function"&&typeof l!="symbol"&&!!l,e.checked=h?e.checked:!!l,e.defaultChecked=!!l,o!=null&&typeof o!="function"&&typeof o!="symbol"&&typeof o!="boolean"&&(e.name=o),Wu(e)}function Pu(e,t,n){t==="number"&&ri(e.ownerDocument)===e||e.defaultValue===""+n||(e.defaultValue=""+n)}function pl(e,t,n,l){if(e=e.options,t){t={};for(var u=0;u"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),as=!1;if(Zt)try{var aa={};Object.defineProperty(aa,"passive",{get:function(){as=!0}}),window.addEventListener("test",aa,aa),window.removeEventListener("test",aa,aa)}catch{as=!1}var pn=null,is=null,fi=null;function To(){if(fi)return fi;var e,t=is,n=t.length,l,u="value"in pn?pn.value:pn.textContent,c=u.length;for(e=0;e=sa),zo=" ",Do=!1;function wo(e,t){switch(e){case"keyup":return cy.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function jo(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var bl=!1;function oy(e,t){switch(e){case"compositionend":return jo(t);case"keypress":return t.which!==32?null:(Do=!0,zo);case"textInput":return e=t.data,e===zo&&Do?null:e;default:return null}}function fy(e,t){if(bl)return e==="compositionend"||!os&&wo(e,t)?(e=To(),fi=is=pn=null,bl=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=l}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=Vo(n)}}function Go(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?Go(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function Qo(e){e=e!=null&&e.ownerDocument!=null&&e.ownerDocument.defaultView!=null?e.ownerDocument.defaultView:window;for(var t=ri(e.document);t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href=="string"}catch{n=!1}if(n)e=t.contentWindow;else break;t=ri(e.document)}return t}function hs(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}var by=Zt&&"documentMode"in document&&11>=document.documentMode,xl=null,ms=null,fa=null,ps=!1;function Zo(e,t,n){var l=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;ps||xl==null||xl!==ri(l)||(l=xl,"selectionStart"in l&&hs(l)?l={start:l.selectionStart,end:l.selectionEnd}:(l=(l.ownerDocument&&l.ownerDocument.defaultView||window).getSelection(),l={anchorNode:l.anchorNode,anchorOffset:l.anchorOffset,focusNode:l.focusNode,focusOffset:l.focusOffset}),fa&&oa(fa,l)||(fa=l,l=au(ms,"onSelect"),0>=o,u-=o,Bt=1<<32-rt(t)+u|n<ie?(fe=$,$=null):fe=$.sibling;var pe=O(_,$,C[ie],U);if(pe===null){$===null&&($=fe);break}e&&$&&pe.alternate===null&&t(_,$),S=c(pe,S,ie),me===null?F=pe:me.sibling=pe,me=pe,$=fe}if(ie===C.length)return n(_,$),de&&Jt(_,ie),F;if($===null){for(;ieie?(fe=$,$=null):fe=$.sibling;var Ln=O(_,$,pe.value,U);if(Ln===null){$===null&&($=fe);break}e&&$&&Ln.alternate===null&&t(_,$),S=c(Ln,S,ie),me===null?F=Ln:me.sibling=Ln,me=Ln,$=fe}if(pe.done)return n(_,$),de&&Jt(_,ie),F;if($===null){for(;!pe.done;ie++,pe=C.next())pe=L(_,pe.value,U),pe!==null&&(S=c(pe,S,ie),me===null?F=pe:me.sibling=pe,me=pe);return de&&Jt(_,ie),F}for($=l($);!pe.done;ie++,pe=C.next())pe=z($,_,ie,pe.value,U),pe!==null&&(e&&pe.alternate!==null&&$.delete(pe.key===null?ie:pe.key),S=c(pe,S,ie),me===null?F=pe:me.sibling=pe,me=pe);return e&&$.forEach(function(q0){return t(_,q0)}),de&&Jt(_,ie),F}function _e(_,S,C,U){if(typeof C=="object"&&C!==null&&C.type===V&&C.key===null&&(C=C.props.children),typeof C=="object"&&C!==null){switch(C.$$typeof){case R:e:{for(var F=C.key;S!==null;){if(S.key===F){if(F=C.type,F===V){if(S.tag===7){n(_,S.sibling),U=u(S,C.props.children),U.return=_,_=U;break e}}else if(S.elementType===F||typeof F=="object"&&F!==null&&F.$$typeof===ue&&el(F)===S.type){n(_,S.sibling),U=u(S,C.props),va(U,C),U.return=_,_=U;break e}n(_,S);break}else t(_,S);S=S.sibling}C.type===V?(U=$n(C.props.children,_.mode,U,C.key),U.return=_,_=U):(U=Si(C.type,C.key,C.props,null,_.mode,U),va(U,C),U.return=_,_=U)}return o(_);case M:e:{for(F=C.key;S!==null;){if(S.key===F)if(S.tag===4&&S.stateNode.containerInfo===C.containerInfo&&S.stateNode.implementation===C.implementation){n(_,S.sibling),U=u(S,C.children||[]),U.return=_,_=U;break e}else{n(_,S);break}else t(_,S);S=S.sibling}U=Es(C,_.mode,U),U.return=_,_=U}return o(_);case ue:return C=el(C),_e(_,S,C,U)}if(Ot(C))return K(_,S,C,U);if(Fe(C)){if(F=Fe(C),typeof F!="function")throw Error(r(150));return C=F.call(C),W(_,S,C,U)}if(typeof C.then=="function")return _e(_,S,Ri(C),U);if(C.$$typeof===q)return _e(_,S,Ai(_,C),U);Oi(_,C)}return typeof C=="string"&&C!==""||typeof C=="number"||typeof C=="bigint"?(C=""+C,S!==null&&S.tag===6?(n(_,S.sibling),U=u(S,C),U.return=_,_=U):(n(_,S),U=Ss(C,_.mode,U),U.return=_,_=U),o(_)):n(_,S)}return function(_,S,C,U){try{ya=0;var F=_e(_,S,C,U);return zl=null,F}catch($){if($===Ml||$===Ci)throw $;var me=ft(29,$,null,_.mode);return me.lanes=U,me.return=_,me}finally{}}}var nl=yf(!0),vf=yf(!1),xn=!1;function js(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function Us(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,callbacks:null})}function Sn(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function En(e,t,n){var l=e.updateQueue;if(l===null)return null;if(l=l.shared,(ye&2)!==0){var u=l.pending;return u===null?t.next=t:(t.next=u.next,u.next=t),l.pending=t,t=xi(e),Po(e,null,n),t}return bi(e,l,t,n),xi(e)}function ga(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,(n&4194048)!==0)){var l=t.lanes;l&=e.pendingLanes,n|=l,t.lanes=n,uo(e,n)}}function Bs(e,t){var n=e.updateQueue,l=e.alternate;if(l!==null&&(l=l.updateQueue,n===l)){var u=null,c=null;if(n=n.firstBaseUpdate,n!==null){do{var o={lane:n.lane,tag:n.tag,payload:n.payload,callback:null,next:null};c===null?u=c=o:c=c.next=o,n=n.next}while(n!==null);c===null?u=c=t:c=c.next=t}else u=c=t;n={baseState:l.baseState,firstBaseUpdate:u,lastBaseUpdate:c,shared:l.shared,callbacks:l.callbacks},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}var Ls=!1;function ba(){if(Ls){var e=Ol;if(e!==null)throw e}}function xa(e,t,n,l){Ls=!1;var u=e.updateQueue;xn=!1;var c=u.firstBaseUpdate,o=u.lastBaseUpdate,h=u.shared.pending;if(h!==null){u.shared.pending=null;var x=h,N=x.next;x.next=null,o===null?c=N:o.next=N,o=x;var w=e.alternate;w!==null&&(w=w.updateQueue,h=w.lastBaseUpdate,h!==o&&(h===null?w.firstBaseUpdate=N:h.next=N,w.lastBaseUpdate=x))}if(c!==null){var L=u.baseState;o=0,w=N=x=null,h=c;do{var O=h.lane&-536870913,z=O!==h.lane;if(z?(oe&O)===O:(l&O)===O){O!==0&&O===Rl&&(Ls=!0),w!==null&&(w=w.next={lane:0,tag:h.tag,payload:h.payload,callback:null,next:null});e:{var K=e,W=h;O=t;var _e=n;switch(W.tag){case 1:if(K=W.payload,typeof K=="function"){L=K.call(_e,L,O);break e}L=K;break e;case 3:K.flags=K.flags&-65537|128;case 0:if(K=W.payload,O=typeof K=="function"?K.call(_e,L,O):K,O==null)break e;L=T({},L,O);break e;case 2:xn=!0}}O=h.callback,O!==null&&(e.flags|=64,z&&(e.flags|=8192),z=u.callbacks,z===null?u.callbacks=[O]:z.push(O))}else z={lane:O,tag:h.tag,payload:h.payload,callback:h.callback,next:null},w===null?(N=w=z,x=L):w=w.next=z,o|=O;if(h=h.next,h===null){if(h=u.shared.pending,h===null)break;z=h,h=z.next,z.next=null,u.lastBaseUpdate=z,u.shared.pending=null}}while(!0);w===null&&(x=L),u.baseState=x,u.firstBaseUpdate=N,u.lastBaseUpdate=w,c===null&&(u.shared.lanes=0),Nn|=o,e.lanes=o,e.memoizedState=L}}function gf(e,t){if(typeof e!="function")throw Error(r(191,e));e.call(t)}function bf(e,t){var n=e.callbacks;if(n!==null)for(e.callbacks=null,e=0;ec?c:8;var o=j.T,h={};j.T=h,nc(e,!1,t,n);try{var x=u(),N=j.S;if(N!==null&&N(h,x),x!==null&&typeof x=="object"&&typeof x.then=="function"){var w=Ry(x,l);_a(e,t,w,yt(e))}else _a(e,t,l,yt(e))}catch(L){_a(e,t,{then:function(){},status:"rejected",reason:L},yt())}finally{X.p=c,o!==null&&h.types!==null&&(o.types=h.types),j.T=o}}function jy(){}function ec(e,t,n,l){if(e.tag!==5)throw Error(r(476));var u=Wf(e).queue;Ff(e,u,t,P,n===null?jy:function(){return If(e),n(l)})}function Wf(e){var t=e.memoizedState;if(t!==null)return t;t={memoizedState:P,baseState:P,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:It,lastRenderedState:P},next:null};var n={};return t.next={memoizedState:n,baseState:n,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:It,lastRenderedState:n},next:null},e.memoizedState=t,e=e.alternate,e!==null&&(e.memoizedState=t),t}function If(e){var t=Wf(e);t.next===null&&(t=e.alternate.memoizedState),_a(e,t.next.queue,{},yt())}function tc(){return Ke(Ya)}function Pf(){return Ue().memoizedState}function ed(){return Ue().memoizedState}function Uy(e){for(var t=e.return;t!==null;){switch(t.tag){case 24:case 3:var n=yt();e=Sn(n);var l=En(t,e,n);l!==null&&(ut(l,t,n),ga(l,t,n)),t={cache:Ms()},e.payload=t;return}t=t.return}}function By(e,t,n){var l=yt();n={lane:l,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null},qi(e)?nd(t,n):(n=bs(e,t,n,l),n!==null&&(ut(n,e,l),ld(n,t,l)))}function td(e,t,n){var l=yt();_a(e,t,n,l)}function _a(e,t,n,l){var u={lane:l,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null};if(qi(e))nd(t,u);else{var c=e.alternate;if(e.lanes===0&&(c===null||c.lanes===0)&&(c=t.lastRenderedReducer,c!==null))try{var o=t.lastRenderedState,h=c(o,n);if(u.hasEagerState=!0,u.eagerState=h,ot(h,o))return bi(e,t,u,0),Te===null&&gi(),!1}catch{}finally{}if(n=bs(e,t,u,l),n!==null)return ut(n,e,l),ld(n,t,l),!0}return!1}function nc(e,t,n,l){if(l={lane:2,revertLane:jc(),gesture:null,action:l,hasEagerState:!1,eagerState:null,next:null},qi(e)){if(t)throw Error(r(479))}else t=bs(e,n,l,2),t!==null&&ut(t,e,2)}function qi(e){var t=e.alternate;return e===le||t!==null&&t===le}function nd(e,t){wl=Di=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function ld(e,t,n){if((n&4194048)!==0){var l=t.lanes;l&=e.pendingLanes,n|=l,t.lanes=n,uo(e,n)}}var Aa={readContext:Ke,use:Ui,useCallback:ze,useContext:ze,useEffect:ze,useImperativeHandle:ze,useLayoutEffect:ze,useInsertionEffect:ze,useMemo:ze,useReducer:ze,useRef:ze,useState:ze,useDebugValue:ze,useDeferredValue:ze,useTransition:ze,useSyncExternalStore:ze,useId:ze,useHostTransitionStatus:ze,useFormState:ze,useActionState:ze,useOptimistic:ze,useMemoCache:ze,useCacheRefresh:ze};Aa.useEffectEvent=ze;var ad={readContext:Ke,use:Ui,useCallback:function(e,t){return Pe().memoizedState=[e,t===void 0?null:t],e},useContext:Ke,useEffect:kf,useImperativeHandle:function(e,t,n){n=n!=null?n.concat([e]):null,Li(4194308,4,Qf.bind(null,t,e),n)},useLayoutEffect:function(e,t){return Li(4194308,4,e,t)},useInsertionEffect:function(e,t){Li(4,2,e,t)},useMemo:function(e,t){var n=Pe();t=t===void 0?null:t;var l=e();if(ll){hn(!0);try{e()}finally{hn(!1)}}return n.memoizedState=[l,t],l},useReducer:function(e,t,n){var l=Pe();if(n!==void 0){var u=n(t);if(ll){hn(!0);try{n(t)}finally{hn(!1)}}}else u=t;return l.memoizedState=l.baseState=u,e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:u},l.queue=e,e=e.dispatch=By.bind(null,le,e),[l.memoizedState,e]},useRef:function(e){var t=Pe();return e={current:e},t.memoizedState=e},useState:function(e){e=$s(e);var t=e.queue,n=td.bind(null,le,t);return t.dispatch=n,[e.memoizedState,n]},useDebugValue:Is,useDeferredValue:function(e,t){var n=Pe();return Ps(n,e,t)},useTransition:function(){var e=$s(!1);return e=Ff.bind(null,le,e.queue,!0,!1),Pe().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,t,n){var l=le,u=Pe();if(de){if(n===void 0)throw Error(r(407));n=n()}else{if(n=t(),Te===null)throw Error(r(349));(oe&127)!==0||Tf(l,t,n)}u.memoizedState=n;var c={value:n,getSnapshot:t};return u.queue=c,kf(Nf.bind(null,l,c,e),[e]),l.flags|=2048,Ul(9,{destroy:void 0},Cf.bind(null,l,c,n,t),null),n},useId:function(){var e=Pe(),t=Te.identifierPrefix;if(de){var n=Lt,l=Bt;n=(l&~(1<<32-rt(l)-1)).toString(32)+n,t="_"+t+"R_"+n,n=wi++,0<\/script>",c=c.removeChild(c.firstChild);break;case"select":c=typeof l.is=="string"?o.createElement("select",{is:l.is}):o.createElement("select"),l.multiple?c.multiple=!0:l.size&&(c.size=l.size);break;default:c=typeof l.is=="string"?o.createElement(u,{is:l.is}):o.createElement(u)}}c[Qe]=t,c[et]=l;e:for(o=t.child;o!==null;){if(o.tag===5||o.tag===6)c.appendChild(o.stateNode);else if(o.tag!==4&&o.tag!==27&&o.child!==null){o.child.return=o,o=o.child;continue}if(o===t)break e;for(;o.sibling===null;){if(o.return===null||o.return===t)break e;o=o.return}o.sibling.return=o.return,o=o.sibling}t.stateNode=c;e:switch($e(c,u,l),u){case"button":case"input":case"select":case"textarea":l=!!l.autoFocus;break e;case"img":l=!0;break e;default:l=!1}l&&en(t)}}return Ne(t),yc(t,t.type,e===null?null:e.memoizedProps,t.pendingProps,n),null;case 6:if(e&&t.stateNode!=null)e.memoizedProps!==l&&en(t);else{if(typeof l!="string"&&t.stateNode===null)throw Error(r(166));if(e=se.current,Cl(t)){if(e=t.stateNode,n=t.memoizedProps,l=null,u=Ze,u!==null)switch(u.tag){case 27:case 5:l=u.memoizedProps}e[Qe]=t,e=!!(e.nodeValue===n||l!==null&&l.suppressHydrationWarning===!0||_h(e.nodeValue,n)),e||gn(t,!0)}else e=iu(e).createTextNode(l),e[Qe]=t,t.stateNode=e}return Ne(t),null;case 31:if(n=t.memoizedState,e===null||e.memoizedState!==null){if(l=Cl(t),n!==null){if(e===null){if(!l)throw Error(r(318));if(e=t.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(r(557));e[Qe]=t}else Fn(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;Ne(t),e=!1}else n=Cs(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=n),e=!0;if(!e)return t.flags&256?(ht(t),t):(ht(t),null);if((t.flags&128)!==0)throw Error(r(558))}return Ne(t),null;case 13:if(l=t.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(u=Cl(t),l!==null&&l.dehydrated!==null){if(e===null){if(!u)throw Error(r(318));if(u=t.memoizedState,u=u!==null?u.dehydrated:null,!u)throw Error(r(317));u[Qe]=t}else Fn(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;Ne(t),u=!1}else u=Cs(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=u),u=!0;if(!u)return t.flags&256?(ht(t),t):(ht(t),null)}return ht(t),(t.flags&128)!==0?(t.lanes=n,t):(n=l!==null,e=e!==null&&e.memoizedState!==null,n&&(l=t.child,u=null,l.alternate!==null&&l.alternate.memoizedState!==null&&l.alternate.memoizedState.cachePool!==null&&(u=l.alternate.memoizedState.cachePool.pool),c=null,l.memoizedState!==null&&l.memoizedState.cachePool!==null&&(c=l.memoizedState.cachePool.pool),c!==u&&(l.flags|=2048)),n!==e&&n&&(t.child.flags|=8192),Gi(t,t.updateQueue),Ne(t),null);case 4:return we(),e===null&&Hc(t.stateNode.containerInfo),Ne(t),null;case 10:return Ft(t.type),Ne(t),null;case 19:if(H(je),l=t.memoizedState,l===null)return Ne(t),null;if(u=(t.flags&128)!==0,c=l.rendering,c===null)if(u)Ca(l,!1);else{if(De!==0||e!==null&&(e.flags&128)!==0)for(e=t.child;e!==null;){if(c=zi(e),c!==null){for(t.flags|=128,Ca(l,!1),e=c.updateQueue,t.updateQueue=e,Gi(t,e),t.subtreeFlags=0,e=n,n=t.child;n!==null;)ef(n,e),n=n.sibling;return G(je,je.current&1|2),de&&Jt(t,l.treeForkCount),t.child}e=e.sibling}l.tail!==null&&st()>$i&&(t.flags|=128,u=!0,Ca(l,!1),t.lanes=4194304)}else{if(!u)if(e=zi(c),e!==null){if(t.flags|=128,u=!0,e=e.updateQueue,t.updateQueue=e,Gi(t,e),Ca(l,!0),l.tail===null&&l.tailMode==="hidden"&&!c.alternate&&!de)return Ne(t),null}else 2*st()-l.renderingStartTime>$i&&n!==536870912&&(t.flags|=128,u=!0,Ca(l,!1),t.lanes=4194304);l.isBackwards?(c.sibling=t.child,t.child=c):(e=l.last,e!==null?e.sibling=c:t.child=c,l.last=c)}return l.tail!==null?(e=l.tail,l.rendering=e,l.tail=e.sibling,l.renderingStartTime=st(),e.sibling=null,n=je.current,G(je,u?n&1|2:n&1),de&&Jt(t,l.treeForkCount),e):(Ne(t),null);case 22:case 23:return ht(t),qs(),l=t.memoizedState!==null,e!==null?e.memoizedState!==null!==l&&(t.flags|=8192):l&&(t.flags|=8192),l?(n&536870912)!==0&&(t.flags&128)===0&&(Ne(t),t.subtreeFlags&6&&(t.flags|=8192)):Ne(t),n=t.updateQueue,n!==null&&Gi(t,n.retryQueue),n=null,e!==null&&e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(n=e.memoizedState.cachePool.pool),l=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(l=t.memoizedState.cachePool.pool),l!==n&&(t.flags|=2048),e!==null&&H(Pn),null;case 24:return n=null,e!==null&&(n=e.memoizedState.cache),t.memoizedState.cache!==n&&(t.flags|=2048),Ft(Be),Ne(t),null;case 25:return null;case 30:return null}throw Error(r(156,t.tag))}function ky(e,t){switch(As(t),t.tag){case 1:return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return Ft(Be),we(),e=t.flags,(e&65536)!==0&&(e&128)===0?(t.flags=e&-65537|128,t):null;case 26:case 27:case 5:return ti(t),null;case 31:if(t.memoizedState!==null){if(ht(t),t.alternate===null)throw Error(r(340));Fn()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 13:if(ht(t),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(r(340));Fn()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return H(je),null;case 4:return we(),null;case 10:return Ft(t.type),null;case 22:case 23:return ht(t),qs(),e!==null&&H(Pn),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 24:return Ft(Be),null;case 25:return null;default:return null}}function Rd(e,t){switch(As(t),t.tag){case 3:Ft(Be),we();break;case 26:case 27:case 5:ti(t);break;case 4:we();break;case 31:t.memoizedState!==null&&ht(t);break;case 13:ht(t);break;case 19:H(je);break;case 10:Ft(t.type);break;case 22:case 23:ht(t),qs(),e!==null&&H(Pn);break;case 24:Ft(Be)}}function Na(e,t){try{var n=t.updateQueue,l=n!==null?n.lastEffect:null;if(l!==null){var u=l.next;n=u;do{if((n.tag&e)===e){l=void 0;var c=n.create,o=n.inst;l=c(),o.destroy=l}n=n.next}while(n!==u)}}catch(h){be(t,t.return,h)}}function Tn(e,t,n){try{var l=t.updateQueue,u=l!==null?l.lastEffect:null;if(u!==null){var c=u.next;l=c;do{if((l.tag&e)===e){var o=l.inst,h=o.destroy;if(h!==void 0){o.destroy=void 0,u=t;var x=n,N=h;try{N()}catch(w){be(u,x,w)}}}l=l.next}while(l!==c)}}catch(w){be(t,t.return,w)}}function Od(e){var t=e.updateQueue;if(t!==null){var n=e.stateNode;try{bf(t,n)}catch(l){be(e,e.return,l)}}}function Md(e,t,n){n.props=al(e.type,e.memoizedProps),n.state=e.memoizedState;try{n.componentWillUnmount()}catch(l){be(e,t,l)}}function Ra(e,t){try{var n=e.ref;if(n!==null){switch(e.tag){case 26:case 27:case 5:var l=e.stateNode;break;case 30:l=e.stateNode;break;default:l=e.stateNode}typeof n=="function"?e.refCleanup=n(l):n.current=l}}catch(u){be(e,t,u)}}function Ht(e,t){var n=e.ref,l=e.refCleanup;if(n!==null)if(typeof l=="function")try{l()}catch(u){be(e,t,u)}finally{e.refCleanup=null,e=e.alternate,e!=null&&(e.refCleanup=null)}else if(typeof n=="function")try{n(null)}catch(u){be(e,t,u)}else n.current=null}function zd(e){var t=e.type,n=e.memoizedProps,l=e.stateNode;try{e:switch(t){case"button":case"input":case"select":case"textarea":n.autoFocus&&l.focus();break e;case"img":n.src?l.src=n.src:n.srcSet&&(l.srcset=n.srcSet)}}catch(u){be(e,e.return,u)}}function vc(e,t,n){try{var l=e.stateNode;r0(l,e.type,n,t),l[et]=t}catch(u){be(e,e.return,u)}}function Dd(e){return e.tag===5||e.tag===3||e.tag===26||e.tag===27&&Dn(e.type)||e.tag===4}function gc(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||Dd(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.tag===27&&Dn(e.type)||e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function bc(e,t,n){var l=e.tag;if(l===5||l===6)e=e.stateNode,t?(n.nodeType===9?n.body:n.nodeName==="HTML"?n.ownerDocument.body:n).insertBefore(e,t):(t=n.nodeType===9?n.body:n.nodeName==="HTML"?n.ownerDocument.body:n,t.appendChild(e),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=Qt));else if(l!==4&&(l===27&&Dn(e.type)&&(n=e.stateNode,t=null),e=e.child,e!==null))for(bc(e,t,n),e=e.sibling;e!==null;)bc(e,t,n),e=e.sibling}function Qi(e,t,n){var l=e.tag;if(l===5||l===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(l!==4&&(l===27&&Dn(e.type)&&(n=e.stateNode),e=e.child,e!==null))for(Qi(e,t,n),e=e.sibling;e!==null;)Qi(e,t,n),e=e.sibling}function wd(e){var t=e.stateNode,n=e.memoizedProps;try{for(var l=e.type,u=t.attributes;u.length;)t.removeAttributeNode(u[0]);$e(t,l,n),t[Qe]=e,t[et]=n}catch(c){be(e,e.return,c)}}var tn=!1,qe=!1,xc=!1,jd=typeof WeakSet=="function"?WeakSet:Set,Ge=null;function Vy(e,t){if(e=e.containerInfo,kc=du,e=Qo(e),hs(e)){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{n=(n=e.ownerDocument)&&n.defaultView||window;var l=n.getSelection&&n.getSelection();if(l&&l.rangeCount!==0){n=l.anchorNode;var u=l.anchorOffset,c=l.focusNode;l=l.focusOffset;try{n.nodeType,c.nodeType}catch{n=null;break e}var o=0,h=-1,x=-1,N=0,w=0,L=e,O=null;t:for(;;){for(var z;L!==n||u!==0&&L.nodeType!==3||(h=o+u),L!==c||l!==0&&L.nodeType!==3||(x=o+l),L.nodeType===3&&(o+=L.nodeValue.length),(z=L.firstChild)!==null;)O=L,L=z;for(;;){if(L===e)break t;if(O===n&&++N===u&&(h=o),O===c&&++w===l&&(x=o),(z=L.nextSibling)!==null)break;L=O,O=L.parentNode}L=z}n=h===-1||x===-1?null:{start:h,end:x}}else n=null}n=n||{start:0,end:0}}else n=null;for(Vc={focusedElem:e,selectionRange:n},du=!1,Ge=t;Ge!==null;)if(t=Ge,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,Ge=e;else for(;Ge!==null;){switch(t=Ge,c=t.alternate,e=t.flags,t.tag){case 0:if((e&4)!==0&&(e=t.updateQueue,e=e!==null?e.events:null,e!==null))for(n=0;n title"))),$e(c,l,n),c[Qe]=e,Xe(c),l=c;break e;case"link":var o=Yh("link","href",u).get(l+(n.href||""));if(o){for(var h=0;h_e&&(o=_e,_e=W,W=o);var _=Xo(h,W),S=Xo(h,_e);if(_&&S&&(z.rangeCount!==1||z.anchorNode!==_.node||z.anchorOffset!==_.offset||z.focusNode!==S.node||z.focusOffset!==S.offset)){var C=L.createRange();C.setStart(_.node,_.offset),z.removeAllRanges(),W>_e?(z.addRange(C),z.extend(S.node,S.offset)):(C.setEnd(S.node,S.offset),z.addRange(C))}}}}for(L=[],z=h;z=z.parentNode;)z.nodeType===1&&L.push({element:z,left:z.scrollLeft,top:z.scrollTop});for(typeof h.focus=="function"&&h.focus(),h=0;hn?32:n,j.T=null,n=Nc,Nc=null;var c=On,o=sn;if(ke=0,Yl=On=null,sn=0,(ye&6)!==0)throw Error(r(331));var h=ye;if(ye|=4,Qd(c.current),Vd(c,c.current,o,n),ye=h,ja(0,!1),ct&&typeof ct.onPostCommitFiberRoot=="function")try{ct.onPostCommitFiberRoot(Il,c)}catch{}return!0}finally{X.p=u,j.T=l,rh(e,t)}}function fh(e,t,n){t=St(n,t),t=uc(e.stateNode,t,2),e=En(e,t,2),e!==null&&(ea(e,2),qt(e))}function be(e,t,n){if(e.tag===3)fh(e,e,n);else for(;t!==null;){if(t.tag===3){fh(t,e,n);break}else if(t.tag===1){var l=t.stateNode;if(typeof t.type.getDerivedStateFromError=="function"||typeof l.componentDidCatch=="function"&&(Rn===null||!Rn.has(l))){e=St(n,e),n=dd(2),l=En(t,n,2),l!==null&&(hd(n,l,t,e),ea(l,2),qt(l));break}}t=t.return}}function zc(e,t,n){var l=e.pingCache;if(l===null){l=e.pingCache=new Qy;var u=new Set;l.set(t,u)}else u=l.get(t),u===void 0&&(u=new Set,l.set(t,u));u.has(n)||(_c=!0,u.add(n),e=Fy.bind(null,e,t,n),t.then(e,e))}function Fy(e,t,n){var l=e.pingCache;l!==null&&l.delete(t),e.pingedLanes|=e.suspendedLanes&n,e.warmLanes&=~n,Te===e&&(oe&n)===n&&(De===4||De===3&&(oe&62914560)===oe&&300>st()-Ji?(ye&2)===0&&kl(e,0):Ac|=n,ql===oe&&(ql=0)),qt(e)}function dh(e,t){t===0&&(t=ao()),e=Jn(e,t),e!==null&&(ea(e,t),qt(e))}function Wy(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),dh(e,n)}function Iy(e,t){var n=0;switch(e.tag){case 31:case 13:var l=e.stateNode,u=e.memoizedState;u!==null&&(n=u.retryLane);break;case 19:l=e.stateNode;break;case 22:l=e.stateNode._retryCache;break;default:throw Error(r(314))}l!==null&&l.delete(t),dh(e,n)}function Py(e,t){return Gu(e,t)}var tu=null,Xl=null,Dc=!1,nu=!1,wc=!1,zn=0;function qt(e){e!==Xl&&e.next===null&&(Xl===null?tu=Xl=e:Xl=Xl.next=e),nu=!0,Dc||(Dc=!0,t0())}function ja(e,t){if(!wc&&nu){wc=!0;do for(var n=!1,l=tu;l!==null;){if(e!==0){var u=l.pendingLanes;if(u===0)var c=0;else{var o=l.suspendedLanes,h=l.pingedLanes;c=(1<<31-rt(42|e)+1)-1,c&=u&~(o&~h),c=c&201326741?c&201326741|1:c?c|2:0}c!==0&&(n=!0,yh(l,c))}else c=oe,c=ui(l,l===Te?c:0,l.cancelPendingCommit!==null||l.timeoutHandle!==-1),(c&3)===0||Pl(l,c)||(n=!0,yh(l,c));l=l.next}while(n);wc=!1}}function e0(){hh()}function hh(){nu=Dc=!1;var e=0;zn!==0&&f0()&&(e=zn);for(var t=st(),n=null,l=tu;l!==null;){var u=l.next,c=mh(l,t);c===0?(l.next=null,n===null?tu=u:n.next=u,u===null&&(Xl=n)):(n=l,(e!==0||(c&3)!==0)&&(nu=!0)),l=u}ke!==0&&ke!==5||ja(e),zn!==0&&(zn=0)}function mh(e,t){for(var n=e.suspendedLanes,l=e.pingedLanes,u=e.expirationTimes,c=e.pendingLanes&-62914561;0h)break;var w=x.transferSize,L=x.initiatorType;w&&Ah(L)&&(x=x.responseEnd,o+=w*(x"u"?null:document;function Bh(e,t,n){var l=Gl;if(l&&typeof t=="string"&&t){var u=bt(t);u='link[rel="'+e+'"][href="'+u+'"]',typeof n=="string"&&(u+='[crossorigin="'+n+'"]'),Uh.has(u)||(Uh.add(u),e={rel:e,crossOrigin:n,href:t},l.querySelector(u)===null&&(t=l.createElement("link"),$e(t,"link",e),Xe(t),l.head.appendChild(t)))}}function x0(e){cn.D(e),Bh("dns-prefetch",e,null)}function S0(e,t){cn.C(e,t),Bh("preconnect",e,t)}function E0(e,t,n){cn.L(e,t,n);var l=Gl;if(l&&e&&t){var u='link[rel="preload"][as="'+bt(t)+'"]';t==="image"&&n&&n.imageSrcSet?(u+='[imagesrcset="'+bt(n.imageSrcSet)+'"]',typeof n.imageSizes=="string"&&(u+='[imagesizes="'+bt(n.imageSizes)+'"]')):u+='[href="'+bt(e)+'"]';var c=u;switch(t){case"style":c=Ql(e);break;case"script":c=Zl(e)}Nt.has(c)||(e=T({rel:"preload",href:t==="image"&&n&&n.imageSrcSet?void 0:e,as:t},n),Nt.set(c,e),l.querySelector(u)!==null||t==="style"&&l.querySelector(Ha(c))||t==="script"&&l.querySelector(qa(c))||(t=l.createElement("link"),$e(t,"link",e),Xe(t),l.head.appendChild(t)))}}function _0(e,t){cn.m(e,t);var n=Gl;if(n&&e){var l=t&&typeof t.as=="string"?t.as:"script",u='link[rel="modulepreload"][as="'+bt(l)+'"][href="'+bt(e)+'"]',c=u;switch(l){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":c=Zl(e)}if(!Nt.has(c)&&(e=T({rel:"modulepreload",href:e},t),Nt.set(c,e),n.querySelector(u)===null)){switch(l){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(n.querySelector(qa(c)))return}l=n.createElement("link"),$e(l,"link",e),Xe(l),n.head.appendChild(l)}}}function A0(e,t,n){cn.S(e,t,n);var l=Gl;if(l&&e){var u=hl(l).hoistableStyles,c=Ql(e);t=t||"default";var o=u.get(c);if(!o){var h={loading:0,preload:null};if(o=l.querySelector(Ha(c)))h.loading=5;else{e=T({rel:"stylesheet",href:e,"data-precedence":t},n),(n=Nt.get(c))&&$c(e,n);var x=o=l.createElement("link");Xe(x),$e(x,"link",e),x._p=new Promise(function(N,w){x.onload=N,x.onerror=w}),x.addEventListener("load",function(){h.loading|=1}),x.addEventListener("error",function(){h.loading|=2}),h.loading|=4,su(o,t,l)}o={type:"stylesheet",instance:o,count:1,state:h},u.set(c,o)}}}function T0(e,t){cn.X(e,t);var n=Gl;if(n&&e){var l=hl(n).hoistableScripts,u=Zl(e),c=l.get(u);c||(c=n.querySelector(qa(u)),c||(e=T({src:e,async:!0},t),(t=Nt.get(u))&&Fc(e,t),c=n.createElement("script"),Xe(c),$e(c,"link",e),n.head.appendChild(c)),c={type:"script",instance:c,count:1,state:null},l.set(u,c))}}function C0(e,t){cn.M(e,t);var n=Gl;if(n&&e){var l=hl(n).hoistableScripts,u=Zl(e),c=l.get(u);c||(c=n.querySelector(qa(u)),c||(e=T({src:e,async:!0,type:"module"},t),(t=Nt.get(u))&&Fc(e,t),c=n.createElement("script"),Xe(c),$e(c,"link",e),n.head.appendChild(c)),c={type:"script",instance:c,count:1,state:null},l.set(u,c))}}function Lh(e,t,n,l){var u=(u=se.current)?uu(u):null;if(!u)throw Error(r(446));switch(e){case"meta":case"title":return null;case"style":return typeof n.precedence=="string"&&typeof n.href=="string"?(t=Ql(n.href),n=hl(u).hoistableStyles,l=n.get(t),l||(l={type:"style",instance:null,count:0,state:null},n.set(t,l)),l):{type:"void",instance:null,count:0,state:null};case"link":if(n.rel==="stylesheet"&&typeof n.href=="string"&&typeof n.precedence=="string"){e=Ql(n.href);var c=hl(u).hoistableStyles,o=c.get(e);if(o||(u=u.ownerDocument||u,o={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},c.set(e,o),(c=u.querySelector(Ha(e)))&&!c._p&&(o.instance=c,o.state.loading=5),Nt.has(e)||(n={rel:"preload",as:"style",href:n.href,crossOrigin:n.crossOrigin,integrity:n.integrity,media:n.media,hrefLang:n.hrefLang,referrerPolicy:n.referrerPolicy},Nt.set(e,n),c||N0(u,e,n,o.state))),t&&l===null)throw Error(r(528,""));return o}if(t&&l!==null)throw Error(r(529,""));return null;case"script":return t=n.async,n=n.src,typeof n=="string"&&t&&typeof t!="function"&&typeof t!="symbol"?(t=Zl(n),n=hl(u).hoistableScripts,l=n.get(t),l||(l={type:"script",instance:null,count:0,state:null},n.set(t,l)),l):{type:"void",instance:null,count:0,state:null};default:throw Error(r(444,e))}}function Ql(e){return'href="'+bt(e)+'"'}function Ha(e){return'link[rel="stylesheet"]['+e+"]"}function Hh(e){return T({},e,{"data-precedence":e.precedence,precedence:null})}function N0(e,t,n,l){e.querySelector('link[rel="preload"][as="style"]['+t+"]")?l.loading=1:(t=e.createElement("link"),l.preload=t,t.addEventListener("load",function(){return l.loading|=1}),t.addEventListener("error",function(){return l.loading|=2}),$e(t,"link",n),Xe(t),e.head.appendChild(t))}function Zl(e){return'[src="'+bt(e)+'"]'}function qa(e){return"script[async]"+e}function qh(e,t,n){if(t.count++,t.instance===null)switch(t.type){case"style":var l=e.querySelector('style[data-href~="'+bt(n.href)+'"]');if(l)return t.instance=l,Xe(l),l;var u=T({},n,{"data-href":n.href,"data-precedence":n.precedence,href:null,precedence:null});return l=(e.ownerDocument||e).createElement("style"),Xe(l),$e(l,"style",u),su(l,n.precedence,e),t.instance=l;case"stylesheet":u=Ql(n.href);var c=e.querySelector(Ha(u));if(c)return t.state.loading|=4,t.instance=c,Xe(c),c;l=Hh(n),(u=Nt.get(u))&&$c(l,u),c=(e.ownerDocument||e).createElement("link"),Xe(c);var o=c;return o._p=new Promise(function(h,x){o.onload=h,o.onerror=x}),$e(c,"link",l),t.state.loading|=4,su(c,n.precedence,e),t.instance=c;case"script":return c=Zl(n.src),(u=e.querySelector(qa(c)))?(t.instance=u,Xe(u),u):(l=n,(u=Nt.get(c))&&(l=T({},n),Fc(l,u)),e=e.ownerDocument||e,u=e.createElement("script"),Xe(u),$e(u,"link",l),e.head.appendChild(u),t.instance=u);case"void":return null;default:throw Error(r(443,t.type))}else t.type==="stylesheet"&&(t.state.loading&4)===0&&(l=t.instance,t.state.loading|=4,su(l,n.precedence,e));return t.instance}function su(e,t,n){for(var l=n.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),u=l.length?l[l.length-1]:null,c=u,o=0;o title"):null)}function R0(e,t,n){if(n===1||t.itemProp!=null)return!1;switch(e){case"meta":case"title":return!0;case"style":if(typeof t.precedence!="string"||typeof t.href!="string"||t.href==="")break;return!0;case"link":if(typeof t.rel!="string"||typeof t.href!="string"||t.href===""||t.onLoad||t.onError)break;switch(t.rel){case"stylesheet":return e=t.disabled,typeof t.precedence=="string"&&e==null;default:return!0}case"script":if(t.async&&typeof t.async!="function"&&typeof t.async!="symbol"&&!t.onLoad&&!t.onError&&t.src&&typeof t.src=="string")return!0}return!1}function Vh(e){return!(e.type==="stylesheet"&&(e.state.loading&3)===0)}function O0(e,t,n,l){if(n.type==="stylesheet"&&(typeof l.media!="string"||matchMedia(l.media).matches!==!1)&&(n.state.loading&4)===0){if(n.instance===null){var u=Ql(l.href),c=t.querySelector(Ha(u));if(c){t=c._p,t!==null&&typeof t=="object"&&typeof t.then=="function"&&(e.count++,e=ru.bind(e),t.then(e,e)),n.state.loading|=4,n.instance=c,Xe(c);return}c=t.ownerDocument||t,l=Hh(l),(u=Nt.get(u))&&$c(l,u),c=c.createElement("link"),Xe(c);var o=c;o._p=new Promise(function(h,x){o.onload=h,o.onerror=x}),$e(c,"link",l),n.instance=c}e.stylesheets===null&&(e.stylesheets=new Map),e.stylesheets.set(n,t),(t=n.state.preload)&&(n.state.loading&3)===0&&(e.count++,n=ru.bind(e),t.addEventListener("load",n),t.addEventListener("error",n))}}var Wc=0;function M0(e,t){return e.stylesheets&&e.count===0&&fu(e,e.stylesheets),0Wc?50:800)+t);return e.unsuspend=n,function(){e.unsuspend=null,clearTimeout(l),clearTimeout(u)}}:null}function ru(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)fu(this,this.stylesheets);else if(this.unsuspend){var e=this.unsuspend;this.unsuspend=null,e()}}}var ou=null;function fu(e,t){e.stylesheets=null,e.unsuspend!==null&&(e.count++,ou=new Map,t.forEach(z0,e),ou=null,ru.call(e))}function z0(e,t){if(!(t.state.loading&4)){var n=ou.get(e);if(n)var l=n.get(null);else{n=new Map,ou.set(e,n);for(var u=e.querySelectorAll("link[data-precedence],style[data-precedence]"),c=0;c"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(i)}catch(a){console.error(a)}}return i(),ur.exports=K0(),ur.exports}var $0=J0();var dm="popstate";function F0(i={}){function a(r,f){let{pathname:d,search:y,hash:b}=r.location;return Er("",{pathname:d,search:y,hash:b},f.state&&f.state.usr||null,f.state&&f.state.key||"default")}function s(r,f){return typeof f=="string"?f:Fa(f)}return I0(a,s,null,i)}function Oe(i,a){if(i===!1||i===null||typeof i>"u")throw new Error(a)}function jt(i,a){if(!i){typeof console<"u"&&console.warn(a);try{throw new Error(a)}catch{}}}function W0(){return Math.random().toString(36).substring(2,10)}function hm(i,a){return{usr:i.state,key:i.key,idx:a}}function Er(i,a,s=null,r){return{pathname:typeof i=="string"?i:i.pathname,search:"",hash:"",...typeof a=="string"?Jl(a):a,state:s,key:a&&a.key||r||W0()}}function Fa({pathname:i="/",search:a="",hash:s=""}){return a&&a!=="?"&&(i+=a.charAt(0)==="?"?a:"?"+a),s&&s!=="#"&&(i+=s.charAt(0)==="#"?s:"#"+s),i}function Jl(i){let a={};if(i){let s=i.indexOf("#");s>=0&&(a.hash=i.substring(s),i=i.substring(0,s));let r=i.indexOf("?");r>=0&&(a.search=i.substring(r),i=i.substring(0,r)),i&&(a.pathname=i)}return a}function I0(i,a,s,r={}){let{window:f=document.defaultView,v5Compat:d=!1}=r,y=f.history,b="POP",p=null,v=A();v==null&&(v=0,y.replaceState({...y.state,idx:v},""));function A(){return(y.state||{idx:null}).idx}function T(){b="POP";let Y=A(),k=Y==null?null:Y-v;v=Y,p&&p({action:b,location:V.location,delta:k})}function D(Y,k){b="PUSH";let B=Er(V.location,Y,k);v=A()+1;let q=hm(B,v),Z=V.createHref(B);try{y.pushState(q,"",Z)}catch(I){if(I instanceof DOMException&&I.name==="DataCloneError")throw I;f.location.assign(Z)}d&&p&&p({action:b,location:V.location,delta:1})}function R(Y,k){b="REPLACE";let B=Er(V.location,Y,k);v=A();let q=hm(B,v),Z=V.createHref(B);y.replaceState(q,"",Z),d&&p&&p({action:b,location:V.location,delta:0})}function M(Y){return P0(Y)}let V={get action(){return b},get location(){return i(f,y)},listen(Y){if(p)throw new Error("A history only accepts one active listener");return f.addEventListener(dm,T),p=Y,()=>{f.removeEventListener(dm,T),p=null}},createHref(Y){return a(f,Y)},createURL:M,encodeLocation(Y){let k=M(Y);return{pathname:k.pathname,search:k.search,hash:k.hash}},push:D,replace:R,go(Y){return y.go(Y)}};return V}function P0(i,a=!1){let s="http://localhost";typeof window<"u"&&(s=window.location.origin!=="null"?window.location.origin:window.location.href),Oe(s,"No window.location.(origin|href) available to create URL");let r=typeof i=="string"?i:Fa(i);return r=r.replace(/ $/,"%20"),!a&&r.startsWith("//")&&(r=s+r),new URL(r,s)}function Mm(i,a,s="/"){return ev(i,a,s,!1)}function ev(i,a,s,r){let f=typeof a=="string"?Jl(a):a,d=fn(f.pathname||"/",s);if(d==null)return null;let y=zm(i);tv(y);let b=null;for(let p=0;b==null&&p{let A={relativePath:v===void 0?y.path||"":v,caseSensitive:y.caseSensitive===!0,childrenIndex:b,route:y};if(A.relativePath.startsWith("/")){if(!A.relativePath.startsWith(r)&&p)return;Oe(A.relativePath.startsWith(r),`Absolute route path "${A.relativePath}" nested under path "${r}" is not valid. An absolute child route path must start with the combined path of all its parent routes.`),A.relativePath=A.relativePath.slice(r.length)}let T=rn([r,A.relativePath]),D=s.concat(A);y.children&&y.children.length>0&&(Oe(y.index!==!0,`Index routes must not have child routes. Please remove all child routes from route path "${T}".`),zm(y.children,a,D,T,p)),!(y.path==null&&!y.index)&&a.push({path:T,score:cv(T,y.index),routesMeta:D})};return i.forEach((y,b)=>{if(y.path===""||!y.path?.includes("?"))d(y,b);else for(let p of Dm(y.path))d(y,b,!0,p)}),a}function Dm(i){let a=i.split("/");if(a.length===0)return[];let[s,...r]=a,f=s.endsWith("?"),d=s.replace(/\?$/,"");if(r.length===0)return f?[d,""]:[d];let y=Dm(r.join("/")),b=[];return b.push(...y.map(p=>p===""?d:[d,p].join("/"))),f&&b.push(...y),b.map(p=>i.startsWith("/")&&p===""?"/":p)}function tv(i){i.sort((a,s)=>a.score!==s.score?s.score-a.score:rv(a.routesMeta.map(r=>r.childrenIndex),s.routesMeta.map(r=>r.childrenIndex)))}var nv=/^:[\w-]+$/,lv=3,av=2,iv=1,uv=10,sv=-2,mm=i=>i==="*";function cv(i,a){let s=i.split("/"),r=s.length;return s.some(mm)&&(r+=sv),a&&(r+=av),s.filter(f=>!mm(f)).reduce((f,d)=>f+(nv.test(d)?lv:d===""?iv:uv),r)}function rv(i,a){return i.length===a.length&&i.slice(0,-1).every((r,f)=>r===a[f])?i[i.length-1]-a[a.length-1]:0}function ov(i,a,s=!1){let{routesMeta:r}=i,f={},d="/",y=[];for(let b=0;b{if(A==="*"){let M=b[D]||"";y=d.slice(0,d.length-M.length).replace(/(.)\/+$/,"$1")}const R=b[D];return T&&!R?v[A]=void 0:v[A]=(R||"").replace(/%2F/g,"/"),v},{}),pathname:d,pathnameBase:y,pattern:i}}function fv(i,a=!1,s=!0){jt(i==="*"||!i.endsWith("*")||i.endsWith("/*"),`Route path "${i}" will be treated as if it were "${i.replace(/\*$/,"/*")}" because the \`*\` character must always follow a \`/\` in the pattern. To get rid of this warning, please change the route path to "${i.replace(/\*$/,"/*")}".`);let r=[],f="^"+i.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(y,b,p)=>(r.push({paramName:b,isOptional:p!=null}),p?"/?([^\\/]+)?":"/([^\\/]+)")).replace(/\/([\w-]+)\?(\/|$)/g,"(/$1)?$2");return i.endsWith("*")?(r.push({paramName:"*"}),f+=i==="*"||i==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):s?f+="\\/*$":i!==""&&i!=="/"&&(f+="(?:(?=\\/|$))"),[new RegExp(f,a?void 0:"i"),r]}function dv(i){try{return i.split("/").map(a=>decodeURIComponent(a).replace(/\//g,"%2F")).join("/")}catch(a){return jt(!1,`The URL path "${i}" could not be decoded because it is a malformed URL segment. This is probably due to a bad percent encoding (${a}).`),i}}function fn(i,a){if(a==="/")return i;if(!i.toLowerCase().startsWith(a.toLowerCase()))return null;let s=a.endsWith("/")?a.length-1:a.length,r=i.charAt(s);return r&&r!=="/"?null:i.slice(s)||"/"}var hv=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,mv=i=>hv.test(i);function pv(i,a="/"){let{pathname:s,search:r="",hash:f=""}=typeof i=="string"?Jl(i):i,d;if(s)if(mv(s))d=s;else{if(s.includes("//")){let y=s;s=s.replace(/\/\/+/g,"/"),jt(!1,`Pathnames cannot have embedded double slashes - normalizing ${y} -> ${s}`)}s.startsWith("/")?d=pm(s.substring(1),"/"):d=pm(s,a)}else d=a;return{pathname:d,search:gv(r),hash:bv(f)}}function pm(i,a){let s=a.replace(/\/+$/,"").split("/");return i.split("/").forEach(f=>{f===".."?s.length>1&&s.pop():f!=="."&&s.push(f)}),s.length>1?s.join("/"):"/"}function or(i,a,s,r){return`Cannot include a '${i}' character in a manually specified \`to.${a}\` field [${JSON.stringify(r)}]. Please separate it out to the \`to.${s}\` field. Alternatively you may provide the full path as a string in and the router will parse it for you.`}function yv(i){return i.filter((a,s)=>s===0||a.route.path&&a.route.path.length>0)}function wm(i){let a=yv(i);return a.map((s,r)=>r===a.length-1?s.pathname:s.pathnameBase)}function jm(i,a,s,r=!1){let f;typeof i=="string"?f=Jl(i):(f={...i},Oe(!f.pathname||!f.pathname.includes("?"),or("?","pathname","search",f)),Oe(!f.pathname||!f.pathname.includes("#"),or("#","pathname","hash",f)),Oe(!f.search||!f.search.includes("#"),or("#","search","hash",f)));let d=i===""||f.pathname==="",y=d?"/":f.pathname,b;if(y==null)b=s;else{let T=a.length-1;if(!r&&y.startsWith("..")){let D=y.split("/");for(;D[0]==="..";)D.shift(),T-=1;f.pathname=D.join("/")}b=T>=0?a[T]:"/"}let p=pv(f,b),v=y&&y!=="/"&&y.endsWith("/"),A=(d||y===".")&&s.endsWith("/");return!p.pathname.endsWith("/")&&(v||A)&&(p.pathname+="/"),p}var rn=i=>i.join("/").replace(/\/\/+/g,"/"),vv=i=>i.replace(/\/+$/,"").replace(/^\/*/,"/"),gv=i=>!i||i==="?"?"":i.startsWith("?")?i:"?"+i,bv=i=>!i||i==="#"?"":i.startsWith("#")?i:"#"+i;function xv(i){return i!=null&&typeof i.status=="number"&&typeof i.statusText=="string"&&typeof i.internal=="boolean"&&"data"in i}Object.getOwnPropertyNames(Object.prototype).sort().join("\0");var Um=["POST","PUT","PATCH","DELETE"];new Set(Um);var Sv=["GET",...Um];new Set(Sv);var $l=g.createContext(null);$l.displayName="DataRouter";var ju=g.createContext(null);ju.displayName="DataRouterState";g.createContext(!1);var Bm=g.createContext({isTransitioning:!1});Bm.displayName="ViewTransition";var Ev=g.createContext(new Map);Ev.displayName="Fetchers";var _v=g.createContext(null);_v.displayName="Await";var Vt=g.createContext(null);Vt.displayName="Navigation";var Ia=g.createContext(null);Ia.displayName="Location";var dn=g.createContext({outlet:null,matches:[],isDataRoute:!1});dn.displayName="Route";var Ur=g.createContext(null);Ur.displayName="RouteError";function Av(i,{relative:a}={}){Oe(Pa(),"useHref() may be used only in the context of a component.");let{basename:s,navigator:r}=g.useContext(Vt),{hash:f,pathname:d,search:y}=ei(i,{relative:a}),b=d;return s!=="/"&&(b=d==="/"?s:rn([s,d])),r.createHref({pathname:b,search:y,hash:f})}function Pa(){return g.useContext(Ia)!=null}function rl(){return Oe(Pa(),"useLocation() may be used only in the context of a component."),g.useContext(Ia).location}var Lm="You should call navigate() in a React.useEffect(), not when your component is first rendered.";function Hm(i){g.useContext(Vt).static||g.useLayoutEffect(i)}function Tv(){let{isDataRoute:i}=g.useContext(dn);return i?Hv():Cv()}function Cv(){Oe(Pa(),"useNavigate() may be used only in the context of a component.");let i=g.useContext($l),{basename:a,navigator:s}=g.useContext(Vt),{matches:r}=g.useContext(dn),{pathname:f}=rl(),d=JSON.stringify(wm(r)),y=g.useRef(!1);return Hm(()=>{y.current=!0}),g.useCallback((p,v={})=>{if(jt(y.current,Lm),!y.current)return;if(typeof p=="number"){s.go(p);return}let A=jm(p,JSON.parse(d),f,v.relative==="path");i==null&&a!=="/"&&(A.pathname=A.pathname==="/"?a:rn([a,A.pathname])),(v.replace?s.replace:s.push)(A,v.state,v)},[a,s,d,f,i])}g.createContext(null);function ei(i,{relative:a}={}){let{matches:s}=g.useContext(dn),{pathname:r}=rl(),f=JSON.stringify(wm(s));return g.useMemo(()=>jm(i,JSON.parse(f),r,a==="path"),[i,f,r,a])}function Nv(i,a){return qm(i,a)}function qm(i,a,s,r,f){Oe(Pa(),"useRoutes() may be used only in the context of a component.");let{navigator:d}=g.useContext(Vt),{matches:y}=g.useContext(dn),b=y[y.length-1],p=b?b.params:{},v=b?b.pathname:"/",A=b?b.pathnameBase:"/",T=b&&b.route;{let B=T&&T.path||"";Ym(v,!T||B.endsWith("*")||B.endsWith("*?"),`You rendered descendant (or called \`useRoutes()\`) at "${v}" (under ) but the parent route path has no trailing "*". This means if you navigate deeper, the parent won't match anymore and therefore the child routes will never render. + +Please change the parent to .`)}let D=rl(),R;if(a){let B=typeof a=="string"?Jl(a):a;Oe(A==="/"||B.pathname?.startsWith(A),`When overriding the location using \`\` or \`useRoutes(routes, location)\`, the location pathname must begin with the portion of the URL pathname that was matched by all parent routes. The current pathname base is "${A}" but pathname "${B.pathname}" was given in the \`location\` prop.`),R=B}else R=D;let M=R.pathname||"/",V=M;if(A!=="/"){let B=A.replace(/^\//,"").split("/");V="/"+M.replace(/^\//,"").split("/").slice(B.length).join("/")}let Y=Mm(i,{pathname:V});jt(T||Y!=null,`No routes matched location "${R.pathname}${R.search}${R.hash}" `),jt(Y==null||Y[Y.length-1].route.element!==void 0||Y[Y.length-1].route.Component!==void 0||Y[Y.length-1].route.lazy!==void 0,`Matched leaf route at location "${R.pathname}${R.search}${R.hash}" does not have an element or Component. This means it will render an with a null value by default resulting in an "empty" page.`);let k=Dv(Y&&Y.map(B=>Object.assign({},B,{params:Object.assign({},p,B.params),pathname:rn([A,d.encodeLocation?d.encodeLocation(B.pathname.replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:B.pathname]),pathnameBase:B.pathnameBase==="/"?A:rn([A,d.encodeLocation?d.encodeLocation(B.pathnameBase.replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:B.pathnameBase])})),y,s,r,f);return a&&k?g.createElement(Ia.Provider,{value:{location:{pathname:"/",search:"",hash:"",state:null,key:"default",...R},navigationType:"POP"}},k):k}function Rv(){let i=Lv(),a=xv(i)?`${i.status} ${i.statusText}`:i instanceof Error?i.message:JSON.stringify(i),s=i instanceof Error?i.stack:null,r="rgba(200,200,200, 0.5)",f={padding:"0.5rem",backgroundColor:r},d={padding:"2px 4px",backgroundColor:r},y=null;return console.error("Error handled by React Router default ErrorBoundary:",i),y=g.createElement(g.Fragment,null,g.createElement("p",null,"💿 Hey developer 👋"),g.createElement("p",null,"You can provide a way better UX than this when your app throws errors by providing your own ",g.createElement("code",{style:d},"ErrorBoundary")," or"," ",g.createElement("code",{style:d},"errorElement")," prop on your route.")),g.createElement(g.Fragment,null,g.createElement("h2",null,"Unexpected Application Error!"),g.createElement("h3",{style:{fontStyle:"italic"}},a),s?g.createElement("pre",{style:f},s):null,y)}var Ov=g.createElement(Rv,null),Mv=class extends g.Component{constructor(i){super(i),this.state={location:i.location,revalidation:i.revalidation,error:i.error}}static getDerivedStateFromError(i){return{error:i}}static getDerivedStateFromProps(i,a){return a.location!==i.location||a.revalidation!=="idle"&&i.revalidation==="idle"?{error:i.error,location:i.location,revalidation:i.revalidation}:{error:i.error!==void 0?i.error:a.error,location:a.location,revalidation:i.revalidation||a.revalidation}}componentDidCatch(i,a){this.props.onError?this.props.onError(i,a):console.error("React Router caught the following error during render",i)}render(){return this.state.error!==void 0?g.createElement(dn.Provider,{value:this.props.routeContext},g.createElement(Ur.Provider,{value:this.state.error,children:this.props.component})):this.props.children}};function zv({routeContext:i,match:a,children:s}){let r=g.useContext($l);return r&&r.static&&r.staticContext&&(a.route.errorElement||a.route.ErrorBoundary)&&(r.staticContext._deepestRenderedBoundaryId=a.route.id),g.createElement(dn.Provider,{value:i},s)}function Dv(i,a=[],s=null,r=null,f=null){if(i==null){if(!s)return null;if(s.errors)i=s.matches;else if(a.length===0&&!s.initialized&&s.matches.length>0)i=s.matches;else return null}let d=i,y=s?.errors;if(y!=null){let A=d.findIndex(T=>T.route.id&&y?.[T.route.id]!==void 0);Oe(A>=0,`Could not find a matching route for errors on route IDs: ${Object.keys(y).join(",")}`),d=d.slice(0,Math.min(d.length,A+1))}let b=!1,p=-1;if(s)for(let A=0;A=0?d=d.slice(0,p+1):d=[d[0]];break}}}let v=s&&r?(A,T)=>{r(A,{location:s.location,params:s.matches?.[0]?.params??{},errorInfo:T})}:void 0;return d.reduceRight((A,T,D)=>{let R,M=!1,V=null,Y=null;s&&(R=y&&T.route.id?y[T.route.id]:void 0,V=T.route.errorElement||Ov,b&&(p<0&&D===0?(Ym("route-fallback",!1,"No `HydrateFallback` element provided to render during initial hydration"),M=!0,Y=null):p===D&&(M=!0,Y=T.route.hydrateFallbackElement||null)));let k=a.concat(d.slice(0,D+1)),B=()=>{let q;return R?q=V:M?q=Y:T.route.Component?q=g.createElement(T.route.Component,null):T.route.element?q=T.route.element:q=A,g.createElement(zv,{match:T,routeContext:{outlet:A,matches:k,isDataRoute:s!=null},children:q})};return s&&(T.route.ErrorBoundary||T.route.errorElement||D===0)?g.createElement(Mv,{location:s.location,revalidation:s.revalidation,component:V,error:R,children:B(),routeContext:{outlet:null,matches:k,isDataRoute:!0},onError:v}):B()},null)}function Br(i){return`${i} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function wv(i){let a=g.useContext($l);return Oe(a,Br(i)),a}function jv(i){let a=g.useContext(ju);return Oe(a,Br(i)),a}function Uv(i){let a=g.useContext(dn);return Oe(a,Br(i)),a}function Lr(i){let a=Uv(i),s=a.matches[a.matches.length-1];return Oe(s.route.id,`${i} can only be used on routes that contain a unique "id"`),s.route.id}function Bv(){return Lr("useRouteId")}function Lv(){let i=g.useContext(Ur),a=jv("useRouteError"),s=Lr("useRouteError");return i!==void 0?i:a.errors?.[s]}function Hv(){let{router:i}=wv("useNavigate"),a=Lr("useNavigate"),s=g.useRef(!1);return Hm(()=>{s.current=!0}),g.useCallback(async(f,d={})=>{jt(s.current,Lm),s.current&&(typeof f=="number"?i.navigate(f):await i.navigate(f,{fromRouteId:a,...d}))},[i,a])}var ym={};function Ym(i,a,s){!a&&!ym[i]&&(ym[i]=!0,jt(!1,s))}g.memo(qv);function qv({routes:i,future:a,state:s,unstable_onError:r}){return qm(i,void 0,s,r,a)}function _r(i){Oe(!1,"A is only ever to be used as the child of element, never rendered directly. Please wrap your in a .")}function Yv({basename:i="/",children:a=null,location:s,navigationType:r="POP",navigator:f,static:d=!1}){Oe(!Pa(),"You cannot render a inside another . You should never have more than one in your app.");let y=i.replace(/^\/*/,"/"),b=g.useMemo(()=>({basename:y,navigator:f,static:d,future:{}}),[y,f,d]);typeof s=="string"&&(s=Jl(s));let{pathname:p="/",search:v="",hash:A="",state:T=null,key:D="default"}=s,R=g.useMemo(()=>{let M=fn(p,y);return M==null?null:{location:{pathname:M,search:v,hash:A,state:T,key:D},navigationType:r}},[y,p,v,A,T,D,r]);return jt(R!=null,` is not able to match the URL "${p}${v}${A}" because it does not start with the basename, so the won't render anything.`),R==null?null:g.createElement(Vt.Provider,{value:b},g.createElement(Ia.Provider,{children:a,value:R}))}function kv({children:i,location:a}){return Nv(Ar(i),a)}function Ar(i,a=[]){let s=[];return g.Children.forEach(i,(r,f)=>{if(!g.isValidElement(r))return;let d=[...a,f];if(r.type===g.Fragment){s.push.apply(s,Ar(r.props.children,d));return}Oe(r.type===_r,`[${typeof r.type=="string"?r.type:r.type.name}] is not a component. All component children of must be a or `),Oe(!r.props.index||!r.props.children,"An index route cannot have child routes.");let y={id:r.props.id||d.join("-"),caseSensitive:r.props.caseSensitive,element:r.props.element,Component:r.props.Component,index:r.props.index,path:r.props.path,middleware:r.props.middleware,loader:r.props.loader,action:r.props.action,hydrateFallbackElement:r.props.hydrateFallbackElement,HydrateFallback:r.props.HydrateFallback,errorElement:r.props.errorElement,ErrorBoundary:r.props.ErrorBoundary,hasErrorBoundary:r.props.hasErrorBoundary===!0||r.props.ErrorBoundary!=null||r.props.errorElement!=null,shouldRevalidate:r.props.shouldRevalidate,handle:r.props.handle,lazy:r.props.lazy};r.props.children&&(y.children=Ar(r.props.children,d)),s.push(y)}),s}var Nu="get",Ru="application/x-www-form-urlencoded";function Uu(i){return i!=null&&typeof i.tagName=="string"}function Vv(i){return Uu(i)&&i.tagName.toLowerCase()==="button"}function Xv(i){return Uu(i)&&i.tagName.toLowerCase()==="form"}function Gv(i){return Uu(i)&&i.tagName.toLowerCase()==="input"}function Qv(i){return!!(i.metaKey||i.altKey||i.ctrlKey||i.shiftKey)}function Zv(i,a){return i.button===0&&(!a||a==="_self")&&!Qv(i)}var bu=null;function Kv(){if(bu===null)try{new FormData(document.createElement("form"),0),bu=!1}catch{bu=!0}return bu}var Jv=new Set(["application/x-www-form-urlencoded","multipart/form-data","text/plain"]);function fr(i){return i!=null&&!Jv.has(i)?(jt(!1,`"${i}" is not a valid \`encType\` for \`
\`/\`\` and will default to "${Ru}"`),null):i}function $v(i,a){let s,r,f,d,y;if(Xv(i)){let b=i.getAttribute("action");r=b?fn(b,a):null,s=i.getAttribute("method")||Nu,f=fr(i.getAttribute("enctype"))||Ru,d=new FormData(i)}else if(Vv(i)||Gv(i)&&(i.type==="submit"||i.type==="image")){let b=i.form;if(b==null)throw new Error('Cannot submit a - - + + + ); } @@ -106,12 +206,12 @@ function AuxMotorPanel({ orientation }) { [disabled, setAuxMotors], ); - const buttonClasses = orientation === 'landscape' ? 'text-xs' : 'text-[0.75rem]'; + const gridCols = orientation === 'landscape' ? 'grid-cols-1' : 'grid-cols-1 sm:grid-cols-2'; return ( -
-

Aux motors · hold to run

-
+
+

Aux controls

+
{AUX_BUTTONS.map((button) => ( ))}
-
+ ); } export function MobileLandscapeAuxColumn() { return ( -
+
); @@ -144,7 +245,7 @@ export function MobileLandscapeAuxColumn() { export function MobileLandscapeControlColumn() { return ( -
+
); @@ -152,8 +253,8 @@ export function MobileLandscapeControlColumn() { export default function MobilePortraitControls() { return ( -
-
+
+
diff --git a/webui/src/controls/inputs/KeyboardInputManager.jsx b/webui/src/controls/inputs/KeyboardInputManager.jsx index 21754a3d..70e3a607 100644 --- a/webui/src/controls/inputs/KeyboardInputManager.jsx +++ b/webui/src/controls/inputs/KeyboardInputManager.jsx @@ -4,6 +4,7 @@ import { useControlSystem } from '../ControlContext.jsx'; const SOURCE = 'keyboard'; const ZERO_VECTOR = { x: 0, y: 0, boost: false }; const ZERO_AUX = { main: 0, side: 0, vacuum: 0 }; +const SERVO_REPEAT_MS = 110; function shouldIgnoreEvent(event) { const target = event.target; @@ -118,8 +119,19 @@ export default function KeyboardInputManager() { const pressedKeysRef = useRef(new Set()); const lastVectorRef = useRef(ZERO_VECTOR); const lastAuxRef = useRef(ZERO_AUX); + const cameraHoldRef = useRef(new Set()); + const servoIntervalRef = useRef(null); - const updateFromKeys = useCallback(() => { + const actionKeys = useMemo(() => { + const entries = Object.values(keymap); + const set = new Set(); + entries.forEach((bindingSet) => { + bindingSet?.forEach((binding) => set.add(binding)); + }); + return set; + }, [keymap]); + + const driveFromKeys = useCallback(() => { const keys = pressedKeysRef.current; const vector = computeDriveVector(keys, keymap); const aux = computeAuxMotors(keys, keymap); @@ -138,46 +150,100 @@ export default function KeyboardInputManager() { }); }, [keymap, registerInputState, setAuxMotors, setDriveVector]); + const stopServoLoop = useCallback(() => { + if (servoIntervalRef.current) { + clearTimeout(servoIntervalRef.current); + servoIntervalRef.current = null; + } + }, []); + + const startServoLoop = useCallback(() => { + if (servoIntervalRef.current) return; + const tick = () => { + const up = cameraHoldRef.current.has('up') ? 1 : 0; + const down = cameraHoldRef.current.has('down') ? 1 : 0; + const direction = up - down; + if (direction === 0) { + servoIntervalRef.current = null; + return; + } + nudgeServo(direction * servoStep); + servoIntervalRef.current = setTimeout(tick, SERVO_REPEAT_MS); + }; + servoIntervalRef.current = setTimeout(tick, 0); + }, [nudgeServo, servoStep]); + + const updateServoHold = useCallback(() => { + if (cameraHoldRef.current.size === 0) { + stopServoLoop(); + } else { + startServoLoop(); + } + }, [startServoLoop, stopServoLoop]); + const resetAll = useCallback(() => { pressedKeysRef.current.clear(); + cameraHoldRef.current.clear(); + stopServoLoop(); lastVectorRef.current = ZERO_VECTOR; lastAuxRef.current = ZERO_AUX; stopAllMotion(); registerInputState(SOURCE, { keys: [], vector: ZERO_VECTOR, aux: ZERO_AUX }); - }, [registerInputState, stopAllMotion]); + }, [registerInputState, stopAllMotion, stopServoLoop]); useEffect(() => { function handleKeyDown(event) { if (shouldIgnoreEvent(event)) return; const key = event.key?.toLowerCase(); if (!key) return; - if (pressedKeysRef.current.has(key)) return; - pressedKeysRef.current.add(key); + if (actionKeys.has(key)) { + event.preventDefault(); + } + if (!pressedKeysRef.current.has(key)) { + pressedKeysRef.current.add(key); + } if (bindingHas(keymap.driveMacro, key)) { - event.preventDefault(); setMode('drive'); runMacro('drive-sequence'); } else if (bindingHas(keymap.dockMacro, key)) { - event.preventDefault(); setMode('dock'); runMacro('seek-dock'); } else if (bindingHas(keymap.cameraUp, key)) { - event.preventDefault(); - nudgeServo(servoStep); + cameraHoldRef.current.add('up'); + updateServoHold(); } else if (bindingHas(keymap.cameraDown, key)) { - event.preventDefault(); - nudgeServo(-servoStep); + cameraHoldRef.current.add('down'); + updateServoHold(); } - updateFromKeys(); + driveFromKeys(); } function handleKeyUp(event) { const key = event.key?.toLowerCase(); - if (!key || !pressedKeysRef.current.has(key)) return; + if (!key || !pressedKeysRef.current.has(key)) { + if (bindingHas(keymap.cameraUp, key)) { + cameraHoldRef.current.delete('up'); + updateServoHold(); + } else if (bindingHas(keymap.cameraDown, key)) { + cameraHoldRef.current.delete('down'); + updateServoHold(); + } + return; + } + pressedKeysRef.current.delete(key); - updateFromKeys(); + + if (bindingHas(keymap.cameraUp, key)) { + cameraHoldRef.current.delete('up'); + updateServoHold(); + } else if (bindingHas(keymap.cameraDown, key)) { + cameraHoldRef.current.delete('down'); + updateServoHold(); + } + + driveFromKeys(); } function handleBlur() { @@ -192,11 +258,18 @@ export default function KeyboardInputManager() { window.removeEventListener('keyup', handleKeyUp); window.removeEventListener('blur', handleBlur); }; - }, [keymap, nudgeServo, resetAll, runMacro, servoStep, setMode, updateFromKeys]); + }, [actionKeys, driveFromKeys, keymap, resetAll, runMacro, setMode, updateServoHold]); useEffect(() => { resetAll(); }, [state.roverId, resetAll]); + useEffect( + () => () => { + stopServoLoop(); + }, + [stopServoLoop], + ); + return null; }