commit 283b3e6885e111a749e19cebd9ce53a76b7f90f8 Author: Loic Coenen Date: Wed Oct 29 21:41:12 2025 +0100 feat: first draft diff --git a/.github/workflows/playwright.yml b/.github/workflows/playwright.yml new file mode 100644 index 0000000..8116248 --- /dev/null +++ b/.github/workflows/playwright.yml @@ -0,0 +1,27 @@ +name: Playwright Tests +on: + push: + branches: [ main, master ] + pull_request: + branches: [ main, master ] +jobs: + test: + timeout-minutes: 60 + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: lts/* + - name: Install dependencies + run: npm install -g pnpm && pnpm install + - name: Install Playwright Browsers + run: pnpm exec playwright install --with-deps + - name: Run Playwright tests + run: pnpm exec playwright test + - uses: actions/upload-artifact@v4 + if: ${{ !cancelled() }} + with: + name: playwright-report + path: playwright-report/ + retention-days: 30 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..335bd46 --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ + +# Playwright +node_modules/ +/test-results/ +/playwright-report/ +/blob-report/ +/playwright/.cache/ +/playwright/.auth/ diff --git a/README.md b/README.md new file mode 100644 index 0000000..d2e7761 --- /dev/null +++ b/README.md @@ -0,0 +1,73 @@ +# React + TypeScript + Vite + +This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. + +Currently, two official plugins are available: + +- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Babel](https://babeljs.io/) (or [oxc](https://oxc.rs) when used in [rolldown-vite](https://vite.dev/guide/rolldown)) for Fast Refresh +- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh + +## React Compiler + +The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see [this documentation](https://react.dev/learn/react-compiler/installation). + +## Expanding the ESLint configuration + +If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules: + +```js +export default defineConfig([ + globalIgnores(['dist']), + { + files: ['**/*.{ts,tsx}'], + extends: [ + // Other configs... + + // Remove tseslint.configs.recommended and replace with this + tseslint.configs.recommendedTypeChecked, + // Alternatively, use this for stricter rules + tseslint.configs.strictTypeChecked, + // Optionally, add this for stylistic rules + tseslint.configs.stylisticTypeChecked, + + // Other configs... + ], + languageOptions: { + parserOptions: { + project: ['./tsconfig.node.json', './tsconfig.app.json'], + tsconfigRootDir: import.meta.dirname, + }, + // other options... + }, + }, +]) +``` + +You can also install [eslint-plugin-react-x](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-x) and [eslint-plugin-react-dom](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-dom) for React-specific lint rules: + +```js +// eslint.config.js +import reactX from 'eslint-plugin-react-x' +import reactDom from 'eslint-plugin-react-dom' + +export default defineConfig([ + globalIgnores(['dist']), + { + files: ['**/*.{ts,tsx}'], + extends: [ + // Other configs... + // Enable lint rules for React + reactX.configs['recommended-typescript'], + // Enable lint rules for React DOM + reactDom.configs.recommended, + ], + languageOptions: { + parserOptions: { + project: ['./tsconfig.node.json', './tsconfig.app.json'], + tsconfigRootDir: import.meta.dirname, + }, + // other options... + }, + }, +]) +``` diff --git a/dist/assets/index-BmWlsiDz.js b/dist/assets/index-BmWlsiDz.js new file mode 100644 index 0000000..ec36615 --- /dev/null +++ b/dist/assets/index-BmWlsiDz.js @@ -0,0 +1,54 @@ +(function(){const f=document.createElement("link").relList;if(f&&f.supports&&f.supports("modulepreload"))return;for(const d of document.querySelectorAll('link[rel="modulepreload"]'))s(d);new MutationObserver(d=>{for(const v of d)if(v.type==="childList")for(const S of v.addedNodes)S.tagName==="LINK"&&S.rel==="modulepreload"&&s(S)}).observe(document,{childList:!0,subtree:!0});function r(d){const v={};return d.integrity&&(v.integrity=d.integrity),d.referrerPolicy&&(v.referrerPolicy=d.referrerPolicy),d.crossOrigin==="use-credentials"?v.credentials="include":d.crossOrigin==="anonymous"?v.credentials="omit":v.credentials="same-origin",v}function s(d){if(d.ep)return;d.ep=!0;const v=r(d);fetch(d.href,v)}})();var Hf={exports:{}},Cn={};/** + * @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 lh;function A0(){if(lh)return Cn;lh=1;var c=Symbol.for("react.transitional.element"),f=Symbol.for("react.fragment");function r(s,d,v){var S=null;if(v!==void 0&&(S=""+v),d.key!==void 0&&(S=""+d.key),"key"in d){v={};for(var _ in d)_!=="key"&&(v[_]=d[_])}else v=d;return d=v.ref,{$$typeof:c,type:s,key:S,ref:d!==void 0?d:null,props:v}}return Cn.Fragment=f,Cn.jsx=r,Cn.jsxs=r,Cn}var eh;function O0(){return eh||(eh=1,Hf.exports=A0()),Hf.exports}var qn=O0(),Bf={exports:{}},F={};/** + * @license React + * react.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var ah;function z0(){if(ah)return F;ah=1;var c=Symbol.for("react.transitional.element"),f=Symbol.for("react.portal"),r=Symbol.for("react.fragment"),s=Symbol.for("react.strict_mode"),d=Symbol.for("react.profiler"),v=Symbol.for("react.consumer"),S=Symbol.for("react.context"),_=Symbol.for("react.forward_ref"),N=Symbol.for("react.suspense"),g=Symbol.for("react.memo"),U=Symbol.for("react.lazy"),H=Symbol.for("react.activity"),V=Symbol.iterator;function ot(m){return m===null||typeof m!="object"?null:(m=V&&m[V]||m["@@iterator"],typeof m=="function"?m:null)}var B={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},X=Object.assign,x={};function ut(m,M,j){this.props=m,this.context=M,this.refs=x,this.updater=j||B}ut.prototype.isReactComponent={},ut.prototype.setState=function(m,M){if(typeof m!="object"&&typeof m!="function"&&m!=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,m,M,"setState")},ut.prototype.forceUpdate=function(m){this.updater.enqueueForceUpdate(this,m,"forceUpdate")};function Rt(){}Rt.prototype=ut.prototype;function at(m,M,j){this.props=m,this.context=M,this.refs=x,this.updater=j||B}var gt=at.prototype=new Rt;gt.constructor=at,X(gt,ut.prototype),gt.isPureReactComponent=!0;var At=Array.isArray;function Ot(){}var w={H:null,A:null,T:null,S:null},Yt=Object.prototype.hasOwnProperty;function $t(m,M,j){var Y=j.ref;return{$$typeof:c,type:m,key:M,ref:Y!==void 0?Y:null,props:j}}function Ll(m,M){return $t(m.type,M,m.props)}function fl(m){return typeof m=="object"&&m!==null&&m.$$typeof===c}function jt(m){var M={"=":"=0",":":"=2"};return"$"+m.replace(/[=:]/g,function(j){return M[j]})}var sl=/\/+/g;function Gt(m,M){return typeof m=="object"&&m!==null&&m.key!=null?jt(""+m.key):M.toString(36)}function It(m){switch(m.status){case"fulfilled":return m.value;case"rejected":throw m.reason;default:switch(typeof m.status=="string"?m.then(Ot,Ot):(m.status="pending",m.then(function(M){m.status==="pending"&&(m.status="fulfilled",m.value=M)},function(M){m.status==="pending"&&(m.status="rejected",m.reason=M)})),m.status){case"fulfilled":return m.value;case"rejected":throw m.reason}}throw m}function z(m,M,j,Y,J){var I=typeof m;(I==="undefined"||I==="boolean")&&(m=null);var rt=!1;if(m===null)rt=!0;else switch(I){case"bigint":case"string":case"number":rt=!0;break;case"object":switch(m.$$typeof){case c:case f:rt=!0;break;case U:return rt=m._init,z(rt(m._payload),M,j,Y,J)}}if(rt)return J=J(m),rt=Y===""?"."+Gt(m,0):Y,At(J)?(j="",rt!=null&&(j=rt.replace(sl,"$&/")+"/"),z(J,M,j,"",function(Ya){return Ya})):J!=null&&(fl(J)&&(J=Ll(J,j+(J.key==null||m&&m.key===J.key?"":(""+J.key).replace(sl,"$&/")+"/")+rt)),M.push(J)),1;rt=0;var Wt=Y===""?".":Y+":";if(At(m))for(var Ut=0;Ut>>1,dt=z[ft];if(0>>1;ftd(j,Q))Yd(J,j)?(z[ft]=J,z[Y]=Q,ft=Y):(z[ft]=j,z[M]=Q,ft=M);else if(Yd(J,Q))z[ft]=J,z[Y]=Q,ft=Y;else break t}}return q}function d(z,q){var Q=z.sortIndex-q.sortIndex;return Q!==0?Q:z.id-q.id}if(c.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var v=performance;c.unstable_now=function(){return v.now()}}else{var S=Date,_=S.now();c.unstable_now=function(){return S.now()-_}}var N=[],g=[],U=1,H=null,V=3,ot=!1,B=!1,X=!1,x=!1,ut=typeof setTimeout=="function"?setTimeout:null,Rt=typeof clearTimeout=="function"?clearTimeout:null,at=typeof setImmediate<"u"?setImmediate:null;function gt(z){for(var q=r(g);q!==null;){if(q.callback===null)s(g);else if(q.startTime<=z)s(g),q.sortIndex=q.expirationTime,f(N,q);else break;q=r(g)}}function At(z){if(X=!1,gt(z),!B)if(r(N)!==null)B=!0,Ot||(Ot=!0,jt());else{var q=r(g);q!==null&&It(At,q.startTime-z)}}var Ot=!1,w=-1,Yt=5,$t=-1;function Ll(){return x?!0:!(c.unstable_now()-$tz&&Ll());){var ft=H.callback;if(typeof ft=="function"){H.callback=null,V=H.priorityLevel;var dt=ft(H.expirationTime<=z);if(z=c.unstable_now(),typeof dt=="function"){H.callback=dt,gt(z),q=!0;break l}H===r(N)&&s(N),gt(z)}else s(N);H=r(N)}if(H!==null)q=!0;else{var m=r(g);m!==null&&It(At,m.startTime-z),q=!1}}break t}finally{H=null,V=Q,ot=!1}q=void 0}}finally{q?jt():Ot=!1}}}var jt;if(typeof at=="function")jt=function(){at(fl)};else if(typeof MessageChannel<"u"){var sl=new MessageChannel,Gt=sl.port2;sl.port1.onmessage=fl,jt=function(){Gt.postMessage(null)}}else jt=function(){ut(fl,0)};function It(z,q){w=ut(function(){z(c.unstable_now())},q)}c.unstable_IdlePriority=5,c.unstable_ImmediatePriority=1,c.unstable_LowPriority=4,c.unstable_NormalPriority=3,c.unstable_Profiling=null,c.unstable_UserBlockingPriority=2,c.unstable_cancelCallback=function(z){z.callback=null},c.unstable_forceFrameRate=function(z){0>z||125ft?(z.sortIndex=Q,f(g,z),r(N)===null&&z===r(g)&&(X?(Rt(w),w=-1):X=!0,It(At,Q-ft))):(z.sortIndex=dt,f(N,z),B||ot||(B=!0,Ot||(Ot=!0,jt()))),z},c.unstable_shouldYield=Ll,c.unstable_wrapCallback=function(z){var q=V;return function(){var Q=V;V=q;try{return z.apply(this,arguments)}finally{V=Q}}}})(xf)),xf}var ih;function R0(){return ih||(ih=1,jf.exports=_0()),jf.exports}var Yf={exports:{}},Jt={};/** + * @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 ch;function U0(){if(ch)return Jt;ch=1;var c=Jf();function f(N){var g="https://react.dev/errors/"+N;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(c)}catch(f){console.error(f)}}return c(),Yf.exports=U0(),Yf.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 sh;function M0(){if(sh)return Hn;sh=1;var c=R0(),f=Jf(),r=D0();function s(t){var l="https://react.dev/errors/"+t;if(1dt||(t.current=ft[dt],ft[dt]=null,dt--)}function j(t,l){dt++,ft[dt]=t.current,t.current=l}var Y=m(null),J=m(null),I=m(null),rt=m(null);function Wt(t,l){switch(j(I,l),j(J,t),j(Y,null),l.nodeType){case 9:case 11:t=(t=l.documentElement)&&(t=t.namespaceURI)?Od(t):0;break;default:if(t=l.tagName,l=l.namespaceURI)l=Od(l),t=zd(l,t);else switch(t){case"svg":t=1;break;case"math":t=2;break;default:t=0}}M(Y),j(Y,t)}function Ut(){M(Y),M(J),M(I)}function Ya(t){t.memoizedState!==null&&j(rt,t);var l=Y.current,e=zd(l,t.type);l!==e&&(j(J,t),j(Y,e))}function Xn(t){J.current===t&&(M(Y),M(J)),rt.current===t&&(M(rt),Un._currentValue=Q)}var mi,Pf;function De(t){if(mi===void 0)try{throw Error()}catch(e){var l=e.stack.trim().match(/\n( *(at )?)/);mi=l&&l[1]||"",Pf=-1)":-1n||h[a]!==E[n]){var R=` +`+h[a].replace(" at new "," at ");return t.displayName&&R.includes("")&&(R=R.replace("",t.displayName)),R}while(1<=a&&0<=n);break}}}finally{yi=!1,Error.prepareStackTrace=e}return(e=t?t.displayName||t.name:"")?De(e):""}function tm(t,l){switch(t.tag){case 26:case 27:case 5:return De(t.type);case 16:return De("Lazy");case 13:return t.child!==l&&l!==null?De("Suspense Fallback"):De("Suspense");case 19:return De("SuspenseList");case 0:case 15:return vi(t.type,!1);case 11:return vi(t.type.render,!1);case 1:return vi(t.type,!0);case 31:return De("Activity");default:return""}}function ts(t){try{var l="",e=null;do l+=tm(t,e),e=t,t=t.return;while(t);return l}catch(a){return` +Error generating stack: `+a.message+` +`+a.stack}}var Si=Object.prototype.hasOwnProperty,gi=c.unstable_scheduleCallback,bi=c.unstable_cancelCallback,lm=c.unstable_shouldYield,em=c.unstable_requestPaint,ol=c.unstable_now,am=c.unstable_getCurrentPriorityLevel,ls=c.unstable_ImmediatePriority,es=c.unstable_UserBlockingPriority,Gn=c.unstable_NormalPriority,nm=c.unstable_LowPriority,as=c.unstable_IdlePriority,um=c.log,im=c.unstable_setDisableYieldValue,La=null,rl=null;function ne(t){if(typeof um=="function"&&im(t),rl&&typeof rl.setStrictMode=="function")try{rl.setStrictMode(La,t)}catch{}}var dl=Math.clz32?Math.clz32:sm,cm=Math.log,fm=Math.LN2;function sm(t){return t>>>=0,t===0?32:31-(cm(t)/fm|0)|0}var Qn=256,Zn=262144,Vn=4194304;function Me(t){var l=t&42;if(l!==0)return l;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 Kn(t,l,e){var a=t.pendingLanes;if(a===0)return 0;var n=0,u=t.suspendedLanes,i=t.pingedLanes;t=t.warmLanes;var o=a&134217727;return o!==0?(a=o&~u,a!==0?n=Me(a):(i&=o,i!==0?n=Me(i):e||(e=o&~t,e!==0&&(n=Me(e))))):(o=a&~u,o!==0?n=Me(o):i!==0?n=Me(i):e||(e=a&~t,e!==0&&(n=Me(e)))),n===0?0:l!==0&&l!==n&&(l&u)===0&&(u=n&-n,e=l&-l,u>=e||u===32&&(e&4194048)!==0)?l:n}function Xa(t,l){return(t.pendingLanes&~(t.suspendedLanes&~t.pingedLanes)&l)===0}function om(t,l){switch(t){case 1:case 2:case 4:case 8:case 64:return l+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 l+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 ns(){var t=Vn;return Vn<<=1,(Vn&62914560)===0&&(Vn=4194304),t}function pi(t){for(var l=[],e=0;31>e;e++)l.push(t);return l}function Ga(t,l){t.pendingLanes|=l,l!==268435456&&(t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0)}function rm(t,l,e,a,n,u){var i=t.pendingLanes;t.pendingLanes=e,t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0,t.expiredLanes&=e,t.entangledLanes&=e,t.errorRecoveryDisabledLanes&=e,t.shellSuspendCounter=0;var o=t.entanglements,h=t.expirationTimes,E=t.hiddenUpdates;for(e=i&~e;0"u")return null;try{return t.activeElement||t.body}catch{return t.body}}var Sm=/[\n"\\]/g;function El(t){return t.replace(Sm,function(l){return"\\"+l.charCodeAt(0).toString(16)+" "})}function _i(t,l,e,a,n,u,i,o){t.name="",i!=null&&typeof i!="function"&&typeof i!="symbol"&&typeof i!="boolean"?t.type=i:t.removeAttribute("type"),l!=null?i==="number"?(l===0&&t.value===""||t.value!=l)&&(t.value=""+pl(l)):t.value!==""+pl(l)&&(t.value=""+pl(l)):i!=="submit"&&i!=="reset"||t.removeAttribute("value"),l!=null?Ri(t,i,pl(l)):e!=null?Ri(t,i,pl(e)):a!=null&&t.removeAttribute("value"),n==null&&u!=null&&(t.defaultChecked=!!u),n!=null&&(t.checked=n&&typeof n!="function"&&typeof n!="symbol"),o!=null&&typeof o!="function"&&typeof o!="symbol"&&typeof o!="boolean"?t.name=""+pl(o):t.removeAttribute("name")}function Ss(t,l,e,a,n,u,i,o){if(u!=null&&typeof u!="function"&&typeof u!="symbol"&&typeof u!="boolean"&&(t.type=u),l!=null||e!=null){if(!(u!=="submit"&&u!=="reset"||l!=null)){zi(t);return}e=e!=null?""+pl(e):"",l=l!=null?""+pl(l):e,o||l===t.value||(t.value=l),t.defaultValue=l}a=a??n,a=typeof a!="function"&&typeof a!="symbol"&&!!a,t.checked=o?t.checked:!!a,t.defaultChecked=!!a,i!=null&&typeof i!="function"&&typeof i!="symbol"&&typeof i!="boolean"&&(t.name=i),zi(t)}function Ri(t,l,e){l==="number"&&Fn(t.ownerDocument)===t||t.defaultValue===""+e||(t.defaultValue=""+e)}function ea(t,l,e,a){if(t=t.options,l){l={};for(var n=0;n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Ci=!1;if(Ql)try{var Ka={};Object.defineProperty(Ka,"passive",{get:function(){Ci=!0}}),window.addEventListener("test",Ka,Ka),window.removeEventListener("test",Ka,Ka)}catch{Ci=!1}var ie=null,Hi=null,Wn=null;function Os(){if(Wn)return Wn;var t,l=Hi,e=l.length,a,n="value"in ie?ie.value:ie.textContent,u=n.length;for(t=0;t=Fa),Ms=" ",Ns=!1;function Cs(t,l){switch(t){case"keyup":return Km.indexOf(l.keyCode)!==-1;case"keydown":return l.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Hs(t){return t=t.detail,typeof t=="object"&&"data"in t?t.data:null}var ia=!1;function Jm(t,l){switch(t){case"compositionend":return Hs(l);case"keypress":return l.which!==32?null:(Ns=!0,Ms);case"textInput":return t=l.data,t===Ms&&Ns?null:t;default:return null}}function Fm(t,l){if(ia)return t==="compositionend"||!Yi&&Cs(t,l)?(t=Os(),Wn=Hi=ie=null,ia=!1,t):null;switch(t){case"paste":return null;case"keypress":if(!(l.ctrlKey||l.altKey||l.metaKey)||l.ctrlKey&&l.altKey){if(l.char&&1=l)return{node:e,offset:l-t};t=a}t:{for(;e;){if(e.nextSibling){e=e.nextSibling;break t}e=e.parentNode}e=void 0}e=Gs(e)}}function Zs(t,l){return t&&l?t===l?!0:t&&t.nodeType===3?!1:l&&l.nodeType===3?Zs(t,l.parentNode):"contains"in t?t.contains(l):t.compareDocumentPosition?!!(t.compareDocumentPosition(l)&16):!1:!1}function Vs(t){t=t!=null&&t.ownerDocument!=null&&t.ownerDocument.defaultView!=null?t.ownerDocument.defaultView:window;for(var l=Fn(t.document);l instanceof t.HTMLIFrameElement;){try{var e=typeof l.contentWindow.location.href=="string"}catch{e=!1}if(e)t=l.contentWindow;else break;l=Fn(t.document)}return l}function Gi(t){var l=t&&t.nodeName&&t.nodeName.toLowerCase();return l&&(l==="input"&&(t.type==="text"||t.type==="search"||t.type==="tel"||t.type==="url"||t.type==="password")||l==="textarea"||t.contentEditable==="true")}var ey=Ql&&"documentMode"in document&&11>=document.documentMode,ca=null,Qi=null,Ia=null,Zi=!1;function Ks(t,l,e){var a=e.window===e?e.document:e.nodeType===9?e:e.ownerDocument;Zi||ca==null||ca!==Fn(a)||(a=ca,"selectionStart"in a&&Gi(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}),Ia&&ka(Ia,a)||(Ia=a,a=Zu(Qi,"onSelect"),0>=i,n-=i,Bl=1<<32-dl(l)+n|e<k?(et=G,G=null):et=G.sibling;var ct=T(b,G,p[k],D);if(ct===null){G===null&&(G=et);break}t&&G&&ct.alternate===null&&l(b,G),y=u(ct,y,k),it===null?Z=ct:it.sibling=ct,it=ct,G=et}if(k===p.length)return e(b,G),nt&&Vl(b,k),Z;if(G===null){for(;kk?(et=G,G=null):et=G.sibling;var Ue=T(b,G,ct.value,D);if(Ue===null){G===null&&(G=et);break}t&&G&&Ue.alternate===null&&l(b,G),y=u(Ue,y,k),it===null?Z=Ue:it.sibling=Ue,it=Ue,G=et}if(ct.done)return e(b,G),nt&&Vl(b,k),Z;if(G===null){for(;!ct.done;k++,ct=p.next())ct=C(b,ct.value,D),ct!==null&&(y=u(ct,y,k),it===null?Z=ct:it.sibling=ct,it=ct);return nt&&Vl(b,k),Z}for(G=a(G);!ct.done;k++,ct=p.next())ct=O(G,b,k,ct.value,D),ct!==null&&(t&&ct.alternate!==null&&G.delete(ct.key===null?k:ct.key),y=u(ct,y,k),it===null?Z=ct:it.sibling=ct,it=ct);return t&&G.forEach(function(T0){return l(b,T0)}),nt&&Vl(b,k),Z}function St(b,y,p,D){if(typeof p=="object"&&p!==null&&p.type===X&&p.key===null&&(p=p.props.children),typeof p=="object"&&p!==null){switch(p.$$typeof){case ot:t:{for(var Z=p.key;y!==null;){if(y.key===Z){if(Z=p.type,Z===X){if(y.tag===7){e(b,y.sibling),D=n(y,p.props.children),D.return=b,b=D;break t}}else if(y.elementType===Z||typeof Z=="object"&&Z!==null&&Z.$$typeof===Yt&&Ge(Z)===y.type){e(b,y.sibling),D=n(y,p.props),nn(D,p),D.return=b,b=D;break t}e(b,y);break}else l(b,y);y=y.sibling}p.type===X?(D=je(p.props.children,b.mode,D,p.key),D.return=b,b=D):(D=iu(p.type,p.key,p.props,null,b.mode,D),nn(D,p),D.return=b,b=D)}return i(b);case B:t:{for(Z=p.key;y!==null;){if(y.key===Z)if(y.tag===4&&y.stateNode.containerInfo===p.containerInfo&&y.stateNode.implementation===p.implementation){e(b,y.sibling),D=n(y,p.children||[]),D.return=b,b=D;break t}else{e(b,y);break}else l(b,y);y=y.sibling}D=Wi(p,b.mode,D),D.return=b,b=D}return i(b);case Yt:return p=Ge(p),St(b,y,p,D)}if(It(p))return L(b,y,p,D);if(jt(p)){if(Z=jt(p),typeof Z!="function")throw Error(s(150));return p=Z.call(p),K(b,y,p,D)}if(typeof p.then=="function")return St(b,y,hu(p),D);if(p.$$typeof===at)return St(b,y,su(b,p),D);mu(b,p)}return typeof p=="string"&&p!==""||typeof p=="number"||typeof p=="bigint"?(p=""+p,y!==null&&y.tag===6?(e(b,y.sibling),D=n(y,p),D.return=b,b=D):(e(b,y),D=$i(p,b.mode,D),D.return=b,b=D),i(b)):e(b,y)}return function(b,y,p,D){try{an=0;var Z=St(b,y,p,D);return ga=null,Z}catch(G){if(G===Sa||G===ru)throw G;var it=ml(29,G,null,b.mode);return it.lanes=D,it.return=b,it}finally{}}}var Ze=yo(!0),vo=yo(!1),re=!1;function fc(t){t.updateQueue={baseState:t.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function sc(t,l){t=t.updateQueue,l.updateQueue===t&&(l.updateQueue={baseState:t.baseState,firstBaseUpdate:t.firstBaseUpdate,lastBaseUpdate:t.lastBaseUpdate,shared:t.shared,callbacks:null})}function de(t){return{lane:t,tag:0,payload:null,callback:null,next:null}}function he(t,l,e){var a=t.updateQueue;if(a===null)return null;if(a=a.shared,(st&2)!==0){var n=a.pending;return n===null?l.next=l:(l.next=n.next,n.next=l),a.pending=l,l=uu(t),Is(t,null,e),l}return nu(t,a,l,e),uu(t)}function un(t,l,e){if(l=l.updateQueue,l!==null&&(l=l.shared,(e&4194048)!==0)){var a=l.lanes;a&=t.pendingLanes,e|=a,l.lanes=e,is(t,e)}}function oc(t,l){var e=t.updateQueue,a=t.alternate;if(a!==null&&(a=a.updateQueue,e===a)){var n=null,u=null;if(e=e.firstBaseUpdate,e!==null){do{var i={lane:e.lane,tag:e.tag,payload:e.payload,callback:null,next:null};u===null?n=u=i:u=u.next=i,e=e.next}while(e!==null);u===null?n=u=l:u=u.next=l}else n=u=l;e={baseState:a.baseState,firstBaseUpdate:n,lastBaseUpdate:u,shared:a.shared,callbacks:a.callbacks},t.updateQueue=e;return}t=e.lastBaseUpdate,t===null?e.firstBaseUpdate=l:t.next=l,e.lastBaseUpdate=l}var rc=!1;function cn(){if(rc){var t=va;if(t!==null)throw t}}function fn(t,l,e,a){rc=!1;var n=t.updateQueue;re=!1;var u=n.firstBaseUpdate,i=n.lastBaseUpdate,o=n.shared.pending;if(o!==null){n.shared.pending=null;var h=o,E=h.next;h.next=null,i===null?u=E:i.next=E,i=h;var R=t.alternate;R!==null&&(R=R.updateQueue,o=R.lastBaseUpdate,o!==i&&(o===null?R.firstBaseUpdate=E:o.next=E,R.lastBaseUpdate=h))}if(u!==null){var C=n.baseState;i=0,R=E=h=null,o=u;do{var T=o.lane&-536870913,O=T!==o.lane;if(O?(lt&T)===T:(a&T)===T){T!==0&&T===ya&&(rc=!0),R!==null&&(R=R.next={lane:0,tag:o.tag,payload:o.payload,callback:null,next:null});t:{var L=t,K=o;T=l;var St=e;switch(K.tag){case 1:if(L=K.payload,typeof L=="function"){C=L.call(St,C,T);break t}C=L;break t;case 3:L.flags=L.flags&-65537|128;case 0:if(L=K.payload,T=typeof L=="function"?L.call(St,C,T):L,T==null)break t;C=H({},C,T);break t;case 2:re=!0}}T=o.callback,T!==null&&(t.flags|=64,O&&(t.flags|=8192),O=n.callbacks,O===null?n.callbacks=[T]:O.push(T))}else O={lane:T,tag:o.tag,payload:o.payload,callback:o.callback,next:null},R===null?(E=R=O,h=C):R=R.next=O,i|=T;if(o=o.next,o===null){if(o=n.shared.pending,o===null)break;O=o,o=O.next,O.next=null,n.lastBaseUpdate=O,n.shared.pending=null}}while(!0);R===null&&(h=C),n.baseState=h,n.firstBaseUpdate=E,n.lastBaseUpdate=R,u===null&&(n.shared.lanes=0),ge|=i,t.lanes=i,t.memoizedState=C}}function So(t,l){if(typeof t!="function")throw Error(s(191,t));t.call(l)}function go(t,l){var e=t.callbacks;if(e!==null)for(t.callbacks=null,t=0;tu?u:8;var i=z.T,o={};z.T=o,Mc(t,!1,l,e);try{var h=n(),E=z.S;if(E!==null&&E(o,h),h!==null&&typeof h=="object"&&typeof h.then=="function"){var R=ry(h,a);rn(t,l,R,bl(t))}else rn(t,l,a,bl(t))}catch(C){rn(t,l,{then:function(){},status:"rejected",reason:C},bl())}finally{q.p=u,i!==null&&o.types!==null&&(i.types=o.types),z.T=i}}function Sy(){}function Uc(t,l,e,a){if(t.tag!==5)throw Error(s(476));var n=Wo(t).queue;$o(t,n,l,Q,e===null?Sy:function(){return ko(t),e(a)})}function Wo(t){var l=t.memoizedState;if(l!==null)return l;l={memoizedState:Q,baseState:Q,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Fl,lastRenderedState:Q},next:null};var e={};return l.next={memoizedState:e,baseState:e,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Fl,lastRenderedState:e},next:null},t.memoizedState=l,t=t.alternate,t!==null&&(t.memoizedState=l),l}function ko(t){var l=Wo(t);l.next===null&&(l=t.alternate.memoizedState),rn(t,l.next.queue,{},bl())}function Dc(){return Vt(Un)}function Io(){return Mt().memoizedState}function Po(){return Mt().memoizedState}function gy(t){for(var l=t.return;l!==null;){switch(l.tag){case 24:case 3:var e=bl();t=de(e);var a=he(l,t,e);a!==null&&(ul(a,l,e),un(a,l,e)),l={cache:nc()},t.payload=l;return}l=l.return}}function by(t,l,e){var a=bl();e={lane:a,revertLane:0,gesture:null,action:e,hasEagerState:!1,eagerState:null,next:null},Ou(t)?lr(l,e):(e=Ji(t,l,e,a),e!==null&&(ul(e,t,a),er(e,l,a)))}function tr(t,l,e){var a=bl();rn(t,l,e,a)}function rn(t,l,e,a){var n={lane:a,revertLane:0,gesture:null,action:e,hasEagerState:!1,eagerState:null,next:null};if(Ou(t))lr(l,n);else{var u=t.alternate;if(t.lanes===0&&(u===null||u.lanes===0)&&(u=l.lastRenderedReducer,u!==null))try{var i=l.lastRenderedState,o=u(i,e);if(n.hasEagerState=!0,n.eagerState=o,hl(o,i))return nu(t,l,n,0),bt===null&&au(),!1}catch{}finally{}if(e=Ji(t,l,n,a),e!==null)return ul(e,t,a),er(e,l,a),!0}return!1}function Mc(t,l,e,a){if(a={lane:2,revertLane:sf(),gesture:null,action:a,hasEagerState:!1,eagerState:null,next:null},Ou(t)){if(l)throw Error(s(479))}else l=Ji(t,e,a,2),l!==null&&ul(l,t,2)}function Ou(t){var l=t.alternate;return t===$||l!==null&&l===$}function lr(t,l){pa=Su=!0;var e=t.pending;e===null?l.next=l:(l.next=e.next,e.next=l),t.pending=l}function er(t,l,e){if((e&4194048)!==0){var a=l.lanes;a&=t.pendingLanes,e|=a,l.lanes=e,is(t,e)}}var dn={readContext:Vt,use:pu,useCallback:zt,useContext:zt,useEffect:zt,useImperativeHandle:zt,useLayoutEffect:zt,useInsertionEffect:zt,useMemo:zt,useReducer:zt,useRef:zt,useState:zt,useDebugValue:zt,useDeferredValue:zt,useTransition:zt,useSyncExternalStore:zt,useId:zt,useHostTransitionStatus:zt,useFormState:zt,useActionState:zt,useOptimistic:zt,useMemoCache:zt,useCacheRefresh:zt};dn.useEffectEvent=zt;var ar={readContext:Vt,use:pu,useCallback:function(t,l){return kt().memoizedState=[t,l===void 0?null:l],t},useContext:Vt,useEffect:Xo,useImperativeHandle:function(t,l,e){e=e!=null?e.concat([t]):null,Tu(4194308,4,Vo.bind(null,l,t),e)},useLayoutEffect:function(t,l){return Tu(4194308,4,t,l)},useInsertionEffect:function(t,l){Tu(4,2,t,l)},useMemo:function(t,l){var e=kt();l=l===void 0?null:l;var a=t();if(Ve){ne(!0);try{t()}finally{ne(!1)}}return e.memoizedState=[a,l],a},useReducer:function(t,l,e){var a=kt();if(e!==void 0){var n=e(l);if(Ve){ne(!0);try{e(l)}finally{ne(!1)}}}else n=l;return a.memoizedState=a.baseState=n,t={pending:null,lanes:0,dispatch:null,lastRenderedReducer:t,lastRenderedState:n},a.queue=t,t=t.dispatch=by.bind(null,$,t),[a.memoizedState,t]},useRef:function(t){var l=kt();return t={current:t},l.memoizedState=t},useState:function(t){t=Ac(t);var l=t.queue,e=tr.bind(null,$,l);return l.dispatch=e,[t.memoizedState,e]},useDebugValue:_c,useDeferredValue:function(t,l){var e=kt();return Rc(e,t,l)},useTransition:function(){var t=Ac(!1);return t=$o.bind(null,$,t.queue,!0,!1),kt().memoizedState=t,[!1,t]},useSyncExternalStore:function(t,l,e){var a=$,n=kt();if(nt){if(e===void 0)throw Error(s(407));e=e()}else{if(e=l(),bt===null)throw Error(s(349));(lt&127)!==0||Oo(a,l,e)}n.memoizedState=e;var u={value:e,getSnapshot:l};return n.queue=u,Xo(_o.bind(null,a,u,t),[t]),a.flags|=2048,Ta(9,{destroy:void 0},zo.bind(null,a,u,e,l),null),e},useId:function(){var t=kt(),l=bt.identifierPrefix;if(nt){var e=ql,a=Bl;e=(a&~(1<<32-dl(a)-1)).toString(32)+e,l="_"+l+"R_"+e,e=gu++,0<\/script>",u=u.removeChild(u.firstChild);break;case"select":u=typeof a.is=="string"?i.createElement("select",{is:a.is}):i.createElement("select"),a.multiple?u.multiple=!0:a.size&&(u.size=a.size);break;default:u=typeof a.is=="string"?i.createElement(n,{is:a.is}):i.createElement(n)}}u[Qt]=l,u[Pt]=a;t:for(i=l.child;i!==null;){if(i.tag===5||i.tag===6)u.appendChild(i.stateNode);else if(i.tag!==4&&i.tag!==27&&i.child!==null){i.child.return=i,i=i.child;continue}if(i===l)break t;for(;i.sibling===null;){if(i.return===null||i.return===l)break t;i=i.return}i.sibling.return=i.return,i=i.sibling}l.stateNode=u;t:switch(wt(u,n,a),n){case"button":case"input":case"select":case"textarea":a=!!a.autoFocus;break t;case"img":a=!0;break t;default:a=!1}a&&Wl(l)}}return Et(l),Vc(l,l.type,t===null?null:t.memoizedProps,l.pendingProps,e),null;case 6:if(t&&l.stateNode!=null)t.memoizedProps!==a&&Wl(l);else{if(typeof a!="string"&&l.stateNode===null)throw Error(s(166));if(t=I.current,ha(l)){if(t=l.stateNode,e=l.memoizedProps,a=null,n=Zt,n!==null)switch(n.tag){case 27:case 5:a=n.memoizedProps}t[Qt]=l,t=!!(t.nodeValue===e||a!==null&&a.suppressHydrationWarning===!0||Td(t.nodeValue,e)),t||se(l,!0)}else t=Vu(t).createTextNode(a),t[Qt]=l,l.stateNode=t}return Et(l),null;case 31:if(e=l.memoizedState,t===null||t.memoizedState!==null){if(a=ha(l),e!==null){if(t===null){if(!a)throw Error(s(318));if(t=l.memoizedState,t=t!==null?t.dehydrated:null,!t)throw Error(s(557));t[Qt]=l}else xe(),(l.flags&128)===0&&(l.memoizedState=null),l.flags|=4;Et(l),t=!1}else e=tc(),t!==null&&t.memoizedState!==null&&(t.memoizedState.hydrationErrors=e),t=!0;if(!t)return l.flags&256?(vl(l),l):(vl(l),null);if((l.flags&128)!==0)throw Error(s(558))}return Et(l),null;case 13:if(a=l.memoizedState,t===null||t.memoizedState!==null&&t.memoizedState.dehydrated!==null){if(n=ha(l),a!==null&&a.dehydrated!==null){if(t===null){if(!n)throw Error(s(318));if(n=l.memoizedState,n=n!==null?n.dehydrated:null,!n)throw Error(s(317));n[Qt]=l}else xe(),(l.flags&128)===0&&(l.memoizedState=null),l.flags|=4;Et(l),n=!1}else n=tc(),t!==null&&t.memoizedState!==null&&(t.memoizedState.hydrationErrors=n),n=!0;if(!n)return l.flags&256?(vl(l),l):(vl(l),null)}return vl(l),(l.flags&128)!==0?(l.lanes=e,l):(e=a!==null,t=t!==null&&t.memoizedState!==null,e&&(a=l.child,n=null,a.alternate!==null&&a.alternate.memoizedState!==null&&a.alternate.memoizedState.cachePool!==null&&(n=a.alternate.memoizedState.cachePool.pool),u=null,a.memoizedState!==null&&a.memoizedState.cachePool!==null&&(u=a.memoizedState.cachePool.pool),u!==n&&(a.flags|=2048)),e!==t&&e&&(l.child.flags|=8192),Du(l,l.updateQueue),Et(l),null);case 4:return Ut(),t===null&&hf(l.stateNode.containerInfo),Et(l),null;case 10:return wl(l.type),Et(l),null;case 19:if(M(Dt),a=l.memoizedState,a===null)return Et(l),null;if(n=(l.flags&128)!==0,u=a.rendering,u===null)if(n)mn(a,!1);else{if(_t!==0||t!==null&&(t.flags&128)!==0)for(t=l.child;t!==null;){if(u=vu(t),u!==null){for(l.flags|=128,mn(a,!1),t=u.updateQueue,l.updateQueue=t,Du(l,t),l.subtreeFlags=0,t=e,e=l.child;e!==null;)Ps(e,t),e=e.sibling;return j(Dt,Dt.current&1|2),nt&&Vl(l,a.treeForkCount),l.child}t=t.sibling}a.tail!==null&&ol()>Bu&&(l.flags|=128,n=!0,mn(a,!1),l.lanes=4194304)}else{if(!n)if(t=vu(u),t!==null){if(l.flags|=128,n=!0,t=t.updateQueue,l.updateQueue=t,Du(l,t),mn(a,!0),a.tail===null&&a.tailMode==="hidden"&&!u.alternate&&!nt)return Et(l),null}else 2*ol()-a.renderingStartTime>Bu&&e!==536870912&&(l.flags|=128,n=!0,mn(a,!1),l.lanes=4194304);a.isBackwards?(u.sibling=l.child,l.child=u):(t=a.last,t!==null?t.sibling=u:l.child=u,a.last=u)}return a.tail!==null?(t=a.tail,a.rendering=t,a.tail=t.sibling,a.renderingStartTime=ol(),t.sibling=null,e=Dt.current,j(Dt,n?e&1|2:e&1),nt&&Vl(l,a.treeForkCount),t):(Et(l),null);case 22:case 23:return vl(l),hc(),a=l.memoizedState!==null,t!==null?t.memoizedState!==null!==a&&(l.flags|=8192):a&&(l.flags|=8192),a?(e&536870912)!==0&&(l.flags&128)===0&&(Et(l),l.subtreeFlags&6&&(l.flags|=8192)):Et(l),e=l.updateQueue,e!==null&&Du(l,e.retryQueue),e=null,t!==null&&t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(e=t.memoizedState.cachePool.pool),a=null,l.memoizedState!==null&&l.memoizedState.cachePool!==null&&(a=l.memoizedState.cachePool.pool),a!==e&&(l.flags|=2048),t!==null&&M(Xe),null;case 24:return e=null,t!==null&&(e=t.memoizedState.cache),l.memoizedState.cache!==e&&(l.flags|=2048),wl(Ct),Et(l),null;case 25:return null;case 30:return null}throw Error(s(156,l.tag))}function Oy(t,l){switch(Ii(l),l.tag){case 1:return t=l.flags,t&65536?(l.flags=t&-65537|128,l):null;case 3:return wl(Ct),Ut(),t=l.flags,(t&65536)!==0&&(t&128)===0?(l.flags=t&-65537|128,l):null;case 26:case 27:case 5:return Xn(l),null;case 31:if(l.memoizedState!==null){if(vl(l),l.alternate===null)throw Error(s(340));xe()}return t=l.flags,t&65536?(l.flags=t&-65537|128,l):null;case 13:if(vl(l),t=l.memoizedState,t!==null&&t.dehydrated!==null){if(l.alternate===null)throw Error(s(340));xe()}return t=l.flags,t&65536?(l.flags=t&-65537|128,l):null;case 19:return M(Dt),null;case 4:return Ut(),null;case 10:return wl(l.type),null;case 22:case 23:return vl(l),hc(),t!==null&&M(Xe),t=l.flags,t&65536?(l.flags=t&-65537|128,l):null;case 24:return wl(Ct),null;case 25:return null;default:return null}}function Rr(t,l){switch(Ii(l),l.tag){case 3:wl(Ct),Ut();break;case 26:case 27:case 5:Xn(l);break;case 4:Ut();break;case 31:l.memoizedState!==null&&vl(l);break;case 13:vl(l);break;case 19:M(Dt);break;case 10:wl(l.type);break;case 22:case 23:vl(l),hc(),t!==null&&M(Xe);break;case 24:wl(Ct)}}function yn(t,l){try{var e=l.updateQueue,a=e!==null?e.lastEffect:null;if(a!==null){var n=a.next;e=n;do{if((e.tag&t)===t){a=void 0;var u=e.create,i=e.inst;a=u(),i.destroy=a}e=e.next}while(e!==n)}}catch(o){mt(l,l.return,o)}}function ve(t,l,e){try{var a=l.updateQueue,n=a!==null?a.lastEffect:null;if(n!==null){var u=n.next;a=u;do{if((a.tag&t)===t){var i=a.inst,o=i.destroy;if(o!==void 0){i.destroy=void 0,n=l;var h=e,E=o;try{E()}catch(R){mt(n,h,R)}}}a=a.next}while(a!==u)}}catch(R){mt(l,l.return,R)}}function Ur(t){var l=t.updateQueue;if(l!==null){var e=t.stateNode;try{go(l,e)}catch(a){mt(t,t.return,a)}}}function Dr(t,l,e){e.props=Ke(t.type,t.memoizedProps),e.state=t.memoizedState;try{e.componentWillUnmount()}catch(a){mt(t,l,a)}}function vn(t,l){try{var e=t.ref;if(e!==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 e=="function"?t.refCleanup=e(a):e.current=a}}catch(n){mt(t,l,n)}}function jl(t,l){var e=t.ref,a=t.refCleanup;if(e!==null)if(typeof a=="function")try{a()}catch(n){mt(t,l,n)}finally{t.refCleanup=null,t=t.alternate,t!=null&&(t.refCleanup=null)}else if(typeof e=="function")try{e(null)}catch(n){mt(t,l,n)}else e.current=null}function Mr(t){var l=t.type,e=t.memoizedProps,a=t.stateNode;try{t:switch(l){case"button":case"input":case"select":case"textarea":e.autoFocus&&a.focus();break t;case"img":e.src?a.src=e.src:e.srcSet&&(a.srcset=e.srcSet)}}catch(n){mt(t,t.return,n)}}function Kc(t,l,e){try{var a=t.stateNode;wy(a,t.type,e,l),a[Pt]=l}catch(n){mt(t,t.return,n)}}function Nr(t){return t.tag===5||t.tag===3||t.tag===26||t.tag===27&&Ae(t.type)||t.tag===4}function wc(t){t:for(;;){for(;t.sibling===null;){if(t.return===null||Nr(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&&Ae(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 Jc(t,l,e){var a=t.tag;if(a===5||a===6)t=t.stateNode,l?(e.nodeType===9?e.body:e.nodeName==="HTML"?e.ownerDocument.body:e).insertBefore(t,l):(l=e.nodeType===9?e.body:e.nodeName==="HTML"?e.ownerDocument.body:e,l.appendChild(t),e=e._reactRootContainer,e!=null||l.onclick!==null||(l.onclick=Gl));else if(a!==4&&(a===27&&Ae(t.type)&&(e=t.stateNode,l=null),t=t.child,t!==null))for(Jc(t,l,e),t=t.sibling;t!==null;)Jc(t,l,e),t=t.sibling}function Mu(t,l,e){var a=t.tag;if(a===5||a===6)t=t.stateNode,l?e.insertBefore(t,l):e.appendChild(t);else if(a!==4&&(a===27&&Ae(t.type)&&(e=t.stateNode),t=t.child,t!==null))for(Mu(t,l,e),t=t.sibling;t!==null;)Mu(t,l,e),t=t.sibling}function Cr(t){var l=t.stateNode,e=t.memoizedProps;try{for(var a=t.type,n=l.attributes;n.length;)l.removeAttributeNode(n[0]);wt(l,a,e),l[Qt]=t,l[Pt]=e}catch(u){mt(t,t.return,u)}}var kl=!1,qt=!1,Fc=!1,Hr=typeof WeakSet=="function"?WeakSet:Set,Xt=null;function zy(t,l){if(t=t.containerInfo,vf=ku,t=Vs(t),Gi(t)){if("selectionStart"in t)var e={start:t.selectionStart,end:t.selectionEnd};else t:{e=(e=t.ownerDocument)&&e.defaultView||window;var a=e.getSelection&&e.getSelection();if(a&&a.rangeCount!==0){e=a.anchorNode;var n=a.anchorOffset,u=a.focusNode;a=a.focusOffset;try{e.nodeType,u.nodeType}catch{e=null;break t}var i=0,o=-1,h=-1,E=0,R=0,C=t,T=null;l:for(;;){for(var O;C!==e||n!==0&&C.nodeType!==3||(o=i+n),C!==u||a!==0&&C.nodeType!==3||(h=i+a),C.nodeType===3&&(i+=C.nodeValue.length),(O=C.firstChild)!==null;)T=C,C=O;for(;;){if(C===t)break l;if(T===e&&++E===n&&(o=i),T===u&&++R===a&&(h=i),(O=C.nextSibling)!==null)break;C=T,T=C.parentNode}C=O}e=o===-1||h===-1?null:{start:o,end:h}}else e=null}e=e||{start:0,end:0}}else e=null;for(Sf={focusedElem:t,selectionRange:e},ku=!1,Xt=l;Xt!==null;)if(l=Xt,t=l.child,(l.subtreeFlags&1028)!==0&&t!==null)t.return=l,Xt=t;else for(;Xt!==null;){switch(l=Xt,u=l.alternate,t=l.flags,l.tag){case 0:if((t&4)!==0&&(t=l.updateQueue,t=t!==null?t.events:null,t!==null))for(e=0;e title"))),wt(u,a,e),u[Qt]=t,Lt(u),a=u;break t;case"link":var i=Ld("link","href",n).get(a+(e.href||""));if(i){for(var o=0;oSt&&(i=St,St=K,K=i);var b=Qs(o,K),y=Qs(o,St);if(b&&y&&(O.rangeCount!==1||O.anchorNode!==b.node||O.anchorOffset!==b.offset||O.focusNode!==y.node||O.focusOffset!==y.offset)){var p=C.createRange();p.setStart(b.node,b.offset),O.removeAllRanges(),K>St?(O.addRange(p),O.extend(y.node,y.offset)):(p.setEnd(y.node,y.offset),O.addRange(p))}}}}for(C=[],O=o;O=O.parentNode;)O.nodeType===1&&C.push({element:O,left:O.scrollLeft,top:O.scrollTop});for(typeof o.focus=="function"&&o.focus(),o=0;oe?32:e,z.T=null,e=lf,lf=null;var u=pe,i=ee;if(xt=0,Ra=pe=null,ee=0,(st&6)!==0)throw Error(s(331));var o=st;if(st|=4,Vr(u.current),Gr(u,u.current,i,e),st=o,Tn(0,!1),rl&&typeof rl.onPostCommitFiberRoot=="function")try{rl.onPostCommitFiberRoot(La,u)}catch{}return!0}finally{q.p=n,z.T=a,fd(t,l)}}function od(t,l,e){l=Al(e,l),l=Bc(t.stateNode,l,2),t=he(t,l,2),t!==null&&(Ga(t,2),xl(t))}function mt(t,l,e){if(t.tag===3)od(t,t,e);else for(;l!==null;){if(l.tag===3){od(l,t,e);break}else if(l.tag===1){var a=l.stateNode;if(typeof l.type.getDerivedStateFromError=="function"||typeof a.componentDidCatch=="function"&&(be===null||!be.has(a))){t=Al(e,t),e=rr(2),a=he(l,e,2),a!==null&&(dr(e,a,l,t),Ga(a,2),xl(a));break}}l=l.return}}function uf(t,l,e){var a=t.pingCache;if(a===null){a=t.pingCache=new Uy;var n=new Set;a.set(l,n)}else n=a.get(l),n===void 0&&(n=new Set,a.set(l,n));n.has(e)||(kc=!0,n.add(e),t=Hy.bind(null,t,l,e),l.then(t,t))}function Hy(t,l,e){var a=t.pingCache;a!==null&&a.delete(l),t.pingedLanes|=t.suspendedLanes&e,t.warmLanes&=~e,bt===t&&(lt&e)===e&&(_t===4||_t===3&&(lt&62914560)===lt&&300>ol()-Hu?(st&2)===0&&Ua(t,0):Ic|=e,_a===lt&&(_a=0)),xl(t)}function rd(t,l){l===0&&(l=ns()),t=qe(t,l),t!==null&&(Ga(t,l),xl(t))}function By(t){var l=t.memoizedState,e=0;l!==null&&(e=l.retryLane),rd(t,e)}function qy(t,l){var e=0;switch(t.tag){case 31:case 13:var a=t.stateNode,n=t.memoizedState;n!==null&&(e=n.retryLane);break;case 19:a=t.stateNode;break;case 22:a=t.stateNode._retryCache;break;default:throw Error(s(314))}a!==null&&a.delete(l),rd(t,e)}function jy(t,l){return gi(t,l)}var Xu=null,Ma=null,cf=!1,Gu=!1,ff=!1,Te=0;function xl(t){t!==Ma&&t.next===null&&(Ma===null?Xu=Ma=t:Ma=Ma.next=t),Gu=!0,cf||(cf=!0,Yy())}function Tn(t,l){if(!ff&&Gu){ff=!0;do for(var e=!1,a=Xu;a!==null;){if(t!==0){var n=a.pendingLanes;if(n===0)var u=0;else{var i=a.suspendedLanes,o=a.pingedLanes;u=(1<<31-dl(42|t)+1)-1,u&=n&~(i&~o),u=u&201326741?u&201326741|1:u?u|2:0}u!==0&&(e=!0,yd(a,u))}else u=lt,u=Kn(a,a===bt?u:0,a.cancelPendingCommit!==null||a.timeoutHandle!==-1),(u&3)===0||Xa(a,u)||(e=!0,yd(a,u));a=a.next}while(e);ff=!1}}function xy(){dd()}function dd(){Gu=cf=!1;var t=0;Te!==0&&Fy()&&(t=Te);for(var l=ol(),e=null,a=Xu;a!==null;){var n=a.next,u=hd(a,l);u===0?(a.next=null,e===null?Xu=n:e.next=n,n===null&&(Ma=e)):(e=a,(t!==0||(u&3)!==0)&&(Gu=!0)),a=n}xt!==0&&xt!==5||Tn(t),Te!==0&&(Te=0)}function hd(t,l){for(var e=t.suspendedLanes,a=t.pingedLanes,n=t.expirationTimes,u=t.pendingLanes&-62914561;0o)break;var R=h.transferSize,C=h.initiatorType;R&&Ad(C)&&(h=h.responseEnd,i+=R*(h"u"?null:document;function qd(t,l,e){var a=Na;if(a&&typeof l=="string"&&l){var n=El(l);n='link[rel="'+t+'"][href="'+n+'"]',typeof e=="string"&&(n+='[crossorigin="'+e+'"]'),Bd.has(n)||(Bd.add(n),t={rel:t,crossOrigin:e,href:l},a.querySelector(n)===null&&(l=a.createElement("link"),wt(l,"link",t),Lt(l),a.head.appendChild(l)))}}function a0(t){ae.D(t),qd("dns-prefetch",t,null)}function n0(t,l){ae.C(t,l),qd("preconnect",t,l)}function u0(t,l,e){ae.L(t,l,e);var a=Na;if(a&&t&&l){var n='link[rel="preload"][as="'+El(l)+'"]';l==="image"&&e&&e.imageSrcSet?(n+='[imagesrcset="'+El(e.imageSrcSet)+'"]',typeof e.imageSizes=="string"&&(n+='[imagesizes="'+El(e.imageSizes)+'"]')):n+='[href="'+El(t)+'"]';var u=n;switch(l){case"style":u=Ca(t);break;case"script":u=Ha(t)}Dl.has(u)||(t=H({rel:"preload",href:l==="image"&&e&&e.imageSrcSet?void 0:t,as:l},e),Dl.set(u,t),a.querySelector(n)!==null||l==="style"&&a.querySelector(_n(u))||l==="script"&&a.querySelector(Rn(u))||(l=a.createElement("link"),wt(l,"link",t),Lt(l),a.head.appendChild(l)))}}function i0(t,l){ae.m(t,l);var e=Na;if(e&&t){var a=l&&typeof l.as=="string"?l.as:"script",n='link[rel="modulepreload"][as="'+El(a)+'"][href="'+El(t)+'"]',u=n;switch(a){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":u=Ha(t)}if(!Dl.has(u)&&(t=H({rel:"modulepreload",href:t},l),Dl.set(u,t),e.querySelector(n)===null)){switch(a){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(e.querySelector(Rn(u)))return}a=e.createElement("link"),wt(a,"link",t),Lt(a),e.head.appendChild(a)}}}function c0(t,l,e){ae.S(t,l,e);var a=Na;if(a&&t){var n=ta(a).hoistableStyles,u=Ca(t);l=l||"default";var i=n.get(u);if(!i){var o={loading:0,preload:null};if(i=a.querySelector(_n(u)))o.loading=5;else{t=H({rel:"stylesheet",href:t,"data-precedence":l},e),(e=Dl.get(u))&&Of(t,e);var h=i=a.createElement("link");Lt(h),wt(h,"link",t),h._p=new Promise(function(E,R){h.onload=E,h.onerror=R}),h.addEventListener("load",function(){o.loading|=1}),h.addEventListener("error",function(){o.loading|=2}),o.loading|=4,wu(i,l,a)}i={type:"stylesheet",instance:i,count:1,state:o},n.set(u,i)}}}function f0(t,l){ae.X(t,l);var e=Na;if(e&&t){var a=ta(e).hoistableScripts,n=Ha(t),u=a.get(n);u||(u=e.querySelector(Rn(n)),u||(t=H({src:t,async:!0},l),(l=Dl.get(n))&&zf(t,l),u=e.createElement("script"),Lt(u),wt(u,"link",t),e.head.appendChild(u)),u={type:"script",instance:u,count:1,state:null},a.set(n,u))}}function s0(t,l){ae.M(t,l);var e=Na;if(e&&t){var a=ta(e).hoistableScripts,n=Ha(t),u=a.get(n);u||(u=e.querySelector(Rn(n)),u||(t=H({src:t,async:!0,type:"module"},l),(l=Dl.get(n))&&zf(t,l),u=e.createElement("script"),Lt(u),wt(u,"link",t),e.head.appendChild(u)),u={type:"script",instance:u,count:1,state:null},a.set(n,u))}}function jd(t,l,e,a){var n=(n=I.current)?Ku(n):null;if(!n)throw Error(s(446));switch(t){case"meta":case"title":return null;case"style":return typeof e.precedence=="string"&&typeof e.href=="string"?(l=Ca(e.href),e=ta(n).hoistableStyles,a=e.get(l),a||(a={type:"style",instance:null,count:0,state:null},e.set(l,a)),a):{type:"void",instance:null,count:0,state:null};case"link":if(e.rel==="stylesheet"&&typeof e.href=="string"&&typeof e.precedence=="string"){t=Ca(e.href);var u=ta(n).hoistableStyles,i=u.get(t);if(i||(n=n.ownerDocument||n,i={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},u.set(t,i),(u=n.querySelector(_n(t)))&&!u._p&&(i.instance=u,i.state.loading=5),Dl.has(t)||(e={rel:"preload",as:"style",href:e.href,crossOrigin:e.crossOrigin,integrity:e.integrity,media:e.media,hrefLang:e.hrefLang,referrerPolicy:e.referrerPolicy},Dl.set(t,e),u||o0(n,t,e,i.state))),l&&a===null)throw Error(s(528,""));return i}if(l&&a!==null)throw Error(s(529,""));return null;case"script":return l=e.async,e=e.src,typeof e=="string"&&l&&typeof l!="function"&&typeof l!="symbol"?(l=Ha(e),e=ta(n).hoistableScripts,a=e.get(l),a||(a={type:"script",instance:null,count:0,state:null},e.set(l,a)),a):{type:"void",instance:null,count:0,state:null};default:throw Error(s(444,t))}}function Ca(t){return'href="'+El(t)+'"'}function _n(t){return'link[rel="stylesheet"]['+t+"]"}function xd(t){return H({},t,{"data-precedence":t.precedence,precedence:null})}function o0(t,l,e,a){t.querySelector('link[rel="preload"][as="style"]['+l+"]")?a.loading=1:(l=t.createElement("link"),a.preload=l,l.addEventListener("load",function(){return a.loading|=1}),l.addEventListener("error",function(){return a.loading|=2}),wt(l,"link",e),Lt(l),t.head.appendChild(l))}function Ha(t){return'[src="'+El(t)+'"]'}function Rn(t){return"script[async]"+t}function Yd(t,l,e){if(l.count++,l.instance===null)switch(l.type){case"style":var a=t.querySelector('style[data-href~="'+El(e.href)+'"]');if(a)return l.instance=a,Lt(a),a;var n=H({},e,{"data-href":e.href,"data-precedence":e.precedence,href:null,precedence:null});return a=(t.ownerDocument||t).createElement("style"),Lt(a),wt(a,"style",n),wu(a,e.precedence,t),l.instance=a;case"stylesheet":n=Ca(e.href);var u=t.querySelector(_n(n));if(u)return l.state.loading|=4,l.instance=u,Lt(u),u;a=xd(e),(n=Dl.get(n))&&Of(a,n),u=(t.ownerDocument||t).createElement("link"),Lt(u);var i=u;return i._p=new Promise(function(o,h){i.onload=o,i.onerror=h}),wt(u,"link",a),l.state.loading|=4,wu(u,e.precedence,t),l.instance=u;case"script":return u=Ha(e.src),(n=t.querySelector(Rn(u)))?(l.instance=n,Lt(n),n):(a=e,(n=Dl.get(u))&&(a=H({},e),zf(a,n)),t=t.ownerDocument||t,n=t.createElement("script"),Lt(n),wt(n,"link",a),t.head.appendChild(n),l.instance=n);case"void":return null;default:throw Error(s(443,l.type))}else l.type==="stylesheet"&&(l.state.loading&4)===0&&(a=l.instance,l.state.loading|=4,wu(a,e.precedence,t));return l.instance}function wu(t,l,e){for(var a=e.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),n=a.length?a[a.length-1]:null,u=n,i=0;i title"):null)}function r0(t,l,e){if(e===1||l.itemProp!=null)return!1;switch(t){case"meta":case"title":return!0;case"style":if(typeof l.precedence!="string"||typeof l.href!="string"||l.href==="")break;return!0;case"link":if(typeof l.rel!="string"||typeof l.href!="string"||l.href===""||l.onLoad||l.onError)break;switch(l.rel){case"stylesheet":return t=l.disabled,typeof l.precedence=="string"&&t==null;default:return!0}case"script":if(l.async&&typeof l.async!="function"&&typeof l.async!="symbol"&&!l.onLoad&&!l.onError&&l.src&&typeof l.src=="string")return!0}return!1}function Gd(t){return!(t.type==="stylesheet"&&(t.state.loading&3)===0)}function d0(t,l,e,a){if(e.type==="stylesheet"&&(typeof a.media!="string"||matchMedia(a.media).matches!==!1)&&(e.state.loading&4)===0){if(e.instance===null){var n=Ca(a.href),u=l.querySelector(_n(n));if(u){l=u._p,l!==null&&typeof l=="object"&&typeof l.then=="function"&&(t.count++,t=Fu.bind(t),l.then(t,t)),e.state.loading|=4,e.instance=u,Lt(u);return}u=l.ownerDocument||l,a=xd(a),(n=Dl.get(n))&&Of(a,n),u=u.createElement("link"),Lt(u);var i=u;i._p=new Promise(function(o,h){i.onload=o,i.onerror=h}),wt(u,"link",a),e.instance=u}t.stylesheets===null&&(t.stylesheets=new Map),t.stylesheets.set(e,l),(l=e.state.preload)&&(e.state.loading&3)===0&&(t.count++,e=Fu.bind(t),l.addEventListener("load",e),l.addEventListener("error",e))}}var _f=0;function h0(t,l){return t.stylesheets&&t.count===0&&Wu(t,t.stylesheets),0_f?50:800)+l);return t.unsuspend=e,function(){t.unsuspend=null,clearTimeout(a),clearTimeout(n)}}:null}function Fu(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)Wu(this,this.stylesheets);else if(this.unsuspend){var t=this.unsuspend;this.unsuspend=null,t()}}}var $u=null;function Wu(t,l){t.stylesheets=null,t.unsuspend!==null&&(t.count++,$u=new Map,l.forEach(m0,t),$u=null,Fu.call(t))}function m0(t,l){if(!(l.state.loading&4)){var e=$u.get(t);if(e)var a=e.get(null);else{e=new Map,$u.set(t,e);for(var n=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(c)}catch(f){console.error(f)}}return c(),qf.exports=M0(),qf.exports}var C0=N0();const Rh="loadTrainSchedule",Uh="loadTrainScheduleSuccess",Dh="loadTrainScheduleError",Lf={loadTrainSchedule:c=>({type:Rh,...c}),loadTrainScheduleSuccess:c=>({type:Uh,...c}),loadTrainScheduleError:c=>({type:Dh,...c})},H0={stations:void 0,error:void 0,loading:!1},B0=(c,f)=>f.type===Rh?{...c,error:void 0,loading:!0}:f.type===Uh?{...c,stations:f.stations,loading:!1}:f.type===Dh?{...c,error:f.error,loading:!1}:c;function Mh(c,f){return function(){return c.apply(f,arguments)}}const{toString:q0}=Object.prototype,{getPrototypeOf:$f}=Object,{iterator:si,toStringTag:Nh}=Symbol,oi=(c=>f=>{const r=q0.call(f);return c[r]||(c[r]=r.slice(8,-1).toLowerCase())})(Object.create(null)),Hl=c=>(c=c.toLowerCase(),f=>oi(f)===c),ri=c=>f=>typeof f===c,{isArray:ja}=Array,qa=ri("undefined");function jn(c){return c!==null&&!qa(c)&&c.constructor!==null&&!qa(c.constructor)&&il(c.constructor.isBuffer)&&c.constructor.isBuffer(c)}const Ch=Hl("ArrayBuffer");function j0(c){let f;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?f=ArrayBuffer.isView(c):f=c&&c.buffer&&Ch(c.buffer),f}const x0=ri("string"),il=ri("function"),Hh=ri("number"),xn=c=>c!==null&&typeof c=="object",Y0=c=>c===!0||c===!1,ui=c=>{if(oi(c)!=="object")return!1;const f=$f(c);return(f===null||f===Object.prototype||Object.getPrototypeOf(f)===null)&&!(Nh in c)&&!(si in c)},L0=c=>{if(!xn(c)||jn(c))return!1;try{return Object.keys(c).length===0&&Object.getPrototypeOf(c)===Object.prototype}catch{return!1}},X0=Hl("Date"),G0=Hl("File"),Q0=Hl("Blob"),Z0=Hl("FileList"),V0=c=>xn(c)&&il(c.pipe),K0=c=>{let f;return c&&(typeof FormData=="function"&&c instanceof FormData||il(c.append)&&((f=oi(c))==="formdata"||f==="object"&&il(c.toString)&&c.toString()==="[object FormData]"))},w0=Hl("URLSearchParams"),[J0,F0,$0,W0]=["ReadableStream","Request","Response","Headers"].map(Hl),k0=c=>c.trim?c.trim():c.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function Yn(c,f,{allOwnKeys:r=!1}={}){if(c===null||typeof c>"u")return;let s,d;if(typeof c!="object"&&(c=[c]),ja(c))for(s=0,d=c.length;s0;)if(d=r[s],f===d.toLowerCase())return d;return null}const Fe=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global,qh=c=>!qa(c)&&c!==Fe;function Zf(){const{caseless:c,skipUndefined:f}=qh(this)&&this||{},r={},s=(d,v)=>{const S=c&&Bh(r,v)||v;ui(r[S])&&ui(d)?r[S]=Zf(r[S],d):ui(d)?r[S]=Zf({},d):ja(d)?r[S]=d.slice():(!f||!qa(d))&&(r[S]=d)};for(let d=0,v=arguments.length;d(Yn(f,(d,v)=>{r&&il(d)?c[v]=Mh(d,r):c[v]=d},{allOwnKeys:s}),c),P0=c=>(c.charCodeAt(0)===65279&&(c=c.slice(1)),c),t1=(c,f,r,s)=>{c.prototype=Object.create(f.prototype,s),c.prototype.constructor=c,Object.defineProperty(c,"super",{value:f.prototype}),r&&Object.assign(c.prototype,r)},l1=(c,f,r,s)=>{let d,v,S;const _={};if(f=f||{},c==null)return f;do{for(d=Object.getOwnPropertyNames(c),v=d.length;v-- >0;)S=d[v],(!s||s(S,c,f))&&!_[S]&&(f[S]=c[S],_[S]=!0);c=r!==!1&&$f(c)}while(c&&(!r||r(c,f))&&c!==Object.prototype);return f},e1=(c,f,r)=>{c=String(c),(r===void 0||r>c.length)&&(r=c.length),r-=f.length;const s=c.indexOf(f,r);return s!==-1&&s===r},a1=c=>{if(!c)return null;if(ja(c))return c;let f=c.length;if(!Hh(f))return null;const r=new Array(f);for(;f-- >0;)r[f]=c[f];return r},n1=(c=>f=>c&&f instanceof c)(typeof Uint8Array<"u"&&$f(Uint8Array)),u1=(c,f)=>{const s=(c&&c[si]).call(c);let d;for(;(d=s.next())&&!d.done;){const v=d.value;f.call(c,v[0],v[1])}},i1=(c,f)=>{let r;const s=[];for(;(r=c.exec(f))!==null;)s.push(r);return s},c1=Hl("HTMLFormElement"),f1=c=>c.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(r,s,d){return s.toUpperCase()+d}),rh=(({hasOwnProperty:c})=>(f,r)=>c.call(f,r))(Object.prototype),s1=Hl("RegExp"),jh=(c,f)=>{const r=Object.getOwnPropertyDescriptors(c),s={};Yn(r,(d,v)=>{let S;(S=f(d,v,c))!==!1&&(s[v]=S||d)}),Object.defineProperties(c,s)},o1=c=>{jh(c,(f,r)=>{if(il(c)&&["arguments","caller","callee"].indexOf(r)!==-1)return!1;const s=c[r];if(il(s)){if(f.enumerable=!1,"writable"in f){f.writable=!1;return}f.set||(f.set=()=>{throw Error("Can not rewrite read-only method '"+r+"'")})}})},r1=(c,f)=>{const r={},s=d=>{d.forEach(v=>{r[v]=!0})};return ja(c)?s(c):s(String(c).split(f)),r},d1=()=>{},h1=(c,f)=>c!=null&&Number.isFinite(c=+c)?c:f;function m1(c){return!!(c&&il(c.append)&&c[Nh]==="FormData"&&c[si])}const y1=c=>{const f=new Array(10),r=(s,d)=>{if(xn(s)){if(f.indexOf(s)>=0)return;if(jn(s))return s;if(!("toJSON"in s)){f[d]=s;const v=ja(s)?[]:{};return Yn(s,(S,_)=>{const N=r(S,d+1);!qa(N)&&(v[_]=N)}),f[d]=void 0,v}}return s};return r(c,0)},v1=Hl("AsyncFunction"),S1=c=>c&&(xn(c)||il(c))&&il(c.then)&&il(c.catch),xh=((c,f)=>c?setImmediate:f?((r,s)=>(Fe.addEventListener("message",({source:d,data:v})=>{d===Fe&&v===r&&s.length&&s.shift()()},!1),d=>{s.push(d),Fe.postMessage(r,"*")}))(`axios@${Math.random()}`,[]):r=>setTimeout(r))(typeof setImmediate=="function",il(Fe.postMessage)),g1=typeof queueMicrotask<"u"?queueMicrotask.bind(Fe):typeof process<"u"&&process.nextTick||xh,b1=c=>c!=null&&il(c[si]),A={isArray:ja,isArrayBuffer:Ch,isBuffer:jn,isFormData:K0,isArrayBufferView:j0,isString:x0,isNumber:Hh,isBoolean:Y0,isObject:xn,isPlainObject:ui,isEmptyObject:L0,isReadableStream:J0,isRequest:F0,isResponse:$0,isHeaders:W0,isUndefined:qa,isDate:X0,isFile:G0,isBlob:Q0,isRegExp:s1,isFunction:il,isStream:V0,isURLSearchParams:w0,isTypedArray:n1,isFileList:Z0,forEach:Yn,merge:Zf,extend:I0,trim:k0,stripBOM:P0,inherits:t1,toFlatObject:l1,kindOf:oi,kindOfTest:Hl,endsWith:e1,toArray:a1,forEachEntry:u1,matchAll:i1,isHTMLForm:c1,hasOwnProperty:rh,hasOwnProp:rh,reduceDescriptors:jh,freezeMethods:o1,toObjectSet:r1,toCamelCase:f1,noop:d1,toFiniteNumber:h1,findKey:Bh,global:Fe,isContextDefined:qh,isSpecCompliantForm:m1,toJSONObject:y1,isAsyncFn:v1,isThenable:S1,setImmediate:xh,asap:g1,isIterable:b1};function W(c,f,r,s,d){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack,this.message=c,this.name="AxiosError",f&&(this.code=f),r&&(this.config=r),s&&(this.request=s),d&&(this.response=d,this.status=d.status?d.status:null)}A.inherits(W,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:A.toJSONObject(this.config),code:this.code,status:this.status}}});const Yh=W.prototype,Lh={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach(c=>{Lh[c]={value:c}});Object.defineProperties(W,Lh);Object.defineProperty(Yh,"isAxiosError",{value:!0});W.from=(c,f,r,s,d,v)=>{const S=Object.create(Yh);A.toFlatObject(c,S,function(U){return U!==Error.prototype},g=>g!=="isAxiosError");const _=c&&c.message?c.message:"Error",N=f==null&&c?c.code:f;return W.call(S,_,N,r,s,d),c&&S.cause==null&&Object.defineProperty(S,"cause",{value:c,configurable:!0}),S.name=c&&c.name||"Error",v&&Object.assign(S,v),S};const p1=null;function Vf(c){return A.isPlainObject(c)||A.isArray(c)}function Xh(c){return A.endsWith(c,"[]")?c.slice(0,-2):c}function dh(c,f,r){return c?c.concat(f).map(function(d,v){return d=Xh(d),!r&&v?"["+d+"]":d}).join(r?".":""):f}function E1(c){return A.isArray(c)&&!c.some(Vf)}const T1=A.toFlatObject(A,{},null,function(f){return/^is[A-Z]/.test(f)});function di(c,f,r){if(!A.isObject(c))throw new TypeError("target must be an object");f=f||new FormData,r=A.toFlatObject(r,{metaTokens:!0,dots:!1,indexes:!1},!1,function(X,x){return!A.isUndefined(x[X])});const s=r.metaTokens,d=r.visitor||U,v=r.dots,S=r.indexes,N=(r.Blob||typeof Blob<"u"&&Blob)&&A.isSpecCompliantForm(f);if(!A.isFunction(d))throw new TypeError("visitor must be a function");function g(B){if(B===null)return"";if(A.isDate(B))return B.toISOString();if(A.isBoolean(B))return B.toString();if(!N&&A.isBlob(B))throw new W("Blob is not supported. Use a Buffer instead.");return A.isArrayBuffer(B)||A.isTypedArray(B)?N&&typeof Blob=="function"?new Blob([B]):Buffer.from(B):B}function U(B,X,x){let ut=B;if(B&&!x&&typeof B=="object"){if(A.endsWith(X,"{}"))X=s?X:X.slice(0,-2),B=JSON.stringify(B);else if(A.isArray(B)&&E1(B)||(A.isFileList(B)||A.endsWith(X,"[]"))&&(ut=A.toArray(B)))return X=Xh(X),ut.forEach(function(at,gt){!(A.isUndefined(at)||at===null)&&f.append(S===!0?dh([X],gt,v):S===null?X:X+"[]",g(at))}),!1}return Vf(B)?!0:(f.append(dh(x,X,v),g(B)),!1)}const H=[],V=Object.assign(T1,{defaultVisitor:U,convertValue:g,isVisitable:Vf});function ot(B,X){if(!A.isUndefined(B)){if(H.indexOf(B)!==-1)throw Error("Circular reference detected in "+X.join("."));H.push(B),A.forEach(B,function(ut,Rt){(!(A.isUndefined(ut)||ut===null)&&d.call(f,ut,A.isString(Rt)?Rt.trim():Rt,X,V))===!0&&ot(ut,X?X.concat(Rt):[Rt])}),H.pop()}}if(!A.isObject(c))throw new TypeError("data must be an object");return ot(c),f}function hh(c){const f={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(c).replace(/[!'()~]|%20|%00/g,function(s){return f[s]})}function Wf(c,f){this._pairs=[],c&&di(c,this,f)}const Gh=Wf.prototype;Gh.append=function(f,r){this._pairs.push([f,r])};Gh.toString=function(f){const r=f?function(s){return f.call(this,s,hh)}:hh;return this._pairs.map(function(d){return r(d[0])+"="+r(d[1])},"").join("&")};function A1(c){return encodeURIComponent(c).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+")}function Qh(c,f,r){if(!f)return c;const s=r&&r.encode||A1;A.isFunction(r)&&(r={serialize:r});const d=r&&r.serialize;let v;if(d?v=d(f,r):v=A.isURLSearchParams(f)?f.toString():new Wf(f,r).toString(s),v){const S=c.indexOf("#");S!==-1&&(c=c.slice(0,S)),c+=(c.indexOf("?")===-1?"?":"&")+v}return c}class mh{constructor(){this.handlers=[]}use(f,r,s){return this.handlers.push({fulfilled:f,rejected:r,synchronous:s?s.synchronous:!1,runWhen:s?s.runWhen:null}),this.handlers.length-1}eject(f){this.handlers[f]&&(this.handlers[f]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(f){A.forEach(this.handlers,function(s){s!==null&&f(s)})}}const Zh={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},O1=typeof URLSearchParams<"u"?URLSearchParams:Wf,z1=typeof FormData<"u"?FormData:null,_1=typeof Blob<"u"?Blob:null,R1={isBrowser:!0,classes:{URLSearchParams:O1,FormData:z1,Blob:_1},protocols:["http","https","file","blob","url","data"]},kf=typeof window<"u"&&typeof document<"u",Kf=typeof navigator=="object"&&navigator||void 0,U1=kf&&(!Kf||["ReactNative","NativeScript","NS"].indexOf(Kf.product)<0),D1=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function",M1=kf&&window.location.href||"http://localhost",N1=Object.freeze(Object.defineProperty({__proto__:null,hasBrowserEnv:kf,hasStandardBrowserEnv:U1,hasStandardBrowserWebWorkerEnv:D1,navigator:Kf,origin:M1},Symbol.toStringTag,{value:"Module"})),Ft={...N1,...R1};function C1(c,f){return di(c,new Ft.classes.URLSearchParams,{visitor:function(r,s,d,v){return Ft.isNode&&A.isBuffer(r)?(this.append(s,r.toString("base64")),!1):v.defaultVisitor.apply(this,arguments)},...f})}function H1(c){return A.matchAll(/\w+|\[(\w*)]/g,c).map(f=>f[0]==="[]"?"":f[1]||f[0])}function B1(c){const f={},r=Object.keys(c);let s;const d=r.length;let v;for(s=0;s=r.length;return S=!S&&A.isArray(d)?d.length:S,N?(A.hasOwnProp(d,S)?d[S]=[d[S],s]:d[S]=s,!_):((!d[S]||!A.isObject(d[S]))&&(d[S]=[]),f(r,s,d[S],v)&&A.isArray(d[S])&&(d[S]=B1(d[S])),!_)}if(A.isFormData(c)&&A.isFunction(c.entries)){const r={};return A.forEachEntry(c,(s,d)=>{f(H1(s),d,r,0)}),r}return null}function q1(c,f,r){if(A.isString(c))try{return(f||JSON.parse)(c),A.trim(c)}catch(s){if(s.name!=="SyntaxError")throw s}return(r||JSON.stringify)(c)}const Ln={transitional:Zh,adapter:["xhr","http","fetch"],transformRequest:[function(f,r){const s=r.getContentType()||"",d=s.indexOf("application/json")>-1,v=A.isObject(f);if(v&&A.isHTMLForm(f)&&(f=new FormData(f)),A.isFormData(f))return d?JSON.stringify(Vh(f)):f;if(A.isArrayBuffer(f)||A.isBuffer(f)||A.isStream(f)||A.isFile(f)||A.isBlob(f)||A.isReadableStream(f))return f;if(A.isArrayBufferView(f))return f.buffer;if(A.isURLSearchParams(f))return r.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),f.toString();let _;if(v){if(s.indexOf("application/x-www-form-urlencoded")>-1)return C1(f,this.formSerializer).toString();if((_=A.isFileList(f))||s.indexOf("multipart/form-data")>-1){const N=this.env&&this.env.FormData;return di(_?{"files[]":f}:f,N&&new N,this.formSerializer)}}return v||d?(r.setContentType("application/json",!1),q1(f)):f}],transformResponse:[function(f){const r=this.transitional||Ln.transitional,s=r&&r.forcedJSONParsing,d=this.responseType==="json";if(A.isResponse(f)||A.isReadableStream(f))return f;if(f&&A.isString(f)&&(s&&!this.responseType||d)){const S=!(r&&r.silentJSONParsing)&&d;try{return JSON.parse(f,this.parseReviver)}catch(_){if(S)throw _.name==="SyntaxError"?W.from(_,W.ERR_BAD_RESPONSE,this,null,this.response):_}}return f}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:Ft.classes.FormData,Blob:Ft.classes.Blob},validateStatus:function(f){return f>=200&&f<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};A.forEach(["delete","get","head","post","put","patch"],c=>{Ln.headers[c]={}});const j1=A.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),x1=c=>{const f={};let r,s,d;return c&&c.split(` +`).forEach(function(S){d=S.indexOf(":"),r=S.substring(0,d).trim().toLowerCase(),s=S.substring(d+1).trim(),!(!r||f[r]&&j1[r])&&(r==="set-cookie"?f[r]?f[r].push(s):f[r]=[s]:f[r]=f[r]?f[r]+", "+s:s)}),f},yh=Symbol("internals");function Bn(c){return c&&String(c).trim().toLowerCase()}function ii(c){return c===!1||c==null?c:A.isArray(c)?c.map(ii):String(c)}function Y1(c){const f=Object.create(null),r=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let s;for(;s=r.exec(c);)f[s[1]]=s[2];return f}const L1=c=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(c.trim());function Xf(c,f,r,s,d){if(A.isFunction(s))return s.call(this,f,r);if(d&&(f=r),!!A.isString(f)){if(A.isString(s))return f.indexOf(s)!==-1;if(A.isRegExp(s))return s.test(f)}}function X1(c){return c.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(f,r,s)=>r.toUpperCase()+s)}function G1(c,f){const r=A.toCamelCase(" "+f);["get","set","has"].forEach(s=>{Object.defineProperty(c,s+r,{value:function(d,v,S){return this[s].call(this,f,d,v,S)},configurable:!0})})}let cl=class{constructor(f){f&&this.set(f)}set(f,r,s){const d=this;function v(_,N,g){const U=Bn(N);if(!U)throw new Error("header name must be a non-empty string");const H=A.findKey(d,U);(!H||d[H]===void 0||g===!0||g===void 0&&d[H]!==!1)&&(d[H||N]=ii(_))}const S=(_,N)=>A.forEach(_,(g,U)=>v(g,U,N));if(A.isPlainObject(f)||f instanceof this.constructor)S(f,r);else if(A.isString(f)&&(f=f.trim())&&!L1(f))S(x1(f),r);else if(A.isObject(f)&&A.isIterable(f)){let _={},N,g;for(const U of f){if(!A.isArray(U))throw TypeError("Object iterator must return a key-value pair");_[g=U[0]]=(N=_[g])?A.isArray(N)?[...N,U[1]]:[N,U[1]]:U[1]}S(_,r)}else f!=null&&v(r,f,s);return this}get(f,r){if(f=Bn(f),f){const s=A.findKey(this,f);if(s){const d=this[s];if(!r)return d;if(r===!0)return Y1(d);if(A.isFunction(r))return r.call(this,d,s);if(A.isRegExp(r))return r.exec(d);throw new TypeError("parser must be boolean|regexp|function")}}}has(f,r){if(f=Bn(f),f){const s=A.findKey(this,f);return!!(s&&this[s]!==void 0&&(!r||Xf(this,this[s],s,r)))}return!1}delete(f,r){const s=this;let d=!1;function v(S){if(S=Bn(S),S){const _=A.findKey(s,S);_&&(!r||Xf(s,s[_],_,r))&&(delete s[_],d=!0)}}return A.isArray(f)?f.forEach(v):v(f),d}clear(f){const r=Object.keys(this);let s=r.length,d=!1;for(;s--;){const v=r[s];(!f||Xf(this,this[v],v,f,!0))&&(delete this[v],d=!0)}return d}normalize(f){const r=this,s={};return A.forEach(this,(d,v)=>{const S=A.findKey(s,v);if(S){r[S]=ii(d),delete r[v];return}const _=f?X1(v):String(v).trim();_!==v&&delete r[v],r[_]=ii(d),s[_]=!0}),this}concat(...f){return this.constructor.concat(this,...f)}toJSON(f){const r=Object.create(null);return A.forEach(this,(s,d)=>{s!=null&&s!==!1&&(r[d]=f&&A.isArray(s)?s.join(", "):s)}),r}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([f,r])=>f+": "+r).join(` +`)}getSetCookie(){return this.get("set-cookie")||[]}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(f){return f instanceof this?f:new this(f)}static concat(f,...r){const s=new this(f);return r.forEach(d=>s.set(d)),s}static accessor(f){const s=(this[yh]=this[yh]={accessors:{}}).accessors,d=this.prototype;function v(S){const _=Bn(S);s[_]||(G1(d,S),s[_]=!0)}return A.isArray(f)?f.forEach(v):v(f),this}};cl.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);A.reduceDescriptors(cl.prototype,({value:c},f)=>{let r=f[0].toUpperCase()+f.slice(1);return{get:()=>c,set(s){this[r]=s}}});A.freezeMethods(cl);function Gf(c,f){const r=this||Ln,s=f||r,d=cl.from(s.headers);let v=s.data;return A.forEach(c,function(_){v=_.call(r,v,d.normalize(),f?f.status:void 0)}),d.normalize(),v}function Kh(c){return!!(c&&c.__CANCEL__)}function xa(c,f,r){W.call(this,c??"canceled",W.ERR_CANCELED,f,r),this.name="CanceledError"}A.inherits(xa,W,{__CANCEL__:!0});function wh(c,f,r){const s=r.config.validateStatus;!r.status||!s||s(r.status)?c(r):f(new W("Request failed with status code "+r.status,[W.ERR_BAD_REQUEST,W.ERR_BAD_RESPONSE][Math.floor(r.status/100)-4],r.config,r.request,r))}function Q1(c){const f=/^([-+\w]{1,25})(:?\/\/|:)/.exec(c);return f&&f[1]||""}function Z1(c,f){c=c||10;const r=new Array(c),s=new Array(c);let d=0,v=0,S;return f=f!==void 0?f:1e3,function(N){const g=Date.now(),U=s[v];S||(S=g),r[d]=N,s[d]=g;let H=v,V=0;for(;H!==d;)V+=r[H++],H=H%c;if(d=(d+1)%c,d===v&&(v=(v+1)%c),g-S{r=U,d=null,v&&(clearTimeout(v),v=null),c(...g)};return[(...g)=>{const U=Date.now(),H=U-r;H>=s?S(g,U):(d=g,v||(v=setTimeout(()=>{v=null,S(d)},s-H)))},()=>d&&S(d)]}const fi=(c,f,r=3)=>{let s=0;const d=Z1(50,250);return V1(v=>{const S=v.loaded,_=v.lengthComputable?v.total:void 0,N=S-s,g=d(N),U=S<=_;s=S;const H={loaded:S,total:_,progress:_?S/_:void 0,bytes:N,rate:g||void 0,estimated:g&&_&&U?(_-S)/g:void 0,event:v,lengthComputable:_!=null,[f?"download":"upload"]:!0};c(H)},r)},vh=(c,f)=>{const r=c!=null;return[s=>f[0]({lengthComputable:r,total:c,loaded:s}),f[1]]},Sh=c=>(...f)=>A.asap(()=>c(...f)),K1=Ft.hasStandardBrowserEnv?((c,f)=>r=>(r=new URL(r,Ft.origin),c.protocol===r.protocol&&c.host===r.host&&(f||c.port===r.port)))(new URL(Ft.origin),Ft.navigator&&/(msie|trident)/i.test(Ft.navigator.userAgent)):()=>!0,w1=Ft.hasStandardBrowserEnv?{write(c,f,r,s,d,v,S){if(typeof document>"u")return;const _=[`${c}=${encodeURIComponent(f)}`];A.isNumber(r)&&_.push(`expires=${new Date(r).toUTCString()}`),A.isString(s)&&_.push(`path=${s}`),A.isString(d)&&_.push(`domain=${d}`),v===!0&&_.push("secure"),A.isString(S)&&_.push(`SameSite=${S}`),document.cookie=_.join("; ")},read(c){if(typeof document>"u")return null;const f=document.cookie.match(new RegExp("(?:^|; )"+c+"=([^;]*)"));return f?decodeURIComponent(f[1]):null},remove(c){this.write(c,"",Date.now()-864e5,"/")}}:{write(){},read(){return null},remove(){}};function J1(c){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(c)}function F1(c,f){return f?c.replace(/\/?\/$/,"")+"/"+f.replace(/^\/+/,""):c}function Jh(c,f,r){let s=!J1(f);return c&&(s||r==!1)?F1(c,f):f}const gh=c=>c instanceof cl?{...c}:c;function We(c,f){f=f||{};const r={};function s(g,U,H,V){return A.isPlainObject(g)&&A.isPlainObject(U)?A.merge.call({caseless:V},g,U):A.isPlainObject(U)?A.merge({},U):A.isArray(U)?U.slice():U}function d(g,U,H,V){if(A.isUndefined(U)){if(!A.isUndefined(g))return s(void 0,g,H,V)}else return s(g,U,H,V)}function v(g,U){if(!A.isUndefined(U))return s(void 0,U)}function S(g,U){if(A.isUndefined(U)){if(!A.isUndefined(g))return s(void 0,g)}else return s(void 0,U)}function _(g,U,H){if(H in f)return s(g,U);if(H in c)return s(void 0,g)}const N={url:v,method:v,data:v,baseURL:S,transformRequest:S,transformResponse:S,paramsSerializer:S,timeout:S,timeoutMessage:S,withCredentials:S,withXSRFToken:S,adapter:S,responseType:S,xsrfCookieName:S,xsrfHeaderName:S,onUploadProgress:S,onDownloadProgress:S,decompress:S,maxContentLength:S,maxBodyLength:S,beforeRedirect:S,transport:S,httpAgent:S,httpsAgent:S,cancelToken:S,socketPath:S,responseEncoding:S,validateStatus:_,headers:(g,U,H)=>d(gh(g),gh(U),H,!0)};return A.forEach(Object.keys({...c,...f}),function(U){const H=N[U]||d,V=H(c[U],f[U],U);A.isUndefined(V)&&H!==_||(r[U]=V)}),r}const Fh=c=>{const f=We({},c);let{data:r,withXSRFToken:s,xsrfHeaderName:d,xsrfCookieName:v,headers:S,auth:_}=f;if(f.headers=S=cl.from(S),f.url=Qh(Jh(f.baseURL,f.url,f.allowAbsoluteUrls),c.params,c.paramsSerializer),_&&S.set("Authorization","Basic "+btoa((_.username||"")+":"+(_.password?unescape(encodeURIComponent(_.password)):""))),A.isFormData(r)){if(Ft.hasStandardBrowserEnv||Ft.hasStandardBrowserWebWorkerEnv)S.setContentType(void 0);else if(A.isFunction(r.getHeaders)){const N=r.getHeaders(),g=["content-type","content-length"];Object.entries(N).forEach(([U,H])=>{g.includes(U.toLowerCase())&&S.set(U,H)})}}if(Ft.hasStandardBrowserEnv&&(s&&A.isFunction(s)&&(s=s(f)),s||s!==!1&&K1(f.url))){const N=d&&v&&w1.read(v);N&&S.set(d,N)}return f},$1=typeof XMLHttpRequest<"u",W1=$1&&function(c){return new Promise(function(r,s){const d=Fh(c);let v=d.data;const S=cl.from(d.headers).normalize();let{responseType:_,onUploadProgress:N,onDownloadProgress:g}=d,U,H,V,ot,B;function X(){ot&&ot(),B&&B(),d.cancelToken&&d.cancelToken.unsubscribe(U),d.signal&&d.signal.removeEventListener("abort",U)}let x=new XMLHttpRequest;x.open(d.method.toUpperCase(),d.url,!0),x.timeout=d.timeout;function ut(){if(!x)return;const at=cl.from("getAllResponseHeaders"in x&&x.getAllResponseHeaders()),At={data:!_||_==="text"||_==="json"?x.responseText:x.response,status:x.status,statusText:x.statusText,headers:at,config:c,request:x};wh(function(w){r(w),X()},function(w){s(w),X()},At),x=null}"onloadend"in x?x.onloadend=ut:x.onreadystatechange=function(){!x||x.readyState!==4||x.status===0&&!(x.responseURL&&x.responseURL.indexOf("file:")===0)||setTimeout(ut)},x.onabort=function(){x&&(s(new W("Request aborted",W.ECONNABORTED,c,x)),x=null)},x.onerror=function(gt){const At=gt&>.message?gt.message:"Network Error",Ot=new W(At,W.ERR_NETWORK,c,x);Ot.event=gt||null,s(Ot),x=null},x.ontimeout=function(){let gt=d.timeout?"timeout of "+d.timeout+"ms exceeded":"timeout exceeded";const At=d.transitional||Zh;d.timeoutErrorMessage&&(gt=d.timeoutErrorMessage),s(new W(gt,At.clarifyTimeoutError?W.ETIMEDOUT:W.ECONNABORTED,c,x)),x=null},v===void 0&&S.setContentType(null),"setRequestHeader"in x&&A.forEach(S.toJSON(),function(gt,At){x.setRequestHeader(At,gt)}),A.isUndefined(d.withCredentials)||(x.withCredentials=!!d.withCredentials),_&&_!=="json"&&(x.responseType=d.responseType),g&&([V,B]=fi(g,!0),x.addEventListener("progress",V)),N&&x.upload&&([H,ot]=fi(N),x.upload.addEventListener("progress",H),x.upload.addEventListener("loadend",ot)),(d.cancelToken||d.signal)&&(U=at=>{x&&(s(!at||at.type?new xa(null,c,x):at),x.abort(),x=null)},d.cancelToken&&d.cancelToken.subscribe(U),d.signal&&(d.signal.aborted?U():d.signal.addEventListener("abort",U)));const Rt=Q1(d.url);if(Rt&&Ft.protocols.indexOf(Rt)===-1){s(new W("Unsupported protocol "+Rt+":",W.ERR_BAD_REQUEST,c));return}x.send(v||null)})},k1=(c,f)=>{const{length:r}=c=c?c.filter(Boolean):[];if(f||r){let s=new AbortController,d;const v=function(g){if(!d){d=!0,_();const U=g instanceof Error?g:this.reason;s.abort(U instanceof W?U:new xa(U instanceof Error?U.message:U))}};let S=f&&setTimeout(()=>{S=null,v(new W(`timeout ${f} of ms exceeded`,W.ETIMEDOUT))},f);const _=()=>{c&&(S&&clearTimeout(S),S=null,c.forEach(g=>{g.unsubscribe?g.unsubscribe(v):g.removeEventListener("abort",v)}),c=null)};c.forEach(g=>g.addEventListener("abort",v));const{signal:N}=s;return N.unsubscribe=()=>A.asap(_),N}},I1=function*(c,f){let r=c.byteLength;if(r{const d=P1(c,f);let v=0,S,_=N=>{S||(S=!0,s&&s(N))};return new ReadableStream({async pull(N){try{const{done:g,value:U}=await d.next();if(g){_(),N.close();return}let H=U.byteLength;if(r){let V=v+=H;r(V)}N.enqueue(new Uint8Array(U))}catch(g){throw _(g),g}},cancel(N){return _(N),d.return()}},{highWaterMark:2})},ph=64*1024,{isFunction:ni}=A,lv=(({Request:c,Response:f})=>({Request:c,Response:f}))(A.global),{ReadableStream:Eh,TextEncoder:Th}=A.global,Ah=(c,...f)=>{try{return!!c(...f)}catch{return!1}},ev=c=>{c=A.merge.call({skipUndefined:!0},lv,c);const{fetch:f,Request:r,Response:s}=c,d=f?ni(f):typeof fetch=="function",v=ni(r),S=ni(s);if(!d)return!1;const _=d&&ni(Eh),N=d&&(typeof Th=="function"?(B=>X=>B.encode(X))(new Th):async B=>new Uint8Array(await new r(B).arrayBuffer())),g=v&&_&&Ah(()=>{let B=!1;const X=new r(Ft.origin,{body:new Eh,method:"POST",get duplex(){return B=!0,"half"}}).headers.has("Content-Type");return B&&!X}),U=S&&_&&Ah(()=>A.isReadableStream(new s("").body)),H={stream:U&&(B=>B.body)};d&&["text","arrayBuffer","blob","formData","stream"].forEach(B=>{!H[B]&&(H[B]=(X,x)=>{let ut=X&&X[B];if(ut)return ut.call(X);throw new W(`Response type '${B}' is not supported`,W.ERR_NOT_SUPPORT,x)})});const V=async B=>{if(B==null)return 0;if(A.isBlob(B))return B.size;if(A.isSpecCompliantForm(B))return(await new r(Ft.origin,{method:"POST",body:B}).arrayBuffer()).byteLength;if(A.isArrayBufferView(B)||A.isArrayBuffer(B))return B.byteLength;if(A.isURLSearchParams(B)&&(B=B+""),A.isString(B))return(await N(B)).byteLength},ot=async(B,X)=>{const x=A.toFiniteNumber(B.getContentLength());return x??V(X)};return async B=>{let{url:X,method:x,data:ut,signal:Rt,cancelToken:at,timeout:gt,onDownloadProgress:At,onUploadProgress:Ot,responseType:w,headers:Yt,withCredentials:$t="same-origin",fetchOptions:Ll}=Fh(B),fl=f||fetch;w=w?(w+"").toLowerCase():"text";let jt=k1([Rt,at&&at.toAbortSignal()],gt),sl=null;const Gt=jt&&jt.unsubscribe&&(()=>{jt.unsubscribe()});let It;try{if(Ot&&g&&x!=="get"&&x!=="head"&&(It=await ot(Yt,ut))!==0){let m=new r(X,{method:"POST",body:ut,duplex:"half"}),M;if(A.isFormData(ut)&&(M=m.headers.get("content-type"))&&Yt.setContentType(M),m.body){const[j,Y]=vh(It,fi(Sh(Ot)));ut=bh(m.body,ph,j,Y)}}A.isString($t)||($t=$t?"include":"omit");const z=v&&"credentials"in r.prototype,q={...Ll,signal:jt,method:x.toUpperCase(),headers:Yt.normalize().toJSON(),body:ut,duplex:"half",credentials:z?$t:void 0};sl=v&&new r(X,q);let Q=await(v?fl(sl,Ll):fl(X,q));const ft=U&&(w==="stream"||w==="response");if(U&&(At||ft&&Gt)){const m={};["status","statusText","headers"].forEach(J=>{m[J]=Q[J]});const M=A.toFiniteNumber(Q.headers.get("content-length")),[j,Y]=At&&vh(M,fi(Sh(At),!0))||[];Q=new s(bh(Q.body,ph,j,()=>{Y&&Y(),Gt&&Gt()}),m)}w=w||"text";let dt=await H[A.findKey(H,w)||"text"](Q,B);return!ft&&Gt&&Gt(),await new Promise((m,M)=>{wh(m,M,{data:dt,headers:cl.from(Q.headers),status:Q.status,statusText:Q.statusText,config:B,request:sl})})}catch(z){throw Gt&&Gt(),z&&z.name==="TypeError"&&/Load failed|fetch/i.test(z.message)?Object.assign(new W("Network Error",W.ERR_NETWORK,B,sl),{cause:z.cause||z}):W.from(z,z&&z.code,B,sl)}}},av=new Map,$h=c=>{let f=c&&c.env||{};const{fetch:r,Request:s,Response:d}=f,v=[s,d,r];let S=v.length,_=S,N,g,U=av;for(;_--;)N=v[_],g=U.get(N),g===void 0&&U.set(N,g=_?new Map:ev(f)),U=g;return g};$h();const If={http:p1,xhr:W1,fetch:{get:$h}};A.forEach(If,(c,f)=>{if(c){try{Object.defineProperty(c,"name",{value:f})}catch{}Object.defineProperty(c,"adapterName",{value:f})}});const Oh=c=>`- ${c}`,nv=c=>A.isFunction(c)||c===null||c===!1;function uv(c,f){c=A.isArray(c)?c:[c];const{length:r}=c;let s,d;const v={};for(let S=0;S`adapter ${N} `+(g===!1?"is not supported by the environment":"is not available in the build"));let _=r?S.length>1?`since : +`+S.map(Oh).join(` +`):" "+Oh(S[0]):"as no adapter specified";throw new W("There is no suitable adapter to dispatch the request "+_,"ERR_NOT_SUPPORT")}return d}const Wh={getAdapter:uv,adapters:If};function Qf(c){if(c.cancelToken&&c.cancelToken.throwIfRequested(),c.signal&&c.signal.aborted)throw new xa(null,c)}function zh(c){return Qf(c),c.headers=cl.from(c.headers),c.data=Gf.call(c,c.transformRequest),["post","put","patch"].indexOf(c.method)!==-1&&c.headers.setContentType("application/x-www-form-urlencoded",!1),Wh.getAdapter(c.adapter||Ln.adapter,c)(c).then(function(s){return Qf(c),s.data=Gf.call(c,c.transformResponse,s),s.headers=cl.from(s.headers),s},function(s){return Kh(s)||(Qf(c),s&&s.response&&(s.response.data=Gf.call(c,c.transformResponse,s.response),s.response.headers=cl.from(s.response.headers))),Promise.reject(s)})}const kh="1.13.1",hi={};["object","boolean","number","function","string","symbol"].forEach((c,f)=>{hi[c]=function(s){return typeof s===c||"a"+(f<1?"n ":" ")+c}});const _h={};hi.transitional=function(f,r,s){function d(v,S){return"[Axios v"+kh+"] Transitional option '"+v+"'"+S+(s?". "+s:"")}return(v,S,_)=>{if(f===!1)throw new W(d(S," has been removed"+(r?" in "+r:"")),W.ERR_DEPRECATED);return r&&!_h[S]&&(_h[S]=!0,console.warn(d(S," has been deprecated since v"+r+" and will be removed in the near future"))),f?f(v,S,_):!0}};hi.spelling=function(f){return(r,s)=>(console.warn(`${s} is likely a misspelling of ${f}`),!0)};function iv(c,f,r){if(typeof c!="object")throw new W("options must be an object",W.ERR_BAD_OPTION_VALUE);const s=Object.keys(c);let d=s.length;for(;d-- >0;){const v=s[d],S=f[v];if(S){const _=c[v],N=_===void 0||S(_,v,c);if(N!==!0)throw new W("option "+v+" must be "+N,W.ERR_BAD_OPTION_VALUE);continue}if(r!==!0)throw new W("Unknown option "+v,W.ERR_BAD_OPTION)}}const ci={assertOptions:iv,validators:hi},Yl=ci.validators;let $e=class{constructor(f){this.defaults=f||{},this.interceptors={request:new mh,response:new mh}}async request(f,r){try{return await this._request(f,r)}catch(s){if(s instanceof Error){let d={};Error.captureStackTrace?Error.captureStackTrace(d):d=new Error;const v=d.stack?d.stack.replace(/^.+\n/,""):"";try{s.stack?v&&!String(s.stack).endsWith(v.replace(/^.+\n.+\n/,""))&&(s.stack+=` +`+v):s.stack=v}catch{}}throw s}}_request(f,r){typeof f=="string"?(r=r||{},r.url=f):r=f||{},r=We(this.defaults,r);const{transitional:s,paramsSerializer:d,headers:v}=r;s!==void 0&&ci.assertOptions(s,{silentJSONParsing:Yl.transitional(Yl.boolean),forcedJSONParsing:Yl.transitional(Yl.boolean),clarifyTimeoutError:Yl.transitional(Yl.boolean)},!1),d!=null&&(A.isFunction(d)?r.paramsSerializer={serialize:d}:ci.assertOptions(d,{encode:Yl.function,serialize:Yl.function},!0)),r.allowAbsoluteUrls!==void 0||(this.defaults.allowAbsoluteUrls!==void 0?r.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:r.allowAbsoluteUrls=!0),ci.assertOptions(r,{baseUrl:Yl.spelling("baseURL"),withXsrfToken:Yl.spelling("withXSRFToken")},!0),r.method=(r.method||this.defaults.method||"get").toLowerCase();let S=v&&A.merge(v.common,v[r.method]);v&&A.forEach(["delete","get","head","post","put","patch","common"],B=>{delete v[B]}),r.headers=cl.concat(S,v);const _=[];let N=!0;this.interceptors.request.forEach(function(X){typeof X.runWhen=="function"&&X.runWhen(r)===!1||(N=N&&X.synchronous,_.unshift(X.fulfilled,X.rejected))});const g=[];this.interceptors.response.forEach(function(X){g.push(X.fulfilled,X.rejected)});let U,H=0,V;if(!N){const B=[zh.bind(this),void 0];for(B.unshift(..._),B.push(...g),V=B.length,U=Promise.resolve(r);H{if(!s._listeners)return;let v=s._listeners.length;for(;v-- >0;)s._listeners[v](d);s._listeners=null}),this.promise.then=d=>{let v;const S=new Promise(_=>{s.subscribe(_),v=_}).then(d);return S.cancel=function(){s.unsubscribe(v)},S},f(function(v,S,_){s.reason||(s.reason=new xa(v,S,_),r(s.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(f){if(this.reason){f(this.reason);return}this._listeners?this._listeners.push(f):this._listeners=[f]}unsubscribe(f){if(!this._listeners)return;const r=this._listeners.indexOf(f);r!==-1&&this._listeners.splice(r,1)}toAbortSignal(){const f=new AbortController,r=s=>{f.abort(s)};return this.subscribe(r),f.signal.unsubscribe=()=>this.unsubscribe(r),f.signal}static source(){let f;return{token:new Ih(function(d){f=d}),cancel:f}}};function fv(c){return function(r){return c.apply(null,r)}}function sv(c){return A.isObject(c)&&c.isAxiosError===!0}const wf={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511,WebServerIsDown:521,ConnectionTimedOut:522,OriginIsUnreachable:523,TimeoutOccurred:524,SslHandshakeFailed:525,InvalidSslCertificate:526};Object.entries(wf).forEach(([c,f])=>{wf[f]=c});function Ph(c){const f=new $e(c),r=Mh($e.prototype.request,f);return A.extend(r,$e.prototype,f,{allOwnKeys:!0}),A.extend(r,f,null,{allOwnKeys:!0}),r.create=function(d){return Ph(We(c,d))},r}const Nt=Ph(Ln);Nt.Axios=$e;Nt.CanceledError=xa;Nt.CancelToken=cv;Nt.isCancel=Kh;Nt.VERSION=kh;Nt.toFormData=di;Nt.AxiosError=W;Nt.Cancel=Nt.CanceledError;Nt.all=function(f){return Promise.all(f)};Nt.spread=fv;Nt.isAxiosError=sv;Nt.mergeConfig=We;Nt.AxiosHeaders=cl;Nt.formToJSON=c=>Vh(A.isHTMLForm(c)?new FormData(c):c);Nt.getAdapter=Wh.getAdapter;Nt.HttpStatusCode=wf;Nt.default=Nt;const{Axios:yv,AxiosError:vv,CanceledError:Sv,isCancel:gv,CancelToken:bv,VERSION:pv,all:Ev,Cancel:Tv,isAxiosError:Av,spread:Ov,toFormData:zv,AxiosHeaders:_v,HttpStatusCode:Rv,formToJSON:Uv,getAdapter:Dv,mergeConfig:Mv}=Nt,ov="https://api.irail.be",rv=(c,f)=>{Ff.useEffect(()=>{(async()=>{try{f(Lf.loadTrainSchedule({}));const r=await Nt.get(`${ov}/stations?format=json&lang=en`),{station:s}=r.data;f(Lf.loadTrainScheduleSuccess({stations:s}))}catch(r){f(Lf.loadTrainScheduleError({error:r}))}})()},[])};function dv(){const[c,f]=Ff.useReducer(B0,H0);return rv(c,f),qn.jsxs(qn.Fragment,{children:[qn.jsx("textarea",{value:JSON.stringify(c)}),")"]})}C0.createRoot(document.getElementById("root")).render(qn.jsx(Ff.StrictMode,{children:qn.jsx(dv,{})})); diff --git a/dist/assets/index-COcDBgFa.css b/dist/assets/index-COcDBgFa.css new file mode 100644 index 0000000..2d21377 --- /dev/null +++ b/dist/assets/index-COcDBgFa.css @@ -0,0 +1 @@ +:root{font-family:system-ui,Avenir,Helvetica,Arial,sans-serif;line-height:1.5;font-weight:400;color-scheme:light dark;color:#ffffffde;background-color:#242424;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}a{font-weight:500;color:#646cff;text-decoration:inherit}a:hover{color:#535bf2}body{margin:0;display:flex;place-items:center;min-width:320px;min-height:100vh}h1{font-size:3.2em;line-height:1.1}button{border-radius:8px;border:1px solid transparent;padding:.6em 1.2em;font-size:1em;font-weight:500;font-family:inherit;background-color:#1a1a1a;cursor:pointer;transition:border-color .25s}button:hover{border-color:#646cff}button:focus,button:focus-visible{outline:4px auto -webkit-focus-ring-color}@media(prefers-color-scheme:light){:root{color:#213547;background-color:#fff}a:hover{color:#747bff}button{background-color:#f9f9f9}}#root{max-width:1280px;margin:0 auto;padding:2rem;text-align:center}.logo{height:6em;padding:1.5em;will-change:filter;transition:filter .3s}.logo:hover{filter:drop-shadow(0 0 2em #646cffaa)}.logo.react:hover{filter:drop-shadow(0 0 2em #61dafbaa)}@keyframes logo-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@media(prefers-reduced-motion:no-preference){a:nth-of-type(2) .logo{animation:logo-spin infinite 20s linear}}.card{padding:2em}.read-the-docs{color:#888} diff --git a/dist/index.html b/dist/index.html new file mode 100644 index 0000000..56bdaa7 --- /dev/null +++ b/dist/index.html @@ -0,0 +1,14 @@ + + + + + + + trainhour + + + + +
+ + diff --git a/dist/vite.svg b/dist/vite.svg new file mode 100644 index 0000000..e7b8dfb --- /dev/null +++ b/dist/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 0000000..b19330b --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,23 @@ +import js from '@eslint/js' +import globals from 'globals' +import reactHooks from 'eslint-plugin-react-hooks' +import reactRefresh from 'eslint-plugin-react-refresh' +import tseslint from 'typescript-eslint' +import { defineConfig, globalIgnores } from 'eslint/config' + +export default defineConfig([ + globalIgnores(['dist']), + { + files: ['**/*.{ts,tsx}'], + extends: [ + js.configs.recommended, + tseslint.configs.recommended, + reactHooks.configs['recommended-latest'], + reactRefresh.configs.vite, + ], + languageOptions: { + ecmaVersion: 2020, + globals: globals.browser, + }, + }, +]) diff --git a/index.html b/index.html new file mode 100644 index 0000000..ea4c568 --- /dev/null +++ b/index.html @@ -0,0 +1,13 @@ + + + + + + + trainhour + + +
+ + + diff --git a/package.json b/package.json new file mode 100644 index 0000000..597a571 --- /dev/null +++ b/package.json @@ -0,0 +1,32 @@ +{ + "name": "trainhour", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc -b && vite build", + "lint": "eslint .", + "preview": "vite preview" + }, + "dependencies": { + "axios": "^1.13.1", + "react": "^19.1.1", + "react-dom": "^19.1.1" + }, + "devDependencies": { + "@eslint/js": "^9.36.0", + "@playwright/test": "^1.56.1", + "@types/node": "^24.6.0", + "@types/react": "^19.1.16", + "@types/react-dom": "^19.1.9", + "@vitejs/plugin-react": "^5.0.4", + "eslint": "^9.36.0", + "eslint-plugin-react-hooks": "^5.2.0", + "eslint-plugin-react-refresh": "^0.4.22", + "globals": "^16.4.0", + "typescript": "~5.9.3", + "typescript-eslint": "^8.45.0", + "vite": "^7.1.7" + } +} diff --git a/playwright.config.ts b/playwright.config.ts new file mode 100644 index 0000000..6dfc0d9 --- /dev/null +++ b/playwright.config.ts @@ -0,0 +1,79 @@ +import { defineConfig, devices } from '@playwright/test'; + +/** + * Read environment variables from file. + * https://github.com/motdotla/dotenv + */ +// import dotenv from 'dotenv'; +// import path from 'path'; +// dotenv.config({ path: path.resolve(__dirname, '.env') }); + +/** + * See https://playwright.dev/docs/test-configuration. + */ +export default defineConfig({ + testDir: './tests', + /* Run tests in files in parallel */ + fullyParallel: true, + /* Fail the build on CI if you accidentally left test.only in the source code. */ + forbidOnly: !!process.env.CI, + /* Retry on CI only */ + retries: process.env.CI ? 2 : 0, + /* Opt out of parallel tests on CI. */ + workers: process.env.CI ? 1 : undefined, + /* Reporter to use. See https://playwright.dev/docs/test-reporters */ + reporter: 'html', + /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */ + use: { + /* Base URL to use in actions like `await page.goto('')`. */ + // baseURL: 'http://localhost:3000', + + /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */ + trace: 'on-first-retry', + }, + + /* Configure projects for major browsers */ + projects: [ + { + name: 'chromium', + use: { ...devices['Desktop Chrome'] }, + }, + + { + name: 'firefox', + use: { ...devices['Desktop Firefox'] }, + }, + + { + name: 'webkit', + use: { ...devices['Desktop Safari'] }, + }, + + /* Test against mobile viewports. */ + // { + // name: 'Mobile Chrome', + // use: { ...devices['Pixel 5'] }, + // }, + // { + // name: 'Mobile Safari', + // use: { ...devices['iPhone 12'] }, + // }, + + /* Test against branded browsers. */ + // { + // name: 'Microsoft Edge', + // use: { ...devices['Desktop Edge'], channel: 'msedge' }, + // }, + // { + // name: 'Google Chrome', + // use: { ...devices['Desktop Chrome'], channel: 'chrome' }, + // }, + ], + + /* Run your local dev server before starting the tests */ + // webServer: { + // command: 'npm run start', + // url: 'http://localhost:3000', + // reuseExistingServer: !process.env.CI, + // }, +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..3da2fe3 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,2343 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + axios: + specifier: ^1.13.1 + version: 1.13.1 + react: + specifier: ^19.1.1 + version: 19.2.0 + react-dom: + specifier: ^19.1.1 + version: 19.2.0(react@19.2.0) + devDependencies: + '@eslint/js': + specifier: ^9.36.0 + version: 9.38.0 + '@playwright/test': + specifier: ^1.56.1 + version: 1.56.1 + '@types/node': + specifier: ^24.6.0 + version: 24.9.1 + '@types/react': + specifier: ^19.1.16 + version: 19.2.2 + '@types/react-dom': + specifier: ^19.1.9 + version: 19.2.2(@types/react@19.2.2) + '@vitejs/plugin-react': + specifier: ^5.0.4 + version: 5.1.0(vite@7.1.12(@types/node@24.9.1)) + eslint: + specifier: ^9.36.0 + version: 9.38.0 + eslint-plugin-react-hooks: + specifier: ^5.2.0 + version: 5.2.0(eslint@9.38.0) + eslint-plugin-react-refresh: + specifier: ^0.4.22 + version: 0.4.24(eslint@9.38.0) + globals: + specifier: ^16.4.0 + version: 16.4.0 + typescript: + specifier: ~5.9.3 + version: 5.9.3 + typescript-eslint: + specifier: ^8.45.0 + version: 8.46.2(eslint@9.38.0)(typescript@5.9.3) + vite: + specifier: ^7.1.7 + version: 7.1.12(@types/node@24.9.1) + +packages: + + '@babel/code-frame@7.27.1': + resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.28.5': + resolution: {integrity: sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.28.5': + resolution: {integrity: sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.28.5': + resolution: {integrity: sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.27.2': + resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-globals@7.28.0': + resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.27.1': + resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.28.3': + resolution: {integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-plugin-utils@7.27.1': + resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.27.1': + resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.28.5': + resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.27.1': + resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.28.4': + resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.28.5': + resolution: {integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-transform-react-jsx-self@7.27.1': + resolution: {integrity: sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-jsx-source@7.27.1': + resolution: {integrity: sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/template@7.27.2': + resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.28.5': + resolution: {integrity: sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.28.5': + resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==} + engines: {node: '>=6.9.0'} + + '@esbuild/aix-ppc64@0.25.11': + resolution: {integrity: sha512-Xt1dOL13m8u0WE8iplx9Ibbm+hFAO0GsU2P34UNoDGvZYkY8ifSiy6Zuc1lYxfG7svWE2fzqCUmFp5HCn51gJg==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.25.11': + resolution: {integrity: sha512-9slpyFBc4FPPz48+f6jyiXOx/Y4v34TUeDDXJpZqAWQn/08lKGeD8aDp9TMn9jDz2CiEuHwfhRmGBvpnd/PWIQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.25.11': + resolution: {integrity: sha512-uoa7dU+Dt3HYsethkJ1k6Z9YdcHjTrSb5NUy66ZfZaSV8hEYGD5ZHbEMXnqLFlbBflLsl89Zke7CAdDJ4JI+Gg==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.25.11': + resolution: {integrity: sha512-Sgiab4xBjPU1QoPEIqS3Xx+R2lezu0LKIEcYe6pftr56PqPygbB7+szVnzoShbx64MUupqoE0KyRlN7gezbl8g==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.25.11': + resolution: {integrity: sha512-VekY0PBCukppoQrycFxUqkCojnTQhdec0vevUL/EDOCnXd9LKWqD/bHwMPzigIJXPhC59Vd1WFIL57SKs2mg4w==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.25.11': + resolution: {integrity: sha512-+hfp3yfBalNEpTGp9loYgbknjR695HkqtY3d3/JjSRUyPg/xd6q+mQqIb5qdywnDxRZykIHs3axEqU6l1+oWEQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.25.11': + resolution: {integrity: sha512-CmKjrnayyTJF2eVuO//uSjl/K3KsMIeYeyN7FyDBjsR3lnSJHaXlVoAK8DZa7lXWChbuOk7NjAc7ygAwrnPBhA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.25.11': + resolution: {integrity: sha512-Dyq+5oscTJvMaYPvW3x3FLpi2+gSZTCE/1ffdwuM6G1ARang/mb3jvjxs0mw6n3Lsw84ocfo9CrNMqc5lTfGOw==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.25.11': + resolution: {integrity: sha512-Qr8AzcplUhGvdyUF08A1kHU3Vr2O88xxP0Tm8GcdVOUm25XYcMPp2YqSVHbLuXzYQMf9Bh/iKx7YPqECs6ffLA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.25.11': + resolution: {integrity: sha512-TBMv6B4kCfrGJ8cUPo7vd6NECZH/8hPpBHHlYI3qzoYFvWu2AdTvZNuU/7hsbKWqu/COU7NIK12dHAAqBLLXgw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.25.11': + resolution: {integrity: sha512-TmnJg8BMGPehs5JKrCLqyWTVAvielc615jbkOirATQvWWB1NMXY77oLMzsUjRLa0+ngecEmDGqt5jiDC6bfvOw==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.25.11': + resolution: {integrity: sha512-DIGXL2+gvDaXlaq8xruNXUJdT5tF+SBbJQKbWy/0J7OhU8gOHOzKmGIlfTTl6nHaCOoipxQbuJi7O++ldrxgMw==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.25.11': + resolution: {integrity: sha512-Osx1nALUJu4pU43o9OyjSCXokFkFbyzjXb6VhGIJZQ5JZi8ylCQ9/LFagolPsHtgw6himDSyb5ETSfmp4rpiKQ==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.25.11': + resolution: {integrity: sha512-nbLFgsQQEsBa8XSgSTSlrnBSrpoWh7ioFDUmwo158gIm5NNP+17IYmNWzaIzWmgCxq56vfr34xGkOcZ7jX6CPw==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.25.11': + resolution: {integrity: sha512-HfyAmqZi9uBAbgKYP1yGuI7tSREXwIb438q0nqvlpxAOs3XnZ8RsisRfmVsgV486NdjD7Mw2UrFSw51lzUk1ww==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.25.11': + resolution: {integrity: sha512-HjLqVgSSYnVXRisyfmzsH6mXqyvj0SA7pG5g+9W7ESgwA70AXYNpfKBqh1KbTxmQVaYxpzA/SvlB9oclGPbApw==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.25.11': + resolution: {integrity: sha512-HSFAT4+WYjIhrHxKBwGmOOSpphjYkcswF449j6EjsjbinTZbp8PJtjsVK1XFJStdzXdy/jaddAep2FGY+wyFAQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.25.11': + resolution: {integrity: sha512-hr9Oxj1Fa4r04dNpWr3P8QKVVsjQhqrMSUzZzf+LZcYjZNqhA3IAfPQdEh1FLVUJSiu6sgAwp3OmwBfbFgG2Xg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.25.11': + resolution: {integrity: sha512-u7tKA+qbzBydyj0vgpu+5h5AeudxOAGncb8N6C9Kh1N4n7wU1Xw1JDApsRjpShRpXRQlJLb9wY28ELpwdPcZ7A==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.25.11': + resolution: {integrity: sha512-Qq6YHhayieor3DxFOoYM1q0q1uMFYb7cSpLD2qzDSvK1NAvqFi8Xgivv0cFC6J+hWVw2teCYltyy9/m/14ryHg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.25.11': + resolution: {integrity: sha512-CN+7c++kkbrckTOz5hrehxWN7uIhFFlmS/hqziSFVWpAzpWrQoAG4chH+nN3Be+Kzv/uuo7zhX716x3Sn2Jduw==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openharmony-arm64@0.25.11': + resolution: {integrity: sha512-rOREuNIQgaiR+9QuNkbkxubbp8MSO9rONmwP5nKncnWJ9v5jQ4JxFnLu4zDSRPf3x4u+2VN4pM4RdyIzDty/wQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/sunos-x64@0.25.11': + resolution: {integrity: sha512-nq2xdYaWxyg9DcIyXkZhcYulC6pQ2FuCgem3LI92IwMgIZ69KHeY8T4Y88pcwoLIjbed8n36CyKoYRDygNSGhA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.25.11': + resolution: {integrity: sha512-3XxECOWJq1qMZ3MN8srCJ/QfoLpL+VaxD/WfNRm1O3B4+AZ/BnLVgFbUV3eiRYDMXetciH16dwPbbHqwe1uU0Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.25.11': + resolution: {integrity: sha512-3ukss6gb9XZ8TlRyJlgLn17ecsK4NSQTmdIXRASVsiS2sQ6zPPZklNJT5GR5tE/MUarymmy8kCEf5xPCNCqVOA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.25.11': + resolution: {integrity: sha512-D7Hpz6A2L4hzsRpPaCYkQnGOotdUpDzSGRIv9I+1ITdHROSFUWW95ZPZWQmGka1Fg7W3zFJowyn9WGwMJ0+KPA==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@eslint-community/eslint-utils@4.9.0': + resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.12.2': + resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/config-array@0.21.1': + resolution: {integrity: sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/config-helpers@0.4.1': + resolution: {integrity: sha512-csZAzkNhsgwb0I/UAV6/RGFTbiakPCf0ZrGmrIxQpYvGZ00PhTkSnyKNolphgIvmnJeGw6rcGVEXfTzUnFuEvw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/core@0.16.0': + resolution: {integrity: sha512-nmC8/totwobIiFcGkDza3GIKfAw1+hLiYVrh3I1nIomQ8PEr5cxg34jnkmGawul/ep52wGRAcyeDCNtWKSOj4Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/eslintrc@3.3.1': + resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@9.38.0': + resolution: {integrity: sha512-UZ1VpFvXf9J06YG9xQBdnzU+kthors6KjhMAl6f4gH4usHyh31rUf2DLGInT8RFYIReYXNSydgPY0V2LuWgl7A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/object-schema@2.1.7': + resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/plugin-kit@0.4.0': + resolution: {integrity: sha512-sB5uyeq+dwCWyPi31B2gQlVlo+j5brPlWx4yZBrEaRo/nhdDE8Xke1gsGgtiBdaBTxuTkceLVuVt/pclrasb0A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@humanfs/core@0.19.1': + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.7': + resolution: {integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==} + engines: {node: '>=18.18.0'} + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/retry@0.4.3': + resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} + engines: {node: '>=18.18'} + + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@playwright/test@1.56.1': + resolution: {integrity: sha512-vSMYtL/zOcFpvJCW71Q/OEGQb7KYBPAdKh35WNSkaZA75JlAO8ED8UN6GUNTm3drWomcbcqRPFqQbLae8yBTdg==} + engines: {node: '>=18'} + hasBin: true + + '@rolldown/pluginutils@1.0.0-beta.43': + resolution: {integrity: sha512-5Uxg7fQUCmfhax7FJke2+8B6cqgeUJUD9o2uXIKXhD+mG0mL6NObmVoi9wXEU1tY89mZKgAYA6fTbftx3q2ZPQ==} + + '@rollup/rollup-android-arm-eabi@4.52.5': + resolution: {integrity: sha512-8c1vW4ocv3UOMp9K+gToY5zL2XiiVw3k7f1ksf4yO1FlDFQ1C2u72iACFnSOceJFsWskc2WZNqeRhFRPzv+wtQ==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.52.5': + resolution: {integrity: sha512-mQGfsIEFcu21mvqkEKKu2dYmtuSZOBMmAl5CFlPGLY94Vlcm+zWApK7F/eocsNzp8tKmbeBP8yXyAbx0XHsFNA==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.52.5': + resolution: {integrity: sha512-takF3CR71mCAGA+v794QUZ0b6ZSrgJkArC+gUiG6LB6TQty9T0Mqh3m2ImRBOxS2IeYBo4lKWIieSvnEk2OQWA==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.52.5': + resolution: {integrity: sha512-W901Pla8Ya95WpxDn//VF9K9u2JbocwV/v75TE0YIHNTbhqUTv9w4VuQ9MaWlNOkkEfFwkdNhXgcLqPSmHy0fA==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.52.5': + resolution: {integrity: sha512-QofO7i7JycsYOWxe0GFqhLmF6l1TqBswJMvICnRUjqCx8b47MTo46W8AoeQwiokAx3zVryVnxtBMcGcnX12LvA==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.52.5': + resolution: {integrity: sha512-jr21b/99ew8ujZubPo9skbrItHEIE50WdV86cdSoRkKtmWa+DDr6fu2c/xyRT0F/WazZpam6kk7IHBerSL7LDQ==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.52.5': + resolution: {integrity: sha512-PsNAbcyv9CcecAUagQefwX8fQn9LQ4nZkpDboBOttmyffnInRy8R8dSg6hxxl2Re5QhHBf6FYIDhIj5v982ATQ==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-musleabihf@4.52.5': + resolution: {integrity: sha512-Fw4tysRutyQc/wwkmcyoqFtJhh0u31K+Q6jYjeicsGJJ7bbEq8LwPWV/w0cnzOqR2m694/Af6hpFayLJZkG2VQ==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.52.5': + resolution: {integrity: sha512-a+3wVnAYdQClOTlyapKmyI6BLPAFYs0JM8HRpgYZQO02rMR09ZcV9LbQB+NL6sljzG38869YqThrRnfPMCDtZg==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.52.5': + resolution: {integrity: sha512-AvttBOMwO9Pcuuf7m9PkC1PUIKsfaAJ4AYhy944qeTJgQOqJYJ9oVl2nYgY7Rk0mkbsuOpCAYSs6wLYB2Xiw0Q==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-loong64-gnu@4.52.5': + resolution: {integrity: sha512-DkDk8pmXQV2wVrF6oq5tONK6UHLz/XcEVow4JTTerdeV1uqPeHxwcg7aFsfnSm9L+OO8WJsWotKM2JJPMWrQtA==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-ppc64-gnu@4.52.5': + resolution: {integrity: sha512-W/b9ZN/U9+hPQVvlGwjzi+Wy4xdoH2I8EjaCkMvzpI7wJUs8sWJ03Rq96jRnHkSrcHTpQe8h5Tg3ZzUPGauvAw==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.52.5': + resolution: {integrity: sha512-sjQLr9BW7R/ZiXnQiWPkErNfLMkkWIoCz7YMn27HldKsADEKa5WYdobaa1hmN6slu9oWQbB6/jFpJ+P2IkVrmw==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-riscv64-musl@4.52.5': + resolution: {integrity: sha512-hq3jU/kGyjXWTvAh2awn8oHroCbrPm8JqM7RUpKjalIRWWXE01CQOf/tUNWNHjmbMHg/hmNCwc/Pz3k1T/j/Lg==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.52.5': + resolution: {integrity: sha512-gn8kHOrku8D4NGHMK1Y7NA7INQTRdVOntt1OCYypZPRt6skGbddska44K8iocdpxHTMMNui5oH4elPH4QOLrFQ==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.52.5': + resolution: {integrity: sha512-hXGLYpdhiNElzN770+H2nlx+jRog8TyynpTVzdlc6bndktjKWyZyiCsuDAlpd+j+W+WNqfcyAWz9HxxIGfZm1Q==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.52.5': + resolution: {integrity: sha512-arCGIcuNKjBoKAXD+y7XomR9gY6Mw7HnFBv5Rw7wQRvwYLR7gBAgV7Mb2QTyjXfTveBNFAtPt46/36vV9STLNg==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-openharmony-arm64@4.52.5': + resolution: {integrity: sha512-QoFqB6+/9Rly/RiPjaomPLmR/13cgkIGfA40LHly9zcH1S0bN2HVFYk3a1eAyHQyjs3ZJYlXvIGtcCs5tko9Cw==} + cpu: [arm64] + os: [openharmony] + + '@rollup/rollup-win32-arm64-msvc@4.52.5': + resolution: {integrity: sha512-w0cDWVR6MlTstla1cIfOGyl8+qb93FlAVutcor14Gf5Md5ap5ySfQ7R9S/NjNaMLSFdUnKGEasmVnu3lCMqB7w==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.52.5': + resolution: {integrity: sha512-Aufdpzp7DpOTULJCuvzqcItSGDH73pF3ko/f+ckJhxQyHtp67rHw3HMNxoIdDMUITJESNE6a8uh4Lo4SLouOUg==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-gnu@4.52.5': + resolution: {integrity: sha512-UGBUGPFp1vkj6p8wCRraqNhqwX/4kNQPS57BCFc8wYh0g94iVIW33wJtQAx3G7vrjjNtRaxiMUylM0ktp/TRSQ==} + cpu: [x64] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.52.5': + resolution: {integrity: sha512-TAcgQh2sSkykPRWLrdyy2AiceMckNf5loITqXxFI5VuQjS5tSuw3WlwdN8qv8vzjLAUTvYaH/mVjSFpbkFbpTg==} + cpu: [x64] + os: [win32] + + '@types/babel__core@7.20.5': + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + + '@types/babel__generator@7.27.0': + resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==} + + '@types/babel__template@7.4.4': + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + + '@types/babel__traverse@7.28.0': + resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==} + + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/node@24.9.1': + resolution: {integrity: sha512-QoiaXANRkSXK6p0Duvt56W208du4P9Uye9hWLWgGMDTEoKPhuenzNcC4vGUmrNkiOKTlIrBoyNQYNpSwfEZXSg==} + + '@types/react-dom@19.2.2': + resolution: {integrity: sha512-9KQPoO6mZCi7jcIStSnlOWn2nEF3mNmyr3rIAsGnAbQKYbRLyqmeSc39EVgtxXVia+LMT8j3knZLAZAh+xLmrw==} + peerDependencies: + '@types/react': ^19.2.0 + + '@types/react@19.2.2': + resolution: {integrity: sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA==} + + '@typescript-eslint/eslint-plugin@8.46.2': + resolution: {integrity: sha512-ZGBMToy857/NIPaaCucIUQgqueOiq7HeAKkhlvqVV4lm089zUFW6ikRySx2v+cAhKeUCPuWVHeimyk6Dw1iY3w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.46.2 + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/parser@8.46.2': + resolution: {integrity: sha512-BnOroVl1SgrPLywqxyqdJ4l3S2MsKVLDVxZvjI1Eoe8ev2r3kGDo+PcMihNmDE+6/KjkTubSJnmqGZZjQSBq/g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/project-service@8.46.2': + resolution: {integrity: sha512-PULOLZ9iqwI7hXcmL4fVfIsBi6AN9YxRc0frbvmg8f+4hQAjQ5GYNKK0DIArNo+rOKmR/iBYwkpBmnIwin4wBg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/scope-manager@8.46.2': + resolution: {integrity: sha512-LF4b/NmGvdWEHD2H4MsHD8ny6JpiVNDzrSZr3CsckEgCbAGZbYM4Cqxvi9L+WqDMT+51Ozy7lt2M+d0JLEuBqA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/tsconfig-utils@8.46.2': + resolution: {integrity: sha512-a7QH6fw4S57+F5y2FIxxSDyi5M4UfGF+Jl1bCGd7+L4KsaUY80GsiF/t0UoRFDHAguKlBaACWJRmdrc6Xfkkag==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/type-utils@8.46.2': + resolution: {integrity: sha512-HbPM4LbaAAt/DjxXaG9yiS9brOOz6fabal4uvUmaUYe6l3K1phQDMQKBRUrr06BQkxkvIZVVHttqiybM9nJsLA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/types@8.46.2': + resolution: {integrity: sha512-lNCWCbq7rpg7qDsQrd3D6NyWYu+gkTENkG5IKYhUIcxSb59SQC/hEQ+MrG4sTgBVghTonNWq42bA/d4yYumldQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@8.46.2': + resolution: {integrity: sha512-f7rW7LJ2b7Uh2EiQ+7sza6RDZnajbNbemn54Ob6fRwQbgcIn+GWfyuHDHRYgRoZu1P4AayVScrRW+YfbTvPQoQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/utils@8.46.2': + resolution: {integrity: sha512-sExxzucx0Tud5tE0XqR0lT0psBQvEpnpiul9XbGUB1QwpWJJAps1O/Z7hJxLGiZLBKMCutjTzDgmd1muEhBnVg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/visitor-keys@8.46.2': + resolution: {integrity: sha512-tUFMXI4gxzzMXt4xpGJEsBsTox0XbNQ1y94EwlD/CuZwFcQP79xfQqMhau9HsRc/J0cAPA/HZt1dZPtGn9V/7w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@vitejs/plugin-react@5.1.0': + resolution: {integrity: sha512-4LuWrg7EKWgQaMJfnN+wcmbAW+VSsCmqGohftWjuct47bv8uE4n/nPpq4XjJPsxgq00GGG5J8dvBczp8uxScew==} + engines: {node: ^20.19.0 || >=22.12.0} + peerDependencies: + vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn@8.15.0: + resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} + engines: {node: '>=0.4.0'} + hasBin: true + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + axios@1.13.1: + resolution: {integrity: sha512-hU4EGxxt+j7TQijx1oYdAjw4xuIp1wRQSsbMFwSthCWeBQur1eF+qJ5iQ5sN3Tw8YRzQNKb8jszgBdMDVqwJcw==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + baseline-browser-mapping@2.8.20: + resolution: {integrity: sha512-JMWsdF+O8Orq3EMukbUN1QfbLK9mX2CkUmQBcW2T0s8OmdAUL5LLM/6wFwSrqXzlXB13yhyK9gTKS1rIizOduQ==} + hasBin: true + + brace-expansion@1.1.12: + resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} + + brace-expansion@2.0.2: + resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browserslist@4.27.0: + resolution: {integrity: sha512-AXVQwdhot1eqLihwasPElhX2tAZiBjWdJ9i/Zcj2S6QYIjkx62OKSfnobkriB81C3l4w0rVy3Nt4jaTBltYEpw==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + caniuse-lite@1.0.30001751: + resolution: {integrity: sha512-A0QJhug0Ly64Ii3eIqHu5X51ebln3k4yTUkY1j8drqpWHVreg/VLijN48cZ1bYPiqOQuqpkIKnzr/Ul8V+p6Cw==} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + electron-to-chromium@1.5.240: + resolution: {integrity: sha512-OBwbZjWgrCOH+g6uJsA2/7Twpas2OlepS9uvByJjR2datRDuKGYeD+nP8lBBks2qnB7bGJNHDUx7c/YLaT3QMQ==} + + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + + esbuild@0.25.11: + resolution: {integrity: sha512-KohQwyzrKTQmhXDW1PjCv3Tyspn9n5GcY2RTDqeORIdIJY8yKIF7sTSopFmn/wpMPW4rdPXI0UE5LJLuq3bx0Q==} + engines: {node: '>=18'} + hasBin: true + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eslint-plugin-react-hooks@5.2.0: + resolution: {integrity: sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==} + engines: {node: '>=10'} + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 + + eslint-plugin-react-refresh@0.4.24: + resolution: {integrity: sha512-nLHIW7TEq3aLrEYWpVaJ1dRgFR+wLDPN8e8FpYAql/bMV2oBEfC37K0gLEGgv9fy66juNShSMV8OkTqzltcG/w==} + peerDependencies: + eslint: '>=8.40' + + eslint-scope@8.4.0: + resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@4.2.1: + resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint@9.38.0: + resolution: {integrity: sha512-t5aPOpmtJcZcz5UJyY2GbvpDlsK5E8JqRqoKtfiKE3cNh437KIqfJr3A3AKf5k64NPx6d0G3dno6XDY05PqPtw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + + espree@10.4.0: + resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fastq@1.19.1: + resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} + + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} + + flatted@3.3.3: + resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} + + follow-redirects@1.15.11: + resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + form-data@4.0.4: + resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==} + engines: {node: '>= 6'} + + fsevents@2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} + + globals@16.4.0: + resolution: {integrity: sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw==} + engines: {node: '>=18'} + + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + ignore@7.0.5: + resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} + engines: {node: '>= 4'} + + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} + engines: {node: '>=6'} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + node-releases@2.0.26: + resolution: {integrity: sha512-S2M9YimhSjBSvYnlr5/+umAnPHE++ODwt5e2Ij6FoX45HA/s4vHdkDx1eax2pAPeAOqu4s9b7ppahsyEFdVqQA==} + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + picomatch@4.0.3: + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} + engines: {node: '>=12'} + + playwright-core@1.56.1: + resolution: {integrity: sha512-hutraynyn31F+Bifme+Ps9Vq59hKuUCz7H1kDOcBs+2oGguKkWTU50bBWrtz34OUWmIwpBTWDxaRPXrIXkgvmQ==} + engines: {node: '>=18'} + hasBin: true + + playwright@1.56.1: + resolution: {integrity: sha512-aFi5B0WovBHTEvpM3DzXTUaeN6eN0qWnTkKx4NQaH4Wvcmc153PdaY2UBdSYKaGYw+UyWXSVyxDUg5DoPEttjw==} + engines: {node: '>=18'} + hasBin: true + + postcss@8.5.6: + resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} + engines: {node: ^10 || ^12 || >=14} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + react-dom@19.2.0: + resolution: {integrity: sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==} + peerDependencies: + react: ^19.2.0 + + react-refresh@0.18.0: + resolution: {integrity: sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==} + engines: {node: '>=0.10.0'} + + react@19.2.0: + resolution: {integrity: sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==} + engines: {node: '>=0.10.0'} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rollup@4.52.5: + resolution: {integrity: sha512-3GuObel8h7Kqdjt0gxkEzaifHTqLVW56Y/bjN7PSQtkKr0w3V/QYSdt6QWYtd7A1xUtYQigtdUfgj1RvWVtorw==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + scheduler@0.27.0: + resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.7.3: + resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} + engines: {node: '>=10'} + hasBin: true + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + tinyglobby@0.2.15: + resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} + engines: {node: '>=12.0.0'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + ts-api-utils@2.1.0: + resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + typescript-eslint@8.46.2: + resolution: {integrity: sha512-vbw8bOmiuYNdzzV3lsiWv6sRwjyuKJMQqWulBOU7M0RrxedXledX8G8kBbQeiOYDnTfiXz0Y4081E1QMNB6iQg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + engines: {node: '>=14.17'} + hasBin: true + + undici-types@7.16.0: + resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} + + update-browserslist-db@1.1.4: + resolution: {integrity: sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + vite@7.1.12: + resolution: {integrity: sha512-ZWyE8YXEXqJrrSLvYgrRP7p62OziLW7xI5HYGWFzOvupfAlrLvURSzv/FyGyy0eidogEM3ujU+kUG1zuHgb6Ug==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@types/node': ^20.19.0 || >=22.12.0 + jiti: '>=1.21.0' + less: ^4.0.0 + lightningcss: ^1.21.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + +snapshots: + + '@babel/code-frame@7.27.1': + dependencies: + '@babel/helper-validator-identifier': 7.28.5 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.28.5': {} + + '@babel/core@7.28.5': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.28.5 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5) + '@babel/helpers': 7.28.4 + '@babel/parser': 7.28.5 + '@babel/template': 7.27.2 + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 + '@jridgewell/remapping': 2.3.5 + convert-source-map: 2.0.0 + debug: 4.4.3 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.28.5': + dependencies: + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + jsesc: 3.1.0 + + '@babel/helper-compilation-targets@7.27.2': + dependencies: + '@babel/compat-data': 7.28.5 + '@babel/helper-validator-option': 7.27.1 + browserslist: 4.27.0 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-globals@7.28.0': {} + + '@babel/helper-module-imports@7.27.1': + dependencies: + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 + '@babel/traverse': 7.28.5 + transitivePeerDependencies: + - supports-color + + '@babel/helper-plugin-utils@7.27.1': {} + + '@babel/helper-string-parser@7.27.1': {} + + '@babel/helper-validator-identifier@7.28.5': {} + + '@babel/helper-validator-option@7.27.1': {} + + '@babel/helpers@7.28.4': + dependencies: + '@babel/template': 7.27.2 + '@babel/types': 7.28.5 + + '@babel/parser@7.28.5': + dependencies: + '@babel/types': 7.28.5 + + '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/template@7.27.2': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 + + '@babel/traverse@7.28.5': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.28.5 + '@babel/helper-globals': 7.28.0 + '@babel/parser': 7.28.5 + '@babel/template': 7.27.2 + '@babel/types': 7.28.5 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.28.5': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 + + '@esbuild/aix-ppc64@0.25.11': + optional: true + + '@esbuild/android-arm64@0.25.11': + optional: true + + '@esbuild/android-arm@0.25.11': + optional: true + + '@esbuild/android-x64@0.25.11': + optional: true + + '@esbuild/darwin-arm64@0.25.11': + optional: true + + '@esbuild/darwin-x64@0.25.11': + optional: true + + '@esbuild/freebsd-arm64@0.25.11': + optional: true + + '@esbuild/freebsd-x64@0.25.11': + optional: true + + '@esbuild/linux-arm64@0.25.11': + optional: true + + '@esbuild/linux-arm@0.25.11': + optional: true + + '@esbuild/linux-ia32@0.25.11': + optional: true + + '@esbuild/linux-loong64@0.25.11': + optional: true + + '@esbuild/linux-mips64el@0.25.11': + optional: true + + '@esbuild/linux-ppc64@0.25.11': + optional: true + + '@esbuild/linux-riscv64@0.25.11': + optional: true + + '@esbuild/linux-s390x@0.25.11': + optional: true + + '@esbuild/linux-x64@0.25.11': + optional: true + + '@esbuild/netbsd-arm64@0.25.11': + optional: true + + '@esbuild/netbsd-x64@0.25.11': + optional: true + + '@esbuild/openbsd-arm64@0.25.11': + optional: true + + '@esbuild/openbsd-x64@0.25.11': + optional: true + + '@esbuild/openharmony-arm64@0.25.11': + optional: true + + '@esbuild/sunos-x64@0.25.11': + optional: true + + '@esbuild/win32-arm64@0.25.11': + optional: true + + '@esbuild/win32-ia32@0.25.11': + optional: true + + '@esbuild/win32-x64@0.25.11': + optional: true + + '@eslint-community/eslint-utils@4.9.0(eslint@9.38.0)': + dependencies: + eslint: 9.38.0 + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.12.2': {} + + '@eslint/config-array@0.21.1': + dependencies: + '@eslint/object-schema': 2.1.7 + debug: 4.4.3 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@eslint/config-helpers@0.4.1': + dependencies: + '@eslint/core': 0.16.0 + + '@eslint/core@0.16.0': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/eslintrc@3.3.1': + dependencies: + ajv: 6.12.6 + debug: 4.4.3 + espree: 10.4.0 + globals: 14.0.0 + ignore: 5.3.2 + import-fresh: 3.3.1 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@9.38.0': {} + + '@eslint/object-schema@2.1.7': {} + + '@eslint/plugin-kit@0.4.0': + dependencies: + '@eslint/core': 0.16.0 + levn: 0.4.1 + + '@humanfs/core@0.19.1': {} + + '@humanfs/node@0.16.7': + dependencies: + '@humanfs/core': 0.19.1 + '@humanwhocodes/retry': 0.4.3 + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/retry@0.4.3': {} + + '@jridgewell/gen-mapping@0.3.13': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/sourcemap-codec@1.5.5': {} + + '@jridgewell/trace-mapping@0.3.31': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.19.1 + + '@playwright/test@1.56.1': + dependencies: + playwright: 1.56.1 + + '@rolldown/pluginutils@1.0.0-beta.43': {} + + '@rollup/rollup-android-arm-eabi@4.52.5': + optional: true + + '@rollup/rollup-android-arm64@4.52.5': + optional: true + + '@rollup/rollup-darwin-arm64@4.52.5': + optional: true + + '@rollup/rollup-darwin-x64@4.52.5': + optional: true + + '@rollup/rollup-freebsd-arm64@4.52.5': + optional: true + + '@rollup/rollup-freebsd-x64@4.52.5': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.52.5': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.52.5': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.52.5': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.52.5': + optional: true + + '@rollup/rollup-linux-loong64-gnu@4.52.5': + optional: true + + '@rollup/rollup-linux-ppc64-gnu@4.52.5': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.52.5': + optional: true + + '@rollup/rollup-linux-riscv64-musl@4.52.5': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.52.5': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.52.5': + optional: true + + '@rollup/rollup-linux-x64-musl@4.52.5': + optional: true + + '@rollup/rollup-openharmony-arm64@4.52.5': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.52.5': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.52.5': + optional: true + + '@rollup/rollup-win32-x64-gnu@4.52.5': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.52.5': + optional: true + + '@types/babel__core@7.20.5': + dependencies: + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 + '@types/babel__generator': 7.27.0 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.28.0 + + '@types/babel__generator@7.27.0': + dependencies: + '@babel/types': 7.28.5 + + '@types/babel__template@7.4.4': + dependencies: + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 + + '@types/babel__traverse@7.28.0': + dependencies: + '@babel/types': 7.28.5 + + '@types/estree@1.0.8': {} + + '@types/json-schema@7.0.15': {} + + '@types/node@24.9.1': + dependencies: + undici-types: 7.16.0 + + '@types/react-dom@19.2.2(@types/react@19.2.2)': + dependencies: + '@types/react': 19.2.2 + + '@types/react@19.2.2': + dependencies: + csstype: 3.1.3 + + '@typescript-eslint/eslint-plugin@8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.38.0)(typescript@5.9.3))(eslint@9.38.0)(typescript@5.9.3)': + dependencies: + '@eslint-community/regexpp': 4.12.2 + '@typescript-eslint/parser': 8.46.2(eslint@9.38.0)(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.46.2 + '@typescript-eslint/type-utils': 8.46.2(eslint@9.38.0)(typescript@5.9.3) + '@typescript-eslint/utils': 8.46.2(eslint@9.38.0)(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.46.2 + eslint: 9.38.0 + graphemer: 1.4.0 + ignore: 7.0.5 + natural-compare: 1.4.0 + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@8.46.2(eslint@9.38.0)(typescript@5.9.3)': + dependencies: + '@typescript-eslint/scope-manager': 8.46.2 + '@typescript-eslint/types': 8.46.2 + '@typescript-eslint/typescript-estree': 8.46.2(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.46.2 + debug: 4.4.3 + eslint: 9.38.0 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/project-service@8.46.2(typescript@5.9.3)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.46.2(typescript@5.9.3) + '@typescript-eslint/types': 8.46.2 + debug: 4.4.3 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@8.46.2': + dependencies: + '@typescript-eslint/types': 8.46.2 + '@typescript-eslint/visitor-keys': 8.46.2 + + '@typescript-eslint/tsconfig-utils@8.46.2(typescript@5.9.3)': + dependencies: + typescript: 5.9.3 + + '@typescript-eslint/type-utils@8.46.2(eslint@9.38.0)(typescript@5.9.3)': + dependencies: + '@typescript-eslint/types': 8.46.2 + '@typescript-eslint/typescript-estree': 8.46.2(typescript@5.9.3) + '@typescript-eslint/utils': 8.46.2(eslint@9.38.0)(typescript@5.9.3) + debug: 4.4.3 + eslint: 9.38.0 + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/types@8.46.2': {} + + '@typescript-eslint/typescript-estree@8.46.2(typescript@5.9.3)': + dependencies: + '@typescript-eslint/project-service': 8.46.2(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.46.2(typescript@5.9.3) + '@typescript-eslint/types': 8.46.2 + '@typescript-eslint/visitor-keys': 8.46.2 + debug: 4.4.3 + fast-glob: 3.3.3 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.7.3 + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.46.2(eslint@9.38.0)(typescript@5.9.3)': + dependencies: + '@eslint-community/eslint-utils': 4.9.0(eslint@9.38.0) + '@typescript-eslint/scope-manager': 8.46.2 + '@typescript-eslint/types': 8.46.2 + '@typescript-eslint/typescript-estree': 8.46.2(typescript@5.9.3) + eslint: 9.38.0 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/visitor-keys@8.46.2': + dependencies: + '@typescript-eslint/types': 8.46.2 + eslint-visitor-keys: 4.2.1 + + '@vitejs/plugin-react@5.1.0(vite@7.1.12(@types/node@24.9.1))': + dependencies: + '@babel/core': 7.28.5 + '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.28.5) + '@rolldown/pluginutils': 1.0.0-beta.43 + '@types/babel__core': 7.20.5 + react-refresh: 0.18.0 + vite: 7.1.12(@types/node@24.9.1) + transitivePeerDependencies: + - supports-color + + acorn-jsx@5.3.2(acorn@8.15.0): + dependencies: + acorn: 8.15.0 + + acorn@8.15.0: {} + + ajv@6.12.6: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + argparse@2.0.1: {} + + asynckit@0.4.0: {} + + axios@1.13.1: + dependencies: + follow-redirects: 1.15.11 + form-data: 4.0.4 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + + balanced-match@1.0.2: {} + + baseline-browser-mapping@2.8.20: {} + + brace-expansion@1.1.12: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.0.2: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + browserslist@4.27.0: + dependencies: + baseline-browser-mapping: 2.8.20 + caniuse-lite: 1.0.30001751 + electron-to-chromium: 1.5.240 + node-releases: 2.0.26 + update-browserslist-db: 1.1.4(browserslist@4.27.0) + + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + callsites@3.1.0: {} + + caniuse-lite@1.0.30001751: {} + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + concat-map@0.0.1: {} + + convert-source-map@2.0.0: {} + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + csstype@3.1.3: {} + + debug@4.4.3: + dependencies: + ms: 2.1.3 + + deep-is@0.1.4: {} + + delayed-stream@1.0.0: {} + + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 + + electron-to-chromium@1.5.240: {} + + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-object-atoms@1.1.1: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.1.0: + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + esbuild@0.25.11: + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.11 + '@esbuild/android-arm': 0.25.11 + '@esbuild/android-arm64': 0.25.11 + '@esbuild/android-x64': 0.25.11 + '@esbuild/darwin-arm64': 0.25.11 + '@esbuild/darwin-x64': 0.25.11 + '@esbuild/freebsd-arm64': 0.25.11 + '@esbuild/freebsd-x64': 0.25.11 + '@esbuild/linux-arm': 0.25.11 + '@esbuild/linux-arm64': 0.25.11 + '@esbuild/linux-ia32': 0.25.11 + '@esbuild/linux-loong64': 0.25.11 + '@esbuild/linux-mips64el': 0.25.11 + '@esbuild/linux-ppc64': 0.25.11 + '@esbuild/linux-riscv64': 0.25.11 + '@esbuild/linux-s390x': 0.25.11 + '@esbuild/linux-x64': 0.25.11 + '@esbuild/netbsd-arm64': 0.25.11 + '@esbuild/netbsd-x64': 0.25.11 + '@esbuild/openbsd-arm64': 0.25.11 + '@esbuild/openbsd-x64': 0.25.11 + '@esbuild/openharmony-arm64': 0.25.11 + '@esbuild/sunos-x64': 0.25.11 + '@esbuild/win32-arm64': 0.25.11 + '@esbuild/win32-ia32': 0.25.11 + '@esbuild/win32-x64': 0.25.11 + + escalade@3.2.0: {} + + escape-string-regexp@4.0.0: {} + + eslint-plugin-react-hooks@5.2.0(eslint@9.38.0): + dependencies: + eslint: 9.38.0 + + eslint-plugin-react-refresh@0.4.24(eslint@9.38.0): + dependencies: + eslint: 9.38.0 + + eslint-scope@8.4.0: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint-visitor-keys@4.2.1: {} + + eslint@9.38.0: + dependencies: + '@eslint-community/eslint-utils': 4.9.0(eslint@9.38.0) + '@eslint-community/regexpp': 4.12.2 + '@eslint/config-array': 0.21.1 + '@eslint/config-helpers': 0.4.1 + '@eslint/core': 0.16.0 + '@eslint/eslintrc': 3.3.1 + '@eslint/js': 9.38.0 + '@eslint/plugin-kit': 0.4.0 + '@humanfs/node': 0.16.7 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.3 + '@types/estree': 1.0.8 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.3 + escape-string-regexp: 4.0.0 + eslint-scope: 8.4.0 + eslint-visitor-keys: 4.2.1 + espree: 10.4.0 + esquery: 1.6.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.4 + transitivePeerDependencies: + - supports-color + + espree@10.4.0: + dependencies: + acorn: 8.15.0 + acorn-jsx: 5.3.2(acorn@8.15.0) + eslint-visitor-keys: 4.2.1 + + esquery@1.6.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@5.3.0: {} + + esutils@2.0.3: {} + + fast-deep-equal@3.1.3: {} + + fast-glob@3.3.3: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + fastq@1.19.1: + dependencies: + reusify: 1.1.0 + + fdir@6.5.0(picomatch@4.0.3): + optionalDependencies: + picomatch: 4.0.3 + + file-entry-cache@8.0.0: + dependencies: + flat-cache: 4.0.1 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat-cache@4.0.1: + dependencies: + flatted: 3.3.3 + keyv: 4.5.4 + + flatted@3.3.3: {} + + follow-redirects@1.15.11: {} + + form-data@4.0.4: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + hasown: 2.0.2 + mime-types: 2.1.35 + + fsevents@2.3.2: + optional: true + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + gensync@1.0.0-beta.2: {} + + get-intrinsic@1.3.0: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + math-intrinsics: 1.1.0 + + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + globals@14.0.0: {} + + globals@16.4.0: {} + + gopd@1.2.0: {} + + graphemer@1.4.0: {} + + has-flag@4.0.0: {} + + has-symbols@1.1.0: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.1.0 + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + ignore@5.3.2: {} + + ignore@7.0.5: {} + + import-fresh@3.3.1: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + imurmurhash@0.1.4: {} + + is-extglob@2.1.1: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-number@7.0.0: {} + + isexe@2.0.0: {} + + js-tokens@4.0.0: {} + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + jsesc@3.1.0: {} + + json-buffer@3.0.1: {} + + json-schema-traverse@0.4.1: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + json5@2.2.3: {} + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash.merge@4.6.2: {} + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + + math-intrinsics@1.1.0: {} + + merge2@1.4.1: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.12 + + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.2 + + ms@2.1.3: {} + + nanoid@3.3.11: {} + + natural-compare@1.4.0: {} + + node-releases@2.0.26: {} + + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + path-exists@4.0.0: {} + + path-key@3.1.1: {} + + picocolors@1.1.1: {} + + picomatch@2.3.1: {} + + picomatch@4.0.3: {} + + playwright-core@1.56.1: {} + + playwright@1.56.1: + dependencies: + playwright-core: 1.56.1 + optionalDependencies: + fsevents: 2.3.2 + + postcss@8.5.6: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + prelude-ls@1.2.1: {} + + proxy-from-env@1.1.0: {} + + punycode@2.3.1: {} + + queue-microtask@1.2.3: {} + + react-dom@19.2.0(react@19.2.0): + dependencies: + react: 19.2.0 + scheduler: 0.27.0 + + react-refresh@0.18.0: {} + + react@19.2.0: {} + + resolve-from@4.0.0: {} + + reusify@1.1.0: {} + + rollup@4.52.5: + dependencies: + '@types/estree': 1.0.8 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.52.5 + '@rollup/rollup-android-arm64': 4.52.5 + '@rollup/rollup-darwin-arm64': 4.52.5 + '@rollup/rollup-darwin-x64': 4.52.5 + '@rollup/rollup-freebsd-arm64': 4.52.5 + '@rollup/rollup-freebsd-x64': 4.52.5 + '@rollup/rollup-linux-arm-gnueabihf': 4.52.5 + '@rollup/rollup-linux-arm-musleabihf': 4.52.5 + '@rollup/rollup-linux-arm64-gnu': 4.52.5 + '@rollup/rollup-linux-arm64-musl': 4.52.5 + '@rollup/rollup-linux-loong64-gnu': 4.52.5 + '@rollup/rollup-linux-ppc64-gnu': 4.52.5 + '@rollup/rollup-linux-riscv64-gnu': 4.52.5 + '@rollup/rollup-linux-riscv64-musl': 4.52.5 + '@rollup/rollup-linux-s390x-gnu': 4.52.5 + '@rollup/rollup-linux-x64-gnu': 4.52.5 + '@rollup/rollup-linux-x64-musl': 4.52.5 + '@rollup/rollup-openharmony-arm64': 4.52.5 + '@rollup/rollup-win32-arm64-msvc': 4.52.5 + '@rollup/rollup-win32-ia32-msvc': 4.52.5 + '@rollup/rollup-win32-x64-gnu': 4.52.5 + '@rollup/rollup-win32-x64-msvc': 4.52.5 + fsevents: 2.3.3 + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + scheduler@0.27.0: {} + + semver@6.3.1: {} + + semver@7.7.3: {} + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + source-map-js@1.2.1: {} + + strip-json-comments@3.1.1: {} + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + tinyglobby@0.2.15: + dependencies: + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + ts-api-utils@2.1.0(typescript@5.9.3): + dependencies: + typescript: 5.9.3 + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + typescript-eslint@8.46.2(eslint@9.38.0)(typescript@5.9.3): + dependencies: + '@typescript-eslint/eslint-plugin': 8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.38.0)(typescript@5.9.3))(eslint@9.38.0)(typescript@5.9.3) + '@typescript-eslint/parser': 8.46.2(eslint@9.38.0)(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.46.2(typescript@5.9.3) + '@typescript-eslint/utils': 8.46.2(eslint@9.38.0)(typescript@5.9.3) + eslint: 9.38.0 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + typescript@5.9.3: {} + + undici-types@7.16.0: {} + + update-browserslist-db@1.1.4(browserslist@4.27.0): + dependencies: + browserslist: 4.27.0 + escalade: 3.2.0 + picocolors: 1.1.1 + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + vite@7.1.12(@types/node@24.9.1): + dependencies: + esbuild: 0.25.11 + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + postcss: 8.5.6 + rollup: 4.52.5 + tinyglobby: 0.2.15 + optionalDependencies: + '@types/node': 24.9.1 + fsevents: 2.3.3 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + word-wrap@1.2.5: {} + + yallist@3.1.1: {} + + yocto-queue@0.1.0: {} diff --git a/public/vite.svg b/public/vite.svg new file mode 100644 index 0000000..e7b8dfb --- /dev/null +++ b/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/App.css b/src/App.css new file mode 100644 index 0000000..b9d355d --- /dev/null +++ b/src/App.css @@ -0,0 +1,42 @@ +#root { + max-width: 1280px; + margin: 0 auto; + padding: 2rem; + text-align: center; +} + +.logo { + height: 6em; + padding: 1.5em; + will-change: filter; + transition: filter 300ms; +} +.logo:hover { + filter: drop-shadow(0 0 2em #646cffaa); +} +.logo.react:hover { + filter: drop-shadow(0 0 2em #61dafbaa); +} + +@keyframes logo-spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} + +@media (prefers-reduced-motion: no-preference) { + a:nth-of-type(2) .logo { + animation: logo-spin infinite 20s linear; + } +} + +.card { + padding: 2em; +} + +.read-the-docs { + color: #888; +} diff --git a/src/App.tsx b/src/App.tsx new file mode 100644 index 0000000..2144853 --- /dev/null +++ b/src/App.tsx @@ -0,0 +1,23 @@ +import { useReducer } from 'react' + +import { useLoadTrainSchedule } from './hooks/useLoadTrainSchedule' + +import { initialState, reducer } from './state' + +import './App.css' + +function App() { + + const [state, dispatch] = useReducer( reducer, initialState,); + + useLoadTrainSchedule(state, dispatch); + + return ( + <> + + ) + + ) +} + +export default App diff --git a/src/assets/react.svg b/src/assets/react.svg new file mode 100644 index 0000000..6c87de9 --- /dev/null +++ b/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/hooks/index.tsx b/src/hooks/index.tsx new file mode 100644 index 0000000..d784905 --- /dev/null +++ b/src/hooks/index.tsx @@ -0,0 +1 @@ +export * from './useLoadTrainSchedule'; diff --git a/src/hooks/useLoadTrainSchedule.tsx b/src/hooks/useLoadTrainSchedule.tsx new file mode 100644 index 0000000..349f6b6 --- /dev/null +++ b/src/hooks/useLoadTrainSchedule.tsx @@ -0,0 +1,23 @@ +import { useEffect, type Dispatch } from "react" +import { actions, type Action, type State } from "../state" + +import type { Data } from "../types"; + +import axios from 'axios'; + +const irailApiUrl = 'https://api.irail.be'; + +export const useLoadTrainSchedule = (_: State, dispatch: Dispatch) => { + useEffect(() => { + (async () => { + try { + dispatch(actions.loadTrainSchedule({})) + const answer = await axios.get(`${irailApiUrl}/stations?format=json&lang=en`) + const { station } = answer.data as Data; + dispatch(actions.loadTrainScheduleSuccess({ stations: station })) + } catch(error) { + dispatch(actions.loadTrainScheduleError({ error: error as Error})) + } + })() + }, []) +} diff --git a/src/index.css b/src/index.css new file mode 100644 index 0000000..08a3ac9 --- /dev/null +++ b/src/index.css @@ -0,0 +1,68 @@ +:root { + font-family: system-ui, Avenir, Helvetica, Arial, sans-serif; + line-height: 1.5; + font-weight: 400; + + color-scheme: light dark; + color: rgba(255, 255, 255, 0.87); + background-color: #242424; + + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +a { + font-weight: 500; + color: #646cff; + text-decoration: inherit; +} +a:hover { + color: #535bf2; +} + +body { + margin: 0; + display: flex; + place-items: center; + min-width: 320px; + min-height: 100vh; +} + +h1 { + font-size: 3.2em; + line-height: 1.1; +} + +button { + border-radius: 8px; + border: 1px solid transparent; + padding: 0.6em 1.2em; + font-size: 1em; + font-weight: 500; + font-family: inherit; + background-color: #1a1a1a; + cursor: pointer; + transition: border-color 0.25s; +} +button:hover { + border-color: #646cff; +} +button:focus, +button:focus-visible { + outline: 4px auto -webkit-focus-ring-color; +} + +@media (prefers-color-scheme: light) { + :root { + color: #213547; + background-color: #ffffff; + } + a:hover { + color: #747bff; + } + button { + background-color: #f9f9f9; + } +} diff --git a/src/main.tsx b/src/main.tsx new file mode 100644 index 0000000..bef5202 --- /dev/null +++ b/src/main.tsx @@ -0,0 +1,10 @@ +import { StrictMode } from 'react' +import { createRoot } from 'react-dom/client' +import './index.css' +import App from './App.tsx' + +createRoot(document.getElementById('root')!).render( + + + , +) diff --git a/src/state/actions/actions.ts b/src/state/actions/actions.ts new file mode 100644 index 0000000..6fb5778 --- /dev/null +++ b/src/state/actions/actions.ts @@ -0,0 +1,26 @@ +import { + loadTrainSchedule, + loadTrainScheduleSuccess, + loadTrainScheduleError, +} from './consts' + +import { + type LoadTrainSchedule, + type LoadTrainScheduleSuccess, + type LoadTrainScheduleError, +} from './types'; + +export const actions = { + loadTrainSchedule: (args: Omit) => ({ + type: loadTrainSchedule, + ...args + } as LoadTrainSchedule), + loadTrainScheduleSuccess: (args: Omit) => ({ + type: loadTrainScheduleSuccess, + ...args + } as LoadTrainScheduleSuccess), + loadTrainScheduleError: (args: Omit) => ({ + type: loadTrainScheduleError, + ...args + } as LoadTrainScheduleError), +} diff --git a/src/state/actions/consts.ts b/src/state/actions/consts.ts new file mode 100644 index 0000000..0b1ef07 --- /dev/null +++ b/src/state/actions/consts.ts @@ -0,0 +1,6 @@ +import { type ActionType } from './types'; + +export const loadTrainSchedule: ActionType = 'loadTrainSchedule'; +export const loadTrainScheduleSuccess: ActionType = 'loadTrainScheduleSuccess'; +export const loadTrainScheduleError: ActionType = 'loadTrainScheduleError'; + diff --git a/src/state/actions/index.ts b/src/state/actions/index.ts new file mode 100644 index 0000000..7849f29 --- /dev/null +++ b/src/state/actions/index.ts @@ -0,0 +1,4 @@ +export * from './actions'; +export * from './consts'; +export * from './types'; + diff --git a/src/state/actions/types.ts b/src/state/actions/types.ts new file mode 100644 index 0000000..77d8b5c --- /dev/null +++ b/src/state/actions/types.ts @@ -0,0 +1,23 @@ +export type ActionType = string; + +import type { Station } from '../../types'; +import { loadTrainSchedule, loadTrainScheduleError, loadTrainScheduleSuccess } from './consts' + +export type Action = { + type: ActionType +} + +export type LoadTrainSchedule = { + type: typeof loadTrainSchedule, +} + +export type LoadTrainScheduleSuccess = { + type: typeof loadTrainScheduleSuccess, + stations: Station[] +} + +export type LoadTrainScheduleError = { + type: typeof loadTrainScheduleError, + error: Error +} + diff --git a/src/state/index.ts b/src/state/index.ts new file mode 100644 index 0000000..cbd618e --- /dev/null +++ b/src/state/index.ts @@ -0,0 +1,4 @@ +export * from './actions' +export * from './initialState' +export * from './reducer' +export * from './state' diff --git a/src/state/initialState.ts b/src/state/initialState.ts new file mode 100644 index 0000000..f3bf7f2 --- /dev/null +++ b/src/state/initialState.ts @@ -0,0 +1,7 @@ +import { type State } from "./state"; + +export const initialState: State = { + stations: undefined, + error: undefined, + loading: false, +}; diff --git a/src/state/patches/index.ts b/src/state/patches/index.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/state/reducer.ts b/src/state/reducer.ts new file mode 100644 index 0000000..379fefe --- /dev/null +++ b/src/state/reducer.ts @@ -0,0 +1,56 @@ +import { type State } from './state'; + +import { + type Action, + loadTrainSchedule, + loadTrainScheduleError, + loadTrainScheduleSuccess, + type LoadTrainScheduleError, + type LoadTrainScheduleSuccess, +} from './actions'; + + +//export const reducerInner = (state: State, action: Action): State => { +export const reducer = (state: State, action: Action): State => { + + if(action.type === loadTrainSchedule) { + return { + ...state, + error: undefined, + loading: true, + } + } + else if(action.type === loadTrainScheduleSuccess) { + return { + ...state, + stations: (action as LoadTrainScheduleSuccess).stations, + loading: false, + + } + } + else if(action.type === loadTrainScheduleError) { + + return { + ...state, + error: (action as LoadTrainScheduleError).error, + loading: false, + } + } + return state; +} + +/* +export const reducer = (state: State, action: Action) => { + if(action.type !== tick) { + console.log(`MD - ${action.type}`); + console.log({action}) + console.log({state}) + } + const newState = reducerInner(state, action); + + if(action.type !== tick) { + console.log({newState}) + } + return newState; +} +*/ diff --git a/src/state/state.ts b/src/state/state.ts new file mode 100644 index 0000000..82b2a25 --- /dev/null +++ b/src/state/state.ts @@ -0,0 +1,9 @@ +import type { Station } from "../types"; + +export type State = { + loading: boolean, + stations: Station[] | undefined, + error: Error | undefined, +} + + diff --git a/src/types/data.tsx b/src/types/data.tsx new file mode 100644 index 0000000..9d715d8 --- /dev/null +++ b/src/types/data.tsx @@ -0,0 +1,14 @@ +export type Station = { + "@id": string, + id: string, + name: string, + locationX: string, + locationY: string, + standardname: string, +}; + +export type Data = { + version: string, + timestamp: string, + station: Station[], +} diff --git a/src/types/index.tsx b/src/types/index.tsx new file mode 100644 index 0000000..7f16534 --- /dev/null +++ b/src/types/index.tsx @@ -0,0 +1 @@ +export * from './data' diff --git a/tests/example.spec.ts b/tests/example.spec.ts new file mode 100644 index 0000000..54a906a --- /dev/null +++ b/tests/example.spec.ts @@ -0,0 +1,18 @@ +import { test, expect } from '@playwright/test'; + +test('has title', async ({ page }) => { + await page.goto('https://playwright.dev/'); + + // Expect a title "to contain" a substring. + await expect(page).toHaveTitle(/Playwright/); +}); + +test('get started link', async ({ page }) => { + await page.goto('https://playwright.dev/'); + + // Click the get started link. + await page.getByRole('link', { name: 'Get started' }).click(); + + // Expects page to have a heading with the name of Installation. + await expect(page.getByRole('heading', { name: 'Installation' })).toBeVisible(); +}); diff --git a/tsconfig.app.json b/tsconfig.app.json new file mode 100644 index 0000000..a9b5a59 --- /dev/null +++ b/tsconfig.app.json @@ -0,0 +1,28 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + "target": "ES2022", + "useDefineForClassFields": true, + "lib": ["ES2022", "DOM", "DOM.Iterable"], + "module": "ESNext", + "types": ["vite/client"], + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "moduleDetection": "force", + "noEmit": true, + "jsx": "react-jsx", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "erasableSyntaxOnly": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["src"] +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..1ffef60 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,7 @@ +{ + "files": [], + "references": [ + { "path": "./tsconfig.app.json" }, + { "path": "./tsconfig.node.json" } + ] +} diff --git a/tsconfig.node.json b/tsconfig.node.json new file mode 100644 index 0000000..8a67f62 --- /dev/null +++ b/tsconfig.node.json @@ -0,0 +1,26 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", + "target": "ES2023", + "lib": ["ES2023"], + "module": "ESNext", + "types": ["node"], + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "moduleDetection": "force", + "noEmit": true, + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "erasableSyntaxOnly": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["vite.config.ts"] +} diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..8b0f57b --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,7 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' + +// https://vite.dev/config/ +export default defineConfig({ + plugins: [react()], +})