commit 304a780bab1cce6ba83deed5b8949b9fa3917be1 Author: nafer Date: Wed May 20 12:03:52 2026 +0300 Удалена папка node_modules из отслеживания diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..5d0fa49 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,8 @@ +node_modules +dist +.env +.env.local +*.log +.DS_Store +.vscode +.idea \ No newline at end of file diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..eeba2ae --- /dev/null +++ b/.env.example @@ -0,0 +1,5 @@ +# Порядок запуска +PORT=3000 + +# API (если будет бэкенд в будущем) +VITE_API_URL=http://localhost:3001 \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c2658d7 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +node_modules/ diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..758513f --- /dev/null +++ b/Dockerfile @@ -0,0 +1,20 @@ +# syntax=docker/dockerfile:1 +FROM node:20-alpine AS builder + +WORKDIR /app + +COPY package*.json ./ +RUN npm ci + +COPY . . +RUN npm run build + +FROM nginx:alpine + +COPY --from=builder /app/dist /usr/share/nginx/html + +COPY nginx.conf /etc/nginx/conf.d/default.conf + +EXPOSE 80 + +CMD ["nginx", "-g", "daemon off;"] \ No newline at end of file diff --git a/dist/assets/index-BMnNlCpS.css b/dist/assets/index-BMnNlCpS.css new file mode 100644 index 0000000..792b3f0 --- /dev/null +++ b/dist/assets/index-BMnNlCpS.css @@ -0,0 +1 @@ +/*! tailwindcss v4.3.0 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-border-style:solid;--tw-leading:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-duration:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000}}}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.top-1\/2{top:50%}.z-50{z-index:50}.mx-auto{margin-inline:auto}.block{display:block}.flex{display:flex}.grid{display:grid}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.table-row{display:table-row}.aspect-\[16\/10\]{aspect-ratio:16/10}.h-auto{height:auto}.h-full{height:100%}.min-h-screen{min-height:100vh}.w-1\/2{width:50%}.w-full{width:100%}.flex-1{flex:1}.shrink-0{flex-shrink:0}.-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-baseline{align-items:baseline}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.rounded-full{border-radius:3.40282e38px}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.object-cover{object-fit:cover}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.text-\[10px\]{font-size:10px}.leading-none{--tw-leading:1;line-height:1}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,ease);transition-duration:var(--tw-duration,0s)}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,ease);transition-duration:var(--tw-duration,0s)}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,ease);transition-duration:var(--tw-duration,0s)}.duration-500{--tw-duration:.5s;transition-duration:.5s}@media(hover:hover){.group-hover\:scale-105:is(:where(.group):hover *){--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x) var(--tw-scale-y)}.hover\:underline:hover{text-decoration-line:underline}}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}:root{--primary:#0ea5e9}.dark{color-scheme:dark}.card{transition:transform .2s cubic-bezier(.23,1,.32,1),box-shadow .2s cubic-bezier(.23,1,.32,1)}.card:hover{transform:translateY(-2px);box-shadow:0 20px 25px -5px #0000001a,0 8px 10px -6px #0000001a}.table-row{transition:background-color .1s}.table-row:hover{background-color:#f3f4f6}.dark .table-row:hover{background-color:#1f2937}.filter-chip{transition:all .1s}.filter-chip.active{color:#fff;background-color:#0ea5e9;border-color:#0ea5e9}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000} diff --git a/dist/assets/index-sqybokJ8.js b/dist/assets/index-sqybokJ8.js new file mode 100644 index 0000000..141092d --- /dev/null +++ b/dist/assets/index-sqybokJ8.js @@ -0,0 +1,125 @@ +(function(){const r=document.createElement("link").relList;if(r&&r.supports&&r.supports("modulepreload"))return;for(const d of document.querySelectorAll('link[rel="modulepreload"]'))f(d);new MutationObserver(d=>{for(const m of d)if(m.type==="childList")for(const b of m.addedNodes)b.tagName==="LINK"&&b.rel==="modulepreload"&&f(b)}).observe(document,{childList:!0,subtree:!0});function o(d){const m={};return d.integrity&&(m.integrity=d.integrity),d.referrerPolicy&&(m.referrerPolicy=d.referrerPolicy),d.crossOrigin==="use-credentials"?m.credentials="include":d.crossOrigin==="anonymous"?m.credentials="omit":m.credentials="same-origin",m}function f(d){if(d.ep)return;d.ep=!0;const m=o(d);fetch(d.href,m)}})();var Of={exports:{}},Ou={};/** + * @license React + * react-jsx-runtime.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var Pd;function oy(){if(Pd)return Ou;Pd=1;var i=Symbol.for("react.transitional.element"),r=Symbol.for("react.fragment");function o(f,d,m){var b=null;if(m!==void 0&&(b=""+m),d.key!==void 0&&(b=""+d.key),"key"in d){m={};for(var A in d)A!=="key"&&(m[A]=d[A])}else m=d;return d=m.ref,{$$typeof:i,type:f,key:b,ref:d!==void 0?d:null,props:m}}return Ou.Fragment=r,Ou.jsx=o,Ou.jsxs=o,Ou}var tm;function dy(){return tm||(tm=1,Of.exports=oy()),Of.exports}var p=dy(),Cf={exports:{}},Cu={},Df={exports:{}},jf={};/** + * @license React + * scheduler.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var em;function my(){return em||(em=1,(function(i){function r(C,B){var $=C.length;C.push(B);t:for(;0<$;){var vt=$-1>>>1,bt=C[vt];if(0>>1;vtd(L,$))Qd(P,L)?(C[vt]=P,C[Q]=$,vt=Q):(C[vt]=L,C[U]=$,vt=U);else if(Qd(P,$))C[vt]=P,C[Q]=$,vt=Q;else break t}}return B}function d(C,B){var $=C.sortIndex-B.sortIndex;return $!==0?$:C.id-B.id}if(i.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var m=performance;i.unstable_now=function(){return m.now()}}else{var b=Date,A=b.now();i.unstable_now=function(){return b.now()-A}}var x=[],v=[],O=1,R=null,H=3,Z=!1,K=!1,G=!1,X=!1,q=typeof setTimeout=="function"?setTimeout:null,I=typeof clearTimeout=="function"?clearTimeout:null,k=typeof setImmediate<"u"?setImmediate:null;function yt(C){for(var B=o(v);B!==null;){if(B.callback===null)f(v);else if(B.startTime<=C)f(v),B.sortIndex=B.expirationTime,r(x,B);else break;B=o(v)}}function dt(C){if(G=!1,yt(C),!K)if(o(x)!==null)K=!0,Et||(Et=!0,Jt());else{var B=o(v);B!==null&&jt(dt,B.startTime-C)}}var Et=!1,W=-1,Mt=5,Kt=-1;function Ue(){return X?!0:!(i.unstable_now()-KtC&&Ue());){var vt=R.callback;if(typeof vt=="function"){R.callback=null,H=R.priorityLevel;var bt=vt(R.expirationTime<=C);if(C=i.unstable_now(),typeof bt=="function"){R.callback=bt,yt(C),B=!0;break e}R===o(x)&&f(x),yt(C)}else f(x);R=o(x)}if(R!==null)B=!0;else{var g=o(v);g!==null&&jt(dt,g.startTime-C),B=!1}}break t}finally{R=null,H=$,Z=!1}B=void 0}}finally{B?Jt():Et=!1}}}var Jt;if(typeof k=="function")Jt=function(){k(he)};else if(typeof MessageChannel<"u"){var He=new MessageChannel,ye=He.port2;He.port1.onmessage=he,Jt=function(){ye.postMessage(null)}}else Jt=function(){q(he,0)};function jt(C,B){W=q(function(){C(i.unstable_now())},B)}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(C){C.callback=null},i.unstable_forceFrameRate=function(C){0>C||125vt?(C.sortIndex=$,r(v,C),o(x)===null&&C===o(v)&&(G?(I(W),W=-1):G=!0,jt(dt,$-vt))):(C.sortIndex=bt,r(x,C),K||Z||(K=!0,Et||(Et=!0,Jt()))),C},i.unstable_shouldYield=Ue,i.unstable_wrapCallback=function(C){var B=H;return function(){var $=H;H=B;try{return C.apply(this,arguments)}finally{H=$}}}})(jf)),jf}var lm;function hy(){return lm||(lm=1,Df.exports=my()),Df.exports}var Uf={exports:{}},F={};/** + * @license React + * react.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var am;function yy(){if(am)return F;am=1;var i=Symbol.for("react.transitional.element"),r=Symbol.for("react.portal"),o=Symbol.for("react.fragment"),f=Symbol.for("react.strict_mode"),d=Symbol.for("react.profiler"),m=Symbol.for("react.consumer"),b=Symbol.for("react.context"),A=Symbol.for("react.forward_ref"),x=Symbol.for("react.suspense"),v=Symbol.for("react.memo"),O=Symbol.for("react.lazy"),R=Symbol.for("react.activity"),H=Symbol.iterator;function Z(g){return g===null||typeof g!="object"?null:(g=H&&g[H]||g["@@iterator"],typeof g=="function"?g:null)}var K={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},G=Object.assign,X={};function q(g,U,L){this.props=g,this.context=U,this.refs=X,this.updater=L||K}q.prototype.isReactComponent={},q.prototype.setState=function(g,U){if(typeof g!="object"&&typeof g!="function"&&g!=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,g,U,"setState")},q.prototype.forceUpdate=function(g){this.updater.enqueueForceUpdate(this,g,"forceUpdate")};function I(){}I.prototype=q.prototype;function k(g,U,L){this.props=g,this.context=U,this.refs=X,this.updater=L||K}var yt=k.prototype=new I;yt.constructor=k,G(yt,q.prototype),yt.isPureReactComponent=!0;var dt=Array.isArray;function Et(){}var W={H:null,A:null,T:null,S:null},Mt=Object.prototype.hasOwnProperty;function Kt(g,U,L){var Q=L.ref;return{$$typeof:i,type:g,key:U,ref:Q!==void 0?Q:null,props:L}}function Ue(g,U){return Kt(g.type,U,g.props)}function he(g){return typeof g=="object"&&g!==null&&g.$$typeof===i}function Jt(g){var U={"=":"=0",":":"=2"};return"$"+g.replace(/[=:]/g,function(L){return U[L]})}var He=/\/+/g;function ye(g,U){return typeof g=="object"&&g!==null&&g.key!=null?Jt(""+g.key):U.toString(36)}function jt(g){switch(g.status){case"fulfilled":return g.value;case"rejected":throw g.reason;default:switch(typeof g.status=="string"?g.then(Et,Et):(g.status="pending",g.then(function(U){g.status==="pending"&&(g.status="fulfilled",g.value=U)},function(U){g.status==="pending"&&(g.status="rejected",g.reason=U)})),g.status){case"fulfilled":return g.value;case"rejected":throw g.reason}}throw g}function C(g,U,L,Q,P){var lt=typeof g;(lt==="undefined"||lt==="boolean")&&(g=null);var ot=!1;if(g===null)ot=!0;else switch(lt){case"bigint":case"string":case"number":ot=!0;break;case"object":switch(g.$$typeof){case i:case r:ot=!0;break;case O:return ot=g._init,C(ot(g._payload),U,L,Q,P)}}if(ot)return P=P(g),ot=Q===""?"."+ye(g,0):Q,dt(P)?(L="",ot!=null&&(L=ot.replace(He,"$&/")+"/"),C(P,U,L,"",function(qa){return qa})):P!=null&&(he(P)&&(P=Ue(P,L+(P.key==null||g&&g.key===P.key?"":(""+P.key).replace(He,"$&/")+"/")+ot)),U.push(P)),1;ot=0;var $t=Q===""?".":Q+":";if(dt(g))for(var Ot=0;Ot"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(i)}catch(r){console.error(r)}}return i(),Hf.exports=vy(),Hf.exports}/** + * @license React + * react-dom-client.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var cm;function py(){if(cm)return Cu;cm=1;var i=hy(),r=Qf(),o=gy();function f(t){var e="https://react.dev/errors/"+t;if(1bt||(t.current=vt[bt],vt[bt]=null,bt--)}function L(t,e){bt++,vt[bt]=t.current,t.current=e}var Q=g(null),P=g(null),lt=g(null),ot=g(null);function $t(t,e){switch(L(lt,e),L(P,t),L(Q,null),e.nodeType){case 9:case 11:t=(t=e.documentElement)&&(t=t.namespaceURI)?Ed(t):0;break;default:if(t=e.tagName,e=e.namespaceURI)e=Ed(e),t=Td(e,t);else switch(t){case"svg":t=1;break;case"math":t=2;break;default:t=0}}U(Q),L(Q,t)}function Ot(){U(Q),U(P),U(lt)}function qa(t){t.memoizedState!==null&&L(ot,t);var e=Q.current,l=Td(e,t.type);e!==l&&(L(P,t),L(Q,l))}function Lu(t){P.current===t&&(U(Q),U(P)),ot.current===t&&(U(ot),Ru._currentValue=$)}var oi,Ff;function Dl(t){if(oi===void 0)try{throw Error()}catch(l){var e=l.stack.trim().match(/\n( *(at )?)/);oi=e&&e[1]||"",Ff=-1)":-1u||h[a]!==T[u]){var M=` +`+h[a].replace(" at new "," at ");return t.displayName&&M.includes("")&&(M=M.replace("",t.displayName)),M}while(1<=a&&0<=u);break}}}finally{di=!1,Error.prepareStackTrace=l}return(l=t?t.displayName||t.name:"")?Dl(l):""}function Qm(t,e){switch(t.tag){case 26:case 27:case 5:return Dl(t.type);case 16:return Dl("Lazy");case 13:return t.child!==e&&e!==null?Dl("Suspense Fallback"):Dl("Suspense");case 19:return Dl("SuspenseList");case 0:case 15:return mi(t.type,!1);case 11:return mi(t.type.render,!1);case 1:return mi(t.type,!0);case 31:return Dl("Activity");default:return""}}function If(t){try{var e="",l=null;do e+=Qm(t,l),l=t,t=t.return;while(t);return e}catch(a){return` +Error generating stack: `+a.message+` +`+a.stack}}var hi=Object.prototype.hasOwnProperty,yi=i.unstable_scheduleCallback,vi=i.unstable_cancelCallback,wm=i.unstable_shouldYield,Zm=i.unstable_requestPaint,ue=i.unstable_now,Vm=i.unstable_getCurrentPriorityLevel,Pf=i.unstable_ImmediatePriority,tr=i.unstable_UserBlockingPriority,Yu=i.unstable_NormalPriority,Km=i.unstable_LowPriority,er=i.unstable_IdlePriority,Jm=i.log,km=i.unstable_setDisableYieldValue,La=null,ne=null;function cl(t){if(typeof Jm=="function"&&km(t),ne&&typeof ne.setStrictMode=="function")try{ne.setStrictMode(La,t)}catch{}}var ie=Math.clz32?Math.clz32:Fm,$m=Math.log,Wm=Math.LN2;function Fm(t){return t>>>=0,t===0?32:31-($m(t)/Wm|0)|0}var Gu=256,Xu=262144,Qu=4194304;function jl(t){var e=t&42;if(e!==0)return e;switch(t&-t){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 t&261888;case 262144:case 524288:case 1048576:case 2097152:return t&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return t&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return t}}function wu(t,e,l){var a=t.pendingLanes;if(a===0)return 0;var u=0,n=t.suspendedLanes,c=t.pingedLanes;t=t.warmLanes;var s=a&134217727;return s!==0?(a=s&~n,a!==0?u=jl(a):(c&=s,c!==0?u=jl(c):l||(l=s&~t,l!==0&&(u=jl(l))))):(s=a&~n,s!==0?u=jl(s):c!==0?u=jl(c):l||(l=a&~t,l!==0&&(u=jl(l)))),u===0?0:e!==0&&e!==u&&(e&n)===0&&(n=u&-u,l=e&-e,n>=l||n===32&&(l&4194048)!==0)?e:u}function Ya(t,e){return(t.pendingLanes&~(t.suspendedLanes&~t.pingedLanes)&e)===0}function Im(t,e){switch(t){case 1:case 2:case 4:case 8:case 64:return e+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 e+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 lr(){var t=Qu;return Qu<<=1,(Qu&62914560)===0&&(Qu=4194304),t}function gi(t){for(var e=[],l=0;31>l;l++)e.push(t);return e}function Ga(t,e){t.pendingLanes|=e,e!==268435456&&(t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0)}function Pm(t,e,l,a,u,n){var c=t.pendingLanes;t.pendingLanes=l,t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0,t.expiredLanes&=l,t.entangledLanes&=l,t.errorRecoveryDisabledLanes&=l,t.shellSuspendCounter=0;var s=t.entanglements,h=t.expirationTimes,T=t.hiddenUpdates;for(l=c&~l;0"u")return null;try{return t.activeElement||t.body}catch{return t.body}}var nh=/[\n"\\]/g;function ge(t){return t.replace(nh,function(e){return"\\"+e.charCodeAt(0).toString(16)+" "})}function Ti(t,e,l,a,u,n,c,s){t.name="",c!=null&&typeof c!="function"&&typeof c!="symbol"&&typeof c!="boolean"?t.type=c:t.removeAttribute("type"),e!=null?c==="number"?(e===0&&t.value===""||t.value!=e)&&(t.value=""+ve(e)):t.value!==""+ve(e)&&(t.value=""+ve(e)):c!=="submit"&&c!=="reset"||t.removeAttribute("value"),e!=null?zi(t,c,ve(e)):l!=null?zi(t,c,ve(l)):a!=null&&t.removeAttribute("value"),u==null&&n!=null&&(t.defaultChecked=!!n),u!=null&&(t.checked=u&&typeof u!="function"&&typeof u!="symbol"),s!=null&&typeof s!="function"&&typeof s!="symbol"&&typeof s!="boolean"?t.name=""+ve(s):t.removeAttribute("name")}function yr(t,e,l,a,u,n,c,s){if(n!=null&&typeof n!="function"&&typeof n!="symbol"&&typeof n!="boolean"&&(t.type=n),e!=null||l!=null){if(!(n!=="submit"&&n!=="reset"||e!=null)){Ei(t);return}l=l!=null?""+ve(l):"",e=e!=null?""+ve(e):l,s||e===t.value||(t.value=e),t.defaultValue=e}a=a??u,a=typeof a!="function"&&typeof a!="symbol"&&!!a,t.checked=s?t.checked:!!a,t.defaultChecked=!!a,c!=null&&typeof c!="function"&&typeof c!="symbol"&&typeof c!="boolean"&&(t.name=c),Ei(t)}function zi(t,e,l){e==="number"&&Ku(t.ownerDocument)===t||t.defaultValue===""+l||(t.defaultValue=""+l)}function la(t,e,l,a){if(t=t.options,e){e={};for(var u=0;u"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Mi=!1;if(we)try{var Za={};Object.defineProperty(Za,"passive",{get:function(){Mi=!0}}),window.addEventListener("test",Za,Za),window.removeEventListener("test",Za,Za)}catch{Mi=!1}var rl=null,Oi=null,ku=null;function Er(){if(ku)return ku;var t,e=Oi,l=e.length,a,u="value"in rl?rl.value:rl.textContent,n=u.length;for(t=0;t=Ja),_r=" ",Mr=!1;function Or(t,e){switch(t){case"keyup":return jh.indexOf(e.keyCode)!==-1;case"keydown":return e.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Cr(t){return t=t.detail,typeof t=="object"&&"data"in t?t.data:null}var ia=!1;function Hh(t,e){switch(t){case"compositionend":return Cr(e);case"keypress":return e.which!==32?null:(Mr=!0,_r);case"textInput":return t=e.data,t===_r&&Mr?null:t;default:return null}}function Bh(t,e){if(ia)return t==="compositionend"||!Hi&&Or(t,e)?(t=Er(),ku=Oi=rl=null,ia=!1,t):null;switch(t){case"paste":return null;case"keypress":if(!(e.ctrlKey||e.altKey||e.metaKey)||e.ctrlKey&&e.altKey){if(e.char&&1=e)return{node:l,offset:e-t};t=a}t:{for(;l;){if(l.nextSibling){l=l.nextSibling;break t}l=l.parentNode}l=void 0}l=Yr(l)}}function Xr(t,e){return t&&e?t===e?!0:t&&t.nodeType===3?!1:e&&e.nodeType===3?Xr(t,e.parentNode):"contains"in t?t.contains(e):t.compareDocumentPosition?!!(t.compareDocumentPosition(e)&16):!1:!1}function Qr(t){t=t!=null&&t.ownerDocument!=null&&t.ownerDocument.defaultView!=null?t.ownerDocument.defaultView:window;for(var e=Ku(t.document);e instanceof t.HTMLIFrameElement;){try{var l=typeof e.contentWindow.location.href=="string"}catch{l=!1}if(l)t=e.contentWindow;else break;e=Ku(t.document)}return e}function Li(t){var e=t&&t.nodeName&&t.nodeName.toLowerCase();return e&&(e==="input"&&(t.type==="text"||t.type==="search"||t.type==="tel"||t.type==="url"||t.type==="password")||e==="textarea"||t.contentEditable==="true")}var Zh=we&&"documentMode"in document&&11>=document.documentMode,ca=null,Yi=null,Fa=null,Gi=!1;function wr(t,e,l){var a=l.window===l?l.document:l.nodeType===9?l:l.ownerDocument;Gi||ca==null||ca!==Ku(a)||(a=ca,"selectionStart"in a&&Li(a)?a={start:a.selectionStart,end:a.selectionEnd}:(a=(a.ownerDocument&&a.ownerDocument.defaultView||window).getSelection(),a={anchorNode:a.anchorNode,anchorOffset:a.anchorOffset,focusNode:a.focusNode,focusOffset:a.focusOffset}),Fa&&Wa(Fa,a)||(Fa=a,a=Qn(Yi,"onSelect"),0>=c,u-=c,Be=1<<32-ie(e)+u|l<et?(it=w,w=null):it=w.sibling;var rt=z(S,w,E[et],D);if(rt===null){w===null&&(w=it);break}t&&w&&rt.alternate===null&&e(S,w),y=n(rt,y,et),ft===null?V=rt:ft.sibling=rt,ft=rt,w=it}if(et===E.length)return l(S,w),ct&&Ve(S,et),V;if(w===null){for(;etet?(it=w,w=null):it=w.sibling;var Cl=z(S,w,rt.value,D);if(Cl===null){w===null&&(w=it);break}t&&w&&Cl.alternate===null&&e(S,w),y=n(Cl,y,et),ft===null?V=Cl:ft.sibling=Cl,ft=Cl,w=it}if(rt.done)return l(S,w),ct&&Ve(S,et),V;if(w===null){for(;!rt.done;et++,rt=E.next())rt=j(S,rt.value,D),rt!==null&&(y=n(rt,y,et),ft===null?V=rt:ft.sibling=rt,ft=rt);return ct&&Ve(S,et),V}for(w=a(w);!rt.done;et++,rt=E.next())rt=N(w,S,et,rt.value,D),rt!==null&&(t&&rt.alternate!==null&&w.delete(rt.key===null?et:rt.key),y=n(rt,y,et),ft===null?V=rt:ft.sibling=rt,ft=rt);return t&&w.forEach(function(sy){return e(S,sy)}),ct&&Ve(S,et),V}function St(S,y,E,D){if(typeof E=="object"&&E!==null&&E.type===G&&E.key===null&&(E=E.props.children),typeof E=="object"&&E!==null){switch(E.$$typeof){case Z:t:{for(var V=E.key;y!==null;){if(y.key===V){if(V=E.type,V===G){if(y.tag===7){l(S,y.sibling),D=u(y,E.props.children),D.return=S,S=D;break t}}else if(y.elementType===V||typeof V=="object"&&V!==null&&V.$$typeof===Mt&&Zl(V)===y.type){l(S,y.sibling),D=u(y,E.props),au(D,E),D.return=S,S=D;break t}l(S,y);break}else e(S,y);y=y.sibling}E.type===G?(D=Yl(E.props.children,S.mode,D,E.key),D.return=S,S=D):(D=un(E.type,E.key,E.props,null,S.mode,D),au(D,E),D.return=S,S=D)}return c(S);case K:t:{for(V=E.key;y!==null;){if(y.key===V)if(y.tag===4&&y.stateNode.containerInfo===E.containerInfo&&y.stateNode.implementation===E.implementation){l(S,y.sibling),D=u(y,E.children||[]),D.return=S,S=D;break t}else{l(S,y);break}else e(S,y);y=y.sibling}D=Ji(E,S.mode,D),D.return=S,S=D}return c(S);case Mt:return E=Zl(E),St(S,y,E,D)}if(jt(E))return Y(S,y,E,D);if(Jt(E)){if(V=Jt(E),typeof V!="function")throw Error(f(150));return E=V.call(E),J(S,y,E,D)}if(typeof E.then=="function")return St(S,y,dn(E),D);if(E.$$typeof===k)return St(S,y,fn(S,E),D);mn(S,E)}return typeof E=="string"&&E!==""||typeof E=="number"||typeof E=="bigint"?(E=""+E,y!==null&&y.tag===6?(l(S,y.sibling),D=u(y,E),D.return=S,S=D):(l(S,y),D=Ki(E,S.mode,D),D.return=S,S=D),c(S)):l(S,y)}return function(S,y,E,D){try{lu=0;var V=St(S,y,E,D);return pa=null,V}catch(w){if(w===ga||w===sn)throw w;var ft=fe(29,w,null,S.mode);return ft.lanes=D,ft.return=S,ft}finally{}}}var Kl=ds(!0),ms=ds(!1),hl=!1;function nc(t){t.updateQueue={baseState:t.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function ic(t,e){t=t.updateQueue,e.updateQueue===t&&(e.updateQueue={baseState:t.baseState,firstBaseUpdate:t.firstBaseUpdate,lastBaseUpdate:t.lastBaseUpdate,shared:t.shared,callbacks:null})}function yl(t){return{lane:t,tag:0,payload:null,callback:null,next:null}}function vl(t,e,l){var a=t.updateQueue;if(a===null)return null;if(a=a.shared,(st&2)!==0){var u=a.pending;return u===null?e.next=e:(e.next=u.next,u.next=e),a.pending=e,e=an(t),Wr(t,null,l),e}return ln(t,a,e,l),an(t)}function uu(t,e,l){if(e=e.updateQueue,e!==null&&(e=e.shared,(l&4194048)!==0)){var a=e.lanes;a&=t.pendingLanes,l|=a,e.lanes=l,ur(t,l)}}function cc(t,e){var l=t.updateQueue,a=t.alternate;if(a!==null&&(a=a.updateQueue,l===a)){var u=null,n=null;if(l=l.firstBaseUpdate,l!==null){do{var c={lane:l.lane,tag:l.tag,payload:l.payload,callback:null,next:null};n===null?u=n=c:n=n.next=c,l=l.next}while(l!==null);n===null?u=n=e:n=n.next=e}else u=n=e;l={baseState:a.baseState,firstBaseUpdate:u,lastBaseUpdate:n,shared:a.shared,callbacks:a.callbacks},t.updateQueue=l;return}t=l.lastBaseUpdate,t===null?l.firstBaseUpdate=e:t.next=e,l.lastBaseUpdate=e}var fc=!1;function nu(){if(fc){var t=va;if(t!==null)throw t}}function iu(t,e,l,a){fc=!1;var u=t.updateQueue;hl=!1;var n=u.firstBaseUpdate,c=u.lastBaseUpdate,s=u.shared.pending;if(s!==null){u.shared.pending=null;var h=s,T=h.next;h.next=null,c===null?n=T:c.next=T,c=h;var M=t.alternate;M!==null&&(M=M.updateQueue,s=M.lastBaseUpdate,s!==c&&(s===null?M.firstBaseUpdate=T:s.next=T,M.lastBaseUpdate=h))}if(n!==null){var j=u.baseState;c=0,M=T=h=null,s=n;do{var z=s.lane&-536870913,N=z!==s.lane;if(N?(nt&z)===z:(a&z)===z){z!==0&&z===ya&&(fc=!0),M!==null&&(M=M.next={lane:0,tag:s.tag,payload:s.payload,callback:null,next:null});t:{var Y=t,J=s;z=e;var St=l;switch(J.tag){case 1:if(Y=J.payload,typeof Y=="function"){j=Y.call(St,j,z);break t}j=Y;break t;case 3:Y.flags=Y.flags&-65537|128;case 0:if(Y=J.payload,z=typeof Y=="function"?Y.call(St,j,z):Y,z==null)break t;j=R({},j,z);break t;case 2:hl=!0}}z=s.callback,z!==null&&(t.flags|=64,N&&(t.flags|=8192),N=u.callbacks,N===null?u.callbacks=[z]:N.push(z))}else N={lane:z,tag:s.tag,payload:s.payload,callback:s.callback,next:null},M===null?(T=M=N,h=j):M=M.next=N,c|=z;if(s=s.next,s===null){if(s=u.shared.pending,s===null)break;N=s,s=N.next,N.next=null,u.lastBaseUpdate=N,u.shared.pending=null}}while(!0);M===null&&(h=j),u.baseState=h,u.firstBaseUpdate=T,u.lastBaseUpdate=M,n===null&&(u.shared.lanes=0),xl|=c,t.lanes=c,t.memoizedState=j}}function hs(t,e){if(typeof t!="function")throw Error(f(191,t));t.call(e)}function ys(t,e){var l=t.callbacks;if(l!==null)for(t.callbacks=null,t=0;tn?n:8;var c=C.T,s={};C.T=s,Nc(t,!1,e,l);try{var h=u(),T=C.S;if(T!==null&&T(s,h),h!==null&&typeof h=="object"&&typeof h.then=="function"){var M=Ph(h,a);ru(t,e,M,me(t))}else ru(t,e,a,me(t))}catch(j){ru(t,e,{then:function(){},status:"rejected",reason:j},me())}finally{B.p=n,c!==null&&s.types!==null&&(c.types=s.types),C.T=c}}function n0(){}function Ac(t,e,l,a){if(t.tag!==5)throw Error(f(476));var u=Js(t).queue;Ks(t,u,e,$,l===null?n0:function(){return ks(t),l(a)})}function Js(t){var e=t.memoizedState;if(e!==null)return e;e={memoizedState:$,baseState:$,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:$e,lastRenderedState:$},next:null};var l={};return e.next={memoizedState:l,baseState:l,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:$e,lastRenderedState:l},next:null},t.memoizedState=e,t=t.alternate,t!==null&&(t.memoizedState=e),e}function ks(t){var e=Js(t);e.next===null&&(e=t.alternate.memoizedState),ru(t,e.next.queue,{},me())}function Rc(){return wt(Ru)}function $s(){return Dt().memoizedState}function Ws(){return Dt().memoizedState}function i0(t){for(var e=t.return;e!==null;){switch(e.tag){case 24:case 3:var l=me();t=yl(l);var a=vl(e,t,l);a!==null&&(ae(a,e,l),uu(a,e,l)),e={cache:ec()},t.payload=e;return}e=e.return}}function c0(t,e,l){var a=me();l={lane:a,revertLane:0,gesture:null,action:l,hasEagerState:!1,eagerState:null,next:null},Tn(t)?Is(e,l):(l=Zi(t,e,l,a),l!==null&&(ae(l,t,a),Ps(l,e,a)))}function Fs(t,e,l){var a=me();ru(t,e,l,a)}function ru(t,e,l,a){var u={lane:a,revertLane:0,gesture:null,action:l,hasEagerState:!1,eagerState:null,next:null};if(Tn(t))Is(e,u);else{var n=t.alternate;if(t.lanes===0&&(n===null||n.lanes===0)&&(n=e.lastRenderedReducer,n!==null))try{var c=e.lastRenderedState,s=n(c,l);if(u.hasEagerState=!0,u.eagerState=s,ce(s,c))return ln(t,e,u,0),xt===null&&en(),!1}catch{}finally{}if(l=Zi(t,e,u,a),l!==null)return ae(l,t,a),Ps(l,e,a),!0}return!1}function Nc(t,e,l,a){if(a={lane:2,revertLane:nf(),gesture:null,action:a,hasEagerState:!1,eagerState:null,next:null},Tn(t)){if(e)throw Error(f(479))}else e=Zi(t,l,a,2),e!==null&&ae(e,t,2)}function Tn(t){var e=t.alternate;return t===tt||e!==null&&e===tt}function Is(t,e){ba=vn=!0;var l=t.pending;l===null?e.next=e:(e.next=l.next,l.next=e),t.pending=e}function Ps(t,e,l){if((l&4194048)!==0){var a=e.lanes;a&=t.pendingLanes,l|=a,e.lanes=l,ur(t,l)}}var su={readContext:wt,use:Sn,useCallback:Nt,useContext:Nt,useEffect:Nt,useImperativeHandle:Nt,useLayoutEffect:Nt,useInsertionEffect:Nt,useMemo:Nt,useReducer:Nt,useRef:Nt,useState:Nt,useDebugValue:Nt,useDeferredValue:Nt,useTransition:Nt,useSyncExternalStore:Nt,useId:Nt,useHostTransitionStatus:Nt,useFormState:Nt,useActionState:Nt,useOptimistic:Nt,useMemoCache:Nt,useCacheRefresh:Nt};su.useEffectEvent=Nt;var to={readContext:wt,use:Sn,useCallback:function(t,e){return Wt().memoizedState=[t,e===void 0?null:e],t},useContext:wt,useEffect:qs,useImperativeHandle:function(t,e,l){l=l!=null?l.concat([t]):null,xn(4194308,4,Xs.bind(null,e,t),l)},useLayoutEffect:function(t,e){return xn(4194308,4,t,e)},useInsertionEffect:function(t,e){xn(4,2,t,e)},useMemo:function(t,e){var l=Wt();e=e===void 0?null:e;var a=t();if(Jl){cl(!0);try{t()}finally{cl(!1)}}return l.memoizedState=[a,e],a},useReducer:function(t,e,l){var a=Wt();if(l!==void 0){var u=l(e);if(Jl){cl(!0);try{l(e)}finally{cl(!1)}}}else u=e;return a.memoizedState=a.baseState=u,t={pending:null,lanes:0,dispatch:null,lastRenderedReducer:t,lastRenderedState:u},a.queue=t,t=t.dispatch=c0.bind(null,tt,t),[a.memoizedState,t]},useRef:function(t){var e=Wt();return t={current:t},e.memoizedState=t},useState:function(t){t=bc(t);var e=t.queue,l=Fs.bind(null,tt,e);return e.dispatch=l,[t.memoizedState,l]},useDebugValue:Tc,useDeferredValue:function(t,e){var l=Wt();return zc(l,t,e)},useTransition:function(){var t=bc(!1);return t=Ks.bind(null,tt,t.queue,!0,!1),Wt().memoizedState=t,[!1,t]},useSyncExternalStore:function(t,e,l){var a=tt,u=Wt();if(ct){if(l===void 0)throw Error(f(407));l=l()}else{if(l=e(),xt===null)throw Error(f(349));(nt&127)!==0||xs(a,e,l)}u.memoizedState=l;var n={value:l,getSnapshot:e};return u.queue=n,qs(Ts.bind(null,a,n,t),[t]),a.flags|=2048,Ea(9,{destroy:void 0},Es.bind(null,a,n,l,e),null),l},useId:function(){var t=Wt(),e=xt.identifierPrefix;if(ct){var l=qe,a=Be;l=(a&~(1<<32-ie(a)-1)).toString(32)+l,e="_"+e+"R_"+l,l=gn++,0<\/script>",n=n.removeChild(n.firstChild);break;case"select":n=typeof a.is=="string"?c.createElement("select",{is:a.is}):c.createElement("select"),a.multiple?n.multiple=!0:a.size&&(n.size=a.size);break;default:n=typeof a.is=="string"?c.createElement(u,{is:a.is}):c.createElement(u)}}n[Xt]=e,n[Ft]=a;t:for(c=e.child;c!==null;){if(c.tag===5||c.tag===6)n.appendChild(c.stateNode);else if(c.tag!==4&&c.tag!==27&&c.child!==null){c.child.return=c,c=c.child;continue}if(c===e)break t;for(;c.sibling===null;){if(c.return===null||c.return===e)break t;c=c.return}c.sibling.return=c.return,c=c.sibling}e.stateNode=n;t:switch(Vt(n,u,a),u){case"button":case"input":case"select":case"textarea":a=!!a.autoFocus;break t;case"img":a=!0;break t;default:a=!1}a&&Fe(e)}}return zt(e),Xc(e,e.type,t===null?null:t.memoizedProps,e.pendingProps,l),null;case 6:if(t&&e.stateNode!=null)t.memoizedProps!==a&&Fe(e);else{if(typeof a!="string"&&e.stateNode===null)throw Error(f(166));if(t=lt.current,ma(e)){if(t=e.stateNode,l=e.memoizedProps,a=null,u=Qt,u!==null)switch(u.tag){case 27:case 5:a=u.memoizedProps}t[Xt]=e,t=!!(t.nodeValue===l||a!==null&&a.suppressHydrationWarning===!0||bd(t.nodeValue,l)),t||dl(e,!0)}else t=wn(t).createTextNode(a),t[Xt]=e,e.stateNode=t}return zt(e),null;case 31:if(l=e.memoizedState,t===null||t.memoizedState!==null){if(a=ma(e),l!==null){if(t===null){if(!a)throw Error(f(318));if(t=e.memoizedState,t=t!==null?t.dehydrated:null,!t)throw Error(f(557));t[Xt]=e}else Gl(),(e.flags&128)===0&&(e.memoizedState=null),e.flags|=4;zt(e),t=!1}else l=Fi(),t!==null&&t.memoizedState!==null&&(t.memoizedState.hydrationErrors=l),t=!0;if(!t)return e.flags&256?(se(e),e):(se(e),null);if((e.flags&128)!==0)throw Error(f(558))}return zt(e),null;case 13:if(a=e.memoizedState,t===null||t.memoizedState!==null&&t.memoizedState.dehydrated!==null){if(u=ma(e),a!==null&&a.dehydrated!==null){if(t===null){if(!u)throw Error(f(318));if(u=e.memoizedState,u=u!==null?u.dehydrated:null,!u)throw Error(f(317));u[Xt]=e}else Gl(),(e.flags&128)===0&&(e.memoizedState=null),e.flags|=4;zt(e),u=!1}else u=Fi(),t!==null&&t.memoizedState!==null&&(t.memoizedState.hydrationErrors=u),u=!0;if(!u)return e.flags&256?(se(e),e):(se(e),null)}return se(e),(e.flags&128)!==0?(e.lanes=l,e):(l=a!==null,t=t!==null&&t.memoizedState!==null,l&&(a=e.child,u=null,a.alternate!==null&&a.alternate.memoizedState!==null&&a.alternate.memoizedState.cachePool!==null&&(u=a.alternate.memoizedState.cachePool.pool),n=null,a.memoizedState!==null&&a.memoizedState.cachePool!==null&&(n=a.memoizedState.cachePool.pool),n!==u&&(a.flags|=2048)),l!==t&&l&&(e.child.flags|=8192),_n(e,e.updateQueue),zt(e),null);case 4:return Ot(),t===null&&sf(e.stateNode.containerInfo),zt(e),null;case 10:return Je(e.type),zt(e),null;case 19:if(U(Ct),a=e.memoizedState,a===null)return zt(e),null;if(u=(e.flags&128)!==0,n=a.rendering,n===null)if(u)du(a,!1);else{if(_t!==0||t!==null&&(t.flags&128)!==0)for(t=e.child;t!==null;){if(n=yn(t),n!==null){for(e.flags|=128,du(a,!1),t=n.updateQueue,e.updateQueue=t,_n(e,t),e.subtreeFlags=0,t=l,l=e.child;l!==null;)Fr(l,t),l=l.sibling;return L(Ct,Ct.current&1|2),ct&&Ve(e,a.treeForkCount),e.child}t=t.sibling}a.tail!==null&&ue()>jn&&(e.flags|=128,u=!0,du(a,!1),e.lanes=4194304)}else{if(!u)if(t=yn(n),t!==null){if(e.flags|=128,u=!0,t=t.updateQueue,e.updateQueue=t,_n(e,t),du(a,!0),a.tail===null&&a.tailMode==="hidden"&&!n.alternate&&!ct)return zt(e),null}else 2*ue()-a.renderingStartTime>jn&&l!==536870912&&(e.flags|=128,u=!0,du(a,!1),e.lanes=4194304);a.isBackwards?(n.sibling=e.child,e.child=n):(t=a.last,t!==null?t.sibling=n:e.child=n,a.last=n)}return a.tail!==null?(t=a.tail,a.rendering=t,a.tail=t.sibling,a.renderingStartTime=ue(),t.sibling=null,l=Ct.current,L(Ct,u?l&1|2:l&1),ct&&Ve(e,a.treeForkCount),t):(zt(e),null);case 22:case 23:return se(e),sc(),a=e.memoizedState!==null,t!==null?t.memoizedState!==null!==a&&(e.flags|=8192):a&&(e.flags|=8192),a?(l&536870912)!==0&&(e.flags&128)===0&&(zt(e),e.subtreeFlags&6&&(e.flags|=8192)):zt(e),l=e.updateQueue,l!==null&&_n(e,l.retryQueue),l=null,t!==null&&t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(l=t.memoizedState.cachePool.pool),a=null,e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(a=e.memoizedState.cachePool.pool),a!==l&&(e.flags|=2048),t!==null&&U(wl),null;case 24:return l=null,t!==null&&(l=t.memoizedState.cache),e.memoizedState.cache!==l&&(e.flags|=2048),Je(Ut),zt(e),null;case 25:return null;case 30:return null}throw Error(f(156,e.tag))}function d0(t,e){switch($i(e),e.tag){case 1:return t=e.flags,t&65536?(e.flags=t&-65537|128,e):null;case 3:return Je(Ut),Ot(),t=e.flags,(t&65536)!==0&&(t&128)===0?(e.flags=t&-65537|128,e):null;case 26:case 27:case 5:return Lu(e),null;case 31:if(e.memoizedState!==null){if(se(e),e.alternate===null)throw Error(f(340));Gl()}return t=e.flags,t&65536?(e.flags=t&-65537|128,e):null;case 13:if(se(e),t=e.memoizedState,t!==null&&t.dehydrated!==null){if(e.alternate===null)throw Error(f(340));Gl()}return t=e.flags,t&65536?(e.flags=t&-65537|128,e):null;case 19:return U(Ct),null;case 4:return Ot(),null;case 10:return Je(e.type),null;case 22:case 23:return se(e),sc(),t!==null&&U(wl),t=e.flags,t&65536?(e.flags=t&-65537|128,e):null;case 24:return Je(Ut),null;case 25:return null;default:return null}}function Ao(t,e){switch($i(e),e.tag){case 3:Je(Ut),Ot();break;case 26:case 27:case 5:Lu(e);break;case 4:Ot();break;case 31:e.memoizedState!==null&&se(e);break;case 13:se(e);break;case 19:U(Ct);break;case 10:Je(e.type);break;case 22:case 23:se(e),sc(),t!==null&&U(wl);break;case 24:Je(Ut)}}function mu(t,e){try{var l=e.updateQueue,a=l!==null?l.lastEffect:null;if(a!==null){var u=a.next;l=u;do{if((l.tag&t)===t){a=void 0;var n=l.create,c=l.inst;a=n(),c.destroy=a}l=l.next}while(l!==u)}}catch(s){ht(e,e.return,s)}}function Sl(t,e,l){try{var a=e.updateQueue,u=a!==null?a.lastEffect:null;if(u!==null){var n=u.next;a=n;do{if((a.tag&t)===t){var c=a.inst,s=c.destroy;if(s!==void 0){c.destroy=void 0,u=e;var h=l,T=s;try{T()}catch(M){ht(u,h,M)}}}a=a.next}while(a!==n)}}catch(M){ht(e,e.return,M)}}function Ro(t){var e=t.updateQueue;if(e!==null){var l=t.stateNode;try{ys(e,l)}catch(a){ht(t,t.return,a)}}}function No(t,e,l){l.props=kl(t.type,t.memoizedProps),l.state=t.memoizedState;try{l.componentWillUnmount()}catch(a){ht(t,e,a)}}function hu(t,e){try{var l=t.ref;if(l!==null){switch(t.tag){case 26:case 27:case 5:var a=t.stateNode;break;case 30:a=t.stateNode;break;default:a=t.stateNode}typeof l=="function"?t.refCleanup=l(a):l.current=a}}catch(u){ht(t,e,u)}}function Le(t,e){var l=t.ref,a=t.refCleanup;if(l!==null)if(typeof a=="function")try{a()}catch(u){ht(t,e,u)}finally{t.refCleanup=null,t=t.alternate,t!=null&&(t.refCleanup=null)}else if(typeof l=="function")try{l(null)}catch(u){ht(t,e,u)}else l.current=null}function _o(t){var e=t.type,l=t.memoizedProps,a=t.stateNode;try{t:switch(e){case"button":case"input":case"select":case"textarea":l.autoFocus&&a.focus();break t;case"img":l.src?a.src=l.src:l.srcSet&&(a.srcset=l.srcSet)}}catch(u){ht(t,t.return,u)}}function Qc(t,e,l){try{var a=t.stateNode;U0(a,t.type,l,e),a[Ft]=e}catch(u){ht(t,t.return,u)}}function Mo(t){return t.tag===5||t.tag===3||t.tag===26||t.tag===27&&Rl(t.type)||t.tag===4}function wc(t){t:for(;;){for(;t.sibling===null;){if(t.return===null||Mo(t.return))return null;t=t.return}for(t.sibling.return=t.return,t=t.sibling;t.tag!==5&&t.tag!==6&&t.tag!==18;){if(t.tag===27&&Rl(t.type)||t.flags&2||t.child===null||t.tag===4)continue t;t.child.return=t,t=t.child}if(!(t.flags&2))return t.stateNode}}function Zc(t,e,l){var a=t.tag;if(a===5||a===6)t=t.stateNode,e?(l.nodeType===9?l.body:l.nodeName==="HTML"?l.ownerDocument.body:l).insertBefore(t,e):(e=l.nodeType===9?l.body:l.nodeName==="HTML"?l.ownerDocument.body:l,e.appendChild(t),l=l._reactRootContainer,l!=null||e.onclick!==null||(e.onclick=Qe));else if(a!==4&&(a===27&&Rl(t.type)&&(l=t.stateNode,e=null),t=t.child,t!==null))for(Zc(t,e,l),t=t.sibling;t!==null;)Zc(t,e,l),t=t.sibling}function Mn(t,e,l){var a=t.tag;if(a===5||a===6)t=t.stateNode,e?l.insertBefore(t,e):l.appendChild(t);else if(a!==4&&(a===27&&Rl(t.type)&&(l=t.stateNode),t=t.child,t!==null))for(Mn(t,e,l),t=t.sibling;t!==null;)Mn(t,e,l),t=t.sibling}function Oo(t){var e=t.stateNode,l=t.memoizedProps;try{for(var a=t.type,u=e.attributes;u.length;)e.removeAttributeNode(u[0]);Vt(e,a,l),e[Xt]=t,e[Ft]=l}catch(n){ht(t,t.return,n)}}var Ie=!1,qt=!1,Vc=!1,Co=typeof WeakSet=="function"?WeakSet:Set,Gt=null;function m0(t,e){if(t=t.containerInfo,mf=Wn,t=Qr(t),Li(t)){if("selectionStart"in t)var l={start:t.selectionStart,end:t.selectionEnd};else t:{l=(l=t.ownerDocument)&&l.defaultView||window;var a=l.getSelection&&l.getSelection();if(a&&a.rangeCount!==0){l=a.anchorNode;var u=a.anchorOffset,n=a.focusNode;a=a.focusOffset;try{l.nodeType,n.nodeType}catch{l=null;break t}var c=0,s=-1,h=-1,T=0,M=0,j=t,z=null;e:for(;;){for(var N;j!==l||u!==0&&j.nodeType!==3||(s=c+u),j!==n||a!==0&&j.nodeType!==3||(h=c+a),j.nodeType===3&&(c+=j.nodeValue.length),(N=j.firstChild)!==null;)z=j,j=N;for(;;){if(j===t)break e;if(z===l&&++T===u&&(s=c),z===n&&++M===a&&(h=c),(N=j.nextSibling)!==null)break;j=z,z=j.parentNode}j=N}l=s===-1||h===-1?null:{start:s,end:h}}else l=null}l=l||{start:0,end:0}}else l=null;for(hf={focusedElem:t,selectionRange:l},Wn=!1,Gt=e;Gt!==null;)if(e=Gt,t=e.child,(e.subtreeFlags&1028)!==0&&t!==null)t.return=e,Gt=t;else for(;Gt!==null;){switch(e=Gt,n=e.alternate,t=e.flags,e.tag){case 0:if((t&4)!==0&&(t=e.updateQueue,t=t!==null?t.events:null,t!==null))for(l=0;l title"))),Vt(n,a,l),n[Xt]=t,Yt(n),a=n;break t;case"link":var c=qd("link","href",u).get(a+(l.href||""));if(c){for(var s=0;sSt&&(c=St,St=J,J=c);var S=Gr(s,J),y=Gr(s,St);if(S&&y&&(N.rangeCount!==1||N.anchorNode!==S.node||N.anchorOffset!==S.offset||N.focusNode!==y.node||N.focusOffset!==y.offset)){var E=j.createRange();E.setStart(S.node,S.offset),N.removeAllRanges(),J>St?(N.addRange(E),N.extend(y.node,y.offset)):(E.setEnd(y.node,y.offset),N.addRange(E))}}}}for(j=[],N=s;N=N.parentNode;)N.nodeType===1&&j.push({element:N,left:N.scrollLeft,top:N.scrollTop});for(typeof s.focus=="function"&&s.focus(),s=0;sl?32:l,C.T=null,l=Ic,Ic=null;var n=Tl,c=al;if(Lt=0,Na=Tl=null,al=0,(st&6)!==0)throw Error(f(331));var s=st;if(st|=4,Qo(n.current),Yo(n,n.current,c,l),st=s,bu(0,!1),ne&&typeof ne.onPostCommitFiberRoot=="function")try{ne.onPostCommitFiberRoot(La,n)}catch{}return!0}finally{B.p=u,C.T=a,id(t,e)}}function fd(t,e,l){e=Se(l,e),e=Cc(t.stateNode,e,2),t=vl(t,e,2),t!==null&&(Ga(t,2),Ye(t))}function ht(t,e,l){if(t.tag===3)fd(t,t,l);else for(;e!==null;){if(e.tag===3){fd(e,t,l);break}else if(e.tag===1){var a=e.stateNode;if(typeof e.type.getDerivedStateFromError=="function"||typeof a.componentDidCatch=="function"&&(El===null||!El.has(a))){t=Se(l,t),l=fo(2),a=vl(e,l,2),a!==null&&(ro(l,a,e,t),Ga(a,2),Ye(a));break}}e=e.return}}function lf(t,e,l){var a=t.pingCache;if(a===null){a=t.pingCache=new v0;var u=new Set;a.set(e,u)}else u=a.get(e),u===void 0&&(u=new Set,a.set(e,u));u.has(l)||(kc=!0,u.add(l),t=x0.bind(null,t,e,l),e.then(t,t))}function x0(t,e,l){var a=t.pingCache;a!==null&&a.delete(e),t.pingedLanes|=t.suspendedLanes&l,t.warmLanes&=~l,xt===t&&(nt&l)===l&&(_t===4||_t===3&&(nt&62914560)===nt&&300>ue()-Dn?(st&2)===0&&_a(t,0):$c|=l,Ra===nt&&(Ra=0)),Ye(t)}function rd(t,e){e===0&&(e=lr()),t=Ll(t,e),t!==null&&(Ga(t,e),Ye(t))}function E0(t){var e=t.memoizedState,l=0;e!==null&&(l=e.retryLane),rd(t,l)}function T0(t,e){var l=0;switch(t.tag){case 31:case 13:var a=t.stateNode,u=t.memoizedState;u!==null&&(l=u.retryLane);break;case 19:a=t.stateNode;break;case 22:a=t.stateNode._retryCache;break;default:throw Error(f(314))}a!==null&&a.delete(e),rd(t,l)}function z0(t,e){return yi(t,e)}var Yn=null,Oa=null,af=!1,Gn=!1,uf=!1,Al=0;function Ye(t){t!==Oa&&t.next===null&&(Oa===null?Yn=Oa=t:Oa=Oa.next=t),Gn=!0,af||(af=!0,R0())}function bu(t,e){if(!uf&&Gn){uf=!0;do for(var l=!1,a=Yn;a!==null;){if(t!==0){var u=a.pendingLanes;if(u===0)var n=0;else{var c=a.suspendedLanes,s=a.pingedLanes;n=(1<<31-ie(42|t)+1)-1,n&=u&~(c&~s),n=n&201326741?n&201326741|1:n?n|2:0}n!==0&&(l=!0,md(a,n))}else n=nt,n=wu(a,a===xt?n:0,a.cancelPendingCommit!==null||a.timeoutHandle!==-1),(n&3)===0||Ya(a,n)||(l=!0,md(a,n));a=a.next}while(l);uf=!1}}function A0(){sd()}function sd(){Gn=af=!1;var t=0;Al!==0&&B0()&&(t=Al);for(var e=ue(),l=null,a=Yn;a!==null;){var u=a.next,n=od(a,e);n===0?(a.next=null,l===null?Yn=u:l.next=u,u===null&&(Oa=l)):(l=a,(t!==0||(n&3)!==0)&&(Gn=!0)),a=u}Lt!==0&&Lt!==5||bu(t),Al!==0&&(Al=0)}function od(t,e){for(var l=t.suspendedLanes,a=t.pingedLanes,u=t.expirationTimes,n=t.pendingLanes&-62914561;0s)break;var M=h.transferSize,j=h.initiatorType;M&&xd(j)&&(h=h.responseEnd,c+=M*(h"u"?null:document;function jd(t,e,l){var a=Ca;if(a&&typeof e=="string"&&e){var u=ge(e);u='link[rel="'+t+'"][href="'+u+'"]',typeof l=="string"&&(u+='[crossorigin="'+l+'"]'),Dd.has(u)||(Dd.add(u),t={rel:t,crossOrigin:l,href:e},a.querySelector(u)===null&&(e=a.createElement("link"),Vt(e,"link",t),Yt(e),a.head.appendChild(e)))}}function V0(t){ul.D(t),jd("dns-prefetch",t,null)}function K0(t,e){ul.C(t,e),jd("preconnect",t,e)}function J0(t,e,l){ul.L(t,e,l);var a=Ca;if(a&&t&&e){var u='link[rel="preload"][as="'+ge(e)+'"]';e==="image"&&l&&l.imageSrcSet?(u+='[imagesrcset="'+ge(l.imageSrcSet)+'"]',typeof l.imageSizes=="string"&&(u+='[imagesizes="'+ge(l.imageSizes)+'"]')):u+='[href="'+ge(t)+'"]';var n=u;switch(e){case"style":n=Da(t);break;case"script":n=ja(t)}Ae.has(n)||(t=R({rel:"preload",href:e==="image"&&l&&l.imageSrcSet?void 0:t,as:e},l),Ae.set(n,t),a.querySelector(u)!==null||e==="style"&&a.querySelector(zu(n))||e==="script"&&a.querySelector(Au(n))||(e=a.createElement("link"),Vt(e,"link",t),Yt(e),a.head.appendChild(e)))}}function k0(t,e){ul.m(t,e);var l=Ca;if(l&&t){var a=e&&typeof e.as=="string"?e.as:"script",u='link[rel="modulepreload"][as="'+ge(a)+'"][href="'+ge(t)+'"]',n=u;switch(a){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":n=ja(t)}if(!Ae.has(n)&&(t=R({rel:"modulepreload",href:t},e),Ae.set(n,t),l.querySelector(u)===null)){switch(a){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(l.querySelector(Au(n)))return}a=l.createElement("link"),Vt(a,"link",t),Yt(a),l.head.appendChild(a)}}}function $0(t,e,l){ul.S(t,e,l);var a=Ca;if(a&&t){var u=ta(a).hoistableStyles,n=Da(t);e=e||"default";var c=u.get(n);if(!c){var s={loading:0,preload:null};if(c=a.querySelector(zu(n)))s.loading=5;else{t=R({rel:"stylesheet",href:t,"data-precedence":e},l),(l=Ae.get(n))&&xf(t,l);var h=c=a.createElement("link");Yt(h),Vt(h,"link",t),h._p=new Promise(function(T,M){h.onload=T,h.onerror=M}),h.addEventListener("load",function(){s.loading|=1}),h.addEventListener("error",function(){s.loading|=2}),s.loading|=4,Vn(c,e,a)}c={type:"stylesheet",instance:c,count:1,state:s},u.set(n,c)}}}function W0(t,e){ul.X(t,e);var l=Ca;if(l&&t){var a=ta(l).hoistableScripts,u=ja(t),n=a.get(u);n||(n=l.querySelector(Au(u)),n||(t=R({src:t,async:!0},e),(e=Ae.get(u))&&Ef(t,e),n=l.createElement("script"),Yt(n),Vt(n,"link",t),l.head.appendChild(n)),n={type:"script",instance:n,count:1,state:null},a.set(u,n))}}function F0(t,e){ul.M(t,e);var l=Ca;if(l&&t){var a=ta(l).hoistableScripts,u=ja(t),n=a.get(u);n||(n=l.querySelector(Au(u)),n||(t=R({src:t,async:!0,type:"module"},e),(e=Ae.get(u))&&Ef(t,e),n=l.createElement("script"),Yt(n),Vt(n,"link",t),l.head.appendChild(n)),n={type:"script",instance:n,count:1,state:null},a.set(u,n))}}function Ud(t,e,l,a){var u=(u=lt.current)?Zn(u):null;if(!u)throw Error(f(446));switch(t){case"meta":case"title":return null;case"style":return typeof l.precedence=="string"&&typeof l.href=="string"?(e=Da(l.href),l=ta(u).hoistableStyles,a=l.get(e),a||(a={type:"style",instance:null,count:0,state:null},l.set(e,a)),a):{type:"void",instance:null,count:0,state:null};case"link":if(l.rel==="stylesheet"&&typeof l.href=="string"&&typeof l.precedence=="string"){t=Da(l.href);var n=ta(u).hoistableStyles,c=n.get(t);if(c||(u=u.ownerDocument||u,c={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},n.set(t,c),(n=u.querySelector(zu(t)))&&!n._p&&(c.instance=n,c.state.loading=5),Ae.has(t)||(l={rel:"preload",as:"style",href:l.href,crossOrigin:l.crossOrigin,integrity:l.integrity,media:l.media,hrefLang:l.hrefLang,referrerPolicy:l.referrerPolicy},Ae.set(t,l),n||I0(u,t,l,c.state))),e&&a===null)throw Error(f(528,""));return c}if(e&&a!==null)throw Error(f(529,""));return null;case"script":return e=l.async,l=l.src,typeof l=="string"&&e&&typeof e!="function"&&typeof e!="symbol"?(e=ja(l),l=ta(u).hoistableScripts,a=l.get(e),a||(a={type:"script",instance:null,count:0,state:null},l.set(e,a)),a):{type:"void",instance:null,count:0,state:null};default:throw Error(f(444,t))}}function Da(t){return'href="'+ge(t)+'"'}function zu(t){return'link[rel="stylesheet"]['+t+"]"}function Hd(t){return R({},t,{"data-precedence":t.precedence,precedence:null})}function I0(t,e,l,a){t.querySelector('link[rel="preload"][as="style"]['+e+"]")?a.loading=1:(e=t.createElement("link"),a.preload=e,e.addEventListener("load",function(){return a.loading|=1}),e.addEventListener("error",function(){return a.loading|=2}),Vt(e,"link",l),Yt(e),t.head.appendChild(e))}function ja(t){return'[src="'+ge(t)+'"]'}function Au(t){return"script[async]"+t}function Bd(t,e,l){if(e.count++,e.instance===null)switch(e.type){case"style":var a=t.querySelector('style[data-href~="'+ge(l.href)+'"]');if(a)return e.instance=a,Yt(a),a;var u=R({},l,{"data-href":l.href,"data-precedence":l.precedence,href:null,precedence:null});return a=(t.ownerDocument||t).createElement("style"),Yt(a),Vt(a,"style",u),Vn(a,l.precedence,t),e.instance=a;case"stylesheet":u=Da(l.href);var n=t.querySelector(zu(u));if(n)return e.state.loading|=4,e.instance=n,Yt(n),n;a=Hd(l),(u=Ae.get(u))&&xf(a,u),n=(t.ownerDocument||t).createElement("link"),Yt(n);var c=n;return c._p=new Promise(function(s,h){c.onload=s,c.onerror=h}),Vt(n,"link",a),e.state.loading|=4,Vn(n,l.precedence,t),e.instance=n;case"script":return n=ja(l.src),(u=t.querySelector(Au(n)))?(e.instance=u,Yt(u),u):(a=l,(u=Ae.get(n))&&(a=R({},l),Ef(a,u)),t=t.ownerDocument||t,u=t.createElement("script"),Yt(u),Vt(u,"link",a),t.head.appendChild(u),e.instance=u);case"void":return null;default:throw Error(f(443,e.type))}else e.type==="stylesheet"&&(e.state.loading&4)===0&&(a=e.instance,e.state.loading|=4,Vn(a,l.precedence,t));return e.instance}function Vn(t,e,l){for(var a=l.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),u=a.length?a[a.length-1]:null,n=u,c=0;c title"):null)}function P0(t,e,l){if(l===1||e.itemProp!=null)return!1;switch(t){case"meta":case"title":return!0;case"style":if(typeof e.precedence!="string"||typeof e.href!="string"||e.href==="")break;return!0;case"link":if(typeof e.rel!="string"||typeof e.href!="string"||e.href===""||e.onLoad||e.onError)break;switch(e.rel){case"stylesheet":return t=e.disabled,typeof e.precedence=="string"&&t==null;default:return!0}case"script":if(e.async&&typeof e.async!="function"&&typeof e.async!="symbol"&&!e.onLoad&&!e.onError&&e.src&&typeof e.src=="string")return!0}return!1}function Yd(t){return!(t.type==="stylesheet"&&(t.state.loading&3)===0)}function ty(t,e,l,a){if(l.type==="stylesheet"&&(typeof a.media!="string"||matchMedia(a.media).matches!==!1)&&(l.state.loading&4)===0){if(l.instance===null){var u=Da(a.href),n=e.querySelector(zu(u));if(n){e=n._p,e!==null&&typeof e=="object"&&typeof e.then=="function"&&(t.count++,t=Jn.bind(t),e.then(t,t)),l.state.loading|=4,l.instance=n,Yt(n);return}n=e.ownerDocument||e,a=Hd(a),(u=Ae.get(u))&&xf(a,u),n=n.createElement("link"),Yt(n);var c=n;c._p=new Promise(function(s,h){c.onload=s,c.onerror=h}),Vt(n,"link",a),l.instance=n}t.stylesheets===null&&(t.stylesheets=new Map),t.stylesheets.set(l,e),(e=l.state.preload)&&(l.state.loading&3)===0&&(t.count++,l=Jn.bind(t),e.addEventListener("load",l),e.addEventListener("error",l))}}var Tf=0;function ey(t,e){return t.stylesheets&&t.count===0&&$n(t,t.stylesheets),0Tf?50:800)+e);return t.unsuspend=l,function(){t.unsuspend=null,clearTimeout(a),clearTimeout(u)}}:null}function Jn(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)$n(this,this.stylesheets);else if(this.unsuspend){var t=this.unsuspend;this.unsuspend=null,t()}}}var kn=null;function $n(t,e){t.stylesheets=null,t.unsuspend!==null&&(t.count++,kn=new Map,e.forEach(ly,t),kn=null,Jn.call(t))}function ly(t,e){if(!(e.state.loading&4)){var l=kn.get(t);if(l)var a=l.get(null);else{l=new Map,kn.set(t,l);for(var u=t.querySelectorAll("link[data-precedence],style[data-precedence]"),n=0;n"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(i)}catch(r){console.error(r)}}return i(),Cf.exports=py(),Cf.exports}var by=Sy(),_=Qf();/** + * react-router v7.15.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 + */var rm="popstate";function sm(i){return typeof i=="object"&&i!=null&&"pathname"in i&&"search"in i&&"hash"in i&&"state"in i&&"key"in i}function xy(i={}){function r(f,d){var v;let m=(v=d.state)==null?void 0:v.masked,{pathname:b,search:A,hash:x}=m||f.location;return Yf("",{pathname:b,search:A,hash:x},d.state&&d.state.usr||null,d.state&&d.state.key||"default",m?{pathname:f.location.pathname,search:f.location.search,hash:f.location.hash}:void 0)}function o(f,d){return typeof d=="string"?d:Uu(d)}return Ty(r,o,null,i)}function Rt(i,r){if(i===!1||i===null||typeof i>"u")throw new Error(r)}function Ce(i,r){if(!i){typeof console<"u"&&console.warn(r);try{throw new Error(r)}catch{}}}function Ey(){return Math.random().toString(36).substring(2,10)}function om(i,r){return{usr:i.state,key:i.key,idx:r,masked:i.mask?{pathname:i.pathname,search:i.search,hash:i.hash}:void 0}}function Yf(i,r,o=null,f,d){return{pathname:typeof i=="string"?i:i.pathname,search:"",hash:"",...typeof r=="string"?Ha(r):r,state:o,key:r&&r.key||f||Ey(),mask:d}}function Uu({pathname:i="/",search:r="",hash:o=""}){return r&&r!=="?"&&(i+=r.charAt(0)==="?"?r:"?"+r),o&&o!=="#"&&(i+=o.charAt(0)==="#"?o:"#"+o),i}function Ha(i){let r={};if(i){let o=i.indexOf("#");o>=0&&(r.hash=i.substring(o),i=i.substring(0,o));let f=i.indexOf("?");f>=0&&(r.search=i.substring(f),i=i.substring(0,f)),i&&(r.pathname=i)}return r}function Ty(i,r,o,f={}){let{window:d=document.defaultView,v5Compat:m=!1}=f,b=d.history,A="POP",x=null,v=O();v==null&&(v=0,b.replaceState({...b.state,idx:v},""));function O(){return(b.state||{idx:null}).idx}function R(){A="POP";let X=O(),q=X==null?null:X-v;v=X,x&&x({action:A,location:G.location,delta:q})}function H(X,q){A="PUSH";let I=sm(X)?X:Yf(G.location,X,q);v=O()+1;let k=om(I,v),yt=G.createHref(I.mask||I);try{b.pushState(k,"",yt)}catch(dt){if(dt instanceof DOMException&&dt.name==="DataCloneError")throw dt;d.location.assign(yt)}m&&x&&x({action:A,location:G.location,delta:1})}function Z(X,q){A="REPLACE";let I=sm(X)?X:Yf(G.location,X,q);v=O();let k=om(I,v),yt=G.createHref(I.mask||I);b.replaceState(k,"",yt),m&&x&&x({action:A,location:G.location,delta:0})}function K(X){return zy(X)}let G={get action(){return A},get location(){return i(d,b)},listen(X){if(x)throw new Error("A history only accepts one active listener");return d.addEventListener(rm,R),x=X,()=>{d.removeEventListener(rm,R),x=null}},createHref(X){return r(d,X)},createURL:K,encodeLocation(X){let q=K(X);return{pathname:q.pathname,search:q.search,hash:q.hash}},push:H,replace:Z,go(X){return b.go(X)}};return G}function zy(i,r=!1){let o="http://localhost";typeof window<"u"&&(o=window.location.origin!=="null"?window.location.origin:window.location.href),Rt(o,"No window.location.(origin|href) available to create URL");let f=typeof i=="string"?i:Uu(i);return f=f.replace(/ $/,"%20"),!r&&f.startsWith("//")&&(f=o+f),new URL(f,o)}function gm(i,r,o="/"){return Ay(i,r,o,!1)}function Ay(i,r,o,f,d){let m=typeof r=="string"?Ha(r):r,b=nl(m.pathname||"/",o);if(b==null)return null;let A=Ry(i),x=null,v=Ly(b);for(let O=0;x==null&&O{let O={relativePath:v===void 0?b.path||"":v,caseSensitive:b.caseSensitive===!0,childrenIndex:A,route:b};if(O.relativePath.startsWith("/")){if(!O.relativePath.startsWith(f)&&x)return;Rt(O.relativePath.startsWith(f),`Absolute route path "${O.relativePath}" nested under path "${f}" is not valid. An absolute child route path must start with the combined path of all its parent routes.`),O.relativePath=O.relativePath.slice(f.length)}let R=Oe([f,O.relativePath]),H=o.concat(O);b.children&&b.children.length>0&&(Rt(b.index!==!0,`Index routes must not have child routes. Please remove all child routes from route path "${R}".`),pm(b.children,r,H,R,x)),!(b.path==null&&!b.index)&&r.push({path:R,score:Uy(R,b.index),routesMeta:H})};return i.forEach((b,A)=>{var x;if(b.path===""||!((x=b.path)!=null&&x.includes("?")))m(b,A);else for(let v of Sm(b.path))m(b,A,!0,v)}),r}function Sm(i){let r=i.split("/");if(r.length===0)return[];let[o,...f]=r,d=o.endsWith("?"),m=o.replace(/\?$/,"");if(f.length===0)return d?[m,""]:[m];let b=Sm(f.join("/")),A=[];return A.push(...b.map(x=>x===""?m:[m,x].join("/"))),d&&A.push(...b),A.map(x=>i.startsWith("/")&&x===""?"/":x)}function Ny(i){i.sort((r,o)=>r.score!==o.score?o.score-r.score:Hy(r.routesMeta.map(f=>f.childrenIndex),o.routesMeta.map(f=>f.childrenIndex)))}var _y=/^:[\w-]+$/,My=3,Oy=2,Cy=1,Dy=10,jy=-2,dm=i=>i==="*";function Uy(i,r){let o=i.split("/"),f=o.length;return o.some(dm)&&(f+=jy),r&&(f+=Oy),o.filter(d=>!dm(d)).reduce((d,m)=>d+(_y.test(m)?My:m===""?Cy:Dy),f)}function Hy(i,r){return i.length===r.length&&i.slice(0,-1).every((f,d)=>f===r[d])?i[i.length-1]-r[r.length-1]:0}function By(i,r,o=!1){let{routesMeta:f}=i,d={},m="/",b=[];for(let A=0;A{if(O==="*"){let K=A[H]||"";b=m.slice(0,m.length-K.length).replace(/(.)\/+$/,"$1")}const Z=A[H];return R&&!Z?v[O]=void 0:v[O]=(Z||"").replace(/%2F/g,"/"),v},{}),pathname:m,pathnameBase:b,pattern:i}}function qy(i,r=!1,o=!0){Ce(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 f=[],d="^"+i.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(b,A,x,v,O)=>{if(f.push({paramName:A,isOptional:x!=null}),x){let R=O.charAt(v+b.length);return R&&R!=="/"?"/([^\\/]*)":"(?:/([^\\/]*))?"}return"/([^\\/]+)"}).replace(/\/([\w-]+)\?(\/|$)/g,"(/$1)?$2");return i.endsWith("*")?(f.push({paramName:"*"}),d+=i==="*"||i==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):o?d+="\\/*$":i!==""&&i!=="/"&&(d+="(?:(?=\\/|$))"),[new RegExp(d,r?void 0:"i"),f]}function Ly(i){try{return i.split("/").map(r=>decodeURIComponent(r).replace(/\//g,"%2F")).join("/")}catch(r){return Ce(!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 (${r}).`),i}}function nl(i,r){if(r==="/")return i;if(!i.toLowerCase().startsWith(r.toLowerCase()))return null;let o=r.endsWith("/")?r.length-1:r.length,f=i.charAt(o);return f&&f!=="/"?null:i.slice(o)||"/"}var Yy=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i;function Gy(i,r="/"){let{pathname:o,search:f="",hash:d=""}=typeof i=="string"?Ha(i):i,m;return o?(o=xm(o),o.startsWith("/")?m=mm(o.substring(1),"/"):m=mm(o,r)):m=r,{pathname:m,search:wy(f),hash:Zy(d)}}function mm(i,r){let o=fi(r).split("/");return i.split("/").forEach(d=>{d===".."?o.length>1&&o.pop():d!=="."&&o.push(d)}),o.length>1?o.join("/"):"/"}function Bf(i,r,o,f){return`Cannot include a '${i}' character in a manually specified \`to.${r}\` field [${JSON.stringify(f)}]. Please separate it out to the \`to.${o}\` field. Alternatively you may provide the full path as a string in and the router will parse it for you.`}function Xy(i){return i.filter((r,o)=>o===0||r.route.path&&r.route.path.length>0)}function bm(i){let r=Xy(i);return r.map((o,f)=>f===r.length-1?o.pathname:o.pathnameBase)}function wf(i,r,o,f=!1){let d;typeof i=="string"?d=Ha(i):(d={...i},Rt(!d.pathname||!d.pathname.includes("?"),Bf("?","pathname","search",d)),Rt(!d.pathname||!d.pathname.includes("#"),Bf("#","pathname","hash",d)),Rt(!d.search||!d.search.includes("#"),Bf("#","search","hash",d)));let m=i===""||d.pathname==="",b=m?"/":d.pathname,A;if(b==null)A=o;else{let R=r.length-1;if(!f&&b.startsWith("..")){let H=b.split("/");for(;H[0]==="..";)H.shift(),R-=1;d.pathname=H.join("/")}A=R>=0?r[R]:"/"}let x=Gy(d,A),v=b&&b!=="/"&&b.endsWith("/"),O=(m||b===".")&&o.endsWith("/");return!x.pathname.endsWith("/")&&(v||O)&&(x.pathname+="/"),x}var xm=i=>i.replace(/\/\/+/g,"/"),Oe=i=>xm(i.join("/")),fi=i=>i.replace(/\/+$/,""),Qy=i=>fi(i).replace(/^\/*/,"/"),wy=i=>!i||i==="?"?"":i.startsWith("?")?i:"?"+i,Zy=i=>!i||i==="#"?"":i.startsWith("#")?i:"#"+i,Vy=class{constructor(i,r,o,f=!1){this.status=i,this.statusText=r||"",this.internal=f,o instanceof Error?(this.data=o.toString(),this.error=o):this.data=o}};function Ky(i){return i!=null&&typeof i.status=="number"&&typeof i.statusText=="string"&&typeof i.internal=="boolean"&&"data"in i}function Jy(i){let r=i.map(o=>o.route.path).filter(Boolean);return Oe(r)||"/"}var Em=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u";function Tm(i,r){let o=i;if(typeof o!="string"||!Yy.test(o))return{absoluteURL:void 0,isExternal:!1,to:o};let f=o,d=!1;if(Em)try{let m=new URL(window.location.href),b=o.startsWith("//")?new URL(m.protocol+o):new URL(o),A=nl(b.pathname,r);b.origin===m.origin&&A!=null?o=A+b.search+b.hash:d=!0}catch{Ce(!1,` contains an invalid URL which will probably break when clicked - please update to a valid URL path.`)}return{absoluteURL:f,isExternal:d,to:o}}Object.getOwnPropertyNames(Object.prototype).sort().join("\0");var zm=["POST","PUT","PATCH","DELETE"];new Set(zm);var ky=["GET",...zm];new Set(ky);var Ba=_.createContext(null);Ba.displayName="DataRouter";var ri=_.createContext(null);ri.displayName="DataRouterState";var Am=_.createContext(!1);function $y(){return _.useContext(Am)}var Rm=_.createContext({isTransitioning:!1});Rm.displayName="ViewTransition";var Wy=_.createContext(new Map);Wy.displayName="Fetchers";var Fy=_.createContext(null);Fy.displayName="Await";var Re=_.createContext(null);Re.displayName="Navigation";var Hu=_.createContext(null);Hu.displayName="Location";var De=_.createContext({outlet:null,matches:[],isDataRoute:!1});De.displayName="Route";var Zf=_.createContext(null);Zf.displayName="RouteError";var Nm="REACT_ROUTER_ERROR",Iy="REDIRECT",Py="ROUTE_ERROR_RESPONSE";function tv(i){if(i.startsWith(`${Nm}:${Iy}:{`))try{let r=JSON.parse(i.slice(28));if(typeof r=="object"&&r&&typeof r.status=="number"&&typeof r.statusText=="string"&&typeof r.location=="string"&&typeof r.reloadDocument=="boolean"&&typeof r.replace=="boolean")return r}catch{}}function ev(i){if(i.startsWith(`${Nm}:${Py}:{`))try{let r=JSON.parse(i.slice(40));if(typeof r=="object"&&r&&typeof r.status=="number"&&typeof r.statusText=="string")return new Vy(r.status,r.statusText,r.data)}catch{}}function lv(i,{relative:r}={}){Rt(Bu(),"useHref() may be used only in the context of a component.");let{basename:o,navigator:f}=_.useContext(Re),{hash:d,pathname:m,search:b}=qu(i,{relative:r}),A=m;return o!=="/"&&(A=m==="/"?o:Oe([o,m])),f.createHref({pathname:A,search:b,hash:d})}function Bu(){return _.useContext(Hu)!=null}function je(){return Rt(Bu(),"useLocation() may be used only in the context of a component."),_.useContext(Hu).location}var _m="You should call navigate() in a React.useEffect(), not when your component is first rendered.";function Mm(i){_.useContext(Re).static||_.useLayoutEffect(i)}function Om(){let{isDataRoute:i}=_.useContext(De);return i?pv():av()}function av(){Rt(Bu(),"useNavigate() may be used only in the context of a component.");let i=_.useContext(Ba),{basename:r,navigator:o}=_.useContext(Re),{matches:f}=_.useContext(De),{pathname:d}=je(),m=JSON.stringify(bm(f)),b=_.useRef(!1);return Mm(()=>{b.current=!0}),_.useCallback((x,v={})=>{if(Ce(b.current,_m),!b.current)return;if(typeof x=="number"){o.go(x);return}let O=wf(x,JSON.parse(m),d,v.relative==="path");i==null&&r!=="/"&&(O.pathname=O.pathname==="/"?r:Oe([r,O.pathname])),(v.replace?o.replace:o.push)(O,v.state,v)},[r,o,m,d,i])}var uv=_.createContext(null);function nv(i){let r=_.useContext(De).outlet;return _.useMemo(()=>r&&_.createElement(uv.Provider,{value:i},r),[r,i])}function iv(){let{matches:i}=_.useContext(De),r=i[i.length-1];return(r==null?void 0:r.params)??{}}function qu(i,{relative:r}={}){let{matches:o}=_.useContext(De),{pathname:f}=je(),d=JSON.stringify(bm(o));return _.useMemo(()=>wf(i,JSON.parse(d),f,r==="path"),[i,d,f,r])}function cv(i,r){return Cm(i,r)}function Cm(i,r,o){var X;Rt(Bu(),"useRoutes() may be used only in the context of a component.");let{navigator:f}=_.useContext(Re),{matches:d}=_.useContext(De),m=d[d.length-1],b=m?m.params:{},A=m?m.pathname:"/",x=m?m.pathnameBase:"/",v=m&&m.route;{let q=v&&v.path||"";jm(A,!v||q.endsWith("*")||q.endsWith("*?"),`You rendered descendant (or called \`useRoutes()\`) at "${A}" (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 O=je(),R;if(r){let q=typeof r=="string"?Ha(r):r;Rt(x==="/"||((X=q.pathname)==null?void 0:X.startsWith(x)),`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 "${x}" but pathname "${q.pathname}" was given in the \`location\` prop.`),R=q}else R=O;let H=R.pathname||"/",Z=H;if(x!=="/"){let q=x.replace(/^\//,"").split("/");Z="/"+H.replace(/^\//,"").split("/").slice(q.length).join("/")}let K=o&&o.state.matches.length?o.state.matches.map(q=>Object.assign(q,{route:o.manifest[q.route.id]||q.route})):gm(i,{pathname:Z});Ce(v||K!=null,`No routes matched location "${R.pathname}${R.search}${R.hash}" `),Ce(K==null||K[K.length-1].route.element!==void 0||K[K.length-1].route.Component!==void 0||K[K.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 G=dv(K&&K.map(q=>Object.assign({},q,{params:Object.assign({},b,q.params),pathname:Oe([x,f.encodeLocation?f.encodeLocation(q.pathname.replace(/%/g,"%25").replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:q.pathname]),pathnameBase:q.pathnameBase==="/"?x:Oe([x,f.encodeLocation?f.encodeLocation(q.pathnameBase.replace(/%/g,"%25").replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:q.pathnameBase])})),d,o);return r&&G?_.createElement(Hu.Provider,{value:{location:{pathname:"/",search:"",hash:"",state:null,key:"default",mask:void 0,...R},navigationType:"POP"}},G):G}function fv(){let i=gv(),r=Ky(i)?`${i.status} ${i.statusText}`:i instanceof Error?i.message:JSON.stringify(i),o=i instanceof Error?i.stack:null,f="rgba(200,200,200, 0.5)",d={padding:"0.5rem",backgroundColor:f},m={padding:"2px 4px",backgroundColor:f},b=null;return console.error("Error handled by React Router default ErrorBoundary:",i),b=_.createElement(_.Fragment,null,_.createElement("p",null,"💿 Hey developer 👋"),_.createElement("p",null,"You can provide a way better UX than this when your app throws errors by providing your own ",_.createElement("code",{style:m},"ErrorBoundary")," or"," ",_.createElement("code",{style:m},"errorElement")," prop on your route.")),_.createElement(_.Fragment,null,_.createElement("h2",null,"Unexpected Application Error!"),_.createElement("h3",{style:{fontStyle:"italic"}},r),o?_.createElement("pre",{style:d},o):null,b)}var rv=_.createElement(fv,null),Dm=class extends _.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,r){return r.location!==i.location||r.revalidation!=="idle"&&i.revalidation==="idle"?{error:i.error,location:i.location,revalidation:i.revalidation}:{error:i.error!==void 0?i.error:r.error,location:r.location,revalidation:i.revalidation||r.revalidation}}componentDidCatch(i,r){this.props.onError?this.props.onError(i,r):console.error("React Router caught the following error during render",i)}render(){let i=this.state.error;if(this.context&&typeof i=="object"&&i&&"digest"in i&&typeof i.digest=="string"){const o=ev(i.digest);o&&(i=o)}let r=i!==void 0?_.createElement(De.Provider,{value:this.props.routeContext},_.createElement(Zf.Provider,{value:i,children:this.props.component})):this.props.children;return this.context?_.createElement(sv,{error:i},r):r}};Dm.contextType=Am;var qf=new WeakMap;function sv({children:i,error:r}){let{basename:o}=_.useContext(Re);if(typeof r=="object"&&r&&"digest"in r&&typeof r.digest=="string"){let f=tv(r.digest);if(f){let d=qf.get(r);if(d)throw d;let m=Tm(f.location,o);if(Em&&!qf.get(r))if(m.isExternal||f.reloadDocument)window.location.href=m.absoluteURL||m.to;else{const b=Promise.resolve().then(()=>window.__reactRouterDataRouter.navigate(m.to,{replace:f.replace}));throw qf.set(r,b),b}return _.createElement("meta",{httpEquiv:"refresh",content:`0;url=${m.absoluteURL||m.to}`})}}return i}function ov({routeContext:i,match:r,children:o}){let f=_.useContext(Ba);return f&&f.static&&f.staticContext&&(r.route.errorElement||r.route.ErrorBoundary)&&(f.staticContext._deepestRenderedBoundaryId=r.route.id),_.createElement(De.Provider,{value:i},o)}function dv(i,r=[],o){let f=o==null?void 0:o.state;if(i==null){if(!f)return null;if(f.errors)i=f.matches;else if(r.length===0&&!f.initialized&&f.matches.length>0)i=f.matches;else return null}let d=i,m=f==null?void 0:f.errors;if(m!=null){let O=d.findIndex(R=>R.route.id&&(m==null?void 0:m[R.route.id])!==void 0);Rt(O>=0,`Could not find a matching route for errors on route IDs: ${Object.keys(m).join(",")}`),d=d.slice(0,Math.min(d.length,O+1))}let b=!1,A=-1;if(o&&f){b=f.renderFallback;for(let O=0;O=0?d=d.slice(0,A+1):d=[d[0]];break}}}}let x=o==null?void 0:o.onError,v=f&&x?(O,R)=>{var H,Z;x(O,{location:f.location,params:((Z=(H=f.matches)==null?void 0:H[0])==null?void 0:Z.params)??{},pattern:Jy(f.matches),errorInfo:R})}:void 0;return d.reduceRight((O,R,H)=>{let Z,K=!1,G=null,X=null;f&&(Z=m&&R.route.id?m[R.route.id]:void 0,G=R.route.errorElement||rv,b&&(A<0&&H===0?(jm("route-fallback",!1,"No `HydrateFallback` element provided to render during initial hydration"),K=!0,X=null):A===H&&(K=!0,X=R.route.hydrateFallbackElement||null)));let q=r.concat(d.slice(0,H+1)),I=()=>{let k;return Z?k=G:K?k=X:R.route.Component?k=_.createElement(R.route.Component,null):R.route.element?k=R.route.element:k=O,_.createElement(ov,{match:R,routeContext:{outlet:O,matches:q,isDataRoute:f!=null},children:k})};return f&&(R.route.ErrorBoundary||R.route.errorElement||H===0)?_.createElement(Dm,{location:f.location,revalidation:f.revalidation,component:G,error:Z,children:I(),routeContext:{outlet:null,matches:q,isDataRoute:!0},onError:v}):I()},null)}function Vf(i){return`${i} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function mv(i){let r=_.useContext(Ba);return Rt(r,Vf(i)),r}function hv(i){let r=_.useContext(ri);return Rt(r,Vf(i)),r}function yv(i){let r=_.useContext(De);return Rt(r,Vf(i)),r}function Kf(i){let r=yv(i),o=r.matches[r.matches.length-1];return Rt(o.route.id,`${i} can only be used on routes that contain a unique "id"`),o.route.id}function vv(){return Kf("useRouteId")}function gv(){var f;let i=_.useContext(Zf),r=hv("useRouteError"),o=Kf("useRouteError");return i!==void 0?i:(f=r.errors)==null?void 0:f[o]}function pv(){let{router:i}=mv("useNavigate"),r=Kf("useNavigate"),o=_.useRef(!1);return Mm(()=>{o.current=!0}),_.useCallback(async(d,m={})=>{Ce(o.current,_m),o.current&&(typeof d=="number"?await i.navigate(d):await i.navigate(d,{fromRouteId:r,...m}))},[i,r])}var hm={};function jm(i,r,o){!r&&!hm[i]&&(hm[i]=!0,Ce(!1,o))}_.memo(Sv);function Sv({routes:i,manifest:r,future:o,state:f,isStatic:d,onError:m}){return Cm(i,void 0,{manifest:r,state:f,isStatic:d,onError:m})}function bv(i){return nv(i.context)}function ju(i){Rt(!1,"A is only ever to be used as the child of element, never rendered directly. Please wrap your in a .")}function xv({basename:i="/",children:r=null,location:o,navigationType:f="POP",navigator:d,static:m=!1,useTransitions:b}){Rt(!Bu(),"You cannot render a inside another . You should never have more than one in your app.");let A=i.replace(/^\/*/,"/"),x=_.useMemo(()=>({basename:A,navigator:d,static:m,useTransitions:b,future:{}}),[A,d,m,b]);typeof o=="string"&&(o=Ha(o));let{pathname:v="/",search:O="",hash:R="",state:H=null,key:Z="default",mask:K}=o,G=_.useMemo(()=>{let X=nl(v,A);return X==null?null:{location:{pathname:X,search:O,hash:R,state:H,key:Z,mask:K},navigationType:f}},[A,v,O,R,H,Z,f,K]);return Ce(G!=null,` is not able to match the URL "${v}${O}${R}" because it does not start with the basename, so the won't render anything.`),G==null?null:_.createElement(Re.Provider,{value:x},_.createElement(Hu.Provider,{children:r,value:G}))}function Ev({children:i,location:r}){return cv(Gf(i),r)}function Gf(i,r=[]){let o=[];return _.Children.forEach(i,(f,d)=>{if(!_.isValidElement(f))return;let m=[...r,d];if(f.type===_.Fragment){o.push.apply(o,Gf(f.props.children,m));return}Rt(f.type===ju,`[${typeof f.type=="string"?f.type:f.type.name}] is not a component. All component children of must be a or `),Rt(!f.props.index||!f.props.children,"An index route cannot have child routes.");let b={id:f.props.id||m.join("-"),caseSensitive:f.props.caseSensitive,element:f.props.element,Component:f.props.Component,index:f.props.index,path:f.props.path,middleware:f.props.middleware,loader:f.props.loader,action:f.props.action,hydrateFallbackElement:f.props.hydrateFallbackElement,HydrateFallback:f.props.HydrateFallback,errorElement:f.props.errorElement,ErrorBoundary:f.props.ErrorBoundary,hasErrorBoundary:f.props.hasErrorBoundary===!0||f.props.ErrorBoundary!=null||f.props.errorElement!=null,shouldRevalidate:f.props.shouldRevalidate,handle:f.props.handle,lazy:f.props.lazy};f.props.children&&(b.children=Gf(f.props.children,m)),o.push(b)}),o}var ni="get",ii="application/x-www-form-urlencoded";function si(i){return typeof HTMLElement<"u"&&i instanceof HTMLElement}function Tv(i){return si(i)&&i.tagName.toLowerCase()==="button"}function zv(i){return si(i)&&i.tagName.toLowerCase()==="form"}function Av(i){return si(i)&&i.tagName.toLowerCase()==="input"}function Rv(i){return!!(i.metaKey||i.altKey||i.ctrlKey||i.shiftKey)}function Nv(i,r){return i.button===0&&(!r||r==="_self")&&!Rv(i)}function Xf(i=""){return new URLSearchParams(typeof i=="string"||Array.isArray(i)||i instanceof URLSearchParams?i:Object.keys(i).reduce((r,o)=>{let f=i[o];return r.concat(Array.isArray(f)?f.map(d=>[o,d]):[[o,f]])},[]))}function _v(i,r){let o=Xf(i);return r&&r.forEach((f,d)=>{o.has(d)||r.getAll(d).forEach(m=>{o.append(d,m)})}),o}var ai=null;function Mv(){if(ai===null)try{new FormData(document.createElement("form"),0),ai=!1}catch{ai=!0}return ai}var Ov=new Set(["application/x-www-form-urlencoded","multipart/form-data","text/plain"]);function Lf(i){return i!=null&&!Ov.has(i)?(Ce(!1,`"${i}" is not a valid \`encType\` for \`
\`/\`\` and will default to "${ii}"`),null):i}function Cv(i,r){let o,f,d,m,b;if(zv(i)){let A=i.getAttribute("action");f=A?nl(A,r):null,o=i.getAttribute("method")||ni,d=Lf(i.getAttribute("enctype"))||ii,m=new FormData(i)}else if(Tv(i)||Av(i)&&(i.type==="submit"||i.type==="image")){let A=i.form;if(A==null)throw new Error('Cannot submit a + ))} + + + + {/* Capacity Range */} +
+
ЁМКОСТЬ (А·Ч)
+
+ onChange({ ...filters, capacityMin: parseInt(e.target.value) || 0 })} + className="w-24 px-3 py-2 bg-white dark:bg-gray-900 border border-gray-200 dark:border-gray-700 rounded-xl text-sm" + /> + onChange({ ...filters, capacityMax: parseInt(e.target.value) || 9999 })} + className="w-24 px-3 py-2 bg-white dark:bg-gray-900 border border-gray-200 dark:border-gray-700 rounded-xl text-sm" + /> +
+
+ + {/* Chemistry */} +
+
ТЕХНОЛОГИЯ
+
+ {chemistries.map(c => ( + + ))} +
+
+ + {/* Application */} +
+
ПРИМЕНЕНИЕ
+
+ {applications.map(a => ( + + ))} +
+
+ + + + ) +} \ No newline at end of file diff --git a/src/components/Footer.tsx b/src/components/Footer.tsx new file mode 100644 index 0000000..5796ed2 --- /dev/null +++ b/src/components/Footer.tsx @@ -0,0 +1,13 @@ +export default function Footer() { + return ( + + ) +} \ No newline at end of file diff --git a/src/components/Header.tsx b/src/components/Header.tsx new file mode 100644 index 0000000..0d2b697 --- /dev/null +++ b/src/components/Header.tsx @@ -0,0 +1,64 @@ +import { Link, useLocation } from 'react-router-dom' +import { Battery, Sun, Moon } from 'lucide-react' +import { useState, useEffect } from 'react' + +export default function Header() { + const location = useLocation() + const [dark, setDark] = useState(true) + + useEffect(() => { + const isDark = localStorage.getItem('theme') === 'dark' || + (!localStorage.getItem('theme') && window.matchMedia('(prefers-color-scheme: dark)').matches) + setDark(isDark) + document.documentElement.classList.toggle('dark', isDark) + }, []) + + const toggleTheme = () => { + const newDark = !dark + setDark(newDark) + localStorage.setItem('theme', newDark ? 'dark' : 'light') + document.documentElement.classList.toggle('dark', newDark) + } + + return ( +
+
+ +
+ +
+
+
PowerGrid
+
INDUSTRIAL BATTERIES
+
+ + + + +
+ + + Перейти в каталог + +
+
+
+ ) +} \ No newline at end of file diff --git a/src/components/Layout.tsx b/src/components/Layout.tsx new file mode 100644 index 0000000..8ff498e --- /dev/null +++ b/src/components/Layout.tsx @@ -0,0 +1,15 @@ +import { Outlet } from 'react-router-dom' +import Header from './Header' +import Footer from './Footer' + +export default function Layout() { + return ( +
+
+
+ +
+
+
+ ) +} \ No newline at end of file diff --git a/src/components/SearchBar.tsx b/src/components/SearchBar.tsx new file mode 100644 index 0000000..dccf148 --- /dev/null +++ b/src/components/SearchBar.tsx @@ -0,0 +1,21 @@ +import { Search } from 'lucide-react' + +interface SearchBarProps { + value: string + onChange: (value: string) => void +} + +export default function SearchBar({ value, onChange }: SearchBarProps) { + return ( +
+ + onChange(e.target.value)} + className="w-full pl-11 pr-4 py-3 bg-white dark:bg-gray-900 border border-gray-200 dark:border-gray-700 rounded-2xl focus:outline-none focus:ring-2 focus:ring-sky-500 text-sm" + /> +
+ ) +} \ No newline at end of file diff --git a/src/data/batteries.ts b/src/data/batteries.ts new file mode 100644 index 0000000..3b0d182 --- /dev/null +++ b/src/data/batteries.ts @@ -0,0 +1,79 @@ +import { Battery } from '../types/battery' + +export const batteries: Battery[] = [ + { + id: 1, + name: "LiFePO4 12V 100Ah", + brand: "PowerCell", + voltage: 12, + capacity: 100, + chemistry: "LiFePO4", + application: ["Solar", "UPS", "Marine"], + weight: 10.5, + dimensions: "330×173×220", + cycles: 6000, + price: 24500, + image: "https://picsum.photos/id/1015/400/300", + description: "Высококачественный литий-железо-фосфатный аккумулятор для солнечных станций и ИБП." + }, + { + id: 2, + name: "AGM 12V 200Ah", + brand: "Delta", + voltage: 12, + capacity: 200, + chemistry: "AGM", + application: ["UPS", "Telecom"], + weight: 58, + dimensions: "522×240×218", + cycles: 1200, + price: 18900, + image: "https://picsum.photos/id/160/400/300", + description: "Герметичный AGM аккумулятор для систем бесперебойного питания и телекоммуникаций." + }, + { + id: 3, + name: "GEL 12V 150Ah", + brand: "Outdo", + voltage: 12, + capacity: 150, + chemistry: "GEL", + application: ["Solar", "UPS"], + weight: 43, + dimensions: "483×170×240", + cycles: 900, + price: 17200, + image: "https://picsum.photos/id/201/400/300", + description: "Гелевый аккумулятор с увеличенным ресурсом для солнечных и стационарных систем." + }, + { + id: 4, + name: "LiFePO4 48V 200Ah", + brand: "RoyPow", + voltage: 48, + capacity: 200, + chemistry: "LiFePO4", + application: ["Forklift", "Solar"], + weight: 92, + dimensions: "600×300×280", + cycles: 5000, + price: 128000, + image: "https://picsum.photos/id/251/400/300", + description: "Тяговый литиевый аккумулятор для вилочных погрузчиков и накопителей энергии." + }, + { + id: 5, + name: "Lead-Acid 2V 1000Ah", + brand: "Fiamm", + voltage: 2, + capacity: 1000, + chemistry: "Lead-Acid", + application: ["UPS", "Industrial"], + weight: 65, + dimensions: "210×172×330", + cycles: 800, + price: 24500, + image: "https://picsum.photos/id/180/400/300", + description: "Стационарный свинцово-кислотный элемент для крупных ИБП и энергосистем." + } +] \ No newline at end of file diff --git a/src/index.css b/src/index.css new file mode 100644 index 0000000..49e3860 --- /dev/null +++ b/src/index.css @@ -0,0 +1,41 @@ +@tailwind utilities; + +:root { + --primary: #0ea5e9; +} + +.dark { + color-scheme: dark; +} + +.card { + transition: transform 0.2s cubic-bezier(0.23, 1, 0.32, 1), + box-shadow 0.2s cubic-bezier(0.23, 1, 0.32, 1); +} + +.card:hover { + transform: translateY(-2px); + box-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1); +} + +.table-row { + transition: background-color 0.1s ease; +} + +.table-row:hover { + background-color: rgb(243 244 246); +} + +.dark .table-row:hover { + background-color: rgb(31 41 55); +} + +.filter-chip { + transition: all 0.1s ease; +} + +.filter-chip.active { + background-color: #0ea5e9; + color: white; + border-color: #0ea5e9; +} \ No newline at end of file diff --git a/src/main.tsx b/src/main.tsx new file mode 100644 index 0000000..5f7dc24 --- /dev/null +++ b/src/main.tsx @@ -0,0 +1,10 @@ +import { createRoot } from 'react-dom/client' +import { BrowserRouter } from 'react-router-dom' +import App from './App.tsx' +import './index.css' + +createRoot(document.getElementById('root')!).render( + + + +) \ No newline at end of file diff --git a/src/pages/Catalog.tsx b/src/pages/Catalog.tsx new file mode 100644 index 0000000..defba71 --- /dev/null +++ b/src/pages/Catalog.tsx @@ -0,0 +1,102 @@ +import { useState, useMemo } from 'react' +import { useSearchParams } from 'react-router-dom' +import { batteries } from '../data/batteries' +import { FilterState } from '../types/battery' +import FilterPanel from '../components/FilterPanel' +import BatteryCard from '../components/BatteryCard' +import BatteryTable from '../components/BatteryTable' +import SearchBar from '../components/SearchBar' +import { Grid, List } from 'lucide-react' + +export default function Catalog() { + const [searchParams] = useSearchParams() + const initialApp = searchParams.get('app') || '' + + const [filters, setFilters] = useState({ + search: '', + voltage: [], + capacityMin: 0, + capacityMax: 9999, + chemistry: [], + application: initialApp ? [initialApp] : [] + }) + const [view, setView] = useState<'grid' | 'table'>('grid') + + const filtered = useMemo(() => { + return batteries.filter(b => { + const matchSearch = + b.name.toLowerCase().includes(filters.search.toLowerCase()) || + b.brand.toLowerCase().includes(filters.search.toLowerCase()) || + b.description.toLowerCase().includes(filters.search.toLowerCase()) + + const matchVoltage = filters.voltage.length === 0 || filters.voltage.includes(b.voltage) + const matchCapacity = b.capacity >= (filters.capacityMin || 0) && b.capacity <= (filters.capacityMax || 9999) + const matchChemistry = filters.chemistry.length === 0 || filters.chemistry.includes(b.chemistry) + const matchApp = filters.application.length === 0 || + b.application.some(app => filters.application.includes(app)) + + return matchSearch && matchVoltage && matchCapacity && matchChemistry && matchApp + }) + }, [filters]) + + return ( +
+
+ {/* Sidebar Filters */} +
+
+
Фильтры
+ +
+
+ + {/* Main Content */} +
+
+
+
Каталог аккумуляторов
+
{filtered.length} результатов
+
+ +
+ setFilters({ ...filters, search: v })} + /> +
+ + +
+
+
+ + {view === 'grid' ? ( +
+ {filtered.map(battery => ( + + ))} +
+ ) : ( + + )} + + {filtered.length === 0 && ( +
+ Ничего не найдено. Попробуйте изменить фильтры. +
+ )} +
+
+
+ ) +} \ No newline at end of file diff --git a/src/pages/Home.tsx b/src/pages/Home.tsx new file mode 100644 index 0000000..a42096d --- /dev/null +++ b/src/pages/Home.tsx @@ -0,0 +1,85 @@ +import { Link } from 'react-router-dom' +import { Battery, Zap, Truck, Sun } from 'lucide-react' +import SearchBar from '../components/SearchBar' +import CategoryCard from '../components/CategoryCard' +import { useState } from 'react' + +export default function Home() { + const [search, setSearch] = useState('') + + return ( +
+ {/* Hero */} +
+
+ 2026 • Industrial Tech +
+

+ Промышленные
аккумуляторы
в одном месте +

+

+ Сравнивайте, выбирайте и заказывайте LiFePO4, AGM, GEL и свинцово-кислотные батареи для любой отрасли. +

+ +
+ +
+
+ Или перейдите сразу в каталог → +
+
+ + {/* Categories */} +
+
+ } + to="/catalog?app=Solar" + /> + } + to="/catalog?app=UPS" + /> + } + to="/catalog?app=Forklift" + /> + } + to="/catalog?app=Marine" + /> +
+
+ + {/* Stats */} +
+
+
+
480
+
моделей в каталоге
+
+
+
38
+
поставщиков
+
+
+
12 400
+
заказов в 2025
+
+
+
4.8
+
средняя оценка
+
+
+
+
+ ) +} \ No newline at end of file diff --git a/src/pages/Product.tsx b/src/pages/Product.tsx new file mode 100644 index 0000000..449dc7c --- /dev/null +++ b/src/pages/Product.tsx @@ -0,0 +1,79 @@ +import { useParams, Link } from 'react-router-dom' +import { batteries } from '../data/batteries' +import { ArrowLeft } from 'lucide-react' + +export default function Product() { + const { id } = useParams() + const battery = batteries.find(b => b.id === Number(id)) + + if (!battery) { + return ( +
+
🔋
+
Аккумулятор не найден
+ Вернуться в каталог +
+ ) + } + + return ( +
+ + Назад в каталог + + +
+ {/* Image */} +
+ {battery.name} +
+ + {/* Info */} +
+
{battery.brand}
+

{battery.name}

+ +
+ {battery.price.toLocaleString('ru-RU')} ₽ +
+ +
+ {battery.description} +
+ + {/* Technical Specs Table */} +
+
ТЕХНИЧЕСКИЕ ХАРАКТЕРИСТИКИ
+ + + {[ + ['Напряжение', `${battery.voltage} В`], + ['Ёмкость', `${battery.capacity} А·ч`], + ['Технология', battery.chemistry], + ['Циклов', battery.cycles], + ['Вес', `${battery.weight} кг`], + ['Габариты (Д×Ш×В)', battery.dimensions + ' мм'], + ['Применение', battery.application.join(', ')], + ].map(([label, value]) => ( + + + + + ))} + +
{label}{value}
+
+ +
+ + +
+
+
+
+ ) +} \ No newline at end of file diff --git a/src/types/battery.ts b/src/types/battery.ts new file mode 100644 index 0000000..ac29093 --- /dev/null +++ b/src/types/battery.ts @@ -0,0 +1,24 @@ +export interface Battery { + id: number + name: string + brand: string + voltage: number + capacity: number + chemistry: 'LiFePO4' | 'AGM' | 'GEL' | 'Lead-Acid' | 'Ni-Cd' + application: string[] + weight: number + dimensions: string + cycles: number + price: number + image: string + description: string +} + +export interface FilterState { + search: string + voltage: number[] + capacityMin: number + capacityMax: number + chemistry: string[] + application: string[] +} \ No newline at end of file diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts new file mode 100644 index 0000000..4d3ea94 --- /dev/null +++ b/src/vite-env.d.ts @@ -0,0 +1,6 @@ +/// + +declare module '*.css' { + const content: string + export default content +} \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..0f147a1 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + "target": "ES2020", + "useDefineForClassFields": true, + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "module": "ESNext", + "skipLibCheck": true, + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "isolatedModules": true, + "moduleDetection": "force", + "noEmit": true, + "jsx": "react-jsx", + "strict": true, + "noUnusedLocals": false, + "noUnusedParameters": false, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["src"] +} \ No newline at end of file diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..cb0c2d0 --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,15 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' +import tailwindcss from '@tailwindcss/vite' + +export default defineConfig({ + plugins: [react(), tailwindcss()], + server: { + port: parseInt(process.env.PORT || '3000'), + host: true, + }, + preview: { + port: parseInt(process.env.PORT || '3000'), + host: true, + }, +}) \ No newline at end of file