@openmrs/esm-user-onboarding-app 4.0.1-pre.2 → 4.0.1-pre.202
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.husky/pre-commit +1 -1
- package/.tx/config +11 -0
- package/README.md +62 -13
- package/dist/1119.js +1 -0
- package/dist/1197.js +1 -0
- package/dist/2146.js +1 -0
- package/dist/2690.js +1 -0
- package/dist/282.js +2 -0
- package/dist/282.js.LICENSE.txt +32 -0
- package/dist/282.js.map +1 -0
- package/dist/3099.js +1 -0
- package/dist/3184.js +2 -0
- package/dist/3184.js.LICENSE.txt +14 -0
- package/dist/3184.js.map +1 -0
- package/dist/3584.js +1 -0
- package/dist/4055.js +1 -0
- package/dist/4132.js +1 -0
- package/dist/4300.js +1 -0
- package/dist/4335.js +1 -0
- package/dist/4353.js +1 -0
- package/dist/4353.js.map +1 -0
- package/dist/4618.js +1 -0
- package/dist/4652.js +1 -0
- package/dist/4944.js +1 -0
- package/dist/5059.js +1 -0
- package/dist/5059.js.map +1 -0
- package/dist/5173.js +1 -0
- package/dist/5241.js +1 -0
- package/dist/5442.js +1 -0
- package/dist/5661.js +1 -0
- package/dist/6022.js +1 -0
- package/dist/6399.js +1 -0
- package/dist/6399.js.map +1 -0
- package/dist/6468.js +1 -0
- package/dist/6478.js +1 -0
- package/dist/6478.js.map +1 -0
- package/dist/6540.js +2 -0
- package/dist/6540.js.map +1 -0
- package/dist/6679.js +1 -0
- package/dist/6840.js +1 -0
- package/dist/6859.js +1 -0
- package/dist/7097.js +1 -0
- package/dist/7159.js +1 -0
- package/dist/723.js +1 -0
- package/dist/7617.js +1 -0
- package/dist/7688.js +2 -0
- package/dist/7688.js.LICENSE.txt +24 -0
- package/dist/7688.js.map +1 -0
- package/dist/795.js +1 -0
- package/dist/8163.js +1 -0
- package/dist/8349.js +1 -0
- package/dist/844.js +1 -0
- package/dist/844.js.map +1 -0
- package/dist/8618.js +1 -0
- package/dist/8690.js +1 -0
- package/dist/8690.js.map +1 -0
- package/dist/8719.js +2 -0
- package/dist/{985.js.LICENSE.txt → 8719.js.LICENSE.txt} +0 -20
- package/dist/8719.js.map +1 -0
- package/dist/890.js +1 -0
- package/dist/9214.js +1 -0
- package/dist/9538.js +1 -0
- package/dist/9569.js +1 -0
- package/dist/961.js +2 -0
- package/dist/961.js.LICENSE.txt +19 -0
- package/dist/961.js.map +1 -0
- package/dist/986.js +1 -0
- package/dist/9879.js +1 -0
- package/dist/9895.js +1 -0
- package/dist/9900.js +1 -0
- package/dist/9913.js +1 -0
- package/dist/main.js +1 -1
- package/dist/main.js.map +1 -1
- package/dist/openmrs-esm-user-onboarding-app.js +1 -1
- package/dist/openmrs-esm-user-onboarding-app.js.buildmanifest.json +976 -104
- package/dist/openmrs-esm-user-onboarding-app.js.map +1 -1
- package/dist/routes.json +1 -1
- package/e2e/README.md +9 -7
- package/e2e/core/test.ts +1 -1
- package/e2e/fixtures/api.ts +1 -1
- package/e2e/pages/home-page.ts +2 -2
- package/e2e/specs/onboarding-test.spec.ts +8 -27
- package/jest.config.js +3 -2
- package/package.json +10 -9
- package/src/config-schema.ts +76 -112
- package/src/declarations.d.ts +2 -0
- package/src/index.ts +1 -1
- package/src/root.component.tsx +32 -28
- package/src/routes.json +4 -4
- package/src/tooltip/tooltip.component.tsx +4 -8
- package/src/tooltip/tooltip.scss +17 -17
- package/src/tutorial/modal.component.tsx +16 -8
- package/src/tutorial/{modal.component.test.tsx → modal.test.tsx} +10 -8
- package/src/tutorial/styles.scss +8 -36
- package/src/tutorial/{tutorial.tsx → tutorial.component.tsx} +1 -5
- package/src/types.ts +15 -5
- package/translations/am.json +9 -1
- package/translations/ar.json +9 -0
- package/translations/ar_SY.json +9 -0
- package/translations/bn.json +9 -0
- package/translations/de.json +9 -0
- package/translations/en_US.json +9 -0
- package/translations/es.json +9 -1
- package/translations/es_MX.json +9 -0
- package/translations/fr.json +9 -1
- package/translations/he.json +9 -1
- package/translations/hi.json +9 -0
- package/translations/hi_IN.json +9 -0
- package/translations/id.json +9 -0
- package/translations/it.json +9 -0
- package/translations/ka.json +9 -0
- package/translations/km.json +9 -1
- package/translations/ku.json +9 -0
- package/translations/ky.json +9 -0
- package/translations/lg.json +9 -0
- package/translations/ne.json +9 -0
- package/translations/pl.json +9 -0
- package/translations/pt.json +9 -0
- package/translations/pt_BR.json +9 -0
- package/translations/qu.json +9 -0
- package/translations/ro_RO.json +9 -0
- package/translations/ru_RU.json +9 -0
- package/translations/si.json +9 -0
- package/translations/sw.json +9 -0
- package/translations/sw_KE.json +9 -0
- package/translations/tr.json +9 -0
- package/translations/tr_TR.json +9 -0
- package/translations/uk.json +9 -0
- package/translations/uz.json +9 -0
- package/translations/uz@Latn.json +9 -0
- package/translations/uz_UZ.json +9 -0
- package/translations/vi.json +9 -0
- package/translations/zh.json +9 -0
- package/translations/zh_CN.json +9 -0
- package/tsconfig.json +2 -1
- package/dist/151.js +0 -2
- package/dist/151.js.LICENSE.txt +0 -3
- package/dist/151.js.map +0 -1
- package/dist/197.js +0 -1
- package/dist/300.js +0 -1
- package/dist/335.js +0 -1
- package/dist/422.js +0 -1
- package/dist/422.js.map +0 -1
- package/dist/540.js +0 -2
- package/dist/540.js.map +0 -1
- package/dist/55.js +0 -1
- package/dist/570.js +0 -1
- package/dist/570.js.map +0 -1
- package/dist/59.js +0 -1
- package/dist/59.js.map +0 -1
- package/dist/652.js +0 -1
- package/dist/743.js +0 -1
- package/dist/743.js.map +0 -1
- package/dist/917.js +0 -1
- package/dist/917.js.map +0 -1
- package/dist/985.js +0 -2
- package/dist/985.js.map +0 -1
- package/dist/99.js +0 -1
- package/src/root.scss +0 -0
- /package/dist/{540.js.LICENSE.txt → 6540.js.LICENSE.txt} +0 -0
package/.husky/pre-commit
CHANGED
package/.tx/config
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
[main]
|
|
2
|
+
host = https://app.transifex.com
|
|
3
|
+
|
|
4
|
+
[o:openmrs:p:openmrs3:r:openmrs-esm-user-onboarding]
|
|
5
|
+
file_filter = translations/<lang>.json
|
|
6
|
+
source_file = translations/en.json
|
|
7
|
+
source_lang = en
|
|
8
|
+
type = KEYVALUEJSON
|
|
9
|
+
minimum_perc = 0
|
|
10
|
+
replace_edited_strings = false
|
|
11
|
+
keep_translations = false
|
package/README.md
CHANGED
|
@@ -1,34 +1,83 @@
|
|
|
1
|
-

