/** * @remix-run/router v1.3.2 * * Copyright (c) Remix Software Inc. * * This source code is licensed under the MIT license found in the * LICENSE.md file in the root directory of this source tree. * * @license MIT */ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).RemixRouter={})}(this,(function(e){"use strict";function t(){return t=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0&&(t.hash=e.substr(r),e=e.substr(0,r));let a=e.indexOf("?");a>=0&&(t.search=e.substr(a),e=e.substr(0,a)),e&&(t.pathname=e)}return t}function d(r,o,c,d){void 0===d&&(d={});let{window:u=document.defaultView,v5Compat:h=!1}=d,f=u.history,p=e.Action.Pop,m=null,g=v();function v(){return(f.state||{idx:null}).idx}function y(){p=e.Action.Pop;let t=v(),r=null==t?null:t-g;g=t,m&&m({action:p,location:w.location,delta:r})}function b(e){let t="null"!==u.location.origin?u.location.origin:u.location.href,r="string"==typeof e?e:l(e);return n(t,"No window.location.(origin|href) available to create URL for href: "+r),new URL(r,t)}null==g&&(g=0,f.replaceState(t({},f.state,{idx:g}),""));let w={get action(){return p},get location(){return r(u,f)},listen(e){if(m)throw new Error("A history only accepts one active listener");return u.addEventListener(a,y),m=e,()=>{u.removeEventListener(a,y),m=null}},createHref:e=>o(u,e),createURL:b,encodeLocation(e){let t=b(e);return{pathname:t.pathname,search:t.search,hash:t.hash}},push:function(t,r){p=e.Action.Push;let a=s(w.location,t,r);c&&c(a,t),g=v()+1;let n=i(a,g),o=w.createHref(a);try{f.pushState(n,"",o)}catch(e){u.location.assign(o)}h&&m&&m({action:p,location:w.location,delta:1})},replace:function(t,r){p=e.Action.Replace;let a=s(w.location,t,r);c&&c(a,t),g=v();let n=i(a,g),o=w.createHref(a);f.replaceState(n,"",o),h&&m&&m({action:p,location:w.location,delta:0})},go:e=>f.go(e)};return w}let u;function h(e,r,a){return void 0===r&&(r=[]),void 0===a&&(a=new Set),e.map(((e,o)=>{let i=[...r,o],s="string"==typeof e.id?e.id:i.join("-");if(n(!0!==e.index||!e.children,"Cannot specify children on an index route"),n(!a.has(s),'Found a route id collision on id "'+s+"\". Route id's must be globally unique within Data Router usages"),a.add(s),function(e){return!0===e.index}(e)){return t({},e,{id:s})}return t({},e,{id:s,children:e.children?h(e.children,i,a):void 0})}))}function f(e,t,r){void 0===r&&(r="/");let a=A(("string"==typeof t?c(t):t).pathname||"/",r);if(null==a)return null;let n=p(e);!function(e){e.sort(((e,t)=>e.score!==t.score?t.score-e.score:function(e,t){return e.length===t.length&&e.slice(0,-1).every(((e,r)=>e===t[r]))?e[e.length-1]-t[t.length-1]:0}(e.routesMeta.map((e=>e.childrenIndex)),t.routesMeta.map((e=>e.childrenIndex)))))}(n);let o=null;for(let e=0;null==o&&e{let s={relativePath:void 0===i?e.path||"":i,caseSensitive:!0===e.caseSensitive,childrenIndex:o,route:e};s.relativePath.startsWith("/")&&(n(s.relativePath.startsWith(a),'Absolute route path "'+s.relativePath+'" nested under path "'+a+'" is not valid. An absolute child route path must start with the combined path of all its parent routes.'),s.relativePath=s.relativePath.slice(a.length));let l=L([a,s.relativePath]),c=r.concat(s);e.children&&e.children.length>0&&(n(!0!==e.index,'Index routes must not have child routes. Please remove all child routes from route path "'+l+'".'),p(e.children,t,c,l)),(null!=e.path||e.index)&&t.push({path:l,score:y(l,e.index),routesMeta:c})};return e.forEach(((e,t)=>{var r;if(""!==e.path&&null!=(r=e.path)&&r.includes("?"))for(let r of m(e.path))o(e,t,r);else o(e,t)})),t}function m(e){let t=e.split("/");if(0===t.length)return[];let[r,...a]=t,n=r.endsWith("?"),o=r.replace(/\?$/,"");if(0===a.length)return n?[o,""]:[o];let i=m(a.join("/")),s=[];return s.push(...i.map((e=>""===e?o:[o,e].join("/")))),n&&s.push(...i),s.map((t=>e.startsWith("/")&&""===t?"/":t))}!function(e){e.data="data",e.deferred="deferred",e.redirect="redirect",e.error="error"}(u||(u={}));const g=/^:\w+$/,v=e=>"*"===e;function y(e,t){let r=e.split("/"),a=r.length;return r.some(v)&&(a+=-2),t&&(a+=2),r.filter((e=>!v(e))).reduce(((e,t)=>e+(g.test(t)?3:""===t?1:10)),a)}function b(e,t){let{routesMeta:r}=e,a={},n="/",o=[];for(let e=0;e(a.push(t),"/([^\\/]+)")));e.endsWith("*")?(a.push("*"),n+="*"===e||"/*"===e?"(.*)$":"(?:\\/(.+)|\\/*)$"):r?n+="\\/*$":""!==e&&"/"!==e&&(n+="(?:(?=\\/|$))");return[new RegExp(n,t?void 0:"i"),a]}(e.path,e.caseSensitive,e.end),n=t.match(r);if(!n)return null;let o=n[0],i=o.replace(/(.)\/+$/,"$1"),s=n.slice(1);return{params:a.reduce(((e,t,r)=>{if("*"===t){let e=s[r]||"";i=o.slice(0,o.length-e.length).replace(/(.)\/+$/,"$1")}return e[t]=function(e,t){try{return decodeURIComponent(e)}catch(r){return R(!1,'The value for the URL param "'+t+'" will not be decoded because the string "'+e+'" is a malformed URL segment. This is probably due to a bad percent encoding ('+r+")."),e}}(s[r]||"",t),e}),{}),pathname:o,pathnameBase:i,pattern:e}}function D(e){try{return decodeURI(e)}catch(t){return R(!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 A(e,t){if("/"===t)return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let r=t.endsWith("/")?t.length-1:t.length,a=e.charAt(r);return a&&"/"!==a?null:e.slice(r)||"/"}function R(e,t){if(!e){"undefined"!=typeof console&&console.warn(t);try{throw new Error(t)}catch(e){}}}function E(e,t){void 0===t&&(t="/");let{pathname:r,search:a="",hash:n=""}="string"==typeof e?c(e):e,o=r?r.startsWith("/")?r:function(e,t){let r=t.replace(/\/+$/,"").split("/");return e.split("/").forEach((e=>{".."===e?r.length>1&&r.pop():"."!==e&&r.push(e)})),r.length>1?r.join("/"):"/"}(r,t):t;return{pathname:o,search:x(a),hash:C(n)}}function P(e,t,r,a){return"Cannot include a '"+e+"' character in a manually specified `to."+t+"` field ["+JSON.stringify(a)+"]. Please separate it out to the `to."+r+'` field. Alternatively you may provide the full path as a string in and the router will parse it for you.'}function S(e){return e.filter(((e,t)=>0===t||e.route.path&&e.route.path.length>0))}function M(e,r,a,o){let i;void 0===o&&(o=!1),"string"==typeof e?i=c(e):(i=t({},e),n(!i.pathname||!i.pathname.includes("?"),P("?","pathname","search",i)),n(!i.pathname||!i.pathname.includes("#"),P("#","pathname","hash",i)),n(!i.search||!i.search.includes("#"),P("#","search","hash",i)));let s,l=""===e||""===i.pathname,d=l?"/":i.pathname;if(o||null==d)s=a;else{let e=r.length-1;if(d.startsWith("..")){let t=d.split("/");for(;".."===t[0];)t.shift(),e-=1;i.pathname=t.join("/")}s=e>=0?r[e]:"/"}let u=E(i,s),h=d&&"/"!==d&&d.endsWith("/"),f=(l||"."===d)&&a.endsWith("/");return u.pathname.endsWith("/")||!h&&!f||(u.pathname+="/"),u}const L=e=>e.join("/").replace(/\/\/+/g,"/"),k=e=>e.replace(/\/+$/,"").replace(/^\/*/,"/"),x=e=>e&&"?"!==e?e.startsWith("?")?e:"?"+e:"",C=e=>e&&"#"!==e?e.startsWith("#")?e:"#"+e:"";class U extends Error{}class T{constructor(e,t){let r;this.pendingKeysSet=new Set,this.subscribers=new Set,this.deferredKeys=[],n(e&&"object"==typeof e&&!Array.isArray(e),"defer() only accepts plain objects"),this.abortPromise=new Promise(((e,t)=>r=t)),this.controller=new AbortController;let a=()=>r(new U("Deferred data aborted"));this.unlistenAbortSignal=()=>this.controller.signal.removeEventListener("abort",a),this.controller.signal.addEventListener("abort",a),this.data=Object.entries(e).reduce(((e,t)=>{let[r,a]=t;return Object.assign(e,{[r]:this.trackPromise(r,a)})}),{}),this.done&&this.unlistenAbortSignal(),this.init=t}trackPromise(e,t){if(!(t instanceof Promise))return t;this.deferredKeys.push(e),this.pendingKeysSet.add(e);let r=Promise.race([t,this.abortPromise]).then((t=>this.onSettle(r,e,null,t)),(t=>this.onSettle(r,e,t)));return r.catch((()=>{})),Object.defineProperty(r,"_tracked",{get:()=>!0}),r}onSettle(e,t,r,a){return this.controller.signal.aborted&&r instanceof U?(this.unlistenAbortSignal(),Object.defineProperty(e,"_error",{get:()=>r}),Promise.reject(r)):(this.pendingKeysSet.delete(t),this.done&&this.unlistenAbortSignal(),r?(Object.defineProperty(e,"_error",{get:()=>r}),this.emit(!1,t),Promise.reject(r)):(Object.defineProperty(e,"_data",{get:()=>a}),this.emit(!1,t),a))}emit(e,t){this.subscribers.forEach((r=>r(e,t)))}subscribe(e){return this.subscribers.add(e),()=>this.subscribers.delete(e)}cancel(){this.controller.abort(),this.pendingKeysSet.forEach(((e,t)=>this.pendingKeysSet.delete(t))),this.emit(!0)}async resolveData(e){let t=!1;if(!this.done){let r=()=>this.cancel();e.addEventListener("abort",r),t=await new Promise((t=>{this.subscribe((a=>{e.removeEventListener("abort",r),(a||this.done)&&t(a)}))}))}return t}get done(){return 0===this.pendingKeysSet.size}get unwrappedData(){return n(null!==this.data&&this.done,"Can only unwrap data on initialized and settled deferreds"),Object.entries(this.data).reduce(((e,t)=>{let[r,a]=t;return Object.assign(e,{[r]:j(a)})}),{})}get pendingKeys(){return Array.from(this.pendingKeysSet)}}function j(e){if(!function(e){return e instanceof Promise&&!0===e._tracked}(e))return e;if(e._error)throw e._error;return e._data}class O{constructor(e,t,r,a){void 0===a&&(a=!1),this.status=e,this.statusText=t||"",this.internal=a,r instanceof Error?(this.data=r.toString(),this.error=r):this.data=r}}function _(e){return null!=e&&"number"==typeof e.status&&"string"==typeof e.statusText&&"boolean"==typeof e.internal&&"data"in e}const F=["post","put","patch","delete"],H=new Set(F),I=["get",...F],q=new Set(I),W=new Set([301,302,303,307,308]),$=new Set([307,308]),N={state:"idle",location:void 0,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0},B={state:"idle",data:void 0,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0},z={state:"unblocked",proceed:void 0,reset:void 0,location:void 0},K=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,Y="undefined"!=typeof window&&void 0!==window.document&&void 0!==window.document.createElement,J=!Y;const V=Symbol("deferred");function G(e,t,r){void 0===r&&(r=!1);let a,n="string"==typeof e?e:l(e);if(!t||!function(e){return null!=e&&"formData"in e}(t))return{path:n};if(t.formMethod&&!ve(t.formMethod))return{path:n,error:ce(405,{method:t.formMethod})};if(t.formData&&(a={formMethod:t.formMethod||"get",formAction:ue(n),formEncType:t&&t.formEncType||"application/x-www-form-urlencoded",formData:t.formData},ye(a.formMethod)))return{path:n,submission:a};let o=c(n),i=ae(t.formData);return r&&o.search&&De(o.search)&&i.append("index",""),o.search="?"+i,{path:l(o),submission:a}}function X(e,t){let r=e;if(t){let a=e.findIndex((e=>e.route.id===t));a>=0&&(r=e.slice(0,a))}return r}function Q(e,r,a,n,o,i,s,l,c,d,u){let h=d?Object.values(d)[0]:c?Object.values(c)[0]:void 0,f=e.createURL(r.location),p=e.createURL(o),m=i||f.toString()===p.toString()||f.search!==p.search,g=d?Object.keys(d)[0]:void 0,v=X(a,g).filter(((e,a)=>{if(null==e.route.loader)return!1;if(function(e,t,r){let a=!t||r.route.id!==t.route.id,n=void 0===e[r.route.id];return a||n}(r.loaderData,r.matches[a],e)||s.some((t=>t===e.route.id)))return!0;let o=r.matches[a],i=e;return ee(e,t({currentUrl:f,currentParams:o.params,nextUrl:p,nextParams:i.params},n,{actionResult:h,defaultShouldRevalidate:m||Z(o,i)}))})),y=[];return u&&u.forEach(((e,o)=>{if(a.some((t=>t.route.id===e.routeId)))if(l.includes(o))y.push(t({key:o},e));else{ee(e.match,t({currentUrl:f,currentParams:r.matches[r.matches.length-1].params,nextUrl:p,nextParams:a[a.length-1].params},n,{actionResult:h,defaultShouldRevalidate:m}))&&y.push(t({key:o},e))}})),[v,y]}function Z(e,t){let r=e.route.path;return e.pathname!==t.pathname||null!=r&&r.endsWith("*")&&e.params["*"]!==t.params["*"]}function ee(e,t){if(e.route.shouldRevalidate){let r=e.route.shouldRevalidate(t);if("boolean"==typeof r)return r}return t.defaultShouldRevalidate}async function te(e,t,r,a,o,i,s,c){let d,h,f;void 0===o&&(o="/"),void 0===i&&(i=!1),void 0===s&&(s=!1);let p=new Promise(((e,t)=>f=t)),m=()=>f();t.signal.addEventListener("abort",m);try{let a=r.route[e];n(a,"Could not find the "+e+' to run on the "'+r.route.id+'" route'),h=await Promise.race([a({request:t,params:r.params,context:c}),p]),n(void 0!==h,"You defined "+("action"===e?"an action":"a loader")+' for route "'+r.route.id+"\" but didn't return anything from your `"+e+"` function. Please return a value or `null`.")}catch(e){d=u.error,h=e}finally{t.signal.removeEventListener("abort",m)}if(me(h)){let e,c=h.status;if(W.has(c)){let e=h.headers.get("Location");if(n(e,"Redirects returned/thrown from loaders/actions must have a Location header"),K.test(e)){if(!i){let r=new URL(t.url),a=e.startsWith("//")?new URL(r.protocol+e):new URL(e);a.origin===r.origin&&(e=a.pathname+a.search+a.hash)}}else{let i=M(e,S(a.slice(0,a.indexOf(r)+1)).map((e=>e.pathnameBase)),new URL(t.url).pathname);if(n(l(i),"Unable to resolve redirect location: "+e),o){let e=i.pathname;i.pathname="/"===e?o:L([o,e])}e=l(i)}if(i)throw h.headers.set("Location",e),h;return{type:u.redirect,status:c,location:e,revalidate:null!==h.headers.get("X-Remix-Revalidate")}}if(s)throw{type:d||u.data,response:h};let f=h.headers.get("Content-Type");return e=f&&/\bapplication\/json\b/.test(f)?await h.json():await h.text(),d===u.error?{type:d,error:new O(c,h.statusText,e),headers:h.headers}:{type:u.data,data:e,statusCode:h.status,headers:h.headers}}return d===u.error?{type:d,error:h}:h instanceof T?{type:u.deferred,deferredData:h}:{type:u.data,data:h}}function re(e,t,r,a){let n=e.createURL(ue(t)).toString(),o={signal:r};if(a&&ye(a.formMethod)){let{formMethod:e,formEncType:t,formData:r}=a;o.method=e.toUpperCase(),o.body="application/x-www-form-urlencoded"===t?ae(r):r}return new Request(n,o)}function ae(e){let t=new URLSearchParams;for(let[r,a]of e.entries())t.append(r,a instanceof File?a.name:a);return t}function ne(e,t,r,a,o){let i,s={},l=null,c=!1,d={};return r.forEach(((r,u)=>{let h=t[u].route.id;if(n(!pe(r),"Cannot handle redirect results in processLoaderData"),fe(r)){let t=se(e,h),n=r.error;a&&(n=Object.values(a)[0],a=void 0),l=l||{},null==l[t.route.id]&&(l[t.route.id]=n),s[h]=void 0,c||(c=!0,i=_(r.error)?r.error.status:500),r.headers&&(d[h]=r.headers)}else he(r)?(o.set(h,r.deferredData),s[h]=r.deferredData.data):s[h]=r.data,null==r.statusCode||200===r.statusCode||c||(i=r.statusCode),r.headers&&(d[h]=r.headers)})),a&&(l=a,s[Object.keys(a)[0]]=void 0),{loaderData:s,errors:l,statusCode:i||200,loaderHeaders:d}}function oe(e,r,a,o,i,s,l,c){let{loaderData:d,errors:u}=ne(r,a,o,i,c);for(let r=0;re.route.id===t))+1):[...e]).reverse().find((e=>!0===e.route.hasErrorBoundary))||e[0]}function le(e){let t=e.find((e=>e.index||!e.path||"/"===e.path))||{id:"__shim-error-route__"};return{matches:[{params:{},pathname:"",pathnameBase:"",route:t}],route:t}}function ce(e,t){let{pathname:r,routeId:a,method:n,type:o}=void 0===t?{}:t,i="Unknown Server Error",s="Unknown @remix-run/router error";return 400===e?(i="Bad Request",n&&r&&a?s="You made a "+n+' request to "'+r+'" but did not provide a `loader` for route "'+a+'", so there is no way to handle the request.':"defer-action"===o&&(s="defer() is not supported in actions")):403===e?(i="Forbidden",s='Route "'+a+'" does not match URL "'+r+'"'):404===e?(i="Not Found",s='No route matches URL "'+r+'"'):405===e&&(i="Method Not Allowed",n&&r&&a?s="You made a "+n.toUpperCase()+' request to "'+r+'" but did not provide an `action` for route "'+a+'", so there is no way to handle the request.':n&&(s='Invalid request method "'+n.toUpperCase()+'"')),new O(e||500,i,new Error(s),!0)}function de(e){for(let t=e.length-1;t>=0;t--){let r=e[t];if(pe(r))return r}}function ue(e){return l(t({},"string"==typeof e?c(e):e,{hash:""}))}function he(e){return e.type===u.deferred}function fe(e){return e.type===u.error}function pe(e){return(e&&e.type)===u.redirect}function me(e){return null!=e&&"number"==typeof e.status&&"string"==typeof e.statusText&&"object"==typeof e.headers&&void 0!==e.body}function ge(e){if(!me(e))return!1;let t=e.status,r=e.headers.get("Location");return t>=300&&t<=399&&null!=r}function ve(e){return q.has(e)}function ye(e){return H.has(e)}async function be(e,t,r,a,n,o){for(let i=0;ie.route.id===l.route.id)),d=null!=c&&!Z(c,l)&&void 0!==(o&&o[l.route.id]);he(s)&&(n||d)&&await we(s,a,n).then((e=>{e&&(r[i]=e||r[i])}))}}async function we(e,t,r){if(void 0===r&&(r=!1),!await e.deferredData.resolveData(t)){if(r)try{return{type:u.data,data:e.deferredData.unwrappedData}}catch(e){return{type:u.error,error:e}}return{type:u.data,data:e.deferredData.data}}}function De(e){return new URLSearchParams(e).getAll("index").some((e=>""===e))}function Ae(e,t){let{route:r,pathname:a,params:n}=e;return{id:r.id,pathname:a,params:n,data:t[r.id],handle:r.handle}}function Re(e,t){let r="string"==typeof t?c(t).search:t.search;if(e[e.length-1].route.index&&De(r||""))return e[e.length-1];let a=S(e);return a[a.length-1]}e.AbortedDeferredError=U,e.ErrorResponse=O,e.IDLE_BLOCKER=z,e.IDLE_FETCHER=B,e.IDLE_NAVIGATION=N,e.UNSAFE_DEFERRED_SYMBOL=V,e.UNSAFE_DeferredData=T,e.UNSAFE_convertRoutesToDataRoutes=h,e.UNSAFE_getPathContributingMatches=S,e.createBrowserHistory=function(e){return void 0===e&&(e={}),d((function(e,t){let{pathname:r,search:a,hash:n}=e.location;return s("",{pathname:r,search:a,hash:n},t.state&&t.state.usr||null,t.state&&t.state.key||"default")}),(function(e,t){return"string"==typeof t?t:l(t)}),null,e)},e.createHashHistory=function(e){return void 0===e&&(e={}),d((function(e,t){let{pathname:r="/",search:a="",hash:n=""}=c(e.location.hash.substr(1));return s("",{pathname:r,search:a,hash:n},t.state&&t.state.usr||null,t.state&&t.state.key||"default")}),(function(e,t){let r=e.document.querySelector("base"),a="";if(r&&r.getAttribute("href")){let t=e.location.href,r=t.indexOf("#");a=-1===r?t:t.slice(0,r)}return a+"#"+("string"==typeof t?t:l(t))}),(function(e,t){o("/"===e.pathname.charAt(0),"relative pathnames are not supported in hash history.push("+JSON.stringify(t)+")")}),e)},e.createMemoryHistory=function(t){void 0===t&&(t={});let r,{initialEntries:a=["/"],initialIndex:n,v5Compat:i=!1}=t;r=a.map(((e,t)=>m(e,"string"==typeof e?null:e.state,0===t?"default":void 0)));let d=f(null==n?r.length-1:n),u=e.Action.Pop,h=null;function f(e){return Math.min(Math.max(e,0),r.length-1)}function p(){return r[d]}function m(e,t,a){void 0===t&&(t=null);let n=s(r?p().pathname:"/",e,t,a);return o("/"===n.pathname.charAt(0),"relative pathnames are not supported in memory history: "+JSON.stringify(e)),n}function g(e){return"string"==typeof e?e:l(e)}return{get index(){return d},get action(){return u},get location(){return p()},createHref:g,createURL:e=>new URL(g(e),"http://localhost"),encodeLocation(e){let t="string"==typeof e?c(e):e;return{pathname:t.pathname||"",search:t.search||"",hash:t.hash||""}},push(t,a){u=e.Action.Push;let n=m(t,a);d+=1,r.splice(d,r.length,n),i&&h&&h({action:u,location:n,delta:1})},replace(t,a){u=e.Action.Replace;let n=m(t,a);r[d]=n,i&&h&&h({action:u,location:n,delta:0})},go(t){u=e.Action.Pop;let a=f(d+t),n=r[a];d=a,h&&h({action:u,location:n,delta:t})},listen:e=>(h=e,()=>{h=null})}},e.createPath=l,e.createRouter=function(r){n(r.routes.length>0,"You must provide a non-empty routes array to createRouter");let a=h(r.routes),o=null,i=new Set,l=null,c=null,d=null,p=null!=r.hydrationData,m=f(a,r.history.location,r.basename),g=null;if(null==m){let e=ce(404,{pathname:r.history.location.pathname}),{matches:t,route:n}=le(a);m=t,g={[n.id]:e}}let v,y,b=!m.some((e=>e.route.loader))||null!=r.hydrationData,w={historyAction:r.history.action,location:r.history.location,matches:m,initialized:b,navigation:N,restoreScrollPosition:null==r.hydrationData&&null,preventScrollReset:!1,revalidation:"idle",loaderData:r.hydrationData&&r.hydrationData.loaderData||{},actionData:r.hydrationData&&r.hydrationData.actionData||null,errors:r.hydrationData&&r.hydrationData.errors||g,fetchers:new Map,blockers:new Map},D=e.Action.Pop,A=!1,E=!1,P=!1,S=[],M=[],L=new Map,k=0,x=-1,C=new Map,U=new Set,T=new Map,j=new Map,O=new Map,_=!1;function F(e){w=t({},w,e),i.forEach((e=>e(w)))}function H(a,n){var o,i;let s,l=null!=w.actionData&&null!=w.navigation.formMethod&&ye(w.navigation.formMethod)&&"loading"===w.navigation.state&&!0!==(null==(o=a.state)?void 0:o._isRedirect);s=n.actionData?Object.keys(n.actionData).length>0?n.actionData:null:l?w.actionData:null;let c=n.loaderData?ie(w.loaderData,n.loaderData,n.matches||[],n.errors):w.loaderData;for(let[e]of O)me(e);let d=!0===A||null!=w.navigation.formMethod&&ye(w.navigation.formMethod)&&!0!==(null==(i=a.state)?void 0:i._isRedirect);F(t({},n,{actionData:s,loaderData:c,historyAction:D,location:a,initialized:!0,navigation:N,revalidation:"idle",restoreScrollPosition:Ee(a,n.matches||w.matches),preventScrollReset:d,blockers:new Map(w.blockers)})),E||D===e.Action.Pop||(D===e.Action.Push?r.history.push(a,a.state):D===e.Action.Replace&&r.history.replace(a,a.state)),D=e.Action.Pop,A=!1,E=!1,P=!1,S=[],M=[]}async function I(o,i,s){y&&y.abort(),y=null,D=o,E=!0===(s&&s.startUninterruptedRevalidation),function(e,t){if(l&&c&&d){let r=t.map((e=>Ae(e,w.loaderData))),a=c(e,r)||e.key;l[a]=d()}}(w.location,w.matches),A=!0===(s&&s.preventScrollReset);let h=s&&s.overrideNavigation,p=f(a,i,r.basename);if(!p){let e=ce(404,{pathname:i.pathname}),{matches:t,route:r}=le(a);return De(),void H(i,{matches:t,loaderData:{},errors:{[r.id]:e}})}if(!(m=w.location,g=i,m.pathname!==g.pathname||m.search!==g.search||m.hash===g.hash||s&&s.submission&&ye(s.submission.formMethod)))return void H(i,{matches:p});var m,g;y=new AbortController;let b,R,C=re(r.history,i,y.signal,s&&s.submission);if(s&&s.pendingError)R={[se(p).route.id]:s.pendingError};else if(s&&s.submission&&ye(s.submission.formMethod)){let r=await async function(r,a,n,o,i){let s;X(),F({navigation:t({state:"submitting",location:a},n)});let l=Re(o,a);if(l.route.action){if(s=await te("action",r,l,o,v.basename),r.signal.aborted)return{shortCircuited:!0}}else s={type:u.error,error:ce(405,{method:r.method,pathname:a.pathname,routeId:l.route.id})};if(pe(s)){let e;return e=i&&null!=i.replace?i.replace:s.location===w.location.pathname+w.location.search,await W(w,s,{submission:n,replace:e}),{shortCircuited:!0}}if(fe(s)){let t=se(o,l.route.id);return!0!==(i&&i.replace)&&(D=e.Action.Push),{pendingActionData:{},pendingActionError:{[t.route.id]:s.error}}}if(he(s))throw ce(400,{type:"defer-action"});return{pendingActionData:{[l.route.id]:s.data}}}(C,i,s.submission,p,{replace:s.replace});if(r.shortCircuited)return;b=r.pendingActionData,R=r.pendingActionError,h=t({state:"loading",location:i},s.submission),C=new Request(C.url,{signal:C.signal})}let{shortCircuited:O,loaderData:_,errors:I}=await async function(e,a,o,i,s,l,c,d){let u=i;if(!u){u=t({state:"loading",location:a,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0},s)}let h=s||(u.formMethod&&u.formAction&&u.formData&&u.formEncType?{formMethod:u.formMethod,formAction:u.formAction,formData:u.formData,formEncType:u.formEncType}:void 0),[f,p]=Q(r.history,w,o,h,a,P,S,M,c,d,T);if(De((e=>!(o&&o.some((t=>t.route.id===e)))||f&&f.some((t=>t.route.id===e)))),0===f.length&&0===p.length)return H(a,t({matches:o,loaderData:{},errors:d||null},c?{actionData:c}:{})),{shortCircuited:!0};if(!E){p.forEach((e=>{let t=w.fetchers.get(e.key),r={state:"loading",data:t&&t.data,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0," _hasFetcherDoneAnything ":!0};w.fetchers.set(e.key,r)}));let e=c||w.actionData;F(t({navigation:u},e?0===Object.keys(e).length?{actionData:null}:{actionData:e}:{},p.length>0?{fetchers:new Map(w.fetchers)}:{}))}x=++k,p.forEach((e=>L.set(e.key,y)));let{results:m,loaderResults:g,fetcherResults:v}=await V(w.matches,o,f,p,e);if(e.signal.aborted)return{shortCircuited:!0};p.forEach((e=>L.delete(e.key)));let b=de(m);if(b)return await W(w,b,{replace:l}),{shortCircuited:!0};let{loaderData:D,errors:A}=oe(w,o,f,g,d,p,v,j);j.forEach(((e,t)=>{e.subscribe((r=>{(r||e.done)&&j.delete(t)}))})),function(){let e=[];for(let t of U){let r=w.fetchers.get(t);n(r,"Expected fetcher: "+t),"loading"===r.state&&(U.delete(t),e.push(t))}ne(e)}();let R=ue(x);return t({loaderData:D,errors:A},R||p.length>0?{fetchers:new Map(w.fetchers)}:{})}(C,i,p,h,s&&s.submission,s&&s.replace,b,R);O||(y=null,H(i,t({matches:p},b?{actionData:b}:{},{loaderData:_,errors:I})))}function q(e){return w.fetchers.get(e)||B}async function W(a,o,i){var l;let{submission:c,replace:d,isFetchActionRedirect:u}=void 0===i?{}:i;o.revalidate&&(P=!0);let h=s(a.location,o.location,t({_isRedirect:!0},u?{_isFetchActionRedirect:!0}:{}));if(n(h,"Expected a location on the redirect navigation"),K.test(o.location)&&Y&&void 0!==(null==(l=window)?void 0:l.location)){let e=r.history.createURL(o.location).origin;if(window.location.origin!==e)return void(d?window.location.replace(o.location):window.location.assign(o.location))}y=null;let f=!0===d?e.Action.Replace:e.Action.Push,{formMethod:p,formAction:m,formEncType:g,formData:v}=a.navigation;!c&&p&&m&&v&&g&&(c={formMethod:p,formAction:m,formEncType:g,formData:v}),$.has(o.status)&&c&&ye(c.formMethod)?await I(f,h,{submission:t({},c,{formAction:o.location}),preventScrollReset:A}):await I(f,h,{overrideNavigation:{state:"loading",location:h,formMethod:c?c.formMethod:void 0,formAction:c?c.formAction:void 0,formEncType:c?c.formEncType:void 0,formData:c?c.formData:void 0},preventScrollReset:A})}async function V(e,t,a,n,o){let i=await Promise.all([...a.map((e=>te("loader",o,e,t,v.basename))),...n.map((e=>te("loader",re(r.history,e.path,o.signal),e.match,e.matches,v.basename)))]),s=i.slice(0,a.length),l=i.slice(a.length);return await Promise.all([be(e,a,s,o.signal,!1,w.loaderData),be(e,n.map((e=>e.match)),l,o.signal,!0)]),{results:i,loaderResults:s,fetcherResults:l}}function X(){P=!0,S.push(...De()),T.forEach(((e,t)=>{L.has(t)&&(M.push(t),ae(t))}))}function Z(e,t,r){let a=se(w.matches,t);ee(e),F({errors:{[a.route.id]:r},fetchers:new Map(w.fetchers)})}function ee(e){L.has(e)&&ae(e),T.delete(e),C.delete(e),U.delete(e),w.fetchers.delete(e)}function ae(e){let t=L.get(e);n(t,"Expected fetch controller: "+e),t.abort(),L.delete(e)}function ne(e){for(let t of e){let e={state:"idle",data:q(t).data,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0," _hasFetcherDoneAnything ":!0};w.fetchers.set(t,e)}}function ue(e){let t=[];for(let[r,a]of C)if(a0}function me(e){w.blockers.delete(e),O.delete(e)}function ge(e,t){let r=w.blockers.get(e)||z;n("unblocked"===r.state&&"blocked"===t.state||"blocked"===r.state&&"blocked"===t.state||"blocked"===r.state&&"proceeding"===t.state||"blocked"===r.state&&"unblocked"===t.state||"proceeding"===r.state&&"unblocked"===t.state,"Invalid blocker state transition: "+r.state+" -> "+t.state),w.blockers.set(e,t),F({blockers:new Map(w.blockers)})}function ve(e){let{currentLocation:t,nextLocation:r,historyAction:a}=e;if(0===O.size)return;O.size>1&&R(!1,"A router only supports one blocker at a time");let n=Array.from(O.entries()),[o,i]=n[n.length-1],s=w.blockers.get(o);return s&&"proceeding"===s.state?void 0:i({currentLocation:t,nextLocation:r,historyAction:a})?o:void 0}function De(e){let t=[];return j.forEach(((r,a)=>{e&&!e(a)||(r.cancel(),t.push(a),j.delete(a))})),t}function Ee(e,t){if(l&&c&&d){let r=t.map((e=>Ae(e,w.loaderData))),a=c(e,r)||e.key,n=l[a];if("number"==typeof n)return n}return null}return v={get basename(){return r.basename},get state(){return w},get routes(){return a},initialize:function(){return o=r.history.listen((e=>{let{action:t,location:a,delta:n}=e;if(_)return void(_=!1);R(0===O.size||null!=n,"You are trying to use a blocker on a POP navigation to a location that was not created by @remix-run/router. This will fail silently in production. This can happen if you are navigating outside the router via `window.history.pushState`/`window.location.hash` instead of using router navigation APIs. This can also happen if you are using createHashRouter and the user manually changes the URL.");let o=ve({currentLocation:w.location,nextLocation:a,historyAction:t});return o&&null!=n?(_=!0,r.history.go(-1*n),void ge(o,{state:"blocked",location:a,proceed(){ge(o,{state:"proceeding",proceed:void 0,reset:void 0,location:a}),r.history.go(n)},reset(){me(o),F({blockers:new Map(v.state.blockers)})}})):I(t,a)})),w.initialized||I(e.Action.Pop,w.location),v},subscribe:function(e){return i.add(e),()=>i.delete(e)},enableScrollRestoration:function(e,t,r){if(l=e,d=t,c=r||(e=>e.key),!p&&w.navigation===N){p=!0;let e=Ee(w.location,w.matches);null!=e&&F({restoreScrollPosition:e})}return()=>{l=null,d=null,c=null}},navigate:async function a(n,o){if("number"==typeof n)return void r.history.go(n);let{path:i,submission:l,error:c}=G(n,o),d=w.location,u=s(w.location,i,o&&o.state);u=t({},u,r.history.encodeLocation(u));let h=o&&null!=o.replace?o.replace:void 0,f=e.Action.Push;!0===h?f=e.Action.Replace:!1===h||null!=l&&ye(l.formMethod)&&l.formAction===w.location.pathname+w.location.search&&(f=e.Action.Replace);let p=o&&"preventScrollReset"in o?!0===o.preventScrollReset:void 0,m=ve({currentLocation:d,nextLocation:u,historyAction:f});if(!m)return await I(f,u,{submission:l,pendingError:c,preventScrollReset:p,replace:o&&o.replace});ge(m,{state:"blocked",location:u,proceed(){ge(m,{state:"proceeding",proceed:void 0,reset:void 0,location:u}),a(n,o)},reset(){me(m),F({blockers:new Map(w.blockers)})}})},fetch:function(e,o,i,s){if(J)throw new Error("router.fetch() was called during the server render, but it shouldn't be. You are likely calling a useFetcher() method in the body of your component. Try moving it to a useEffect or a callback.");L.has(e)&&ae(e);let l=f(a,i,r.basename);if(!l)return void Z(e,o,ce(404,{pathname:i}));let{path:c,submission:d}=G(i,s,!0),u=Re(l,c);A=!0===(s&&s.preventScrollReset),d&&ye(d.formMethod)?async function(e,o,i,s,l,c){if(X(),T.delete(e),!s.route.action){let t=ce(405,{method:c.formMethod,pathname:i,routeId:o});return void Z(e,o,t)}let d=w.fetchers.get(e),u=t({state:"submitting"},c,{data:d&&d.data," _hasFetcherDoneAnything ":!0});w.fetchers.set(e,u),F({fetchers:new Map(w.fetchers)});let h=new AbortController,p=re(r.history,i,h.signal,c);L.set(e,h);let m=await te("action",p,s,l,v.basename);if(p.signal.aborted)return void(L.get(e)===h&&L.delete(e));if(pe(m)){L.delete(e),U.add(e);let r=t({state:"loading"},c,{data:void 0," _hasFetcherDoneAnything ":!0});return w.fetchers.set(e,r),F({fetchers:new Map(w.fetchers)}),W(w,m,{isFetchActionRedirect:!0})}if(fe(m))return void Z(e,o,m.error);if(he(m))throw ce(400,{type:"defer-action"});let g=w.navigation.location||w.location,b=re(r.history,g,h.signal),A="idle"!==w.navigation.state?f(a,w.navigation.location,r.basename):w.matches;n(A,"Didn't find any matches after fetcher action");let R=++k;C.set(e,R);let E=t({state:"loading",data:m.data},c,{" _hasFetcherDoneAnything ":!0});w.fetchers.set(e,E);let[O,_]=Q(r.history,w,A,c,g,P,S,M,{[s.route.id]:m.data},void 0,T);_.filter((t=>t.key!==e)).forEach((e=>{let t=e.key,r=w.fetchers.get(t),a={state:"loading",data:r&&r.data,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0," _hasFetcherDoneAnything ":!0};w.fetchers.set(t,a),L.set(t,h)})),F({fetchers:new Map(w.fetchers)});let{results:I,loaderResults:q,fetcherResults:$}=await V(w.matches,A,O,_,b);if(h.signal.aborted)return;C.delete(e),L.delete(e),_.forEach((e=>L.delete(e.key)));let N=de(I);if(N)return W(w,N);let{loaderData:B,errors:z}=oe(w,w.matches,O,q,void 0,_,$,j),K={state:"idle",data:m.data,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0," _hasFetcherDoneAnything ":!0};w.fetchers.set(e,K);let Y=ue(R);"loading"===w.navigation.state&&R>x?(n(D,"Expected pending action"),y&&y.abort(),H(w.navigation.location,{matches:A,loaderData:B,errors:z,fetchers:new Map(w.fetchers)})):(F(t({errors:z,loaderData:ie(w.loaderData,B,A,z)},Y?{fetchers:new Map(w.fetchers)}:{})),P=!1)}(e,o,c,u,l,d):(T.set(e,{routeId:o,path:c,match:u,matches:l}),async function(e,a,o,i,s,l){let c=w.fetchers.get(e),d=t({state:"loading",formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0},l,{data:c&&c.data," _hasFetcherDoneAnything ":!0});w.fetchers.set(e,d),F({fetchers:new Map(w.fetchers)});let u=new AbortController,h=re(r.history,o,u.signal);L.set(e,u);let f=await te("loader",h,i,s,v.basename);he(f)&&(f=await we(f,h.signal,!0)||f);L.get(e)===u&&L.delete(e);if(h.signal.aborted)return;if(pe(f))return void await W(w,f);if(fe(f)){let t=se(w.matches,a);return w.fetchers.delete(e),void F({fetchers:new Map(w.fetchers),errors:{[t.route.id]:f.error}})}n(!he(f),"Unhandled fetcher deferred data");let p={state:"idle",data:f.data,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0," _hasFetcherDoneAnything ":!0};w.fetchers.set(e,p),F({fetchers:new Map(w.fetchers)})}(e,o,c,u,l,d))},revalidate:function(){X(),F({revalidation:"loading"}),"submitting"!==w.navigation.state&&("idle"!==w.navigation.state?I(D||w.historyAction,w.navigation.location,{overrideNavigation:w.navigation}):I(w.historyAction,w.location,{startUninterruptedRevalidation:!0}))},createHref:e=>r.history.createHref(e),encodeLocation:e=>r.history.encodeLocation(e),getFetcher:q,deleteFetcher:ee,dispose:function(){o&&o(),i.clear(),y&&y.abort(),w.fetchers.forEach(((e,t)=>ee(t))),w.blockers.forEach(((e,t)=>me(t)))},getBlocker:function(e,t){let r=w.blockers.get(e)||z;return O.get(e)!==t&&O.set(e,t),r},deleteBlocker:me,_internalFetchControllers:L,_internalActiveDeferreds:j},v},e.createStaticHandler=function(e,r){n(e.length>0,"You must provide a non-empty routes array to createStaticHandler");let a=h(e),o=(r?r.basename:null)||"/";async function i(e,r,a,i,s){n(e.signal,"query()/queryRoute() requests must contain an AbortController signal");try{if(ye(e.method.toLowerCase())){let n=await async function(e,r,a,n,i){let s;if(a.route.action){if(s=await te("action",e,a,r,o,!0,i,n),e.signal.aborted){throw new Error((i?"queryRoute":"query")+"() call aborted")}}else{let t=ce(405,{method:e.method,pathname:new URL(e.url).pathname,routeId:a.route.id});if(i)throw t;s={type:u.error,error:t}}if(pe(s))throw new Response(null,{status:s.status,headers:{Location:s.location}});if(he(s)){let e=ce(400,{type:"defer-action"});if(i)throw e;s={type:u.error,error:e}}if(i){if(fe(s))throw s.error;return{matches:[a],loaderData:{},actionData:{[a.route.id]:s.data},errors:null,statusCode:200,loaderHeaders:{},actionHeaders:{},activeDeferreds:null}}if(fe(s)){let o=se(r,a.route.id);return t({},await c(e,r,n,void 0,{[o.route.id]:s.error}),{statusCode:_(s.error)?s.error.status:500,actionData:null,actionHeaders:t({},s.headers?{[a.route.id]:s.headers}:{})})}let l=new Request(e.url,{headers:e.headers,redirect:e.redirect,signal:e.signal});return t({},await c(l,r,n),s.statusCode?{statusCode:s.statusCode}:{},{actionData:{[a.route.id]:s.data},actionHeaders:t({},s.headers?{[a.route.id]:s.headers}:{})})}(e,a,s||Re(a,r),i,null!=s);return n}let n=await c(e,a,i,s);return me(n)?n:t({},n,{actionData:null,actionHeaders:{}})}catch(e){if((l=e)&&me(l.response)&&(l.type===u.data||u.error)){if(e.type===u.error&&!ge(e.response))throw e.response;return e.response}if(ge(e))return e;throw e}var l}async function c(e,r,a,n,i){let s=null!=n;if(s&&(null==n||!n.route.loader))throw ce(400,{method:e.method,pathname:new URL(e.url).pathname,routeId:null==n?void 0:n.route.id});let l=(n?[n]:X(r,Object.keys(i||{})[0])).filter((e=>e.route.loader));if(0===l.length)return{matches:r,loaderData:r.reduce(((e,t)=>Object.assign(e,{[t.route.id]:null})),{}),errors:i||null,statusCode:200,loaderHeaders:{},activeDeferreds:null};let c=await Promise.all([...l.map((t=>te("loader",e,t,r,o,!0,s,a)))]);if(e.signal.aborted){throw new Error((s?"queryRoute":"query")+"() call aborted")}let d=new Map,u=ne(r,l,c,i,d),h=new Set(l.map((e=>e.route.id)));return r.forEach((e=>{h.has(e.route.id)||(u.loaderData[e.route.id]=null)})),t({},u,{matches:r,activeDeferreds:d.size>0?Object.fromEntries(d.entries()):null})}return{dataRoutes:a,query:async function(e,r){let{requestContext:n}=void 0===r?{}:r,c=new URL(e.url),d=e.method.toLowerCase(),u=s("",l(c),null,"default"),h=f(a,u,o);if(!ve(d)&&"head"!==d){let e=ce(405,{method:d}),{matches:t,route:r}=le(a);return{basename:o,location:u,matches:t,loaderData:{},actionData:null,errors:{[r.id]:e},statusCode:e.status,loaderHeaders:{},actionHeaders:{},activeDeferreds:null}}if(!h){let e=ce(404,{pathname:u.pathname}),{matches:t,route:r}=le(a);return{basename:o,location:u,matches:t,loaderData:{},actionData:null,errors:{[r.id]:e},statusCode:e.status,loaderHeaders:{},actionHeaders:{},activeDeferreds:null}}let p=await i(e,u,h,n);return me(p)?p:t({location:u,basename:o},p)},queryRoute:async function(e,t){let{routeId:r,requestContext:n}=void 0===t?{}:t,c=new URL(e.url),d=e.method.toLowerCase(),u=s("",l(c),null,"default"),h=f(a,u,o);if(!ve(d)&&"head"!==d&&"options"!==d)throw ce(405,{method:d});if(!h)throw ce(404,{pathname:u.pathname});let p=r?h.find((e=>e.route.id===r)):Re(h,u);if(r&&!p)throw ce(403,{pathname:u.pathname,routeId:r});if(!p)throw ce(404,{pathname:u.pathname});let m=await i(e,u,h,n,p);if(me(m))return m;let g=m.errors?Object.values(m.errors)[0]:void 0;if(void 0!==g)throw g;if(m.actionData)return Object.values(m.actionData)[0];if(m.loaderData){var v;let e=Object.values(m.loaderData)[0];return null!=(v=m.activeDeferreds)&&v[p.route.id]&&(e[V]=m.activeDeferreds[p.route.id]),e}}}},e.defer=function(e,t){return void 0===t&&(t={}),new T(e,"number"==typeof t?{status:t}:t)},e.generatePath=function(e,t){void 0===t&&(t={});let r=e;return r.endsWith("*")&&"*"!==r&&!r.endsWith("/*")&&(R(!1,'Route path "'+r+'" will be treated as if it were "'+r.replace(/\*$/,"/*")+'" because the `*` character must always follow a `/` in the pattern. To get rid of this warning, please change the route path to "'+r.replace(/\*$/,"/*")+'".'),r=r.replace(/\*$/,"/*")),r.replace(/^:(\w+)(\??)/g,((e,r,a)=>{let o=t[r];return"?"===a?null==o?"":o:(null==o&&n(!1,'Missing ":'+r+'" param'),o)})).replace(/\/:(\w+)(\??)/g,((e,r,a)=>{let o=t[r];return"?"===a?null==o?"":"/"+o:(null==o&&n(!1,'Missing ":'+r+'" param'),"/"+o)})).replace(/\?/g,"").replace(/(\/?)\*/,((e,r,a,n)=>null==t["*"]?"/*"===n?"/":"":""+r+t["*"]))},e.getStaticContextFromError=function(e,r,a){return t({},r,{statusCode:500,errors:{[r._deepestRenderedBoundaryId||e[0].id]:a}})},e.getToPathname=function(e){return""===e||""===e.pathname?"/":"string"==typeof e?c(e).pathname:e.pathname},e.invariant=n,e.isRouteErrorResponse=_,e.joinPaths=L,e.json=function(e,r){void 0===r&&(r={});let a="number"==typeof r?{status:r}:r,n=new Headers(a.headers);return n.has("Content-Type")||n.set("Content-Type","application/json; charset=utf-8"),new Response(JSON.stringify(e),t({},a,{headers:n}))},e.matchPath=w,e.matchRoutes=f,e.normalizePathname=k,e.parsePath=c,e.redirect=function(e,r){void 0===r&&(r=302);let a=r;"number"==typeof a?a={status:a}:void 0===a.status&&(a.status=302);let n=new Headers(a.headers);return n.set("Location",e),new Response(null,t({},a,{headers:n}))},e.resolvePath=E,e.resolveTo=M,e.stripBasename=A,e.warning=R,Object.defineProperty(e,"__esModule",{value:!0})})); //# sourceMappingURL=router.umd.min.js.map