"use strict";(self.webpackChunkfrog=self.webpackChunkfrog||[]).push([[6527],{6527:(e,t,n)=>{n.d(t,{BV:()=>ve,Kd:()=>Ge,qh:()=>fe});var r=n(96540),a=(n(28232),"popstate");function o(e={}){return p((function(e,t){let{pathname:n,search:r,hash:a}=e.location;return s("",{pathname:n,search:r,hash:a},t.state&&t.state.usr||null,t.state&&t.state.key||"default")}),(function(e,t){return"string"==typeof t?t:c(t)}),null,e)}function i(e,t){if(!1===e||null==e)throw new Error(t)}function l(e,t){if(!e)try{throw new Error(t)}catch(e){}}function u(e,t){return{usr:e.state,key:e.key,idx:t}}function s(e,t,n=null,r){return{pathname:"string"==typeof e?e:e.pathname,search:"",hash:"",..."string"==typeof t?h(t):t,state:n,key:t&&t.key||r||Math.random().toString(36).substring(2,10)}}function c({pathname:e="/",search:t="",hash:n=""}){return t&&"?"!==t&&(e+="?"===t.charAt(0)?t:"?"+t),n&&"#"!==n&&(e+="#"===n.charAt(0)?n:"#"+n),e}function h(e){let t={};if(e){let n=e.indexOf("#");n>=0&&(t.hash=e.substring(n),e=e.substring(0,n));let r=e.indexOf("?");r>=0&&(t.search=e.substring(r),e=e.substring(0,r)),e&&(t.pathname=e)}return t}function p(e,t,n,r={}){let{window:o=document.defaultView,v5Compat:l=!1}=r,h=o.history,p="POP",d=null,m=f();function f(){return(h.state||{idx:null}).idx}function g(){p="POP";let e=f(),t=null==e?null:e-m;m=e,d&&d({action:p,location:y.location,delta:t})}function v(e){let t="null"!==o.location.origin?o.location.origin:o.location.href,n="string"==typeof e?e:c(e);return n=n.replace(/ $/,"%20"),i(t,`No window.location.(origin|href) available to create URL for href: ${n}`),new URL(n,t)}null==m&&(m=0,h.replaceState({...h.state,idx:m},""));let y={get action(){return p},get location(){return e(o,h)},listen(e){if(d)throw new Error("A history only accepts one active listener");return o.addEventListener(a,g),d=e,()=>{o.removeEventListener(a,g),d=null}},createHref:e=>t(o,e),createURL:v,encodeLocation(e){let t=v(e);return{pathname:t.pathname,search:t.search,hash:t.hash}},push:function(e,t){p="PUSH";let r=s(y.location,e,t);n&&n(r,e),m=f()+1;let a=u(r,m),i=y.createHref(r);try{h.pushState(a,"",i)}catch(e){if(e instanceof DOMException&&"DataCloneError"===e.name)throw e;o.location.assign(i)}l&&d&&d({action:p,location:y.location,delta:1})},replace:function(e,t){p="REPLACE";let r=s(y.location,e,t);n&&n(r,e),m=f();let a=u(r,m),o=y.createHref(r);h.replaceState(a,"",o),l&&d&&d({action:p,location:y.location,delta:0})},go:e=>h.go(e)};return y}function d(e,t,n="/"){return m(e,t,n,!1)}function m(e,t,n,r){let a=L(("string"==typeof t?h(t):t).pathname||"/",n);if(null==a)return null;let o=f(e);!function(e){e.sort(((e,t)=>e.score!==t.score?t.score-e.score:function(e,t){let n=e.length===t.length&&e.slice(0,-1).every(((e,n)=>e===t[n]));return n?e[e.length-1]-t[t.length-1]:0}(e.routesMeta.map((e=>e.childrenIndex)),t.routesMeta.map((e=>e.childrenIndex)))))}(o);let i=null;for(let e=0;null==i&&e{let l={relativePath:void 0===o?e.path||"":o,caseSensitive:!0===e.caseSensitive,childrenIndex:a,route:e};l.relativePath.startsWith("/")&&(i(l.relativePath.startsWith(r),`Absolute route path "${l.relativePath}" nested under path "${r}" is not valid. An absolute child route path must start with the combined path of all its parent routes.`),l.relativePath=l.relativePath.slice(r.length));let u=M([r,l.relativePath]),s=n.concat(l);e.children&&e.children.length>0&&(i(!0!==e.index,`Index routes must not have child routes. Please remove all child routes from route path "${u}".`),f(e.children,t,s,u)),(null!=e.path||e.index)&&t.push({path:u,score:C(u,e.index),routesMeta:s})};return e.forEach(((e,t)=>{if(""!==e.path&&e.path?.includes("?"))for(let n of g(e.path))a(e,t,n);else a(e,t)})),t}function g(e){let t=e.split("/");if(0===t.length)return[];let[n,...r]=t,a=n.endsWith("?"),o=n.replace(/\?$/,"");if(0===r.length)return a?[o,""]:[o];let i=g(r.join("/")),l=[];return l.push(...i.map((e=>""===e?o:[o,e].join("/")))),a&&l.push(...i),l.map((t=>e.startsWith("/")&&""===t?"/":t))}var v=/^:[\w-]+$/,y=3,w=2,E=1,b=10,x=-2,R=e=>"*"===e;function C(e,t){let n=e.split("/"),r=n.length;return n.some(R)&&(r+=x),t&&(r+=w),n.filter((e=>!R(e))).reduce(((e,t)=>e+(v.test(t)?y:""===t?E:b)),r)}function S(e,t,n=!1){let{routesMeta:r}=e,a={},o="/",i=[];for(let e=0;e(r.push({paramName:t,isOptional:null!=n}),n?"/?([^\\/]+)?":"/([^\\/]+)")));e.endsWith("*")?(r.push({paramName:"*"}),a+="*"===e||"/*"===e?"(.*)$":"(?:\\/(.+)|\\/*)$"):n?a+="\\/*$":""!==e&&"/"!==e&&(a+="(?:(?=\\/|$))");let o=new RegExp(a,t?void 0:"i");return[o,r]}(e.path,e.caseSensitive,e.end),a=t.match(n);if(!a)return null;let o=a[0],i=o.replace(/(.)\/+$/,"$1"),u=a.slice(1);return{params:r.reduce(((e,{paramName:t,isOptional:n},r)=>{if("*"===t){let e=u[r]||"";i=o.slice(0,o.length-e.length).replace(/(.)\/+$/,"$1")}const a=u[r];return e[t]=n&&!a?void 0:(a||"").replace(/%2F/g,"/"),e}),{}),pathname:o,pathnameBase:i,pattern:e}}function k(e){try{return e.split("/").map((e=>decodeURIComponent(e).replace(/\//g,"%2F"))).join("/")}catch(t){return l(!1,`The URL path "${e}" could not be decoded because it is is a malformed URL segment. This is probably due to a bad percent encoding (${t}).`),e}}function L(e,t){if("/"===t)return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let n=t.endsWith("/")?t.length-1:t.length,r=e.charAt(n);return r&&"/"!==r?null:e.slice(n)||"/"}function T(e,t,n,r){return`Cannot include a '${e}' character in a manually specified \`to.${t}\` field [${JSON.stringify(r)}]. Please separate it out to the \`to.${n}\` field. Alternatively you may provide the full path as a string in and the router will parse it for you.`}function P(e){return e.filter(((e,t)=>0===t||e.route.path&&e.route.path.length>0))}function N(e){let t=P(e);return t.map(((e,n)=>n===t.length-1?e.pathname:e.pathnameBase))}function O(e,t,n,r=!1){let a;"string"==typeof e?a=h(e):(a={...e},i(!a.pathname||!a.pathname.includes("?"),T("?","pathname","search",a)),i(!a.pathname||!a.pathname.includes("#"),T("#","pathname","hash",a)),i(!a.search||!a.search.includes("#"),T("#","search","hash",a)));let o,l=""===e||""===a.pathname,u=l?"/":a.pathname;if(null==u)o=n;else{let e=t.length-1;if(!r&&u.startsWith("..")){let t=u.split("/");for(;".."===t[0];)t.shift(),e-=1;a.pathname=t.join("/")}o=e>=0?t[e]:"/"}let s=function(e,t="/"){let{pathname:n,search:r="",hash:a=""}="string"==typeof e?h(e):e,o=n?n.startsWith("/")?n:function(e,t){let n=t.replace(/\/+$/,"").split("/");return e.split("/").forEach((e=>{".."===e?n.length>1&&n.pop():"."!==e&&n.push(e)})),n.length>1?n.join("/"):"/"}(n,t):t;return{pathname:o,search:F(r),hash:D(a)}}(a,o),c=u&&"/"!==u&&u.endsWith("/"),p=(l||"."===u)&&n.endsWith("/");return s.pathname.endsWith("/")||!c&&!p||(s.pathname+="/"),s}var M=e=>e.join("/").replace(/\/\/+/g,"/"),A=e=>e.replace(/\/+$/,"").replace(/^\/*/,"/"),F=e=>e&&"?"!==e?e.startsWith("?")?e:"?"+e:"",D=e=>e&&"#"!==e?e.startsWith("#")?e:"#"+e:"";function _(e){return null!=e&&"number"==typeof e.status&&"string"==typeof e.statusText&&"boolean"==typeof e.internal&&"data"in e}var W=["POST","PUT","PATCH","DELETE"],U=(new Set(W),["GET",...W]);new Set(U),Symbol("ResetLoaderData");var B=r.createContext(null);B.displayName="DataRouter";var j=r.createContext(null);j.displayName="DataRouterState";var H=r.createContext({isTransitioning:!1});H.displayName="ViewTransition";var I=r.createContext(new Map);I.displayName="Fetchers";var J=r.createContext(null);J.displayName="Await";var z=r.createContext(null);z.displayName="Navigation";var Y=r.createContext(null);Y.displayName="Location";var K=r.createContext({outlet:null,matches:[],isDataRoute:!1});K.displayName="Route";var V=r.createContext(null);V.displayName="RouteError";var q=!0;function X(){return null!=r.useContext(Y)}function G(){return i(X(),"useLocation() may be used only in the context of a component."),r.useContext(Y).location}var Q="You should call navigate() in a React.useEffect(), not when your component is first rendered.";function Z(e){r.useContext(z).static||r.useLayoutEffect(e)}function ee(){let{isDataRoute:e}=r.useContext(K);return e?function(){let{router:e}=se("useNavigate"),t=he("useNavigate"),n=r.useRef(!1);return Z((()=>{n.current=!0})),r.useCallback((async(r,a={})=>{l(n.current,Q),n.current&&("number"==typeof r?e.navigate(r):await e.navigate(r,{fromRouteId:t,...a}))}),[e,t])}():function(){i(X(),"useNavigate() may be used only in the context of a component.");let e=r.useContext(B),{basename:t,navigator:n}=r.useContext(z),{matches:a}=r.useContext(K),{pathname:o}=G(),u=JSON.stringify(N(a)),s=r.useRef(!1);return Z((()=>{s.current=!0})),r.useCallback(((r,a={})=>{if(l(s.current,Q),!s.current)return;if("number"==typeof r)return void n.go(r);let i=O(r,JSON.parse(u),o,"path"===a.relative);null==e&&"/"!==t&&(i.pathname="/"===i.pathname?t:M([t,i.pathname])),(a.replace?n.replace:n.push)(i,a.state,a)}),[t,n,u,o,e])}()}r.createContext(null);function te(e,{relative:t}={}){let{matches:n}=r.useContext(K),{pathname:a}=G(),o=JSON.stringify(N(n));return r.useMemo((()=>O(e,JSON.parse(o),a,"path"===t)),[e,o,a,t])}function ne(e,t,n,a){i(X(),"useRoutes() may be used only in the context of a component.");let{navigator:o}=r.useContext(z),{matches:u}=r.useContext(K),s=u[u.length-1],c=s?s.params:{},p=s?s.pathname:"/",m=s?s.pathnameBase:"/",f=s&&s.route;if(q){let e=f&&f.path||"";me(p,!f||e.endsWith("*")||e.endsWith("*?"),`You rendered descendant (or called \`useRoutes()\`) at "${p}" (under ) but the parent route path has no trailing "*". This means if you navigate deeper, the parent won't match anymore and therefore the child routes will never render.\n\nPlease change the parent to .`)}let g,v=G();if(t){let e="string"==typeof t?h(t):t;i("/"===m||e.pathname?.startsWith(m),`When overriding the location using \`\` or \`useRoutes(routes, location)\`, the location pathname must begin with the portion of the URL pathname that was matched by all parent routes. The current pathname base is "${m}" but pathname "${e.pathname}" was given in the \`location\` prop.`),g=e}else g=v;let y=g.pathname||"/",w=y;if("/"!==m){let e=m.replace(/^\//,"").split("/");w="/"+y.replace(/^\//,"").split("/").slice(e.length).join("/")}let E=d(e,{pathname:w});q&&(l(f||null!=E,`No routes matched location "${g.pathname}${g.search}${g.hash}" `),l(null==E||void 0!==E[E.length-1].route.element||void 0!==E[E.length-1].route.Component||void 0!==E[E.length-1].route.lazy,`Matched leaf route at location "${g.pathname}${g.search}${g.hash}" does not have an element or Component. This means it will render an with a null value by default resulting in an "empty" page.`));let b=le(E&&E.map((e=>Object.assign({},e,{params:Object.assign({},c,e.params),pathname:M([m,o.encodeLocation?o.encodeLocation(e.pathname).pathname:e.pathname]),pathnameBase:"/"===e.pathnameBase?m:M([m,o.encodeLocation?o.encodeLocation(e.pathnameBase).pathname:e.pathnameBase])}))),u,n,a);return t&&b?r.createElement(Y.Provider,{value:{location:{pathname:"/",search:"",hash:"",state:null,key:"default",...g},navigationType:"POP"}},b):b}function re(){let e=pe(),t=_(e)?`${e.status} ${e.statusText}`:e instanceof Error?e.message:JSON.stringify(e),n=e instanceof Error?e.stack:null,a="rgba(200,200,200, 0.5)",o={padding:"0.5rem",backgroundColor:a},i={padding:"2px 4px",backgroundColor:a},l=null;return q&&(l=r.createElement(r.Fragment,null,r.createElement("p",null,"💿 Hey developer 👋"),r.createElement("p",null,"You can provide a way better UX than this when your app throws errors by providing your own ",r.createElement("code",{style:i},"ErrorBoundary")," or"," ",r.createElement("code",{style:i},"errorElement")," prop on your route."))),r.createElement(r.Fragment,null,r.createElement("h2",null,"Unexpected Application Error!"),r.createElement("h3",{style:{fontStyle:"italic"}},t),n?r.createElement("pre",{style:o},n):null,l)}var ae=r.createElement(re,null),oe=class extends r.Component{constructor(e){super(e),this.state={location:e.location,revalidation:e.revalidation,error:e.error}}static getDerivedStateFromError(e){return{error:e}}static getDerivedStateFromProps(e,t){return t.location!==e.location||"idle"!==t.revalidation&&"idle"===e.revalidation?{error:e.error,location:e.location,revalidation:e.revalidation}:{error:void 0!==e.error?e.error:t.error,location:t.location,revalidation:e.revalidation||t.revalidation}}componentDidCatch(e,t){}render(){return void 0!==this.state.error?r.createElement(K.Provider,{value:this.props.routeContext},r.createElement(V.Provider,{value:this.state.error,children:this.props.component})):this.props.children}};function ie({routeContext:e,match:t,children:n}){let a=r.useContext(B);return a&&a.static&&a.staticContext&&(t.route.errorElement||t.route.ErrorBoundary)&&(a.staticContext._deepestRenderedBoundaryId=t.route.id),r.createElement(K.Provider,{value:e},n)}function le(e,t=[],n=null,a=null){if(null==e){if(!n)return null;if(n.errors)e=n.matches;else{if(0!==t.length||n.initialized||!(n.matches.length>0))return null;e=n.matches}}let o=e,l=n?.errors;if(null!=l){let e=o.findIndex((e=>e.route.id&&void 0!==l?.[e.route.id]));i(e>=0,`Could not find a matching route for errors on route IDs: ${Object.keys(l).join(",")}`),o=o.slice(0,Math.min(o.length,e+1))}let u=!1,s=-1;if(n)for(let e=0;e=0?o.slice(0,s+1):[o[0]];break}}}return o.reduceRight(((e,a,i)=>{let c,h=!1,p=null,d=null;n&&(c=l&&a.route.id?l[a.route.id]:void 0,p=a.route.errorElement||ae,u&&(s<0&&0===i?(me("route-fallback",!1,"No `HydrateFallback` element provided to render during initial hydration"),h=!0,d=null):s===i&&(h=!0,d=a.route.hydrateFallbackElement||null)));let m=t.concat(o.slice(0,i+1)),f=()=>{let t;return t=c?p:h?d:a.route.Component?r.createElement(a.route.Component,null):a.route.element?a.route.element:e,r.createElement(ie,{match:a,routeContext:{outlet:e,matches:m,isDataRoute:null!=n},children:t})};return n&&(a.route.ErrorBoundary||a.route.errorElement||0===i)?r.createElement(oe,{location:n.location,revalidation:n.revalidation,component:p,error:c,children:f(),routeContext:{outlet:null,matches:m,isDataRoute:!0}}):f()}),null)}function ue(e){return`${e} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function se(e){let t=r.useContext(B);return i(t,ue(e)),t}function ce(e){let t=r.useContext(j);return i(t,ue(e)),t}function he(e){let t=function(e){let t=r.useContext(K);return i(t,ue(e)),t}(e),n=t.matches[t.matches.length-1];return i(n.route.id,`${e} can only be used on routes that contain a unique "id"`),n.route.id}function pe(){let e=r.useContext(V),t=ce("useRouteError"),n=he("useRouteError");return void 0!==e?e:t.errors?.[n]}var de={};function me(e,t,n){t||de[e]||(de[e]=!0,l(!1,n))}r.memo((function({routes:e,future:t,state:n}){return ne(e,void 0,n,t)}));function fe(e){i(!1,"A is only ever to be used as the child of element, never rendered directly. Please wrap your in a .")}function ge({basename:e="/",children:t=null,location:n,navigationType:a="POP",navigator:o,static:u=!1}){i(!X(),"You cannot render a inside another . You should never have more than one in your app.");let s=e.replace(/^\/*/,"/"),c=r.useMemo((()=>({basename:s,navigator:o,static:u,future:{}})),[s,o,u]);"string"==typeof n&&(n=h(n));let{pathname:p="/",search:d="",hash:m="",state:f=null,key:g="default"}=n,v=r.useMemo((()=>{let e=L(p,s);return null==e?null:{location:{pathname:e,search:d,hash:m,state:f,key:g},navigationType:a}}),[s,p,d,m,f,g,a]);return l(null!=v,` is not able to match the URL "${p}${d}${m}" because it does not start with the basename, so the won't render anything.`),null==v?null:r.createElement(z.Provider,{value:c},r.createElement(Y.Provider,{children:t,value:v}))}function ve({children:e,location:t}){return ne(ye(e),t)}r.Component;function ye(e,t=[]){let n=[];return r.Children.forEach(e,((e,a)=>{if(!r.isValidElement(e))return;let o=[...t,a];if(e.type===r.Fragment)return void n.push.apply(n,ye(e.props.children,o));i(e.type===fe,`[${"string"==typeof e.type?e.type:e.type.name}] is not a component. All component children of must be a or `),i(!e.props.index||!e.props.children,"An index route cannot have child routes.");let l={id:e.props.id||o.join("-"),caseSensitive:e.props.caseSensitive,element:e.props.element,Component:e.props.Component,index:e.props.index,path:e.props.path,loader:e.props.loader,action:e.props.action,hydrateFallbackElement:e.props.hydrateFallbackElement,HydrateFallback:e.props.HydrateFallback,errorElement:e.props.errorElement,ErrorBoundary:e.props.ErrorBoundary,hasErrorBoundary:!0===e.props.hasErrorBoundary||null!=e.props.ErrorBoundary||null!=e.props.errorElement,shouldRevalidate:e.props.shouldRevalidate,handle:e.props.handle,lazy:e.props.lazy};e.props.children&&(l.children=ye(e.props.children,o)),n.push(l)})),n}var we="get",Ee="application/x-www-form-urlencoded";function be(e){return null!=e&&"string"==typeof e.tagName}var xe=null;var Re=new Set(["application/x-www-form-urlencoded","multipart/form-data","text/plain"]);function Ce(e){return null==e||Re.has(e)?e:(l(!1,`"${e}" is not a valid \`encType\` for \`
\`/\`\` and will default to "${Ee}"`),null)}function Se(e,t){let n,r,a,o,i;if(be(l=e)&&"form"===l.tagName.toLowerCase()){let i=e.getAttribute("action");r=i?L(i,t):null,n=e.getAttribute("method")||we,a=Ce(e.getAttribute("enctype"))||Ee,o=new FormData(e)}else if(function(e){return be(e)&&"button"===e.tagName.toLowerCase()}(e)||function(e){return be(e)&&"input"===e.tagName.toLowerCase()}(e)&&("submit"===e.type||"image"===e.type)){let i=e.form;if(null==i)throw new Error('Cannot submit a