|
|
2
|
+
|
|
3
|
+
New to the Project? Check out the [O3 Developer Documentation](https://openmrs.atlassian.net/wiki/x/IABBHg)
|
|
2
4
|
|
|
3
5
|
# OpenMRS ESM User Onboarding App
|
|
4
6
|
|
|
5
|
-
|
|
7
|
+
An interactive walkthrough system for O3 that provides guided tours and tutorials to help users learn the system. Built with React Joyride, it features multiple pre-configured tutorials covering essential workflows like patient registration, chart navigation, recording vitals and biometrics, and more.
|
|
8
|
+
|
|
9
|
+
## Features
|
|
10
|
+
|
|
11
|
+
- **Interactive Guided Tours**: Step-by-step walkthroughs using spotlight highlighting and tooltips
|
|
12
|
+
- **Auto-progression**: Automatically advance to next step when target elements appear
|
|
13
|
+
- **Multiple Tutorials**: 8 pre-configured tutorials covering core OpenMRS workflows
|
|
14
|
+
- **Configurable**: Customize tutorials through OpenMRS configuration system
|
|
15
|
+
- **Smart Waiting**: Automatically waits for elements to load before proceeding
|
|
16
|
+
- **Interactive Elements**: Support for clickable elements during tutorials
|
|
17
|
+
|
|
18
|
+
## Available Tutorials
|
|
19
|
+
|
|
20
|
+
1. **Basic Overview** - Introduction to main dashboard and navigation
|
|
21
|
+
2. **Registering a Patient** - Complete patient registration workflow
|
|
22
|
+
3. **Patient Chart** - Navigate and understand patient chart features
|
|
23
|
+
4. **Finding a Patient** - Search functionality and advanced filters
|
|
24
|
+
5. **Patient Lists** - Create and manage patient lists
|
|
25
|
+
6. **Recording Vitals** - Capture patient vitals and biometrics
|
|
26
|
+
7. **Starting a Patient Visit** - Begin a patient encounter
|
|
27
|
+
8. **Demo Tutorial** - Development and testing features
|
|
28
|
+
|
|
29
|
+
## Development
|
|
6
30
|
|
|
7
|
-
|
|
31
|
+
### Prerequisites
|
|
32
|
+
|
|
33
|
+
- Node.js (v22 or higher)
|
|
34
|
+
- Yarn package manager
|
|
35
|
+
|
|
36
|
+
### Running locally
|
|
8
37
|
|
|
9
38
|
```sh
|
|
10
|
-
yarn #
|
|
11
|
-
yarn start #
|
|
39
|
+
yarn # install dependencies
|
|
40
|
+
yarn start # start development server
|
|
12
41
|
```
|
|
13
42
|
|
|
14
|
-
##
|
|
43
|
+
## Configuration
|
|
44
|
+
|
|
45
|
+
Enable tutorials by setting `showTutorial: true` in your OpenMRS configuration. Customize tutorial content through the `tutorialData` configuration array.
|
|
46
|
+
|
|
47
|
+
## Step Configuration
|
|
48
|
+
|
|
49
|
+
### Basic Step Properties
|
|
50
|
+
|
|
51
|
+
Each tutorial step supports the following properties:
|
|
15
52
|
|
|
53
|
+
- `target`: CSS selector for the element to highlight
|
|
54
|
+
- `title`: Optional step title
|
|
55
|
+
- `content`: Step description text
|
|
56
|
+
- `placement`: Tooltip placement (`top`, `bottom`, `left`, `right`, `center`)
|
|
57
|
+
- `spotlightClicks`: Allow clicking on highlighted elements
|
|
58
|
+
- `disableOverlay`: Disable the dark overlay
|
|
16
59
|
|
|
60
|
+
### UI Control Properties
|
|
17
61
|
|
|
18
|
-
|
|
19
|
-
|
|
62
|
+
- `hideBackButton`: Hide the back navigation button
|
|
63
|
+
- `hideNextButton`: Hide the next navigation button
|
|
64
|
+
- `hideFooter`: Hide the entire footer
|
|
65
|
+
- `hideCloseButton`: Hide the close button
|
|
20
66
|
|
|
21
|
-
-
|
|
67
|
+
### Auto-transition Steps
|
|
22
68
|
|
|
23
|
-
|
|
69
|
+
Automatically advance when target elements appear:
|
|
24
70
|
|
|
25
71
|
```js
|
|
26
72
|
{
|
|
27
|
-
target: '',
|
|
28
|
-
|
|
73
|
+
target: '[data-extension-id="some-target"]',
|
|
74
|
+
content: 'Click this button to continue',
|
|
75
|
+
spotlightClicks: true,
|
|
76
|
+
hideNextButton: true,
|
|
29
77
|
data: {
|
|
30
|
-
autoNextOn: '[data-extension-id="
|
|
78
|
+
autoNextOn: '[data-extension-id="next-element"]'
|
|
31
79
|
}
|
|
32
80
|
}
|
|
33
81
|
```
|
|
34
82
|
|
|
83
|
+
The step will automatically proceed when the `autoNextOn` selector matches an element on the page.
|
package/dist/1119.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";(globalThis.webpackChunk_openmrs_esm_user_onboarding_app=globalThis.webpackChunk_openmrs_esm_user_onboarding_app||[]).push([[1119],{41119:e=>{e.exports=JSON.parse('{"back":"Back","finish":"Finish","modalDescription":"Find walkthroughs and video tutorials on some of the core features of OpenMRS.","next":"Next","tutorial":"Tutorials","walkthrough":"Walkthrough","welcome":"Welcome to OpenMRS!"}')}}]);
|
package/dist/1197.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";(globalThis.webpackChunk_openmrs_esm_user_onboarding_app=globalThis.webpackChunk_openmrs_esm_user_onboarding_app||[]).push([[1197],{81197:e=>{e.exports=JSON.parse('{"back":"Back","finish":"Finish","modalDescription":"Find walkthroughs and video tutorials on some of the core features of OpenMRS.","next":"Next","tutorial":"Tutorials","walkthrough":"Walkthrough","welcome":"Welcome to OpenMRS!"}')}}]);
|
package/dist/2146.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";(globalThis.webpackChunk_openmrs_esm_user_onboarding_app=globalThis.webpackChunk_openmrs_esm_user_onboarding_app||[]).push([[2146],{12146:e=>{e.exports=JSON.parse('{"back":"Back","finish":"Finish","modalDescription":"Find walkthroughs and video tutorials on some of the core features of OpenMRS.","next":"Next","tutorial":"Tutorials","walkthrough":"Walkthrough","welcome":"Welcome to OpenMRS!"}')}}]);
|
package/dist/2690.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";(globalThis.webpackChunk_openmrs_esm_user_onboarding_app=globalThis.webpackChunk_openmrs_esm_user_onboarding_app||[]).push([[2690],{72690:a=>{a.exports=JSON.parse('{"back":"Kembali","finish":"Selesai","modalDescription":"Temukan panduan dan tutorial video tentang beberapa fitur inti OpenMRS.","next":"Berikutnya","tutorial":"Tutorial","walkthrough":"Panduan","welcome":"Selamat datang di OpenMRS!"}')}}]);
|
package/dist/282.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
/*! For license information please see 282.js.LICENSE.txt */
|
|
2
|
+
"use strict";(globalThis.webpackChunk_openmrs_esm_user_onboarding_app=globalThis.webpackChunk_openmrs_esm_user_onboarding_app||[]).push([[282],{20282:(e,t,r)=>{r.r(t),r.d(t,{AbortedDeferredError:()=>X,Await:()=>Xt,BrowserRouter:()=>Tr,Form:()=>Nr,HashRouter:()=>Ar,Link:()=>Or,MemoryRouter:()=>Kt,NavLink:()=>Fr,Navigate:()=>$t,NavigationType:()=>n,Outlet:()=>Jt,Route:()=>Vt,Router:()=>Yt,RouterProvider:()=>Lr,Routes:()=>qt,ScrollRestoration:()=>Br,UNSAFE_DataRouterContext:()=>Ze,UNSAFE_DataRouterStateContext:()=>et,UNSAFE_ErrorResponseImpl:()=>re,UNSAFE_FetchersContext:()=>Er,UNSAFE_LocationContext:()=>nt,UNSAFE_NavigationContext:()=>rt,UNSAFE_RouteContext:()=>at,UNSAFE_ViewTransitionContext:()=>Sr,UNSAFE_useRouteId:()=>kt,UNSAFE_useScrollRestoration:()=>en,createBrowserRouter:()=>yr,createHashRouter:()=>gr,createMemoryRouter:()=>ar,createPath:()=>v,createRoutesFromChildren:()=>tr,createRoutesFromElements:()=>tr,createSearchParams:()=>cr,defer:()=>Z,generatePath:()=>O,isRouteErrorResponse:()=>ne,json:()=>q,matchPath:()=>F,matchRoutes:()=>E,parsePath:()=>y,redirect:()=>ee,redirectDocument:()=>te,renderMatches:()=>rr,resolvePath:()=>I,unstable_HistoryRouter:()=>Mr,unstable_usePrompt:()=>rn,unstable_useViewTransitionState:()=>nn,useActionData:()=>Ot,useAsyncError:()=>Bt,useAsyncValue:()=>Nt,useBeforeUnload:()=>tn,useBlocker:()=>zt,useFetcher:()=>Xr,useFetchers:()=>Gr,useFormAction:()=>qr,useHref:()=>it,useInRouterContext:()=>st,useLinkClickHandler:()=>Kr,useLoaderData:()=>Ut,useLocation:()=>lt,useMatch:()=>ct,useMatches:()=>Mt,useNavigate:()=>ht,useNavigation:()=>Tt,useNavigationType:()=>ut,useOutlet:()=>mt,useOutletContext:()=>pt,useParams:()=>vt,useResolvedPath:()=>yt,useRevalidator:()=>At,useRouteError:()=>Ft,useRouteLoaderData:()=>jt,useRoutes:()=>gt,useSearchParams:()=>$r,useSubmit:()=>Yr});var n,a=r(16072),o=r(40961),i=r.t(o,2);function s(){return s=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},s.apply(this,arguments)}!function(e){e.Pop="POP",e.Push="PUSH",e.Replace="REPLACE"}(n||(n={}));const l="popstate";function u(e){void 0===e&&(e={});let t,{initialEntries:r=["/"],initialIndex:a,v5Compat:o=!1}=e;t=r.map(((e,t)=>d(e,"string"==typeof e?null:e.state,0===t?"default":void 0)));let i=u(null==a?t.length-1:a),s=n.Pop,l=null;function u(e){return Math.min(Math.max(e,0),t.length-1)}function c(){return t[i]}function d(e,r,n){void 0===r&&(r=null);let a=m(t?c().pathname:"/",e,r,n);return f("/"===a.pathname.charAt(0),"relative pathnames are not supported in memory history: "+JSON.stringify(e)),a}function h(e){return"string"==typeof e?e:v(e)}return{get index(){return i},get action(){return s},get location(){return c()},createHref:h,createURL:e=>new URL(h(e),"http://localhost"),encodeLocation(e){let t="string"==typeof e?y(e):e;return{pathname:t.pathname||"",search:t.search||"",hash:t.hash||""}},push(e,r){s=n.Push;let a=d(e,r);i+=1,t.splice(i,t.length,a),o&&l&&l({action:s,location:a,delta:1})},replace(e,r){s=n.Replace;let a=d(e,r);t[i]=a,o&&l&&l({action:s,location:a,delta:0})},go(e){s=n.Pop;let r=u(i+e),a=t[r];i=r,l&&l({action:s,location:a,delta:e})},listen:e=>(l=e,()=>{l=null})}}function c(e){return void 0===e&&(e={}),g((function(e,t){let{pathname:r,search:n,hash:a}=e.location;return m("",{pathname:r,search:n,hash:a},t.state&&t.state.usr||null,t.state&&t.state.key||"default")}),(function(e,t){return"string"==typeof t?t:v(t)}),null,e)}function d(e){return void 0===e&&(e={}),g((function(e,t){let{pathname:r="/",search:n="",hash:a=""}=y(e.location.hash.substr(1));return r.startsWith("/")||r.startsWith(".")||(r="/"+r),m("",{pathname:r,search:n,hash:a},t.state&&t.state.usr||null,t.state&&t.state.key||"default")}),(function(e,t){let r=e.document.querySelector("base"),n="";if(r&&r.getAttribute("href")){let t=e.location.href,r=t.indexOf("#");n=-1===r?t:t.slice(0,r)}return n+"#"+("string"==typeof t?t:v(t))}),(function(e,t){f("/"===e.pathname.charAt(0),"relative pathnames are not supported in hash history.push("+JSON.stringify(t)+")")}),e)}function h(e,t){if(!1===e||null==e)throw new Error(t)}function f(e,t){if(!e){"undefined"!=typeof console&&console.warn(t);try{throw new Error(t)}catch(e){}}}function p(e,t){return{usr:e.state,key:e.key,idx:t}}function m(e,t,r,n){return void 0===r&&(r=null),s({pathname:"string"==typeof e?e:e.pathname,search:"",hash:""},"string"==typeof t?y(t):t,{state:r,key:t&&t.key||n||Math.random().toString(36).substr(2,8)})}function v(e){let{pathname:t="/",search:r="",hash:n=""}=e;return r&&"?"!==r&&(t+="?"===r.charAt(0)?r:"?"+r),n&&"#"!==n&&(t+="#"===n.charAt(0)?n:"#"+n),t}function y(e){let t={};if(e){let r=e.indexOf("#");r>=0&&(t.hash=e.substr(r),e=e.substr(0,r));let n=e.indexOf("?");n>=0&&(t.search=e.substr(n),e=e.substr(0,n)),e&&(t.pathname=e)}return t}function g(e,t,r,a){void 0===a&&(a={});let{window:o=document.defaultView,v5Compat:i=!1}=a,u=o.history,c=n.Pop,d=null,f=y();function y(){return(u.state||{idx:null}).idx}function g(){c=n.Pop;let e=y(),t=null==e?null:e-f;f=e,d&&d({action:c,location:w.location,delta:t})}function b(e){let t="null"!==o.location.origin?o.location.origin:o.location.href,r="string"==typeof e?e:v(e);return r=r.replace(/ $/,"%20"),h(t,"No window.location.(origin|href) available to create URL for href: "+r),new URL(r,t)}null==f&&(f=0,u.replaceState(s({},u.state,{idx:f}),""));let w={get action(){return c},get location(){return e(o,u)},listen(e){if(d)throw new Error("A history only accepts one active listener");return o.addEventListener(l,g),d=e,()=>{o.removeEventListener(l,g),d=null}},createHref:e=>t(o,e),createURL:b,encodeLocation(e){let t=b(e);return{pathname:t.pathname,search:t.search,hash:t.hash}},push:function(e,t){c=n.Push;let a=m(w.location,e,t);r&&r(a,e),f=y()+1;let s=p(a,f),l=w.createHref(a);try{u.pushState(s,"",l)}catch(e){if(e instanceof DOMException&&"DataCloneError"===e.name)throw e;o.location.assign(l)}i&&d&&d({action:c,location:w.location,delta:1})},replace:function(e,t){c=n.Replace;let a=m(w.location,e,t);r&&r(a,e),f=y();let o=p(a,f),s=w.createHref(a);u.replaceState(o,"",s),i&&d&&d({action:c,location:w.location,delta:0})},go:e=>u.go(e)};return w}var b;!function(e){e.data="data",e.deferred="deferred",e.redirect="redirect",e.error="error"}(b||(b={}));const w=new Set(["lazy","caseSensitive","path","id","index","children"]);function S(e,t,r,n){return void 0===r&&(r=[]),void 0===n&&(n={}),e.map(((e,a)=>{let o=[...r,String(a)],i="string"==typeof e.id?e.id:o.join("-");if(h(!0!==e.index||!e.children,"Cannot specify children on an index route"),h(!n[i],'Found a route id collision on id "'+i+"\". Route id's must be globally unique within Data Router usages"),function(e){return!0===e.index}(e)){let r=s({},e,t(e),{id:i});return n[i]=r,r}{let r=s({},e,t(e),{id:i,children:void 0});return n[i]=r,e.children&&(r.children=S(e.children,t,o,n)),r}}))}function E(e,t,r){return void 0===r&&(r="/"),R(e,t,r,!1)}function R(e,t,r,n){let a=B(("string"==typeof t?y(t):t).pathname||"/",r);if(null==a)return null;let o=D(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)))))}(o);let i=null;for(let e=0;null==i&&e<o.length;++e){let t=N(a);i=j(o[e],t,n)}return i}function x(e,t){let{route:r,pathname:n,params:a}=e;return{id:r.id,pathname:n,params:a,data:t[r.id],handle:r.handle}}function D(e,t,r,n){void 0===t&&(t=[]),void 0===r&&(r=[]),void 0===n&&(n="");let a=(e,a,o)=>{let i={relativePath:void 0===o?e.path||"":o,caseSensitive:!0===e.caseSensitive,childrenIndex:a,route:e};i.relativePath.startsWith("/")&&(h(i.relativePath.startsWith(n),'Absolute route path "'+i.relativePath+'" nested under path "'+n+'" is not valid. An absolute child route path must start with the combined path of all its parent routes.'),i.relativePath=i.relativePath.slice(n.length));let s=$([n,i.relativePath]),l=r.concat(i);e.children&&e.children.length>0&&(h(!0!==e.index,'Index routes must not have child routes. Please remove all child routes from route path "'+s+'".'),D(e.children,t,l,s)),(null!=e.path||e.index)&&t.push({path:s,score:U(s,e.index),routesMeta:l})};return e.forEach(((e,t)=>{var r;if(""!==e.path&&null!=(r=e.path)&&r.includes("?"))for(let r of C(e.path))a(e,t,r);else a(e,t)})),t}function C(e){let t=e.split("/");if(0===t.length)return[];let[r,...n]=t,a=r.endsWith("?"),o=r.replace(/\?$/,"");if(0===n.length)return a?[o,""]:[o];let i=C(n.join("/")),s=[];return s.push(...i.map((e=>""===e?o:[o,e].join("/")))),a&&s.push(...i),s.map((t=>e.startsWith("/")&&""===t?"/":t))}const _=/^:[\w-]+$/,L=3,P=2,k=1,T=10,A=-2,M=e=>"*"===e;function U(e,t){let r=e.split("/"),n=r.length;return r.some(M)&&(n+=A),t&&(n+=P),r.filter((e=>!M(e))).reduce(((e,t)=>e+(_.test(t)?L:""===t?k:T)),n)}function j(e,t,r){void 0===r&&(r=!1);let{routesMeta:n}=e,a={},o="/",i=[];for(let e=0;e<n.length;++e){let s=n[e],l=e===n.length-1,u="/"===o?t:t.slice(o.length)||"/",c=F({path:s.relativePath,caseSensitive:s.caseSensitive,end:l},u),d=s.route;if(!c&&l&&r&&!n[n.length-1].route.index&&(c=F({path:s.relativePath,caseSensitive:s.caseSensitive,end:!1},u)),!c)return null;Object.assign(a,c.params),i.push({params:a,pathname:$([o,c.pathname]),pathnameBase:J($([o,c.pathnameBase])),route:d}),"/"!==c.pathnameBase&&(o=$([o,c.pathnameBase]))}return i}function O(e,t){void 0===t&&(t={});let r=e;r.endsWith("*")&&"*"!==r&&!r.endsWith("/*")&&(f(!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(/\*$/,"/*"));const n=r.startsWith("/")?"/":"",a=e=>null==e?"":"string"==typeof e?e:String(e);return n+r.split(/\/+/).map(((e,r,n)=>{if(r===n.length-1&&"*"===e)return a(t["*"]);const o=e.match(/^:([\w-]+)(\??)$/);if(o){const[,e,r]=o;let n=t[e];return h("?"===r||null!=n,'Missing ":'+e+'" param'),a(n)}return e.replace(/\?$/g,"")})).filter((e=>!!e)).join("/")}function F(e,t){"string"==typeof e&&(e={path:e,caseSensitive:!1,end:!0});let[r,n]=function(e,t,r){void 0===t&&(t=!1),void 0===r&&(r=!0),f("*"===e||!e.endsWith("*")||e.endsWith("/*"),'Route path "'+e+'" will be treated as if it were "'+e.replace(/\*$/,"/*")+'" because the `*` character must always follow a `/` in the pattern. To get rid of this warning, please change the route path to "'+e.replace(/\*$/,"/*")+'".');let n=[],a="^"+e.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,((e,t,r)=>(n.push({paramName:t,isOptional:null!=r}),r?"/?([^\\/]+)?":"/([^\\/]+)")));return e.endsWith("*")?(n.push({paramName:"*"}),a+="*"===e||"/*"===e?"(.*)$":"(?:\\/(.+)|\\/*)$"):r?a+="\\/*$":""!==e&&"/"!==e&&(a+="(?:(?=\\/|$))"),[new RegExp(a,t?void 0:"i"),n]}(e.path,e.caseSensitive,e.end),a=t.match(r);if(!a)return null;let o=a[0],i=o.replace(/(.)\/+$/,"$1"),s=a.slice(1);return{params:n.reduce(((e,t,r)=>{let{paramName:n,isOptional:a}=t;if("*"===n){let e=s[r]||"";i=o.slice(0,o.length-e.length).replace(/(.)\/+$/,"$1")}const l=s[r];return e[n]=a&&!l?void 0:(l||"").replace(/%2F/g,"/"),e}),{}),pathname:o,pathnameBase:i,pattern:e}}function N(e){try{return e.split("/").map((e=>decodeURIComponent(e).replace(/\//g,"%2F"))).join("/")}catch(t){return f(!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 B(e,t){if("/"===t)return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let r=t.endsWith("/")?t.length-1:t.length,n=e.charAt(r);return n&&"/"!==n?null:e.slice(r)||"/"}function I(e,t){void 0===t&&(t="/");let{pathname:r,search:n="",hash:a=""}="string"==typeof e?y(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:V(n),hash:Y(a)}}function z(e,t,r,n){return"Cannot include a '"+e+"' character in a manually specified `to."+t+"` field ["+JSON.stringify(n)+"]. Please separate it out to the `to."+r+'` field. Alternatively you may provide the full path as a string in <Link to="..."> and the router will parse it for you.'}function H(e){return e.filter(((e,t)=>0===t||e.route.path&&e.route.path.length>0))}function W(e,t){let r=H(e);return t?r.map(((e,t)=>t===r.length-1?e.pathname:e.pathnameBase)):r.map((e=>e.pathnameBase))}function K(e,t,r,n){let a;void 0===n&&(n=!1),"string"==typeof e?a=y(e):(a=s({},e),h(!a.pathname||!a.pathname.includes("?"),z("?","pathname","search",a)),h(!a.pathname||!a.pathname.includes("#"),z("#","pathname","hash",a)),h(!a.search||!a.search.includes("#"),z("#","search","hash",a)));let o,i=""===e||""===a.pathname,l=i?"/":a.pathname;if(null==l)o=r;else{let e=t.length-1;if(!n&&l.startsWith("..")){let t=l.split("/");for(;".."===t[0];)t.shift(),e-=1;a.pathname=t.join("/")}o=e>=0?t[e]:"/"}let u=I(a,o),c=l&&"/"!==l&&l.endsWith("/"),d=(i||"."===l)&&r.endsWith("/");return u.pathname.endsWith("/")||!c&&!d||(u.pathname+="/"),u}const $=e=>e.join("/").replace(/\/\/+/g,"/"),J=e=>e.replace(/\/+$/,"").replace(/^\/*/,"/"),V=e=>e&&"?"!==e?e.startsWith("?")?e:"?"+e:"",Y=e=>e&&"#"!==e?e.startsWith("#")?e:"#"+e:"",q=function(e,t){void 0===t&&(t={});let r="number"==typeof t?{status:t}:t,n=new Headers(r.headers);return n.has("Content-Type")||n.set("Content-Type","application/json; charset=utf-8"),new Response(JSON.stringify(e),s({},r,{headers:n}))};class X extends Error{}class G{constructor(e,t){let r;this.pendingKeysSet=new Set,this.subscribers=new Set,this.deferredKeys=[],h(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 n=()=>r(new X("Deferred data aborted"));this.unlistenAbortSignal=()=>this.controller.signal.removeEventListener("abort",n),this.controller.signal.addEventListener("abort",n),this.data=Object.entries(e).reduce(((e,t)=>{let[r,n]=t;return Object.assign(e,{[r]:this.trackPromise(r,n)})}),{}),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,void 0,t)),(t=>this.onSettle(r,e,t)));return r.catch((()=>{})),Object.defineProperty(r,"_tracked",{get:()=>!0}),r}onSettle(e,t,r,n){if(this.controller.signal.aborted&&r instanceof X)return this.unlistenAbortSignal(),Object.defineProperty(e,"_error",{get:()=>r}),Promise.reject(r);if(this.pendingKeysSet.delete(t),this.done&&this.unlistenAbortSignal(),void 0===r&&void 0===n){let r=new Error('Deferred data for key "'+t+'" resolved/rejected with `undefined`, you must resolve/reject with a value or `null`.');return Object.defineProperty(e,"_error",{get:()=>r}),this.emit(!1,t),Promise.reject(r)}return void 0===n?(Object.defineProperty(e,"_error",{get:()=>r}),this.emit(!1,t),Promise.reject(r)):(Object.defineProperty(e,"_data",{get:()=>n}),this.emit(!1,t),n)}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((n=>{e.removeEventListener("abort",r),(n||this.done)&&t(n)}))}))}return t}get done(){return 0===this.pendingKeysSet.size}get unwrappedData(){return h(null!==this.data&&this.done,"Can only unwrap data on initialized and settled deferreds"),Object.entries(this.data).reduce(((e,t)=>{let[r,n]=t;return Object.assign(e,{[r]:Q(n)})}),{})}get pendingKeys(){return Array.from(this.pendingKeysSet)}}function Q(e){if(!function(e){return e instanceof Promise&&!0===e._tracked}(e))return e;if(e._error)throw e._error;return e._data}const Z=function(e,t){return void 0===t&&(t={}),new G(e,"number"==typeof t?{status:t}:t)},ee=function(e,t){void 0===t&&(t=302);let r=t;"number"==typeof r?r={status:r}:void 0===r.status&&(r.status=302);let n=new Headers(r.headers);return n.set("Location",e),new Response(null,s({},r,{headers:n}))},te=(e,t)=>{let r=ee(e,t);return r.headers.set("X-Remix-Reload-Document","true"),r};class re{constructor(e,t,r,n){void 0===n&&(n=!1),this.status=e,this.statusText=t||"",this.internal=n,r instanceof Error?(this.data=r.toString(),this.error=r):this.data=r}}function ne(e){return null!=e&&"number"==typeof e.status&&"string"==typeof e.statusText&&"boolean"==typeof e.internal&&"data"in e}const ae=["post","put","patch","delete"],oe=new Set(ae),ie=["get",...ae],se=new Set(ie),le=new Set([301,302,303,307,308]),ue=new Set([307,308]),ce={state:"idle",location:void 0,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0},de={state:"idle",data:void 0,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0},he={state:"unblocked",proceed:void 0,reset:void 0,location:void 0},fe=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,pe=e=>({hasErrorBoundary:Boolean(e.hasErrorBoundary)}),me="remix-router-transitions";function ve(e){const t=e.window?e.window:"undefined"!=typeof window?window:void 0,r=void 0!==t&&void 0!==t.document&&void 0!==t.document.createElement,a=!r;let o;if(h(e.routes.length>0,"You must provide a non-empty routes array to createRouter"),e.mapRouteProperties)o=e.mapRouteProperties;else if(e.detectErrorBoundary){let t=e.detectErrorBoundary;o=e=>({hasErrorBoundary:t(e)})}else o=pe;let i,l,u,c={},d=S(e.routes,o,void 0,c),p=e.basename||"/",v=e.unstable_dataStrategy||De,y=e.unstable_patchRoutesOnMiss,g=s({v7_fetcherPersist:!1,v7_normalizeFormMethod:!1,v7_partialHydration:!1,v7_prependBasename:!1,v7_relativeSplatPath:!1,v7_skipActionErrorRevalidation:!1},e.future),w=null,D=new Set,C=null,_=null,L=null,P=null!=e.hydrationData,k=E(d,e.history.location,p),T=null;if(null==k&&!y){let t=Oe(404,{pathname:e.history.location.pathname}),{matches:r,route:n}=je(d);k=r,T={[n.id]:t}}if(k&&y&&!e.hydrationData&&dt(k,d,e.history.location.pathname).active&&(k=null),k)if(k.some((e=>e.route.lazy)))l=!1;else if(k.some((e=>e.route.loader)))if(g.v7_partialHydration){let t=e.hydrationData?e.hydrationData.loaderData:null,r=e.hydrationData?e.hydrationData.errors:null,n=e=>!e.route.loader||("function"!=typeof e.route.loader||!0!==e.route.loader.hydrate)&&(t&&void 0!==t[e.route.id]||r&&void 0!==r[e.route.id]);if(r){let e=k.findIndex((e=>void 0!==r[e.route.id]));l=k.slice(0,e+1).every(n)}else l=k.every(n)}else l=null!=e.hydrationData;else l=!0;else l=!1,k=[];let A,M={historyAction:e.history.action,location:e.history.location,matches:k,initialized:l,navigation:ce,restoreScrollPosition:null==e.hydrationData&&null,preventScrollReset:!1,revalidation:"idle",loaderData:e.hydrationData&&e.hydrationData.loaderData||{},actionData:e.hydrationData&&e.hydrationData.actionData||null,errors:e.hydrationData&&e.hydrationData.errors||T,fetchers:new Map,blockers:new Map},U=n.Pop,j=!1,O=!1,F=new Map,N=null,I=!1,z=!1,H=[],W=[],K=new Map,$=0,J=-1,V=new Map,Y=new Set,q=new Map,X=new Map,G=new Set,Q=new Map,Z=new Map,ee=new Map,te=!1;function ae(e,t){void 0===t&&(t={}),M=s({},M,e);let r=[],n=[];g.v7_fetcherPersist&&M.fetchers.forEach(((e,t)=>{"idle"===e.state&&(G.has(t)?n.push(t):r.push(t))})),[...D].forEach((e=>e(M,{deletedFetchers:n,unstable_viewTransitionOpts:t.viewTransitionOpts,unstable_flushSync:!0===t.flushSync}))),g.v7_fetcherPersist&&(r.forEach((e=>M.fetchers.delete(e))),n.forEach((e=>Qe(e))))}function oe(t,r,a){var o,l;let u,{flushSync:c}=void 0===a?{}:a,h=null!=M.actionData&&null!=M.navigation.formMethod&&We(M.navigation.formMethod)&&"loading"===M.navigation.state&&!0!==(null==(o=t.state)?void 0:o._isRedirect);u=r.actionData?Object.keys(r.actionData).length>0?r.actionData:null:h?M.actionData:null;let f=r.loaderData?Ae(M.loaderData,r.loaderData,r.matches||[],r.errors):M.loaderData,p=M.blockers;p.size>0&&(p=new Map(p),p.forEach(((e,t)=>p.set(t,he))));let m,v=!0===j||null!=M.navigation.formMethod&&We(M.navigation.formMethod)&&!0!==(null==(l=t.state)?void 0:l._isRedirect);if(i&&(d=i,i=void 0),I||U===n.Pop||(U===n.Push?e.history.push(t,t.state):U===n.Replace&&e.history.replace(t,t.state)),U===n.Pop){let e=F.get(M.location.pathname);e&&e.has(t.pathname)?m={currentLocation:M.location,nextLocation:t}:F.has(t.pathname)&&(m={currentLocation:t,nextLocation:M.location})}else if(O){let e=F.get(M.location.pathname);e?e.add(t.pathname):(e=new Set([t.pathname]),F.set(M.location.pathname,e)),m={currentLocation:M.location,nextLocation:t}}ae(s({},r,{actionData:u,loaderData:f,historyAction:U,location:t,initialized:!0,navigation:ce,revalidation:"idle",restoreScrollPosition:ct(t,r.matches||M.matches),preventScrollReset:v,blockers:p}),{viewTransitionOpts:m,flushSync:!0===c}),U=n.Pop,j=!1,O=!1,I=!1,z=!1,H=[],W=[]}async function ie(t,r,a){A&&A.abort(),A=null,U=t,I=!0===(a&&a.startUninterruptedRevalidation),function(e,t){if(C&&L){let r=ut(e,t);C[r]=L()}}(M.location,M.matches),j=!0===(a&&a.preventScrollReset),O=!0===(a&&a.enableViewTransition);let o=i||d,l=a&&a.overrideNavigation,u=E(o,r,p),c=!0===(a&&a.flushSync),h=dt(u,o,r.pathname);if(h.active&&h.matches&&(u=h.matches),!u){let{error:e,notFoundMatches:t,route:n}=it(r.pathname);return void oe(r,{matches:t,loaderData:{},errors:{[n.id]:e}},{flushSync:c})}if(M.initialized&&!z&&(f=M.location,m=r,f.pathname===m.pathname&&f.search===m.search&&(""===f.hash?""!==m.hash:f.hash===m.hash||""!==m.hash))&&!(a&&a.submission&&We(a.submission.formMethod)))return void oe(r,{matches:u},{flushSync:c});var f,m;A=new AbortController;let v,y=Le(e.history,r,A.signal,a&&a.submission);if(a&&a.pendingError)v=[Ue(u).route.id,{type:b.error,error:a.pendingError}];else if(a&&a.submission&&We(a.submission.formMethod)){let t=await async function(e,t,r,a,o,i){void 0===i&&(i={}),Pe();let s,l=function(e,t){return{state:"submitting",location:e,formMethod:t.formMethod,formAction:t.formAction,formEncType:t.formEncType,formData:t.formData,json:t.json,text:t.text}}(t,r);if(ae({navigation:l},{flushSync:!0===i.flushSync}),o){let r=await ht(a,t.pathname,e.signal);if("aborted"===r.type)return{shortCircuited:!0};if("error"===r.type){let{boundaryId:e,error:n}=st(t.pathname,r);return{matches:r.partialMatches,pendingActionResult:[e,{type:b.error,error:n}]}}if(!r.matches){let{notFoundMatches:e,error:r,route:n}=it(t.pathname);return{matches:e,pendingActionResult:[n.id,{type:b.error,error:r}]}}a=r.matches}let u=Ve(a,t);if(u.route.action||u.route.lazy){if(s=(await we("action",e,[u],a))[0],e.signal.aborted)return{shortCircuited:!0}}else s={type:b.error,error:Oe(405,{method:e.method,pathname:t.pathname,routeId:u.route.id})};if(ze(s)){let t;return t=i&&null!=i.replace?i.replace:_e(s.response.headers.get("Location"),new URL(e.url),p)===M.location.pathname+M.location.search,await ve(e,s,{submission:r,replace:t}),{shortCircuited:!0}}if(Be(s))throw Oe(400,{type:"defer-action"});if(Ie(s)){let e=Ue(a,u.route.id);return!0!==(i&&i.replace)&&(U=n.Push),{matches:a,pendingActionResult:[e.route.id,s]}}return{matches:a,pendingActionResult:[u.route.id,s]}}(y,r,a.submission,u,h.active,{replace:a.replace,flushSync:c});if(t.shortCircuited)return;if(t.pendingActionResult){let[e,n]=t.pendingActionResult;if(Ie(n)&&ne(n.error)&&404===n.error.status)return A=null,void oe(r,{matches:t.matches,loaderData:{},errors:{[e]:n.error}})}u=t.matches||u,v=t.pendingActionResult,l=qe(r,a.submission),c=!1,h.active=!1,y=Le(e.history,y.url,y.signal)}let{shortCircuited:w,matches:S,loaderData:R,errors:x}=await async function(t,r,n,a,o,l,u,c,h,f,m){let v=o||qe(r,l),y=l||u||Ye(v),b=!(I||g.v7_partialHydration&&h);if(a){if(b){let e=se(m);ae(s({navigation:v},void 0!==e?{actionData:e}:{}),{flushSync:f})}let e=await ht(n,r.pathname,t.signal);if("aborted"===e.type)return{shortCircuited:!0};if("error"===e.type){let{boundaryId:t,error:n}=st(r.pathname,e);return{matches:e.partialMatches,loaderData:{},errors:{[t]:n}}}if(!e.matches){let{error:e,notFoundMatches:t,route:n}=it(r.pathname);return{matches:t,loaderData:{},errors:{[n.id]:e}}}n=e.matches}let w=i||d,[S,E]=be(e.history,M,n,y,r,g.v7_partialHydration&&!0===h,g.v7_skipActionErrorRevalidation,z,H,W,G,q,Y,w,p,m);if(lt((e=>!(n&&n.some((t=>t.route.id===e)))||S&&S.some((t=>t.route.id===e)))),J=++$,0===S.length&&0===E.length){let e=tt();return oe(r,s({matches:n,loaderData:{},errors:m&&Ie(m[1])?{[m[0]]:m[1].error}:null},Me(m),e?{fetchers:new Map(M.fetchers)}:{}),{flushSync:f}),{shortCircuited:!0}}if(b){let e={};if(!a){e.navigation=v;let t=se(m);void 0!==t&&(e.actionData=t)}E.length>0&&(e.fetchers=function(e){return e.forEach((e=>{let t=M.fetchers.get(e.key),r=Xe(void 0,t?t.data:void 0);M.fetchers.set(e.key,r)})),new Map(M.fetchers)}(E)),ae(e,{flushSync:f})}E.forEach((e=>{K.has(e.key)&&Ze(e.key),e.controller&&K.set(e.key,e.controller)}));let R=()=>E.forEach((e=>Ze(e.key)));A&&A.signal.addEventListener("abort",R);let{loaderResults:x,fetcherResults:D}=await Se(M.matches,n,S,E,t);if(t.signal.aborted)return{shortCircuited:!0};A&&A.signal.removeEventListener("abort",R),E.forEach((e=>K.delete(e.key)));let C=Fe([...x,...D]);if(C){if(C.idx>=S.length){let e=E[C.idx-S.length].key;Y.add(e)}return await ve(t,C.result,{replace:c}),{shortCircuited:!0}}let{loaderData:_,errors:L}=Te(M,n,S,x,m,E,D,Q);Q.forEach(((e,t)=>{e.subscribe((r=>{(r||e.done)&&Q.delete(t)}))})),g.v7_partialHydration&&h&&M.errors&&Object.entries(M.errors).filter((e=>{let[t]=e;return!S.some((e=>e.route.id===t))})).forEach((e=>{let[t,r]=e;L=Object.assign(L||{},{[t]:r})}));let P=tt(),k=rt(J),T=P||k||E.length>0;return s({matches:n,loaderData:_,errors:L},T?{fetchers:new Map(M.fetchers)}:{})}(y,r,u,h.active,l,a&&a.submission,a&&a.fetcherSubmission,a&&a.replace,a&&!0===a.initialHydration,c,v);w||(A=null,oe(r,s({matches:S||u},Me(v),{loaderData:R,errors:x})))}function se(e){return e&&!Ie(e[1])?{[e[0]]:e[1].data}:M.actionData?0===Object.keys(M.actionData).length?null:M.actionData:void 0}async function ve(a,o,i){let{submission:l,fetcherSubmission:u,replace:c}=void 0===i?{}:i;o.response.headers.has("X-Remix-Revalidate")&&(z=!0);let d=o.response.headers.get("Location");h(d,"Expected a Location header on the redirect Response"),d=_e(d,new URL(a.url),p);let f=m(M.location,d,{_isRedirect:!0});if(r){let r=!1;if(o.response.headers.has("X-Remix-Reload-Document"))r=!0;else if(fe.test(d)){const n=e.history.createURL(d);r=n.origin!==t.location.origin||null==B(n.pathname,p)}if(r)return void(c?t.location.replace(d):t.location.assign(d))}A=null;let v=!0===c?n.Replace:n.Push,{formMethod:y,formAction:g,formEncType:b}=M.navigation;!l&&!u&&y&&g&&b&&(l=Ye(M.navigation));let w=l||u;if(ue.has(o.response.status)&&w&&We(w.formMethod))await ie(v,f,{submission:s({},w,{formAction:d}),preventScrollReset:j});else{let e=qe(f,l);await ie(v,f,{overrideNavigation:e,fetcherSubmission:u,preventScrollReset:j})}}async function we(e,t,r,n){try{let a=await async function(e,t,r,n,a,o,i,l){let u=n.reduce(((e,t)=>e.add(t.route.id)),new Set),c=new Set,d=await e({matches:a.map((e=>{let n=u.has(e.route.id);return s({},e,{shouldLoad:n,resolve:a=>(c.add(e.route.id),n?async function(e,t,r,n,a,o,i){let s,l,u=n=>{let a,s=new Promise(((e,t)=>a=t));l=()=>a(),t.signal.addEventListener("abort",l);let u,c=a=>"function"!=typeof n?Promise.reject(new Error('You cannot call the handler for a route which defines a boolean "'+e+'" [routeId: '+r.route.id+"]")):n({request:t,params:r.params,context:i},...void 0!==a?[a]:[]);return u=o?o((e=>c(e))):(async()=>{try{return{type:"data",result:await c()}}catch(e){return{type:"error",result:e}}})(),Promise.race([u,s])};try{let o=r.route[e];if(r.route.lazy)if(o){let e,[t]=await Promise.all([u(o).catch((t=>{e=t})),xe(r.route,a,n)]);if(void 0!==e)throw e;s=t}else{if(await xe(r.route,a,n),o=r.route[e],!o){if("action"===e){let e=new URL(t.url),n=e.pathname+e.search;throw Oe(405,{method:t.method,pathname:n,routeId:r.route.id})}return{type:b.data,result:void 0}}s=await u(o)}else{if(!o){let e=new URL(t.url);throw Oe(404,{pathname:e.pathname+e.search})}s=await u(o)}h(void 0!==s.result,"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){return{type:b.error,result:e}}finally{l&&t.signal.removeEventListener("abort",l)}return s}(t,r,e,o,i,a,l):Promise.resolve({type:b.data,result:void 0}))})})),request:r,params:a[0].params,context:l});return a.forEach((e=>h(c.has(e.route.id),'`match.resolve()` was not called for route id "'+e.route.id+'". You must call `match.resolve()` on every match passed to `dataStrategy` to ensure all routes are properly loaded.'))),d.filter(((e,t)=>u.has(a[t].route.id)))}(v,e,t,r,n,c,o);return await Promise.all(a.map(((e,a)=>{if(function(e){return He(e.result)&&le.has(e.result.status)}(e)){let o=e.result;return{type:b.redirect,response:Ce(o,t,r[a].route.id,n,p,g.v7_relativeSplatPath)}}return async function(e){let{result:t,type:r,status:n}=e;if(He(t)){let e;try{let r=t.headers.get("Content-Type");e=r&&/\bapplication\/json\b/.test(r)?null==t.body?null:await t.json():await t.text()}catch(e){return{type:b.error,error:e}}return r===b.error?{type:b.error,error:new re(t.status,t.statusText,e),statusCode:t.status,headers:t.headers}:{type:b.data,data:e,statusCode:t.status,headers:t.headers}}return r===b.error?{type:b.error,error:t,statusCode:ne(t)?t.status:n}:function(e){let t=e;return t&&"object"==typeof t&&"object"==typeof t.data&&"function"==typeof t.subscribe&&"function"==typeof t.cancel&&"function"==typeof t.resolveData}(t)?{type:b.deferred,deferredData:t,statusCode:null==(a=t.init)?void 0:a.status,headers:(null==(o=t.init)?void 0:o.headers)&&new Headers(t.init.headers)}:{type:b.data,data:t,statusCode:n};var a,o}(e)})))}catch(e){return r.map((()=>({type:b.error,error:e})))}}async function Se(t,r,n,a,o){let[i,...s]=await Promise.all([n.length?we("loader",o,n,r):[],...a.map((t=>t.matches&&t.match&&t.controller?we("loader",Le(e.history,t.path,t.controller.signal),[t.match],t.matches).then((e=>e[0])):Promise.resolve({type:b.error,error:Oe(404,{pathname:t.path})})))]);return await Promise.all([Ke(t,n,i,i.map((()=>o.signal)),!1,M.loaderData),Ke(t,a.map((e=>e.match)),s,a.map((e=>e.controller?e.controller.signal:null)),!0)]),{loaderResults:i,fetcherResults:s}}function Pe(){z=!0,H.push(...lt()),q.forEach(((e,t)=>{K.has(t)&&(W.push(t),Ze(t))}))}function ke(e,t,r){void 0===r&&(r={}),M.fetchers.set(e,t),ae({fetchers:new Map(M.fetchers)},{flushSync:!0===(r&&r.flushSync)})}function Ne(e,t,r,n){void 0===n&&(n={});let a=Ue(M.matches,t);Qe(e),ae({errors:{[a.route.id]:r},fetchers:new Map(M.fetchers)},{flushSync:!0===(n&&n.flushSync)})}function Je(e){return g.v7_fetcherPersist&&(X.set(e,(X.get(e)||0)+1),G.has(e)&&G.delete(e)),M.fetchers.get(e)||de}function Qe(e){let t=M.fetchers.get(e);!K.has(e)||t&&"loading"===t.state&&V.has(e)||Ze(e),q.delete(e),V.delete(e),Y.delete(e),G.delete(e),M.fetchers.delete(e)}function Ze(e){let t=K.get(e);h(t,"Expected fetch controller: "+e),t.abort(),K.delete(e)}function et(e){for(let t of e){let e=Ge(Je(t).data);M.fetchers.set(t,e)}}function tt(){let e=[],t=!1;for(let r of Y){let n=M.fetchers.get(r);h(n,"Expected fetcher: "+r),"loading"===n.state&&(Y.delete(r),e.push(r),t=!0)}return et(e),t}function rt(e){let t=[];for(let[r,n]of V)if(n<e){let e=M.fetchers.get(r);h(e,"Expected fetcher: "+r),"loading"===e.state&&(Ze(r),V.delete(r),t.push(r))}return et(t),t.length>0}function nt(e){M.blockers.delete(e),Z.delete(e)}function at(e,t){let r=M.blockers.get(e)||he;h("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);let n=new Map(M.blockers);n.set(e,t),ae({blockers:n})}function ot(e){let{currentLocation:t,nextLocation:r,historyAction:n}=e;if(0===Z.size)return;Z.size>1&&f(!1,"A router only supports one blocker at a time");let a=Array.from(Z.entries()),[o,i]=a[a.length-1],s=M.blockers.get(o);return s&&"proceeding"===s.state?void 0:i({currentLocation:t,nextLocation:r,historyAction:n})?o:void 0}function it(e){let t=Oe(404,{pathname:e}),r=i||d,{matches:n,route:a}=je(r);return lt(),{notFoundMatches:n,route:a,error:t}}function st(e,t){return{boundaryId:Ue(t.partialMatches).route.id,error:Oe(400,{type:"route-discovery",pathname:e,message:null!=t.error&&"message"in t.error?t.error:String(t.error)})}}function lt(e){let t=[];return Q.forEach(((r,n)=>{e&&!e(n)||(r.cancel(),t.push(n),Q.delete(n))})),t}function ut(e,t){return _&&_(e,t.map((e=>x(e,M.loaderData))))||e.key}function ct(e,t){if(C){let r=ut(e,t),n=C[r];if("number"==typeof n)return n}return null}function dt(e,t,r){if(y){if(!e)return{active:!0,matches:R(t,r,p,!0)||[]};{let n=e[e.length-1].route;if(n.path&&("*"===n.path||n.path.endsWith("/*")))return{active:!0,matches:R(t,r,p,!0)}}}return{active:!1,matches:null}}async function ht(e,t,r){let n=e,a=n.length>0?n[n.length-1].route:null;for(;;){let e=null==i,s=i||d;try{await Ee(y,t,n,s,c,o,ee,r)}catch(e){return{type:"error",error:e,partialMatches:n}}finally{e&&(d=[...d])}if(r.aborted)return{type:"aborted"};let l=E(s,t,p),u=!1;if(l){let e=l[l.length-1].route;if(e.index)return{type:"success",matches:l};if(e.path&&e.path.length>0){if("*"!==e.path)return{type:"success",matches:l};u=!0}}let h=R(s,t,p,!0);if(!h||n.map((e=>e.route.id)).join("-")===h.map((e=>e.route.id)).join("-"))return{type:"success",matches:u?l:null};if(n=h,a=n[n.length-1].route,"*"===a.path)return{type:"success",matches:n}}}return u={get basename(){return p},get future(){return g},get state(){return M},get routes(){return d},get window(){return t},initialize:function(){if(w=e.history.listen((t=>{let{action:r,location:n,delta:a}=t;if(te)return void(te=!1);f(0===Z.size||null!=a,"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=ot({currentLocation:M.location,nextLocation:n,historyAction:r});return o&&null!=a?(te=!0,e.history.go(-1*a),void at(o,{state:"blocked",location:n,proceed(){at(o,{state:"proceeding",proceed:void 0,reset:void 0,location:n}),e.history.go(a)},reset(){let e=new Map(M.blockers);e.set(o,he),ae({blockers:e})}})):ie(r,n)})),r){!function(e,t){try{let r=e.sessionStorage.getItem(me);if(r){let e=JSON.parse(r);for(let[r,n]of Object.entries(e||{}))n&&Array.isArray(n)&&t.set(r,new Set(n||[]))}}catch(e){}}(t,F);let e=()=>function(e,t){if(t.size>0){let r={};for(let[e,n]of t)r[e]=[...n];try{e.sessionStorage.setItem(me,JSON.stringify(r))}catch(e){f(!1,"Failed to save applied view transitions in sessionStorage ("+e+").")}}}(t,F);t.addEventListener("pagehide",e),N=()=>t.removeEventListener("pagehide",e)}return M.initialized||ie(n.Pop,M.location,{initialHydration:!0}),u},subscribe:function(e){return D.add(e),()=>D.delete(e)},enableScrollRestoration:function(e,t,r){if(C=e,L=t,_=r||null,!P&&M.navigation===ce){P=!0;let e=ct(M.location,M.matches);null!=e&&ae({restoreScrollPosition:e})}return()=>{C=null,L=null,_=null}},navigate:async function t(r,a){if("number"==typeof r)return void e.history.go(r);let o=ye(M.location,M.matches,p,g.v7_prependBasename,r,g.v7_relativeSplatPath,null==a?void 0:a.fromRouteId,null==a?void 0:a.relative),{path:i,submission:l,error:u}=ge(g.v7_normalizeFormMethod,!1,o,a),c=M.location,d=m(M.location,i,a&&a.state);d=s({},d,e.history.encodeLocation(d));let h=a&&null!=a.replace?a.replace:void 0,f=n.Push;!0===h?f=n.Replace:!1===h||null!=l&&We(l.formMethod)&&l.formAction===M.location.pathname+M.location.search&&(f=n.Replace);let v=a&&"preventScrollReset"in a?!0===a.preventScrollReset:void 0,y=!0===(a&&a.unstable_flushSync),b=ot({currentLocation:c,nextLocation:d,historyAction:f});if(!b)return await ie(f,d,{submission:l,pendingError:u,preventScrollReset:v,replace:a&&a.replace,enableViewTransition:a&&a.unstable_viewTransition,flushSync:y});at(b,{state:"blocked",location:d,proceed(){at(b,{state:"proceeding",proceed:void 0,reset:void 0,location:d}),t(r,a)},reset(){let e=new Map(M.blockers);e.set(b,he),ae({blockers:e})}})},fetch:function(t,r,n,o){if(a)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.");K.has(t)&&Ze(t);let s=!0===(o&&o.unstable_flushSync),l=i||d,u=ye(M.location,M.matches,p,g.v7_prependBasename,n,g.v7_relativeSplatPath,r,null==o?void 0:o.relative),c=E(l,u,p),f=dt(c,l,u);if(f.active&&f.matches&&(c=f.matches),!c)return void Ne(t,r,Oe(404,{pathname:u}),{flushSync:s});let{path:m,submission:v,error:y}=ge(g.v7_normalizeFormMethod,!0,u,o);if(y)return void Ne(t,r,y,{flushSync:s});let b=Ve(c,m);j=!0===(o&&o.preventScrollReset),v&&We(v.formMethod)?async function(t,r,n,a,o,s,l,u){function c(e){if(!e.route.action&&!e.route.lazy){let e=Oe(405,{method:u.formMethod,pathname:n,routeId:r});return Ne(t,r,e,{flushSync:l}),!0}return!1}if(Pe(),q.delete(t),!s&&c(a))return;let f=M.fetchers.get(t);ke(t,function(e,t){return{state:"submitting",formMethod:e.formMethod,formAction:e.formAction,formEncType:e.formEncType,formData:e.formData,json:e.json,text:e.text,data:t?t.data:void 0}}(u,f),{flushSync:l});let m=new AbortController,v=Le(e.history,n,m.signal,u);if(s){let e=await ht(o,n,v.signal);if("aborted"===e.type)return;if("error"===e.type){let{error:a}=st(n,e);return void Ne(t,r,a,{flushSync:l})}if(!e.matches)return void Ne(t,r,Oe(404,{pathname:n}),{flushSync:l});if(c(a=Ve(o=e.matches,n)))return}K.set(t,m);let y=$,b=(await we("action",v,[a],o))[0];if(v.signal.aborted)return void(K.get(t)===m&&K.delete(t));if(g.v7_fetcherPersist&&G.has(t)){if(ze(b)||Ie(b))return void ke(t,Ge(void 0))}else{if(ze(b))return K.delete(t),J>y?void ke(t,Ge(void 0)):(Y.add(t),ke(t,Xe(u)),ve(v,b,{fetcherSubmission:u}));if(Ie(b))return void Ne(t,r,b.error)}if(Be(b))throw Oe(400,{type:"defer-action"});let w=M.navigation.location||M.location,S=Le(e.history,w,m.signal),R=i||d,x="idle"!==M.navigation.state?E(R,M.navigation.location,p):M.matches;h(x,"Didn't find any matches after fetcher action");let D=++$;V.set(t,D);let C=Xe(u,b.data);M.fetchers.set(t,C);let[_,L]=be(e.history,M,x,u,w,!1,g.v7_skipActionErrorRevalidation,z,H,W,G,q,Y,R,p,[a.route.id,b]);L.filter((e=>e.key!==t)).forEach((e=>{let t=e.key,r=M.fetchers.get(t),n=Xe(void 0,r?r.data:void 0);M.fetchers.set(t,n),K.has(t)&&Ze(t),e.controller&&K.set(t,e.controller)})),ae({fetchers:new Map(M.fetchers)});let P=()=>L.forEach((e=>Ze(e.key)));m.signal.addEventListener("abort",P);let{loaderResults:k,fetcherResults:T}=await Se(M.matches,x,_,L,S);if(m.signal.aborted)return;m.signal.removeEventListener("abort",P),V.delete(t),K.delete(t),L.forEach((e=>K.delete(e.key)));let j=Fe([...k,...T]);if(j){if(j.idx>=_.length){let e=L[j.idx-_.length].key;Y.add(e)}return ve(S,j.result)}let{loaderData:O,errors:F}=Te(M,M.matches,_,k,void 0,L,T,Q);if(M.fetchers.has(t)){let e=Ge(b.data);M.fetchers.set(t,e)}rt(D),"loading"===M.navigation.state&&D>J?(h(U,"Expected pending action"),A&&A.abort(),oe(M.navigation.location,{matches:x,loaderData:O,errors:F,fetchers:new Map(M.fetchers)})):(ae({errors:F,loaderData:Ae(M.loaderData,O,x,F),fetchers:new Map(M.fetchers)}),z=!1)}(t,r,m,b,c,f.active,s,v):(q.set(t,{routeId:r,path:m}),async function(t,r,n,a,o,i,s,l){let u=M.fetchers.get(t);ke(t,Xe(l,u?u.data:void 0),{flushSync:s});let c=new AbortController,d=Le(e.history,n,c.signal);if(i){let e=await ht(o,n,d.signal);if("aborted"===e.type)return;if("error"===e.type){let{error:a}=st(n,e);return void Ne(t,r,a,{flushSync:s})}if(!e.matches)return void Ne(t,r,Oe(404,{pathname:n}),{flushSync:s});a=Ve(o=e.matches,n)}K.set(t,c);let f=$,p=(await we("loader",d,[a],o))[0];if(Be(p)&&(p=await $e(p,d.signal,!0)||p),K.get(t)===c&&K.delete(t),!d.signal.aborted){if(!G.has(t))return ze(p)?J>f?void ke(t,Ge(void 0)):(Y.add(t),void await ve(d,p)):void(Ie(p)?Ne(t,r,p.error):(h(!Be(p),"Unhandled fetcher deferred data"),ke(t,Ge(p.data))));ke(t,Ge(void 0))}}(t,r,m,b,c,f.active,s,v))},revalidate:function(){Pe(),ae({revalidation:"loading"}),"submitting"!==M.navigation.state&&("idle"!==M.navigation.state?ie(U||M.historyAction,M.navigation.location,{overrideNavigation:M.navigation}):ie(M.historyAction,M.location,{startUninterruptedRevalidation:!0}))},createHref:t=>e.history.createHref(t),encodeLocation:t=>e.history.encodeLocation(t),getFetcher:Je,deleteFetcher:function(e){if(g.v7_fetcherPersist){let t=(X.get(e)||0)-1;t<=0?(X.delete(e),G.add(e)):X.set(e,t)}else Qe(e);ae({fetchers:new Map(M.fetchers)})},dispose:function(){w&&w(),N&&N(),D.clear(),A&&A.abort(),M.fetchers.forEach(((e,t)=>Qe(t))),M.blockers.forEach(((e,t)=>nt(t)))},getBlocker:function(e,t){let r=M.blockers.get(e)||he;return Z.get(e)!==t&&Z.set(e,t),r},deleteBlocker:nt,patchRoutes:function(e,t){let r=null==i;Re(e,t,i||d,c,o),r&&(d=[...d],ae({}))},_internalFetchControllers:K,_internalActiveDeferreds:Q,_internalSetRoutes:function(e){c={},i=S(e,o,void 0,c)}},u}function ye(e,t,r,n,a,o,i,s){let l,u;if(i){l=[];for(let e of t)if(l.push(e),e.route.id===i){u=e;break}}else l=t,u=t[t.length-1];let c=K(a||".",W(l,o),B(e.pathname,r)||e.pathname,"path"===s);return null==a&&(c.search=e.search,c.hash=e.hash),null!=a&&""!==a&&"."!==a||!u||!u.route.index||Je(c.search)||(c.search=c.search?c.search.replace(/^\?/,"?index&"):"?index"),n&&"/"!==r&&(c.pathname="/"===c.pathname?r:$([r,c.pathname])),v(c)}function ge(e,t,r,n){if(!n||!function(e){return null!=e&&("formData"in e&&null!=e.formData||"body"in e&&void 0!==e.body)}(n))return{path:r};if(n.formMethod&&(a=n.formMethod,!se.has(a.toLowerCase())))return{path:r,error:Oe(405,{method:n.formMethod})};var a;let o,i,s=()=>({path:r,error:Oe(400,{type:"invalid-body"})}),l=n.formMethod||"get",u=e?l.toUpperCase():l.toLowerCase(),c=Ne(r);if(void 0!==n.body){if("text/plain"===n.formEncType){if(!We(u))return s();let e="string"==typeof n.body?n.body:n.body instanceof FormData||n.body instanceof URLSearchParams?Array.from(n.body.entries()).reduce(((e,t)=>{let[r,n]=t;return""+e+r+"="+n+"\n"}),""):String(n.body);return{path:r,submission:{formMethod:u,formAction:c,formEncType:n.formEncType,formData:void 0,json:void 0,text:e}}}if("application/json"===n.formEncType){if(!We(u))return s();try{let e="string"==typeof n.body?JSON.parse(n.body):n.body;return{path:r,submission:{formMethod:u,formAction:c,formEncType:n.formEncType,formData:void 0,json:e,text:void 0}}}catch(e){return s()}}}if(h("function"==typeof FormData,"FormData is not available in this environment"),n.formData)o=Pe(n.formData),i=n.formData;else if(n.body instanceof FormData)o=Pe(n.body),i=n.body;else if(n.body instanceof URLSearchParams)o=n.body,i=ke(o);else if(null==n.body)o=new URLSearchParams,i=new FormData;else try{o=new URLSearchParams(n.body),i=ke(o)}catch(e){return s()}let d={formMethod:u,formAction:c,formEncType:n&&n.formEncType||"application/x-www-form-urlencoded",formData:i,json:void 0,text:void 0};if(We(d.formMethod))return{path:r,submission:d};let f=y(r);return t&&f.search&&Je(f.search)&&o.append("index",""),f.search="?"+o,{path:v(f),submission:d}}function be(e,t,r,n,a,o,i,l,u,c,d,h,f,p,m,v){let y=v?Ie(v[1])?v[1].error:v[1].data:void 0,g=e.createURL(t.location),b=e.createURL(a),w=v&&Ie(v[1])?v[0]:void 0,S=w?function(e,t){let r=e;if(t){let n=e.findIndex((e=>e.route.id===t));n>=0&&(r=e.slice(0,n))}return r}(r,w):r,R=v?v[1].statusCode:void 0,x=i&&R&&R>=400,D=S.filter(((e,r)=>{let{route:a}=e;if(a.lazy)return!0;if(null==a.loader)return!1;if(o)return!("function"==typeof a.loader&&!a.loader.hydrate&&(void 0!==t.loaderData[a.id]||t.errors&&void 0!==t.errors[a.id]));if(function(e,t,r){let n=!t||r.route.id!==t.route.id,a=void 0===e[r.route.id];return n||a}(t.loaderData,t.matches[r],e)||u.some((t=>t===e.route.id)))return!0;let i=t.matches[r],c=e;return Se(e,s({currentUrl:g,currentParams:i.params,nextUrl:b,nextParams:c.params},n,{actionResult:y,actionStatus:R,defaultShouldRevalidate:!x&&(l||g.pathname+g.search===b.pathname+b.search||g.search!==b.search||we(i,c))}))})),C=[];return h.forEach(((e,a)=>{if(o||!r.some((t=>t.route.id===e.routeId))||d.has(a))return;let i=E(p,e.path,m);if(!i)return void C.push({key:a,routeId:e.routeId,path:e.path,matches:null,match:null,controller:null});let u=t.fetchers.get(a),h=Ve(i,e.path),v=!1;v=!f.has(a)&&(!!c.includes(a)||(u&&"idle"!==u.state&&void 0===u.data?l:Se(h,s({currentUrl:g,currentParams:t.matches[t.matches.length-1].params,nextUrl:b,nextParams:r[r.length-1].params},n,{actionResult:y,actionStatus:R,defaultShouldRevalidate:!x&&l})))),v&&C.push({key:a,routeId:e.routeId,path:e.path,matches:i,match:h,controller:new AbortController})})),[D,C]}function we(e,t){let r=e.route.path;return e.pathname!==t.pathname||null!=r&&r.endsWith("*")&&e.params["*"]!==t.params["*"]}function Se(e,t){if(e.route.shouldRevalidate){let r=e.route.shouldRevalidate(t);if("boolean"==typeof r)return r}return t.defaultShouldRevalidate}async function Ee(e,t,r,n,a,o,i,s){let l=[t,...r.map((e=>e.route.id))].join("-");try{let c=i.get(l);c||(c=e({path:t,matches:r,patch:(e,t)=>{s.aborted||Re(e,t,n,a,o)}}),i.set(l,c)),c&&"object"==typeof(u=c)&&null!=u&&"then"in u&&await c}finally{i.delete(l)}var u}function Re(e,t,r,n,a){if(e){var o;let r=n[e];h(r,"No route found to patch children into: routeId = "+e);let i=S(t,a,[e,"patch",String((null==(o=r.children)?void 0:o.length)||"0")],n);r.children?r.children.push(...i):r.children=i}else{let e=S(t,a,["patch",String(r.length||"0")],n);r.push(...e)}}async function xe(e,t,r){if(!e.lazy)return;let n=await e.lazy();if(!e.lazy)return;let a=r[e.id];h(a,"No route found in manifest");let o={};for(let e in n){let t=void 0!==a[e]&&"hasErrorBoundary"!==e;f(!t,'Route "'+a.id+'" has a static property "'+e+'" defined but its lazy function is also returning a value for this property. The lazy route property "'+e+'" will be ignored.'),t||w.has(e)||(o[e]=n[e])}Object.assign(a,o),Object.assign(a,s({},t(a),{lazy:void 0}))}function De(e){return Promise.all(e.matches.map((e=>e.resolve())))}function Ce(e,t,r,n,a,o){let i=e.headers.get("Location");if(h(i,"Redirects returned/thrown from loaders/actions must have a Location header"),!fe.test(i)){let s=n.slice(0,n.findIndex((e=>e.route.id===r))+1);i=ye(new URL(t.url),s,a,!0,i,o),e.headers.set("Location",i)}return e}function _e(e,t,r){if(fe.test(e)){let n=e,a=n.startsWith("//")?new URL(t.protocol+n):new URL(n),o=null!=B(a.pathname,r);if(a.origin===t.origin&&o)return a.pathname+a.search+a.hash}return e}function Le(e,t,r,n){let a=e.createURL(Ne(t)).toString(),o={signal:r};if(n&&We(n.formMethod)){let{formMethod:e,formEncType:t}=n;o.method=e.toUpperCase(),"application/json"===t?(o.headers=new Headers({"Content-Type":t}),o.body=JSON.stringify(n.json)):"text/plain"===t?o.body=n.text:"application/x-www-form-urlencoded"===t&&n.formData?o.body=Pe(n.formData):o.body=n.formData}return new Request(a,o)}function Pe(e){let t=new URLSearchParams;for(let[r,n]of e.entries())t.append(r,"string"==typeof n?n:n.name);return t}function ke(e){let t=new FormData;for(let[r,n]of e.entries())t.append(r,n);return t}function Te(e,t,r,n,a,o,i,l){let{loaderData:u,errors:c}=function(e,t,r,n,a,o){let i,s={},l=null,u=!1,c={},d=n&&Ie(n[1])?n[1].error:void 0;return r.forEach(((r,n)=>{let f=t[n].route.id;if(h(!ze(r),"Cannot handle redirect results in processLoaderData"),Ie(r)){let t=r.error;if(void 0!==d&&(t=d,d=void 0),l=l||{},o)l[f]=t;else{let r=Ue(e,f);null==l[r.route.id]&&(l[r.route.id]=t)}s[f]=void 0,u||(u=!0,i=ne(r.error)?r.error.status:500),r.headers&&(c[f]=r.headers)}else Be(r)?(a.set(f,r.deferredData),s[f]=r.deferredData.data,null==r.statusCode||200===r.statusCode||u||(i=r.statusCode),r.headers&&(c[f]=r.headers)):(s[f]=r.data,r.statusCode&&200!==r.statusCode&&!u&&(i=r.statusCode),r.headers&&(c[f]=r.headers))})),void 0!==d&&n&&(l={[n[0]]:d},s[n[0]]=void 0),{loaderData:s,errors:l,statusCode:i||200,loaderHeaders:c}}(t,r,n,a,l,!1);for(let t=0;t<o.length;t++){let{key:r,match:n,controller:a}=o[t];h(void 0!==i&&void 0!==i[t],"Did not find corresponding fetcher result");let l=i[t];if(!a||!a.signal.aborted)if(Ie(l)){let t=Ue(e.matches,null==n?void 0:n.route.id);c&&c[t.route.id]||(c=s({},c,{[t.route.id]:l.error})),e.fetchers.delete(r)}else if(ze(l))h(!1,"Unhandled fetcher revalidation redirect");else if(Be(l))h(!1,"Unhandled fetcher deferred data");else{let t=Ge(l.data);e.fetchers.set(r,t)}}return{loaderData:u,errors:c}}function Ae(e,t,r,n){let a=s({},t);for(let o of r){let r=o.route.id;if(t.hasOwnProperty(r)?void 0!==t[r]&&(a[r]=t[r]):void 0!==e[r]&&o.route.loader&&(a[r]=e[r]),n&&n.hasOwnProperty(r))break}return a}function Me(e){return e?Ie(e[1])?{actionData:{}}:{actionData:{[e[0]]:e[1].data}}:{}}function Ue(e,t){return(t?e.slice(0,e.findIndex((e=>e.route.id===t))+1):[...e]).reverse().find((e=>!0===e.route.hasErrorBoundary))||e[0]}function je(e){let t=1===e.length?e[0]:e.find((e=>e.index||!e.path||"/"===e.path))||{id:"__shim-error-route__"};return{matches:[{params:{},pathname:"",pathnameBase:"",route:t}],route:t}}function Oe(e,t){let{pathname:r,routeId:n,method:a,type:o,message:i}=void 0===t?{}:t,s="Unknown Server Error",l="Unknown @remix-run/router error";return 400===e?(s="Bad Request","route-discovery"===o?l='Unable to match URL "'+r+'" - the `unstable_patchRoutesOnMiss()` function threw the following error:\n'+i:a&&r&&n?l="You made a "+a+' request to "'+r+'" but did not provide a `loader` for route "'+n+'", so there is no way to handle the request.':"defer-action"===o?l="defer() is not supported in actions":"invalid-body"===o&&(l="Unable to encode submission body")):403===e?(s="Forbidden",l='Route "'+n+'" does not match URL "'+r+'"'):404===e?(s="Not Found",l='No route matches URL "'+r+'"'):405===e&&(s="Method Not Allowed",a&&r&&n?l="You made a "+a.toUpperCase()+' request to "'+r+'" but did not provide an `action` for route "'+n+'", so there is no way to handle the request.':a&&(l='Invalid request method "'+a.toUpperCase()+'"')),new re(e||500,s,new Error(l),!0)}function Fe(e){for(let t=e.length-1;t>=0;t--){let r=e[t];if(ze(r))return{result:r,idx:t}}}function Ne(e){return v(s({},"string"==typeof e?y(e):e,{hash:""}))}function Be(e){return e.type===b.deferred}function Ie(e){return e.type===b.error}function ze(e){return(e&&e.type)===b.redirect}function He(e){return null!=e&&"number"==typeof e.status&&"string"==typeof e.statusText&&"object"==typeof e.headers&&void 0!==e.body}function We(e){return oe.has(e.toLowerCase())}async function Ke(e,t,r,n,a,o){for(let i=0;i<r.length;i++){let s=r[i],l=t[i];if(!l)continue;let u=e.find((e=>e.route.id===l.route.id)),c=null!=u&&!we(u,l)&&void 0!==(o&&o[l.route.id]);if(Be(s)&&(a||c)){let e=n[i];h(e,"Expected an AbortSignal for revalidating fetcher deferred result"),await $e(s,e,a).then((e=>{e&&(r[i]=e||r[i])}))}}}async function $e(e,t,r){if(void 0===r&&(r=!1),!await e.deferredData.resolveData(t)){if(r)try{return{type:b.data,data:e.deferredData.unwrappedData}}catch(e){return{type:b.error,error:e}}return{type:b.data,data:e.deferredData.data}}}function Je(e){return new URLSearchParams(e).getAll("index").some((e=>""===e))}function Ve(e,t){let r="string"==typeof t?y(t).search:t.search;if(e[e.length-1].route.index&&Je(r||""))return e[e.length-1];let n=H(e);return n[n.length-1]}function Ye(e){let{formMethod:t,formAction:r,formEncType:n,text:a,formData:o,json:i}=e;if(t&&r&&n)return null!=a?{formMethod:t,formAction:r,formEncType:n,formData:void 0,json:void 0,text:a}:null!=o?{formMethod:t,formAction:r,formEncType:n,formData:o,json:void 0,text:void 0}:void 0!==i?{formMethod:t,formAction:r,formEncType:n,formData:void 0,json:i,text:void 0}:void 0}function qe(e,t){return t?{state:"loading",location:e,formMethod:t.formMethod,formAction:t.formAction,formEncType:t.formEncType,formData:t.formData,json:t.json,text:t.text}:{state:"loading",location:e,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0}}function Xe(e,t){return e?{state:"loading",formMethod:e.formMethod,formAction:e.formAction,formEncType:e.formEncType,formData:e.formData,json:e.json,text:e.text,data:t}:{state:"loading",formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0,data:t}}function Ge(e){return{state:"idle",formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0,data:e}}function Qe(){return Qe=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},Qe.apply(this,arguments)}Symbol("deferred");const Ze=a.createContext(null),et=a.createContext(null),tt=a.createContext(null),rt=a.createContext(null),nt=a.createContext(null),at=a.createContext({outlet:null,matches:[],isDataRoute:!1}),ot=a.createContext(null);function it(e,t){let{relative:r}=void 0===t?{}:t;st()||h(!1);let{basename:n,navigator:o}=a.useContext(rt),{hash:i,pathname:s,search:l}=yt(e,{relative:r}),u=s;return"/"!==n&&(u="/"===s?n:$([n,s])),o.createHref({pathname:u,search:l,hash:i})}function st(){return null!=a.useContext(nt)}function lt(){return st()||h(!1),a.useContext(nt).location}function ut(){return a.useContext(nt).navigationType}function ct(e){st()||h(!1);let{pathname:t}=lt();return a.useMemo((()=>F(e,N(t))),[t,e])}function dt(e){a.useContext(rt).static||a.useLayoutEffect(e)}function ht(){let{isDataRoute:e}=a.useContext(at);return e?function(){let{router:e}=_t(Dt.UseNavigateStable),t=Pt(Ct.UseNavigateStable),r=a.useRef(!1);return dt((()=>{r.current=!0})),a.useCallback((function(n,a){void 0===a&&(a={}),r.current&&("number"==typeof n?e.navigate(n):e.navigate(n,Qe({fromRouteId:t},a)))}),[e,t])}():function(){st()||h(!1);let e=a.useContext(Ze),{basename:t,future:r,navigator:n}=a.useContext(rt),{matches:o}=a.useContext(at),{pathname:i}=lt(),s=JSON.stringify(W(o,r.v7_relativeSplatPath)),l=a.useRef(!1);return dt((()=>{l.current=!0})),a.useCallback((function(r,a){if(void 0===a&&(a={}),!l.current)return;if("number"==typeof r)return void n.go(r);let o=K(r,JSON.parse(s),i,"path"===a.relative);null==e&&"/"!==t&&(o.pathname="/"===o.pathname?t:$([t,o.pathname])),(a.replace?n.replace:n.push)(o,a.state,a)}),[t,n,s,i,e])}()}const ft=a.createContext(null);function pt(){return a.useContext(ft)}function mt(e){let t=a.useContext(at).outlet;return t?a.createElement(ft.Provider,{value:e},t):t}function vt(){let{matches:e}=a.useContext(at),t=e[e.length-1];return t?t.params:{}}function yt(e,t){let{relative:r}=void 0===t?{}:t,{future:n}=a.useContext(rt),{matches:o}=a.useContext(at),{pathname:i}=lt(),s=JSON.stringify(W(o,n.v7_relativeSplatPath));return a.useMemo((()=>K(e,JSON.parse(s),i,"path"===r)),[e,s,i,r])}function gt(e,t){return bt(e,t)}function bt(e,t,r,o){st()||h(!1);let{navigator:i}=a.useContext(rt),{matches:s}=a.useContext(at),l=s[s.length-1],u=l?l.params:{},c=(l&&l.pathname,l?l.pathnameBase:"/");l&&l.route;let d,f=lt();if(t){var p;let e="string"==typeof t?y(t):t;"/"===c||(null==(p=e.pathname)?void 0:p.startsWith(c))||h(!1),d=e}else d=f;let m=d.pathname||"/",v=m;if("/"!==c){let e=c.replace(/^\//,"").split("/");v="/"+m.replace(/^\//,"").split("/").slice(e.length).join("/")}let g=E(e,{pathname:v}),b=xt(g&&g.map((e=>Object.assign({},e,{params:Object.assign({},u,e.params),pathname:$([c,i.encodeLocation?i.encodeLocation(e.pathname).pathname:e.pathname]),pathnameBase:"/"===e.pathnameBase?c:$([c,i.encodeLocation?i.encodeLocation(e.pathnameBase).pathname:e.pathnameBase])}))),s,r,o);return t&&b?a.createElement(nt.Provider,{value:{location:Qe({pathname:"/",search:"",hash:"",state:null,key:"default"},d),navigationType:n.Pop}},b):b}function wt(){let e=Ft(),t=ne(e)?e.status+" "+e.statusText:e instanceof Error?e.message:JSON.stringify(e),r=e instanceof Error?e.stack:null,n={padding:"0.5rem",backgroundColor:"rgba(200,200,200, 0.5)"};return a.createElement(a.Fragment,null,a.createElement("h2",null,"Unexpected Application Error!"),a.createElement("h3",{style:{fontStyle:"italic"}},t),r?a.createElement("pre",{style:n},r):null,null)}const St=a.createElement(wt,null);class Et extends a.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){console.error("React Router caught the following error during render",e,t)}render(){return void 0!==this.state.error?a.createElement(at.Provider,{value:this.props.routeContext},a.createElement(ot.Provider,{value:this.state.error,children:this.props.component})):this.props.children}}function Rt(e){let{routeContext:t,match:r,children:n}=e,o=a.useContext(Ze);return o&&o.static&&o.staticContext&&(r.route.errorElement||r.route.ErrorBoundary)&&(o.staticContext._deepestRenderedBoundaryId=r.route.id),a.createElement(at.Provider,{value:t},n)}function xt(e,t,r,n){var o;if(void 0===t&&(t=[]),void 0===r&&(r=null),void 0===n&&(n=null),null==e){var i;if(null==(i=r)||!i.errors)return null;e=r.matches}let s=e,l=null==(o=r)?void 0:o.errors;if(null!=l){let e=s.findIndex((e=>e.route.id&&void 0!==(null==l?void 0:l[e.route.id])));e>=0||h(!1),s=s.slice(0,Math.min(s.length,e+1))}let u=!1,c=-1;if(r&&n&&n.v7_partialHydration)for(let e=0;e<s.length;e++){let t=s[e];if((t.route.HydrateFallback||t.route.hydrateFallbackElement)&&(c=e),t.route.id){let{loaderData:e,errors:n}=r,a=t.route.loader&&void 0===e[t.route.id]&&(!n||void 0===n[t.route.id]);if(t.route.lazy||a){u=!0,s=c>=0?s.slice(0,c+1):[s[0]];break}}}return s.reduceRight(((e,n,o)=>{let i,d=!1,h=null,f=null;var p;r&&(i=l&&n.route.id?l[n.route.id]:void 0,h=n.route.errorElement||St,u&&(c<0&&0===o?(Ht[p="route-fallback"]||(Ht[p]=!0),d=!0,f=null):c===o&&(d=!0,f=n.route.hydrateFallbackElement||null)));let m=t.concat(s.slice(0,o+1)),v=()=>{let t;return t=i?h:d?f:n.route.Component?a.createElement(n.route.Component,null):n.route.element?n.route.element:e,a.createElement(Rt,{match:n,routeContext:{outlet:e,matches:m,isDataRoute:null!=r},children:t})};return r&&(n.route.ErrorBoundary||n.route.errorElement||0===o)?a.createElement(Et,{location:r.location,revalidation:r.revalidation,component:h,error:i,children:v(),routeContext:{outlet:null,matches:m,isDataRoute:!0}}):v()}),null)}var Dt=function(e){return e.UseBlocker="useBlocker",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e}(Dt||{}),Ct=function(e){return e.UseBlocker="useBlocker",e.UseLoaderData="useLoaderData",e.UseActionData="useActionData",e.UseRouteError="useRouteError",e.UseNavigation="useNavigation",e.UseRouteLoaderData="useRouteLoaderData",e.UseMatches="useMatches",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e.UseRouteId="useRouteId",e}(Ct||{});function _t(e){let t=a.useContext(Ze);return t||h(!1),t}function Lt(e){let t=a.useContext(et);return t||h(!1),t}function Pt(e){let t=function(){let e=a.useContext(at);return e||h(!1),e}(),r=t.matches[t.matches.length-1];return r.route.id||h(!1),r.route.id}function kt(){return Pt(Ct.UseRouteId)}function Tt(){return Lt(Ct.UseNavigation).navigation}function At(){let e=_t(Dt.UseRevalidator),t=Lt(Ct.UseRevalidator);return a.useMemo((()=>({revalidate:e.router.revalidate,state:t.revalidation})),[e.router.revalidate,t.revalidation])}function Mt(){let{matches:e,loaderData:t}=Lt(Ct.UseMatches);return a.useMemo((()=>e.map((e=>x(e,t)))),[e,t])}function Ut(){let e=Lt(Ct.UseLoaderData),t=Pt(Ct.UseLoaderData);if(!e.errors||null==e.errors[t])return e.loaderData[t];console.error("You cannot `useLoaderData` in an errorElement (routeId: "+t+")")}function jt(e){return Lt(Ct.UseRouteLoaderData).loaderData[e]}function Ot(){let e=Lt(Ct.UseActionData),t=Pt(Ct.UseLoaderData);return e.actionData?e.actionData[t]:void 0}function Ft(){var e;let t=a.useContext(ot),r=Lt(Ct.UseRouteError),n=Pt(Ct.UseRouteError);return void 0!==t?t:null==(e=r.errors)?void 0:e[n]}function Nt(){let e=a.useContext(tt);return null==e?void 0:e._data}function Bt(){let e=a.useContext(tt);return null==e?void 0:e._error}let It=0;function zt(e){let{router:t,basename:r}=_t(Dt.UseBlocker),n=Lt(Ct.UseBlocker),[o,i]=a.useState(""),s=a.useCallback((t=>{if("function"!=typeof e)return!!e;if("/"===r)return e(t);let{currentLocation:n,nextLocation:a,historyAction:o}=t;return e({currentLocation:Qe({},n,{pathname:B(n.pathname,r)||n.pathname}),nextLocation:Qe({},a,{pathname:B(a.pathname,r)||a.pathname}),historyAction:o})}),[r,e]);return a.useEffect((()=>{let e=String(++It);return i(e),()=>t.deleteBlocker(e)}),[t]),a.useEffect((()=>{""!==o&&t.getBlocker(o,s)}),[t,o,s]),o&&n.blockers.has(o)?n.blockers.get(o):he}const Ht={},Wt=a.startTransition;function Kt(e){let{basename:t,children:r,initialEntries:n,initialIndex:o,future:i}=e,s=a.useRef();null==s.current&&(s.current=u({initialEntries:n,initialIndex:o,v5Compat:!0}));let l=s.current,[c,d]=a.useState({action:l.action,location:l.location}),{v7_startTransition:h}=i||{},f=a.useCallback((e=>{h&&Wt?Wt((()=>d(e))):d(e)}),[d,h]);return a.useLayoutEffect((()=>l.listen(f)),[l,f]),a.createElement(Yt,{basename:t,children:r,location:c.location,navigationType:c.action,navigator:l,future:i})}function $t(e){let{to:t,replace:r,state:n,relative:o}=e;st()||h(!1);let{future:i,static:s}=a.useContext(rt),{matches:l}=a.useContext(at),{pathname:u}=lt(),c=ht(),d=K(t,W(l,i.v7_relativeSplatPath),u,"path"===o),f=JSON.stringify(d);return a.useEffect((()=>c(JSON.parse(f),{replace:r,state:n,relative:o})),[c,f,o,r,n]),null}function Jt(e){return mt(e.context)}function Vt(e){h(!1)}function Yt(e){let{basename:t="/",children:r=null,location:o,navigationType:i=n.Pop,navigator:s,static:l=!1,future:u}=e;st()&&h(!1);let c=t.replace(/^\/*/,"/"),d=a.useMemo((()=>({basename:c,navigator:s,static:l,future:Qe({v7_relativeSplatPath:!1},u)})),[c,u,s,l]);"string"==typeof o&&(o=y(o));let{pathname:f="/",search:p="",hash:m="",state:v=null,key:g="default"}=o,b=a.useMemo((()=>{let e=B(f,c);return null==e?null:{location:{pathname:e,search:p,hash:m,state:v,key:g},navigationType:i}}),[c,f,p,m,v,g,i]);return null==b?null:a.createElement(rt.Provider,{value:d},a.createElement(nt.Provider,{children:r,value:b}))}function qt(e){let{children:t,location:r}=e;return gt(tr(t),r)}function Xt(e){let{children:t,errorElement:r,resolve:n}=e;return a.createElement(Zt,{resolve:n,errorElement:r},a.createElement(er,null,t))}var Gt=function(e){return e[e.pending=0]="pending",e[e.success=1]="success",e[e.error=2]="error",e}(Gt||{});const Qt=new Promise((()=>{}));class Zt extends a.Component{constructor(e){super(e),this.state={error:null}}static getDerivedStateFromError(e){return{error:e}}componentDidCatch(e,t){console.error("<Await> caught the following error during render",e,t)}render(){let{children:e,errorElement:t,resolve:r}=this.props,n=null,o=Gt.pending;if(r instanceof Promise)if(this.state.error){o=Gt.error;let e=this.state.error;n=Promise.reject().catch((()=>{})),Object.defineProperty(n,"_tracked",{get:()=>!0}),Object.defineProperty(n,"_error",{get:()=>e})}else r._tracked?(n=r,o="_error"in n?Gt.error:"_data"in n?Gt.success:Gt.pending):(o=Gt.pending,Object.defineProperty(r,"_tracked",{get:()=>!0}),n=r.then((e=>Object.defineProperty(r,"_data",{get:()=>e})),(e=>Object.defineProperty(r,"_error",{get:()=>e}))));else o=Gt.success,n=Promise.resolve(),Object.defineProperty(n,"_tracked",{get:()=>!0}),Object.defineProperty(n,"_data",{get:()=>r});if(o===Gt.error&&n._error instanceof X)throw Qt;if(o===Gt.error&&!t)throw n._error;if(o===Gt.error)return a.createElement(tt.Provider,{value:n,children:t});if(o===Gt.success)return a.createElement(tt.Provider,{value:n,children:e});throw n}}function er(e){let{children:t}=e,r=Nt(),n="function"==typeof t?t(r):t;return a.createElement(a.Fragment,null,n)}function tr(e,t){void 0===t&&(t=[]);let r=[];return a.Children.forEach(e,((e,n)=>{if(!a.isValidElement(e))return;let o=[...t,n];if(e.type===a.Fragment)return void r.push.apply(r,tr(e.props.children,o));e.type!==Vt&&h(!1),e.props.index&&e.props.children&&h(!1);let i={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,errorElement:e.props.errorElement,ErrorBoundary:e.props.ErrorBoundary,hasErrorBoundary:null!=e.props.ErrorBoundary||null!=e.props.errorElement,shouldRevalidate:e.props.shouldRevalidate,handle:e.props.handle,lazy:e.props.lazy};e.props.children&&(i.children=tr(e.props.children,o)),r.push(i)})),r}function rr(e){return xt(e)}function nr(e){let t={hasErrorBoundary:null!=e.ErrorBoundary||null!=e.errorElement};return e.Component&&Object.assign(t,{element:a.createElement(e.Component),Component:void 0}),e.HydrateFallback&&Object.assign(t,{hydrateFallbackElement:a.createElement(e.HydrateFallback),HydrateFallback:void 0}),e.ErrorBoundary&&Object.assign(t,{errorElement:a.createElement(e.ErrorBoundary),ErrorBoundary:void 0}),t}function ar(e,t){return ve({basename:null==t?void 0:t.basename,future:Qe({},null==t?void 0:t.future,{v7_prependBasename:!0}),history:u({initialEntries:null==t?void 0:t.initialEntries,initialIndex:null==t?void 0:t.initialIndex}),hydrationData:null==t?void 0:t.hydrationData,routes:e,mapRouteProperties:nr,unstable_dataStrategy:null==t?void 0:t.unstable_dataStrategy,unstable_patchRoutesOnMiss:null==t?void 0:t.unstable_patchRoutesOnMiss}).initialize()}function or(){return or=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},or.apply(this,arguments)}function ir(e,t){if(null==e)return{};var r,n,a={},o=Object.keys(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||(a[r]=e[r]);return a}const sr="get",lr="application/x-www-form-urlencoded";function ur(e){return null!=e&&"string"==typeof e.tagName}function cr(e){return void 0===e&&(e=""),new URLSearchParams("string"==typeof e||Array.isArray(e)||e instanceof URLSearchParams?e:Object.keys(e).reduce(((t,r)=>{let n=e[r];return t.concat(Array.isArray(n)?n.map((e=>[r,e])):[[r,n]])}),[]))}let dr=null;const hr=new Set(["application/x-www-form-urlencoded","multipart/form-data","text/plain"]);function fr(e){return null==e||hr.has(e)?e:null}const pr=["onClick","relative","reloadDocument","replace","state","target","to","preventScrollReset","unstable_viewTransition"],mr=["aria-current","caseSensitive","className","end","style","to","unstable_viewTransition","children"],vr=["fetcherKey","navigate","reloadDocument","replace","state","method","action","onSubmit","relative","preventScrollReset","unstable_viewTransition"];try{window.__reactRouterVersion="6"}catch(e){}function yr(e,t){return ve({basename:null==t?void 0:t.basename,future:or({},null==t?void 0:t.future,{v7_prependBasename:!0}),history:c({window:null==t?void 0:t.window}),hydrationData:(null==t?void 0:t.hydrationData)||br(),routes:e,mapRouteProperties:nr,unstable_dataStrategy:null==t?void 0:t.unstable_dataStrategy,unstable_patchRoutesOnMiss:null==t?void 0:t.unstable_patchRoutesOnMiss,window:null==t?void 0:t.window}).initialize()}function gr(e,t){return ve({basename:null==t?void 0:t.basename,future:or({},null==t?void 0:t.future,{v7_prependBasename:!0}),history:d({window:null==t?void 0:t.window}),hydrationData:(null==t?void 0:t.hydrationData)||br(),routes:e,mapRouteProperties:nr,unstable_dataStrategy:null==t?void 0:t.unstable_dataStrategy,unstable_patchRoutesOnMiss:null==t?void 0:t.unstable_patchRoutesOnMiss,window:null==t?void 0:t.window}).initialize()}function br(){var e;let t=null==(e=window)?void 0:e.__staticRouterHydrationData;return t&&t.errors&&(t=or({},t,{errors:wr(t.errors)})),t}function wr(e){if(!e)return null;let t=Object.entries(e),r={};for(let[e,n]of t)if(n&&"RouteErrorResponse"===n.__type)r[e]=new re(n.status,n.statusText,n.data,!0===n.internal);else if(n&&"Error"===n.__type){if(n.__subType){let t=window[n.__subType];if("function"==typeof t)try{let a=new t(n.message);a.stack="",r[e]=a}catch(e){}}if(null==r[e]){let t=new Error(n.message);t.stack="",r[e]=t}}else r[e]=n;return r}const Sr=a.createContext({isTransitioning:!1}),Er=a.createContext(new Map),Rr=a.startTransition,xr=i.flushSync,Dr=a.useId;function Cr(e){xr?xr(e):e()}class _r{constructor(){this.status="pending",this.promise=new Promise(((e,t)=>{this.resolve=t=>{"pending"===this.status&&(this.status="resolved",e(t))},this.reject=e=>{"pending"===this.status&&(this.status="rejected",t(e))}}))}}function Lr(e){let{fallbackElement:t,router:r,future:n}=e,[o,i]=a.useState(r.state),[s,l]=a.useState(),[u,c]=a.useState({isTransitioning:!1}),[d,h]=a.useState(),[f,p]=a.useState(),[m,v]=a.useState(),y=a.useRef(new Map),{v7_startTransition:g}=n||{},b=a.useCallback((e=>{g?function(e){Rr?Rr(e):e()}(e):e()}),[g]),w=a.useCallback(((e,t)=>{let{deletedFetchers:n,unstable_flushSync:a,unstable_viewTransitionOpts:o}=t;n.forEach((e=>y.current.delete(e))),e.fetchers.forEach(((e,t)=>{void 0!==e.data&&y.current.set(t,e.data)}));let s=null==r.window||null==r.window.document||"function"!=typeof r.window.document.startViewTransition;if(o&&!s){if(a){Cr((()=>{f&&(d&&d.resolve(),f.skipTransition()),c({isTransitioning:!0,flushSync:!0,currentLocation:o.currentLocation,nextLocation:o.nextLocation})}));let t=r.window.document.startViewTransition((()=>{Cr((()=>i(e)))}));return t.finished.finally((()=>{Cr((()=>{h(void 0),p(void 0),l(void 0),c({isTransitioning:!1})}))})),void Cr((()=>p(t)))}f?(d&&d.resolve(),f.skipTransition(),v({state:e,currentLocation:o.currentLocation,nextLocation:o.nextLocation})):(l(e),c({isTransitioning:!0,flushSync:!1,currentLocation:o.currentLocation,nextLocation:o.nextLocation}))}else a?Cr((()=>i(e))):b((()=>i(e)))}),[r.window,f,d,y,b]);a.useLayoutEffect((()=>r.subscribe(w)),[r,w]),a.useEffect((()=>{u.isTransitioning&&!u.flushSync&&h(new _r)}),[u]),a.useEffect((()=>{if(d&&s&&r.window){let e=s,t=d.promise,n=r.window.document.startViewTransition((async()=>{b((()=>i(e))),await t}));n.finished.finally((()=>{h(void 0),p(void 0),l(void 0),c({isTransitioning:!1})})),p(n)}}),[b,s,d,r.window]),a.useEffect((()=>{d&&s&&o.location.key===s.location.key&&d.resolve()}),[d,f,o.location,s]),a.useEffect((()=>{!u.isTransitioning&&m&&(l(m.state),c({isTransitioning:!0,flushSync:!1,currentLocation:m.currentLocation,nextLocation:m.nextLocation}),v(void 0))}),[u.isTransitioning,m]),a.useEffect((()=>{}),[]);let S=a.useMemo((()=>({createHref:r.createHref,encodeLocation:r.encodeLocation,go:e=>r.navigate(e),push:(e,t,n)=>r.navigate(e,{state:t,preventScrollReset:null==n?void 0:n.preventScrollReset}),replace:(e,t,n)=>r.navigate(e,{replace:!0,state:t,preventScrollReset:null==n?void 0:n.preventScrollReset})})),[r]),E=r.basename||"/",R=a.useMemo((()=>({router:r,navigator:S,static:!1,basename:E})),[r,S,E]),x=a.useMemo((()=>({v7_relativeSplatPath:r.future.v7_relativeSplatPath})),[r.future.v7_relativeSplatPath]);return a.createElement(a.Fragment,null,a.createElement(Ze.Provider,{value:R},a.createElement(et.Provider,{value:o},a.createElement(Er.Provider,{value:y.current},a.createElement(Sr.Provider,{value:u},a.createElement(Yt,{basename:E,location:o.location,navigationType:o.historyAction,navigator:S,future:x},o.initialized||r.future.v7_partialHydration?a.createElement(Pr,{routes:r.routes,future:r.future,state:o}):t))))),null)}const Pr=a.memo(kr);function kr(e){let{routes:t,future:r,state:n}=e;return bt(t,void 0,n,r)}function Tr(e){let{basename:t,children:r,future:n,window:o}=e,i=a.useRef();null==i.current&&(i.current=c({window:o,v5Compat:!0}));let s=i.current,[l,u]=a.useState({action:s.action,location:s.location}),{v7_startTransition:d}=n||{},h=a.useCallback((e=>{d&&Rr?Rr((()=>u(e))):u(e)}),[u,d]);return a.useLayoutEffect((()=>s.listen(h)),[s,h]),a.createElement(Yt,{basename:t,children:r,location:l.location,navigationType:l.action,navigator:s,future:n})}function Ar(e){let{basename:t,children:r,future:n,window:o}=e,i=a.useRef();null==i.current&&(i.current=d({window:o,v5Compat:!0}));let s=i.current,[l,u]=a.useState({action:s.action,location:s.location}),{v7_startTransition:c}=n||{},h=a.useCallback((e=>{c&&Rr?Rr((()=>u(e))):u(e)}),[u,c]);return a.useLayoutEffect((()=>s.listen(h)),[s,h]),a.createElement(Yt,{basename:t,children:r,location:l.location,navigationType:l.action,navigator:s,future:n})}function Mr(e){let{basename:t,children:r,future:n,history:o}=e,[i,s]=a.useState({action:o.action,location:o.location}),{v7_startTransition:l}=n||{},u=a.useCallback((e=>{l&&Rr?Rr((()=>s(e))):s(e)}),[s,l]);return a.useLayoutEffect((()=>o.listen(u)),[o,u]),a.createElement(Yt,{basename:t,children:r,location:i.location,navigationType:i.action,navigator:o,future:n})}const Ur="undefined"!=typeof window&&void 0!==window.document&&void 0!==window.document.createElement,jr=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,Or=a.forwardRef((function(e,t){let r,{onClick:n,relative:o,reloadDocument:i,replace:s,state:l,target:u,to:c,preventScrollReset:d,unstable_viewTransition:h}=e,f=ir(e,pr),{basename:p}=a.useContext(rt),m=!1;if("string"==typeof c&&jr.test(c)&&(r=c,Ur))try{let e=new URL(window.location.href),t=c.startsWith("//")?new URL(e.protocol+c):new URL(c),r=B(t.pathname,p);t.origin===e.origin&&null!=r?c=r+t.search+t.hash:m=!0}catch(e){}let v=it(c,{relative:o}),y=Kr(c,{replace:s,state:l,target:u,preventScrollReset:d,relative:o,unstable_viewTransition:h});return a.createElement("a",or({},f,{href:r||v,onClick:m||i?n:function(e){n&&n(e),e.defaultPrevented||y(e)},ref:t,target:u}))})),Fr=a.forwardRef((function(e,t){let{"aria-current":r="page",caseSensitive:n=!1,className:o="",end:i=!1,style:s,to:l,unstable_viewTransition:u,children:c}=e,d=ir(e,mr),h=yt(l,{relative:d.relative}),f=lt(),p=a.useContext(et),{navigator:m,basename:v}=a.useContext(rt),y=null!=p&&nn(h)&&!0===u,g=m.encodeLocation?m.encodeLocation(h).pathname:h.pathname,b=f.pathname,w=p&&p.navigation&&p.navigation.location?p.navigation.location.pathname:null;n||(b=b.toLowerCase(),w=w?w.toLowerCase():null,g=g.toLowerCase()),w&&v&&(w=B(w,v)||w);const S="/"!==g&&g.endsWith("/")?g.length-1:g.length;let E,R=b===g||!i&&b.startsWith(g)&&"/"===b.charAt(S),x=null!=w&&(w===g||!i&&w.startsWith(g)&&"/"===w.charAt(g.length)),D={isActive:R,isPending:x,isTransitioning:y},C=R?r:void 0;E="function"==typeof o?o(D):[o,R?"active":null,x?"pending":null,y?"transitioning":null].filter(Boolean).join(" ");let _="function"==typeof s?s(D):s;return a.createElement(Or,or({},d,{"aria-current":C,className:E,ref:t,style:_,to:l,unstable_viewTransition:u}),"function"==typeof c?c(D):c)})),Nr=a.forwardRef(((e,t)=>{let{fetcherKey:r,navigate:n,reloadDocument:o,replace:i,state:s,method:l=sr,action:u,onSubmit:c,relative:d,preventScrollReset:h,unstable_viewTransition:f}=e,p=ir(e,vr),m=Yr(),v=qr(u,{relative:d}),y="get"===l.toLowerCase()?"get":"post";return a.createElement("form",or({ref:t,method:y,action:v,onSubmit:o?c:e=>{if(c&&c(e),e.defaultPrevented)return;e.preventDefault();let t=e.nativeEvent.submitter,a=(null==t?void 0:t.getAttribute("formmethod"))||l;m(t||e.currentTarget,{fetcherKey:r,method:a,navigate:n,replace:i,state:s,relative:d,preventScrollReset:h,unstable_viewTransition:f})}},p))}));function Br(e){let{getKey:t,storageKey:r}=e;return en({getKey:t,storageKey:r}),null}var Ir,zr;function Hr(e){let t=a.useContext(Ze);return t||h(!1),t}function Wr(e){let t=a.useContext(et);return t||h(!1),t}function Kr(e,t){let{target:r,replace:n,state:o,preventScrollReset:i,relative:s,unstable_viewTransition:l}=void 0===t?{}:t,u=ht(),c=lt(),d=yt(e,{relative:s});return a.useCallback((t=>{if(function(e,t){return!(0!==e.button||t&&"_self"!==t||function(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}(e))}(t,r)){t.preventDefault();let r=void 0!==n?n:v(c)===v(d);u(e,{replace:r,state:o,preventScrollReset:i,relative:s,unstable_viewTransition:l})}}),[c,u,d,n,o,r,e,i,s,l])}function $r(e){let t=a.useRef(cr(e)),r=a.useRef(!1),n=lt(),o=a.useMemo((()=>function(e,t){let r=cr(e);return t&&t.forEach(((e,n)=>{r.has(n)||t.getAll(n).forEach((e=>{r.append(n,e)}))})),r}(n.search,r.current?null:t.current)),[n.search]),i=ht(),s=a.useCallback(((e,t)=>{const n=cr("function"==typeof e?e(o):e);r.current=!0,i("?"+n,t)}),[i,o]);return[o,s]}(function(e){e.UseScrollRestoration="useScrollRestoration",e.UseSubmit="useSubmit",e.UseSubmitFetcher="useSubmitFetcher",e.UseFetcher="useFetcher",e.useViewTransitionState="useViewTransitionState"})(Ir||(Ir={})),function(e){e.UseFetcher="useFetcher",e.UseFetchers="useFetchers",e.UseScrollRestoration="useScrollRestoration"}(zr||(zr={}));let Jr=0,Vr=()=>"__"+String(++Jr)+"__";function Yr(){let{router:e}=Hr(Ir.UseSubmit),{basename:t}=a.useContext(rt),r=kt();return a.useCallback((function(n,a){void 0===a&&(a={}),function(){if("undefined"==typeof document)throw new Error("You are calling submit during the server render. Try calling submit within a `useEffect` or callback instead.")}();let{action:o,method:i,encType:s,formData:l,body:u}=function(e,t){let r,n,a,o,i;if(ur(s=e)&&"form"===s.tagName.toLowerCase()){let i=e.getAttribute("action");n=i?B(i,t):null,r=e.getAttribute("method")||sr,a=fr(e.getAttribute("enctype"))||lr,o=new FormData(e)}else if(function(e){return ur(e)&&"button"===e.tagName.toLowerCase()}(e)||function(e){return ur(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 <button> or <input type="submit"> without a <form>');let s=e.getAttribute("formaction")||i.getAttribute("action");if(n=s?B(s,t):null,r=e.getAttribute("formmethod")||i.getAttribute("method")||sr,a=fr(e.getAttribute("formenctype"))||fr(i.getAttribute("enctype"))||lr,o=new FormData(i,e),!function(){if(null===dr)try{new FormData(document.createElement("form"),0),dr=!1}catch(e){dr=!0}return dr}()){let{name:t,type:r,value:n}=e;if("image"===r){let e=t?t+".":"";o.append(e+"x","0"),o.append(e+"y","0")}else t&&o.append(t,n)}}else{if(ur(e))throw new Error('Cannot submit element that is not <form>, <button>, or <input type="submit|image">');r=sr,n=null,a=lr,i=e}var s;return o&&"text/plain"===a&&(i=o,o=void 0),{action:n,method:r.toLowerCase(),encType:a,formData:o,body:i}}(n,t);if(!1===a.navigate){let t=a.fetcherKey||Vr();e.fetch(t,r,a.action||o,{preventScrollReset:a.preventScrollReset,formData:l,body:u,formMethod:a.method||i,formEncType:a.encType||s,unstable_flushSync:a.unstable_flushSync})}else e.navigate(a.action||o,{preventScrollReset:a.preventScrollReset,formData:l,body:u,formMethod:a.method||i,formEncType:a.encType||s,replace:a.replace,state:a.state,fromRouteId:r,unstable_flushSync:a.unstable_flushSync,unstable_viewTransition:a.unstable_viewTransition})}),[e,t,r])}function qr(e,t){let{relative:r}=void 0===t?{}:t,{basename:n}=a.useContext(rt),o=a.useContext(at);o||h(!1);let[i]=o.matches.slice(-1),s=or({},yt(e||".",{relative:r})),l=lt();if(null==e){s.search=l.search;let e=new URLSearchParams(s.search);e.has("index")&&""===e.get("index")&&(e.delete("index"),s.search=e.toString()?"?"+e.toString():"")}return e&&"."!==e||!i.route.index||(s.search=s.search?s.search.replace(/^\?/,"?index&"):"?index"),"/"!==n&&(s.pathname="/"===s.pathname?n:$([n,s.pathname])),v(s)}function Xr(e){var t;let{key:r}=void 0===e?{}:e,{router:n}=Hr(Ir.UseFetcher),o=Wr(zr.UseFetcher),i=a.useContext(Er),s=a.useContext(at),l=null==(t=s.matches[s.matches.length-1])?void 0:t.route.id;i||h(!1),s||h(!1),null==l&&h(!1);let u=Dr?Dr():"",[c,d]=a.useState(r||u);r&&r!==c?d(r):c||d(Vr()),a.useEffect((()=>(n.getFetcher(c),()=>{n.deleteFetcher(c)})),[n,c]);let f=a.useCallback(((e,t)=>{l||h(!1),n.fetch(c,l,e,t)}),[c,l,n]),p=Yr(),m=a.useCallback(((e,t)=>{p(e,or({},t,{navigate:!1,fetcherKey:c}))}),[c,p]),v=a.useMemo((()=>a.forwardRef(((e,t)=>a.createElement(Nr,or({},e,{navigate:!1,fetcherKey:c,ref:t}))))),[c]),y=o.fetchers.get(c)||de,g=i.get(c);return a.useMemo((()=>or({Form:v,submit:m,load:f},y,{data:g})),[v,m,f,y,g])}function Gr(){let e=Wr(zr.UseFetchers);return Array.from(e.fetchers.entries()).map((e=>{let[t,r]=e;return or({},r,{key:t})}))}const Qr="react-router-scroll-positions";let Zr={};function en(e){let{getKey:t,storageKey:r}=void 0===e?{}:e,{router:n}=Hr(Ir.UseScrollRestoration),{restoreScrollPosition:o,preventScrollReset:i}=Wr(zr.UseScrollRestoration),{basename:s}=a.useContext(rt),l=lt(),u=Mt(),c=Tt();a.useEffect((()=>(window.history.scrollRestoration="manual",()=>{window.history.scrollRestoration="auto"})),[]),function(e){let{capture:t}={};a.useEffect((()=>{let r=null!=t?{capture:t}:void 0;return window.addEventListener("pagehide",e,r),()=>{window.removeEventListener("pagehide",e,r)}}),[e,t])}(a.useCallback((()=>{if("idle"===c.state){let e=(t?t(l,u):null)||l.key;Zr[e]=window.scrollY}try{sessionStorage.setItem(r||Qr,JSON.stringify(Zr))}catch(e){}window.history.scrollRestoration="auto"}),[r,t,c.state,l,u])),"undefined"!=typeof document&&(a.useLayoutEffect((()=>{try{let e=sessionStorage.getItem(r||Qr);e&&(Zr=JSON.parse(e))}catch(e){}}),[r]),a.useLayoutEffect((()=>{let e=t&&"/"!==s?(e,r)=>t(or({},e,{pathname:B(e.pathname,s)||e.pathname}),r):t,r=null==n?void 0:n.enableScrollRestoration(Zr,(()=>window.scrollY),e);return()=>r&&r()}),[n,s,t]),a.useLayoutEffect((()=>{if(!1!==o)if("number"!=typeof o){if(l.hash){let e=document.getElementById(decodeURIComponent(l.hash.slice(1)));if(e)return void e.scrollIntoView()}!0!==i&&window.scrollTo(0,0)}else window.scrollTo(0,o)}),[l,o,i]))}function tn(e,t){let{capture:r}=t||{};a.useEffect((()=>{let t=null!=r?{capture:r}:void 0;return window.addEventListener("beforeunload",e,t),()=>{window.removeEventListener("beforeunload",e,t)}}),[e,r])}function rn(e){let{when:t,message:r}=e,n=zt(t);a.useEffect((()=>{"blocked"===n.state&&(window.confirm(r)?setTimeout(n.proceed,0):n.reset())}),[n,r]),a.useEffect((()=>{"blocked"!==n.state||t||n.reset()}),[n,t])}function nn(e,t){void 0===t&&(t={});let r=a.useContext(Sr);null==r&&h(!1);let{basename:n}=Hr(Ir.useViewTransitionState),o=yt(e,{relative:t.relative});if(!r.isTransitioning)return!1;let i=B(r.currentLocation.pathname,n)||r.currentLocation.pathname,s=B(r.nextLocation.pathname,n)||r.nextLocation.pathname;return null!=F(o.pathname,s)||null!=F(o.pathname,i)}}}]);
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @remix-run/router v1.18.0
|
|
3
|
+
*
|
|
4
|
+
* Copyright (c) Remix Software Inc.
|
|
5
|
+
*
|
|
6
|
+
* This source code is licensed under the MIT license found in the
|
|
7
|
+
* LICENSE.md file in the root directory of this source tree.
|
|
8
|
+
*
|
|
9
|
+
* @license MIT
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* React Router DOM v6.25.1
|
|
14
|
+
*
|
|
15
|
+
* Copyright (c) Remix Software Inc.
|
|
16
|
+
*
|
|
17
|
+
* This source code is licensed under the MIT license found in the
|
|
18
|
+
* LICENSE.md file in the root directory of this source tree.
|
|
19
|
+
*
|
|
20
|
+
* @license MIT
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* React Router v6.25.1
|
|
25
|
+
*
|
|
26
|
+
* Copyright (c) Remix Software Inc.
|
|
27
|
+
*
|
|
28
|
+
* This source code is licensed under the MIT license found in the
|
|
29
|
+
* LICENSE.md file in the root directory of this source tree.
|
|
30
|
+
*
|
|
31
|
+
* @license MIT
|
|
32
|
+
*/
|