From f52365c293bee0be179b687a15745adfa9d05c7f Mon Sep 17 00:00:00 2001 From: rassadin11 Date: Tue, 12 May 2026 17:47:20 +0300 Subject: [PATCH] feat: create kyc page with api --- CLAUDE.md | 54 +++++ dist/assets/index-DNMSK_QC.js | 60 +++++ dist/assets/index-Gd4LQhAo.css | 1 + dist/assets/logo-full-white-DEb7oTyu.png | Bin 0 -> 61641 bytes dist/index.html | 14 ++ src/app/providers/RouterProvider.tsx | 5 + src/features/auth/api/registrationApi.ts | 2 +- src/features/kyc/api/kycApi.ts | 14 ++ src/pages/converter/index.ts | 1 + .../converter/ui/ConverterPage.module.css | 19 ++ src/pages/converter/ui/ConverterPage.tsx | 16 ++ src/pages/kyc/index.ts | 1 + src/pages/kyc/ui/KycPage.module.css | 7 + src/pages/kyc/ui/KycPage.tsx | 10 + src/shared/config/routes.ts | 2 + src/widgets/converter-page/index.ts | 1 + .../ui/AgreementCheck.module.css | 54 +++++ .../converter-page/ui/AgreementCheck.tsx | 33 +++ .../ui/CommissionPanel.module.css | 82 +++++++ .../converter-page/ui/CommissionPanel.tsx | 49 ++++ .../ui/ConverterSection.module.css | 222 ++++++++++++++++++ .../converter-page/ui/ConverterSection.tsx | 109 +++++++++ src/widgets/currency-converter/index.ts | 4 + src/widgets/kyc-verification/index.ts | 1 + src/widgets/kyc-verification/model/useKyc.ts | 12 + .../kyc-verification/ui/KycModal.module.css | 112 +++++++++ src/widgets/kyc-verification/ui/KycModal.tsx | 37 +++ .../kyc-verification/ui/KycWidget.module.css | 61 +++++ src/widgets/kyc-verification/ui/KycWidget.tsx | 59 +++++ tsconfig.tsbuildinfo | 2 +- 30 files changed, 1042 insertions(+), 2 deletions(-) create mode 100644 CLAUDE.md create mode 100644 dist/assets/index-DNMSK_QC.js create mode 100644 dist/assets/index-Gd4LQhAo.css create mode 100644 dist/assets/logo-full-white-DEb7oTyu.png create mode 100644 dist/index.html create mode 100644 src/features/kyc/api/kycApi.ts create mode 100644 src/pages/converter/index.ts create mode 100644 src/pages/converter/ui/ConverterPage.module.css create mode 100644 src/pages/converter/ui/ConverterPage.tsx create mode 100644 src/pages/kyc/index.ts create mode 100644 src/pages/kyc/ui/KycPage.module.css create mode 100644 src/pages/kyc/ui/KycPage.tsx create mode 100644 src/widgets/converter-page/index.ts create mode 100644 src/widgets/converter-page/ui/AgreementCheck.module.css create mode 100644 src/widgets/converter-page/ui/AgreementCheck.tsx create mode 100644 src/widgets/converter-page/ui/CommissionPanel.module.css create mode 100644 src/widgets/converter-page/ui/CommissionPanel.tsx create mode 100644 src/widgets/converter-page/ui/ConverterSection.module.css create mode 100644 src/widgets/converter-page/ui/ConverterSection.tsx create mode 100644 src/widgets/kyc-verification/index.ts create mode 100644 src/widgets/kyc-verification/model/useKyc.ts create mode 100644 src/widgets/kyc-verification/ui/KycModal.module.css create mode 100644 src/widgets/kyc-verification/ui/KycModal.tsx create mode 100644 src/widgets/kyc-verification/ui/KycWidget.module.css create mode 100644 src/widgets/kyc-verification/ui/KycWidget.tsx diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..5307b3e --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,54 @@ +# CLAUDE.md + +This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. + +## Commands + +```bash +npm run dev # Start dev server on port 3000 +npm run build # Type-check (tsc -b) then Vite build +npm run preview # Preview production build +npm run lint # ESLint check +``` + +No test runner is configured. + +## Architecture + +This is a **React 19 + Vite** frontend following **Feature-Sliced Design (FSD)**. Layers are strictly ordered — lower layers must not import from higher ones: + +``` +app → pages → widgets → features → entities → shared +``` + +Path aliases map directly to FSD layers (`@app/*`, `@pages/*`, `@widgets/*`, `@features/*`, `@entities/*`, `@shared/*`) via `vite-tsconfig-paths`. + +### Layer responsibilities + +- **`app/`** — global providers (React Query, router), global CSS (`styles/`). Entry: `App.tsx` wraps `QueryProvider → RouterProvider`. +- **`pages/`** — route-level page components. Each page composes widgets. +- **`widgets/`** — self-contained UI blocks (Hero, CurrencyConverter, NetworksTable, etc.). Contain their own `model/`, `ui/`, and barrel `index.ts`. +- **`features/`** — user-facing capabilities. Currently only `auth/` (hooks + API calls). +- **`shared/`** — cross-cutting utilities, never feature-specific: + - `api/` — fetch wrapper (`base.ts`), CSRF token cache (`csrf.ts`), in-memory access token store (`tokenStore.ts`) + - `config/` — `routes.ts` (ROUTES const), `env.ts` (VITE_API_URL), `constants.ts` + - `ui/` — reusable components (Button, PrimaryButton, FormField, Pill, Title, TokenIcon, Notification) with CSS Modules + - `lib/` — generic hooks (useDebounce, useLocalStorage) and utils (cn) + +### Auth flow + +Authentication uses **two-step email+code** flows for both registration and login. The access token lives in an in-memory `tokenStore` (not localStorage). It is refreshed against `https://app.auth.elcsa.ru/v1/jwt/refresh` using an HttpOnly cookie. `useAuth()` triggers this refresh on app load via React Query; `useIsAuthenticated()` derives auth state from that query. + +Every API request (via `shared/api/base.ts`) attaches a CSRF token fetched from `/csrf/token` (cached in module scope) and the Bearer token if present. On 401 it attempts one silent refresh before throwing. + +### Routing + +`ProtectedRoute` redirects unauthenticated users to `/login`. `GuestRoute` redirects already-authenticated users away from `/login` and `/register`. The converter page (`/converter`) is public but not a guest-only route. + +### Styling + +Plain CSS Modules (`.module.css`) — no Tailwind or CSS-in-JS. Global design tokens live in `src/app/styles/variables.css`. + +## Environment + +`VITE_API_URL` must be set (used in `src/shared/config/env.ts`). Create a `.env.local` for local development. diff --git a/dist/assets/index-DNMSK_QC.js b/dist/assets/index-DNMSK_QC.js new file mode 100644 index 0000000..64ba1b3 --- /dev/null +++ b/dist/assets/index-DNMSK_QC.js @@ -0,0 +1,60 @@ +var Zh=n=>{throw TypeError(n)};var ko=(n,s,c)=>s.has(n)||Zh("Cannot "+c);var x=(n,s,c)=>(ko(n,s,"read from private field"),c?c.call(n):s.get(n)),W=(n,s,c)=>s.has(n)?Zh("Cannot add the same private member more than once"):s instanceof WeakSet?s.add(n):s.set(n,c),X=(n,s,c,r)=>(ko(n,s,"write to private field"),r?r.call(n,c):s.set(n,c),c),rt=(n,s,c)=>(ko(n,s,"access private method"),c);var uc=(n,s,c,r)=>({set _(d){X(n,s,d,c)},get _(){return x(n,s,r)}});(function(){const s=document.createElement("link").relList;if(s&&s.supports&&s.supports("modulepreload"))return;for(const d of document.querySelectorAll('link[rel="modulepreload"]'))r(d);new MutationObserver(d=>{for(const m of d)if(m.type==="childList")for(const v of m.addedNodes)v.tagName==="LINK"&&v.rel==="modulepreload"&&r(v)}).observe(document,{childList:!0,subtree:!0});function c(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 r(d){if(d.ep)return;d.ep=!0;const m=c(d);fetch(d.href,m)}})();var Vo={exports:{}},_s={};/** + * @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 $h;function np(){if($h)return _s;$h=1;var n=Symbol.for("react.transitional.element"),s=Symbol.for("react.fragment");function c(r,d,m){var v=null;if(m!==void 0&&(v=""+m),d.key!==void 0&&(v=""+d.key),"key"in d){m={};for(var p in d)p!=="key"&&(m[p]=d[p])}else m=d;return d=m.ref,{$$typeof:n,type:r,key:v,ref:d!==void 0?d:null,props:m}}return _s.Fragment=s,_s.jsx=c,_s.jsxs=c,_s}var Kh;function ip(){return Kh||(Kh=1,Vo.exports=np()),Vo.exports}var o=ip(),Xo={exports:{}},it={};/** + * @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 Jh;function sp(){if(Jh)return it;Jh=1;var n=Symbol.for("react.transitional.element"),s=Symbol.for("react.portal"),c=Symbol.for("react.fragment"),r=Symbol.for("react.strict_mode"),d=Symbol.for("react.profiler"),m=Symbol.for("react.consumer"),v=Symbol.for("react.context"),p=Symbol.for("react.forward_ref"),g=Symbol.for("react.suspense"),y=Symbol.for("react.memo"),N=Symbol.for("react.lazy"),_=Symbol.for("react.activity"),w=Symbol.iterator;function L(j){return j===null||typeof j!="object"?null:(j=w&&j[w]||j["@@iterator"],typeof j=="function"?j:null)}var Q={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},B=Object.assign,q={};function G(j,H,Z){this.props=j,this.context=H,this.refs=q,this.updater=Z||Q}G.prototype.isReactComponent={},G.prototype.setState=function(j,H){if(typeof j!="object"&&typeof j!="function"&&j!=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,j,H,"setState")},G.prototype.forceUpdate=function(j){this.updater.enqueueForceUpdate(this,j,"forceUpdate")};function $(){}$.prototype=G.prototype;function Y(j,H,Z){this.props=j,this.context=H,this.refs=q,this.updater=Z||Q}var k=Y.prototype=new $;k.constructor=Y,B(k,G.prototype),k.isPureReactComponent=!0;var et=Array.isArray;function ot(){}var P={H:null,A:null,T:null,S:null},lt=Object.prototype.hasOwnProperty;function yt(j,H,Z){var J=Z.ref;return{$$typeof:n,type:j,key:H,ref:J!==void 0?J:null,props:Z}}function Ut(j,H){return yt(j.type,H,j.props)}function Xt(j){return typeof j=="object"&&j!==null&&j.$$typeof===n}function Zt(j){var H={"=":"=0",":":"=2"};return"$"+j.replace(/[=:]/g,function(Z){return H[Z]})}var De=/\/+/g;function ue(j,H){return typeof j=="object"&&j!==null&&j.key!=null?Zt(""+j.key):H.toString(36)}function Lt(j){switch(j.status){case"fulfilled":return j.value;case"rejected":throw j.reason;default:switch(typeof j.status=="string"?j.then(ot,ot):(j.status="pending",j.then(function(H){j.status==="pending"&&(j.status="fulfilled",j.value=H)},function(H){j.status==="pending"&&(j.status="rejected",j.reason=H)})),j.status){case"fulfilled":return j.value;case"rejected":throw j.reason}}throw j}function z(j,H,Z,J,st){var ft=typeof j;(ft==="undefined"||ft==="boolean")&&(j=null);var St=!1;if(j===null)St=!0;else switch(ft){case"bigint":case"string":case"number":St=!0;break;case"object":switch(j.$$typeof){case n:case s:St=!0;break;case N:return St=j._init,z(St(j._payload),H,Z,J,st)}}if(St)return st=st(j),St=J===""?"."+ue(j,0):J,et(st)?(Z="",St!=null&&(Z=St.replace(De,"$&/")+"/"),z(st,H,Z,"",function(Ci){return Ci})):st!=null&&(Xt(st)&&(st=Ut(st,Z+(st.key==null||j&&j.key===st.key?"":(""+st.key).replace(De,"$&/")+"/")+St)),H.push(st)),1;St=0;var pe=J===""?".":J+":";if(et(j))for(var $t=0;$t>>1,zt=z[Tt];if(0>>1;Ttd(Z,at))Jd(st,Z)?(z[Tt]=st,z[J]=at,Tt=J):(z[Tt]=Z,z[H]=at,Tt=H);else if(Jd(st,at))z[Tt]=st,z[J]=at,Tt=J;else break t}}return V}function d(z,V){var at=z.sortIndex-V.sortIndex;return at!==0?at:z.id-V.id}if(n.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var m=performance;n.unstable_now=function(){return m.now()}}else{var v=Date,p=v.now();n.unstable_now=function(){return v.now()-p}}var g=[],y=[],N=1,_=null,w=3,L=!1,Q=!1,B=!1,q=!1,G=typeof setTimeout=="function"?setTimeout:null,$=typeof clearTimeout=="function"?clearTimeout:null,Y=typeof setImmediate<"u"?setImmediate:null;function k(z){for(var V=c(y);V!==null;){if(V.callback===null)r(y);else if(V.startTime<=z)r(y),V.sortIndex=V.expirationTime,s(g,V);else break;V=c(y)}}function et(z){if(B=!1,k(z),!Q)if(c(g)!==null)Q=!0,ot||(ot=!0,Zt());else{var V=c(y);V!==null&&Lt(et,V.startTime-z)}}var ot=!1,P=-1,lt=5,yt=-1;function Ut(){return q?!0:!(n.unstable_now()-ytz&&Ut());){var Tt=_.callback;if(typeof Tt=="function"){_.callback=null,w=_.priorityLevel;var zt=Tt(_.expirationTime<=z);if(z=n.unstable_now(),typeof zt=="function"){_.callback=zt,k(z),V=!0;break e}_===c(g)&&r(g),k(z)}else r(g);_=c(g)}if(_!==null)V=!0;else{var j=c(y);j!==null&&Lt(et,j.startTime-z),V=!1}}break t}finally{_=null,w=at,L=!1}V=void 0}}finally{V?Zt():ot=!1}}}var Zt;if(typeof Y=="function")Zt=function(){Y(Xt)};else if(typeof MessageChannel<"u"){var De=new MessageChannel,ue=De.port2;De.port1.onmessage=Xt,Zt=function(){ue.postMessage(null)}}else Zt=function(){G(Xt,0)};function Lt(z,V){P=G(function(){z(n.unstable_now())},V)}n.unstable_IdlePriority=5,n.unstable_ImmediatePriority=1,n.unstable_LowPriority=4,n.unstable_NormalPriority=3,n.unstable_Profiling=null,n.unstable_UserBlockingPriority=2,n.unstable_cancelCallback=function(z){z.callback=null},n.unstable_forceFrameRate=function(z){0>z||125Tt?(z.sortIndex=at,s(y,z),c(g)===null&&z===c(y)&&(B?($(P),P=-1):B=!0,Lt(et,at-Tt))):(z.sortIndex=zt,s(g,z),Q||L||(Q=!0,ot||(ot=!0,Zt()))),z},n.unstable_shouldYield=Ut,n.unstable_wrapCallback=function(z){var V=w;return function(){var at=w;w=V;try{return z.apply(this,arguments)}finally{w=at}}}})(Ko)),Ko}var Ih;function cp(){return Ih||(Ih=1,$o.exports=up()),$o.exports}var Jo={exports:{}},he={};/** + * @license React + * react-dom.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 Ph;function rp(){if(Ph)return he;Ph=1;var n=Tf();function s(g){var y="https://react.dev/errors/"+g;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(s){console.error(s)}}return n(),Jo.exports=rp(),Jo.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 e1;function fp(){if(e1)return bs;e1=1;var n=cp(),s=Tf(),c=op();function r(t){var e="https://react.dev/errors/"+t;if(1zt||(t.current=Tt[zt],Tt[zt]=null,zt--)}function Z(t,e){zt++,Tt[zt]=t.current,t.current=e}var J=j(null),st=j(null),ft=j(null),St=j(null);function pe(t,e){switch(Z(ft,e),Z(st,t),Z(J,null),e.nodeType){case 9:case 11:t=(t=e.documentElement)&&(t=t.namespaceURI)?vh(t):0;break;default:if(t=e.tagName,e=e.namespaceURI)e=vh(e),t=yh(e,t);else switch(t){case"svg":t=1;break;case"math":t=2;break;default:t=0}}H(J),Z(J,t)}function $t(){H(J),H(st),H(ft)}function Ci(t){t.memoizedState!==null&&Z(St,t);var e=J.current,l=yh(e,t.type);e!==l&&(Z(st,t),Z(J,l))}function ks(t){st.current===t&&(H(J),H(st)),St.current===t&&(H(St),vs._currentValue=at)}var Ec,Xf;function Ga(t){if(Ec===void 0)try{throw Error()}catch(l){var e=l.stack.trim().match(/\n( *(at )?)/);Ec=e&&e[1]||"",Xf=-1)":-1i||b[a]!==R[i]){var O=` +`+b[a].replace(" at new "," at ");return t.displayName&&O.includes("")&&(O=O.replace("",t.displayName)),O}while(1<=a&&0<=i);break}}}finally{Nc=!1,Error.prepareStackTrace=l}return(l=t?t.displayName||t.name:"")?Ga(l):""}function Um(t,e){switch(t.tag){case 26:case 27:case 5:return Ga(t.type);case 16:return Ga("Lazy");case 13:return t.child!==e&&e!==null?Ga("Suspense Fallback"):Ga("Suspense");case 19:return Ga("SuspenseList");case 0:case 15:return Cc(t.type,!1);case 11:return Cc(t.type.render,!1);case 1:return Cc(t.type,!0);case 31:return Ga("Activity");default:return""}}function Zf(t){try{var e="",l=null;do e+=Um(t,l),l=t,t=t.return;while(t);return e}catch(a){return` +Error generating stack: `+a.message+` +`+a.stack}}var Tc=Object.prototype.hasOwnProperty,Rc=n.unstable_scheduleCallback,Mc=n.unstable_cancelCallback,Lm=n.unstable_shouldYield,Bm=n.unstable_requestPaint,Ue=n.unstable_now,Hm=n.unstable_getCurrentPriorityLevel,$f=n.unstable_ImmediatePriority,Kf=n.unstable_UserBlockingPriority,Vs=n.unstable_NormalPriority,qm=n.unstable_LowPriority,Jf=n.unstable_IdlePriority,Qm=n.log,Gm=n.unstable_setDisableYieldValue,Ti=null,Le=null;function aa(t){if(typeof Qm=="function"&&Gm(t),Le&&typeof Le.setStrictMode=="function")try{Le.setStrictMode(Ti,t)}catch{}}var Be=Math.clz32?Math.clz32:Vm,Ym=Math.log,km=Math.LN2;function Vm(t){return t>>>=0,t===0?32:31-(Ym(t)/km|0)|0}var Xs=256,Zs=262144,$s=4194304;function Ya(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 Ks(t,e,l){var a=t.pendingLanes;if(a===0)return 0;var i=0,u=t.suspendedLanes,f=t.pingedLanes;t=t.warmLanes;var h=a&134217727;return h!==0?(a=h&~u,a!==0?i=Ya(a):(f&=h,f!==0?i=Ya(f):l||(l=h&~t,l!==0&&(i=Ya(l))))):(h=a&~u,h!==0?i=Ya(h):f!==0?i=Ya(f):l||(l=a&~t,l!==0&&(i=Ya(l)))),i===0?0:e!==0&&e!==i&&(e&u)===0&&(u=i&-i,l=e&-e,u>=l||u===32&&(l&4194048)!==0)?e:i}function Ri(t,e){return(t.pendingLanes&~(t.suspendedLanes&~t.pingedLanes)&e)===0}function Xm(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 Ff(){var t=$s;return $s<<=1,($s&62914560)===0&&($s=4194304),t}function wc(t){for(var e=[],l=0;31>l;l++)e.push(t);return e}function Mi(t,e){t.pendingLanes|=e,e!==268435456&&(t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0)}function Zm(t,e,l,a,i,u){var f=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 h=t.entanglements,b=t.expirationTimes,R=t.hiddenUpdates;for(l=f&~l;0"u")return null;try{return t.activeElement||t.body}catch{return t.body}}var Im=/[\n"\\]/g;function Pe(t){return t.replace(Im,function(e){return"\\"+e.charCodeAt(0).toString(16)+" "})}function Lc(t,e,l,a,i,u,f,h){t.name="",f!=null&&typeof f!="function"&&typeof f!="symbol"&&typeof f!="boolean"?t.type=f:t.removeAttribute("type"),e!=null?f==="number"?(e===0&&t.value===""||t.value!=e)&&(t.value=""+Ie(e)):t.value!==""+Ie(e)&&(t.value=""+Ie(e)):f!=="submit"&&f!=="reset"||t.removeAttribute("value"),e!=null?Bc(t,f,Ie(e)):l!=null?Bc(t,f,Ie(l)):a!=null&&t.removeAttribute("value"),i==null&&u!=null&&(t.defaultChecked=!!u),i!=null&&(t.checked=i&&typeof i!="function"&&typeof i!="symbol"),h!=null&&typeof h!="function"&&typeof h!="symbol"&&typeof h!="boolean"?t.name=""+Ie(h):t.removeAttribute("name")}function r0(t,e,l,a,i,u,f,h){if(u!=null&&typeof u!="function"&&typeof u!="symbol"&&typeof u!="boolean"&&(t.type=u),e!=null||l!=null){if(!(u!=="submit"&&u!=="reset"||e!=null)){Uc(t);return}l=l!=null?""+Ie(l):"",e=e!=null?""+Ie(e):l,h||e===t.value||(t.value=e),t.defaultValue=e}a=a??i,a=typeof a!="function"&&typeof a!="symbol"&&!!a,t.checked=h?t.checked:!!a,t.defaultChecked=!!a,f!=null&&typeof f!="function"&&typeof f!="symbol"&&typeof f!="boolean"&&(t.name=f),Uc(t)}function Bc(t,e,l){e==="number"&&Ws(t.ownerDocument)===t||t.defaultValue===""+l||(t.defaultValue=""+l)}function Nn(t,e,l,a){if(t=t.options,e){e={};for(var i=0;i"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Yc=!1;if(Ol)try{var zi={};Object.defineProperty(zi,"passive",{get:function(){Yc=!0}}),window.addEventListener("test",zi,zi),window.removeEventListener("test",zi,zi)}catch{Yc=!1}var ia=null,kc=null,Ps=null;function y0(){if(Ps)return Ps;var t,e=kc,l=e.length,a,i="value"in ia?ia.value:ia.textContent,u=i.length;for(t=0;t=Li),S0=" ",j0=!1;function E0(t,e){switch(t){case"keyup":return Cv.indexOf(e.keyCode)!==-1;case"keydown":return e.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function N0(t){return t=t.detail,typeof t=="object"&&"data"in t?t.data:null}var Mn=!1;function Rv(t,e){switch(t){case"compositionend":return N0(e);case"keypress":return e.which!==32?null:(j0=!0,S0);case"textInput":return t=e.data,t===S0&&j0?null:t;default:return null}}function Mv(t,e){if(Mn)return t==="compositionend"||!Kc&&E0(t,e)?(t=y0(),Ps=kc=ia=null,Mn=!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=z0(l)}}function U0(t,e){return t&&e?t===e?!0:t&&t.nodeType===3?!1:e&&e.nodeType===3?U0(t,e.parentNode):"contains"in t?t.contains(e):t.compareDocumentPosition?!!(t.compareDocumentPosition(e)&16):!1:!1}function L0(t){t=t!=null&&t.ownerDocument!=null&&t.ownerDocument.defaultView!=null?t.ownerDocument.defaultView:window;for(var e=Ws(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=Ws(t.document)}return e}function Wc(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 Bv=Ol&&"documentMode"in document&&11>=document.documentMode,wn=null,Ic=null,Qi=null,Pc=!1;function B0(t,e,l){var a=l.window===l?l.document:l.nodeType===9?l:l.ownerDocument;Pc||wn==null||wn!==Ws(a)||(a=wn,"selectionStart"in a&&Wc(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}),Qi&&qi(Qi,a)||(Qi=a,a=Zu(Ic,"onSelect"),0>=f,i-=f,gl=1<<32-Be(e)+i|l<ct?(vt=F,F=null):vt=F.sibling;var bt=M(C,F,T[ct],D);if(bt===null){F===null&&(F=vt);break}t&&F&&bt.alternate===null&&e(C,F),S=u(bt,S,ct),_t===null?I=bt:_t.sibling=bt,_t=bt,F=vt}if(ct===T.length)return l(C,F),pt&&Dl(C,ct),I;if(F===null){for(;ctct?(vt=F,F=null):vt=F.sibling;var Ta=M(C,F,bt.value,D);if(Ta===null){F===null&&(F=vt);break}t&&F&&Ta.alternate===null&&e(C,F),S=u(Ta,S,ct),_t===null?I=Ta:_t.sibling=Ta,_t=Ta,F=vt}if(bt.done)return l(C,F),pt&&Dl(C,ct),I;if(F===null){for(;!bt.done;ct++,bt=T.next())bt=U(C,bt.value,D),bt!==null&&(S=u(bt,S,ct),_t===null?I=bt:_t.sibling=bt,_t=bt);return pt&&Dl(C,ct),I}for(F=a(F);!bt.done;ct++,bt=T.next())bt=A(F,C,ct,bt.value,D),bt!==null&&(t&&bt.alternate!==null&&F.delete(bt.key===null?ct:bt.key),S=u(bt,S,ct),_t===null?I=bt:_t.sibling=bt,_t=bt);return t&&F.forEach(function(ap){return e(C,ap)}),pt&&Dl(C,ct),I}function wt(C,S,T,D){if(typeof T=="object"&&T!==null&&T.type===B&&T.key===null&&(T=T.props.children),typeof T=="object"&&T!==null){switch(T.$$typeof){case L:t:{for(var I=T.key;S!==null;){if(S.key===I){if(I=T.type,I===B){if(S.tag===7){l(C,S.sibling),D=i(S,T.props.children),D.return=C,C=D;break t}}else if(S.elementType===I||typeof I=="object"&&I!==null&&I.$$typeof===lt&&Pa(I)===S.type){l(C,S.sibling),D=i(S,T.props),Zi(D,T),D.return=C,C=D;break t}l(C,S);break}else e(C,S);S=S.sibling}T.type===B?(D=Ka(T.props.children,C.mode,D,T.key),D.return=C,C=D):(D=ru(T.type,T.key,T.props,null,C.mode,D),Zi(D,T),D.return=C,C=D)}return f(C);case Q:t:{for(I=T.key;S!==null;){if(S.key===I)if(S.tag===4&&S.stateNode.containerInfo===T.containerInfo&&S.stateNode.implementation===T.implementation){l(C,S.sibling),D=i(S,T.children||[]),D.return=C,C=D;break t}else{l(C,S);break}else e(C,S);S=S.sibling}D=sr(T,C.mode,D),D.return=C,C=D}return f(C);case lt:return T=Pa(T),wt(C,S,T,D)}if(Lt(T))return K(C,S,T,D);if(Zt(T)){if(I=Zt(T),typeof I!="function")throw Error(r(150));return T=I.call(T),tt(C,S,T,D)}if(typeof T.then=="function")return wt(C,S,yu(T),D);if(T.$$typeof===Y)return wt(C,S,du(C,T),D);pu(C,T)}return typeof T=="string"&&T!==""||typeof T=="number"||typeof T=="bigint"?(T=""+T,S!==null&&S.tag===6?(l(C,S.sibling),D=i(S,T),D.return=C,C=D):(l(C,S),D=ir(T,C.mode,D),D.return=C,C=D),f(C)):l(C,S)}return function(C,S,T,D){try{Xi=0;var I=wt(C,S,T,D);return Gn=null,I}catch(F){if(F===Qn||F===mu)throw F;var _t=qe(29,F,null,C.mode);return _t.lanes=D,_t.return=C,_t}finally{}}}var en=sd(!0),ud=sd(!1),oa=!1;function gr(t){t.updateQueue={baseState:t.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function _r(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 fa(t){return{lane:t,tag:0,payload:null,callback:null,next:null}}function da(t,e,l){var a=t.updateQueue;if(a===null)return null;if(a=a.shared,(xt&2)!==0){var i=a.pending;return i===null?e.next=e:(e.next=i.next,i.next=e),a.pending=e,e=cu(t),V0(t,null,l),e}return uu(t,a,e,l),cu(t)}function $i(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,If(t,l)}}function br(t,e){var l=t.updateQueue,a=t.alternate;if(a!==null&&(a=a.updateQueue,l===a)){var i=null,u=null;if(l=l.firstBaseUpdate,l!==null){do{var f={lane:l.lane,tag:l.tag,payload:l.payload,callback:null,next:null};u===null?i=u=f:u=u.next=f,l=l.next}while(l!==null);u===null?i=u=e:u=u.next=e}else i=u=e;l={baseState:a.baseState,firstBaseUpdate:i,lastBaseUpdate:u,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 xr=!1;function Ki(){if(xr){var t=qn;if(t!==null)throw t}}function Ji(t,e,l,a){xr=!1;var i=t.updateQueue;oa=!1;var u=i.firstBaseUpdate,f=i.lastBaseUpdate,h=i.shared.pending;if(h!==null){i.shared.pending=null;var b=h,R=b.next;b.next=null,f===null?u=R:f.next=R,f=b;var O=t.alternate;O!==null&&(O=O.updateQueue,h=O.lastBaseUpdate,h!==f&&(h===null?O.firstBaseUpdate=R:h.next=R,O.lastBaseUpdate=b))}if(u!==null){var U=i.baseState;f=0,O=R=b=null,h=u;do{var M=h.lane&-536870913,A=M!==h.lane;if(A?(mt&M)===M:(a&M)===M){M!==0&&M===Hn&&(xr=!0),O!==null&&(O=O.next={lane:0,tag:h.tag,payload:h.payload,callback:null,next:null});t:{var K=t,tt=h;M=e;var wt=l;switch(tt.tag){case 1:if(K=tt.payload,typeof K=="function"){U=K.call(wt,U,M);break t}U=K;break t;case 3:K.flags=K.flags&-65537|128;case 0:if(K=tt.payload,M=typeof K=="function"?K.call(wt,U,M):K,M==null)break t;U=_({},U,M);break t;case 2:oa=!0}}M=h.callback,M!==null&&(t.flags|=64,A&&(t.flags|=8192),A=i.callbacks,A===null?i.callbacks=[M]:A.push(M))}else A={lane:M,tag:h.tag,payload:h.payload,callback:h.callback,next:null},O===null?(R=O=A,b=U):O=O.next=A,f|=M;if(h=h.next,h===null){if(h=i.shared.pending,h===null)break;A=h,h=A.next,A.next=null,i.lastBaseUpdate=A,i.shared.pending=null}}while(!0);O===null&&(b=U),i.baseState=b,i.firstBaseUpdate=R,i.lastBaseUpdate=O,u===null&&(i.shared.lanes=0),pa|=f,t.lanes=f,t.memoizedState=U}}function cd(t,e){if(typeof t!="function")throw Error(r(191,t));t.call(e)}function rd(t,e){var l=t.callbacks;if(l!==null)for(t.callbacks=null,t=0;tu?u:8;var f=z.T,h={};z.T=h,Qr(t,!1,e,l);try{var b=i(),R=z.S;if(R!==null&&R(h,b),b!==null&&typeof b=="object"&&typeof b.then=="function"){var O=Zv(b,a);Ii(t,e,O,Ve(t))}else Ii(t,e,a,Ve(t))}catch(U){Ii(t,e,{then:function(){},status:"rejected",reason:U},Ve())}finally{V.p=u,f!==null&&h.types!==null&&(f.types=h.types),z.T=f}}function Iv(){}function Hr(t,e,l,a){if(t.tag!==5)throw Error(r(476));var i=Gd(t).queue;Qd(t,i,e,at,l===null?Iv:function(){return Yd(t),l(a)})}function Gd(t){var e=t.memoizedState;if(e!==null)return e;e={memoizedState:at,baseState:at,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Hl,lastRenderedState:at},next:null};var l={};return e.next={memoizedState:l,baseState:l,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Hl,lastRenderedState:l},next:null},t.memoizedState=e,t=t.alternate,t!==null&&(t.memoizedState=e),e}function Yd(t){var e=Gd(t);e.next===null&&(e=t.alternate.memoizedState),Ii(t,e.next.queue,{},Ve())}function qr(){return oe(vs)}function kd(){return Jt().memoizedState}function Vd(){return Jt().memoizedState}function Pv(t){for(var e=t.return;e!==null;){switch(e.tag){case 24:case 3:var l=Ve();t=fa(l);var a=da(e,t,l);a!==null&&(we(a,e,l),$i(a,e,l)),e={cache:mr()},t.payload=e;return}e=e.return}}function ty(t,e,l){var a=Ve();l={lane:a,revertLane:0,gesture:null,action:l,hasEagerState:!1,eagerState:null,next:null},Tu(t)?Zd(e,l):(l=ar(t,e,l,a),l!==null&&(we(l,t,a),$d(l,e,a)))}function Xd(t,e,l){var a=Ve();Ii(t,e,l,a)}function Ii(t,e,l,a){var i={lane:a,revertLane:0,gesture:null,action:l,hasEagerState:!1,eagerState:null,next:null};if(Tu(t))Zd(e,i);else{var u=t.alternate;if(t.lanes===0&&(u===null||u.lanes===0)&&(u=e.lastRenderedReducer,u!==null))try{var f=e.lastRenderedState,h=u(f,l);if(i.hasEagerState=!0,i.eagerState=h,He(h,f))return uu(t,e,i,0),Dt===null&&su(),!1}catch{}finally{}if(l=ar(t,e,i,a),l!==null)return we(l,t,a),$d(l,e,a),!0}return!1}function Qr(t,e,l,a){if(a={lane:2,revertLane:_o(),gesture:null,action:a,hasEagerState:!1,eagerState:null,next:null},Tu(t)){if(e)throw Error(r(479))}else e=ar(t,l,a,2),e!==null&&we(e,t,2)}function Tu(t){var e=t.alternate;return t===ut||e!==null&&e===ut}function Zd(t,e){kn=bu=!0;var l=t.pending;l===null?e.next=e:(e.next=l.next,l.next=e),t.pending=e}function $d(t,e,l){if((l&4194048)!==0){var a=e.lanes;a&=t.pendingLanes,l|=a,e.lanes=l,If(t,l)}}var Pi={readContext:oe,use:ju,useCallback:Yt,useContext:Yt,useEffect:Yt,useImperativeHandle:Yt,useLayoutEffect:Yt,useInsertionEffect:Yt,useMemo:Yt,useReducer:Yt,useRef:Yt,useState:Yt,useDebugValue:Yt,useDeferredValue:Yt,useTransition:Yt,useSyncExternalStore:Yt,useId:Yt,useHostTransitionStatus:Yt,useFormState:Yt,useActionState:Yt,useOptimistic:Yt,useMemoCache:Yt,useCacheRefresh:Yt};Pi.useEffectEvent=Yt;var Kd={readContext:oe,use:ju,useCallback:function(t,e){return ge().memoizedState=[t,e===void 0?null:e],t},useContext:oe,useEffect:Ad,useImperativeHandle:function(t,e,l){l=l!=null?l.concat([t]):null,Nu(4194308,4,Ud.bind(null,e,t),l)},useLayoutEffect:function(t,e){return Nu(4194308,4,t,e)},useInsertionEffect:function(t,e){Nu(4,2,t,e)},useMemo:function(t,e){var l=ge();e=e===void 0?null:e;var a=t();if(ln){aa(!0);try{t()}finally{aa(!1)}}return l.memoizedState=[a,e],a},useReducer:function(t,e,l){var a=ge();if(l!==void 0){var i=l(e);if(ln){aa(!0);try{l(e)}finally{aa(!1)}}}else i=e;return a.memoizedState=a.baseState=i,t={pending:null,lanes:0,dispatch:null,lastRenderedReducer:t,lastRenderedState:i},a.queue=t,t=t.dispatch=ty.bind(null,ut,t),[a.memoizedState,t]},useRef:function(t){var e=ge();return t={current:t},e.memoizedState=t},useState:function(t){t=zr(t);var e=t.queue,l=Xd.bind(null,ut,e);return e.dispatch=l,[t.memoizedState,l]},useDebugValue:Lr,useDeferredValue:function(t,e){var l=ge();return Br(l,t,e)},useTransition:function(){var t=zr(!1);return t=Qd.bind(null,ut,t.queue,!0,!1),ge().memoizedState=t,[!1,t]},useSyncExternalStore:function(t,e,l){var a=ut,i=ge();if(pt){if(l===void 0)throw Error(r(407));l=l()}else{if(l=e(),Dt===null)throw Error(r(349));(mt&127)!==0||vd(a,e,l)}i.memoizedState=l;var u={value:l,getSnapshot:e};return i.queue=u,Ad(pd.bind(null,a,u,t),[t]),a.flags|=2048,Xn(9,{destroy:void 0},yd.bind(null,a,u,l,e),null),l},useId:function(){var t=ge(),e=Dt.identifierPrefix;if(pt){var l=_l,a=gl;l=(a&~(1<<32-Be(a)-1)).toString(32)+l,e="_"+e+"R_"+l,l=xu++,0<\/script>",u=u.removeChild(u.firstChild);break;case"select":u=typeof a.is=="string"?f.createElement("select",{is:a.is}):f.createElement("select"),a.multiple?u.multiple=!0:a.size&&(u.size=a.size);break;default:u=typeof a.is=="string"?f.createElement(i,{is:a.is}):f.createElement(i)}}u[ce]=e,u[Ee]=a;t:for(f=e.child;f!==null;){if(f.tag===5||f.tag===6)u.appendChild(f.stateNode);else if(f.tag!==4&&f.tag!==27&&f.child!==null){f.child.return=f,f=f.child;continue}if(f===e)break t;for(;f.sibling===null;){if(f.return===null||f.return===e)break t;f=f.return}f.sibling.return=f.return,f=f.sibling}e.stateNode=u;t:switch(de(u,i,a),i){case"button":case"input":case"select":case"textarea":a=!!a.autoFocus;break t;case"img":a=!0;break t;default:a=!1}a&&Ql(e)}}return Ht(e),to(e,e.type,t===null?null:t.memoizedProps,e.pendingProps,l),null;case 6:if(t&&e.stateNode!=null)t.memoizedProps!==a&&Ql(e);else{if(typeof a!="string"&&e.stateNode===null)throw Error(r(166));if(t=ft.current,Ln(e)){if(t=e.stateNode,l=e.memoizedProps,a=null,i=re,i!==null)switch(i.tag){case 27:case 5:a=i.memoizedProps}t[ce]=e,t=!!(t.nodeValue===l||a!==null&&a.suppressHydrationWarning===!0||hh(t.nodeValue,l)),t||ca(e,!0)}else t=$u(t).createTextNode(a),t[ce]=e,e.stateNode=t}return Ht(e),null;case 31:if(l=e.memoizedState,t===null||t.memoizedState!==null){if(a=Ln(e),l!==null){if(t===null){if(!a)throw Error(r(318));if(t=e.memoizedState,t=t!==null?t.dehydrated:null,!t)throw Error(r(557));t[ce]=e}else Ja(),(e.flags&128)===0&&(e.memoizedState=null),e.flags|=4;Ht(e),t=!1}else l=or(),t!==null&&t.memoizedState!==null&&(t.memoizedState.hydrationErrors=l),t=!0;if(!t)return e.flags&256?(Ge(e),e):(Ge(e),null);if((e.flags&128)!==0)throw Error(r(558))}return Ht(e),null;case 13:if(a=e.memoizedState,t===null||t.memoizedState!==null&&t.memoizedState.dehydrated!==null){if(i=Ln(e),a!==null&&a.dehydrated!==null){if(t===null){if(!i)throw Error(r(318));if(i=e.memoizedState,i=i!==null?i.dehydrated:null,!i)throw Error(r(317));i[ce]=e}else Ja(),(e.flags&128)===0&&(e.memoizedState=null),e.flags|=4;Ht(e),i=!1}else i=or(),t!==null&&t.memoizedState!==null&&(t.memoizedState.hydrationErrors=i),i=!0;if(!i)return e.flags&256?(Ge(e),e):(Ge(e),null)}return Ge(e),(e.flags&128)!==0?(e.lanes=l,e):(l=a!==null,t=t!==null&&t.memoizedState!==null,l&&(a=e.child,i=null,a.alternate!==null&&a.alternate.memoizedState!==null&&a.alternate.memoizedState.cachePool!==null&&(i=a.alternate.memoizedState.cachePool.pool),u=null,a.memoizedState!==null&&a.memoizedState.cachePool!==null&&(u=a.memoizedState.cachePool.pool),u!==i&&(a.flags|=2048)),l!==t&&l&&(e.child.flags|=8192),Ou(e,e.updateQueue),Ht(e),null);case 4:return $t(),t===null&&jo(e.stateNode.containerInfo),Ht(e),null;case 10:return Ll(e.type),Ht(e),null;case 19:if(H(Kt),a=e.memoizedState,a===null)return Ht(e),null;if(i=(e.flags&128)!==0,u=a.rendering,u===null)if(i)es(a,!1);else{if(kt!==0||t!==null&&(t.flags&128)!==0)for(t=e.child;t!==null;){if(u=_u(t),u!==null){for(e.flags|=128,es(a,!1),t=u.updateQueue,e.updateQueue=t,Ou(e,t),e.subtreeFlags=0,t=l,l=e.child;l!==null;)X0(l,t),l=l.sibling;return Z(Kt,Kt.current&1|2),pt&&Dl(e,a.treeForkCount),e.child}t=t.sibling}a.tail!==null&&Ue()>Bu&&(e.flags|=128,i=!0,es(a,!1),e.lanes=4194304)}else{if(!i)if(t=_u(u),t!==null){if(e.flags|=128,i=!0,t=t.updateQueue,e.updateQueue=t,Ou(e,t),es(a,!0),a.tail===null&&a.tailMode==="hidden"&&!u.alternate&&!pt)return Ht(e),null}else 2*Ue()-a.renderingStartTime>Bu&&l!==536870912&&(e.flags|=128,i=!0,es(a,!1),e.lanes=4194304);a.isBackwards?(u.sibling=e.child,e.child=u):(t=a.last,t!==null?t.sibling=u:e.child=u,a.last=u)}return a.tail!==null?(t=a.tail,a.rendering=t,a.tail=t.sibling,a.renderingStartTime=Ue(),t.sibling=null,l=Kt.current,Z(Kt,i?l&1|2:l&1),pt&&Dl(e,a.treeForkCount),t):(Ht(e),null);case 22:case 23:return Ge(e),jr(),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&&(Ht(e),e.subtreeFlags&6&&(e.flags|=8192)):Ht(e),l=e.updateQueue,l!==null&&Ou(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&&H(Ia),null;case 24:return l=null,t!==null&&(l=t.memoizedState.cache),e.memoizedState.cache!==l&&(e.flags|=2048),Ll(Wt),Ht(e),null;case 25:return null;case 30:return null}throw Error(r(156,e.tag))}function iy(t,e){switch(cr(e),e.tag){case 1:return t=e.flags,t&65536?(e.flags=t&-65537|128,e):null;case 3:return Ll(Wt),$t(),t=e.flags,(t&65536)!==0&&(t&128)===0?(e.flags=t&-65537|128,e):null;case 26:case 27:case 5:return ks(e),null;case 31:if(e.memoizedState!==null){if(Ge(e),e.alternate===null)throw Error(r(340));Ja()}return t=e.flags,t&65536?(e.flags=t&-65537|128,e):null;case 13:if(Ge(e),t=e.memoizedState,t!==null&&t.dehydrated!==null){if(e.alternate===null)throw Error(r(340));Ja()}return t=e.flags,t&65536?(e.flags=t&-65537|128,e):null;case 19:return H(Kt),null;case 4:return $t(),null;case 10:return Ll(e.type),null;case 22:case 23:return Ge(e),jr(),t!==null&&H(Ia),t=e.flags,t&65536?(e.flags=t&-65537|128,e):null;case 24:return Ll(Wt),null;case 25:return null;default:return null}}function g2(t,e){switch(cr(e),e.tag){case 3:Ll(Wt),$t();break;case 26:case 27:case 5:ks(e);break;case 4:$t();break;case 31:e.memoizedState!==null&&Ge(e);break;case 13:Ge(e);break;case 19:H(Kt);break;case 10:Ll(e.type);break;case 22:case 23:Ge(e),jr(),t!==null&&H(Ia);break;case 24:Ll(Wt)}}function ls(t,e){try{var l=e.updateQueue,a=l!==null?l.lastEffect:null;if(a!==null){var i=a.next;l=i;do{if((l.tag&t)===t){a=void 0;var u=l.create,f=l.inst;a=u(),f.destroy=a}l=l.next}while(l!==i)}}catch(h){Nt(e,e.return,h)}}function va(t,e,l){try{var a=e.updateQueue,i=a!==null?a.lastEffect:null;if(i!==null){var u=i.next;a=u;do{if((a.tag&t)===t){var f=a.inst,h=f.destroy;if(h!==void 0){f.destroy=void 0,i=e;var b=l,R=h;try{R()}catch(O){Nt(i,b,O)}}}a=a.next}while(a!==u)}}catch(O){Nt(e,e.return,O)}}function _2(t){var e=t.updateQueue;if(e!==null){var l=t.stateNode;try{rd(e,l)}catch(a){Nt(t,t.return,a)}}}function b2(t,e,l){l.props=an(t.type,t.memoizedProps),l.state=t.memoizedState;try{l.componentWillUnmount()}catch(a){Nt(t,e,a)}}function as(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(i){Nt(t,e,i)}}function bl(t,e){var l=t.ref,a=t.refCleanup;if(l!==null)if(typeof a=="function")try{a()}catch(i){Nt(t,e,i)}finally{t.refCleanup=null,t=t.alternate,t!=null&&(t.refCleanup=null)}else if(typeof l=="function")try{l(null)}catch(i){Nt(t,e,i)}else l.current=null}function x2(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(i){Nt(t,t.return,i)}}function eo(t,e,l){try{var a=t.stateNode;Ty(a,t.type,l,e),a[Ee]=e}catch(i){Nt(t,t.return,i)}}function S2(t){return t.tag===5||t.tag===3||t.tag===26||t.tag===27&&Sa(t.type)||t.tag===4}function lo(t){t:for(;;){for(;t.sibling===null;){if(t.return===null||S2(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&&Sa(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 ao(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=Al));else if(a!==4&&(a===27&&Sa(t.type)&&(l=t.stateNode,e=null),t=t.child,t!==null))for(ao(t,e,l),t=t.sibling;t!==null;)ao(t,e,l),t=t.sibling}function zu(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&&Sa(t.type)&&(l=t.stateNode),t=t.child,t!==null))for(zu(t,e,l),t=t.sibling;t!==null;)zu(t,e,l),t=t.sibling}function j2(t){var e=t.stateNode,l=t.memoizedProps;try{for(var a=t.type,i=e.attributes;i.length;)e.removeAttributeNode(i[0]);de(e,a,l),e[ce]=t,e[Ee]=l}catch(u){Nt(t,t.return,u)}}var Gl=!1,te=!1,no=!1,E2=typeof WeakSet=="function"?WeakSet:Set,ie=null;function sy(t,e){if(t=t.containerInfo,Co=tc,t=L0(t),Wc(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 i=a.anchorOffset,u=a.focusNode;a=a.focusOffset;try{l.nodeType,u.nodeType}catch{l=null;break t}var f=0,h=-1,b=-1,R=0,O=0,U=t,M=null;e:for(;;){for(var A;U!==l||i!==0&&U.nodeType!==3||(h=f+i),U!==u||a!==0&&U.nodeType!==3||(b=f+a),U.nodeType===3&&(f+=U.nodeValue.length),(A=U.firstChild)!==null;)M=U,U=A;for(;;){if(U===t)break e;if(M===l&&++R===i&&(h=f),M===u&&++O===a&&(b=f),(A=U.nextSibling)!==null)break;U=M,M=U.parentNode}U=A}l=h===-1||b===-1?null:{start:h,end:b}}else l=null}l=l||{start:0,end:0}}else l=null;for(To={focusedElem:t,selectionRange:l},tc=!1,ie=e;ie!==null;)if(e=ie,t=e.child,(e.subtreeFlags&1028)!==0&&t!==null)t.return=e,ie=t;else for(;ie!==null;){switch(e=ie,u=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"))),de(u,a,l),u[ce]=t,ne(u),a=u;break t;case"link":var f=wh("link","href",i).get(a+(l.href||""));if(f){for(var h=0;hwt&&(f=wt,wt=tt,tt=f);var C=D0(h,tt),S=D0(h,wt);if(C&&S&&(A.rangeCount!==1||A.anchorNode!==C.node||A.anchorOffset!==C.offset||A.focusNode!==S.node||A.focusOffset!==S.offset)){var T=U.createRange();T.setStart(C.node,C.offset),A.removeAllRanges(),tt>wt?(A.addRange(T),A.extend(S.node,S.offset)):(T.setEnd(S.node,S.offset),A.addRange(T))}}}}for(U=[],A=h;A=A.parentNode;)A.nodeType===1&&U.push({element:A,left:A.scrollLeft,top:A.scrollTop});for(typeof h.focus=="function"&&h.focus(),h=0;hl?32:l,z.T=null,l=fo,fo=null;var u=_a,f=Zl;if(ee=0,Fn=_a=null,Zl=0,(xt&6)!==0)throw Error(r(331));var h=xt;if(xt|=4,U2(u.current),O2(u,u.current,f,l),xt=h,rs(0,!1),Le&&typeof Le.onPostCommitFiberRoot=="function")try{Le.onPostCommitFiberRoot(Ti,u)}catch{}return!0}finally{V.p=i,z.T=a,P2(t,e)}}function eh(t,e,l){e=el(l,e),e=Vr(t.stateNode,e,2),t=da(t,e,2),t!==null&&(Mi(t,2),xl(t))}function Nt(t,e,l){if(t.tag===3)eh(t,t,l);else for(;e!==null;){if(e.tag===3){eh(e,t,l);break}else if(e.tag===1){var a=e.stateNode;if(typeof e.type.getDerivedStateFromError=="function"||typeof a.componentDidCatch=="function"&&(ga===null||!ga.has(a))){t=el(l,t),l=l2(2),a=da(e,l,2),a!==null&&(a2(l,a,e,t),Mi(a,2),xl(a));break}}e=e.return}}function yo(t,e,l){var a=t.pingCache;if(a===null){a=t.pingCache=new ry;var i=new Set;a.set(e,i)}else i=a.get(e),i===void 0&&(i=new Set,a.set(e,i));i.has(l)||(uo=!0,i.add(l),t=my.bind(null,t,e,l),e.then(t,t))}function my(t,e,l){var a=t.pingCache;a!==null&&a.delete(e),t.pingedLanes|=t.suspendedLanes&l,t.warmLanes&=~l,Dt===t&&(mt&l)===l&&(kt===4||kt===3&&(mt&62914560)===mt&&300>Ue()-Lu?(xt&2)===0&&Wn(t,0):co|=l,Jn===mt&&(Jn=0)),xl(t)}function lh(t,e){e===0&&(e=Ff()),t=$a(t,e),t!==null&&(Mi(t,e),xl(t))}function vy(t){var e=t.memoizedState,l=0;e!==null&&(l=e.retryLane),lh(t,l)}function yy(t,e){var l=0;switch(t.tag){case 31:case 13:var a=t.stateNode,i=t.memoizedState;i!==null&&(l=i.retryLane);break;case 19:a=t.stateNode;break;case 22:a=t.stateNode._retryCache;break;default:throw Error(r(314))}a!==null&&a.delete(e),lh(t,l)}function py(t,e){return Rc(t,e)}var ku=null,Pn=null,po=!1,Vu=!1,go=!1,xa=0;function xl(t){t!==Pn&&t.next===null&&(Pn===null?ku=Pn=t:Pn=Pn.next=t),Vu=!0,po||(po=!0,_y())}function rs(t,e){if(!go&&Vu){go=!0;do for(var l=!1,a=ku;a!==null;){if(t!==0){var i=a.pendingLanes;if(i===0)var u=0;else{var f=a.suspendedLanes,h=a.pingedLanes;u=(1<<31-Be(42|t)+1)-1,u&=i&~(f&~h),u=u&201326741?u&201326741|1:u?u|2:0}u!==0&&(l=!0,sh(a,u))}else u=mt,u=Ks(a,a===Dt?u:0,a.cancelPendingCommit!==null||a.timeoutHandle!==-1),(u&3)===0||Ri(a,u)||(l=!0,sh(a,u));a=a.next}while(l);go=!1}}function gy(){ah()}function ah(){Vu=po=!1;var t=0;xa!==0&&My()&&(t=xa);for(var e=Ue(),l=null,a=ku;a!==null;){var i=a.next,u=nh(a,e);u===0?(a.next=null,l===null?ku=i:l.next=i,i===null&&(Pn=l)):(l=a,(t!==0||(u&3)!==0)&&(Vu=!0)),a=i}ee!==0&&ee!==5||rs(t),xa!==0&&(xa=0)}function nh(t,e){for(var l=t.suspendedLanes,a=t.pingedLanes,i=t.expirationTimes,u=t.pendingLanes&-62914561;0h)break;var O=b.transferSize,U=b.initiatorType;O&&mh(U)&&(b=b.responseEnd,f+=O*(b"u"?null:document;function Ch(t,e,l){var a=ti;if(a&&typeof e=="string"&&e){var i=Pe(e);i='link[rel="'+t+'"][href="'+i+'"]',typeof l=="string"&&(i+='[crossorigin="'+l+'"]'),Nh.has(i)||(Nh.add(i),t={rel:t,crossOrigin:l,href:e},a.querySelector(i)===null&&(e=a.createElement("link"),de(e,"link",t),ne(e),a.head.appendChild(e)))}}function Hy(t){$l.D(t),Ch("dns-prefetch",t,null)}function qy(t,e){$l.C(t,e),Ch("preconnect",t,e)}function Qy(t,e,l){$l.L(t,e,l);var a=ti;if(a&&t&&e){var i='link[rel="preload"][as="'+Pe(e)+'"]';e==="image"&&l&&l.imageSrcSet?(i+='[imagesrcset="'+Pe(l.imageSrcSet)+'"]',typeof l.imageSizes=="string"&&(i+='[imagesizes="'+Pe(l.imageSizes)+'"]')):i+='[href="'+Pe(t)+'"]';var u=i;switch(e){case"style":u=ei(t);break;case"script":u=li(t)}ul.has(u)||(t=_({rel:"preload",href:e==="image"&&l&&l.imageSrcSet?void 0:t,as:e},l),ul.set(u,t),a.querySelector(i)!==null||e==="style"&&a.querySelector(hs(u))||e==="script"&&a.querySelector(ms(u))||(e=a.createElement("link"),de(e,"link",t),ne(e),a.head.appendChild(e)))}}function Gy(t,e){$l.m(t,e);var l=ti;if(l&&t){var a=e&&typeof e.as=="string"?e.as:"script",i='link[rel="modulepreload"][as="'+Pe(a)+'"][href="'+Pe(t)+'"]',u=i;switch(a){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":u=li(t)}if(!ul.has(u)&&(t=_({rel:"modulepreload",href:t},e),ul.set(u,t),l.querySelector(i)===null)){switch(a){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(l.querySelector(ms(u)))return}a=l.createElement("link"),de(a,"link",t),ne(a),l.head.appendChild(a)}}}function Yy(t,e,l){$l.S(t,e,l);var a=ti;if(a&&t){var i=jn(a).hoistableStyles,u=ei(t);e=e||"default";var f=i.get(u);if(!f){var h={loading:0,preload:null};if(f=a.querySelector(hs(u)))h.loading=5;else{t=_({rel:"stylesheet",href:t,"data-precedence":e},l),(l=ul.get(u))&&Do(t,l);var b=f=a.createElement("link");ne(b),de(b,"link",t),b._p=new Promise(function(R,O){b.onload=R,b.onerror=O}),b.addEventListener("load",function(){h.loading|=1}),b.addEventListener("error",function(){h.loading|=2}),h.loading|=4,Ju(f,e,a)}f={type:"stylesheet",instance:f,count:1,state:h},i.set(u,f)}}}function ky(t,e){$l.X(t,e);var l=ti;if(l&&t){var a=jn(l).hoistableScripts,i=li(t),u=a.get(i);u||(u=l.querySelector(ms(i)),u||(t=_({src:t,async:!0},e),(e=ul.get(i))&&Uo(t,e),u=l.createElement("script"),ne(u),de(u,"link",t),l.head.appendChild(u)),u={type:"script",instance:u,count:1,state:null},a.set(i,u))}}function Vy(t,e){$l.M(t,e);var l=ti;if(l&&t){var a=jn(l).hoistableScripts,i=li(t),u=a.get(i);u||(u=l.querySelector(ms(i)),u||(t=_({src:t,async:!0,type:"module"},e),(e=ul.get(i))&&Uo(t,e),u=l.createElement("script"),ne(u),de(u,"link",t),l.head.appendChild(u)),u={type:"script",instance:u,count:1,state:null},a.set(i,u))}}function Th(t,e,l,a){var i=(i=ft.current)?Ku(i):null;if(!i)throw Error(r(446));switch(t){case"meta":case"title":return null;case"style":return typeof l.precedence=="string"&&typeof l.href=="string"?(e=ei(l.href),l=jn(i).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=ei(l.href);var u=jn(i).hoistableStyles,f=u.get(t);if(f||(i=i.ownerDocument||i,f={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},u.set(t,f),(u=i.querySelector(hs(t)))&&!u._p&&(f.instance=u,f.state.loading=5),ul.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},ul.set(t,l),u||Xy(i,t,l,f.state))),e&&a===null)throw Error(r(528,""));return f}if(e&&a!==null)throw Error(r(529,""));return null;case"script":return e=l.async,l=l.src,typeof l=="string"&&e&&typeof e!="function"&&typeof e!="symbol"?(e=li(l),l=jn(i).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(r(444,t))}}function ei(t){return'href="'+Pe(t)+'"'}function hs(t){return'link[rel="stylesheet"]['+t+"]"}function Rh(t){return _({},t,{"data-precedence":t.precedence,precedence:null})}function Xy(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}),de(e,"link",l),ne(e),t.head.appendChild(e))}function li(t){return'[src="'+Pe(t)+'"]'}function ms(t){return"script[async]"+t}function Mh(t,e,l){if(e.count++,e.instance===null)switch(e.type){case"style":var a=t.querySelector('style[data-href~="'+Pe(l.href)+'"]');if(a)return e.instance=a,ne(a),a;var i=_({},l,{"data-href":l.href,"data-precedence":l.precedence,href:null,precedence:null});return a=(t.ownerDocument||t).createElement("style"),ne(a),de(a,"style",i),Ju(a,l.precedence,t),e.instance=a;case"stylesheet":i=ei(l.href);var u=t.querySelector(hs(i));if(u)return e.state.loading|=4,e.instance=u,ne(u),u;a=Rh(l),(i=ul.get(i))&&Do(a,i),u=(t.ownerDocument||t).createElement("link"),ne(u);var f=u;return f._p=new Promise(function(h,b){f.onload=h,f.onerror=b}),de(u,"link",a),e.state.loading|=4,Ju(u,l.precedence,t),e.instance=u;case"script":return u=li(l.src),(i=t.querySelector(ms(u)))?(e.instance=i,ne(i),i):(a=l,(i=ul.get(u))&&(a=_({},l),Uo(a,i)),t=t.ownerDocument||t,i=t.createElement("script"),ne(i),de(i,"link",a),t.head.appendChild(i),e.instance=i);case"void":return null;default:throw Error(r(443,e.type))}else e.type==="stylesheet"&&(e.state.loading&4)===0&&(a=e.instance,e.state.loading|=4,Ju(a,l.precedence,t));return e.instance}function Ju(t,e,l){for(var a=l.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),i=a.length?a[a.length-1]:null,u=i,f=0;f title"):null)}function Zy(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 Oh(t){return!(t.type==="stylesheet"&&(t.state.loading&3)===0)}function $y(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 i=ei(a.href),u=e.querySelector(hs(i));if(u){e=u._p,e!==null&&typeof e=="object"&&typeof e.then=="function"&&(t.count++,t=Wu.bind(t),e.then(t,t)),l.state.loading|=4,l.instance=u,ne(u);return}u=e.ownerDocument||e,a=Rh(a),(i=ul.get(i))&&Do(a,i),u=u.createElement("link"),ne(u);var f=u;f._p=new Promise(function(h,b){f.onload=h,f.onerror=b}),de(u,"link",a),l.instance=u}t.stylesheets===null&&(t.stylesheets=new Map),t.stylesheets.set(l,e),(e=l.state.preload)&&(l.state.loading&3)===0&&(t.count++,l=Wu.bind(t),e.addEventListener("load",l),e.addEventListener("error",l))}}var Lo=0;function Ky(t,e){return t.stylesheets&&t.count===0&&Pu(t,t.stylesheets),0Lo?50:800)+e);return t.unsuspend=l,function(){t.unsuspend=null,clearTimeout(a),clearTimeout(i)}}:null}function Wu(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)Pu(this,this.stylesheets);else if(this.unsuspend){var t=this.unsuspend;this.unsuspend=null,t()}}}var Iu=null;function Pu(t,e){t.stylesheets=null,t.unsuspend!==null&&(t.count++,Iu=new Map,e.forEach(Jy,t),Iu=null,Wu.call(t))}function Jy(t,e){if(!(e.state.loading&4)){var l=Iu.get(t);if(l)var a=l.get(null);else{l=new Map,Iu.set(t,l);for(var i=t.querySelectorAll("link[data-precedence],style[data-precedence]"),u=0;u"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(s){console.error(s)}}return n(),Zo.exports=fp(),Zo.exports}var hp=dp();/** + * react-router v7.14.2 + * + * Copyright (c) Remix Software Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE.md file in the root directory of this source tree. + * + * @license MIT + */var a1="popstate";function n1(n){return typeof n=="object"&&n!=null&&"pathname"in n&&"search"in n&&"hash"in n&&"state"in n&&"key"in n}function mp(n={}){function s(r,d){var y;let m=(y=d.state)==null?void 0:y.masked,{pathname:v,search:p,hash:g}=m||r.location;return uf("",{pathname:v,search:p,hash:g},d.state&&d.state.usr||null,d.state&&d.state.key||"default",m?{pathname:r.location.pathname,search:r.location.search,hash:r.location.hash}:void 0)}function c(r,d){return typeof d=="string"?d:Ms(d)}return yp(s,c,null,n)}function Qt(n,s){if(n===!1||n===null||typeof n>"u")throw new Error(s)}function yl(n,s){if(!n){typeof console<"u"&&console.warn(s);try{throw new Error(s)}catch{}}}function vp(){return Math.random().toString(36).substring(2,10)}function i1(n,s){return{usr:n.state,key:n.key,idx:s,masked:n.unstable_mask?{pathname:n.pathname,search:n.search,hash:n.hash}:void 0}}function uf(n,s,c=null,r,d){return{pathname:typeof n=="string"?n:n.pathname,search:"",hash:"",...typeof s=="string"?bi(s):s,state:c,key:s&&s.key||r||vp(),unstable_mask:d}}function Ms({pathname:n="/",search:s="",hash:c=""}){return s&&s!=="?"&&(n+=s.charAt(0)==="?"?s:"?"+s),c&&c!=="#"&&(n+=c.charAt(0)==="#"?c:"#"+c),n}function bi(n){let s={};if(n){let c=n.indexOf("#");c>=0&&(s.hash=n.substring(c),n=n.substring(0,c));let r=n.indexOf("?");r>=0&&(s.search=n.substring(r),n=n.substring(0,r)),n&&(s.pathname=n)}return s}function yp(n,s,c,r={}){let{window:d=document.defaultView,v5Compat:m=!1}=r,v=d.history,p="POP",g=null,y=N();y==null&&(y=0,v.replaceState({...v.state,idx:y},""));function N(){return(v.state||{idx:null}).idx}function _(){p="POP";let q=N(),G=q==null?null:q-y;y=q,g&&g({action:p,location:B.location,delta:G})}function w(q,G){p="PUSH";let $=n1(q)?q:uf(B.location,q,G);y=N()+1;let Y=i1($,y),k=B.createHref($.unstable_mask||$);try{v.pushState(Y,"",k)}catch(et){if(et instanceof DOMException&&et.name==="DataCloneError")throw et;d.location.assign(k)}m&&g&&g({action:p,location:B.location,delta:1})}function L(q,G){p="REPLACE";let $=n1(q)?q:uf(B.location,q,G);y=N();let Y=i1($,y),k=B.createHref($.unstable_mask||$);v.replaceState(Y,"",k),m&&g&&g({action:p,location:B.location,delta:0})}function Q(q){return pp(q)}let B={get action(){return p},get location(){return n(d,v)},listen(q){if(g)throw new Error("A history only accepts one active listener");return d.addEventListener(a1,_),g=q,()=>{d.removeEventListener(a1,_),g=null}},createHref(q){return s(d,q)},createURL:Q,encodeLocation(q){let G=Q(q);return{pathname:G.pathname,search:G.search,hash:G.hash}},push:w,replace:L,go(q){return v.go(q)}};return B}function pp(n,s=!1){let c="http://localhost";typeof window<"u"&&(c=window.location.origin!=="null"?window.location.origin:window.location.href),Qt(c,"No window.location.(origin|href) available to create URL");let r=typeof n=="string"?n:Ms(n);return r=r.replace(/ $/,"%20"),!s&&r.startsWith("//")&&(r=c+r),new URL(r,c)}function $1(n,s,c="/"){return gp(n,s,c,!1)}function gp(n,s,c,r){let d=typeof s=="string"?bi(s):s,m=la(d.pathname||"/",c);if(m==null)return null;let v=K1(n);_p(v);let p=null;for(let g=0;p==null&&g{let N={relativePath:y===void 0?v.path||"":y,caseSensitive:v.caseSensitive===!0,childrenIndex:p,route:v};if(N.relativePath.startsWith("/")){if(!N.relativePath.startsWith(r)&&g)return;Qt(N.relativePath.startsWith(r),`Absolute route path "${N.relativePath}" nested under path "${r}" is not valid. An absolute child route path must start with the combined path of all its parent routes.`),N.relativePath=N.relativePath.slice(r.length)}let _=vl([r,N.relativePath]),w=c.concat(N);v.children&&v.children.length>0&&(Qt(v.index!==!0,`Index routes must not have child routes. Please remove all child routes from route path "${_}".`),K1(v.children,s,w,_,g)),!(v.path==null&&!v.index)&&s.push({path:_,score:Cp(_,v.index),routesMeta:w})};return n.forEach((v,p)=>{var g;if(v.path===""||!((g=v.path)!=null&&g.includes("?")))m(v,p);else for(let y of J1(v.path))m(v,p,!0,y)}),s}function J1(n){let s=n.split("/");if(s.length===0)return[];let[c,...r]=s,d=c.endsWith("?"),m=c.replace(/\?$/,"");if(r.length===0)return d?[m,""]:[m];let v=J1(r.join("/")),p=[];return p.push(...v.map(g=>g===""?m:[m,g].join("/"))),d&&p.push(...v),p.map(g=>n.startsWith("/")&&g===""?"/":g)}function _p(n){n.sort((s,c)=>s.score!==c.score?c.score-s.score:Tp(s.routesMeta.map(r=>r.childrenIndex),c.routesMeta.map(r=>r.childrenIndex)))}var bp=/^:[\w-]+$/,xp=3,Sp=2,jp=1,Ep=10,Np=-2,s1=n=>n==="*";function Cp(n,s){let c=n.split("/"),r=c.length;return c.some(s1)&&(r+=Np),s&&(r+=Sp),c.filter(d=>!s1(d)).reduce((d,m)=>d+(bp.test(m)?xp:m===""?jp:Ep),r)}function Tp(n,s){return n.length===s.length&&n.slice(0,-1).every((r,d)=>r===s[d])?n[n.length-1]-s[s.length-1]:0}function Rp(n,s,c=!1){let{routesMeta:r}=n,d={},m="/",v=[];for(let p=0;p{if(N==="*"){let Q=p[w]||"";v=m.slice(0,m.length-Q.length).replace(/(.)\/+$/,"$1")}const L=p[w];return _&&!L?y[N]=void 0:y[N]=(L||"").replace(/%2F/g,"/"),y},{}),pathname:m,pathnameBase:v,pattern:n}}function Mp(n,s=!1,c=!0){yl(n==="*"||!n.endsWith("*")||n.endsWith("/*"),`Route path "${n}" will be treated as if it were "${n.replace(/\*$/,"/*")}" because the \`*\` character must always follow a \`/\` in the pattern. To get rid of this warning, please change the route path to "${n.replace(/\*$/,"/*")}".`);let r=[],d="^"+n.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(v,p,g,y,N)=>{if(r.push({paramName:p,isOptional:g!=null}),g){let _=N.charAt(y+v.length);return _&&_!=="/"?"/([^\\/]*)":"(?:/([^\\/]*))?"}return"/([^\\/]+)"}).replace(/\/([\w-]+)\?(\/|$)/g,"(/$1)?$2");return n.endsWith("*")?(r.push({paramName:"*"}),d+=n==="*"||n==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):c?d+="\\/*$":n!==""&&n!=="/"&&(d+="(?:(?=\\/|$))"),[new RegExp(d,s?void 0:"i"),r]}function wp(n){try{return n.split("/").map(s=>decodeURIComponent(s).replace(/\//g,"%2F")).join("/")}catch(s){return yl(!1,`The URL path "${n}" could not be decoded because it is a malformed URL segment. This is probably due to a bad percent encoding (${s}).`),n}}function la(n,s){if(s==="/")return n;if(!n.toLowerCase().startsWith(s.toLowerCase()))return null;let c=s.endsWith("/")?s.length-1:s.length,r=n.charAt(c);return r&&r!=="/"?null:n.slice(c)||"/"}var Ap=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i;function Op(n,s="/"){let{pathname:c,search:r="",hash:d=""}=typeof n=="string"?bi(n):n,m;return c?(c=F1(c),c.startsWith("/")?m=u1(c.substring(1),"/"):m=u1(c,s)):m=s,{pathname:m,search:Up(r),hash:Lp(d)}}function u1(n,s){let c=yc(s).split("/");return n.split("/").forEach(d=>{d===".."?c.length>1&&c.pop():d!=="."&&c.push(d)}),c.length>1?c.join("/"):"/"}function Fo(n,s,c,r){return`Cannot include a '${n}' character in a manually specified \`to.${s}\` field [${JSON.stringify(r)}]. Please separate it out to the \`to.${c}\` field. Alternatively you may provide the full path as a string in and the router will parse it for you.`}function zp(n){return n.filter((s,c)=>c===0||s.route.path&&s.route.path.length>0)}function Rf(n){let s=zp(n);return s.map((c,r)=>r===s.length-1?c.pathname:c.pathnameBase)}function _c(n,s,c,r=!1){let d;typeof n=="string"?d=bi(n):(d={...n},Qt(!d.pathname||!d.pathname.includes("?"),Fo("?","pathname","search",d)),Qt(!d.pathname||!d.pathname.includes("#"),Fo("#","pathname","hash",d)),Qt(!d.search||!d.search.includes("#"),Fo("#","search","hash",d)));let m=n===""||d.pathname==="",v=m?"/":d.pathname,p;if(v==null)p=c;else{let _=s.length-1;if(!r&&v.startsWith("..")){let w=v.split("/");for(;w[0]==="..";)w.shift(),_-=1;d.pathname=w.join("/")}p=_>=0?s[_]:"/"}let g=Op(d,p),y=v&&v!=="/"&&v.endsWith("/"),N=(m||v===".")&&c.endsWith("/");return!g.pathname.endsWith("/")&&(y||N)&&(g.pathname+="/"),g}var F1=n=>n.replace(/\/\/+/g,"/"),vl=n=>F1(n.join("/")),yc=n=>n.replace(/\/+$/,""),Dp=n=>yc(n).replace(/^\/*/,"/"),Up=n=>!n||n==="?"?"":n.startsWith("?")?n:"?"+n,Lp=n=>!n||n==="#"?"":n.startsWith("#")?n:"#"+n,Bp=class{constructor(n,s,c,r=!1){this.status=n,this.statusText=s||"",this.internal=r,c instanceof Error?(this.data=c.toString(),this.error=c):this.data=c}};function Hp(n){return n!=null&&typeof n.status=="number"&&typeof n.statusText=="string"&&typeof n.internal=="boolean"&&"data"in n}function qp(n){let s=n.map(c=>c.route.path).filter(Boolean);return vl(s)||"/"}var W1=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u";function I1(n,s){let c=n;if(typeof c!="string"||!Ap.test(c))return{absoluteURL:void 0,isExternal:!1,to:c};let r=c,d=!1;if(W1)try{let m=new URL(window.location.href),v=c.startsWith("//")?new URL(m.protocol+c):new URL(c),p=la(v.pathname,s);v.origin===m.origin&&p!=null?c=p+v.search+v.hash:d=!0}catch{yl(!1,` contains an invalid URL which will probably break when clicked - please update to a valid URL path.`)}return{absoluteURL:r,isExternal:d,to:c}}Object.getOwnPropertyNames(Object.prototype).sort().join("\0");var P1=["POST","PUT","PATCH","DELETE"];new Set(P1);var Qp=["GET",...P1];new Set(Qp);var xi=E.createContext(null);xi.displayName="DataRouter";var bc=E.createContext(null);bc.displayName="DataRouterState";var tm=E.createContext(!1);function Gp(){return E.useContext(tm)}var em=E.createContext({isTransitioning:!1});em.displayName="ViewTransition";var Yp=E.createContext(new Map);Yp.displayName="Fetchers";var kp=E.createContext(null);kp.displayName="Await";var Fe=E.createContext(null);Fe.displayName="Navigation";var Hs=E.createContext(null);Hs.displayName="Location";var pl=E.createContext({outlet:null,matches:[],isDataRoute:!1});pl.displayName="Route";var Mf=E.createContext(null);Mf.displayName="RouteError";var lm="REACT_ROUTER_ERROR",Vp="REDIRECT",Xp="ROUTE_ERROR_RESPONSE";function Zp(n){if(n.startsWith(`${lm}:${Vp}:{`))try{let s=JSON.parse(n.slice(28));if(typeof s=="object"&&s&&typeof s.status=="number"&&typeof s.statusText=="string"&&typeof s.location=="string"&&typeof s.reloadDocument=="boolean"&&typeof s.replace=="boolean")return s}catch{}}function $p(n){if(n.startsWith(`${lm}:${Xp}:{`))try{let s=JSON.parse(n.slice(40));if(typeof s=="object"&&s&&typeof s.status=="number"&&typeof s.statusText=="string")return new Bp(s.status,s.statusText,s.data)}catch{}}function Kp(n,{relative:s}={}){Qt(Si(),"useHref() may be used only in the context of a component.");let{basename:c,navigator:r}=E.useContext(Fe),{hash:d,pathname:m,search:v}=qs(n,{relative:s}),p=m;return c!=="/"&&(p=m==="/"?c:vl([c,m])),r.createHref({pathname:p,search:v,hash:d})}function Si(){return E.useContext(Hs)!=null}function We(){return Qt(Si(),"useLocation() may be used only in the context of a component."),E.useContext(Hs).location}var am="You should call navigate() in a React.useEffect(), not when your component is first rendered.";function nm(n){E.useContext(Fe).static||E.useLayoutEffect(n)}function ji(){let{isDataRoute:n}=E.useContext(pl);return n?rg():Jp()}function Jp(){Qt(Si(),"useNavigate() may be used only in the context of a component.");let n=E.useContext(xi),{basename:s,navigator:c}=E.useContext(Fe),{matches:r}=E.useContext(pl),{pathname:d}=We(),m=JSON.stringify(Rf(r)),v=E.useRef(!1);return nm(()=>{v.current=!0}),E.useCallback((g,y={})=>{if(yl(v.current,am),!v.current)return;if(typeof g=="number"){c.go(g);return}let N=_c(g,JSON.parse(m),d,y.relative==="path");n==null&&s!=="/"&&(N.pathname=N.pathname==="/"?s:vl([s,N.pathname])),(y.replace?c.replace:c.push)(N,y.state,y)},[s,c,m,d,n])}var Fp=E.createContext(null);function Wp(n){let s=E.useContext(pl).outlet;return E.useMemo(()=>s&&E.createElement(Fp.Provider,{value:n},s),[s,n])}function qs(n,{relative:s}={}){let{matches:c}=E.useContext(pl),{pathname:r}=We(),d=JSON.stringify(Rf(c));return E.useMemo(()=>_c(n,JSON.parse(d),r,s==="path"),[n,d,r,s])}function Ip(n,s){return im(n,s)}function im(n,s,c){var q;Qt(Si(),"useRoutes() may be used only in the context of a component.");let{navigator:r}=E.useContext(Fe),{matches:d}=E.useContext(pl),m=d[d.length-1],v=m?m.params:{},p=m?m.pathname:"/",g=m?m.pathnameBase:"/",y=m&&m.route;{let G=y&&y.path||"";um(p,!y||G.endsWith("*")||G.endsWith("*?"),`You rendered descendant (or called \`useRoutes()\`) at "${p}" (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 N=We(),_;if(s){let G=typeof s=="string"?bi(s):s;Qt(g==="/"||((q=G.pathname)==null?void 0:q.startsWith(g)),`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 "${g}" but pathname "${G.pathname}" was given in the \`location\` prop.`),_=G}else _=N;let w=_.pathname||"/",L=w;if(g!=="/"){let G=g.replace(/^\//,"").split("/");L="/"+w.replace(/^\//,"").split("/").slice(G.length).join("/")}let Q=$1(n,{pathname:L});yl(y||Q!=null,`No routes matched location "${_.pathname}${_.search}${_.hash}" `),yl(Q==null||Q[Q.length-1].route.element!==void 0||Q[Q.length-1].route.Component!==void 0||Q[Q.length-1].route.lazy!==void 0,`Matched leaf route at location "${_.pathname}${_.search}${_.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 B=ag(Q&&Q.map(G=>Object.assign({},G,{params:Object.assign({},v,G.params),pathname:vl([g,r.encodeLocation?r.encodeLocation(G.pathname.replace(/%/g,"%25").replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:G.pathname]),pathnameBase:G.pathnameBase==="/"?g:vl([g,r.encodeLocation?r.encodeLocation(G.pathnameBase.replace(/%/g,"%25").replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:G.pathnameBase])})),d,c);return s&&B?E.createElement(Hs.Provider,{value:{location:{pathname:"/",search:"",hash:"",state:null,key:"default",unstable_mask:void 0,..._},navigationType:"POP"}},B):B}function Pp(){let n=cg(),s=Hp(n)?`${n.status} ${n.statusText}`:n instanceof Error?n.message:JSON.stringify(n),c=n instanceof Error?n.stack:null,r="rgba(200,200,200, 0.5)",d={padding:"0.5rem",backgroundColor:r},m={padding:"2px 4px",backgroundColor:r},v=null;return console.error("Error handled by React Router default ErrorBoundary:",n),v=E.createElement(E.Fragment,null,E.createElement("p",null,"💿 Hey developer 👋"),E.createElement("p",null,"You can provide a way better UX than this when your app throws errors by providing your own ",E.createElement("code",{style:m},"ErrorBoundary")," or"," ",E.createElement("code",{style:m},"errorElement")," prop on your route.")),E.createElement(E.Fragment,null,E.createElement("h2",null,"Unexpected Application Error!"),E.createElement("h3",{style:{fontStyle:"italic"}},s),c?E.createElement("pre",{style:d},c):null,v)}var tg=E.createElement(Pp,null),sm=class extends E.Component{constructor(n){super(n),this.state={location:n.location,revalidation:n.revalidation,error:n.error}}static getDerivedStateFromError(n){return{error:n}}static getDerivedStateFromProps(n,s){return s.location!==n.location||s.revalidation!=="idle"&&n.revalidation==="idle"?{error:n.error,location:n.location,revalidation:n.revalidation}:{error:n.error!==void 0?n.error:s.error,location:s.location,revalidation:n.revalidation||s.revalidation}}componentDidCatch(n,s){this.props.onError?this.props.onError(n,s):console.error("React Router caught the following error during render",n)}render(){let n=this.state.error;if(this.context&&typeof n=="object"&&n&&"digest"in n&&typeof n.digest=="string"){const c=$p(n.digest);c&&(n=c)}let s=n!==void 0?E.createElement(pl.Provider,{value:this.props.routeContext},E.createElement(Mf.Provider,{value:n,children:this.props.component})):this.props.children;return this.context?E.createElement(eg,{error:n},s):s}};sm.contextType=tm;var Wo=new WeakMap;function eg({children:n,error:s}){let{basename:c}=E.useContext(Fe);if(typeof s=="object"&&s&&"digest"in s&&typeof s.digest=="string"){let r=Zp(s.digest);if(r){let d=Wo.get(s);if(d)throw d;let m=I1(r.location,c);if(W1&&!Wo.get(s))if(m.isExternal||r.reloadDocument)window.location.href=m.absoluteURL||m.to;else{const v=Promise.resolve().then(()=>window.__reactRouterDataRouter.navigate(m.to,{replace:r.replace}));throw Wo.set(s,v),v}return E.createElement("meta",{httpEquiv:"refresh",content:`0;url=${m.absoluteURL||m.to}`})}}return n}function lg({routeContext:n,match:s,children:c}){let r=E.useContext(xi);return r&&r.static&&r.staticContext&&(s.route.errorElement||s.route.ErrorBoundary)&&(r.staticContext._deepestRenderedBoundaryId=s.route.id),E.createElement(pl.Provider,{value:n},c)}function ag(n,s=[],c){let r=c==null?void 0:c.state;if(n==null){if(!r)return null;if(r.errors)n=r.matches;else if(s.length===0&&!r.initialized&&r.matches.length>0)n=r.matches;else return null}let d=n,m=r==null?void 0:r.errors;if(m!=null){let N=d.findIndex(_=>_.route.id&&(m==null?void 0:m[_.route.id])!==void 0);Qt(N>=0,`Could not find a matching route for errors on route IDs: ${Object.keys(m).join(",")}`),d=d.slice(0,Math.min(d.length,N+1))}let v=!1,p=-1;if(c&&r){v=r.renderFallback;for(let N=0;N=0?d=d.slice(0,p+1):d=[d[0]];break}}}}let g=c==null?void 0:c.onError,y=r&&g?(N,_)=>{var w,L;g(N,{location:r.location,params:((L=(w=r.matches)==null?void 0:w[0])==null?void 0:L.params)??{},unstable_pattern:qp(r.matches),errorInfo:_})}:void 0;return d.reduceRight((N,_,w)=>{let L,Q=!1,B=null,q=null;r&&(L=m&&_.route.id?m[_.route.id]:void 0,B=_.route.errorElement||tg,v&&(p<0&&w===0?(um("route-fallback",!1,"No `HydrateFallback` element provided to render during initial hydration"),Q=!0,q=null):p===w&&(Q=!0,q=_.route.hydrateFallbackElement||null)));let G=s.concat(d.slice(0,w+1)),$=()=>{let Y;return L?Y=B:Q?Y=q:_.route.Component?Y=E.createElement(_.route.Component,null):_.route.element?Y=_.route.element:Y=N,E.createElement(lg,{match:_,routeContext:{outlet:N,matches:G,isDataRoute:r!=null},children:Y})};return r&&(_.route.ErrorBoundary||_.route.errorElement||w===0)?E.createElement(sm,{location:r.location,revalidation:r.revalidation,component:B,error:L,children:$(),routeContext:{outlet:null,matches:G,isDataRoute:!0},onError:y}):$()},null)}function wf(n){return`${n} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function ng(n){let s=E.useContext(xi);return Qt(s,wf(n)),s}function ig(n){let s=E.useContext(bc);return Qt(s,wf(n)),s}function sg(n){let s=E.useContext(pl);return Qt(s,wf(n)),s}function Af(n){let s=sg(n),c=s.matches[s.matches.length-1];return Qt(c.route.id,`${n} can only be used on routes that contain a unique "id"`),c.route.id}function ug(){return Af("useRouteId")}function cg(){var r;let n=E.useContext(Mf),s=ig("useRouteError"),c=Af("useRouteError");return n!==void 0?n:(r=s.errors)==null?void 0:r[c]}function rg(){let{router:n}=ng("useNavigate"),s=Af("useNavigate"),c=E.useRef(!1);return nm(()=>{c.current=!0}),E.useCallback(async(d,m={})=>{yl(c.current,am),c.current&&(typeof d=="number"?await n.navigate(d):await n.navigate(d,{fromRouteId:s,...m}))},[n,s])}var c1={};function um(n,s,c){!s&&!c1[n]&&(c1[n]=!0,yl(!1,c))}E.memo(og);function og({routes:n,future:s,state:c,isStatic:r,onError:d}){return im(n,void 0,{state:c,isStatic:r,onError:d})}function cm({to:n,replace:s,state:c,relative:r}){Qt(Si()," may be used only in the context of a component.");let{static:d}=E.useContext(Fe);yl(!d," must not be used on the initial render in a . This is a no-op, but you should modify your code so the is only ever rendered in response to some user interaction or state change.");let{matches:m}=E.useContext(pl),{pathname:v}=We(),p=ji(),g=_c(n,Rf(m),v,r==="path"),y=JSON.stringify(g);return E.useEffect(()=>{p(JSON.parse(y),{replace:s,state:c,relative:r})},[p,y,r,s,c]),null}function rm(n){return Wp(n.context)}function rl(n){Qt(!1,"A is only ever to be used as the child of element, never rendered directly. Please wrap your in a .")}function fg({basename:n="/",children:s=null,location:c,navigationType:r="POP",navigator:d,static:m=!1,unstable_useTransitions:v}){Qt(!Si(),"You cannot render a inside another . You should never have more than one in your app.");let p=n.replace(/^\/*/,"/"),g=E.useMemo(()=>({basename:p,navigator:d,static:m,unstable_useTransitions:v,future:{}}),[p,d,m,v]);typeof c=="string"&&(c=bi(c));let{pathname:y="/",search:N="",hash:_="",state:w=null,key:L="default",unstable_mask:Q}=c,B=E.useMemo(()=>{let q=la(y,p);return q==null?null:{location:{pathname:q,search:N,hash:_,state:w,key:L,unstable_mask:Q},navigationType:r}},[p,y,N,_,w,L,r,Q]);return yl(B!=null,` is not able to match the URL "${y}${N}${_}" because it does not start with the basename, so the won't render anything.`),B==null?null:E.createElement(Fe.Provider,{value:g},E.createElement(Hs.Provider,{children:s,value:B}))}function dg({children:n,location:s}){return Ip(cf(n),s)}function cf(n,s=[]){let c=[];return E.Children.forEach(n,(r,d)=>{if(!E.isValidElement(r))return;let m=[...s,d];if(r.type===E.Fragment){c.push.apply(c,cf(r.props.children,m));return}Qt(r.type===rl,`[${typeof r.type=="string"?r.type:r.type.name}] is not a component. All component children of must be a or `),Qt(!r.props.index||!r.props.children,"An index route cannot have child routes.");let v={id:r.props.id||m.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&&(v.children=cf(r.props.children,m)),c.push(v)}),c}var dc="get",hc="application/x-www-form-urlencoded";function xc(n){return typeof HTMLElement<"u"&&n instanceof HTMLElement}function hg(n){return xc(n)&&n.tagName.toLowerCase()==="button"}function mg(n){return xc(n)&&n.tagName.toLowerCase()==="form"}function vg(n){return xc(n)&&n.tagName.toLowerCase()==="input"}function yg(n){return!!(n.metaKey||n.altKey||n.ctrlKey||n.shiftKey)}function pg(n,s){return n.button===0&&(!s||s==="_self")&&!yg(n)}var cc=null;function gg(){if(cc===null)try{new FormData(document.createElement("form"),0),cc=!1}catch{cc=!0}return cc}var _g=new Set(["application/x-www-form-urlencoded","multipart/form-data","text/plain"]);function Io(n){return n!=null&&!_g.has(n)?(yl(!1,`"${n}" is not a valid \`encType\` for \`
\`/\`\` and will default to "${hc}"`),null):n}function bg(n,s){let c,r,d,m,v;if(mg(n)){let p=n.getAttribute("action");r=p?la(p,s):null,c=n.getAttribute("method")||dc,d=Io(n.getAttribute("enctype"))||hc,m=new FormData(n)}else if(hg(n)||vg(n)&&(n.type==="submit"||n.type==="image")){let p=n.form;if(p==null)throw new Error('Cannot submit a + ) +} diff --git a/src/widgets/converter-page/ui/CommissionPanel.module.css b/src/widgets/converter-page/ui/CommissionPanel.module.css new file mode 100644 index 0000000..0672d2a --- /dev/null +++ b/src/widgets/converter-page/ui/CommissionPanel.module.css @@ -0,0 +1,82 @@ +.title { + font-size: 16px; + font-weight: 600; + letter-spacing: 1px; + margin-bottom: 24px; +} + +.table { + display: flex; + flex-direction: column; + gap: 12px; + margin-bottom: 24px; +} + +.row { + display: flex; + justify-content: space-between; + align-items: center; + padding: 12px 16px; + background: rgba(255, 255, 255, 0.03); + border-radius: 10px; + border: 1px solid var(--glass-border); + transition: all 0.3s ease; +} + +.row[data-active] { + border-color: var(--grad-center); + background: rgba(91, 61, 184, 0.12); +} + +.range { + font-size: 14px; + color: var(--text-secondary); +} + +.pct { + font-family: var(--font-mono); + font-size: 16px; + font-weight: 700; + color: var(--highlight); +} + +.progressBar { + height: 6px; + border-radius: 3px; + background: rgba(255, 255, 255, 0.06); + margin-bottom: 32px; + overflow: hidden; +} + +.progressFill { + height: 100%; + border-radius: 3px; + background: linear-gradient(90deg, var(--grad-center), var(--highlight)); + transition: width 0.5s ease; +} + +.summary { + display: flex; + justify-content: space-between; + align-items: center; + padding: 14px 18px; + background: rgba(255, 255, 255, 0.03); + border-radius: 10px; + border: 1px solid var(--glass-border); + margin-bottom: 16px; +} + +.summary:last-child { + margin-bottom: 0; +} + +.summaryLabel { + font-size: 13px; + color: var(--text-secondary); +} + +.summaryValue { + font-family: var(--font-mono); + font-size: 16px; + font-weight: 600; +} diff --git a/src/widgets/converter-page/ui/CommissionPanel.tsx b/src/widgets/converter-page/ui/CommissionPanel.tsx new file mode 100644 index 0000000..306ec84 --- /dev/null +++ b/src/widgets/converter-page/ui/CommissionPanel.tsx @@ -0,0 +1,49 @@ +import { TIERS } from '@widgets/currency-converter' +import styles from './CommissionPanel.module.css' + +const ru = (n: number) => n.toLocaleString('ru-RU') + +interface Props { + amount: number + progress: number + commission: number + effectiveRate: number +} + +export function CommissionPanel({ amount, progress, commission, effectiveRate }: Props) { + return ( +
+
КОМИССИЯ СЕРВИСА
+ +
+ {TIERS.map((tier, i) => ( +
= tier.min && amount <= tier.max) || undefined} + > + + {ru(tier.min)} – {ru(tier.max)} ₽ + + {tier.pct}% +
+ ))} +
+ +
+
+
+ +
+ Комиссия + + {commission.toLocaleString('ru-RU', { maximumFractionDigits: 2 })} ₽ + +
+
+ Курс с комиссией + {effectiveRate.toFixed(2)} ₽ +
+
+ ) +} diff --git a/src/widgets/converter-page/ui/ConverterSection.module.css b/src/widgets/converter-page/ui/ConverterSection.module.css new file mode 100644 index 0000000..21a12f1 --- /dev/null +++ b/src/widgets/converter-page/ui/ConverterSection.module.css @@ -0,0 +1,222 @@ +.wrap { + border-radius: 24px; + padding: 32px; + position: relative; + overflow: hidden; +} + +.header { + display: flex; + justify-content: space-between; + align-items: flex-start; + flex-wrap: wrap; + gap: 24px; + margin-bottom: 40px; +} + +.title { + font-size: clamp(36px, 4vw, 52px); + font-weight: 700; +} + +.subtitle { + font-size: 14px; + color: var(--text-secondary); + margin-top: 8px; + letter-spacing: 1px; +} + +.pills { + display: flex; + gap: 12px; + flex-wrap: wrap; +} + +.pill { + display: flex; + align-items: center; + gap: 10px; + font-size: 13px; + color: var(--text-secondary); +} + +.pillValue { + background: rgba(255, 255, 255, 0.06); + border: 1px solid var(--glass-border); + border-radius: 8px; + padding: 6px 14px; + font-family: var(--font-mono); + font-size: 14px; + color: var(--text-primary); +} + +.body { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 48px; +} + +.tabs { + display: inline-flex; + border-radius: 12px; + overflow: hidden; + border: 1px solid var(--glass-border); + margin-bottom: 32px; +} + +.tab { + padding: 12px 32px; + font-size: 14px; + font-weight: 600; + letter-spacing: 1px; + background: transparent; + color: var(--text-secondary); + transition: all 0.3s; +} + +.tab[data-active] { + background: var(--grad-center); + color: var(--text-primary); +} + +.tab:not([data-active]):hover { + background: rgba(255, 255, 255, 0.04); +} + +.field { + margin-bottom: 24px; +} + +.fieldLabel { + font-size: 12px; + letter-spacing: 2px; + text-transform: uppercase; + color: var(--text-secondary); + margin-bottom: 8px; +} + +.fieldInput { + display: flex; + align-items: center; + background: rgba(255, 255, 255, 0.04); + border: 1px solid var(--glass-border); + border-radius: 12px; + padding: 0 16px; + transition: border-color 0.3s; +} + +.fieldInput:focus-within { + border-color: var(--interactive); +} + +.fieldInput input { + flex: 1; + background: none; + border: none; + outline: none; + color: var(--text-primary); + font-family: var(--font-mono); + font-size: 18px; + padding: 16px 0; + width: 100%; +} + +.currency { + font-size: 14px; + font-weight: 600; + color: var(--text-secondary); + display: flex; + align-items: center; + gap: 6px; +} + +.currencyIcon { + width: 24px; + height: 24px; + border-radius: 50%; + display: flex; + align-items: center; + justify-content: center; + font-size: 12px; + font-weight: 700; + color: #fff; +} + +.currencyRub { + background: var(--interactive); +} + +.currencyUsdt { + background: var(--success); +} + +.swapWrap { + display: flex; + justify-content: center; +} + +.swapBtn { + width: 40px; + height: 40px; + border-radius: 50%; + border: 1px solid var(--glass-border); + background: var(--glass-bg); + display: flex; + align-items: center; + justify-content: center; + transition: all 0.3s; + color: var(--text-secondary); +} + +.swapBtn:hover { + border-color: var(--highlight); + color: var(--highlight); + transform: rotate(180deg); +} + +.bottom { + display: flex; + justify-content: center; + margin-top: 40px; + padding-top: 32px; + border-top: 1px solid var(--glass-border); +} + +@media (max-width: 1024px) { + .body { + grid-template-columns: 1fr; + gap: 1.5rem; + } + + .header { + margin-bottom: 1rem; + } + + .tabs { + margin-bottom: 1.5rem; + display: flex; + } + + .tab { + flex: 0 0 50%; + } + + .field { + margin-bottom: 1rem; + } + + .bottom { + margin-top: 1.5rem; + padding-top: 1rem; + } + + .pills { + display: none; + } +} + +@media (max-width: 640px) { + .wrap { + padding: 0; + } +} \ No newline at end of file diff --git a/src/widgets/converter-page/ui/ConverterSection.tsx b/src/widgets/converter-page/ui/ConverterSection.tsx new file mode 100644 index 0000000..392a350 --- /dev/null +++ b/src/widgets/converter-page/ui/ConverterSection.tsx @@ -0,0 +1,109 @@ +import { useConverter } from '@widgets/currency-converter' +import { GAS_PRICE, USDT_RATE } from '@shared/config/constants' +import { CommissionPanel } from './CommissionPanel' +import { AgreementCheck } from './AgreementCheck' +import styles from './ConverterSection.module.css' + +export function ConverterSection() { + const c = useConverter({ usdtRate: USDT_RATE }) + + return ( +
+
+
+

Конвертация

+
Данные обновляются в реальном времени
+
+
+
+ Цена газа в RUB {GAS_PRICE.toFixed(2)} RUB +
+
+ USDT/RUB {USDT_RATE.toFixed(2)} ₽ +
+
+
+ +
+
+
+ + +
+ +
+
Конвертируете
+
+ c.updateRub(e.target.value)} + placeholder="0" + inputMode="decimal" + /> +
+ + RUB +
+
+
+ +
+ +
+ +
+
Получаете
+
+ +
+ + USDT +
+
+
+
+ + +
+ +
+ c.setAgreed(!c.agreed)} /> +
+
+ ) +} diff --git a/src/widgets/currency-converter/index.ts b/src/widgets/currency-converter/index.ts index 152819c..0f24c02 100644 --- a/src/widgets/currency-converter/index.ts +++ b/src/widgets/currency-converter/index.ts @@ -1 +1,5 @@ export { Converter } from './ui/Converter' +export { useConverter } from './model/useConverter' +export type { ConverterMode } from './model/useConverter' +export { TIERS, findTier, progressPercent } from './model/tiers' +export type { Tier } from './model/tiers' diff --git a/src/widgets/kyc-verification/index.ts b/src/widgets/kyc-verification/index.ts new file mode 100644 index 0000000..b541ecd --- /dev/null +++ b/src/widgets/kyc-verification/index.ts @@ -0,0 +1 @@ +export { KycWidget } from './ui/KycWidget' diff --git a/src/widgets/kyc-verification/model/useKyc.ts b/src/widgets/kyc-verification/model/useKyc.ts new file mode 100644 index 0000000..c1978d0 --- /dev/null +++ b/src/widgets/kyc-verification/model/useKyc.ts @@ -0,0 +1,12 @@ +import { useMutation } from '@tanstack/react-query' +import { kycCreate, KycResponse } from '@features/kyc/api/kycApi' + +export function useKyc() { + const mutation = useMutation({ mutationFn: kycCreate }) + return { + trigger: mutation.mutate, + data: mutation.data, + isLoading: mutation.isPending, + isError: mutation.isError, + } +} diff --git a/src/widgets/kyc-verification/ui/KycModal.module.css b/src/widgets/kyc-verification/ui/KycModal.module.css new file mode 100644 index 0000000..cbf7f6d --- /dev/null +++ b/src/widgets/kyc-verification/ui/KycModal.module.css @@ -0,0 +1,112 @@ +.backdrop { + position: fixed; + inset: 0; + background: rgba(0, 0, 0, 0.7); + display: flex; + align-items: center; + justify-content: center; + z-index: 100; + padding: 1rem; +} + +.modal { + background: var(--bg-mid); + border: 1px solid var(--glass-border); + border-radius: 24px; + padding: 40px; + position: relative; + max-width: 680px; + width: 100%; +} + +.closeBtn { + position: absolute; + top: 16px; + right: 20px; + background: none; + border: none; + color: var(--text-secondary); + font-size: 24px; + cursor: pointer; + line-height: 1; + padding: 4px 8px; + transition: color 0.2s; +} + +.closeBtn:hover { + color: var(--text-primary); +} + +.body { + display: flex; + gap: 40px; + align-items: center; +} + +.qrBlock { + display: flex; + flex-direction: column; + align-items: center; + gap: 16px; + flex-shrink: 0; +} + +.qrImage { + width: 200px; + height: 200px; + border-radius: 12px; + display: block; +} + +.linkBtn { + display: flex; + align-items: center; + justify-content: center; + width: 200px; + height: 48px; + background: linear-gradient(135deg, var(--grad-edge), var(--grad-center)); + border-radius: 12px; + color: var(--text-primary); + font-size: 14px; + font-weight: 700; + font-family: var(--font-sans); + text-decoration: none; + transition: filter 0.25s, box-shadow 0.25s; +} + +.linkBtn:hover { + filter: brightness(1.15); + box-shadow: 0 0 24px rgba(91, 61, 184, 0.5); +} + +.infoText { + color: var(--text-secondary); + font-size: 15px; + line-height: 1.7; + flex: 1; + margin: 0; +} + +@media (max-width: 600px) { + .modal { + padding: 32px 20px; + } + + .body { + flex-direction: column; + align-items: center; + } + + .qrImage { + width: 160px; + height: 160px; + } + + .linkBtn { + width: 160px; + } + + .infoText { + text-align: center; + } +} diff --git a/src/widgets/kyc-verification/ui/KycModal.tsx b/src/widgets/kyc-verification/ui/KycModal.tsx new file mode 100644 index 0000000..543ae82 --- /dev/null +++ b/src/widgets/kyc-verification/ui/KycModal.tsx @@ -0,0 +1,37 @@ +import type { KycResponse } from '@features/kyc/api/kycApi' +import styles from './KycModal.module.css' + +interface Props { + data: KycResponse + onClose: () => void +} + +export function KycModal({ data, onClose }: Props) { + return ( +
+
e.stopPropagation()}> + +
+ +

+ Для продолжения верификации перейдите по ссылке +

+
+
+
+ ) +} diff --git a/src/widgets/kyc-verification/ui/KycWidget.module.css b/src/widgets/kyc-verification/ui/KycWidget.module.css new file mode 100644 index 0000000..3fe4df4 --- /dev/null +++ b/src/widgets/kyc-verification/ui/KycWidget.module.css @@ -0,0 +1,61 @@ +.card { + background: var(--glass-bg); + border: 1px solid var(--glass-border); + border-radius: 24px; + padding: 40px 32px; + width: 100%; + max-width: 700px; + display: flex; + flex-direction: column; + align-items: center; +} + +.logo { + margin-bottom: 32px; +} + +.logo img { + height: 80px; +} + +.iconWrapper { + width: 80px; + height: 80px; + border-radius: 50%; + background: linear-gradient(135deg, var(--grad-edge), var(--grad-center)); + display: flex; + align-items: center; + justify-content: center; + color: var(--highlight); + margin-bottom: 24px; + box-shadow: 0 0 32px rgba(0, 212, 255, 0.15); +} + +.description { + color: var(--text-secondary); + font-size: 2rem; + text-align: center; + margin: 0; + font-weight: bold; +} + +.buttonWrapper { + margin-top: 32px; + width: 100%; +} + +.error { + color: var(--error); + font-size: 13px; + text-align: center; + margin-top: 12px; +} + +@media (max-width: 560px) { + .card { + padding: 32px 20px; + border-radius: 0; + background: transparent; + border: none; + } +} \ No newline at end of file diff --git a/src/widgets/kyc-verification/ui/KycWidget.tsx b/src/widgets/kyc-verification/ui/KycWidget.tsx new file mode 100644 index 0000000..266130d --- /dev/null +++ b/src/widgets/kyc-verification/ui/KycWidget.tsx @@ -0,0 +1,59 @@ +import { PrimaryButton } from '@shared/ui' +import logo from '@shared/assets/logo-full-white.png' +import { useKyc } from '../model/useKyc' +import { KycModal } from './KycModal' +import styles from './KycWidget.module.css' + +export function KycWidget() { + const { trigger, data, isLoading, isError } = useKyc() + + return ( + <> +
+
+ ЭКСА +
+ +
+ + + + +
+ +

+ Для продолжения работы необходимо пройти KYC верификацию. +

+ +
+ trigger()} + disabled={isLoading} + /> +
+ + {isError && ( +

+ Произошла ошибка. Попробуй перезагрузить страницу и попробовать снова. +

+ )} +
+ + {data && window.location.reload()} />} + + ) +} diff --git a/tsconfig.tsbuildinfo b/tsconfig.tsbuildinfo index 20cf1d3..a0fb0aa 100644 --- a/tsconfig.tsbuildinfo +++ b/tsconfig.tsbuildinfo @@ -1 +1 @@ -{"root":["./src/main.tsx","./src/vite-env.d.ts","./src/app/app.tsx","./src/app/providers/routerprovider.tsx","./src/app/providers/index.ts","./src/pages/home/index.ts","./src/pages/home/ui/homepage.tsx","./src/pages/login/index.ts","./src/pages/login/ui/loginpage.tsx","./src/pages/profile/index.ts","./src/pages/profile/ui/profilepage.tsx","./src/pages/register/index.ts","./src/pages/register/ui/registerpage.tsx","./src/pages/seed-phrase/index.ts","./src/pages/seed-phrase/ui/seedphrasepage.tsx","./src/pages/swap/index.ts","./src/pages/swap/ui/swappage.tsx","./src/pages/wallet/index.ts","./src/pages/wallet/ui/walletpage.tsx","./src/shared/api/base.ts","./src/shared/api/types.ts","./src/shared/config/constants.ts","./src/shared/config/env.ts","./src/shared/config/routes.ts","./src/shared/lib/hooks/usedebounce.ts","./src/shared/lib/hooks/uselocalstorage.ts","./src/shared/lib/utils/cn.ts","./src/shared/types/index.ts","./src/shared/ui/index.ts","./src/shared/ui/button/button.tsx","./src/shared/ui/button/index.ts","./src/shared/ui/formfield/formfield.tsx","./src/shared/ui/formfield/index.ts","./src/shared/ui/pill/pill.tsx","./src/shared/ui/pill/index.ts","./src/shared/ui/primarybutton/primarybutton.tsx","./src/shared/ui/primarybutton/index.ts","./src/shared/ui/title/title.tsx","./src/shared/ui/tokenicon/tokenicon.tsx","./src/shared/ui/tokenicon/index.ts","./src/widgets/about/index.ts","./src/widgets/about/ui/about.tsx","./src/widgets/balance-card/index.ts","./src/widgets/balance-card/ui/balancecard.tsx","./src/widgets/currency-converter/index.ts","./src/widgets/currency-converter/model/tiers.ts","./src/widgets/currency-converter/model/useconverter.ts","./src/widgets/currency-converter/ui/agreementcheckbox.tsx","./src/widgets/currency-converter/ui/commissiontable.tsx","./src/widgets/currency-converter/ui/converter.tsx","./src/widgets/currency-converter/ui/tiers.tsx","./src/widgets/footer/index.ts","./src/widgets/footer/ui/footer.tsx","./src/widgets/header/index.ts","./src/widgets/header/ui/header.tsx","./src/widgets/hero/index.ts","./src/widgets/hero/lib/usecountdown.ts","./src/widgets/hero/ui/conversionflow.tsx","./src/widgets/hero/ui/countdown.tsx","./src/widgets/hero/ui/exchangecard.tsx","./src/widgets/hero/ui/hero.tsx","./src/widgets/login-form/index.ts","./src/widgets/login-form/ui/loginform.tsx","./src/widgets/networks-table/index.ts","./src/widgets/networks-table/model/networks.ts","./src/widgets/networks-table/ui/networkstable.tsx","./src/widgets/profile/index.ts","./src/widgets/profile/ui/profileavatar.tsx","./src/widgets/profile/ui/profilesection.tsx","./src/widgets/register-form/index.ts","./src/widgets/register-form/ui/registerform.tsx","./src/widgets/seed-phrase/index.ts","./src/widgets/seed-phrase/model/useseedphrase.ts","./src/widgets/seed-phrase/ui/seedphrasewidget.tsx","./src/widgets/swap-form/index.ts","./src/widgets/swap-form/model/useswapform.ts","./src/widgets/swap-form/ui/raterow.tsx","./src/widgets/swap-form/ui/swapcard.tsx","./src/widgets/swap-form/ui/swapdirectionbutton.tsx","./src/widgets/swap-form/ui/swapform.tsx","./src/widgets/swap-form/ui/swapinfopanel.tsx","./src/widgets/swap-form/ui/tokenselect.tsx","./src/widgets/token-table/index.ts","./src/widgets/token-table/model/tokens.ts","./src/widgets/token-table/ui/tokentable.tsx","./src/widgets/wallet-header/index.ts","./src/widgets/wallet-header/ui/walletheader.tsx"],"version":"5.6.3"} \ No newline at end of file +{"root":["./src/main.tsx","./src/vite-env.d.ts","./src/app/app.tsx","./src/app/providers/guestroute.tsx","./src/app/providers/protectedroute.tsx","./src/app/providers/queryprovider.tsx","./src/app/providers/routerprovider.tsx","./src/app/providers/scrolltotop.tsx","./src/app/providers/index.ts","./src/features/auth/index.ts","./src/features/auth/api/registrationapi.ts","./src/features/auth/hooks/useauth.ts","./src/features/auth/hooks/useisauthenticated.ts","./src/features/kyc/api/kycapi.ts","./src/pages/converter/index.ts","./src/pages/converter/ui/converterpage.tsx","./src/pages/home/index.ts","./src/pages/home/ui/homepage.tsx","./src/pages/kyc/index.ts","./src/pages/kyc/ui/kycpage.tsx","./src/pages/login/index.ts","./src/pages/login/ui/loginpage.tsx","./src/pages/profile/index.ts","./src/pages/profile/ui/profilepage.tsx","./src/pages/register/index.ts","./src/pages/register/ui/registerpage.tsx","./src/pages/seed-phrase/index.ts","./src/pages/seed-phrase/ui/seedphrasepage.tsx","./src/pages/swap/index.ts","./src/pages/swap/ui/swappage.tsx","./src/pages/wallet/index.ts","./src/pages/wallet/ui/walletpage.tsx","./src/shared/api/base.ts","./src/shared/api/csrf.ts","./src/shared/api/tokenstore.ts","./src/shared/api/types.ts","./src/shared/config/constants.ts","./src/shared/config/env.ts","./src/shared/config/routes.ts","./src/shared/lib/hooks/usedebounce.ts","./src/shared/lib/hooks/uselocalstorage.ts","./src/shared/lib/utils/cn.ts","./src/shared/types/index.ts","./src/shared/ui/index.ts","./src/shared/ui/button/button.tsx","./src/shared/ui/button/index.ts","./src/shared/ui/formfield/formfield.tsx","./src/shared/ui/formfield/index.ts","./src/shared/ui/notification/notification.tsx","./src/shared/ui/notification/index.ts","./src/shared/ui/pill/pill.tsx","./src/shared/ui/pill/index.ts","./src/shared/ui/primarybutton/primarybutton.tsx","./src/shared/ui/primarybutton/index.ts","./src/shared/ui/title/title.tsx","./src/shared/ui/tokenicon/tokenicon.tsx","./src/shared/ui/tokenicon/index.ts","./src/widgets/about/index.ts","./src/widgets/about/ui/about.tsx","./src/widgets/balance-card/index.ts","./src/widgets/balance-card/ui/balancecard.tsx","./src/widgets/converter-page/index.ts","./src/widgets/converter-page/ui/agreementcheck.tsx","./src/widgets/converter-page/ui/commissionpanel.tsx","./src/widgets/converter-page/ui/convertersection.tsx","./src/widgets/currency-converter/index.ts","./src/widgets/currency-converter/model/tiers.ts","./src/widgets/currency-converter/model/useconverter.ts","./src/widgets/currency-converter/ui/agreementcheckbox.tsx","./src/widgets/currency-converter/ui/commissiontable.tsx","./src/widgets/currency-converter/ui/converter.tsx","./src/widgets/currency-converter/ui/tiers.tsx","./src/widgets/footer/index.ts","./src/widgets/footer/ui/footer.tsx","./src/widgets/header/index.ts","./src/widgets/header/ui/header.tsx","./src/widgets/hero/index.ts","./src/widgets/hero/lib/usecountdown.ts","./src/widgets/hero/ui/conversionflow.tsx","./src/widgets/hero/ui/countdown.tsx","./src/widgets/hero/ui/exchangecard.tsx","./src/widgets/hero/ui/hero.tsx","./src/widgets/kyc-verification/index.ts","./src/widgets/kyc-verification/model/usekyc.ts","./src/widgets/kyc-verification/ui/kycmodal.tsx","./src/widgets/kyc-verification/ui/kycwidget.tsx","./src/widgets/login-form/index.ts","./src/widgets/login-form/model/useloginform.ts","./src/widgets/login-form/ui/loginform.tsx","./src/widgets/networks-table/index.ts","./src/widgets/networks-table/model/networks.ts","./src/widgets/networks-table/ui/networkstable.tsx","./src/widgets/profile/index.ts","./src/widgets/profile/ui/profileavatar.tsx","./src/widgets/profile/ui/profilesection.tsx","./src/widgets/register-form/index.ts","./src/widgets/register-form/model/useregisterform.ts","./src/widgets/register-form/ui/registerform.tsx","./src/widgets/seed-phrase/index.ts","./src/widgets/seed-phrase/model/useseedphrase.ts","./src/widgets/seed-phrase/ui/seedphrasewidget.tsx","./src/widgets/swap-form/index.ts","./src/widgets/swap-form/model/useswapform.ts","./src/widgets/swap-form/ui/raterow.tsx","./src/widgets/swap-form/ui/swapcard.tsx","./src/widgets/swap-form/ui/swapdirectionbutton.tsx","./src/widgets/swap-form/ui/swapform.tsx","./src/widgets/swap-form/ui/swapinfopanel.tsx","./src/widgets/swap-form/ui/tokenselect.tsx","./src/widgets/token-table/index.ts","./src/widgets/token-table/model/tokens.ts","./src/widgets/token-table/ui/tokentable.tsx","./src/widgets/wallet-header/index.ts","./src/widgets/wallet-header/ui/walletheader.tsx"],"version":"5.6.3"} \ No newline at end of file