@oj-module/cli 0.2.63 → 0.2.66
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/devkit/README.md +9 -3
- package/devkit/SKILL.md +5 -2
- package/devkit/framework-dev.md +12 -7
- package/devkit/manual.md +123 -56
- package/devkit/menu-rules.md +4 -1
- package/package.json +3 -2
- package/shell-dist/assets/ahooks.2l850ymmh0.js +18 -0
- package/shell-dist/assets/antd-es-locale-zh_CN.1gjjsvxbf0.js +1 -0
- package/shell-dist/assets/antd-img-crop.196rkty480.js +99 -0
- package/shell-dist/assets/antd-locale-en_US.561tozx860.js +1 -0
- package/shell-dist/assets/antd-locale-zh_CN.1cmpmgzh70.js +1 -0
- package/shell-dist/assets/antd.uw1coq15l0.js +348 -0
- package/shell-dist/assets/clsx.jotilrt2e0.js +1 -0
- package/shell-dist/assets/contract-errors.2o17vz9u50.js +1 -0
- package/shell-dist/assets/contract.3h327o3mj0.js +57 -0
- package/shell-dist/assets/cssinjs.atgmhan7m0.js +3 -0
- package/shell-dist/assets/dayjs-plugin-advancedFormat.3vsyd2eis0.js +1 -0
- package/shell-dist/assets/dayjs-plugin-customParseFormat.13xhghv1d0.js +1 -0
- package/shell-dist/assets/dayjs-plugin-isoWeek.1fn1tw82p0.js +1 -0
- package/shell-dist/assets/dayjs-plugin-localeData.2rwbjp9nk0.js +1 -0
- package/shell-dist/assets/dayjs-plugin-quarterOfYear.2oqo1lcx80.js +1 -0
- package/shell-dist/assets/dayjs-plugin-relativeTime.2pqs3et4y0.js +1 -0
- package/shell-dist/assets/dayjs-plugin-weekOfYear.gvn9iph080.js +1 -0
- package/shell-dist/assets/dayjs-plugin-weekYear.2u78l3ex10.js +1 -0
- package/shell-dist/assets/dayjs-plugin-weekday.2d56a4tml0.js +1 -0
- package/shell-dist/assets/dayjs.pa60l6wjo0.js +1 -0
- package/shell-dist/assets/dnd-kit-core.1xyreig6r0.js +5 -0
- package/shell-dist/assets/dnd-kit-sortable.s94qciuft0.js +1 -0
- package/shell-dist/assets/dnd-kit-utilities.1umw4xphb0.js +1 -0
- package/shell-dist/assets/i18next.33zqofapj0.js +1 -0
- package/shell-dist/assets/icons-es-components-Context.365qmflwg0.js +1 -0
- package/shell-dist/assets/icons.159wjwals0.js +57 -0
- package/shell-dist/assets/{index-BKtXxIXz.js → index.i0kqbxp050.js} +11 -6
- package/shell-dist/assets/jsx-dev-runtime.3uibuc82f0.js +14 -0
- package/shell-dist/assets/jsx-runtime.h40xu4o5b0.js +14 -0
- package/shell-dist/assets/keepalive-for-react.xenu5vam70.js +1 -0
- package/shell-dist/assets/kit.37kr8ui390.js +1 -0
- package/shell-dist/assets/ky.1cgch7gu60.js +6 -0
- package/shell-dist/assets/motion-react.pjsxytvjs0.js +12 -0
- package/shell-dist/assets/motion.21tciqutg0.js +4 -0
- package/shell-dist/assets/nprogress.2nz76n9ny0.js +7 -0
- package/shell-dist/assets/ojm-dayjs-locale-zh-cn.3vr3beiyp0.js +9 -0
- package/shell-dist/assets/pinyin-pro.3v0mnxczn0.js +1 -0
- package/shell-dist/assets/pro-components.2kyot1vcl0.js +83 -0
- package/shell-dist/assets/react-countup.2x8idnr8y0.js +10 -0
- package/shell-dist/assets/react-dom-client.ick0v05ob0.js +43 -0
- package/shell-dist/assets/react-dom.2so9uxg3f0.js +22 -0
- package/shell-dist/assets/react-error-boundary.2dncdfj3b0.js +1 -0
- package/shell-dist/assets/react-i18next.auhvjhqv00.js +1 -0
- package/shell-dist/assets/react-jss.1ei6dr9e00.js +29 -0
- package/shell-dist/assets/react-query.3rln45ow00.js +1 -0
- package/shell-dist/assets/react-router-dom.3c6zld8h40.js +44 -0
- package/shell-dist/assets/react-router.2h9rebcv50.js +56 -0
- package/shell-dist/assets/react.1ew63mwts0.js +14 -0
- package/shell-dist/assets/runtime.1xfsxcajj0.js +21702 -0
- package/shell-dist/assets/simplebar-react.2g739uvai0.js +1 -0
- package/shell-dist/assets/spin-delay.yjeyj6iwp0.js +9 -0
- package/shell-dist/assets/tailwind-merge.125ehiqjw0.js +1 -0
- package/shell-dist/assets/use-sync-external-store-shim.1nz1pi9bb0.js +22 -0
- package/shell-dist/assets/zustand-middleware.1xaxjueme0.js +6 -0
- package/shell-dist/assets/zustand-react-shallow.pybayv1hx0.js +1 -0
- package/shell-dist/assets/zustand-react.9fsl9brxy0.js +1 -0
- package/shell-dist/assets/zustand-shallow.6cz0yyv9x0.js +1 -0
- package/shell-dist/assets/zustand-vanilla-shallow.3424monv50.js +1 -0
- package/shell-dist/assets/zustand-vanilla.1mo3ka3g30.js +1 -0
- package/shell-dist/assets/zustand.3gjgzlnqo0.js +1 -0
- package/shell-dist/index.html +67 -118
- package/shell-dist/versions.json +3 -3
- package/src/build/module-def.ts +1 -0
- package/src/esm-exports.ts +152 -70
- package/src/market/__tests__/bootstrap.test.ts +36 -1
- package/src/shared-deps.ts +69 -19
- package/src/site-base.ts +4 -0
- package/templates/src/app/web/home/pages/components/bar-chart.tsx +5 -3
- package/templates/src/app/web/home/pages/components/echarts-setup.ts +30 -0
- package/templates/src/app/web/home/pages/components/line-chart.tsx +5 -3
- package/templates/src/app/web/home/pages/components/pie-chart.tsx +6 -3
- package/templates/src/app/web/home/pages/index.tsx +3 -2
- package/templates/src/app/web/home/routes.ts +3 -2
- package/templates/src/app/web/personal-center/locales/en-US.json +15 -0
- package/templates/src/app/web/personal-center/locales/zh-CN.json +15 -0
- package/templates/src/app/web/personal-center/pages/my-profile/index.tsx +15 -13
- package/templates/src/app/web/system/locales/en-US.json +24 -3
- package/templates/src/app/web/system/locales/zh-CN.json +24 -3
- package/templates/src/app/web/system/pages/roles/index.tsx +13 -6
- package/templates/src/app/web/system/pages/settings/index.tsx +1 -1
- package/templates/src/app/web/system/pages/users/index.tsx +3 -3
- package/templates/src/app/web/system/pages/users/roles.tsx +1 -1
- package/templates/src/oj-market/web/locales/en-US.json +14 -1
- package/templates/src/oj-market/web/locales/zh-CN.json +14 -1
- package/vendor/host-versions.json +3 -3
- package/shell-dist/assets/ahooks.js +0 -6909
- package/shell-dist/assets/antd-es-locale-zh_CN.js +0 -257
- package/shell-dist/assets/antd-img-crop.js +0 -1495
- package/shell-dist/assets/antd-locale-en_US.js +0 -374
- package/shell-dist/assets/antd-locale-zh_CN.js +0 -379
- package/shell-dist/assets/antd.js +0 -106874
- package/shell-dist/assets/clsx.js +0 -33
- package/shell-dist/assets/contract-errors.js +0 -30
- package/shell-dist/assets/contract.js +0 -18900
- package/shell-dist/assets/cssinjs.js +0 -2595
- package/shell-dist/assets/dayjs-plugin-advancedFormat.js +0 -98
- package/shell-dist/assets/dayjs-plugin-customParseFormat.js +0 -173
- package/shell-dist/assets/dayjs-plugin-isoWeek.js +0 -77
- package/shell-dist/assets/dayjs-plugin-localeData.js +0 -126
- package/shell-dist/assets/dayjs-plugin-quarterOfYear.js +0 -77
- package/shell-dist/assets/dayjs-plugin-relativeTime.js +0 -92
- package/shell-dist/assets/dayjs-plugin-weekOfYear.js +0 -73
- package/shell-dist/assets/dayjs-plugin-weekYear.js +0 -63
- package/shell-dist/assets/dayjs-plugin-weekday.js +0 -63
- package/shell-dist/assets/dayjs.js +0 -326
- package/shell-dist/assets/dnd-kit-core.js +0 -3601
- package/shell-dist/assets/dnd-kit-sortable.js +0 -717
- package/shell-dist/assets/dnd-kit-utilities.js +0 -340
- package/shell-dist/assets/i18next.js +0 -2321
- package/shell-dist/assets/icons-es-components-Context.js +0 -20
- package/shell-dist/assets/icons.js +0 -34961
- package/shell-dist/assets/jsx-dev-runtime.js +0 -75
- package/shell-dist/assets/jsx-runtime.js +0 -97
- package/shell-dist/assets/keepalive-for-react.js +0 -283
- package/shell-dist/assets/kit.js +0 -151
- package/shell-dist/assets/ky.js +0 -1427
- package/shell-dist/assets/motion-react.js +0 -13589
- package/shell-dist/assets/motion.js +0 -9959
- package/shell-dist/assets/nprogress.js +0 -314
- package/shell-dist/assets/ojm--ant-design-icons-es-icons-BarsOutlined.js +0 -7
- package/shell-dist/assets/ojm--ant-design-icons-es-icons-CalendarOutlined.js +0 -7
- package/shell-dist/assets/ojm--ant-design-icons-es-icons-CaretDownFilled.js +0 -7
- package/shell-dist/assets/ojm--ant-design-icons-es-icons-CaretDownOutlined.js +0 -7
- package/shell-dist/assets/ojm--ant-design-icons-es-icons-CaretUpOutlined.js +0 -7
- package/shell-dist/assets/ojm--ant-design-icons-es-icons-CheckCircleFilled.js +0 -7
- package/shell-dist/assets/ojm--ant-design-icons-es-icons-CheckOutlined.js +0 -7
- package/shell-dist/assets/ojm--ant-design-icons-es-icons-ClockCircleOutlined.js +0 -7
- package/shell-dist/assets/ojm--ant-design-icons-es-icons-CloseCircleFilled.js +0 -7
- package/shell-dist/assets/ojm--ant-design-icons-es-icons-CloseOutlined.js +0 -7
- package/shell-dist/assets/ojm--ant-design-icons-es-icons-CopyOutlined.js +0 -7
- package/shell-dist/assets/ojm--ant-design-icons-es-icons-DeleteOutlined.js +0 -7
- package/shell-dist/assets/ojm--ant-design-icons-es-icons-DoubleLeftOutlined.js +0 -7
- package/shell-dist/assets/ojm--ant-design-icons-es-icons-DoubleRightOutlined.js +0 -7
- package/shell-dist/assets/ojm--ant-design-icons-es-icons-DownOutlined.js +0 -7
- package/shell-dist/assets/ojm--ant-design-icons-es-icons-DownloadOutlined.js +0 -7
- package/shell-dist/assets/ojm--ant-design-icons-es-icons-EditOutlined.js +0 -7
- package/shell-dist/assets/ojm--ant-design-icons-es-icons-EllipsisOutlined.js +0 -7
- package/shell-dist/assets/ojm--ant-design-icons-es-icons-EnterOutlined.js +0 -7
- package/shell-dist/assets/ojm--ant-design-icons-es-icons-ExclamationCircleFilled.js +0 -7
- package/shell-dist/assets/ojm--ant-design-icons-es-icons-EyeInvisibleOutlined.js +0 -7
- package/shell-dist/assets/ojm--ant-design-icons-es-icons-EyeOutlined.js +0 -7
- package/shell-dist/assets/ojm--ant-design-icons-es-icons-FileOutlined.js +0 -7
- package/shell-dist/assets/ojm--ant-design-icons-es-icons-FileTextOutlined.js +0 -7
- package/shell-dist/assets/ojm--ant-design-icons-es-icons-FilterFilled.js +0 -7
- package/shell-dist/assets/ojm--ant-design-icons-es-icons-FolderOpenOutlined.js +0 -7
- package/shell-dist/assets/ojm--ant-design-icons-es-icons-FolderOutlined.js +0 -7
- package/shell-dist/assets/ojm--ant-design-icons-es-icons-HolderOutlined.js +0 -7
- package/shell-dist/assets/ojm--ant-design-icons-es-icons-InfoCircleFilled.js +0 -7
- package/shell-dist/assets/ojm--ant-design-icons-es-icons-LeftOutlined.js +0 -7
- package/shell-dist/assets/ojm--ant-design-icons-es-icons-LoadingOutlined.js +0 -7
- package/shell-dist/assets/ojm--ant-design-icons-es-icons-MinusOutlined.js +0 -7
- package/shell-dist/assets/ojm--ant-design-icons-es-icons-MinusSquareOutlined.js +0 -7
- package/shell-dist/assets/ojm--ant-design-icons-es-icons-PaperClipOutlined.js +0 -7
- package/shell-dist/assets/ojm--ant-design-icons-es-icons-PictureOutlined.js +0 -7
- package/shell-dist/assets/ojm--ant-design-icons-es-icons-PlusOutlined.js +0 -7
- package/shell-dist/assets/ojm--ant-design-icons-es-icons-PlusSquareOutlined.js +0 -7
- package/shell-dist/assets/ojm--ant-design-icons-es-icons-QuestionCircleOutlined.js +0 -7
- package/shell-dist/assets/ojm--ant-design-icons-es-icons-ReloadOutlined.js +0 -7
- package/shell-dist/assets/ojm--ant-design-icons-es-icons-RightOutlined.js +0 -7
- package/shell-dist/assets/ojm--ant-design-icons-es-icons-RotateLeftOutlined.js +0 -7
- package/shell-dist/assets/ojm--ant-design-icons-es-icons-RotateRightOutlined.js +0 -7
- package/shell-dist/assets/ojm--ant-design-icons-es-icons-SearchOutlined.js +0 -7
- package/shell-dist/assets/ojm--ant-design-icons-es-icons-StarFilled.js +0 -7
- package/shell-dist/assets/ojm--ant-design-icons-es-icons-SwapOutlined.js +0 -7
- package/shell-dist/assets/ojm--ant-design-icons-es-icons-SwapRightOutlined.js +0 -7
- package/shell-dist/assets/ojm--ant-design-icons-es-icons-UpOutlined.js +0 -7
- package/shell-dist/assets/ojm--ant-design-icons-es-icons-VerticalAlignTopOutlined.js +0 -7
- package/shell-dist/assets/ojm--ant-design-icons-es-icons-WarningFilled.js +0 -7
- package/shell-dist/assets/ojm--ant-design-icons-es-icons-ZoomInOutlined.js +0 -7
- package/shell-dist/assets/ojm--ant-design-icons-es-icons-ZoomOutOutlined.js +0 -7
- package/shell-dist/assets/ojm-dayjs-locale-zh-cn.js +0 -81
- package/shell-dist/assets/pinyin-pro.js +0 -25175
- package/shell-dist/assets/pro-components.js +0 -44627
- package/shell-dist/assets/react-countup.js +0 -525
- package/shell-dist/assets/react-dom-client.js +0 -12134
- package/shell-dist/assets/react-dom.js +0 -266
- package/shell-dist/assets/react-error-boundary.js +0 -141
- package/shell-dist/assets/react-i18next.js +0 -1773
- package/shell-dist/assets/react-jss.js +0 -4089
- package/shell-dist/assets/react-query.js +0 -3072
- package/shell-dist/assets/react-router-dom.js +0 -9927
- package/shell-dist/assets/react-router.js +0 -14584
- package/shell-dist/assets/react.js +0 -590
- package/shell-dist/assets/runtime.js +0 -28294
- package/shell-dist/assets/simplebar-react.js +0 -1119
- package/shell-dist/assets/spin-delay.js +0 -111
- package/shell-dist/assets/tailwind-merge.js +0 -3364
- package/shell-dist/assets/use-sync-external-store-shim.js +0 -130
- package/shell-dist/assets/zustand-middleware.js +0 -513
- package/shell-dist/assets/zustand-react-shallow.js +0 -27
- package/shell-dist/assets/zustand-react.js +0 -39
- package/shell-dist/assets/zustand-shallow.js +0 -22
- package/shell-dist/assets/zustand-vanilla-shallow.js +0 -71
- package/shell-dist/assets/zustand-vanilla.js +0 -40
- package/shell-dist/assets/zustand.js +0 -32
- /package/shell-dist/assets/{nprogress-css.js → nprogress-css.1cq2pzkre0.js} +0 -0
- /package/shell-dist/assets/{ojm-antd-es-button.js → ojm-antd-es-button.2uriphio50.js} +0 -0
- /package/shell-dist/assets/{ojm-antd-es-modal.js → ojm-antd-es-modal.bf3tgdh8v0.js} +0 -0
- /package/shell-dist/assets/{ojm-antd-es-slider.js → ojm-antd-es-slider.xyvptuhid0.js} +0 -0
- /package/shell-dist/assets/{ojm-antd-es-upload.js → ojm-antd-es-upload.13gx45e0g0.js} +0 -0
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
var __create=Object.create;var __defProp=Object.defineProperty;var __getOwnPropDesc=Object.getOwnPropertyDescriptor;var __getOwnPropNames=Object.getOwnPropertyNames;var __getProtoOf=Object.getPrototypeOf,__hasOwnProp=Object.prototype.hasOwnProperty;var __commonJS=(cb,mod)=>function(){try{return mod||(0,cb[__getOwnPropNames(cb)[0]])((mod={exports:{}}).exports,mod),mod.exports}catch(e){throw mod=0,e}};var __export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:!0})},__copyProps=(to,from,except,desc)=>{if(from&&typeof from=="object"||typeof from=="function")for(let key of __getOwnPropNames(from))!__hasOwnProp.call(to,key)&&key!==except&&__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable});return to};var __toESM=(mod,isNodeMode,target)=>(target=mod!=null?__create(__getProtoOf(mod)):{},__copyProps(isNodeMode||!mod||!mod.__esModule?__defProp(target,"default",{value:mod,enumerable:!0}):target,mod));var require_dist=__commonJS({"../../node_modules/.pnpm/cookie@1.1.1/node_modules/cookie/dist/index.js"(exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.parseCookie=parseCookie;exports.parse=parseCookie;exports.stringifyCookie=stringifyCookie;exports.stringifySetCookie=stringifySetCookie;exports.serialize=stringifySetCookie;exports.parseSetCookie=parseSetCookie;exports.stringifySetCookie=stringifySetCookie;exports.serialize=stringifySetCookie;var cookieNameRegExp=/^[\u0021-\u003A\u003C\u003E-\u007E]+$/,cookieValueRegExp=/^[\u0021-\u003A\u003C-\u007E]*$/,domainValueRegExp=/^([.]?[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)([.][a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)*$/i,pathValueRegExp=/^[\u0020-\u003A\u003D-\u007E]*$/,maxAgeRegExp=/^-?\d+$/,__toString=Object.prototype.toString,NullObject=(()=>{let C=function(){};return C.prototype=Object.create(null),C})();function parseCookie(str,options){let obj=new NullObject,len=str.length;if(len<2)return obj;let dec=options?.decode||decode2,index=0;do{let eqIdx=eqIndex(str,index,len);if(eqIdx===-1)break;let endIdx=endIndex(str,index,len);if(eqIdx>endIdx){index=str.lastIndexOf(";",eqIdx-1)+1;continue}let key=valueSlice(str,index,eqIdx);obj[key]===void 0&&(obj[key]=dec(valueSlice(str,eqIdx+1,endIdx))),index=endIdx+1}while(index<len);return obj}function stringifyCookie(cookie,options){let enc=options?.encode||encodeURIComponent,cookieStrings=[];for(let name of Object.keys(cookie)){let val=cookie[name];if(val===void 0)continue;if(!cookieNameRegExp.test(name))throw new TypeError(`cookie name is invalid: ${name}`);let value=enc(val);if(!cookieValueRegExp.test(value))throw new TypeError(`cookie val is invalid: ${val}`);cookieStrings.push(`${name}=${value}`)}return cookieStrings.join("; ")}function stringifySetCookie(_name,_val,_opts){let cookie=typeof _name=="object"?_name:{..._opts,name:_name,value:String(_val)},enc=(typeof _val=="object"?_val:_opts)?.encode||encodeURIComponent;if(!cookieNameRegExp.test(cookie.name))throw new TypeError(`argument name is invalid: ${cookie.name}`);let value=cookie.value?enc(cookie.value):"";if(!cookieValueRegExp.test(value))throw new TypeError(`argument val is invalid: ${cookie.value}`);let str=cookie.name+"="+value;if(cookie.maxAge!==void 0){if(!Number.isInteger(cookie.maxAge))throw new TypeError(`option maxAge is invalid: ${cookie.maxAge}`);str+="; Max-Age="+cookie.maxAge}if(cookie.domain){if(!domainValueRegExp.test(cookie.domain))throw new TypeError(`option domain is invalid: ${cookie.domain}`);str+="; Domain="+cookie.domain}if(cookie.path){if(!pathValueRegExp.test(cookie.path))throw new TypeError(`option path is invalid: ${cookie.path}`);str+="; Path="+cookie.path}if(cookie.expires){if(!isDate(cookie.expires)||!Number.isFinite(cookie.expires.valueOf()))throw new TypeError(`option expires is invalid: ${cookie.expires}`);str+="; Expires="+cookie.expires.toUTCString()}if(cookie.httpOnly&&(str+="; HttpOnly"),cookie.secure&&(str+="; Secure"),cookie.partitioned&&(str+="; Partitioned"),cookie.priority)switch(typeof cookie.priority=="string"?cookie.priority.toLowerCase():void 0){case"low":str+="; Priority=Low";break;case"medium":str+="; Priority=Medium";break;case"high":str+="; Priority=High";break;default:throw new TypeError(`option priority is invalid: ${cookie.priority}`)}if(cookie.sameSite)switch(typeof cookie.sameSite=="string"?cookie.sameSite.toLowerCase():cookie.sameSite){case!0:case"strict":str+="; SameSite=Strict";break;case"lax":str+="; SameSite=Lax";break;case"none":str+="; SameSite=None";break;default:throw new TypeError(`option sameSite is invalid: ${cookie.sameSite}`)}return str}function parseSetCookie(str,options){let dec=options?.decode||decode2,len=str.length,endIdx=endIndex(str,0,len),eqIdx=eqIndex(str,0,endIdx),setCookie=eqIdx===-1?{name:"",value:dec(valueSlice(str,0,endIdx))}:{name:valueSlice(str,0,eqIdx),value:dec(valueSlice(str,eqIdx+1,endIdx))},index=endIdx+1;for(;index<len;){let endIdx2=endIndex(str,index,len),eqIdx2=eqIndex(str,index,endIdx2),attr=eqIdx2===-1?valueSlice(str,index,endIdx2):valueSlice(str,index,eqIdx2),val=eqIdx2===-1?void 0:valueSlice(str,eqIdx2+1,endIdx2);switch(attr.toLowerCase()){case"httponly":setCookie.httpOnly=!0;break;case"secure":setCookie.secure=!0;break;case"partitioned":setCookie.partitioned=!0;break;case"domain":setCookie.domain=val;break;case"path":setCookie.path=val;break;case"max-age":val&&maxAgeRegExp.test(val)&&(setCookie.maxAge=Number(val));break;case"expires":if(!val)break;let date=new Date(val);Number.isFinite(date.valueOf())&&(setCookie.expires=date);break;case"priority":if(!val)break;let priority=val.toLowerCase();(priority==="low"||priority==="medium"||priority==="high")&&(setCookie.priority=priority);break;case"samesite":if(!val)break;let sameSite=val.toLowerCase();(sameSite==="lax"||sameSite==="strict"||sameSite==="none")&&(setCookie.sameSite=sameSite);break}index=endIdx2+1}return setCookie}function endIndex(str,min,len){let index=str.indexOf(";",min);return index===-1?len:index}function eqIndex(str,min,max){let index=str.indexOf("=",min);return index<max?index:-1}function valueSlice(str,min,max){let start=min,end=max;do{let code=str.charCodeAt(start);if(code!==32&&code!==9)break}while(++start<end);for(;end>start;){let code=str.charCodeAt(end-1);if(code!==32&&code!==9)break;end--}return str.slice(start,end)}function decode2(str){if(str.indexOf("%")===-1)return str;try{return decodeURIComponent(str)}catch{return str}}function isDate(val){return __toString.call(val)==="[object Date]"}}});var require_set_cookie=__commonJS({"../../node_modules/.pnpm/set-cookie-parser@2.7.2/node_modules/set-cookie-parser/lib/set-cookie.js"(exports,module){"use strict";var defaultParseOptions={decodeValues:!0,map:!1,silent:!1};function isForbiddenKey(key){return typeof key!="string"||key in{}}function createNullObj(){return Object.create(null)}function isNonEmptyString(str){return typeof str=="string"&&!!str.trim()}function parseString(setCookieValue,options){var parts=setCookieValue.split(";").filter(isNonEmptyString),nameValuePairStr=parts.shift(),parsed=parseNameValuePair(nameValuePairStr),name=parsed.name,value=parsed.value;if(options=options?Object.assign({},defaultParseOptions,options):defaultParseOptions,isForbiddenKey(name))return null;try{value=options.decodeValues?decodeURIComponent(value):value}catch(e){console.error("set-cookie-parser: failed to decode cookie value. Set options.decodeValues=false to disable decoding.",e)}var cookie=createNullObj();return cookie.name=name,cookie.value=value,parts.forEach(function(part){var sides=part.split("="),key=sides.shift().trimLeft().toLowerCase();if(!isForbiddenKey(key)){var value2=sides.join("=");if(key==="expires")cookie.expires=new Date(value2);else if(key==="max-age"){var n=parseInt(value2,10);Number.isNaN(n)||(cookie.maxAge=n)}else key==="secure"?cookie.secure=!0:key==="httponly"?cookie.httpOnly=!0:key==="samesite"?cookie.sameSite=value2:key==="partitioned"?cookie.partitioned=!0:key&&(cookie[key]=value2)}}),cookie}function parseNameValuePair(nameValuePairStr){var name="",value="",nameValueArr=nameValuePairStr.split("=");return nameValueArr.length>1?(name=nameValueArr.shift(),value=nameValueArr.join("=")):value=nameValuePairStr,{name,value}}function parse2(input,options){if(options=options?Object.assign({},defaultParseOptions,options):defaultParseOptions,!input)return options.map?createNullObj():[];if(input.headers)if(typeof input.headers.getSetCookie=="function")input=input.headers.getSetCookie();else if(input.headers["set-cookie"])input=input.headers["set-cookie"];else{var sch=input.headers[Object.keys(input.headers).find(function(key){return key.toLowerCase()==="set-cookie"})];!sch&&input.headers.cookie&&!options.silent&&console.warn("Warning: set-cookie-parser appears to have been called on a request object. It is designed to parse Set-Cookie headers from responses, not Cookie headers from requests. Set the option {silent: true} to suppress this warning."),input=sch}if(Array.isArray(input)||(input=[input]),options.map){var cookies=createNullObj();return input.filter(isNonEmptyString).reduce(function(cookies2,str){var cookie=parseString(str,options);return cookie&&!isForbiddenKey(cookie.name)&&(cookies2[cookie.name]=cookie),cookies2},cookies)}else return input.filter(isNonEmptyString).map(function(str){return parseString(str,options)}).filter(Boolean)}function splitCookiesString2(cookiesString){if(Array.isArray(cookiesString))return cookiesString;if(typeof cookiesString!="string")return[];var cookiesStrings=[],pos=0,start,ch,lastComma,nextStart,cookiesSeparatorFound;function skipWhitespace(){for(;pos<cookiesString.length&&/\s/.test(cookiesString.charAt(pos));)pos+=1;return pos<cookiesString.length}function notSpecialChar(){return ch=cookiesString.charAt(pos),ch!=="="&&ch!==";"&&ch!==","}for(;pos<cookiesString.length;){for(start=pos,cookiesSeparatorFound=!1;skipWhitespace();)if(ch=cookiesString.charAt(pos),ch===","){for(lastComma=pos,pos+=1,skipWhitespace(),nextStart=pos;pos<cookiesString.length&¬SpecialChar();)pos+=1;pos<cookiesString.length&&cookiesString.charAt(pos)==="="?(cookiesSeparatorFound=!0,pos=nextStart,cookiesStrings.push(cookiesString.substring(start,lastComma)),start=pos):pos=lastComma+1}else pos+=1;(!cookiesSeparatorFound||pos>=cookiesString.length)&&cookiesStrings.push(cookiesString.substring(start,cookiesString.length))}return cookiesStrings}module.exports=parse2;module.exports.parse=parse2;module.exports.parseString=parseString;module.exports.splitCookiesString=splitCookiesString2}});var development_exports={};__export(development_exports,{Await:()=>Await,BrowserRouter:()=>BrowserRouter,Form:()=>Form,HashRouter:()=>HashRouter,IDLE_BLOCKER:()=>IDLE_BLOCKER,IDLE_FETCHER:()=>IDLE_FETCHER,IDLE_NAVIGATION:()=>IDLE_NAVIGATION,Link:()=>Link,Links:()=>Links,MemoryRouter:()=>MemoryRouter,Meta:()=>Meta,NavLink:()=>NavLink,Navigate:()=>Navigate,NavigationType:()=>Action,Outlet:()=>Outlet,PrefetchPageLinks:()=>PrefetchPageLinks,Route:()=>Route,Router:()=>Router,RouterContextProvider:()=>RouterContextProvider,RouterProvider:()=>RouterProvider,Routes:()=>Routes,Scripts:()=>Scripts,ScrollRestoration:()=>ScrollRestoration,ServerRouter:()=>ServerRouter,StaticRouter:()=>StaticRouter,StaticRouterProvider:()=>StaticRouterProvider,UNSAFE_AwaitContextProvider:()=>AwaitContextProvider,UNSAFE_DataRouterContext:()=>DataRouterContext,UNSAFE_DataRouterStateContext:()=>DataRouterStateContext,UNSAFE_ErrorResponseImpl:()=>ErrorResponseImpl,UNSAFE_FetchersContext:()=>FetchersContext,UNSAFE_FrameworkContext:()=>FrameworkContext,UNSAFE_LocationContext:()=>LocationContext,UNSAFE_NavigationContext:()=>NavigationContext,UNSAFE_RSCDefaultRootErrorBoundary:()=>RSCDefaultRootErrorBoundary,UNSAFE_RemixErrorBoundary:()=>RemixErrorBoundary,UNSAFE_RouteContext:()=>RouteContext,UNSAFE_ServerMode:()=>ServerMode,UNSAFE_SingleFetchRedirectSymbol:()=>SingleFetchRedirectSymbol,UNSAFE_ViewTransitionContext:()=>ViewTransitionContext,UNSAFE_WithComponentProps:()=>WithComponentProps,UNSAFE_WithErrorBoundaryProps:()=>WithErrorBoundaryProps,UNSAFE_WithHydrateFallbackProps:()=>WithHydrateFallbackProps,UNSAFE_createBrowserHistory:()=>createBrowserHistory,UNSAFE_createClientRoutes:()=>createClientRoutes,UNSAFE_createClientRoutesWithHMRRevalidationOptOut:()=>createClientRoutesWithHMRRevalidationOptOut,UNSAFE_createHashHistory:()=>createHashHistory,UNSAFE_createMemoryHistory:()=>createMemoryHistory,UNSAFE_createRouter:()=>createRouter,UNSAFE_decodeViaTurboStream:()=>decodeViaTurboStream,UNSAFE_getHydrationData:()=>getHydrationData,UNSAFE_getPatchRoutesOnNavigationFunction:()=>getPatchRoutesOnNavigationFunction,UNSAFE_getTurboStreamSingleFetchDataStrategy:()=>getTurboStreamSingleFetchDataStrategy,UNSAFE_hydrationRouteProperties:()=>hydrationRouteProperties,UNSAFE_invariant:()=>invariant,UNSAFE_mapRouteProperties:()=>mapRouteProperties,UNSAFE_shouldHydrateRouteLoader:()=>shouldHydrateRouteLoader,UNSAFE_useFogOFWarDiscovery:()=>useFogOFWarDiscovery,UNSAFE_useScrollRestoration:()=>useScrollRestoration,UNSAFE_withComponentProps:()=>withComponentProps,UNSAFE_withErrorBoundaryProps:()=>withErrorBoundaryProps,UNSAFE_withHydrateFallbackProps:()=>withHydrateFallbackProps,createBrowserRouter:()=>createBrowserRouter,createContext:()=>createContext4,createCookie:()=>createCookie,createCookieSessionStorage:()=>createCookieSessionStorage,createHashRouter:()=>createHashRouter,createMemoryRouter:()=>createMemoryRouter,createMemorySessionStorage:()=>createMemorySessionStorage,createPath:()=>createPath,createRequestHandler:()=>createRequestHandler,createRoutesFromChildren:()=>createRoutesFromChildren,createRoutesFromElements:()=>createRoutesFromElements,createRoutesStub:()=>createRoutesStub,createSearchParams:()=>createSearchParams,createSession:()=>createSession,createSessionStorage:()=>createSessionStorage,createStaticHandler:()=>createStaticHandler2,createStaticRouter:()=>createStaticRouter,data:()=>data,generatePath:()=>generatePath,href:()=>href,isCookie:()=>isCookie,isRouteErrorResponse:()=>isRouteErrorResponse,isSession:()=>isSession,matchPath:()=>matchPath,matchRoutes:()=>matchRoutes,parsePath:()=>parsePath,redirect:()=>redirect,redirectDocument:()=>redirectDocument,renderMatches:()=>renderMatches,replace:()=>replace,resolvePath:()=>resolvePath,unstable_HistoryRouter:()=>HistoryRouter,unstable_RSCStaticRouter:()=>RSCStaticRouter,unstable_routeRSCServerRequest:()=>routeRSCServerRequest,unstable_setDevServerHooks:()=>setDevServerHooks,unstable_usePrompt:()=>usePrompt,unstable_useRoute:()=>useRoute,unstable_useRouterState:()=>useRouterState,useActionData:()=>useActionData,useAsyncError:()=>useAsyncError,useAsyncValue:()=>useAsyncValue,useBeforeUnload:()=>useBeforeUnload,useBlocker:()=>useBlocker,useFetcher:()=>useFetcher,useFetchers:()=>useFetchers,useFormAction:()=>useFormAction,useHref:()=>useHref,useInRouterContext:()=>useInRouterContext,useLinkClickHandler:()=>useLinkClickHandler,useLoaderData:()=>useLoaderData,useLocation:()=>useLocation,useMatch:()=>useMatch,useMatches:()=>useMatches,useNavigate:()=>useNavigate,useNavigation:()=>useNavigation,useNavigationType:()=>useNavigationType,useOutlet:()=>useOutlet,useOutletContext:()=>useOutletContext,useParams:()=>useParams,useResolvedPath:()=>useResolvedPath,useRevalidator:()=>useRevalidator,useRouteError:()=>useRouteError,useRouteLoaderData:()=>useRouteLoaderData,useRoutes:()=>useRoutes,useSearchParams:()=>useSearchParams,useSubmit:()=>useSubmit,useViewTransitionState:()=>useViewTransitionState});import*as React from"react";import*as React2 from"react";import*as React3 from"react";import*as React4 from"react";import*as React9 from"react";import*as React8 from"react";import*as React7 from"react";import*as React6 from"react";import*as React5 from"react";import*as React10 from"react";import*as React11 from"react";var __typeError=msg=>{throw TypeError(msg)},__accessCheck=(obj,member,msg)=>member.has(obj)||__typeError("Cannot "+msg),__privateGet=(obj,member,getter)=>(__accessCheck(obj,member,"read from private field"),getter?getter.call(obj):member.get(obj)),__privateAdd=(obj,member,value)=>member.has(obj)?__typeError("Cannot add the same private member more than once"):member instanceof WeakSet?member.add(obj):member.set(obj,value),__privateSet=(obj,member,value,setter)=>(__accessCheck(obj,member,"write to private field"),setter?setter.call(obj,value):member.set(obj,value),value),ABSOLUTE_URL_REGEX=/^(?:[a-z][a-z0-9+.-]*:|[\\/]{2})/i,PROTOCOL_RELATIVE_URL_REGEX=/^[\\/]{2}/;function normalizeProtocolRelativeUrl(url,protocol){return protocol+url.replace(/\\/g,"/")}var Action=(Action2=>(Action2.Pop="POP",Action2.Push="PUSH",Action2.Replace="REPLACE",Action2))(Action||{}),PopStateEventType="popstate";function isLocation(obj){return typeof obj=="object"&&obj!=null&&"pathname"in obj&&"search"in obj&&"hash"in obj&&"state"in obj&&"key"in obj}function createMemoryHistory(options={}){let{initialEntries=["/"],initialIndex,v5Compat=!1}=options,entries;entries=initialEntries.map((entry,index2)=>createMemoryLocation(entry,typeof entry=="string"?null:entry.state,index2===0?"default":void 0,typeof entry=="string"?void 0:entry.mask));let index=clampIndex(initialIndex??entries.length-1),action="POP",listener=null;function clampIndex(n){return Math.min(Math.max(n,0),entries.length-1)}function getCurrentLocation(){return entries[index]}function createMemoryLocation(to,state=null,key,mask){let location=createLocation(entries?getCurrentLocation().pathname:"/",to,state,key,mask);return warning(location.pathname.charAt(0)==="/",`relative pathnames are not supported in memory history: ${JSON.stringify(to)}`),location}function createHref2(to){return typeof to=="string"?to:createPath(to)}return{get index(){return index},get action(){return action},get location(){return getCurrentLocation()},createHref:createHref2,createURL(to){return new URL(createHref2(to),"http://localhost")},encodeLocation(to){let path=typeof to=="string"?parsePath(to):to;return{pathname:path.pathname||"",search:path.search||"",hash:path.hash||""}},push(to,state){action="PUSH";let nextLocation=isLocation(to)?to:createMemoryLocation(to,state);index+=1,entries.splice(index,entries.length,nextLocation),v5Compat&&listener&&listener({action,location:nextLocation,delta:1})},replace(to,state){action="REPLACE";let nextLocation=isLocation(to)?to:createMemoryLocation(to,state);entries[index]=nextLocation,v5Compat&&listener&&listener({action,location:nextLocation,delta:0})},go(delta){action="POP";let nextIndex=clampIndex(index+delta),nextLocation=entries[nextIndex];index=nextIndex,listener&&listener({action,location:nextLocation,delta})},listen(fn){return listener=fn,()=>{listener=null}}}}function createBrowserHistory(options={}){function createBrowserLocation(window2,globalHistory){let maskedLocation=globalHistory.state?.masked,{pathname,search,hash}=maskedLocation||window2.location;return createLocation("",{pathname,search,hash},globalHistory.state&&globalHistory.state.usr||null,globalHistory.state&&globalHistory.state.key||"default",maskedLocation?{pathname:window2.location.pathname,search:window2.location.search,hash:window2.location.hash}:void 0)}function createBrowserHref(window2,to){return typeof to=="string"?to:createPath(to)}return getUrlBasedHistory(createBrowserLocation,createBrowserHref,null,options)}function createHashHistory(options={}){function createHashLocation(window2,globalHistory){let{pathname="/",search="",hash=""}=parsePath(window2.location.hash.substring(1));return!pathname.startsWith("/")&&!pathname.startsWith(".")&&(pathname="/"+pathname),createLocation("",{pathname,search,hash},globalHistory.state&&globalHistory.state.usr||null,globalHistory.state&&globalHistory.state.key||"default")}function createHashHref(window2,to){let base=window2.document.querySelector("base"),href2="";if(base&&base.getAttribute("href")){let url=window2.location.href,hashIndex=url.indexOf("#");href2=hashIndex===-1?url:url.slice(0,hashIndex)}return href2+"#"+(typeof to=="string"?to:createPath(to))}function validateHashLocation(location,to){warning(location.pathname.charAt(0)==="/",`relative pathnames are not supported in hash history.push(${JSON.stringify(to)})`)}return getUrlBasedHistory(createHashLocation,createHashHref,validateHashLocation,options)}function invariant(value,message){if(value===!1||value===null||typeof value>"u")throw new Error(message)}function warning(cond,message){if(!cond){typeof console<"u"&&console.warn(message);try{throw new Error(message)}catch{}}}function createKey(){return Math.random().toString(36).substring(2,10)}function getHistoryState(location,index){return{usr:location.state,key:location.key,idx:index,masked:location.mask?{pathname:location.pathname,search:location.search,hash:location.hash}:void 0}}function createLocation(current,to,state=null,key,mask){return{pathname:typeof current=="string"?current:current.pathname,search:"",hash:"",...typeof to=="string"?parsePath(to):to,state,key:to&&to.key||key||createKey(),mask}}function createPath({pathname="/",search="",hash=""}){return search&&search!=="?"&&(pathname+=search.charAt(0)==="?"?search:"?"+search),hash&&hash!=="#"&&(pathname+=hash.charAt(0)==="#"?hash:"#"+hash),pathname}function parsePath(path){let parsedPath={};if(path){let hashIndex=path.indexOf("#");hashIndex>=0&&(parsedPath.hash=path.substring(hashIndex),path=path.substring(0,hashIndex));let searchIndex=path.indexOf("?");searchIndex>=0&&(parsedPath.search=path.substring(searchIndex),path=path.substring(0,searchIndex)),path&&(parsedPath.pathname=path)}return parsedPath}function getUrlBasedHistory(getLocation,createHref2,validateLocation,options={}){let{window:window2=document.defaultView,v5Compat=!1}=options,globalHistory=window2.history,action="POP",listener=null,index=getIndex();index==null&&(index=0,globalHistory.replaceState({...globalHistory.state,idx:index},""));function getIndex(){return(globalHistory.state||{idx:null}).idx}function handlePop(){action="POP";let nextIndex=getIndex(),delta=nextIndex==null?null:nextIndex-index;index=nextIndex,listener&&listener({action,location:history.location,delta})}function push(to,state){action="PUSH";let location=isLocation(to)?to:createLocation(history.location,to,state);validateLocation&&validateLocation(location,to),index=getIndex()+1;let historyState=getHistoryState(location,index),url=history.createHref(location.mask||location);try{globalHistory.pushState(historyState,"",url)}catch(error){if(error instanceof DOMException&&error.name==="DataCloneError")throw error;window2.location.assign(url)}v5Compat&&listener&&listener({action,location:history.location,delta:1})}function replace2(to,state){action="REPLACE";let location=isLocation(to)?to:createLocation(history.location,to,state);validateLocation&&validateLocation(location,to),index=getIndex();let historyState=getHistoryState(location,index),url=history.createHref(location.mask||location);globalHistory.replaceState(historyState,"",url),v5Compat&&listener&&listener({action,location:history.location,delta:0})}function createURL(to){return createBrowserURLImpl(window2,to)}let history={get action(){return action},get location(){return getLocation(window2,globalHistory)},listen(fn){if(listener)throw new Error("A history only accepts one active listener");return window2.addEventListener(PopStateEventType,handlePop),listener=fn,()=>{window2.removeEventListener(PopStateEventType,handlePop),listener=null}},createHref(to){return createHref2(window2,to)},createURL,encodeLocation(to){let url=createURL(to);return{pathname:url.pathname,search:url.search,hash:url.hash}},push,replace:replace2,go(n){return globalHistory.go(n)}};return history}function createBrowserURLImpl(windowImpl,to,isAbsolute=!1){let base="http://localhost";windowImpl&&(base=windowImpl.location.origin!=="null"?windowImpl.location.origin:windowImpl.location.href),invariant(base,"No window.location.(origin|href) available to create URL");let href2=typeof to=="string"?to:createPath(to);return href2=href2.replace(/ $/,"%20"),!isAbsolute&&PROTOCOL_RELATIVE_URL_REGEX.test(href2)&&(href2=base+href2),new URL(href2,base)}function createContext4(defaultValue){return{defaultValue}}var _map,RouterContextProvider=class{constructor(init){if(__privateAdd(this,_map,new Map),init)for(let[context,value]of init)this.set(context,value)}get(context){if(__privateGet(this,_map).has(context))return __privateGet(this,_map).get(context);if(context.defaultValue!==void 0)return context.defaultValue;throw new Error("No value found for context")}set(context,value){__privateGet(this,_map).set(context,value)}};_map=new WeakMap;var unsupportedLazyRouteObjectKeys=new Set(["lazy","caseSensitive","path","id","index","children"]);function isUnsupportedLazyRouteObjectKey(key){return unsupportedLazyRouteObjectKeys.has(key)}var unsupportedLazyRouteFunctionKeys=new Set(["lazy","caseSensitive","path","id","index","middleware","children"]);function isUnsupportedLazyRouteFunctionKey(key){return unsupportedLazyRouteFunctionKeys.has(key)}function isIndexRoute(route){return route.index===!0}function convertRoutesToDataRoutes(routes,mapRouteProperties2,parentPath=[],manifest={},allowInPlaceMutations=!1){return routes.map((route,index)=>{let treePath=[...parentPath,String(index)],id=typeof route.id=="string"?route.id:treePath.join("-");if(invariant(route.index!==!0||!route.children,"Cannot specify children on an index route"),invariant(allowInPlaceMutations||!manifest[id],`Found a route id collision on id "${id}". Route id's must be globally unique within Data Router usages`),isIndexRoute(route)){let indexRoute={...route,id};return manifest[id]=mergeRouteUpdates(indexRoute,mapRouteProperties2(indexRoute)),indexRoute}else{let pathOrLayoutRoute={...route,id,children:void 0};return manifest[id]=mergeRouteUpdates(pathOrLayoutRoute,mapRouteProperties2(pathOrLayoutRoute)),route.children&&(pathOrLayoutRoute.children=convertRoutesToDataRoutes(route.children,mapRouteProperties2,treePath,manifest,allowInPlaceMutations)),pathOrLayoutRoute}})}function mergeRouteUpdates(route,updates){return Object.assign(route,{...updates,...typeof updates.lazy=="object"&&updates.lazy!=null?{lazy:{...route.lazy,...updates.lazy}}:{}})}function matchRoutes(routes,locationArg,basename="/"){return matchRoutesImpl(routes,locationArg,basename,!1)}function matchRoutesImpl(routes,locationArg,basename,allowPartial,precomputedBranches){let location=typeof locationArg=="string"?parsePath(locationArg):locationArg,pathname=stripBasename(location.pathname||"/",basename);if(pathname==null)return null;let branches=precomputedBranches??flattenAndRankRoutes(routes),matches=null,decoded=decodePath(pathname);for(let i=0;matches==null&&i<branches.length;++i)matches=matchRouteBranch(branches[i],decoded,allowPartial);return matches}function convertRouteMatchToUiMatch(match,loaderData){let{route,pathname,params}=match;return{id:route.id,pathname,params,data:loaderData[route.id],loaderData:loaderData[route.id],handle:route.handle}}function flattenAndRankRoutes(routes){let branches=flattenRoutes(routes);return rankRouteBranches(branches),branches}function flattenRoutes(routes,branches=[],parentsMeta=[],parentPath="",_hasParentOptionalSegments=!1){let flattenRoute=(route,index,hasParentOptionalSegments=_hasParentOptionalSegments,relativePath)=>{let meta={relativePath:relativePath===void 0?route.path||"":relativePath,caseSensitive:route.caseSensitive===!0,childrenIndex:index,route};if(meta.relativePath.startsWith("/")){if(!meta.relativePath.startsWith(parentPath)&&hasParentOptionalSegments)return;invariant(meta.relativePath.startsWith(parentPath),`Absolute route path "${meta.relativePath}" nested under path "${parentPath}" is not valid. An absolute child route path must start with the combined path of all its parent routes.`),meta.relativePath=meta.relativePath.slice(parentPath.length)}let path=joinPaths([parentPath,meta.relativePath]),routesMeta=parentsMeta.concat(meta);route.children&&route.children.length>0&&(invariant(route.index!==!0,`Index routes must not have child routes. Please remove all child routes from route path "${path}".`),flattenRoutes(route.children,branches,routesMeta,path,hasParentOptionalSegments)),!(route.path==null&&!route.index)&&branches.push({path,score:computeScore(path,route.index),routesMeta:routesMeta.map((meta2,i)=>{let[matcher,params]=compilePath(meta2.relativePath,meta2.caseSensitive,i===routesMeta.length-1);return{...meta2,matcher,compiledParams:params}})})};return routes.forEach((route,index)=>{if(route.path===""||!route.path?.includes("?"))flattenRoute(route,index);else for(let exploded of explodeOptionalSegments(route.path))flattenRoute(route,index,!0,exploded)}),branches}function explodeOptionalSegments(path){let segments=path.split("/");if(segments.length===0)return[];let[first,...rest]=segments,isOptional=first.endsWith("?"),required=first.replace(/\?$/,"");if(rest.length===0)return isOptional?[required,""]:[required];let restExploded=explodeOptionalSegments(rest.join("/")),result=[];return result.push(...restExploded.map(subpath=>subpath===""?required:[required,subpath].join("/"))),isOptional&&result.push(...restExploded),result.map(exploded=>path.startsWith("/")&&exploded===""?"/":exploded)}function rankRouteBranches(branches){branches.sort((a,b)=>a.score!==b.score?b.score-a.score:compareIndexes(a.routesMeta.map(meta=>meta.childrenIndex),b.routesMeta.map(meta=>meta.childrenIndex)))}var paramRe=/^:[\w-]+$/,dynamicSegmentValue=3,indexRouteValue=2,emptySegmentValue=1,staticSegmentValue=10,splatPenalty=-2,isSplat=s=>s==="*";function computeScore(path,index){let segments=path.split("/"),initialScore=segments.length;return segments.some(isSplat)&&(initialScore+=splatPenalty),index&&(initialScore+=indexRouteValue),segments.filter(s=>!isSplat(s)).reduce((score,segment)=>score+(paramRe.test(segment)?dynamicSegmentValue:segment===""?emptySegmentValue:staticSegmentValue),initialScore)}function compareIndexes(a,b){return a.length===b.length&&a.slice(0,-1).every((n,i)=>n===b[i])?a[a.length-1]-b[b.length-1]:0}function matchRouteBranch(branch,pathname,allowPartial=!1){let{routesMeta}=branch,matchedParams={},matchedPathname="/",matches=[];for(let i=0;i<routesMeta.length;++i){let meta=routesMeta[i],end=i===routesMeta.length-1,remainingPathname=matchedPathname==="/"?pathname:pathname.slice(matchedPathname.length)||"/",pattern={path:meta.relativePath,caseSensitive:meta.caseSensitive,end},match=meta.matcher&&meta.compiledParams?matchPathImpl(pattern,remainingPathname,meta.matcher,meta.compiledParams):matchPath(pattern,remainingPathname),route=meta.route;if(!match&&end&&allowPartial&&!routesMeta[routesMeta.length-1].route.index&&(match=matchPath({path:meta.relativePath,caseSensitive:meta.caseSensitive,end:!1},remainingPathname)),!match)return null;Object.assign(matchedParams,match.params),matches.push({params:matchedParams,pathname:joinPaths([matchedPathname,match.pathname]),pathnameBase:normalizePathname(joinPaths([matchedPathname,match.pathnameBase])),route}),match.pathnameBase!=="/"&&(matchedPathname=joinPaths([matchedPathname,match.pathnameBase]))}return matches}function generatePath(originalPath,params={}){let path=originalPath;path.endsWith("*")&&path!=="*"&&!path.endsWith("/*")&&(warning(!1,`Route path "${path}" will be treated as if it were "${path.replace(/\*$/,"/*")}" because the \`*\` character must always follow a \`/\` in the pattern. To get rid of this warning, please change the route path to "${path.replace(/\*$/,"/*")}".`),path=path.replace(/\*$/,"/*"));let prefix=path.startsWith("/")?"/":"",stringify2=p=>p==null?"":typeof p=="string"?p:String(p),segments=path.split(/\/+/).map((segment,index,array)=>{if(index===array.length-1&&segment==="*")return stringify2(params["*"]);let keyMatch=segment.match(/^:([\w-]+)(\??)(.*)/);if(keyMatch){let[,key,optional,suffix]=keyMatch,param=params[key];return invariant(optional==="?"||param!=null,`Missing ":${key}" param`),encodeURIComponent(stringify2(param))+suffix}return segment.replace(/\?$/g,"")}).filter(segment=>!!segment);return prefix+segments.join("/")}function matchPath(pattern,pathname){typeof pattern=="string"&&(pattern={path:pattern,caseSensitive:!1,end:!0});let[matcher,compiledParams]=compilePath(pattern.path,pattern.caseSensitive,pattern.end);return matchPathImpl(pattern,pathname,matcher,compiledParams)}function matchPathImpl(pattern,pathname,matcher,compiledParams){let match=pathname.match(matcher);if(!match)return null;let matchedPathname=match[0],pathnameBase=matchedPathname.replace(/(.)\/+$/,"$1"),captureGroups=match.slice(1);return{params:compiledParams.reduce((memo2,{paramName,isOptional},index)=>{if(paramName==="*"){let splatValue=captureGroups[index]||"";pathnameBase=matchedPathname.slice(0,matchedPathname.length-splatValue.length).replace(/(.)\/+$/,"$1")}let value=captureGroups[index];return isOptional&&!value?memo2[paramName]=void 0:memo2[paramName]=(value||"").replace(/%2F/g,"/"),memo2},{}),pathname:matchedPathname,pathnameBase,pattern}}function compilePath(path,caseSensitive=!1,end=!0){warning(path==="*"||!path.endsWith("*")||path.endsWith("/*"),`Route path "${path}" will be treated as if it were "${path.replace(/\*$/,"/*")}" because the \`*\` character must always follow a \`/\` in the pattern. To get rid of this warning, please change the route path to "${path.replace(/\*$/,"/*")}".`);let params=[],regexpSource="^"+path.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(match,paramName,isOptional,index,str)=>{if(params.push({paramName,isOptional:isOptional!=null}),isOptional){let nextChar=str.charAt(index+match.length);return nextChar&&nextChar!=="/"?"/([^\\/]*)":"(?:/([^\\/]*))?"}return"/([^\\/]+)"}).replace(/\/([\w-]+)\?(\/|$)/g,"(/$1)?$2");return path.endsWith("*")?(params.push({paramName:"*"}),regexpSource+=path==="*"||path==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):end?regexpSource+="\\/*$":path!==""&&path!=="/"&&(regexpSource+="(?:(?=\\/|$))"),[new RegExp(regexpSource,caseSensitive?void 0:"i"),params]}function decodePath(value){try{return value.split("/").map(v=>decodeURIComponent(v).replace(/\//g,"%2F")).join("/")}catch(error){return warning(!1,`The URL path "${value}" could not be decoded because it is a malformed URL segment. This is probably due to a bad percent encoding (${error}).`),value}}function stripBasename(pathname,basename){if(basename==="/")return pathname;if(!pathname.toLowerCase().startsWith(basename.toLowerCase()))return null;let startIndex=basename.endsWith("/")?basename.length-1:basename.length,nextChar=pathname.charAt(startIndex);return nextChar&&nextChar!=="/"?null:pathname.slice(startIndex)||"/"}function prependBasename({basename,pathname}){return pathname==="/"?basename:joinPaths([basename,pathname])}var isAbsoluteUrl=url=>ABSOLUTE_URL_REGEX.test(url);function resolvePath(to,fromPathname="/"){let{pathname:toPathname,search="",hash=""}=typeof to=="string"?parsePath(to):to,pathname;return toPathname?(toPathname=removeDoubleSlashes(toPathname),toPathname.startsWith("/")?pathname=resolvePathname(toPathname.substring(1),"/"):pathname=resolvePathname(toPathname,fromPathname)):pathname=fromPathname,{pathname,search:normalizeSearch(search),hash:normalizeHash(hash)}}function resolvePathname(relativePath,fromPathname){let segments=removeTrailingSlash(fromPathname).split("/");return relativePath.split("/").forEach(segment=>{segment===".."?segments.length>1&&segments.pop():segment!=="."&&segments.push(segment)}),segments.length>1?segments.join("/"):"/"}function getInvalidPathError(char,field,dest,path){return`Cannot include a '${char}' character in a manually specified \`to.${field}\` field [${JSON.stringify(path)}]. Please separate it out to the \`to.${dest}\` field. Alternatively you may provide the full path as a string in <Link to="..."> and the router will parse it for you.`}function getPathContributingMatches(matches){return matches.filter((match,index)=>index===0||match.route.path&&match.route.path.length>0)}function getResolveToMatches(matches){let pathMatches=getPathContributingMatches(matches);return pathMatches.map((match,idx)=>idx===pathMatches.length-1?match.pathname:match.pathnameBase)}function resolveTo(toArg,routePathnames,locationPathname,isPathRelative=!1){let to;typeof toArg=="string"?to=parsePath(toArg):(to={...toArg},invariant(!to.pathname||!to.pathname.includes("?"),getInvalidPathError("?","pathname","search",to)),invariant(!to.pathname||!to.pathname.includes("#"),getInvalidPathError("#","pathname","hash",to)),invariant(!to.search||!to.search.includes("#"),getInvalidPathError("#","search","hash",to)));let isEmptyPath=toArg===""||to.pathname==="",toPathname=isEmptyPath?"/":to.pathname,from;if(toPathname==null)from=locationPathname;else{let routePathnameIndex=routePathnames.length-1;if(!isPathRelative&&toPathname.startsWith("..")){let toSegments=toPathname.split("/");for(;toSegments[0]==="..";)toSegments.shift(),routePathnameIndex-=1;to.pathname=toSegments.join("/")}from=routePathnameIndex>=0?routePathnames[routePathnameIndex]:"/"}let path=resolvePath(to,from),hasExplicitTrailingSlash=toPathname&&toPathname!=="/"&&toPathname.endsWith("/"),hasCurrentTrailingSlash=(isEmptyPath||toPathname===".")&&locationPathname.endsWith("/");return!path.pathname.endsWith("/")&&(hasExplicitTrailingSlash||hasCurrentTrailingSlash)&&(path.pathname+="/"),path}var removeDoubleSlashes=path=>path.replace(/[\\/]{2,}/g,"/"),joinPaths=paths=>removeDoubleSlashes(paths.join("/")),removeTrailingSlash=path=>path.replace(/\/+$/,""),normalizePathname=pathname=>removeTrailingSlash(pathname).replace(/^\/*/,"/"),normalizeSearch=search=>!search||search==="?"?"":search.startsWith("?")?search:"?"+search,normalizeHash=hash=>!hash||hash==="#"?"":hash.startsWith("#")?hash:"#"+hash,DataWithResponseInit=class{constructor(data2,init){this.type="DataWithResponseInit",this.data=data2,this.init=init||null}};function data(data2,init){return new DataWithResponseInit(data2,typeof init=="number"?{status:init}:init)}var redirect=(url,init=302)=>{let responseInit=init;typeof responseInit=="number"?responseInit={status:responseInit}:typeof responseInit.status>"u"&&(responseInit.status=302);let headers=new Headers(responseInit.headers);return headers.set("Location",url),new Response(null,{...responseInit,headers})},redirectDocument=(url,init)=>{let response=redirect(url,init);return response.headers.set("X-Remix-Reload-Document","true"),response},replace=(url,init)=>{let response=redirect(url,init);return response.headers.set("X-Remix-Replace","true"),response},SUPPORTED_ERROR_TYPES=["EvalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],ErrorResponseImpl=class{constructor(status,statusText,data2,internal=!1){this.status=status,this.statusText=statusText||"",this.internal=internal,data2 instanceof Error?(this.data=data2.toString(),this.error=data2):this.data=data2}};function isRouteErrorResponse(error){return error!=null&&typeof error.status=="number"&&typeof error.statusText=="string"&&typeof error.internal=="boolean"&&"data"in error}function getRoutePattern(matches){let parts=matches.map(m=>m.route.path).filter(Boolean);return joinPaths(parts)||"/"}var isBrowser=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u";function parseToInfo(_to,basename){let to=_to;if(typeof to!="string"||!ABSOLUTE_URL_REGEX.test(to))return{absoluteURL:void 0,isExternal:!1,to};let absoluteURL=to,isExternal=!1;if(isBrowser)try{let currentUrl=new URL(window.location.href),targetUrl=PROTOCOL_RELATIVE_URL_REGEX.test(to)?new URL(normalizeProtocolRelativeUrl(to,currentUrl.protocol)):new URL(to),path=stripBasename(targetUrl.pathname,basename);targetUrl.origin===currentUrl.origin&&path!=null?to=path+targetUrl.search+targetUrl.hash:isExternal=!0}catch{warning(!1,`<Link to="${to}"> contains an invalid URL which will probably break when clicked - please update to a valid URL path.`)}return{absoluteURL,isExternal,to}}var UninstrumentedSymbol=Symbol("Uninstrumented");function getRouteInstrumentationUpdates(fns,route){let aggregated={lazy:[],"lazy.loader":[],"lazy.action":[],"lazy.middleware":[],middleware:[],loader:[],action:[]};fns.forEach(fn=>fn({id:route.id,index:route.index,path:route.path,instrument(i){let keys=Object.keys(aggregated);for(let key of keys)i[key]&&aggregated[key].push(i[key])}}));let updates={};if(typeof route.lazy=="function"&&aggregated.lazy.length>0){let instrumented=wrapImpl(aggregated.lazy,route.lazy,()=>{});instrumented&&(updates.lazy=instrumented)}if(typeof route.lazy=="object"){let lazyObject=route.lazy;["middleware","loader","action"].forEach(key=>{let lazyFn=lazyObject[key],instrumentations=aggregated[`lazy.${key}`];if(typeof lazyFn=="function"&&instrumentations.length>0){let instrumented=wrapImpl(instrumentations,lazyFn,()=>{});instrumented&&(updates.lazy=Object.assign(updates.lazy||{},{[key]:instrumented}))}})}return["loader","action"].forEach(key=>{let handler=route[key];if(typeof handler=="function"&&aggregated[key].length>0){let original=handler[UninstrumentedSymbol]??handler,instrumented=wrapImpl(aggregated[key],original,(...args)=>getHandlerInfo(args[0]));instrumented&&(key==="loader"&&original.hydrate===!0&&(instrumented.hydrate=!0),instrumented[UninstrumentedSymbol]=original,updates[key]=instrumented)}}),route.middleware&&route.middleware.length>0&&aggregated.middleware.length>0&&(updates.middleware=route.middleware.map(middleware=>{let original=middleware[UninstrumentedSymbol]??middleware,instrumented=wrapImpl(aggregated.middleware,original,(...args)=>getHandlerInfo(args[0]));return instrumented?(instrumented[UninstrumentedSymbol]=original,instrumented):middleware})),updates}function instrumentClientSideRouter(router,fns){let aggregated={navigate:[],fetch:[]};if(fns.forEach(fn=>fn({instrument(i){let keys=Object.keys(i);for(let key of keys)i[key]&&aggregated[key].push(i[key])}})),aggregated.navigate.length>0){let navigate=router.navigate[UninstrumentedSymbol]??router.navigate,instrumentedNavigate=wrapImpl(aggregated.navigate,navigate,(...args)=>{let[to,opts]=args;return{to:typeof to=="number"||typeof to=="string"?to:to?createPath(to):".",...getRouterInfo(router,opts??{})}});instrumentedNavigate&&(instrumentedNavigate[UninstrumentedSymbol]=navigate,router.navigate=instrumentedNavigate)}if(aggregated.fetch.length>0){let fetch2=router.fetch[UninstrumentedSymbol]??router.fetch,instrumentedFetch=wrapImpl(aggregated.fetch,fetch2,(...args)=>{let[key,,href2,opts]=args;return{href:href2??".",fetcherKey:key,...getRouterInfo(router,opts??{})}});instrumentedFetch&&(instrumentedFetch[UninstrumentedSymbol]=fetch2,router.fetch=instrumentedFetch)}return router}function instrumentHandler(handler,fns){let aggregated={request:[]};fns.forEach(fn=>fn({instrument(i){let keys=Object.keys(i);for(let key of keys)i[key]&&aggregated[key].push(i[key])}}));let instrumentedHandler=handler;return aggregated.request.length>0&&(instrumentedHandler=wrapImpl(aggregated.request,handler,(...args)=>{let[request,context]=args;return{request:getReadonlyRequest(request),context:context!=null?getReadonlyContext(context):context}})),instrumentedHandler}function wrapImpl(impls,handler,getInfo){return impls.length===0?null:async(...args)=>{let result=await recurseRight(impls,getInfo(...args),()=>handler(...args),impls.length-1);if(result.type==="error")throw result.value;return result.value}}async function recurseRight(impls,info,handler,index){let impl=impls[index],result;if(impl){let handlerPromise,callHandler=async()=>(handlerPromise?console.error("You cannot call instrumented handlers more than once"):handlerPromise=recurseRight(impls,info,handler,index-1),result=await handlerPromise,invariant(result,"Expected a result"),result.type==="error"&&result.value instanceof Error?{status:"error",error:result.value}:{status:"success",error:void 0});try{await impl(callHandler,info)}catch(e){console.error("An instrumentation function threw an error:",e)}handlerPromise||await callHandler(),await handlerPromise}else try{result={type:"success",value:await handler()}}catch(e){result={type:"error",value:e}}return result||{type:"error",value:new Error("No result assigned in instrumentation chain.")}}function getHandlerInfo(args){let{request,context,params,pattern}=args;return{request:getReadonlyRequest(request),params:{...params},pattern,context:getReadonlyContext(context)}}function getRouterInfo(router,opts){return{currentUrl:createPath(router.state.location),..."formMethod"in opts?{formMethod:opts.formMethod}:{},..."formEncType"in opts?{formEncType:opts.formEncType}:{},..."formData"in opts?{formData:opts.formData}:{},..."body"in opts?{body:opts.body}:{}}}function getReadonlyRequest(request){return{method:request.method,url:request.url,headers:{get:(...args)=>request.headers.get(...args)}}}function getReadonlyContext(context){if(isPlainObject(context)){let frozen={...context};return Object.freeze(frozen),frozen}else return{get:ctx=>context.get(ctx)}}var objectProtoNames=Object.getOwnPropertyNames(Object.prototype).sort().join("\0");function isPlainObject(thing){if(thing===null||typeof thing!="object")return!1;let proto=Object.getPrototypeOf(thing);return proto===Object.prototype||proto===null||Object.getOwnPropertyNames(proto).sort().join("\0")===objectProtoNames}var validMutationMethodsArr=["POST","PUT","PATCH","DELETE"],validMutationMethods=new Set(validMutationMethodsArr),validRequestMethodsArr=["GET",...validMutationMethodsArr],validRequestMethods=new Set(validRequestMethodsArr),redirectStatusCodes=new Set([301,302,303,307,308]),redirectPreserveMethodStatusCodes=new Set([307,308]),IDLE_NAVIGATION={state:"idle",location:void 0,matches:void 0,historyAction:void 0,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0},IDLE_FETCHER={state:"idle",data:void 0,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0},IDLE_BLOCKER={state:"unblocked",proceed:void 0,reset:void 0,location:void 0},defaultMapRouteProperties=route=>({hasErrorBoundary:!!route.hasErrorBoundary}),TRANSITIONS_STORAGE_KEY="remix-router-transitions",ResetLoaderDataSymbol=Symbol("ResetLoaderData"),_routes,_branches,_hmrRoutes,_hmrBranches,DataRoutes=class{constructor(routes){__privateAdd(this,_routes),__privateAdd(this,_branches),__privateAdd(this,_hmrRoutes),__privateAdd(this,_hmrBranches),__privateSet(this,_routes,routes),__privateSet(this,_branches,flattenAndRankRoutes(routes))}get stableRoutes(){return __privateGet(this,_routes)}get activeRoutes(){return __privateGet(this,_hmrRoutes)??__privateGet(this,_routes)}get branches(){return __privateGet(this,_hmrBranches)??__privateGet(this,_branches)}get hasHMRRoutes(){return __privateGet(this,_hmrRoutes)!=null}setRoutes(routes){__privateSet(this,_routes,routes),__privateSet(this,_branches,flattenAndRankRoutes(routes))}setHmrRoutes(routes){__privateSet(this,_hmrRoutes,routes),__privateSet(this,_hmrBranches,flattenAndRankRoutes(routes))}commitHmrRoutes(){__privateGet(this,_hmrRoutes)&&(__privateSet(this,_routes,__privateGet(this,_hmrRoutes)),__privateSet(this,_branches,__privateGet(this,_hmrBranches)),__privateSet(this,_hmrRoutes,void 0),__privateSet(this,_hmrBranches,void 0))}};_routes=new WeakMap;_branches=new WeakMap;_hmrRoutes=new WeakMap;_hmrBranches=new WeakMap;function createRouter(init){let routerWindow=init.window?init.window:typeof window<"u"?window:void 0,isBrowser3=typeof routerWindow<"u"&&typeof routerWindow.document<"u"&&typeof routerWindow.document.createElement<"u";invariant(init.routes.length>0,"You must provide a non-empty routes array to createRouter");let hydrationRouteProperties2=init.hydrationRouteProperties||[],_mapRouteProperties=init.mapRouteProperties||defaultMapRouteProperties,mapRouteProperties2=_mapRouteProperties;if(init.instrumentations){let instrumentations=init.instrumentations;mapRouteProperties2=route=>({..._mapRouteProperties(route),...getRouteInstrumentationUpdates(instrumentations.map(i=>i.route).filter(Boolean),route)})}let manifest={},dataRoutes=new DataRoutes(convertRoutesToDataRoutes(init.routes,mapRouteProperties2,void 0,manifest)),basename=init.basename||"/";basename.startsWith("/")||(basename=`/${basename}`);let dataStrategyImpl=init.dataStrategy||defaultDataStrategyWithMiddleware,future={...init.future},unlistenHistory=null,subscribers=new Set,bufferedInitialStateUpdate=null,savedScrollPositions2=null,getScrollRestorationKey2=null,getScrollPosition=null,initialScrollRestored=init.hydrationData!=null,initialMatches=matchRoutesImpl(dataRoutes.activeRoutes,init.history.location,basename,!1,dataRoutes.branches),initialMatchesIsFOW=!1,initialErrors=null,initialized,renderFallback;if(initialMatches==null&&!init.patchRoutesOnNavigation){let error=getInternalRouterError(404,{pathname:init.history.location.pathname}),{matches,route}=getShortCircuitMatches(dataRoutes.activeRoutes);initialized=!0,renderFallback=!initialized,initialMatches=matches,initialErrors={[route.id]:error}}else if(initialMatches&&!init.hydrationData&&checkFogOfWar(initialMatches,dataRoutes.activeRoutes,init.history.location.pathname).active&&(initialMatches=null),initialMatches)if(initialMatches.some(m=>m.route.lazy))initialized=!1,renderFallback=!initialized;else if(!initialMatches.some(m=>routeHasLoaderOrMiddleware(m.route)))initialized=!0,renderFallback=!initialized;else{let loaderData=init.hydrationData?init.hydrationData.loaderData:null,errors=init.hydrationData?init.hydrationData.errors:null,relevantMatches=initialMatches;if(errors){let idx=initialMatches.findIndex(m=>errors[m.route.id]!==void 0);relevantMatches=relevantMatches.slice(0,idx+1)}renderFallback=!1,initialized=!0,relevantMatches.forEach(m=>{let status=getRouteHydrationStatus(m.route,loaderData,errors);renderFallback=renderFallback||status.renderFallback,initialized=initialized&&!status.shouldLoad})}else{initialized=!1,renderFallback=!initialized,initialMatches=[];let fogOfWar=checkFogOfWar(null,dataRoutes.activeRoutes,init.history.location.pathname);fogOfWar.active&&fogOfWar.matches&&(initialMatchesIsFOW=!0,initialMatches=fogOfWar.matches)}let router,state={historyAction:init.history.action,location:init.history.location,matches:initialMatches,initialized,renderFallback,navigation:IDLE_NAVIGATION,restoreScrollPosition:init.hydrationData!=null?!1:null,preventScrollReset:!1,revalidation:"idle",loaderData:init.hydrationData&&init.hydrationData.loaderData||{},actionData:init.hydrationData&&init.hydrationData.actionData||null,errors:init.hydrationData&&init.hydrationData.errors||initialErrors,fetchers:new Map,blockers:new Map},pendingAction="POP",pendingPopstateNavigationDfd=null,pendingPreventScrollReset=!1,pendingNavigationController,pendingViewTransitionEnabled=!1,appliedViewTransitions=new Map,removePageHideEventListener=null,isUninterruptedRevalidation=!1,isRevalidationRequired=!1,cancelledFetcherLoads=new Set,fetchControllers=new Map,incrementingLoadId=0,pendingNavigationLoadId=-1,fetchReloadIds=new Map,fetchRedirectIds=new Set,fetchLoadMatches=new Map,activeFetchers=new Map,fetchersQueuedForDeletion=new Set,blockerFunctions=new Map,unblockBlockerHistoryUpdate,pendingRevalidationDfd=null;function initialize(){if(unlistenHistory=init.history.listen(({action:historyAction,location,delta})=>{if(unblockBlockerHistoryUpdate){unblockBlockerHistoryUpdate(),unblockBlockerHistoryUpdate=void 0;return}warning(blockerFunctions.size===0||delta!=null,"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 blockerKey=shouldBlockNavigation({currentLocation:state.location,nextLocation:location,historyAction});if(blockerKey&&delta!=null){let nextHistoryUpdatePromise=new Promise(resolve=>{unblockBlockerHistoryUpdate=resolve});init.history.go(delta*-1),updateBlocker(blockerKey,{state:"blocked",location,proceed(){updateBlocker(blockerKey,{state:"proceeding",proceed:void 0,reset:void 0,location}),nextHistoryUpdatePromise.then(()=>init.history.go(delta))},reset(){let blockers=new Map(state.blockers);blockers.set(blockerKey,IDLE_BLOCKER),updateState({blockers})}}),pendingPopstateNavigationDfd?.resolve(),pendingPopstateNavigationDfd=null;return}return startNavigation(historyAction,location)}),isBrowser3){restoreAppliedTransitions(routerWindow,appliedViewTransitions);let _saveAppliedTransitions=()=>persistAppliedTransitions(routerWindow,appliedViewTransitions);routerWindow.addEventListener("pagehide",_saveAppliedTransitions),removePageHideEventListener=()=>routerWindow.removeEventListener("pagehide",_saveAppliedTransitions)}return state.initialized||startNavigation("POP",state.location,{initialHydration:!0}),router}function dispose(){unlistenHistory&&unlistenHistory(),removePageHideEventListener&&removePageHideEventListener(),subscribers.clear(),pendingNavigationController&&pendingNavigationController.abort(),state.fetchers.forEach((_,key)=>deleteFetcher(state.fetchers,key)),state.blockers.forEach((_,key)=>deleteBlocker(key))}function subscribe(fn){if(subscribers.add(fn),bufferedInitialStateUpdate){let{newErrors}=bufferedInitialStateUpdate;bufferedInitialStateUpdate=null,fn(state,{deletedFetchers:[],newErrors,viewTransitionOpts:void 0,flushSync:!1})}return()=>subscribers.delete(fn)}function updateState(newState,opts={}){newState.matches&&(newState.matches=newState.matches.map(m=>{let route=manifest[m.route.id],matchRoute=m.route;return matchRoute.element!==route.element||matchRoute.errorElement!==route.errorElement||matchRoute.hydrateFallbackElement!==route.hydrateFallbackElement?{...m,route}:m})),state={...state,...newState};let unmountedFetchers=[],mountedFetchers=[];state.fetchers.forEach((fetcher,key)=>{fetcher.state==="idle"&&(fetchersQueuedForDeletion.has(key)?unmountedFetchers.push(key):mountedFetchers.push(key))}),fetchersQueuedForDeletion.forEach(key=>{!state.fetchers.has(key)&&!fetchControllers.has(key)&&unmountedFetchers.push(key)}),subscribers.size===0&&(bufferedInitialStateUpdate={newErrors:newState.errors??null}),[...subscribers].forEach(subscriber=>subscriber(state,{deletedFetchers:unmountedFetchers,newErrors:newState.errors??null,viewTransitionOpts:opts.viewTransitionOpts,flushSync:opts.flushSync===!0})),unmountedFetchers.forEach(key=>deleteFetcher(state.fetchers,key)),mountedFetchers.forEach(key=>state.fetchers.delete(key))}function completeNavigation(location,newState,{flushSync}={}){let isActionReload=state.actionData!=null&&state.navigation.formMethod!=null&&isMutationMethod(state.navigation.formMethod)&&state.navigation.state==="loading"&&location.state?._isRedirect!==!0,actionData;newState.actionData?Object.keys(newState.actionData).length>0?actionData=newState.actionData:actionData=null:isActionReload?actionData=state.actionData:actionData=null;let loaderData=newState.loaderData?mergeLoaderData(state.loaderData,newState.loaderData,newState.matches||[],newState.errors):state.loaderData,blockers=state.blockers;blockers.size>0&&(blockers=new Map(blockers),blockers.forEach((_,k)=>blockers.set(k,IDLE_BLOCKER)));let restoreScrollPosition=isUninterruptedRevalidation?!1:getSavedScrollPosition(location,newState.matches||state.matches),preventScrollReset=pendingPreventScrollReset===!0||state.navigation.formMethod!=null&&isMutationMethod(state.navigation.formMethod)&&location.state?._isRedirect!==!0;dataRoutes.commitHmrRoutes(),isUninterruptedRevalidation||pendingAction==="POP"||(pendingAction==="PUSH"?init.history.push(location,location.state):pendingAction==="REPLACE"&&init.history.replace(location,location.state));let viewTransitionOpts;if(pendingAction==="POP"){let priorPaths=appliedViewTransitions.get(state.location.pathname);priorPaths&&priorPaths.has(location.pathname)?viewTransitionOpts={currentLocation:state.location,nextLocation:location}:appliedViewTransitions.has(location.pathname)&&(viewTransitionOpts={currentLocation:location,nextLocation:state.location})}else if(pendingViewTransitionEnabled){let toPaths=appliedViewTransitions.get(state.location.pathname);toPaths?toPaths.add(location.pathname):(toPaths=new Set([location.pathname]),appliedViewTransitions.set(state.location.pathname,toPaths)),viewTransitionOpts={currentLocation:state.location,nextLocation:location}}updateState({...newState,actionData,loaderData,historyAction:pendingAction,location,initialized:!0,renderFallback:!1,navigation:IDLE_NAVIGATION,revalidation:"idle",restoreScrollPosition,preventScrollReset,blockers},{viewTransitionOpts,flushSync:flushSync===!0}),pendingAction="POP",pendingPreventScrollReset=!1,pendingViewTransitionEnabled=!1,isUninterruptedRevalidation=!1,isRevalidationRequired=!1,pendingPopstateNavigationDfd?.resolve(),pendingPopstateNavigationDfd=null,pendingRevalidationDfd?.resolve(),pendingRevalidationDfd=null}async function navigate(to,opts){if(pendingPopstateNavigationDfd?.resolve(),pendingPopstateNavigationDfd=null,typeof to=="number"){pendingPopstateNavigationDfd||(pendingPopstateNavigationDfd=createDeferred());let promise=pendingPopstateNavigationDfd.promise;return init.history.go(to),promise}let normalizedPath=normalizeTo(state.location,state.matches,basename,to,opts?.fromRouteId,opts?.relative),{path,submission,error}=normalizeNavigateOptions(!1,normalizedPath,opts),maskPath;opts?.mask&&(maskPath={pathname:"",search:"",hash:"",...typeof opts.mask=="string"?parsePath(opts.mask):{...state.location.mask,...opts.mask}});let currentLocation=state.location,nextLocation=createLocation(currentLocation,path,opts&&opts.state,void 0,maskPath);nextLocation={...nextLocation,...init.history.encodeLocation(nextLocation)};let userReplace=opts&&opts.replace!=null?opts.replace:void 0,historyAction="PUSH";userReplace===!0?historyAction="REPLACE":userReplace===!1||submission!=null&&isMutationMethod(submission.formMethod)&&submission.formAction===state.location.pathname+state.location.search&&(historyAction="REPLACE");let preventScrollReset=opts&&"preventScrollReset"in opts?opts.preventScrollReset===!0:void 0,flushSync=(opts&&opts.flushSync)===!0,blockerKey=shouldBlockNavigation({currentLocation,nextLocation,historyAction});if(blockerKey){updateBlocker(blockerKey,{state:"blocked",location:nextLocation,proceed(){updateBlocker(blockerKey,{state:"proceeding",proceed:void 0,reset:void 0,location:nextLocation}),navigate(to,opts)},reset(){let blockers=new Map(state.blockers);blockers.set(blockerKey,IDLE_BLOCKER),updateState({blockers})}});return}await startNavigation(historyAction,nextLocation,{submission,pendingError:error,preventScrollReset,replace:opts&&opts.replace,enableViewTransition:opts&&opts.viewTransition,flushSync,callSiteDefaultShouldRevalidate:opts&&opts.defaultShouldRevalidate})}function revalidate(){pendingRevalidationDfd||(pendingRevalidationDfd=createDeferred()),interruptActiveLoads(),updateState({revalidation:"loading"});let promise=pendingRevalidationDfd.promise;return state.navigation.state==="submitting"?promise:state.navigation.state==="idle"?(startNavigation(state.historyAction,state.location,{startUninterruptedRevalidation:!0}),promise):(startNavigation(pendingAction||state.historyAction,state.navigation.location,{overrideNavigation:state.navigation,enableViewTransition:pendingViewTransitionEnabled===!0}),promise)}async function startNavigation(historyAction,location,opts){pendingNavigationController&&pendingNavigationController.abort(),pendingNavigationController=null,pendingAction=historyAction,isUninterruptedRevalidation=(opts&&opts.startUninterruptedRevalidation)===!0,saveScrollPosition(state.location,state.matches),pendingPreventScrollReset=(opts&&opts.preventScrollReset)===!0,pendingViewTransitionEnabled=(opts&&opts.enableViewTransition)===!0;let routesToUse=dataRoutes.activeRoutes,matches=opts?.initialHydration&&state.matches&&state.matches.length>0&&!initialMatchesIsFOW?state.matches:matchRoutesImpl(routesToUse,location,basename,!1,dataRoutes.branches),flushSync=(opts&&opts.flushSync)===!0;if(matches&&state.initialized&&!isRevalidationRequired&&isHashChangeOnly(state.location,location)&&!(opts&&opts.submission&&isMutationMethod(opts.submission.formMethod))){completeNavigation(location,{matches},{flushSync});return}let fogOfWar=checkFogOfWar(matches,routesToUse,location.pathname);if(fogOfWar.active&&fogOfWar.matches&&(matches=fogOfWar.matches),!matches){let{error,notFoundMatches,route}=handleNavigational404(location.pathname);completeNavigation(location,{matches:notFoundMatches,loaderData:{},errors:{[route.id]:error}},{flushSync});return}let loadingNavigation=opts&&opts.overrideNavigation?{...opts.overrideNavigation,matches,historyAction}:void 0;pendingNavigationController=new AbortController;let request=createClientSideRequest(init.history,location,pendingNavigationController.signal,opts&&opts.submission),scopedContext=init.getContext?await init.getContext():new RouterContextProvider,pendingActionResult;if(opts&&opts.pendingError)pendingActionResult=[findNearestBoundary(matches).route.id,{type:"error",error:opts.pendingError}];else if(opts&&opts.submission&&isMutationMethod(opts.submission.formMethod)){let actionResult=await handleAction(request,location,opts.submission,matches,historyAction,scopedContext,fogOfWar.active,opts&&opts.initialHydration===!0,{replace:opts.replace,flushSync});if(actionResult.shortCircuited)return;if(actionResult.pendingActionResult){let[routeId,result]=actionResult.pendingActionResult;if(isErrorResult(result)&&isRouteErrorResponse(result.error)&&result.error.status===404){pendingNavigationController=null,completeNavigation(location,{matches:actionResult.matches,loaderData:{},errors:{[routeId]:result.error}});return}}matches=actionResult.matches||matches,pendingActionResult=actionResult.pendingActionResult,loadingNavigation=getLoadingNavigation(location,matches,historyAction,opts.submission),flushSync=!1,fogOfWar.active=!1,request=createClientSideRequest(init.history,request.url,request.signal)}let{shortCircuited,matches:updatedMatches,loaderData,errors,workingFetchers}=await handleLoaders(request,location,matches,historyAction,scopedContext,fogOfWar.active,loadingNavigation,opts&&opts.submission,opts&&opts.fetcherSubmission,opts&&opts.replace,opts&&opts.initialHydration===!0,flushSync,pendingActionResult,opts&&opts.callSiteDefaultShouldRevalidate);shortCircuited||(pendingNavigationController=null,completeNavigation(location,{matches:updatedMatches||matches,...getActionDataForCommit(pendingActionResult),loaderData,errors,...workingFetchers?{fetchers:workingFetchers}:{}}))}async function handleAction(request,location,submission,matches,historyAction,scopedContext,isFogOfWar,initialHydration,opts={}){interruptActiveLoads();let navigation=getSubmittingNavigation(location,matches,historyAction,submission);if(updateState({navigation},{flushSync:opts.flushSync===!0}),isFogOfWar){let discoverResult=await discoverRoutes(matches,location.pathname,request.signal);if(discoverResult.type==="aborted")return{shortCircuited:!0};if(discoverResult.type==="error"){if(discoverResult.partialMatches.length===0){let{matches:matches2,route}=getShortCircuitMatches(dataRoutes.activeRoutes);return{matches:matches2,pendingActionResult:[route.id,{type:"error",error:discoverResult.error}]}}let boundaryId=findNearestBoundary(discoverResult.partialMatches).route.id;return{matches:discoverResult.partialMatches,pendingActionResult:[boundaryId,{type:"error",error:discoverResult.error}]}}else if(discoverResult.matches)matches=discoverResult.matches;else{let{notFoundMatches,error,route}=handleNavigational404(location.pathname);return{matches:notFoundMatches,pendingActionResult:[route.id,{type:"error",error}]}}}let result,actionMatch=getTargetMatch(matches,location);if(!actionMatch.route.action&&!actionMatch.route.lazy)result={type:"error",error:getInternalRouterError(405,{method:request.method,pathname:location.pathname,routeId:actionMatch.route.id})};else{let dsMatches=getTargetedDataStrategyMatches(mapRouteProperties2,manifest,request,location,matches,actionMatch,initialHydration?[]:hydrationRouteProperties2,scopedContext),results=await callDataStrategy(request,location,dsMatches,scopedContext,null);if(result=results[actionMatch.route.id],!result){for(let match of matches)if(results[match.route.id]){result=results[match.route.id];break}}if(request.signal.aborted)return{shortCircuited:!0}}if(isRedirectResult(result)){let replace2;return opts&&opts.replace!=null?replace2=opts.replace:replace2=normalizeRedirectLocation(result.response.headers.get("Location"),new URL(request.url),basename,init.history)===state.location.pathname+state.location.search,await startRedirectNavigation(request,result,!0,{submission,replace:replace2}),{shortCircuited:!0}}if(isErrorResult(result)){let boundaryMatch=findNearestBoundary(matches,actionMatch.route.id);return(opts&&opts.replace)!==!0&&(pendingAction="PUSH"),{matches,pendingActionResult:[boundaryMatch.route.id,result,actionMatch.route.id]}}return{matches,pendingActionResult:[actionMatch.route.id,result]}}async function handleLoaders(request,location,matches,historyAction,scopedContext,isFogOfWar,overrideNavigation,submission,fetcherSubmission,replace2,initialHydration,flushSync,pendingActionResult,callSiteDefaultShouldRevalidate){let loadingNavigation=overrideNavigation||getLoadingNavigation(location,matches,historyAction,submission),activeSubmission=submission||fetcherSubmission||getSubmissionFromNavigation(loadingNavigation),shouldUpdateNavigationState=!isUninterruptedRevalidation&&!initialHydration;if(isFogOfWar){if(shouldUpdateNavigationState){let actionData=getUpdatedActionData(pendingActionResult);updateState({navigation:loadingNavigation,...actionData!==void 0?{actionData}:{}},{flushSync})}let discoverResult=await discoverRoutes(matches,location.pathname,request.signal);if(discoverResult.type==="aborted")return{shortCircuited:!0};if(discoverResult.type==="error"){if(discoverResult.partialMatches.length===0){let{matches:matches2,route}=getShortCircuitMatches(dataRoutes.activeRoutes);return{matches:matches2,loaderData:{},errors:{[route.id]:discoverResult.error}}}let boundaryId=findNearestBoundary(discoverResult.partialMatches).route.id;return{matches:discoverResult.partialMatches,loaderData:{},errors:{[boundaryId]:discoverResult.error}}}else if(discoverResult.matches)matches=discoverResult.matches;else{let{error,notFoundMatches,route}=handleNavigational404(location.pathname);return{matches:notFoundMatches,loaderData:{},errors:{[route.id]:error}}}}let routesToUse=dataRoutes.activeRoutes,{dsMatches,revalidatingFetchers}=getMatchesToLoad(request,scopedContext,mapRouteProperties2,manifest,init.history,state,matches,activeSubmission,location,initialHydration?[]:hydrationRouteProperties2,initialHydration===!0,isRevalidationRequired,cancelledFetcherLoads,fetchersQueuedForDeletion,fetchLoadMatches,fetchRedirectIds,routesToUse,basename,init.patchRoutesOnNavigation!=null,dataRoutes.branches,pendingActionResult,callSiteDefaultShouldRevalidate);if(pendingNavigationLoadId=++incrementingLoadId,!init.dataStrategy&&!dsMatches.some(m=>m.shouldLoad)&&!dsMatches.some(m=>m.route.middleware&&m.route.middleware.length>0)&&revalidatingFetchers.length===0){let workingFetchers2=new Map(state.fetchers),didUpdateFetcherRedirects2=markFetchRedirectsDone(workingFetchers2);return completeNavigation(location,{matches,loaderData:{},errors:pendingActionResult&&isErrorResult(pendingActionResult[1])?{[pendingActionResult[0]]:pendingActionResult[1].error}:null,...getActionDataForCommit(pendingActionResult),...didUpdateFetcherRedirects2?{fetchers:workingFetchers2}:{}},{flushSync}),{shortCircuited:!0}}if(shouldUpdateNavigationState){let updates={};if(!isFogOfWar){updates.navigation=loadingNavigation;let actionData=getUpdatedActionData(pendingActionResult);actionData!==void 0&&(updates.actionData=actionData)}revalidatingFetchers.length>0&&(updates.fetchers=getUpdatedRevalidatingFetchers(revalidatingFetchers)),updateState(updates,{flushSync})}revalidatingFetchers.forEach(rf=>{abortFetcher(rf.key),rf.controller&&fetchControllers.set(rf.key,rf.controller)});let abortPendingFetchRevalidations=()=>revalidatingFetchers.forEach(f=>abortFetcher(f.key));pendingNavigationController&&pendingNavigationController.signal.addEventListener("abort",abortPendingFetchRevalidations);let{loaderResults,fetcherResults}=await callLoadersAndMaybeResolveData(dsMatches,revalidatingFetchers,request,location,scopedContext);if(request.signal.aborted)return{shortCircuited:!0};pendingNavigationController&&pendingNavigationController.signal.removeEventListener("abort",abortPendingFetchRevalidations),revalidatingFetchers.forEach(rf=>fetchControllers.delete(rf.key));let redirect2=findRedirect(loaderResults);if(redirect2)return await startRedirectNavigation(request,redirect2.result,!0,{replace:replace2}),{shortCircuited:!0};if(redirect2=findRedirect(fetcherResults),redirect2)return fetchRedirectIds.add(redirect2.key),await startRedirectNavigation(request,redirect2.result,!0,{replace:replace2}),{shortCircuited:!0};let workingFetchers=new Map(state.fetchers),{loaderData,errors}=processLoaderData(state,matches,loaderResults,pendingActionResult,revalidatingFetchers,fetcherResults,workingFetchers);initialHydration&&state.errors&&(errors={...state.errors,...errors});let didUpdateFetcherRedirects=markFetchRedirectsDone(workingFetchers),didAbortFetchLoads=abortStaleFetchLoads(pendingNavigationLoadId,workingFetchers),shouldUpdateFetchers=didUpdateFetcherRedirects||didAbortFetchLoads||revalidatingFetchers.length>0;return{matches,loaderData,errors,...shouldUpdateFetchers?{workingFetchers}:{}}}function getUpdatedActionData(pendingActionResult){if(pendingActionResult&&!isErrorResult(pendingActionResult[1]))return{[pendingActionResult[0]]:pendingActionResult[1].data};if(state.actionData)return Object.keys(state.actionData).length===0?null:state.actionData}function getUpdatedRevalidatingFetchers(revalidatingFetchers){let workingFetchers=new Map(state.fetchers);return revalidatingFetchers.forEach(rf=>{let fetcher=workingFetchers.get(rf.key),revalidatingFetcher=getLoadingFetcher(void 0,fetcher?fetcher.data:void 0);workingFetchers.set(rf.key,revalidatingFetcher)}),workingFetchers}async function fetch2(key,routeId,href2,opts){abortFetcher(key);let flushSync=(opts&&opts.flushSync)===!0,routesToUse=dataRoutes.activeRoutes,normalizedPath=normalizeTo(state.location,state.matches,basename,href2,routeId,opts?.relative),matches=matchRoutesImpl(routesToUse,normalizedPath,basename,!1,dataRoutes.branches),fogOfWar=checkFogOfWar(matches,routesToUse,normalizedPath);if(fogOfWar.active&&fogOfWar.matches&&(matches=fogOfWar.matches),!matches){setFetcherError(key,routeId,getInternalRouterError(404,{pathname:normalizedPath}),{flushSync});return}let{path,submission,error}=normalizeNavigateOptions(!0,normalizedPath,opts);if(error){setFetcherError(key,routeId,error,{flushSync});return}let scopedContext=init.getContext?await init.getContext():new RouterContextProvider,preventScrollReset=(opts&&opts.preventScrollReset)===!0;if(submission&&isMutationMethod(submission.formMethod)){await handleFetcherAction(key,routeId,path,matches,scopedContext,fogOfWar.active,flushSync,preventScrollReset,submission,opts&&opts.defaultShouldRevalidate);return}fetchLoadMatches.set(key,{routeId,path}),await handleFetcherLoader(key,routeId,path,matches,scopedContext,fogOfWar.active,flushSync,preventScrollReset,submission)}async function handleFetcherAction(key,routeId,path,requestMatches,scopedContext,isFogOfWar,flushSync,preventScrollReset,submission,callSiteDefaultShouldRevalidate){interruptActiveLoads(),fetchLoadMatches.delete(key);let existingFetcher=state.fetchers.get(key);updateFetcherState(key,getSubmittingFetcher(submission,existingFetcher),{flushSync});let abortController=new AbortController,fetchRequest=createClientSideRequest(init.history,path,abortController.signal,submission);if(isFogOfWar){let discoverResult=await discoverRoutes(requestMatches,new URL(fetchRequest.url).pathname,fetchRequest.signal,key);if(discoverResult.type==="aborted")return;if(discoverResult.type==="error"){setFetcherError(key,routeId,discoverResult.error,{flushSync});return}else if(discoverResult.matches)requestMatches=discoverResult.matches;else{setFetcherError(key,routeId,getInternalRouterError(404,{pathname:path}),{flushSync});return}}let match=getTargetMatch(requestMatches,path);if(!match.route.action&&!match.route.lazy){let error=getInternalRouterError(405,{method:submission.formMethod,pathname:path,routeId});setFetcherError(key,routeId,error,{flushSync});return}fetchControllers.set(key,abortController);let originatingLoadId=incrementingLoadId,fetchMatches=getTargetedDataStrategyMatches(mapRouteProperties2,manifest,fetchRequest,path,requestMatches,match,hydrationRouteProperties2,scopedContext),actionResults=await callDataStrategy(fetchRequest,path,fetchMatches,scopedContext,key),actionResult=actionResults[match.route.id];if(!actionResult){for(let match2 of fetchMatches)if(actionResults[match2.route.id]){actionResult=actionResults[match2.route.id];break}}if(fetchRequest.signal.aborted){fetchControllers.get(key)===abortController&&fetchControllers.delete(key);return}if(fetchersQueuedForDeletion.has(key)){if(isRedirectResult(actionResult)||isErrorResult(actionResult)){updateFetcherState(key,getDoneFetcher(void 0));return}}else{if(isRedirectResult(actionResult))if(fetchControllers.delete(key),pendingNavigationLoadId>originatingLoadId){updateFetcherState(key,getDoneFetcher(void 0));return}else return fetchRedirectIds.add(key),updateFetcherState(key,getLoadingFetcher(submission)),startRedirectNavigation(fetchRequest,actionResult,!1,{fetcherSubmission:submission,preventScrollReset});if(isErrorResult(actionResult)){setFetcherError(key,routeId,actionResult.error);return}}let nextLocation=state.navigation.location||state.location,revalidationRequest=createClientSideRequest(init.history,nextLocation,abortController.signal),routesToUse=dataRoutes.activeRoutes,matches=state.navigation.state!=="idle"?matchRoutesImpl(routesToUse,state.navigation.location,basename,!1,dataRoutes.branches):state.matches;invariant(matches,"Didn't find any matches after fetcher action");let loadId=++incrementingLoadId;fetchReloadIds.set(key,loadId);let{dsMatches,revalidatingFetchers}=getMatchesToLoad(revalidationRequest,scopedContext,mapRouteProperties2,manifest,init.history,state,matches,submission,nextLocation,hydrationRouteProperties2,!1,isRevalidationRequired,cancelledFetcherLoads,fetchersQueuedForDeletion,fetchLoadMatches,fetchRedirectIds,routesToUse,basename,init.patchRoutesOnNavigation!=null,dataRoutes.branches,[match.route.id,actionResult],callSiteDefaultShouldRevalidate),loadFetcher=getLoadingFetcher(submission,actionResult.data),workingFetchers=new Map(state.fetchers);workingFetchers.set(key,loadFetcher),revalidatingFetchers.filter(rf=>rf.key!==key).forEach(rf=>{let staleKey=rf.key,existingFetcher2=workingFetchers.get(staleKey),revalidatingFetcher=getLoadingFetcher(void 0,existingFetcher2?existingFetcher2.data:void 0);workingFetchers.set(staleKey,revalidatingFetcher),abortFetcher(staleKey),rf.controller&&fetchControllers.set(staleKey,rf.controller)}),updateState({fetchers:workingFetchers});let abortPendingFetchRevalidations=()=>revalidatingFetchers.forEach(rf=>abortFetcher(rf.key));abortController.signal.addEventListener("abort",abortPendingFetchRevalidations);let{loaderResults,fetcherResults}=await callLoadersAndMaybeResolveData(dsMatches,revalidatingFetchers,revalidationRequest,nextLocation,scopedContext);if(abortController.signal.aborted)return;abortController.signal.removeEventListener("abort",abortPendingFetchRevalidations),fetchReloadIds.delete(key),fetchControllers.delete(key),revalidatingFetchers.forEach(r=>fetchControllers.delete(r.key));let fetcherIsMounted=state.fetchers.has(key),getRedirectStateWithDoneFetcher=s=>{if(!fetcherIsMounted)return s;let workingFetchers2=new Map(s.fetchers);return workingFetchers2.set(key,getDoneFetcher(actionResult.data)),{...s,fetchers:workingFetchers2}},redirect2=findRedirect(loaderResults);if(redirect2)return state=getRedirectStateWithDoneFetcher(state),startRedirectNavigation(revalidationRequest,redirect2.result,!1,{preventScrollReset});if(redirect2=findRedirect(fetcherResults),redirect2)return fetchRedirectIds.add(redirect2.key),state=getRedirectStateWithDoneFetcher(state),startRedirectNavigation(revalidationRequest,redirect2.result,!1,{preventScrollReset});let finalFetchers=new Map(state.fetchers);fetcherIsMounted&&finalFetchers.set(key,getDoneFetcher(actionResult.data));let{loaderData,errors}=processLoaderData(state,matches,loaderResults,void 0,revalidatingFetchers,fetcherResults,finalFetchers);abortStaleFetchLoads(loadId,finalFetchers),state.navigation.state==="loading"&&loadId>pendingNavigationLoadId?(invariant(pendingAction,"Expected pending action"),pendingNavigationController&&pendingNavigationController.abort(),completeNavigation(state.navigation.location,{matches,loaderData,errors,fetchers:finalFetchers})):(updateState({errors,loaderData:mergeLoaderData(state.loaderData,loaderData,matches,errors),fetchers:finalFetchers}),isRevalidationRequired=!1)}async function handleFetcherLoader(key,routeId,path,matches,scopedContext,isFogOfWar,flushSync,preventScrollReset,submission){let existingFetcher=state.fetchers.get(key);updateFetcherState(key,getLoadingFetcher(submission,existingFetcher?existingFetcher.data:void 0),{flushSync});let abortController=new AbortController,fetchRequest=createClientSideRequest(init.history,path,abortController.signal);if(isFogOfWar){let discoverResult=await discoverRoutes(matches,new URL(fetchRequest.url).pathname,fetchRequest.signal,key);if(discoverResult.type==="aborted")return;if(discoverResult.type==="error"){setFetcherError(key,routeId,discoverResult.error,{flushSync});return}else if(discoverResult.matches)matches=discoverResult.matches;else{setFetcherError(key,routeId,getInternalRouterError(404,{pathname:path}),{flushSync});return}}let match=getTargetMatch(matches,path);fetchControllers.set(key,abortController);let originatingLoadId=incrementingLoadId,dsMatches=getTargetedDataStrategyMatches(mapRouteProperties2,manifest,fetchRequest,path,matches,match,hydrationRouteProperties2,scopedContext),results=await callDataStrategy(fetchRequest,path,dsMatches,scopedContext,key),result=results[match.route.id];if(!result){for(let match2 of matches)if(results[match2.route.id]){result=results[match2.route.id];break}}if(fetchControllers.get(key)===abortController&&fetchControllers.delete(key),!fetchRequest.signal.aborted){if(fetchersQueuedForDeletion.has(key)){updateFetcherState(key,getDoneFetcher(void 0));return}if(isRedirectResult(result))if(pendingNavigationLoadId>originatingLoadId){updateFetcherState(key,getDoneFetcher(void 0));return}else{fetchRedirectIds.add(key),await startRedirectNavigation(fetchRequest,result,!1,{preventScrollReset});return}if(isErrorResult(result)){setFetcherError(key,routeId,result.error);return}updateFetcherState(key,getDoneFetcher(result.data))}}async function startRedirectNavigation(request,redirect2,isNavigation,{submission,fetcherSubmission,preventScrollReset,replace:replace2}={}){isNavigation||(pendingPopstateNavigationDfd?.resolve(),pendingPopstateNavigationDfd=null),redirect2.response.headers.has("X-Remix-Revalidate")&&(isRevalidationRequired=!0);let location=redirect2.response.headers.get("Location");invariant(location,"Expected a Location header on the redirect Response"),location=normalizeRedirectLocation(location,new URL(request.url),basename,init.history);let redirectLocation=createLocation(state.location,location,{_isRedirect:!0});if(isBrowser3){let isDocumentReload=!1;if(redirect2.response.headers.has("X-Remix-Reload-Document"))isDocumentReload=!0;else if(isAbsoluteUrl(location)){let url=createBrowserURLImpl(routerWindow,location,!0);isDocumentReload=url.origin!==routerWindow.location.origin||stripBasename(url.pathname,basename)==null}if(isDocumentReload){replace2?routerWindow.location.replace(location):routerWindow.location.assign(location);return}}pendingNavigationController=null;let redirectNavigationType=replace2===!0||redirect2.response.headers.has("X-Remix-Replace")?"REPLACE":"PUSH",{formMethod,formAction,formEncType}=state.navigation;!submission&&!fetcherSubmission&&formMethod&&formAction&&formEncType&&(submission=getSubmissionFromNavigation(state.navigation));let activeSubmission=submission||fetcherSubmission;if(redirectPreserveMethodStatusCodes.has(redirect2.response.status)&&activeSubmission&&isMutationMethod(activeSubmission.formMethod))await startNavigation(redirectNavigationType,redirectLocation,{submission:{...activeSubmission,formAction:location},preventScrollReset:preventScrollReset||pendingPreventScrollReset,enableViewTransition:isNavigation?pendingViewTransitionEnabled:void 0});else{let overrideNavigation=getLoadingNavigation(redirectLocation,[],redirectNavigationType,submission);await startNavigation(redirectNavigationType,redirectLocation,{overrideNavigation,fetcherSubmission,preventScrollReset:preventScrollReset||pendingPreventScrollReset,enableViewTransition:isNavigation?pendingViewTransitionEnabled:void 0})}}async function callDataStrategy(request,path,matches,scopedContext,fetcherKey){let results,dataResults={};try{results=await callDataStrategyImpl(dataStrategyImpl,request,path,matches,fetcherKey,scopedContext,!1)}catch(e){return matches.filter(m=>m.shouldLoad).forEach(m=>{dataResults[m.route.id]={type:"error",error:e}}),dataResults}if(request.signal.aborted)return dataResults;if(!isMutationMethod(request.method))for(let match of matches){if(results[match.route.id]?.type==="error")break;!results.hasOwnProperty(match.route.id)&&!state.loaderData.hasOwnProperty(match.route.id)&&(!state.errors||!state.errors.hasOwnProperty(match.route.id))&&match.shouldCallHandler()&&(results[match.route.id]={type:"error",result:new Error(`No result returned from dataStrategy for route ${match.route.id}`)})}for(let[routeId,result]of Object.entries(results))if(isRedirectDataStrategyResult(result)){let response=result.result;dataResults[routeId]={type:"redirect",response:normalizeRelativeRoutingRedirectResponse(response,request,routeId,matches,basename)}}else dataResults[routeId]=await convertDataStrategyResultToDataResult(result);return dataResults}async function callLoadersAndMaybeResolveData(matches,fetchersToLoad,request,location,scopedContext){let loaderResultsPromise=callDataStrategy(request,location,matches,scopedContext,null),fetcherResultsPromise=Promise.all(fetchersToLoad.map(async f=>{if(f.matches&&f.match&&f.request&&f.controller){let result=(await callDataStrategy(f.request,f.path,f.matches,scopedContext,f.key))[f.match.route.id];return{[f.key]:result}}else return Promise.resolve({[f.key]:{type:"error",error:getInternalRouterError(404,{pathname:f.path})}})})),loaderResults=await loaderResultsPromise,fetcherResults=(await fetcherResultsPromise).reduce((acc,r)=>Object.assign(acc,r),{});return{loaderResults,fetcherResults}}function interruptActiveLoads(){isRevalidationRequired=!0,fetchLoadMatches.forEach((_,key)=>{fetchControllers.has(key)&&cancelledFetcherLoads.add(key),abortFetcher(key)})}function updateFetcherState(key,fetcher,opts={}){let workingFetchers=new Map(state.fetchers);workingFetchers.set(key,fetcher),updateState({fetchers:workingFetchers},{flushSync:(opts&&opts.flushSync)===!0})}function setFetcherError(key,routeId,error,opts={}){let boundaryMatch=findNearestBoundary(state.matches,routeId),workingFetchers=new Map(state.fetchers);deleteFetcher(workingFetchers,key),updateState({errors:{[boundaryMatch.route.id]:error},fetchers:workingFetchers},{flushSync:(opts&&opts.flushSync)===!0})}function getFetcher(key){return activeFetchers.set(key,(activeFetchers.get(key)||0)+1),fetchersQueuedForDeletion.has(key)&&fetchersQueuedForDeletion.delete(key),state.fetchers.get(key)||IDLE_FETCHER}function resetFetcher(key,opts){abortFetcher(key,opts?.reason),updateFetcherState(key,getDoneFetcher(null))}function deleteFetcher(fetchers,key){let fetcher=state.fetchers.get(key);fetchControllers.has(key)&&!(fetcher&&fetcher.state==="loading"&&fetchReloadIds.has(key))&&abortFetcher(key),fetchLoadMatches.delete(key),fetchReloadIds.delete(key),fetchRedirectIds.delete(key),fetchersQueuedForDeletion.delete(key),cancelledFetcherLoads.delete(key),fetchers.delete(key)}function queueFetcherForDeletion(key){let count=(activeFetchers.get(key)||0)-1;count<=0?(activeFetchers.delete(key),fetchersQueuedForDeletion.add(key)):activeFetchers.set(key,count),updateState({fetchers:new Map(state.fetchers)})}function abortFetcher(key,reason){let controller=fetchControllers.get(key);controller&&(controller.abort(reason),fetchControllers.delete(key))}function markFetchersDone(keys,fetchers){for(let key of keys){let fetcher=fetchers.get(key);invariant(fetcher,`Expected fetcher: ${key}`);let doneFetcher=getDoneFetcher(fetcher.data);fetchers.set(key,doneFetcher)}}function markFetchRedirectsDone(fetchers){let doneKeys=[],didUpdateFetchers=!1;for(let key of fetchRedirectIds){let fetcher=fetchers.get(key);invariant(fetcher,`Expected fetcher: ${key}`),fetcher.state==="loading"&&(fetchRedirectIds.delete(key),doneKeys.push(key),didUpdateFetchers=!0)}return markFetchersDone(doneKeys,fetchers),didUpdateFetchers}function abortStaleFetchLoads(landedId,fetchers){let yeetedKeys=[];for(let[key,id]of fetchReloadIds)if(id<landedId){let fetcher=fetchers.get(key);invariant(fetcher,`Expected fetcher: ${key}`),fetcher.state==="loading"&&(abortFetcher(key),fetchReloadIds.delete(key),yeetedKeys.push(key))}return markFetchersDone(yeetedKeys,fetchers),yeetedKeys.length>0}function getBlocker(key,fn){let blocker=state.blockers.get(key)||IDLE_BLOCKER;return blockerFunctions.get(key)!==fn&&blockerFunctions.set(key,fn),blocker}function deleteBlocker(key){state.blockers.delete(key),blockerFunctions.delete(key)}function updateBlocker(key,newBlocker){let blocker=state.blockers.get(key)||IDLE_BLOCKER;invariant(blocker.state==="unblocked"&&newBlocker.state==="blocked"||blocker.state==="blocked"&&newBlocker.state==="blocked"||blocker.state==="blocked"&&newBlocker.state==="proceeding"||blocker.state==="blocked"&&newBlocker.state==="unblocked"||blocker.state==="proceeding"&&newBlocker.state==="unblocked",`Invalid blocker state transition: ${blocker.state} -> ${newBlocker.state}`);let blockers=new Map(state.blockers);blockers.set(key,newBlocker),updateState({blockers})}function shouldBlockNavigation({currentLocation,nextLocation,historyAction}){if(blockerFunctions.size===0)return;blockerFunctions.size>1&&warning(!1,"A router only supports one blocker at a time");let entries=Array.from(blockerFunctions.entries()),[blockerKey,blockerFunction]=entries[entries.length-1],blocker=state.blockers.get(blockerKey);if(!(blocker&&blocker.state==="proceeding")&&blockerFunction({currentLocation,nextLocation,historyAction}))return blockerKey}function handleNavigational404(pathname){let error=getInternalRouterError(404,{pathname}),routesToUse=dataRoutes.activeRoutes,{matches,route}=getShortCircuitMatches(routesToUse);return{notFoundMatches:matches,route,error}}function enableScrollRestoration(positions,getPosition,getKey){if(savedScrollPositions2=positions,getScrollPosition=getPosition,getScrollRestorationKey2=getKey||null,!initialScrollRestored&&state.navigation===IDLE_NAVIGATION){initialScrollRestored=!0;let y=getSavedScrollPosition(state.location,state.matches);y!=null&&updateState({restoreScrollPosition:y})}return()=>{savedScrollPositions2=null,getScrollPosition=null,getScrollRestorationKey2=null}}function getScrollKey(location,matches){return getScrollRestorationKey2&&getScrollRestorationKey2(location,matches.map(m=>convertRouteMatchToUiMatch(m,state.loaderData)))||location.key}function saveScrollPosition(location,matches){if(savedScrollPositions2&&getScrollPosition){let key=getScrollKey(location,matches);savedScrollPositions2[key]=getScrollPosition()}}function getSavedScrollPosition(location,matches){if(savedScrollPositions2){let key=getScrollKey(location,matches),y=savedScrollPositions2[key];if(typeof y=="number")return y}return null}function checkFogOfWar(matches,routesToUse,pathname){if(init.patchRoutesOnNavigation){let activeBranches=dataRoutes.branches;if(matches){if(Object.keys(matches[0].params).length>0)return{active:!0,matches:matchRoutesImpl(routesToUse,pathname,basename,!0,activeBranches)}}else return{active:!0,matches:matchRoutesImpl(routesToUse,pathname,basename,!0,activeBranches)||[]}}return{active:!1,matches:null}}async function discoverRoutes(matches,pathname,signal,fetcherKey){if(!init.patchRoutesOnNavigation)return{type:"success",matches};let partialMatches=matches;for(;;){let localManifest=manifest;try{await init.patchRoutesOnNavigation({signal,path:pathname,matches:partialMatches,fetcherKey,patch:(routeId,children)=>{signal.aborted||patchRoutesImpl(routeId,children,dataRoutes,localManifest,mapRouteProperties2,!1)}})}catch(e){return{type:"error",error:e,partialMatches}}if(signal.aborted)return{type:"aborted"};let activeBranches=dataRoutes.branches,newMatches=matchRoutesImpl(dataRoutes.activeRoutes,pathname,basename,!1,activeBranches),newPartialMatches=null;if(newMatches){if(Object.keys(newMatches[0].params).length===0)return{type:"success",matches:newMatches};if(newPartialMatches=matchRoutesImpl(dataRoutes.activeRoutes,pathname,basename,!0,activeBranches),!(newPartialMatches&&partialMatches.length<newPartialMatches.length&&compareMatches(partialMatches,newPartialMatches.slice(0,partialMatches.length))))return{type:"success",matches:newMatches}}if(newPartialMatches||(newPartialMatches=matchRoutesImpl(dataRoutes.activeRoutes,pathname,basename,!0,activeBranches)),!newPartialMatches||compareMatches(partialMatches,newPartialMatches))return{type:"success",matches:null};partialMatches=newPartialMatches}}function compareMatches(a,b){return a.length===b.length&&a.every((m,i)=>m.route.id===b[i].route.id)}function _internalSetRoutes(newRoutes){manifest={},dataRoutes.setHmrRoutes(convertRoutesToDataRoutes(newRoutes,mapRouteProperties2,void 0,manifest))}function patchRoutes(routeId,children,unstable_allowElementMutations=!1){patchRoutesImpl(routeId,children,dataRoutes,manifest,mapRouteProperties2,unstable_allowElementMutations),dataRoutes.hasHMRRoutes||updateState({})}return router={get basename(){return basename},get future(){return future},get state(){return state},get routes(){return dataRoutes.stableRoutes},get branches(){return dataRoutes.branches},get manifest(){return manifest},get window(){return routerWindow},initialize,subscribe,enableScrollRestoration,navigate,fetch:fetch2,revalidate,createHref:to=>init.history.createHref(to),encodeLocation:to=>init.history.encodeLocation(to),getFetcher,resetFetcher,deleteFetcher:queueFetcherForDeletion,dispose,getBlocker,deleteBlocker,patchRoutes,_internalFetchControllers:fetchControllers,_internalSetRoutes,_internalSetStateDoNotUseOrYouWillBreakYourApp(newState){updateState(newState)}},init.instrumentations&&(router=instrumentClientSideRouter(router,init.instrumentations.map(i=>i.router).filter(Boolean))),router}function createStaticHandler(routes,opts){invariant(routes.length>0,"You must provide a non-empty routes array to createStaticHandler");let manifest={},basename=(opts?opts.basename:null)||"/",_mapRouteProperties=opts?.mapRouteProperties||defaultMapRouteProperties,mapRouteProperties2=_mapRouteProperties,future={...opts?.future};if(opts?.instrumentations){let instrumentations=opts.instrumentations;mapRouteProperties2=route=>({..._mapRouteProperties(route),...getRouteInstrumentationUpdates(instrumentations.map(i=>i.route).filter(Boolean),route)})}let dataRoutes=convertRoutesToDataRoutes(routes,mapRouteProperties2,void 0,manifest),routeBranches=flattenAndRankRoutes(dataRoutes);async function query(request,{requestContext,filterMatchesToLoad,skipLoaderErrorBubbling,skipRevalidation,dataStrategy,generateMiddlewareResponse,normalizePath}={}){let normalizePathImpl=normalizePath||defaultNormalizePath,method=request.method,location=createLocation("",normalizePathImpl(request),null,"default"),matches=matchRoutesImpl(dataRoutes,location,basename,!1,routeBranches);if(requestContext=requestContext??new RouterContextProvider,!isValidMethod(method)&&method!=="HEAD"){let error=getInternalRouterError(405,{method}),{matches:methodNotAllowedMatches,route}=getShortCircuitMatches(dataRoutes),staticContext={basename,location,matches:methodNotAllowedMatches,loaderData:{},actionData:null,errors:{[route.id]:error},statusCode:error.status,loaderHeaders:{},actionHeaders:{}};return generateMiddlewareResponse?generateMiddlewareResponse(()=>Promise.resolve(staticContext)):staticContext}else if(!matches){let error=getInternalRouterError(404,{pathname:location.pathname}),{matches:notFoundMatches,route}=getShortCircuitMatches(dataRoutes),staticContext={basename,location,matches:notFoundMatches,loaderData:{},actionData:null,errors:{[route.id]:error},statusCode:error.status,loaderHeaders:{},actionHeaders:{}};return generateMiddlewareResponse?generateMiddlewareResponse(()=>Promise.resolve(staticContext)):staticContext}if(generateMiddlewareResponse){invariant(requestContext instanceof RouterContextProvider,"When using middleware in `staticHandler.query()`, any provided `requestContext` must be an instance of `RouterContextProvider`");try{await loadLazyMiddlewareForMatches(matches,manifest,mapRouteProperties2);let renderedStaticContext,response=await runServerMiddlewarePipeline({request,url:createDataFunctionUrl(request,location),pattern:getRoutePattern(matches),matches,params:matches[0].params,context:requestContext},async()=>await generateMiddlewareResponse(async(revalidationRequest,opts2={})=>{let result2=await queryImpl(revalidationRequest,location,matches,requestContext,dataStrategy||null,skipLoaderErrorBubbling===!0,null,"filterMatchesToLoad"in opts2?opts2.filterMatchesToLoad??null:filterMatchesToLoad??null,skipRevalidation===!0);return isResponse(result2)?result2:(renderedStaticContext={location,basename,...result2},renderedStaticContext)}),async(error,routeId)=>{if(isRedirectResponse(error))return error;if(isResponse(error))try{error=new ErrorResponseImpl(error.status,error.statusText,await parseResponseBody(error))}catch(e){error=e}if(isDataWithResponseInit(error)&&(error=dataWithResponseInitToErrorResponse(error)),renderedStaticContext){routeId in renderedStaticContext.loaderData&&(renderedStaticContext.loaderData[routeId]=void 0);let staticContext=getStaticContextFromError(dataRoutes,renderedStaticContext,error,skipLoaderErrorBubbling?routeId:findNearestBoundary(matches,routeId).route.id);return generateMiddlewareResponse(()=>Promise.resolve(staticContext))}else{let boundaryRouteId=skipLoaderErrorBubbling?routeId:findNearestBoundary(matches,matches.find(m=>m.route.id===routeId||m.route.loader)?.route.id||routeId).route.id,staticContext={matches,location,basename,loaderData:{},actionData:null,errors:{[boundaryRouteId]:error},statusCode:isRouteErrorResponse(error)?error.status:500,actionHeaders:{},loaderHeaders:{}};return generateMiddlewareResponse(()=>Promise.resolve(staticContext))}});return invariant(isResponse(response),"Expected a response in query()"),response}catch(e){if(isResponse(e))return e;throw e}}let result=await queryImpl(request,location,matches,requestContext,dataStrategy||null,skipLoaderErrorBubbling===!0,null,filterMatchesToLoad||null,skipRevalidation===!0);return isResponse(result)?result:{location,basename,...result}}async function queryRoute(request,{routeId,requestContext,dataStrategy,generateMiddlewareResponse,normalizePath}={}){let normalizePathImpl=normalizePath||defaultNormalizePath,method=request.method,location=createLocation("",normalizePathImpl(request),null,"default"),matches=matchRoutesImpl(dataRoutes,location,basename,!1,routeBranches);if(requestContext=requestContext??new RouterContextProvider,!isValidMethod(method)&&method!=="HEAD"&&method!=="OPTIONS")throw getInternalRouterError(405,{method});if(!matches)throw getInternalRouterError(404,{pathname:location.pathname});let match=routeId?matches.find(m=>m.route.id===routeId):getTargetMatch(matches,location);if(routeId&&!match)throw getInternalRouterError(403,{pathname:location.pathname,routeId});if(!match)throw getInternalRouterError(404,{pathname:location.pathname});if(generateMiddlewareResponse)return invariant(requestContext instanceof RouterContextProvider,"When using middleware in `staticHandler.queryRoute()`, any provided `requestContext` must be an instance of `RouterContextProvider`"),await loadLazyMiddlewareForMatches(matches,manifest,mapRouteProperties2),await runServerMiddlewarePipeline({request,url:createDataFunctionUrl(request,location),pattern:getRoutePattern(matches),matches,params:matches[0].params,context:requestContext},async()=>await generateMiddlewareResponse(async innerRequest=>{let result2=await queryImpl(innerRequest,location,matches,requestContext,dataStrategy||null,!1,match,null,!1),processed=handleQueryResult(result2);return isResponse(processed)?processed:typeof processed=="string"?new Response(processed):Response.json(processed)}),error=>{if(isDataWithResponseInit(error))return Promise.resolve(dataWithResponseInitToResponse(error));if(isResponse(error))return Promise.resolve(error);throw error});let result=await queryImpl(request,location,matches,requestContext,dataStrategy||null,!1,match,null,!1);return handleQueryResult(result);function handleQueryResult(result2){if(isResponse(result2))return result2;let error=result2.errors?Object.values(result2.errors)[0]:void 0;if(error!==void 0)throw error;if(result2.actionData)return Object.values(result2.actionData)[0];if(result2.loaderData)return Object.values(result2.loaderData)[0]}}async function queryImpl(request,location,matches,requestContext,dataStrategy,skipLoaderErrorBubbling,routeMatch,filterMatchesToLoad,skipRevalidation){invariant(request.signal,"query()/queryRoute() requests must contain an AbortController signal");try{if(isMutationMethod(request.method))return await submit(request,location,matches,routeMatch||getTargetMatch(matches,location),requestContext,dataStrategy,skipLoaderErrorBubbling,routeMatch!=null,filterMatchesToLoad,skipRevalidation);let result=await loadRouteData(request,location,matches,requestContext,dataStrategy,skipLoaderErrorBubbling,routeMatch,filterMatchesToLoad);return isResponse(result)?result:{...result,actionData:null,actionHeaders:{}}}catch(e){if(isDataStrategyResult(e)&&isResponse(e.result)){if(e.type==="error")throw e.result;return e.result}if(isRedirectResponse(e))return e;throw e}}async function submit(request,location,matches,actionMatch,requestContext,dataStrategy,skipLoaderErrorBubbling,isRouteRequest,filterMatchesToLoad,skipRevalidation){let result;if(!actionMatch.route.action&&!actionMatch.route.lazy){let error=getInternalRouterError(405,{method:request.method,pathname:new URL(request.url).pathname,routeId:actionMatch.route.id});if(isRouteRequest)throw error;result={type:"error",error}}else{let dsMatches=getTargetedDataStrategyMatches(mapRouteProperties2,manifest,request,location,matches,actionMatch,[],requestContext);result=(await callDataStrategy(request,location,dsMatches,isRouteRequest,requestContext,dataStrategy))[actionMatch.route.id],request.signal.aborted&&throwStaticHandlerAbortedError(request,isRouteRequest)}if(isRedirectResult(result))throw new Response(null,{status:result.response.status,headers:{Location:result.response.headers.get("Location")}});if(isRouteRequest){if(isErrorResult(result))throw result.error;return{matches:[actionMatch],loaderData:{},actionData:{[actionMatch.route.id]:result.data},errors:null,statusCode:200,loaderHeaders:{},actionHeaders:{}}}if(skipRevalidation)if(isErrorResult(result)){let boundaryMatch=skipLoaderErrorBubbling?actionMatch:findNearestBoundary(matches,actionMatch.route.id);return{statusCode:isRouteErrorResponse(result.error)?result.error.status:result.statusCode!=null?result.statusCode:500,actionData:null,actionHeaders:{...result.headers?{[actionMatch.route.id]:result.headers}:{}},matches,loaderData:{},errors:{[boundaryMatch.route.id]:result.error},loaderHeaders:{}}}else return{actionData:{[actionMatch.route.id]:result.data},actionHeaders:result.headers?{[actionMatch.route.id]:result.headers}:{},matches,loaderData:{},errors:null,statusCode:result.statusCode||200,loaderHeaders:{}};let loaderRequest=new Request(request.url,{headers:request.headers,redirect:request.redirect,signal:request.signal});if(isErrorResult(result)){let boundaryMatch=skipLoaderErrorBubbling?actionMatch:findNearestBoundary(matches,actionMatch.route.id);return{...await loadRouteData(loaderRequest,location,matches,requestContext,dataStrategy,skipLoaderErrorBubbling,null,filterMatchesToLoad,[boundaryMatch.route.id,result]),statusCode:isRouteErrorResponse(result.error)?result.error.status:result.statusCode!=null?result.statusCode:500,actionData:null,actionHeaders:{...result.headers?{[actionMatch.route.id]:result.headers}:{}}}}return{...await loadRouteData(loaderRequest,location,matches,requestContext,dataStrategy,skipLoaderErrorBubbling,null,filterMatchesToLoad),actionData:{[actionMatch.route.id]:result.data},...result.statusCode?{statusCode:result.statusCode}:{},actionHeaders:result.headers?{[actionMatch.route.id]:result.headers}:{}}}async function loadRouteData(request,location,matches,requestContext,dataStrategy,skipLoaderErrorBubbling,routeMatch,filterMatchesToLoad,pendingActionResult){let isRouteRequest=routeMatch!=null;if(isRouteRequest&&!routeMatch?.route.loader&&!routeMatch?.route.lazy)throw getInternalRouterError(400,{method:request.method,pathname:new URL(request.url).pathname,routeId:routeMatch?.route.id});let dsMatches;if(routeMatch)dsMatches=getTargetedDataStrategyMatches(mapRouteProperties2,manifest,request,location,matches,routeMatch,[],requestContext);else{let maxIdx=pendingActionResult&&isErrorResult(pendingActionResult[1])?matches.findIndex(m=>m.route.id===pendingActionResult[0])-1:void 0,pattern=getRoutePattern(matches);dsMatches=matches.map((match,index)=>maxIdx!=null&&index>maxIdx?getDataStrategyMatch(mapRouteProperties2,manifest,request,location,pattern,match,[],requestContext,!1):getDataStrategyMatch(mapRouteProperties2,manifest,request,location,pattern,match,[],requestContext,(match.route.loader||match.route.lazy)!=null&&(!filterMatchesToLoad||filterMatchesToLoad(match))))}if(!dataStrategy&&!dsMatches.some(m=>m.shouldLoad))return{matches,loaderData:{},errors:pendingActionResult&&isErrorResult(pendingActionResult[1])?{[pendingActionResult[0]]:pendingActionResult[1].error}:null,statusCode:200,loaderHeaders:{}};let results=await callDataStrategy(request,location,dsMatches,isRouteRequest,requestContext,dataStrategy);return request.signal.aborted&&throwStaticHandlerAbortedError(request,isRouteRequest),{...processRouteLoaderData(matches,results,pendingActionResult,!0,skipLoaderErrorBubbling),matches}}async function callDataStrategy(request,location,matches,isRouteRequest,requestContext,dataStrategy){let results=await callDataStrategyImpl(dataStrategy||defaultDataStrategy,request,location,matches,null,requestContext,!0),dataResults={};return await Promise.all(matches.map(async match=>{if(!(match.route.id in results))return;let result=results[match.route.id];if(isRedirectDataStrategyResult(result)){let response=result.result;throw normalizeRelativeRoutingRedirectResponse(response,request,match.route.id,matches,basename)}if(isRouteRequest){if(isResponse(result.result))throw result;if(isDataWithResponseInit(result.result))throw dataWithResponseInitToResponse(result.result)}dataResults[match.route.id]=await convertDataStrategyResultToDataResult(result)})),dataResults}return{dataRoutes,_internalRouteBranches:routeBranches,query,queryRoute}}function getStaticContextFromError(routes,handlerContext,error,boundaryId){let errorBoundaryId=boundaryId||handlerContext._deepestRenderedBoundaryId||routes[0].id;return{...handlerContext,statusCode:isRouteErrorResponse(error)?error.status:500,errors:{[errorBoundaryId]:error}}}function throwStaticHandlerAbortedError(request,isRouteRequest){if(request.signal.reason!==void 0)throw request.signal.reason;let method=isRouteRequest?"queryRoute":"query";throw new Error(`${method}() call aborted without an \`AbortSignal.reason\`: ${request.method} ${request.url}`)}function isSubmissionNavigation(opts){return opts!=null&&("formData"in opts&&opts.formData!=null||"body"in opts&&opts.body!==void 0)}function defaultNormalizePath(request){let url=new URL(request.url);return{pathname:url.pathname,search:url.search,hash:url.hash}}function normalizeTo(location,matches,basename,to,fromRouteId,relative){let contextualMatches,activeRouteMatch;if(fromRouteId){contextualMatches=[];for(let match of matches)if(contextualMatches.push(match),match.route.id===fromRouteId){activeRouteMatch=match;break}}else contextualMatches=matches,activeRouteMatch=matches[matches.length-1];let path=resolveTo(to||".",getResolveToMatches(contextualMatches),stripBasename(location.pathname,basename)||location.pathname,relative==="path");if(to==null&&(path.search=location.search,path.hash=location.hash),(to==null||to===""||to===".")&&activeRouteMatch){let nakedIndex=hasNakedIndexQuery(path.search);if(activeRouteMatch.route.index&&!nakedIndex)path.search=path.search?path.search.replace(/^\?/,"?index&"):"?index";else if(!activeRouteMatch.route.index&&nakedIndex){let params=new URLSearchParams(path.search),indexValues=params.getAll("index");params.delete("index"),indexValues.filter(v=>v).forEach(v=>params.append("index",v));let qs=params.toString();path.search=qs?`?${qs}`:""}}return basename!=="/"&&(path.pathname=prependBasename({basename,pathname:path.pathname})),createPath(path)}function normalizeNavigateOptions(isFetcher,path,opts){if(!opts||!isSubmissionNavigation(opts))return{path};if(opts.formMethod&&!isValidMethod(opts.formMethod))return{path,error:getInternalRouterError(405,{method:opts.formMethod})};let getInvalidBodyError=()=>({path,error:getInternalRouterError(400,{type:"invalid-body"})}),formMethod=(opts.formMethod||"get").toUpperCase(),formAction=stripHashFromPath(path);if(opts.body!==void 0){if(opts.formEncType==="text/plain"){if(!isMutationMethod(formMethod))return getInvalidBodyError();let text=typeof opts.body=="string"?opts.body:opts.body instanceof FormData||opts.body instanceof URLSearchParams?Array.from(opts.body.entries()).reduce((acc,[name,value])=>`${acc}${name}=${value}
|
|
2
|
+
`,""):String(opts.body);return{path,submission:{formMethod,formAction,formEncType:opts.formEncType,formData:void 0,json:void 0,text}}}else if(opts.formEncType==="application/json"){if(!isMutationMethod(formMethod))return getInvalidBodyError();try{let json=typeof opts.body=="string"?JSON.parse(opts.body):opts.body;return{path,submission:{formMethod,formAction,formEncType:opts.formEncType,formData:void 0,json,text:void 0}}}catch{return getInvalidBodyError()}}}invariant(typeof FormData=="function","FormData is not available in this environment");let searchParams,formData;if(opts.formData)searchParams=convertFormDataToSearchParams(opts.formData),formData=opts.formData;else if(opts.body instanceof FormData)searchParams=convertFormDataToSearchParams(opts.body),formData=opts.body;else if(opts.body instanceof URLSearchParams)searchParams=opts.body,formData=convertSearchParamsToFormData(searchParams);else if(opts.body==null)searchParams=new URLSearchParams,formData=new FormData;else try{searchParams=new URLSearchParams(opts.body),formData=convertSearchParamsToFormData(searchParams)}catch{return getInvalidBodyError()}let submission={formMethod,formAction,formEncType:opts&&opts.formEncType||"application/x-www-form-urlencoded",formData,json:void 0,text:void 0};if(isMutationMethod(submission.formMethod))return{path,submission};let parsedPath=parsePath(path);return isFetcher&&parsedPath.search&&hasNakedIndexQuery(parsedPath.search)&&searchParams.append("index",""),parsedPath.search=`?${searchParams}`,{path:createPath(parsedPath),submission}}function getMatchesToLoad(request,scopedContext,mapRouteProperties2,manifest,history,state,matches,submission,location,lazyRoutePropertiesToSkip,initialHydration,isRevalidationRequired,cancelledFetcherLoads,fetchersQueuedForDeletion,fetchLoadMatches,fetchRedirectIds,routesToUse,basename,hasPatchRoutesOnNavigation,branches,pendingActionResult,callSiteDefaultShouldRevalidate){let actionResult=pendingActionResult?isErrorResult(pendingActionResult[1])?pendingActionResult[1].error:pendingActionResult[1].data:void 0,currentUrl=history.createURL(state.location),nextUrl=history.createURL(location),maxIdx;if(initialHydration&&state.errors){let boundaryId=Object.keys(state.errors)[0];maxIdx=matches.findIndex(m=>m.route.id===boundaryId)}else if(pendingActionResult&&isErrorResult(pendingActionResult[1])){let boundaryId=pendingActionResult[0];maxIdx=matches.findIndex(m=>m.route.id===boundaryId)-1}let actionStatus=pendingActionResult?pendingActionResult[1].statusCode:void 0,shouldSkipRevalidation=actionStatus&&actionStatus>=400,baseShouldRevalidateArgs={currentUrl,currentParams:state.matches[0]?.params||{},nextUrl,nextParams:matches[0].params,...submission,actionResult,actionStatus},pattern=getRoutePattern(matches),dsMatches=matches.map((match,index)=>{let{route}=match,forceShouldLoad=null;if(maxIdx!=null&&index>maxIdx)forceShouldLoad=!1;else if(route.lazy)forceShouldLoad=!0;else if(!routeHasLoaderOrMiddleware(route))forceShouldLoad=!1;else if(initialHydration){let{shouldLoad:shouldLoad2}=getRouteHydrationStatus(route,state.loaderData,state.errors);forceShouldLoad=shouldLoad2}else isNewLoader(state.loaderData,state.matches[index],match)&&(forceShouldLoad=!0);if(forceShouldLoad!==null)return getDataStrategyMatch(mapRouteProperties2,manifest,request,location,pattern,match,lazyRoutePropertiesToSkip,scopedContext,forceShouldLoad);let defaultShouldRevalidate=!1;typeof callSiteDefaultShouldRevalidate=="boolean"?defaultShouldRevalidate=callSiteDefaultShouldRevalidate:shouldSkipRevalidation?defaultShouldRevalidate=!1:(isRevalidationRequired||currentUrl.pathname+currentUrl.search===nextUrl.pathname+nextUrl.search||currentUrl.search!==nextUrl.search||isNewRouteInstance(state.matches[index],match))&&(defaultShouldRevalidate=!0);let shouldRevalidateArgs={...baseShouldRevalidateArgs,defaultShouldRevalidate},shouldLoad=shouldRevalidateLoader(match,shouldRevalidateArgs);return getDataStrategyMatch(mapRouteProperties2,manifest,request,location,pattern,match,lazyRoutePropertiesToSkip,scopedContext,shouldLoad,shouldRevalidateArgs,callSiteDefaultShouldRevalidate)}),revalidatingFetchers=[];return fetchLoadMatches.forEach((f,key)=>{if(initialHydration||!matches.some(m=>m.route.id===f.routeId)||fetchersQueuedForDeletion.has(key))return;let fetcher=state.fetchers.get(key),isMidInitialLoad=fetcher&&fetcher.state!=="idle"&&fetcher.data===void 0,fetcherMatches=matchRoutesImpl(routesToUse,f.path,basename??"/",!1,branches);if(!fetcherMatches){if(hasPatchRoutesOnNavigation&&isMidInitialLoad)return;revalidatingFetchers.push({key,routeId:f.routeId,path:f.path,matches:null,match:null,request:null,controller:null});return}if(fetchRedirectIds.has(key))return;let fetcherMatch=getTargetMatch(fetcherMatches,f.path),fetchController=new AbortController,fetchRequest=createClientSideRequest(history,f.path,fetchController.signal),fetcherDsMatches=null;if(cancelledFetcherLoads.has(key))cancelledFetcherLoads.delete(key),fetcherDsMatches=getTargetedDataStrategyMatches(mapRouteProperties2,manifest,fetchRequest,f.path,fetcherMatches,fetcherMatch,lazyRoutePropertiesToSkip,scopedContext);else if(isMidInitialLoad)isRevalidationRequired&&(fetcherDsMatches=getTargetedDataStrategyMatches(mapRouteProperties2,manifest,fetchRequest,f.path,fetcherMatches,fetcherMatch,lazyRoutePropertiesToSkip,scopedContext));else{let defaultShouldRevalidate;typeof callSiteDefaultShouldRevalidate=="boolean"?defaultShouldRevalidate=callSiteDefaultShouldRevalidate:shouldSkipRevalidation?defaultShouldRevalidate=!1:defaultShouldRevalidate=isRevalidationRequired;let shouldRevalidateArgs={...baseShouldRevalidateArgs,defaultShouldRevalidate};shouldRevalidateLoader(fetcherMatch,shouldRevalidateArgs)&&(fetcherDsMatches=getTargetedDataStrategyMatches(mapRouteProperties2,manifest,fetchRequest,f.path,fetcherMatches,fetcherMatch,lazyRoutePropertiesToSkip,scopedContext,shouldRevalidateArgs))}fetcherDsMatches&&revalidatingFetchers.push({key,routeId:f.routeId,path:f.path,matches:fetcherDsMatches,match:fetcherMatch,request:fetchRequest,controller:fetchController})}),{dsMatches,revalidatingFetchers}}function routeHasLoaderOrMiddleware(route){return route.loader!=null||route.middleware!=null&&route.middleware.length>0}function getRouteHydrationStatus(route,loaderData,errors){if(route.lazy)return{shouldLoad:!0,renderFallback:!0};if(!routeHasLoaderOrMiddleware(route))return{shouldLoad:!1,renderFallback:!1};let hasData=loaderData!=null&&route.id in loaderData,hasError=errors!=null&&errors[route.id]!==void 0;if(!hasData&&hasError)return{shouldLoad:!1,renderFallback:!1};if(typeof route.loader=="function"&&route.loader.hydrate===!0)return{shouldLoad:!0,renderFallback:!hasData};let shouldLoad=!hasData&&!hasError;return{shouldLoad,renderFallback:shouldLoad}}function isNewLoader(currentLoaderData,currentMatch,match){let isNew=!currentMatch||match.route.id!==currentMatch.route.id,isMissingData=!currentLoaderData.hasOwnProperty(match.route.id);return isNew||isMissingData}function isNewRouteInstance(currentMatch,match){let currentPath=currentMatch.route.path;return currentMatch.pathname!==match.pathname||currentPath!=null&¤tPath.endsWith("*")&¤tMatch.params["*"]!==match.params["*"]}function shouldRevalidateLoader(loaderMatch,arg){if(loaderMatch.route.shouldRevalidate){let routeChoice=loaderMatch.route.shouldRevalidate(arg);if(typeof routeChoice=="boolean")return routeChoice}return arg.defaultShouldRevalidate}function patchRoutesImpl(routeId,children,dataRoutes,manifest,mapRouteProperties2,allowElementMutations){let childrenToPatch;if(routeId){let route=manifest[routeId];invariant(route,`No route found to patch children into: routeId = ${routeId}`),route.children||(route.children=[]),childrenToPatch=route.children}else childrenToPatch=dataRoutes.activeRoutes;let uniqueChildren=[],existingChildren=[];if(children.forEach(newRoute=>{let existingRoute=childrenToPatch.find(existingRoute2=>isSameRoute(newRoute,existingRoute2));existingRoute?existingChildren.push({existingRoute,newRoute}):uniqueChildren.push(newRoute)}),uniqueChildren.length>0){let newRoutes=convertRoutesToDataRoutes(uniqueChildren,mapRouteProperties2,[routeId||"_","patch",String(childrenToPatch?.length||"0")],manifest);childrenToPatch.push(...newRoutes)}if(allowElementMutations&&existingChildren.length>0)for(let i=0;i<existingChildren.length;i++){let{existingRoute,newRoute}=existingChildren[i],existingRouteTyped=existingRoute,[newRouteTyped]=convertRoutesToDataRoutes([newRoute],mapRouteProperties2,[],{},!0);Object.assign(existingRouteTyped,{element:newRouteTyped.element?newRouteTyped.element:existingRouteTyped.element,errorElement:newRouteTyped.errorElement?newRouteTyped.errorElement:existingRouteTyped.errorElement,hydrateFallbackElement:newRouteTyped.hydrateFallbackElement?newRouteTyped.hydrateFallbackElement:existingRouteTyped.hydrateFallbackElement})}dataRoutes.hasHMRRoutes||dataRoutes.setRoutes([...dataRoutes.activeRoutes])}function isSameRoute(newRoute,existingRoute){return"id"in newRoute&&"id"in existingRoute&&newRoute.id===existingRoute.id?!0:newRoute.index===existingRoute.index&&newRoute.path===existingRoute.path&&newRoute.caseSensitive===existingRoute.caseSensitive?(!newRoute.children||newRoute.children.length===0)&&(!existingRoute.children||existingRoute.children.length===0)?!0:newRoute.children?.every((aChild,i)=>existingRoute.children?.some(bChild=>isSameRoute(aChild,bChild)))??!1:!1}var lazyRoutePropertyCache=new WeakMap,loadLazyRouteProperty=({key,route,manifest,mapRouteProperties:mapRouteProperties2})=>{let routeToUpdate=manifest[route.id];if(invariant(routeToUpdate,"No route found in manifest"),!routeToUpdate.lazy||typeof routeToUpdate.lazy!="object")return;let lazyFn=routeToUpdate.lazy[key];if(!lazyFn)return;let cache=lazyRoutePropertyCache.get(routeToUpdate);cache||(cache={},lazyRoutePropertyCache.set(routeToUpdate,cache));let cachedPromise=cache[key];if(cachedPromise)return cachedPromise;let propertyPromise=(async()=>{let isUnsupported=isUnsupportedLazyRouteObjectKey(key),isStaticallyDefined=routeToUpdate[key]!==void 0&&key!=="hasErrorBoundary";if(isUnsupported)warning(!isUnsupported,"Route property "+key+" is not a supported lazy route property. This property will be ignored."),cache[key]=Promise.resolve();else if(isStaticallyDefined)warning(!1,`Route "${routeToUpdate.id}" has a static property "${key}" defined. The lazy property will be ignored.`);else{let value=await lazyFn();value!=null&&(Object.assign(routeToUpdate,{[key]:value}),Object.assign(routeToUpdate,mapRouteProperties2(routeToUpdate)))}typeof routeToUpdate.lazy=="object"&&(routeToUpdate.lazy[key]=void 0,Object.values(routeToUpdate.lazy).every(value=>value===void 0)&&(routeToUpdate.lazy=void 0))})();return cache[key]=propertyPromise,propertyPromise},lazyRouteFunctionCache=new WeakMap;function loadLazyRoute(route,type,manifest,mapRouteProperties2,lazyRoutePropertiesToSkip){let routeToUpdate=manifest[route.id];if(invariant(routeToUpdate,"No route found in manifest"),!route.lazy)return{lazyRoutePromise:void 0,lazyHandlerPromise:void 0};if(typeof route.lazy=="function"){let cachedPromise=lazyRouteFunctionCache.get(routeToUpdate);if(cachedPromise)return{lazyRoutePromise:cachedPromise,lazyHandlerPromise:cachedPromise};let lazyRoutePromise2=(async()=>{invariant(typeof route.lazy=="function","No lazy route function found");let lazyRoute=await route.lazy(),routeUpdates={};for(let lazyRouteProperty in lazyRoute){let lazyValue=lazyRoute[lazyRouteProperty];if(lazyValue===void 0)continue;let isUnsupported=isUnsupportedLazyRouteFunctionKey(lazyRouteProperty),isStaticallyDefined=routeToUpdate[lazyRouteProperty]!==void 0&&lazyRouteProperty!=="hasErrorBoundary";isUnsupported?warning(!isUnsupported,"Route property "+lazyRouteProperty+" is not a supported property to be returned from a lazy route function. This property will be ignored."):isStaticallyDefined?warning(!isStaticallyDefined,`Route "${routeToUpdate.id}" has a static property "${lazyRouteProperty}" defined but its lazy function is also returning a value for this property. The lazy route property "${lazyRouteProperty}" will be ignored.`):routeUpdates[lazyRouteProperty]=lazyValue}Object.assign(routeToUpdate,routeUpdates),Object.assign(routeToUpdate,{...mapRouteProperties2(routeToUpdate),lazy:void 0})})();return lazyRouteFunctionCache.set(routeToUpdate,lazyRoutePromise2),lazyRoutePromise2.catch(()=>{}),{lazyRoutePromise:lazyRoutePromise2,lazyHandlerPromise:lazyRoutePromise2}}let lazyKeys=Object.keys(route.lazy),lazyPropertyPromises=[],lazyHandlerPromise;for(let key of lazyKeys){if(lazyRoutePropertiesToSkip&&lazyRoutePropertiesToSkip.includes(key))continue;let promise=loadLazyRouteProperty({key,route,manifest,mapRouteProperties:mapRouteProperties2});promise&&(lazyPropertyPromises.push(promise),key===type&&(lazyHandlerPromise=promise))}let lazyRoutePromise=lazyPropertyPromises.length>0?Promise.all(lazyPropertyPromises).then(()=>{}):void 0;return lazyRoutePromise?.catch(()=>{}),lazyHandlerPromise?.catch(()=>{}),{lazyRoutePromise,lazyHandlerPromise}}function isNonNullable(value){return value!==void 0}function loadLazyMiddlewareForMatches(matches,manifest,mapRouteProperties2){let promises=matches.map(({route})=>{if(!(typeof route.lazy!="object"||!route.lazy.middleware))return loadLazyRouteProperty({key:"middleware",route,manifest,mapRouteProperties:mapRouteProperties2})}).filter(isNonNullable);return promises.length>0?Promise.all(promises):void 0}async function defaultDataStrategy(args){let matchesToLoad=args.matches.filter(m=>m.shouldLoad),keyedResults={};return(await Promise.all(matchesToLoad.map(m=>m.resolve()))).forEach((result,i)=>{keyedResults[matchesToLoad[i].route.id]=result}),keyedResults}async function defaultDataStrategyWithMiddleware(args){return args.matches.some(m=>m.route.middleware)?runClientMiddlewarePipeline(args,()=>defaultDataStrategy(args)):defaultDataStrategy(args)}function runServerMiddlewarePipeline(args,handler,errorHandler){return runMiddlewarePipeline(args,handler,processResult,isResponse,errorHandler);function processResult(result){return isDataWithResponseInit(result)?dataWithResponseInitToResponse(result):result}}function runClientMiddlewarePipeline(args,handler){return runMiddlewarePipeline(args,handler,r=>{if(isRedirectResponse(r))throw r;return r},isDataStrategyResults,errorHandler);function errorHandler(error,routeId,nextResult){if(nextResult)return Promise.resolve(Object.assign(nextResult.value,{[routeId]:{type:"error",result:error}}));{let{matches}=args,maxBoundaryIdx=Math.min(Math.max(matches.findIndex(m=>m.route.id===routeId),0),Math.max(matches.findIndex(m=>m.shouldCallHandler()),0)),boundaryRouteId=findNearestBoundary(matches,matches[maxBoundaryIdx].route.id).route.id;return Promise.resolve({[boundaryRouteId]:{type:"error",result:error}})}}}async function runMiddlewarePipeline(args,handler,processResult,isResult,errorHandler){let{matches,...dataFnArgs}=args,tuples=matches.flatMap(m=>m.route.middleware?m.route.middleware.map(fn=>[m.route.id,fn]):[]);return await callRouteMiddleware(dataFnArgs,tuples,handler,processResult,isResult,errorHandler)}async function callRouteMiddleware(args,middlewares,handler,processResult,isResult,errorHandler,idx=0){let{request}=args;if(request.signal.aborted)throw request.signal.reason??new Error(`Request aborted: ${request.method} ${request.url}`);let tuple=middlewares[idx];if(!tuple)return await handler();let[routeId,middleware]=tuple,nextResult,next=async()=>{if(nextResult)throw new Error("You may only call `next()` once per middleware");try{return nextResult={value:await callRouteMiddleware(args,middlewares,handler,processResult,isResult,errorHandler,idx+1)},nextResult.value}catch(error){return nextResult={value:await errorHandler(error,routeId,nextResult)},nextResult.value}};try{let value=await middleware(args,next),result=value!=null?processResult(value):void 0;return isResult(result)?result:nextResult?result??nextResult.value:(nextResult={value:await next()},nextResult.value)}catch(error){return await errorHandler(error,routeId,nextResult)}}function getDataStrategyMatchLazyPromises(mapRouteProperties2,manifest,request,match,lazyRoutePropertiesToSkip){let lazyMiddlewarePromise=loadLazyRouteProperty({key:"middleware",route:match.route,manifest,mapRouteProperties:mapRouteProperties2}),lazyRoutePromises=loadLazyRoute(match.route,isMutationMethod(request.method)?"action":"loader",manifest,mapRouteProperties2,lazyRoutePropertiesToSkip);return{middleware:lazyMiddlewarePromise,route:lazyRoutePromises.lazyRoutePromise,handler:lazyRoutePromises.lazyHandlerPromise}}function getDataStrategyMatch(mapRouteProperties2,manifest,request,path,pattern,match,lazyRoutePropertiesToSkip,scopedContext,shouldLoad,shouldRevalidateArgs=null,callSiteDefaultShouldRevalidate){let isUsingNewApi=!1,_lazyPromises=getDataStrategyMatchLazyPromises(mapRouteProperties2,manifest,request,match,lazyRoutePropertiesToSkip);return{...match,_lazyPromises,shouldLoad,shouldRevalidateArgs,shouldCallHandler(defaultShouldRevalidate){return isUsingNewApi=!0,shouldRevalidateArgs?typeof callSiteDefaultShouldRevalidate=="boolean"?shouldRevalidateLoader(match,{...shouldRevalidateArgs,defaultShouldRevalidate:callSiteDefaultShouldRevalidate}):typeof defaultShouldRevalidate=="boolean"?shouldRevalidateLoader(match,{...shouldRevalidateArgs,defaultShouldRevalidate}):shouldRevalidateLoader(match,shouldRevalidateArgs):shouldLoad},resolve(handlerOverride){let{lazy,loader,middleware}=match.route,callHandler=isUsingNewApi||shouldLoad||handlerOverride&&!isMutationMethod(request.method)&&(lazy||loader),isMiddlewareOnlyRoute=middleware&&middleware.length>0&&!loader&&!lazy;return callHandler&&(isMutationMethod(request.method)||!isMiddlewareOnlyRoute)?callLoaderOrAction({request,path,pattern,match,lazyHandlerPromise:_lazyPromises?.handler,lazyRoutePromise:_lazyPromises?.route,handlerOverride,scopedContext}):Promise.resolve({type:"data",result:void 0})}}}function getTargetedDataStrategyMatches(mapRouteProperties2,manifest,request,path,matches,targetMatch,lazyRoutePropertiesToSkip,scopedContext,shouldRevalidateArgs=null){return matches.map(match=>match.route.id!==targetMatch.route.id?{...match,shouldLoad:!1,shouldRevalidateArgs,shouldCallHandler:()=>!1,_lazyPromises:getDataStrategyMatchLazyPromises(mapRouteProperties2,manifest,request,match,lazyRoutePropertiesToSkip),resolve:()=>Promise.resolve({type:"data",result:void 0})}:getDataStrategyMatch(mapRouteProperties2,manifest,request,path,getRoutePattern(matches),match,lazyRoutePropertiesToSkip,scopedContext,!0,shouldRevalidateArgs))}async function callDataStrategyImpl(dataStrategyImpl,request,path,matches,fetcherKey,scopedContext,isStaticHandler){matches.some(m=>m._lazyPromises?.middleware)&&await Promise.all(matches.map(m=>m._lazyPromises?.middleware));let dataStrategyArgs={request,url:createDataFunctionUrl(request,path),pattern:getRoutePattern(matches),params:matches[0].params,context:scopedContext,matches},results=await dataStrategyImpl({...dataStrategyArgs,fetcherKey,runClientMiddleware:isStaticHandler?()=>{throw new Error("You cannot call `runClientMiddleware()` from a static handler `dataStrategy`. Middleware is run outside of `dataStrategy` during SSR in order to bubble up the Response. You can enable middleware via the `respond` API in `query`/`queryRoute`")}:cb=>{let typedDataStrategyArgs=dataStrategyArgs;return runClientMiddlewarePipeline(typedDataStrategyArgs,()=>cb({...typedDataStrategyArgs,fetcherKey,runClientMiddleware:()=>{throw new Error("Cannot call `runClientMiddleware()` from within an `runClientMiddleware` handler")}}))}});try{await Promise.all(matches.flatMap(m=>[m._lazyPromises?.handler,m._lazyPromises?.route]))}catch{}return results}async function callLoaderOrAction({request,path,pattern,match,lazyHandlerPromise,lazyRoutePromise,handlerOverride,scopedContext}){let result,onReject,isAction=isMutationMethod(request.method),type=isAction?"action":"loader",runHandler=handler=>{let reject,abortPromise=new Promise((_,r)=>reject=r);onReject=()=>reject(),request.signal.addEventListener("abort",onReject);let actualHandler=ctx=>typeof handler!="function"?Promise.reject(new Error(`You cannot call the handler for a route which defines a boolean "${type}" [routeId: ${match.route.id}]`)):handler({request,url:createDataFunctionUrl(request,path),pattern,params:match.params,context:scopedContext},...ctx!==void 0?[ctx]:[]),handlerPromise=(async()=>{try{return{type:"data",result:await(handlerOverride?handlerOverride(ctx=>actualHandler(ctx)):actualHandler())}}catch(e){return{type:"error",result:e}}})();return Promise.race([handlerPromise,abortPromise])};try{let handler=isAction?match.route.action:match.route.loader;if(lazyHandlerPromise||lazyRoutePromise)if(handler){let handlerError,[value]=await Promise.all([runHandler(handler).catch(e=>{handlerError=e}),lazyHandlerPromise,lazyRoutePromise]);if(handlerError!==void 0)throw handlerError;result=value}else{await lazyHandlerPromise;let handler2=isAction?match.route.action:match.route.loader;if(handler2)[result]=await Promise.all([runHandler(handler2),lazyRoutePromise]);else if(type==="action"){let url=new URL(request.url),pathname=url.pathname+url.search;throw getInternalRouterError(405,{method:request.method,pathname,routeId:match.route.id})}else return{type:"data",result:void 0}}else if(handler)result=await runHandler(handler);else{let url=new URL(request.url),pathname=url.pathname+url.search;throw getInternalRouterError(404,{pathname})}}catch(e){return{type:"error",result:e}}finally{onReject&&request.signal.removeEventListener("abort",onReject)}return result}async function parseResponseBody(response){let contentType=response.headers.get("Content-Type");return contentType&&/\bapplication\/json\b/.test(contentType)?response.body==null?null:response.json():response.text()}async function convertDataStrategyResultToDataResult(dataStrategyResult){let{result,type}=dataStrategyResult;if(isResponse(result)){let data2;try{data2=await parseResponseBody(result)}catch(e){return{type:"error",error:e}}return type==="error"?{type:"error",error:new ErrorResponseImpl(result.status,result.statusText,data2),statusCode:result.status,headers:result.headers}:{type:"data",data:data2,statusCode:result.status,headers:result.headers}}return type==="error"?isDataWithResponseInit(result)?result.data instanceof Error?{type:"error",error:result.data,statusCode:result.init?.status,headers:result.init?.headers?new Headers(result.init.headers):void 0}:{type:"error",error:dataWithResponseInitToErrorResponse(result),statusCode:isRouteErrorResponse(result)?result.status:void 0,headers:result.init?.headers?new Headers(result.init.headers):void 0}:{type:"error",error:result,statusCode:isRouteErrorResponse(result)?result.status:void 0}:isDataWithResponseInit(result)?{type:"data",data:result.data,statusCode:result.init?.status,headers:result.init?.headers?new Headers(result.init.headers):void 0}:{type:"data",data:result}}function normalizeRelativeRoutingRedirectResponse(response,request,routeId,matches,basename){let location=response.headers.get("Location");if(invariant(location,"Redirects returned/thrown from loaders/actions must have a Location header"),!isAbsoluteUrl(location)){let trimmedMatches=matches.slice(0,matches.findIndex(m=>m.route.id===routeId)+1);location=normalizeTo(new URL(request.url),trimmedMatches,basename,location),response.headers.set("Location",location)}return response}var invalidProtocols=["about:","blob:","chrome:","chrome-untrusted:","content:","data:","devtools:","file:","filesystem:","javascript:"];function hasInvalidProtocol(location){try{return invalidProtocols.includes(new URL(location).protocol)}catch{return!1}}function normalizeRedirectLocation(location,currentUrl,basename,historyInstance){if(isAbsoluteUrl(location)){let normalizedLocation=location,url=PROTOCOL_RELATIVE_URL_REGEX.test(normalizedLocation)?new URL(normalizeProtocolRelativeUrl(normalizedLocation,currentUrl.protocol)):new URL(normalizedLocation);if(hasInvalidProtocol(url.toString()))throw new Error("Invalid redirect location");let isSameBasename=stripBasename(url.pathname,basename)!=null;if(url.origin===currentUrl.origin&&isSameBasename)return removeDoubleSlashes(url.pathname)+url.search+url.hash}try{let url=historyInstance.createURL(location);if(hasInvalidProtocol(url.toString()))throw new Error("Invalid redirect location")}catch{}return location}function createClientSideRequest(history,location,signal,submission){let url=history.createURL(stripHashFromPath(location)).toString(),init={signal};if(submission&&isMutationMethod(submission.formMethod)){let{formMethod,formEncType}=submission;init.method=formMethod.toUpperCase(),formEncType==="application/json"?(init.headers=new Headers({"Content-Type":formEncType}),init.body=JSON.stringify(submission.json)):formEncType==="text/plain"?init.body=submission.text:formEncType==="application/x-www-form-urlencoded"&&submission.formData?init.body=convertFormDataToSearchParams(submission.formData):init.body=submission.formData}return new Request(url,init)}function createDataFunctionUrl(request,path){let url=new URL(request.url),parsed=typeof path=="string"?parsePath(path):path;if(url.pathname=parsed.pathname||"/",parsed.search){let searchParams=new URLSearchParams(parsed.search),indexValues=searchParams.getAll("index");searchParams.delete("index");for(let value of indexValues.filter(Boolean))searchParams.append("index",value);url.search=searchParams.size?`?${searchParams.toString()}`:""}else url.search="";return url.hash=parsed.hash||"",url}function convertFormDataToSearchParams(formData){let searchParams=new URLSearchParams;for(let[key,value]of formData.entries())searchParams.append(key,typeof value=="string"?value:value.name);return searchParams}function convertSearchParamsToFormData(searchParams){let formData=new FormData;for(let[key,value]of searchParams.entries())formData.append(key,value);return formData}function processRouteLoaderData(matches,results,pendingActionResult,isStaticHandler=!1,skipLoaderErrorBubbling=!1){let loaderData={},errors=null,statusCode,foundError=!1,loaderHeaders={},pendingError=pendingActionResult&&isErrorResult(pendingActionResult[1])?pendingActionResult[1].error:void 0;return matches.forEach(match=>{if(!(match.route.id in results))return;let id=match.route.id,result=results[id];if(invariant(!isRedirectResult(result),"Cannot handle redirect results in processLoaderData"),isErrorResult(result)){let error=result.error;if(pendingError!==void 0&&(error=pendingError,pendingError=void 0),errors=errors||{},skipLoaderErrorBubbling)errors[id]=error;else{let boundaryMatch=findNearestBoundary(matches,id);errors[boundaryMatch.route.id]==null&&(errors[boundaryMatch.route.id]=error)}isStaticHandler||(loaderData[id]=ResetLoaderDataSymbol),foundError||(foundError=!0,statusCode=isRouteErrorResponse(result.error)?result.error.status:500),result.headers&&(loaderHeaders[id]=result.headers)}else loaderData[id]=result.data,result.statusCode&&result.statusCode!==200&&!foundError&&(statusCode=result.statusCode),result.headers&&(loaderHeaders[id]=result.headers)}),pendingError!==void 0&&pendingActionResult&&(errors={[pendingActionResult[0]]:pendingError},pendingActionResult[2]&&(loaderData[pendingActionResult[2]]=void 0)),{loaderData,errors,statusCode:statusCode||200,loaderHeaders}}function processLoaderData(state,matches,results,pendingActionResult,revalidatingFetchers,fetcherResults,workingFetchers){let{loaderData,errors}=processRouteLoaderData(matches,results,pendingActionResult);return revalidatingFetchers.filter(f=>!f.matches||f.matches.some(m=>m.shouldLoad)).forEach(rf=>{let{key,match,controller}=rf;if(controller&&controller.signal.aborted)return;let result=fetcherResults[key];if(invariant(result,"Did not find corresponding fetcher result"),isErrorResult(result)){let boundaryMatch=findNearestBoundary(state.matches,match?.route.id);errors&&errors[boundaryMatch.route.id]||(errors={...errors,[boundaryMatch.route.id]:result.error}),workingFetchers.delete(key)}else if(isRedirectResult(result))invariant(!1,"Unhandled fetcher revalidation redirect");else{let doneFetcher=getDoneFetcher(result.data);workingFetchers.set(key,doneFetcher)}}),{loaderData,errors}}function mergeLoaderData(loaderData,newLoaderData,matches,errors){let mergedLoaderData=Object.entries(newLoaderData).filter(([,v])=>v!==ResetLoaderDataSymbol).reduce((merged,[k,v])=>(merged[k]=v,merged),{});for(let match of matches){let id=match.route.id;if(!newLoaderData.hasOwnProperty(id)&&loaderData.hasOwnProperty(id)&&match.route.loader&&(mergedLoaderData[id]=loaderData[id]),errors&&errors.hasOwnProperty(id))break}return mergedLoaderData}function getActionDataForCommit(pendingActionResult){return pendingActionResult?isErrorResult(pendingActionResult[1])?{actionData:{}}:{actionData:{[pendingActionResult[0]]:pendingActionResult[1].data}}:{}}function findNearestBoundary(matches,routeId){return(routeId?matches.slice(0,matches.findIndex(m=>m.route.id===routeId)+1):[...matches]).reverse().find(m=>m.route.hasErrorBoundary===!0)||matches[0]}function getShortCircuitMatches(routes){let route=routes.length===1?routes[0]:routes.find(r=>r.index||!r.path||r.path==="/")||{id:"__shim-error-route__"};return{matches:[{params:{},pathname:"",pathnameBase:"",route}],route}}function getInternalRouterError(status,{pathname,routeId,method,type,message}={}){let statusText="Unknown Server Error",errorMessage="Unknown @remix-run/router error";return status===400?(statusText="Bad Request",method&&pathname&&routeId?errorMessage=`You made a ${method} request to "${pathname}" but did not provide a \`loader\` for route "${routeId}", so there is no way to handle the request.`:type==="invalid-body"&&(errorMessage="Unable to encode submission body")):status===403?(statusText="Forbidden",errorMessage=`Route "${routeId}" does not match URL "${pathname}"`):status===404?(statusText="Not Found",errorMessage=`No route matches URL "${pathname}"`):status===405&&(statusText="Method Not Allowed",method&&pathname&&routeId?errorMessage=`You made a ${method.toUpperCase()} request to "${pathname}" but did not provide an \`action\` for route "${routeId}", so there is no way to handle the request.`:method&&(errorMessage=`Invalid request method "${method.toUpperCase()}"`)),new ErrorResponseImpl(status||500,statusText,new Error(errorMessage),!0)}function findRedirect(results){let entries=Object.entries(results);for(let i=entries.length-1;i>=0;i--){let[key,result]=entries[i];if(isRedirectResult(result))return{key,result}}}function stripHashFromPath(path){let parsedPath=typeof path=="string"?parsePath(path):path;return createPath({...parsedPath,hash:""})}function isHashChangeOnly(a,b){return a.pathname!==b.pathname||a.search!==b.search?!1:a.hash===""?b.hash!=="":a.hash===b.hash?!0:b.hash!==""}function dataWithResponseInitToResponse(data2){return Response.json(data2.data,data2.init??void 0)}function dataWithResponseInitToErrorResponse(data2){return new ErrorResponseImpl(data2.init?.status??500,data2.init?.statusText??"Internal Server Error",data2.data)}function isDataStrategyResults(result){return result!=null&&typeof result=="object"&&Object.entries(result).every(([key,value])=>typeof key=="string"&&isDataStrategyResult(value))}function isDataStrategyResult(result){return result!=null&&typeof result=="object"&&"type"in result&&"result"in result&&(result.type==="data"||result.type==="error")}function isRedirectDataStrategyResult(result){return isResponse(result.result)&&redirectStatusCodes.has(result.result.status)}function isErrorResult(result){return result.type==="error"}function isRedirectResult(result){return(result&&result.type)==="redirect"}function isDataWithResponseInit(value){return typeof value=="object"&&value!=null&&"type"in value&&"data"in value&&"init"in value&&value.type==="DataWithResponseInit"}function isResponse(value){return value!=null&&typeof value.status=="number"&&typeof value.statusText=="string"&&typeof value.headers=="object"&&typeof value.body<"u"}function isRedirectStatusCode(statusCode){return redirectStatusCodes.has(statusCode)}function isRedirectResponse(result){return isResponse(result)&&isRedirectStatusCode(result.status)&&result.headers.has("Location")}function isValidMethod(method){return validRequestMethods.has(method.toUpperCase())}function isMutationMethod(method){return validMutationMethods.has(method.toUpperCase())}function hasNakedIndexQuery(search){return new URLSearchParams(search).getAll("index").some(v=>v==="")}function getTargetMatch(matches,location){let search=typeof location=="string"?parsePath(location).search:location.search;if(matches[matches.length-1].route.index&&hasNakedIndexQuery(search||""))return matches[matches.length-1];let pathMatches=getPathContributingMatches(matches);return pathMatches[pathMatches.length-1]}function getSubmissionFromNavigation(navigation){let{formMethod,formAction,formEncType,text,formData,json}=navigation;if(!(!formMethod||!formAction||!formEncType)){if(text!=null)return{formMethod,formAction,formEncType,formData:void 0,json:void 0,text};if(formData!=null)return{formMethod,formAction,formEncType,formData,json:void 0,text:void 0};if(json!==void 0)return{formMethod,formAction,formEncType,formData:void 0,json,text:void 0}}}function getLoadingNavigation(location,matches,historyAction,submission){return submission?{state:"loading",location,matches,historyAction,formMethod:submission.formMethod,formAction:submission.formAction,formEncType:submission.formEncType,formData:submission.formData,json:submission.json,text:submission.text}:{state:"loading",location,matches,historyAction,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0}}function getSubmittingNavigation(location,matches,historyAction,submission){return{state:"submitting",location,matches,historyAction,formMethod:submission.formMethod,formAction:submission.formAction,formEncType:submission.formEncType,formData:submission.formData,json:submission.json,text:submission.text}}function getLoadingFetcher(submission,data2){return submission?{state:"loading",formMethod:submission.formMethod,formAction:submission.formAction,formEncType:submission.formEncType,formData:submission.formData,json:submission.json,text:submission.text,data:data2}:{state:"loading",formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0,data:data2}}function getSubmittingFetcher(submission,existingFetcher){return{state:"submitting",formMethod:submission.formMethod,formAction:submission.formAction,formEncType:submission.formEncType,formData:submission.formData,json:submission.json,text:submission.text,data:existingFetcher?existingFetcher.data:void 0}}function getDoneFetcher(data2){return{state:"idle",formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0,data:data2}}function restoreAppliedTransitions(_window,transitions){try{let sessionPositions=_window.sessionStorage.getItem(TRANSITIONS_STORAGE_KEY);if(sessionPositions){let json=JSON.parse(sessionPositions);for(let[k,v]of Object.entries(json||{}))v&&Array.isArray(v)&&transitions.set(k,new Set(v||[]))}}catch{}}function persistAppliedTransitions(_window,transitions){if(transitions.size>0){let json={};for(let[k,v]of transitions)json[k]=[...v];try{_window.sessionStorage.setItem(TRANSITIONS_STORAGE_KEY,JSON.stringify(json))}catch(error){warning(!1,`Failed to save applied view transitions in sessionStorage (${error}).`)}}}function createDeferred(){let resolve,reject,promise=new Promise((res,rej)=>{resolve=async val=>{res(val);try{await promise}catch{}},reject=async error=>{rej(error);try{await promise}catch{}}});return{promise,resolve,reject}}var DataRouterContext=React.createContext(null);DataRouterContext.displayName="DataRouter";var DataRouterStateContext=React.createContext(null);DataRouterStateContext.displayName="DataRouterState";var RSCRouterContext=React.createContext(!1);function useIsRSCRouterContext(){return React.useContext(RSCRouterContext)}var ViewTransitionContext=React.createContext({isTransitioning:!1});ViewTransitionContext.displayName="ViewTransition";var FetchersContext=React.createContext(new Map);FetchersContext.displayName="Fetchers";var AwaitContext=React.createContext(null);AwaitContext.displayName="Await";var AwaitContextProvider=props=>React.createElement(AwaitContext.Provider,props),NavigationContext=React.createContext(null);NavigationContext.displayName="Navigation";var LocationContext=React.createContext(null);LocationContext.displayName="Location";var RouteContext=React.createContext({outlet:null,matches:[],isDataRoute:!1});RouteContext.displayName="Route";var RouteErrorContext=React.createContext(null);RouteErrorContext.displayName="RouteError";var ENABLE_DEV_WARNINGS=!0,ERROR_DIGEST_BASE="REACT_ROUTER_ERROR",ERROR_DIGEST_REDIRECT="REDIRECT",ERROR_DIGEST_ROUTE_ERROR_RESPONSE="ROUTE_ERROR_RESPONSE";function decodeRedirectErrorDigest(digest){if(digest.startsWith(`${ERROR_DIGEST_BASE}:${ERROR_DIGEST_REDIRECT}:{`))try{let parsed=JSON.parse(digest.slice(28));if(typeof parsed=="object"&&parsed&&typeof parsed.status=="number"&&typeof parsed.statusText=="string"&&typeof parsed.location=="string"&&typeof parsed.reloadDocument=="boolean"&&typeof parsed.replace=="boolean")return parsed}catch{}}function decodeRouteErrorResponseDigest(digest){if(digest.startsWith(`${ERROR_DIGEST_BASE}:${ERROR_DIGEST_ROUTE_ERROR_RESPONSE}:{`))try{let parsed=JSON.parse(digest.slice(40));if(typeof parsed=="object"&&parsed&&typeof parsed.status=="number"&&typeof parsed.statusText=="string")return new ErrorResponseImpl(parsed.status,parsed.statusText,parsed.data)}catch{}}function useHref(to,{relative}={}){invariant(useInRouterContext(),"useHref() may be used only in the context of a <Router> component.");let{basename,navigator}=React2.useContext(NavigationContext),{hash,pathname,search}=useResolvedPath(to,{relative}),joinedPathname=pathname;return basename!=="/"&&(joinedPathname=pathname==="/"?basename:joinPaths([basename,pathname])),navigator.createHref({pathname:joinedPathname,search,hash})}function useInRouterContext(){return React2.useContext(LocationContext)!=null}function useLocation(){return invariant(useInRouterContext(),"useLocation() may be used only in the context of a <Router> component."),React2.useContext(LocationContext).location}function useNavigationType(){return React2.useContext(LocationContext).navigationType}function useMatch(pattern){invariant(useInRouterContext(),"useMatch() may be used only in the context of a <Router> component.");let{pathname}=useLocation();return React2.useMemo(()=>matchPath(pattern,decodePath(pathname)),[pathname,pattern])}var navigateEffectWarning="You should call navigate() in a React.useEffect(), not when your component is first rendered.";function useIsomorphicLayoutEffect(cb){React2.useContext(NavigationContext).static||React2.useLayoutEffect(cb)}function useNavigate(){let{isDataRoute}=React2.useContext(RouteContext);return isDataRoute?useNavigateStable():useNavigateUnstable()}function useNavigateUnstable(){invariant(useInRouterContext(),"useNavigate() may be used only in the context of a <Router> component.");let dataRouterContext=React2.useContext(DataRouterContext),{basename,navigator}=React2.useContext(NavigationContext),{matches}=React2.useContext(RouteContext),{pathname:locationPathname}=useLocation(),routePathnamesJson=JSON.stringify(getResolveToMatches(matches)),activeRef=React2.useRef(!1);return useIsomorphicLayoutEffect(()=>{activeRef.current=!0}),React2.useCallback((to,options={})=>{if(warning(activeRef.current,navigateEffectWarning),!activeRef.current)return;if(typeof to=="number"){navigator.go(to);return}let path=resolveTo(to,JSON.parse(routePathnamesJson),locationPathname,options.relative==="path");dataRouterContext==null&&basename!=="/"&&(path.pathname=path.pathname==="/"?basename:joinPaths([basename,path.pathname])),(options.replace?navigator.replace:navigator.push)(path,options.state,options)},[basename,navigator,routePathnamesJson,locationPathname,dataRouterContext])}var OutletContext=React2.createContext(null);function useOutletContext(){return React2.useContext(OutletContext)}function useOutlet(context){let outlet=React2.useContext(RouteContext).outlet;return React2.useMemo(()=>outlet&&React2.createElement(OutletContext.Provider,{value:context},outlet),[outlet,context])}function useParams(){let{matches}=React2.useContext(RouteContext);return matches[matches.length-1]?.params??{}}function useResolvedPath(to,{relative}={}){let{matches}=React2.useContext(RouteContext),{pathname:locationPathname}=useLocation(),routePathnamesJson=JSON.stringify(getResolveToMatches(matches));return React2.useMemo(()=>resolveTo(to,JSON.parse(routePathnamesJson),locationPathname,relative==="path"),[to,routePathnamesJson,locationPathname,relative])}function useRoutes(routes,locationArg){return useRoutesImpl(routes,locationArg)}function useRoutesImpl(routes,locationArg,dataRouterOpts){invariant(useInRouterContext(),"useRoutes() may be used only in the context of a <Router> component.");let{navigator}=React2.useContext(NavigationContext),{matches:parentMatches}=React2.useContext(RouteContext),routeMatch=parentMatches[parentMatches.length-1],parentParams=routeMatch?routeMatch.params:{},parentPathname=routeMatch?routeMatch.pathname:"/",parentPathnameBase=routeMatch?routeMatch.pathnameBase:"/",parentRoute=routeMatch&&routeMatch.route;if(ENABLE_DEV_WARNINGS){let parentPath=parentRoute&&parentRoute.path||"";warningOnce(parentPathname,!parentRoute||parentPath.endsWith("*")||parentPath.endsWith("*?"),`You rendered descendant <Routes> (or called \`useRoutes()\`) at "${parentPathname}" (under <Route path="${parentPath}">) but the parent route path has no trailing "*". This means if you navigate deeper, the parent won't match anymore and therefore the child routes will never render.
|
|
3
|
+
|
|
4
|
+
Please change the parent <Route path="${parentPath}"> to <Route path="${parentPath==="/"?"*":`${parentPath}/*`}">.`)}let locationFromContext=useLocation(),location;if(locationArg){let parsedLocationArg=typeof locationArg=="string"?parsePath(locationArg):locationArg;invariant(parentPathnameBase==="/"||parsedLocationArg.pathname?.startsWith(parentPathnameBase),`When overriding the location using \`<Routes location>\` or \`useRoutes(routes, location)\`, the location pathname must begin with the portion of the URL pathname that was matched by all parent routes. The current pathname base is "${parentPathnameBase}" but pathname "${parsedLocationArg.pathname}" was given in the \`location\` prop.`),location=parsedLocationArg}else location=locationFromContext;let pathname=location.pathname||"/",remainingPathname=pathname;if(parentPathnameBase!=="/"){let parentSegments=parentPathnameBase.replace(/^\//,"").split("/");remainingPathname="/"+pathname.replace(/^\//,"").split("/").slice(parentSegments.length).join("/")}let matches=dataRouterOpts&&dataRouterOpts.state.matches.length?dataRouterOpts.state.matches.map(m=>Object.assign(m,{route:dataRouterOpts.manifest[m.route.id]||m.route})):matchRoutes(routes,{pathname:remainingPathname});ENABLE_DEV_WARNINGS&&(warning(parentRoute||matches!=null,`No routes matched location "${location.pathname}${location.search}${location.hash}" `),warning(matches==null||matches[matches.length-1].route.element!==void 0||matches[matches.length-1].route.Component!==void 0||matches[matches.length-1].route.lazy!==void 0,`Matched leaf route at location "${location.pathname}${location.search}${location.hash}" does not have an element or Component. This means it will render an <Outlet /> with a null value by default resulting in an "empty" page.`));let renderedMatches=_renderMatches(matches&&matches.map(match=>Object.assign({},match,{params:Object.assign({},parentParams,match.params),pathname:joinPaths([parentPathnameBase,navigator.encodeLocation?navigator.encodeLocation(match.pathname.replace(/%/g,"%25").replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:match.pathname]),pathnameBase:match.pathnameBase==="/"?parentPathnameBase:joinPaths([parentPathnameBase,navigator.encodeLocation?navigator.encodeLocation(match.pathnameBase.replace(/%/g,"%25").replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:match.pathnameBase])})),parentMatches,dataRouterOpts);return locationArg&&renderedMatches?React2.createElement(LocationContext.Provider,{value:{location:{pathname:"/",search:"",hash:"",state:null,key:"default",mask:void 0,...location},navigationType:"POP"}},renderedMatches):renderedMatches}function DefaultErrorComponent(){let error=useRouteError(),message=isRouteErrorResponse(error)?`${error.status} ${error.statusText}`:error instanceof Error?error.message:JSON.stringify(error),stack=error instanceof Error?error.stack:null,lightgrey="rgba(200,200,200, 0.5)",preStyles={padding:"0.5rem",backgroundColor:lightgrey},codeStyles={padding:"2px 4px",backgroundColor:lightgrey},devInfo=null;return ENABLE_DEV_WARNINGS&&(console.error("Error handled by React Router default ErrorBoundary:",error),devInfo=React2.createElement(React2.Fragment,null,React2.createElement("p",null,"\u{1F4BF} Hey developer \u{1F44B}"),React2.createElement("p",null,"You can provide a way better UX than this when your app throws errors by providing your own ",React2.createElement("code",{style:codeStyles},"ErrorBoundary")," or"," ",React2.createElement("code",{style:codeStyles},"errorElement")," prop on your route."))),React2.createElement(React2.Fragment,null,React2.createElement("h2",null,"Unexpected Application Error!"),React2.createElement("h3",{style:{fontStyle:"italic"}},message),stack?React2.createElement("pre",{style:preStyles},stack):null,devInfo)}var defaultErrorElement=React2.createElement(DefaultErrorComponent,null),RenderErrorBoundary=class extends React2.Component{constructor(props){super(props),this.state={location:props.location,revalidation:props.revalidation,error:props.error}}static getDerivedStateFromError(error){return{error}}static getDerivedStateFromProps(props,state){return state.location!==props.location||state.revalidation!=="idle"&&props.revalidation==="idle"?{error:props.error,location:props.location,revalidation:props.revalidation}:{error:props.error!==void 0?props.error:state.error,location:state.location,revalidation:props.revalidation||state.revalidation}}componentDidCatch(error,errorInfo){this.props.onError?this.props.onError(error,errorInfo):console.error("React Router caught the following error during render",error)}render(){let error=this.state.error;if(this.context&&typeof error=="object"&&error&&"digest"in error&&typeof error.digest=="string"){let decoded=decodeRouteErrorResponseDigest(error.digest);decoded&&(error=decoded)}let result=error!==void 0?React2.createElement(RouteContext.Provider,{value:this.props.routeContext},React2.createElement(RouteErrorContext.Provider,{value:error,children:this.props.component})):this.props.children;return this.context?React2.createElement(RSCErrorHandler,{error},result):result}};RenderErrorBoundary.contextType=RSCRouterContext;var errorRedirectHandledMap=new WeakMap;function RSCErrorHandler({children,error}){let{basename}=React2.useContext(NavigationContext);if(typeof error=="object"&&error&&"digest"in error&&typeof error.digest=="string"){let redirect2=decodeRedirectErrorDigest(error.digest);if(redirect2){let existingRedirect=errorRedirectHandledMap.get(error);if(existingRedirect)throw existingRedirect;let parsed=parseToInfo(redirect2.location,basename),target=parsed.absoluteURL||parsed.to;if(hasInvalidProtocol(target))throw new Error("Invalid redirect location");if(isBrowser&&!errorRedirectHandledMap.get(error))if(parsed.isExternal||redirect2.reloadDocument)window.location.href=target;else{let redirectPromise=Promise.resolve().then(()=>window.__reactRouterDataRouter.navigate(parsed.to,{replace:redirect2.replace}));throw errorRedirectHandledMap.set(error,redirectPromise),redirectPromise}return React2.createElement("meta",{httpEquiv:"refresh",content:`0;url=${target}`})}}return children}function RenderedRoute({routeContext,match,children}){let dataRouterContext=React2.useContext(DataRouterContext);return dataRouterContext&&dataRouterContext.static&&dataRouterContext.staticContext&&(match.route.errorElement||match.route.ErrorBoundary)&&(dataRouterContext.staticContext._deepestRenderedBoundaryId=match.route.id),React2.createElement(RouteContext.Provider,{value:routeContext},children)}function _renderMatches(matches,parentMatches=[],dataRouterOpts){let dataRouterState=dataRouterOpts?.state;if(matches==null){if(!dataRouterState)return null;if(dataRouterState.errors)matches=dataRouterState.matches;else if(parentMatches.length===0&&!dataRouterState.initialized&&dataRouterState.matches.length>0)matches=dataRouterState.matches;else return null}let renderedMatches=matches,errors=dataRouterState?.errors;if(errors!=null){let errorIndex=renderedMatches.findIndex(m=>m.route.id&&errors?.[m.route.id]!==void 0);invariant(errorIndex>=0,`Could not find a matching route for errors on route IDs: ${Object.keys(errors).join(",")}`),renderedMatches=renderedMatches.slice(0,Math.min(renderedMatches.length,errorIndex+1))}let renderFallback=!1,fallbackIndex=-1;if(dataRouterOpts&&dataRouterState){renderFallback=dataRouterState.renderFallback;for(let i=0;i<renderedMatches.length;i++){let match=renderedMatches[i];if((match.route.HydrateFallback||match.route.hydrateFallbackElement)&&(fallbackIndex=i),match.route.id){let{loaderData,errors:errors2}=dataRouterState,needsToRunLoader=match.route.loader&&!loaderData.hasOwnProperty(match.route.id)&&(!errors2||errors2[match.route.id]===void 0);if(match.route.lazy||needsToRunLoader){dataRouterOpts.isStatic&&(renderFallback=!0),fallbackIndex>=0?renderedMatches=renderedMatches.slice(0,fallbackIndex+1):renderedMatches=[renderedMatches[0]];break}}}}let onErrorHandler=dataRouterOpts?.onError,onError=dataRouterState&&onErrorHandler?(error,errorInfo)=>{onErrorHandler(error,{location:dataRouterState.location,params:dataRouterState.matches?.[0]?.params??{},pattern:getRoutePattern(dataRouterState.matches),errorInfo})}:void 0;return renderedMatches.reduceRight((outlet,match,index)=>{let error,shouldRenderHydrateFallback=!1,errorElement=null,hydrateFallbackElement=null;dataRouterState&&(error=errors&&match.route.id?errors[match.route.id]:void 0,errorElement=match.route.errorElement||defaultErrorElement,renderFallback&&(fallbackIndex<0&&index===0?(warningOnce("route-fallback",!1,"No `HydrateFallback` element provided to render during initial hydration"),shouldRenderHydrateFallback=!0,hydrateFallbackElement=null):fallbackIndex===index&&(shouldRenderHydrateFallback=!0,hydrateFallbackElement=match.route.hydrateFallbackElement||null)));let matches2=parentMatches.concat(renderedMatches.slice(0,index+1)),getChildren=()=>{let children;return error?children=errorElement:shouldRenderHydrateFallback?children=hydrateFallbackElement:match.route.Component?children=React2.createElement(match.route.Component,null):match.route.element?children=match.route.element:children=outlet,React2.createElement(RenderedRoute,{match,routeContext:{outlet,matches:matches2,isDataRoute:dataRouterState!=null},children})};return dataRouterState&&(match.route.ErrorBoundary||match.route.errorElement||index===0)?React2.createElement(RenderErrorBoundary,{location:dataRouterState.location,revalidation:dataRouterState.revalidation,component:errorElement,error,children:getChildren(),routeContext:{outlet:null,matches:matches2,isDataRoute:!0},onError}):getChildren()},null)}function getDataRouterConsoleError(hookName){return`${hookName} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function useDataRouterContext(hookName){let ctx=React2.useContext(DataRouterContext);return invariant(ctx,getDataRouterConsoleError(hookName)),ctx}function useDataRouterState(hookName){let state=React2.useContext(DataRouterStateContext);return invariant(state,getDataRouterConsoleError(hookName)),state}function useRouteContext(hookName){let route=React2.useContext(RouteContext);return invariant(route,getDataRouterConsoleError(hookName)),route}function useCurrentRouteId(hookName){let route=useRouteContext(hookName),thisRoute=route.matches[route.matches.length-1];return invariant(thisRoute.route.id,`${hookName} can only be used on routes that contain a unique "id"`),thisRoute.route.id}function useRouteId(){return useCurrentRouteId("useRouteId")}function useNavigation(){let state=useDataRouterState("useNavigation");return React2.useMemo(()=>{let{matches,historyAction,...rest}=state.navigation;return rest},[state.navigation])}function useRevalidator(){let dataRouterContext=useDataRouterContext("useRevalidator"),state=useDataRouterState("useRevalidator"),revalidate=React2.useCallback(async()=>{await dataRouterContext.router.revalidate()},[dataRouterContext.router]);return React2.useMemo(()=>({revalidate,state:state.revalidation}),[revalidate,state.revalidation])}function useMatches(){let{matches,loaderData}=useDataRouterState("useMatches");return React2.useMemo(()=>matches.map(m=>convertRouteMatchToUiMatch(m,loaderData)),[matches,loaderData])}function useLoaderData(){let state=useDataRouterState("useLoaderData"),routeId=useCurrentRouteId("useLoaderData");return state.loaderData[routeId]}function useRouteLoaderData(routeId){return useDataRouterState("useRouteLoaderData").loaderData[routeId]}function useActionData(){let state=useDataRouterState("useActionData"),routeId=useCurrentRouteId("useLoaderData");return state.actionData?state.actionData[routeId]:void 0}function useRouteError(){let error=React2.useContext(RouteErrorContext),state=useDataRouterState("useRouteError"),routeId=useCurrentRouteId("useRouteError");return error!==void 0?error:state.errors?.[routeId]}function useAsyncValue(){return React2.useContext(AwaitContext)?._data}function useAsyncError(){return React2.useContext(AwaitContext)?._error}var blockerId=0;function useBlocker(shouldBlock){let{router,basename}=useDataRouterContext("useBlocker"),state=useDataRouterState("useBlocker"),[blockerKey,setBlockerKey]=React2.useState(""),blockerFunction=React2.useCallback(arg=>{if(typeof shouldBlock!="function")return!!shouldBlock;if(basename==="/")return shouldBlock(arg);let{currentLocation,nextLocation,historyAction}=arg;return shouldBlock({currentLocation:{...currentLocation,pathname:stripBasename(currentLocation.pathname,basename)||currentLocation.pathname},nextLocation:{...nextLocation,pathname:stripBasename(nextLocation.pathname,basename)||nextLocation.pathname},historyAction})},[basename,shouldBlock]);return React2.useEffect(()=>{let key=String(++blockerId);return setBlockerKey(key),()=>router.deleteBlocker(key)},[router]),React2.useEffect(()=>{blockerKey!==""&&router.getBlocker(blockerKey,blockerFunction)},[router,blockerKey,blockerFunction]),blockerKey&&state.blockers.has(blockerKey)?state.blockers.get(blockerKey):IDLE_BLOCKER}function useNavigateStable(){let{router}=useDataRouterContext("useNavigate"),id=useCurrentRouteId("useNavigate"),activeRef=React2.useRef(!1);return useIsomorphicLayoutEffect(()=>{activeRef.current=!0}),React2.useCallback(async(to,options={})=>{warning(activeRef.current,navigateEffectWarning),activeRef.current&&(typeof to=="number"?await router.navigate(to):await router.navigate(to,{fromRouteId:id,...options}))},[router,id])}var alreadyWarned={};function warningOnce(key,cond,message){!cond&&!alreadyWarned[key]&&(alreadyWarned[key]=!0,warning(!1,message))}function useRoute(...args){let currentRouteId=useCurrentRouteId("useRoute"),id=args[0]??currentRouteId,state=useDataRouterState("useRoute"),route=state.matches.find(({route:route2})=>route2.id===id);if(route!==void 0)return{handle:route.route.handle,loaderData:state.loaderData[id],actionData:state.actionData?.[id]}}function toRouterStateMatch(match){return{id:match.route.id,pathname:match.pathname,params:match.params,handle:match.route.handle}}function useRouterState(){let{location,historyAction:type,matches,navigation}=useDataRouterState("unstable_useRouterState"),active=React2.useMemo(()=>({type,location,searchParams:new URLSearchParams(location.search),params:matches[matches.length-1]?.params??{},matches:matches.map(m=>toRouterStateMatch(m))}),[location,matches,type]),pending=React2.useMemo(()=>{if(navigation.state==="idle")return null;let shared={type:navigation.historyAction,location:navigation.location,searchParams:new URLSearchParams(navigation.location.search),params:navigation.matches[navigation.matches.length-1]?.params??{},matches:navigation.matches.map(m=>toRouterStateMatch(m))};return navigation.state==="loading"?{...shared,state:"loading",formMethod:navigation.formMethod,formAction:navigation.formAction,formEncType:navigation.formEncType,formData:navigation.formData,json:navigation.json,text:navigation.text}:{...shared,state:"submitting",formMethod:navigation.formMethod,formAction:navigation.formAction,formEncType:navigation.formEncType,formData:navigation.formData,json:navigation.json,text:navigation.text}},[navigation]);return React2.useMemo(()=>({active,pending}),[active,pending])}var alreadyWarned2={};function warnOnce(condition,message){!condition&&!alreadyWarned2[message]&&(alreadyWarned2[message]=!0,console.warn(message))}var USE_OPTIMISTIC="useOptimistic",useOptimisticImpl=React3[USE_OPTIMISTIC],stableUseOptimisticSetter=()=>{};function useOptimisticSafe(val){return useOptimisticImpl?useOptimisticImpl(val):[val,stableUseOptimisticSetter]}function mapRouteProperties(route){let updates={hasErrorBoundary:route.hasErrorBoundary||route.ErrorBoundary!=null||route.errorElement!=null};return route.Component&&(ENABLE_DEV_WARNINGS&&route.element&&warning(!1,"You should not include both `Component` and `element` on your route - `Component` will be used."),Object.assign(updates,{element:React3.createElement(route.Component),Component:void 0})),route.HydrateFallback&&(ENABLE_DEV_WARNINGS&&route.hydrateFallbackElement&&warning(!1,"You should not include both `HydrateFallback` and `hydrateFallbackElement` on your route - `HydrateFallback` will be used."),Object.assign(updates,{hydrateFallbackElement:React3.createElement(route.HydrateFallback),HydrateFallback:void 0})),route.ErrorBoundary&&(ENABLE_DEV_WARNINGS&&route.errorElement&&warning(!1,"You should not include both `ErrorBoundary` and `errorElement` on your route - `ErrorBoundary` will be used."),Object.assign(updates,{errorElement:React3.createElement(route.ErrorBoundary),ErrorBoundary:void 0})),updates}var hydrationRouteProperties=["HydrateFallback","hydrateFallbackElement"];function createMemoryRouter(routes,opts){return createRouter({basename:opts?.basename,getContext:opts?.getContext,future:opts?.future,history:createMemoryHistory({initialEntries:opts?.initialEntries,initialIndex:opts?.initialIndex}),hydrationData:opts?.hydrationData,routes,hydrationRouteProperties,mapRouteProperties,dataStrategy:opts?.dataStrategy,patchRoutesOnNavigation:opts?.patchRoutesOnNavigation,instrumentations:opts?.instrumentations}).initialize()}var Deferred=class{constructor(){this.status="pending",this.promise=new Promise((resolve,reject)=>{this.resolve=value=>{this.status==="pending"&&(this.status="resolved",resolve(value))},this.reject=reason=>{this.status==="pending"&&(this.status="rejected",reject(reason))}})}};function RouterProvider({router,flushSync:reactDomFlushSyncImpl,onError,useTransitions}){useTransitions=useIsRSCRouterContext()||useTransitions;let[_state,setStateImpl]=React3.useState(router.state),[state,setOptimisticState]=useOptimisticSafe(_state),[pendingState,setPendingState]=React3.useState(),[vtContext,setVtContext]=React3.useState({isTransitioning:!1}),[renderDfd,setRenderDfd]=React3.useState(),[transition,setTransition]=React3.useState(),[interruption,setInterruption]=React3.useState(),fetcherData=React3.useRef(new Map),setState=React3.useCallback((newState,{deletedFetchers,newErrors,flushSync,viewTransitionOpts})=>{newErrors&&onError&&Object.values(newErrors).forEach(error=>onError(error,{location:newState.location,params:newState.matches[0]?.params??{},pattern:getRoutePattern(newState.matches)})),newState.fetchers.forEach((fetcher,key)=>{fetcher.data!==void 0&&fetcherData.current.set(key,fetcher.data)}),deletedFetchers.forEach(key=>fetcherData.current.delete(key)),warnOnce(flushSync===!1||reactDomFlushSyncImpl!=null,'You provided the `flushSync` option to a router update, but you are not using the `<RouterProvider>` from `react-router/dom` so `ReactDOM.flushSync()` is unavailable. Please update your app to `import { RouterProvider } from "react-router/dom"` and ensure you have `react-dom` installed as a dependency to use the `flushSync` option.');let isViewTransitionAvailable=router.window!=null&&router.window.document!=null&&typeof router.window.document.startViewTransition=="function";if(warnOnce(viewTransitionOpts==null||isViewTransitionAvailable,"You provided the `viewTransition` option to a router update, but you do not appear to be running in a DOM environment as `window.startViewTransition` is not available."),!viewTransitionOpts||!isViewTransitionAvailable){reactDomFlushSyncImpl&&flushSync?reactDomFlushSyncImpl(()=>setStateImpl(newState)):useTransitions===!1?setStateImpl(newState):React3.startTransition(()=>{useTransitions===!0&&setOptimisticState(s=>getOptimisticRouterState(s,newState)),setStateImpl(newState)});return}if(reactDomFlushSyncImpl&&flushSync){reactDomFlushSyncImpl(()=>{transition&&(renderDfd?.resolve(),transition.skipTransition()),setVtContext({isTransitioning:!0,flushSync:!0,currentLocation:viewTransitionOpts.currentLocation,nextLocation:viewTransitionOpts.nextLocation})});let t=router.window.document.startViewTransition(()=>{reactDomFlushSyncImpl(()=>setStateImpl(newState))});t.finished.finally(()=>{reactDomFlushSyncImpl(()=>{setRenderDfd(void 0),setTransition(void 0),setPendingState(void 0),setVtContext({isTransitioning:!1})})}),reactDomFlushSyncImpl(()=>setTransition(t));return}transition?(renderDfd?.resolve(),transition.skipTransition(),setInterruption({state:newState,currentLocation:viewTransitionOpts.currentLocation,nextLocation:viewTransitionOpts.nextLocation})):(setPendingState(newState),setVtContext({isTransitioning:!0,flushSync:!1,currentLocation:viewTransitionOpts.currentLocation,nextLocation:viewTransitionOpts.nextLocation}))},[router.window,reactDomFlushSyncImpl,transition,renderDfd,useTransitions,setOptimisticState,onError]);React3.useLayoutEffect(()=>router.subscribe(setState),[router,setState]),React3.useEffect(()=>{vtContext.isTransitioning&&!vtContext.flushSync&&setRenderDfd(new Deferred)},[vtContext]),React3.useEffect(()=>{if(renderDfd&&pendingState&&router.window){let newState=pendingState,renderPromise=renderDfd.promise,transition2=router.window.document.startViewTransition(async()=>{useTransitions===!1?setStateImpl(newState):React3.startTransition(()=>{useTransitions===!0&&setOptimisticState(s=>getOptimisticRouterState(s,newState)),setStateImpl(newState)}),await renderPromise});transition2.finished.finally(()=>{setRenderDfd(void 0),setTransition(void 0),setPendingState(void 0),setVtContext({isTransitioning:!1})}),setTransition(transition2)}},[pendingState,renderDfd,router.window,useTransitions,setOptimisticState]),React3.useEffect(()=>{renderDfd&&pendingState&&state.location.key===pendingState.location.key&&renderDfd.resolve()},[renderDfd,transition,state.location,pendingState]),React3.useEffect(()=>{!vtContext.isTransitioning&&interruption&&(setPendingState(interruption.state),setVtContext({isTransitioning:!0,flushSync:!1,currentLocation:interruption.currentLocation,nextLocation:interruption.nextLocation}),setInterruption(void 0))},[vtContext.isTransitioning,interruption]);let navigator=React3.useMemo(()=>({createHref:router.createHref,encodeLocation:router.encodeLocation,go:n=>router.navigate(n),push:(to,state2,opts)=>router.navigate(to,{state:state2,preventScrollReset:opts?.preventScrollReset}),replace:(to,state2,opts)=>router.navigate(to,{replace:!0,state:state2,preventScrollReset:opts?.preventScrollReset})}),[router]),basename=router.basename||"/",dataRouterContext=React3.useMemo(()=>({router,navigator,static:!1,basename,onError}),[router,navigator,basename,onError]);return React3.createElement(React3.Fragment,null,React3.createElement(DataRouterContext.Provider,{value:dataRouterContext},React3.createElement(DataRouterStateContext.Provider,{value:state},React3.createElement(FetchersContext.Provider,{value:fetcherData.current},React3.createElement(ViewTransitionContext.Provider,{value:vtContext},React3.createElement(Router,{basename,location:state.location,navigationType:state.historyAction,navigator,useTransitions},React3.createElement(MemoizedDataRoutes,{routes:router.routes,manifest:router.manifest,future:router.future,state,isStatic:!1,onError})))))),null)}function getOptimisticRouterState(currentState,newState){return{...currentState,navigation:newState.navigation.state!=="idle"?newState.navigation:currentState.navigation,revalidation:newState.revalidation!=="idle"?newState.revalidation:currentState.revalidation,actionData:newState.navigation.state!=="submitting"?newState.actionData:currentState.actionData,fetchers:newState.fetchers}}var MemoizedDataRoutes=React3.memo(DataRoutes2);function DataRoutes2({routes,manifest,future,state,isStatic,onError}){return useRoutesImpl(routes,void 0,{manifest,state,isStatic,onError,future})}function MemoryRouter({basename,children,initialEntries,initialIndex,useTransitions}){let historyRef=React3.useRef();historyRef.current==null&&(historyRef.current=createMemoryHistory({initialEntries,initialIndex,v5Compat:!0}));let history=historyRef.current,[state,setStateImpl]=React3.useState({action:history.action,location:history.location}),setState=React3.useCallback(newState=>{useTransitions===!1?setStateImpl(newState):React3.startTransition(()=>setStateImpl(newState))},[useTransitions]);return React3.useLayoutEffect(()=>history.listen(setState),[history,setState]),React3.createElement(Router,{basename,children,location:state.location,navigationType:state.action,navigator:history,useTransitions})}function Navigate({to,replace:replace2,state,relative}){invariant(useInRouterContext(),"<Navigate> may be used only in the context of a <Router> component.");let{static:isStatic}=React3.useContext(NavigationContext);warning(!isStatic,"<Navigate> must not be used on the initial render in a <StaticRouter>. This is a no-op, but you should modify your code so the <Navigate> is only ever rendered in response to some user interaction or state change.");let{matches}=React3.useContext(RouteContext),{pathname:locationPathname}=useLocation(),navigate=useNavigate(),path=resolveTo(to,getResolveToMatches(matches),locationPathname,relative==="path"),jsonPath=JSON.stringify(path);return React3.useEffect(()=>{navigate(JSON.parse(jsonPath),{replace:replace2,state,relative})},[navigate,jsonPath,relative,replace2,state]),null}function Outlet(props){return useOutlet(props.context)}function Route(props){invariant(!1,"A <Route> is only ever to be used as the child of <Routes> element, never rendered directly. Please wrap your <Route> in a <Routes>.")}function Router({basename:basenameProp="/",children=null,location:locationProp,navigationType="POP",navigator,static:staticProp=!1,useTransitions}){invariant(!useInRouterContext(),"You cannot render a <Router> inside another <Router>. You should never have more than one in your app.");let basename=basenameProp.replace(/^\/*/,"/"),navigationContext=React3.useMemo(()=>({basename,navigator,static:staticProp,useTransitions,future:{}}),[basename,navigator,staticProp,useTransitions]);typeof locationProp=="string"&&(locationProp=parsePath(locationProp));let{pathname="/",search="",hash="",state=null,key="default",mask}=locationProp,locationContext=React3.useMemo(()=>{let trailingPathname=stripBasename(pathname,basename);return trailingPathname==null?null:{location:{pathname:trailingPathname,search,hash,state,key,mask},navigationType}},[basename,pathname,search,hash,state,key,navigationType,mask]);return warning(locationContext!=null,`<Router basename="${basename}"> is not able to match the URL "${pathname}${search}${hash}" because it does not start with the basename, so the <Router> won't render anything.`),locationContext==null?null:React3.createElement(NavigationContext.Provider,{value:navigationContext},React3.createElement(LocationContext.Provider,{children,value:locationContext}))}function Routes({children,location}){return useRoutes(createRoutesFromChildren(children),location)}function Await({children,errorElement,resolve}){let dataRouterContext=React3.useContext(DataRouterContext),dataRouterStateContext=React3.useContext(DataRouterStateContext),onError=React3.useCallback((error,errorInfo)=>{dataRouterContext&&dataRouterContext.onError&&dataRouterStateContext&&dataRouterContext.onError(error,{location:dataRouterStateContext.location,params:dataRouterStateContext.matches[0]?.params||{},pattern:getRoutePattern(dataRouterStateContext.matches),errorInfo})},[dataRouterContext,dataRouterStateContext]);return React3.createElement(AwaitErrorBoundary,{resolve,errorElement,onError},React3.createElement(ResolveAwait,null,children))}var AwaitErrorBoundary=class extends React3.Component{constructor(props){super(props),this.state={error:null}}static getDerivedStateFromError(error){return{error}}componentDidCatch(error,errorInfo){this.props.onError?this.props.onError(error,errorInfo):console.error("<Await> caught the following error during render",error,errorInfo)}render(){let{children,errorElement,resolve}=this.props,promise=null,status=0;if(!(resolve instanceof Promise))status=1,promise=Promise.resolve(),Object.defineProperty(promise,"_tracked",{get:()=>!0}),Object.defineProperty(promise,"_data",{get:()=>resolve});else if(this.state.error){status=2;let renderError=this.state.error;promise=Promise.reject().catch(()=>{}),Object.defineProperty(promise,"_tracked",{get:()=>!0}),Object.defineProperty(promise,"_error",{get:()=>renderError})}else resolve._tracked?(promise=resolve,status="_error"in promise?2:"_data"in promise?1:0):(status=0,Object.defineProperty(resolve,"_tracked",{get:()=>!0}),promise=resolve.then(data2=>Object.defineProperty(resolve,"_data",{get:()=>data2}),error=>{this.props.onError?.(error),Object.defineProperty(resolve,"_error",{get:()=>error})}));if(status===2&&!errorElement)throw promise._error;if(status===2)return React3.createElement(AwaitContext.Provider,{value:promise,children:errorElement});if(status===1)return React3.createElement(AwaitContext.Provider,{value:promise,children});throw promise}};function ResolveAwait({children}){let data2=useAsyncValue(),toRender=typeof children=="function"?children(data2):children;return React3.createElement(React3.Fragment,null,toRender)}function createRoutesFromChildren(children,parentPath=[]){let routes=[];return React3.Children.forEach(children,(element,index)=>{if(!React3.isValidElement(element))return;let treePath=[...parentPath,index];if(element.type===React3.Fragment){routes.push.apply(routes,createRoutesFromChildren(element.props.children,treePath));return}invariant(element.type===Route,`[${typeof element.type=="string"?element.type:element.type.name}] is not a <Route> component. All component children of <Routes> must be a <Route> or <React.Fragment>`),invariant(!element.props.index||!element.props.children,"An index route cannot have child routes.");let route={id:element.props.id||treePath.join("-"),caseSensitive:element.props.caseSensitive,element:element.props.element,Component:element.props.Component,index:element.props.index,path:element.props.path,middleware:element.props.middleware,loader:element.props.loader,action:element.props.action,hydrateFallbackElement:element.props.hydrateFallbackElement,HydrateFallback:element.props.HydrateFallback,errorElement:element.props.errorElement,ErrorBoundary:element.props.ErrorBoundary,hasErrorBoundary:element.props.hasErrorBoundary===!0||element.props.ErrorBoundary!=null||element.props.errorElement!=null,shouldRevalidate:element.props.shouldRevalidate,handle:element.props.handle,lazy:element.props.lazy};element.props.children&&(route.children=createRoutesFromChildren(element.props.children,treePath)),routes.push(route)}),routes}var createRoutesFromElements=createRoutesFromChildren;function renderMatches(matches){return _renderMatches(matches)}function useRouteComponentProps(){return{params:useParams(),loaderData:useLoaderData(),actionData:useActionData(),matches:useMatches()}}function WithComponentProps({children}){let props=useRouteComponentProps();return React3.cloneElement(children,props)}function withComponentProps(Component4){return function(){let props=useRouteComponentProps();return React3.createElement(Component4,props)}}function useHydrateFallbackProps(){return{params:useParams(),loaderData:useLoaderData(),actionData:useActionData()}}function WithHydrateFallbackProps({children}){let props=useHydrateFallbackProps();return React3.cloneElement(children,props)}function withHydrateFallbackProps(HydrateFallback){return function(){let props=useHydrateFallbackProps();return React3.createElement(HydrateFallback,props)}}function useErrorBoundaryProps(){return{params:useParams(),loaderData:useLoaderData(),actionData:useActionData(),error:useRouteError()}}function WithErrorBoundaryProps({children}){let props=useErrorBoundaryProps();return React3.cloneElement(children,props)}function withErrorBoundaryProps(ErrorBoundary){return function(){let props=useErrorBoundaryProps();return React3.createElement(ErrorBoundary,props)}}var defaultMethod="get",defaultEncType="application/x-www-form-urlencoded";function isHtmlElement(object){return typeof HTMLElement<"u"&&object instanceof HTMLElement}function isButtonElement(object){return isHtmlElement(object)&&object.tagName.toLowerCase()==="button"}function isFormElement(object){return isHtmlElement(object)&&object.tagName.toLowerCase()==="form"}function isInputElement(object){return isHtmlElement(object)&&object.tagName.toLowerCase()==="input"}function isModifiedEvent(event){return!!(event.metaKey||event.altKey||event.ctrlKey||event.shiftKey)}function shouldProcessLinkClick(event,target){return event.button===0&&(!target||target==="_self")&&!isModifiedEvent(event)}function createSearchParams(init=""){return new URLSearchParams(typeof init=="string"||Array.isArray(init)||init instanceof URLSearchParams?init:Object.keys(init).reduce((memo2,key)=>{let value=init[key];return memo2.concat(Array.isArray(value)?value.map(v=>[key,v]):[[key,value]])},[]))}function getSearchParamsForLocation(locationSearch,defaultSearchParams){let searchParams=createSearchParams(locationSearch);return defaultSearchParams&&defaultSearchParams.forEach((_,key)=>{searchParams.has(key)||defaultSearchParams.getAll(key).forEach(value=>{searchParams.append(key,value)})}),searchParams}var _formDataSupportsSubmitter=null;function isFormDataSubmitterSupported(){if(_formDataSupportsSubmitter===null)try{new FormData(document.createElement("form"),0),_formDataSupportsSubmitter=!1}catch{_formDataSupportsSubmitter=!0}return _formDataSupportsSubmitter}var supportedFormEncTypes=new Set(["application/x-www-form-urlencoded","multipart/form-data","text/plain"]);function getFormEncType(encType){return encType!=null&&!supportedFormEncTypes.has(encType)?(warning(!1,`"${encType}" is not a valid \`encType\` for \`<Form>\`/\`<fetcher.Form>\` and will default to "${defaultEncType}"`),null):encType}function getFormSubmissionInfo(target,basename){let method,action,encType,formData,body;if(isFormElement(target)){let attr=target.getAttribute("action");action=attr?stripBasename(attr,basename):null,method=target.getAttribute("method")||defaultMethod,encType=getFormEncType(target.getAttribute("enctype"))||defaultEncType,formData=new FormData(target)}else if(isButtonElement(target)||isInputElement(target)&&(target.type==="submit"||target.type==="image")){let form=target.form;if(form==null)throw new Error('Cannot submit a <button> or <input type="submit"> without a <form>');let attr=target.getAttribute("formaction")||form.getAttribute("action");if(action=attr?stripBasename(attr,basename):null,method=target.getAttribute("formmethod")||form.getAttribute("method")||defaultMethod,encType=getFormEncType(target.getAttribute("formenctype"))||getFormEncType(form.getAttribute("enctype"))||defaultEncType,formData=new FormData(form,target),!isFormDataSubmitterSupported()){let{name,type,value}=target;if(type==="image"){let prefix=name?`${name}.`:"";formData.append(`${prefix}x`,"0"),formData.append(`${prefix}y`,"0")}else name&&formData.append(name,value)}}else{if(isHtmlElement(target))throw new Error('Cannot submit element that is not <form>, <button>, or <input type="submit|image">');method=defaultMethod,action=null,encType=defaultEncType,body=target}return formData&&encType==="text/plain"&&(body=formData,formData=void 0),{action,method:method.toLowerCase(),encType,formData,body}}var HOLE=-1,NAN=-2,NEGATIVE_INFINITY=-3,NEGATIVE_ZERO=-4,NULL=-5,POSITIVE_INFINITY=-6,UNDEFINED=-7,TYPE_BIGINT="B",TYPE_DATE="D",TYPE_ERROR="E",TYPE_MAP="M",TYPE_NULL_OBJECT="N",TYPE_PROMISE="P",TYPE_REGEXP="R",TYPE_SET="S",TYPE_SYMBOL="Y",TYPE_URL="U",TYPE_PREVIOUS_RESOLVED="Z",Deferred2=class{constructor(){this.promise=new Promise((resolve,reject)=>{this.resolve=resolve,this.reject=reject})}};function createLineSplittingTransform(){let decoder=new TextDecoder,leftover="";return new TransformStream({transform(chunk,controller){let str=decoder.decode(chunk,{stream:!0}),parts=(leftover+str).split(`
|
|
5
|
+
`);leftover=parts.pop()||"";for(let part of parts)controller.enqueue(part)},flush(controller){leftover&&controller.enqueue(leftover)}})}var TIME_LIMIT_MS=1,getNow=()=>Date.now(),yieldToMain=()=>new Promise(resolve=>setTimeout(resolve,0));async function flatten(input){let{indices}=this,existing=indices.get(input);if(existing)return[existing];if(input===void 0)return UNDEFINED;if(input===null)return NULL;if(Number.isNaN(input))return NAN;if(input===Number.POSITIVE_INFINITY)return POSITIVE_INFINITY;if(input===Number.NEGATIVE_INFINITY)return NEGATIVE_INFINITY;if(input===0&&1/input<0)return NEGATIVE_ZERO;let index=this.index++;indices.set(input,index);let stack=[[input,index]];return await stringify.call(this,stack),index}async function stringify(stack){let{deferred,indices,plugins,postPlugins}=this,str=this.stringified,lastYieldTime=getNow(),flattenValue=value=>{let existing=indices.get(value);if(existing)return[existing];if(value===void 0)return UNDEFINED;if(value===null)return NULL;if(Number.isNaN(value))return NAN;if(value===Number.POSITIVE_INFINITY)return POSITIVE_INFINITY;if(value===Number.NEGATIVE_INFINITY)return NEGATIVE_INFINITY;if(value===0&&1/value<0)return NEGATIVE_ZERO;let index=this.index++;return indices.set(value,index),stack.push([value,index]),index},i=0;for(;stack.length>0;){let now=getNow();++i%6e3===0&&now-lastYieldTime>=TIME_LIMIT_MS&&(await yieldToMain(),lastYieldTime=getNow());let[input,index]=stack.pop(),partsForObj=obj=>Object.keys(obj).map(k=>`"_${flattenValue(k)}":${flattenValue(obj[k])}`).join(","),error=null;switch(typeof input){case"boolean":case"number":case"string":str[index]=JSON.stringify(input);break;case"bigint":str[index]=`["${TYPE_BIGINT}","${input}"]`;break;case"symbol":{let keyFor=Symbol.keyFor(input);keyFor?str[index]=`["${TYPE_SYMBOL}",${JSON.stringify(keyFor)}]`:error=new Error("Cannot encode symbol unless created with Symbol.for()");break}case"object":{if(!input){str[index]=`${NULL}`;break}let isArray=Array.isArray(input),pluginHandled=!1;if(!isArray&&plugins)for(let plugin of plugins){let pluginResult=plugin(input);if(Array.isArray(pluginResult)){pluginHandled=!0;let[pluginIdentifier,...rest]=pluginResult;str[index]=`[${JSON.stringify(pluginIdentifier)}`,rest.length>0&&(str[index]+=`,${rest.map(v=>flattenValue(v)).join(",")}`),str[index]+="]";break}}if(!pluginHandled){let result=isArray?"[":"{";if(isArray){for(let i2=0;i2<input.length;i2++)result+=(i2?",":"")+(i2 in input?flattenValue(input[i2]):HOLE);str[index]=`${result}]`}else if(input instanceof Date){let dateTime=input.getTime();str[index]=`["${TYPE_DATE}",${Number.isNaN(dateTime)?JSON.stringify("invalid"):dateTime}]`}else input instanceof URL?str[index]=`["${TYPE_URL}",${JSON.stringify(input.href)}]`:input instanceof RegExp?str[index]=`["${TYPE_REGEXP}",${JSON.stringify(input.source)},${JSON.stringify(input.flags)}]`:input instanceof Set?input.size>0?str[index]=`["${TYPE_SET}",${[...input].map(val=>flattenValue(val)).join(",")}]`:str[index]=`["${TYPE_SET}"]`:input instanceof Map?input.size>0?str[index]=`["${TYPE_MAP}",${[...input].flatMap(([k,v])=>[flattenValue(k),flattenValue(v)]).join(",")}]`:str[index]=`["${TYPE_MAP}"]`:input instanceof Promise?(str[index]=`["${TYPE_PROMISE}",${index}]`,deferred[index]=input):input instanceof Error?(str[index]=`["${TYPE_ERROR}",${JSON.stringify(input.message)}`,input.name!=="Error"&&(str[index]+=`,${JSON.stringify(input.name)}`),str[index]+="]"):Object.getPrototypeOf(input)===null?str[index]=`["${TYPE_NULL_OBJECT}",{${partsForObj(input)}}]`:isPlainObject2(input)?str[index]=`{${partsForObj(input)}}`:error=new Error("Cannot encode object with prototype")}break}default:{let isArray=Array.isArray(input),pluginHandled=!1;if(!isArray&&plugins)for(let plugin of plugins){let pluginResult=plugin(input);if(Array.isArray(pluginResult)){pluginHandled=!0;let[pluginIdentifier,...rest]=pluginResult;str[index]=`[${JSON.stringify(pluginIdentifier)}`,rest.length>0&&(str[index]+=`,${rest.map(v=>flattenValue(v)).join(",")}`),str[index]+="]";break}}pluginHandled||(error=new Error("Cannot encode function or unexpected type"))}}if(error){let pluginHandled=!1;if(postPlugins)for(let plugin of postPlugins){let pluginResult=plugin(input);if(Array.isArray(pluginResult)){pluginHandled=!0;let[pluginIdentifier,...rest]=pluginResult;str[index]=`[${JSON.stringify(pluginIdentifier)}`,rest.length>0&&(str[index]+=`,${rest.map(v=>flattenValue(v)).join(",")}`),str[index]+="]";break}}if(!pluginHandled)throw error}}}var objectProtoNames2=Object.getOwnPropertyNames(Object.prototype).sort().join("\0");function isPlainObject2(thing){let proto=Object.getPrototypeOf(thing);return proto===Object.prototype||proto===null||Object.getOwnPropertyNames(proto).sort().join("\0")===objectProtoNames2}var globalObj=typeof window<"u"?window:typeof globalThis<"u"?globalThis:void 0;function unflatten(parsed){let{hydrated,values}=this;if(typeof parsed=="number")return hydrate.call(this,parsed);if(!Array.isArray(parsed)||!parsed.length)throw new SyntaxError;let startIndex=values.length;for(let value of parsed)values.push(value);return hydrated.length=values.length,hydrate.call(this,startIndex)}function hydrate(index){let{hydrated,values,deferred,plugins}=this,result,stack=[[index,v=>{result=v}]],postRun=[];for(;stack.length>0;){let[index2,set]=stack.pop();switch(index2){case UNDEFINED:set(void 0);continue;case NULL:set(null);continue;case NAN:set(NaN);continue;case POSITIVE_INFINITY:set(1/0);continue;case NEGATIVE_INFINITY:set(-1/0);continue;case NEGATIVE_ZERO:set(-0);continue}if(hydrated[index2]){set(hydrated[index2]);continue}let value=values[index2];if(!value||typeof value!="object"){hydrated[index2]=value,set(value);continue}if(Array.isArray(value))if(typeof value[0]=="string"){let[type,b,c]=value;switch(type){case TYPE_DATE:set(hydrated[index2]=new Date(b));continue;case TYPE_URL:set(hydrated[index2]=new URL(b));continue;case TYPE_BIGINT:set(hydrated[index2]=BigInt(b));continue;case TYPE_REGEXP:set(hydrated[index2]=new RegExp(b,c));continue;case TYPE_SYMBOL:set(hydrated[index2]=Symbol.for(b));continue;case TYPE_SET:let newSet=new Set;hydrated[index2]=newSet;for(let i=value.length-1;i>0;i--)stack.push([value[i],v=>{newSet.add(v)}]);set(newSet);continue;case TYPE_MAP:let map=new Map;hydrated[index2]=map;for(let i=value.length-2;i>0;i-=2){let r=[];stack.push([value[i+1],v=>{r[1]=v}]),stack.push([value[i],k=>{r[0]=k}]),postRun.push(()=>{map.set(r[0],r[1])})}set(map);continue;case TYPE_NULL_OBJECT:let obj=Object.create(null);hydrated[index2]=obj;for(let key of Object.keys(b).reverse()){let r=[];stack.push([b[key],v=>{r[1]=v}]),stack.push([Number(key.slice(1)),k=>{r[0]=k}]),postRun.push(()=>{obj[r[0]]=r[1]})}set(obj);continue;case TYPE_PROMISE:if(hydrated[b])set(hydrated[index2]=hydrated[b]);else{let d=new Deferred2;deferred[b]=d,set(hydrated[index2]=d.promise)}continue;case TYPE_ERROR:let[,message,errorType]=value,error=errorType&&globalObj&&SUPPORTED_ERROR_TYPES.includes(errorType)&&errorType in globalObj&&typeof globalObj[errorType]=="function"?new globalObj[errorType](message):new Error(message);hydrated[index2]=error,set(error);continue;case TYPE_PREVIOUS_RESOLVED:set(hydrated[index2]=hydrated[b]);continue;default:if(Array.isArray(plugins)){let r=[],vals=value.slice(1);for(let i=0;i<vals.length;i++){let v=vals[i];stack.push([v,v2=>{r[i]=v2}])}postRun.push(()=>{for(let plugin of plugins){let result2=plugin(value[0],...r);if(result2){set(hydrated[index2]=result2.value);return}}throw new SyntaxError});continue}throw new SyntaxError}}else{let array=[];hydrated[index2]=array;for(let i=0;i<value.length;i++){let n=value[i];n!==HOLE&&stack.push([n,v=>{array[i]=v}])}set(array);continue}else{let object={};hydrated[index2]=object;for(let key of Object.keys(value).reverse()){let r=[];stack.push([value[key],v=>{r[1]=v}]),stack.push([Number(key.slice(1)),k=>{r[0]=k}]),postRun.push(()=>{object[r[0]]=r[1]})}set(object);continue}}for(;postRun.length>0;)postRun.pop()();return result}async function decode(readable,options){let{plugins}=options??{},done=new Deferred2,reader=readable.pipeThrough(createLineSplittingTransform()).getReader(),decoder={values:[],hydrated:[],deferred:{},plugins},decoded=await decodeInitial.call(decoder,reader),donePromise=done.promise;return decoded.done?done.resolve():donePromise=decodeDeferred.call(decoder,reader).then(done.resolve).catch(reason=>{for(let deferred of Object.values(decoder.deferred))deferred.reject(reason);done.reject(reason)}),{done:donePromise.then(()=>reader.closed),value:decoded.value}}async function decodeInitial(reader){let read=await reader.read();if(!read.value)throw new SyntaxError;let line;try{line=JSON.parse(read.value)}catch{throw new SyntaxError}return{done:read.done,value:unflatten.call(this,line)}}async function decodeDeferred(reader){let read=await reader.read();for(;!read.done;){if(!read.value)continue;let line=read.value;switch(line[0]){case TYPE_PROMISE:{let colonIndex=line.indexOf(":"),deferredId=Number(line.slice(1,colonIndex)),deferred=this.deferred[deferredId];if(!deferred)throw new Error(`Deferred ID ${deferredId} not found in stream`);let lineData=line.slice(colonIndex+1),jsonLine;try{jsonLine=JSON.parse(lineData)}catch{throw new SyntaxError}let value=unflatten.call(this,jsonLine);deferred.resolve(value);break}case TYPE_ERROR:{let colonIndex=line.indexOf(":"),deferredId=Number(line.slice(1,colonIndex)),deferred=this.deferred[deferredId];if(!deferred)throw new Error(`Deferred ID ${deferredId} not found in stream`);let lineData=line.slice(colonIndex+1),jsonLine;try{jsonLine=JSON.parse(lineData)}catch{throw new SyntaxError}let value=unflatten.call(this,jsonLine);deferred.reject(value);break}default:throw new SyntaxError}read=await reader.read()}}function encode(input,options){let{onComplete,plugins,postPlugins,signal}=options??{},encoder3={deferred:{},index:0,indices:new Map,stringified:[],plugins,postPlugins,signal},textEncoder=new TextEncoder,lastSentIndex=0;return new ReadableStream({async start(controller){let id=await flatten.call(encoder3,input);if(Array.isArray(id))throw new Error("This should never happen");id<0?controller.enqueue(textEncoder.encode(`${id}
|
|
6
|
+
`)):(controller.enqueue(textEncoder.encode(`[${encoder3.stringified.join(",")}]
|
|
7
|
+
`)),lastSentIndex=encoder3.stringified.length-1);let seenPromises=new WeakSet,processingChain=Promise.resolve();if(Object.keys(encoder3.deferred).length){let raceDone,racePromise=new Promise((resolve,reject)=>{if(raceDone=resolve,signal){let rejectPromise=()=>reject(signal.reason||new Error("Signal was aborted."));signal.aborted?rejectPromise():signal.addEventListener("abort",event=>{rejectPromise()})}});for(;Object.keys(encoder3.deferred).length>0;){for(let[deferredId,deferred]of Object.entries(encoder3.deferred))seenPromises.has(deferred)||seenPromises.add(encoder3.deferred[Number(deferredId)]=Promise.race([racePromise,deferred]).then(resolved=>(processingChain=processingChain.then(async()=>{let id2=await flatten.call(encoder3,resolved);if(Array.isArray(id2))controller.enqueue(textEncoder.encode(`${TYPE_PROMISE}${deferredId}:[["${TYPE_PREVIOUS_RESOLVED}",${id2[0]}]]
|
|
8
|
+
`)),encoder3.index++,lastSentIndex++;else if(id2<0)controller.enqueue(textEncoder.encode(`${TYPE_PROMISE}${deferredId}:${id2}
|
|
9
|
+
`));else{let values=encoder3.stringified.slice(lastSentIndex+1).join(",");controller.enqueue(textEncoder.encode(`${TYPE_PROMISE}${deferredId}:[${values}]
|
|
10
|
+
`)),lastSentIndex=encoder3.stringified.length-1}}),processingChain),reason=>(processingChain=processingChain.then(async()=>{(!reason||typeof reason!="object"||!(reason instanceof Error))&&(reason=new Error("An unknown error occurred"));let id2=await flatten.call(encoder3,reason);if(Array.isArray(id2))controller.enqueue(textEncoder.encode(`${TYPE_ERROR}${deferredId}:[["${TYPE_PREVIOUS_RESOLVED}",${id2[0]}]]
|
|
11
|
+
`)),encoder3.index++,lastSentIndex++;else if(id2<0)controller.enqueue(textEncoder.encode(`${TYPE_ERROR}${deferredId}:${id2}
|
|
12
|
+
`));else{let values=encoder3.stringified.slice(lastSentIndex+1).join(",");controller.enqueue(textEncoder.encode(`${TYPE_ERROR}${deferredId}:[${values}]
|
|
13
|
+
`)),lastSentIndex=encoder3.stringified.length-1}}),processingChain)).finally(()=>{delete encoder3.deferred[Number(deferredId)]}));await Promise.race(Object.values(encoder3.deferred))}raceDone()}await Promise.all(Object.values(encoder3.deferred)),await processingChain,controller.close(),onComplete?.()}})}async function createRequestInit(request){let init={signal:request.signal};if(request.method!=="GET"){init.method=request.method;let contentType=request.headers.get("Content-Type");contentType&&/\bapplication\/json\b/.test(contentType)?(init.headers={"Content-Type":contentType},init.body=JSON.stringify(await request.json())):contentType&&/\btext\/plain\b/.test(contentType)?(init.headers={"Content-Type":contentType},init.body=await request.text()):contentType&&/\bapplication\/x-www-form-urlencoded\b/.test(contentType)?init.body=new URLSearchParams(await request.text()):init.body=await request.formData()}return init}var ESCAPE_LOOKUP={"&":"\\u0026",">":"\\u003e","<":"\\u003c","\u2028":"\\u2028","\u2029":"\\u2029"},ESCAPE_REGEX=/[&><\u2028\u2029]/g;function escapeHtml(html){return html.replace(ESCAPE_REGEX,match=>ESCAPE_LOOKUP[match])}function invariant2(value,message){if(value===!1||value===null||typeof value>"u")throw new Error(message)}var SingleFetchRedirectSymbol=Symbol("SingleFetchRedirect"),SingleFetchNoResultError=class extends Error{},SINGLE_FETCH_REDIRECT_STATUS=202,NO_BODY_STATUS_CODES=new Set([100,101,204,205]);function StreamTransfer({context,identifier,reader,textDecoder,nonce}){if(!context.renderMeta||!context.renderMeta.didRenderScripts)return null;context.renderMeta.streamCache||(context.renderMeta.streamCache={});let{streamCache}=context.renderMeta,promise=streamCache[identifier];if(promise||(promise=streamCache[identifier]=reader.read().then(result=>{streamCache[identifier].result={done:result.done,value:textDecoder.decode(result.value,{stream:!0})}}).catch(e=>{streamCache[identifier].error=e})),promise.error)throw promise.error;if(promise.result===void 0)throw promise;let{done,value}=promise.result,scriptTag=value?React4.createElement("script",{nonce,dangerouslySetInnerHTML:{__html:`window.__reactRouterContext.streamController.enqueue(${escapeHtml(JSON.stringify(value))});`}}):null;return done?React4.createElement(React4.Fragment,null,scriptTag,React4.createElement("script",{nonce,dangerouslySetInnerHTML:{__html:"window.__reactRouterContext.streamController.close();"}})):React4.createElement(React4.Fragment,null,scriptTag,React4.createElement(React4.Suspense,null,React4.createElement(StreamTransfer,{context,identifier:identifier+1,reader,textDecoder,nonce})))}function getTurboStreamSingleFetchDataStrategy(getRouter,manifest,routeModules,ssr,basename,trailingSlashAware){let dataStrategy=getSingleFetchDataStrategyImpl(getRouter,match=>{let manifestRoute=manifest.routes[match.route.id];return invariant2(manifestRoute,"Route not found in manifest"),{hasLoader:manifestRoute.hasLoader,hasClientLoader:manifestRoute.hasClientLoader}},fetchAndDecodeViaTurboStream,ssr,basename,trailingSlashAware);return async args=>args.runClientMiddleware(dataStrategy)}function getSingleFetchDataStrategyImpl(getRouter,getRouteInfo,fetchAndDecode,ssr,basename,trailingSlashAware,shouldAllowOptOut=()=>!0){return async args=>{let{request,matches,fetcherKey}=args,router=getRouter();if(request.method!=="GET")return singleFetchActionStrategy(args,fetchAndDecode,basename,trailingSlashAware);let foundRevalidatingServerLoader=matches.some(m=>{let{hasLoader,hasClientLoader}=getRouteInfo(m);return m.shouldCallHandler()&&hasLoader&&!hasClientLoader});return!ssr&&!foundRevalidatingServerLoader?nonSsrStrategy(args,getRouteInfo,fetchAndDecode,basename,trailingSlashAware):fetcherKey?singleFetchLoaderFetcherStrategy(args,fetchAndDecode,basename,trailingSlashAware):singleFetchLoaderNavigationStrategy(args,router,getRouteInfo,fetchAndDecode,ssr,basename,trailingSlashAware,shouldAllowOptOut)}}async function singleFetchActionStrategy(args,fetchAndDecode,basename,trailingSlashAware){let actionMatch=args.matches.find(m=>m.shouldCallHandler());invariant2(actionMatch,"No action match found");let actionStatus,result=await actionMatch.resolve(async handler=>await handler(async()=>{let{data:data2,status}=await fetchAndDecode(args,basename,trailingSlashAware,[actionMatch.route.id]);return actionStatus=status,unwrapSingleFetchResult(data2,actionMatch.route.id)}));return isResponse(result.result)||isRouteErrorResponse(result.result)||isDataWithResponseInit(result.result)?{[actionMatch.route.id]:result}:{[actionMatch.route.id]:{type:result.type,result:data(result.result,actionStatus)}}}async function nonSsrStrategy(args,getRouteInfo,fetchAndDecode,basename,trailingSlashAware){let matchesToLoad=args.matches.filter(m=>m.shouldCallHandler()),results={};return await Promise.all(matchesToLoad.map(m=>m.resolve(async handler=>{try{let{hasClientLoader}=getRouteInfo(m),routeId=m.route.id,result=hasClientLoader?await handler(async()=>{let{data:data2}=await fetchAndDecode(args,basename,trailingSlashAware,[routeId]);return unwrapSingleFetchResult(data2,routeId)}):await handler();results[m.route.id]={type:"data",result}}catch(e){results[m.route.id]={type:"error",result:e}}}))),results}async function singleFetchLoaderNavigationStrategy(args,router,getRouteInfo,fetchAndDecode,ssr,basename,trailingSlashAware,shouldAllowOptOut=()=>!0){let routesParams=new Set,foundOptOutRoute=!1,routeDfds=args.matches.map(()=>createDeferred2()),singleFetchDfd=createDeferred2(),results={},resolvePromise=Promise.all(args.matches.map(async(m,i)=>m.resolve(async handler=>{routeDfds[i].resolve();let routeId=m.route.id,{hasLoader,hasClientLoader}=getRouteInfo(m),defaultShouldRevalidate=!m.shouldRevalidateArgs||m.shouldRevalidateArgs.actionStatus==null||m.shouldRevalidateArgs.actionStatus<400;if(!m.shouldCallHandler(defaultShouldRevalidate)){foundOptOutRoute||(foundOptOutRoute=m.shouldRevalidateArgs!=null&&hasLoader);return}if(shouldAllowOptOut(m)&&hasClientLoader){hasLoader&&(foundOptOutRoute=!0);try{let result=await handler(async()=>{let{data:data2}=await fetchAndDecode(args,basename,trailingSlashAware,[routeId]);return unwrapSingleFetchResult(data2,routeId)});results[routeId]={type:"data",result}}catch(e){results[routeId]={type:"error",result:e}}return}hasLoader&&routesParams.add(routeId);try{let result=await handler(async()=>{let data2=await singleFetchDfd.promise;return unwrapSingleFetchResult(data2,routeId)});results[routeId]={type:"data",result}}catch(e){results[routeId]={type:"error",result:e}}})));if(await Promise.all(routeDfds.map(d=>d.promise)),(!router.state.initialized&&router.state.navigation.state==="idle"||routesParams.size===0)&&!window.__reactRouterHdrActive)singleFetchDfd.resolve({routes:{}});else{let targetRoutes=ssr&&foundOptOutRoute&&routesParams.size>0?[...routesParams.keys()]:void 0;try{let data2=await fetchAndDecode(args,basename,trailingSlashAware,targetRoutes);singleFetchDfd.resolve(data2.data)}catch(e){singleFetchDfd.reject(e)}}return await resolvePromise,await bubbleMiddlewareErrors(singleFetchDfd.promise,args.matches,routesParams,results),results}async function bubbleMiddlewareErrors(singleFetchPromise,matches,routesParams,results){try{let middlewareError,fetchedData=await singleFetchPromise;if("routes"in fetchedData){for(let match of matches)if(match.route.id in fetchedData.routes){let routeResult=fetchedData.routes[match.route.id];if("error"in routeResult){middlewareError=routeResult.error,results[match.route.id]?.result==null&&(results[match.route.id]={type:"error",result:middlewareError});break}}}middlewareError!==void 0&&Array.from(routesParams.values()).forEach(routeId=>{results[routeId].result instanceof SingleFetchNoResultError&&(results[routeId].result=middlewareError)})}catch{}}async function singleFetchLoaderFetcherStrategy(args,fetchAndDecode,basename,trailingSlashAware){let fetcherMatch=args.matches.find(m=>m.shouldCallHandler());invariant2(fetcherMatch,"No fetcher match found");let routeId=fetcherMatch.route.id,result=await fetcherMatch.resolve(async handler=>handler(async()=>{let{data:data2}=await fetchAndDecode(args,basename,trailingSlashAware,[routeId]);return unwrapSingleFetchResult(data2,routeId)}));return{[fetcherMatch.route.id]:result}}function stripIndexParam(url){let indexValues=url.searchParams.getAll("index");url.searchParams.delete("index");let indexValuesToKeep=[];for(let indexValue of indexValues)indexValue&&indexValuesToKeep.push(indexValue);for(let toKeep of indexValuesToKeep)url.searchParams.append("index",toKeep);return url}function singleFetchUrl(reqUrl,basename,trailingSlashAware,extension){let url=typeof reqUrl=="string"?new URL(reqUrl,typeof window>"u"?"server://singlefetch/":window.location.origin):reqUrl;return trailingSlashAware?url.pathname.endsWith("/")?url.pathname=`${url.pathname}_.${extension}`:url.pathname=`${url.pathname}.${extension}`:url.pathname==="/"?url.pathname=`_root.${extension}`:basename&&stripBasename(url.pathname,basename)==="/"?url.pathname=`${removeTrailingSlash(basename)}/_root.${extension}`:url.pathname=`${removeTrailingSlash(url.pathname)}.${extension}`,url}async function fetchAndDecodeViaTurboStream(args,basename,trailingSlashAware,targetRoutes){let{request}=args,url=singleFetchUrl(request.url,basename,trailingSlashAware,"data");request.method==="GET"&&(url=stripIndexParam(url),targetRoutes&&url.searchParams.set("_routes",targetRoutes.join(",")));let res=await fetch(url,await createRequestInit(request));if(res.status>=400&&!res.headers.has("X-Remix-Response"))throw new ErrorResponseImpl(res.status,res.statusText,await res.text());if(res.status===204&&res.headers.has("X-Remix-Redirect"))return{status:SINGLE_FETCH_REDIRECT_STATUS,data:{redirect:{redirect:res.headers.get("X-Remix-Redirect"),status:Number(res.headers.get("X-Remix-Status")||"302"),revalidate:res.headers.get("X-Remix-Revalidate")==="true",reload:res.headers.get("X-Remix-Reload-Document")==="true",replace:res.headers.get("X-Remix-Replace")==="true"}}};if(NO_BODY_STATUS_CODES.has(res.status)){let routes={};return targetRoutes&&request.method!=="GET"&&(routes[targetRoutes[0]]={data:void 0}),{status:res.status,data:{routes}}}invariant2(res.body,"No response body to decode");try{let decoded=await decodeViaTurboStream(res.body,window),data2;if(request.method==="GET"){let typed=decoded.value;SingleFetchRedirectSymbol in typed?data2={redirect:typed[SingleFetchRedirectSymbol]}:data2={routes:typed}}else{let typed=decoded.value,routeId=targetRoutes?.[0];invariant2(routeId,"No routeId found for single fetch call decoding"),"redirect"in typed?data2={redirect:typed}:data2={routes:{[routeId]:typed}}}return{status:res.status,data:data2}}catch{throw new Error("Unable to decode turbo-stream response")}}function decodeViaTurboStream(body,global2){return decode(body,{plugins:[(type,...rest)=>{if(type==="SanitizedError"){let[name,message,stack]=rest,Constructor=Error;name&&SUPPORTED_ERROR_TYPES.includes(name)&&name in global2&&typeof global2[name]=="function"&&(Constructor=global2[name]);let error=new Constructor(message);return error.stack=stack,{value:error}}if(type==="ErrorResponse"){let[data2,status,statusText]=rest;return{value:new ErrorResponseImpl(status,statusText,data2)}}if(type==="SingleFetchRedirect")return{value:{[SingleFetchRedirectSymbol]:rest[0]}};if(type==="SingleFetchClassInstance")return{value:rest[0]};if(type==="SingleFetchFallback")return{value:void 0}}]})}function unwrapSingleFetchResult(result,routeId){if("redirect"in result){let{redirect:location,revalidate,reload,replace:replace2,status}=result.redirect;throw redirect(location,{status,headers:{...revalidate?{"X-Remix-Revalidate":"yes"}:null,...reload?{"X-Remix-Reload-Document":"yes"}:null,...replace2?{"X-Remix-Replace":"yes"}:null}})}let routeResult=result.routes[routeId];if(routeResult==null)throw new SingleFetchNoResultError(`No result found for routeId "${routeId}"`);if("error"in routeResult)throw routeResult.error;if("data"in routeResult)return routeResult.data;throw new Error(`Invalid response found for routeId "${routeId}"`)}function createDeferred2(){let resolve,reject,promise=new Promise((res,rej)=>{resolve=async val=>{res(val);try{await promise}catch{}},reject=async error=>{rej(error);try{await promise}catch{}}});return{promise,resolve,reject}}async function loadRouteModule(route,routeModulesCache){if(route.id in routeModulesCache)return routeModulesCache[route.id];try{let routeModule=await import(route.module);return routeModulesCache[route.id]=routeModule,routeModule}catch(error){if(console.error(`Error loading route module \`${route.module}\`, reloading page...`),console.error(error),window.__reactRouterContext&&window.__reactRouterContext.isSpaMode&&import.meta.hot)throw error;return window.location.reload(),new Promise(()=>{})}}function getKeyedLinksForMatches(matches,routeModules,manifest){let descriptors=matches.map(match=>{let module=routeModules[match.route.id],route=manifest.routes[match.route.id];return[route&&route.css?route.css.map(href2=>({rel:"stylesheet",href:href2})):[],module?.links?.()||[]]}).flat(2),preloads=getModuleLinkHrefs(matches,manifest);return dedupeLinkDescriptors(descriptors,preloads)}function getRouteCssDescriptors(route){return route.css?route.css.map(href2=>({rel:"stylesheet",href:href2})):[]}async function prefetchRouteCss(route){if(!route.css)return;let descriptors=getRouteCssDescriptors(route);await Promise.all(descriptors.map(prefetchStyleLink))}async function prefetchStyleLinks(route,routeModule){if(!route.css&&!routeModule.links||!isPreloadSupported())return;let descriptors=[];if(route.css&&descriptors.push(...getRouteCssDescriptors(route)),routeModule.links&&descriptors.push(...routeModule.links()),descriptors.length===0)return;let styleLinks=[];for(let descriptor of descriptors)!isPageLinkDescriptor(descriptor)&&descriptor.rel==="stylesheet"&&styleLinks.push({...descriptor,rel:"preload",as:"style"});await Promise.all(styleLinks.map(prefetchStyleLink))}async function prefetchStyleLink(descriptor){return new Promise(resolve=>{if(descriptor.media&&!window.matchMedia(descriptor.media).matches||document.querySelector(`link[rel="stylesheet"][href="${descriptor.href}"]`))return resolve();let link=document.createElement("link");Object.assign(link,descriptor);function removeLink(){document.head.contains(link)&&document.head.removeChild(link)}link.onload=()=>{removeLink(),resolve()},link.onerror=()=>{removeLink(),resolve()},document.head.appendChild(link)})}function isPageLinkDescriptor(object){return object!=null&&typeof object.page=="string"}function isHtmlLinkDescriptor(object){return object==null?!1:object.href==null?object.rel==="preload"&&typeof object.imageSrcSet=="string"&&typeof object.imageSizes=="string":typeof object.rel=="string"&&typeof object.href=="string"}async function getKeyedPrefetchLinks(matches,manifest,routeModules){let links=await Promise.all(matches.map(async match=>{let route=manifest.routes[match.route.id];if(route){let mod=await loadRouteModule(route,routeModules);return mod.links?mod.links():[]}return[]}));return dedupeLinkDescriptors(links.flat(1).filter(isHtmlLinkDescriptor).filter(link=>link.rel==="stylesheet"||link.rel==="preload").map(link=>link.rel==="stylesheet"?{...link,rel:"prefetch",as:"style"}:{...link,rel:"prefetch"}))}function getNewMatchesForLinks(page,nextMatches,currentMatches,manifest,location,mode){let isNew=(match,index)=>currentMatches[index]?match.route.id!==currentMatches[index].route.id:!0,matchPathChanged=(match,index)=>currentMatches[index].pathname!==match.pathname||currentMatches[index].route.path?.endsWith("*")&¤tMatches[index].params["*"]!==match.params["*"];return mode==="assets"?nextMatches.filter((match,index)=>isNew(match,index)||matchPathChanged(match,index)):mode==="data"?nextMatches.filter((match,index)=>{let manifestRoute=manifest.routes[match.route.id];if(!manifestRoute||!manifestRoute.hasLoader)return!1;if(isNew(match,index)||matchPathChanged(match,index))return!0;if(match.route.shouldRevalidate){let routeChoice=match.route.shouldRevalidate({currentUrl:new URL(location.pathname+location.search+location.hash,window.origin),currentParams:currentMatches[0]?.params||{},nextUrl:new URL(page,window.origin),nextParams:match.params,defaultShouldRevalidate:!0});if(typeof routeChoice=="boolean")return routeChoice}return!0}):[]}function getModuleLinkHrefs(matches,manifest,{includeHydrateFallback}={}){return dedupeHrefs(matches.map(match=>{let route=manifest.routes[match.route.id];if(!route)return[];let hrefs=[route.module];return route.clientActionModule&&(hrefs=hrefs.concat(route.clientActionModule)),route.clientLoaderModule&&(hrefs=hrefs.concat(route.clientLoaderModule)),includeHydrateFallback&&route.hydrateFallbackModule&&(hrefs=hrefs.concat(route.hydrateFallbackModule)),route.imports&&(hrefs=hrefs.concat(route.imports)),hrefs}).flat(1))}function dedupeHrefs(hrefs){return[...new Set(hrefs)]}function sortKeys(obj){let sorted={},keys=Object.keys(obj).sort();for(let key of keys)sorted[key]=obj[key];return sorted}function dedupeLinkDescriptors(descriptors,preloads){let set=new Set,preloadsSet=new Set(preloads);return descriptors.reduce((deduped,descriptor)=>{if(preloads&&!isPageLinkDescriptor(descriptor)&&descriptor.as==="script"&&descriptor.href&&preloadsSet.has(descriptor.href))return deduped;let key=JSON.stringify(sortKeys(descriptor));return set.has(key)||(set.add(key),deduped.push({key,link:descriptor})),deduped},[])}var _isPreloadSupported;function isPreloadSupported(){if(_isPreloadSupported!==void 0)return _isPreloadSupported;let el=document.createElement("link");return _isPreloadSupported=el.relList.supports("preload"),el=null,_isPreloadSupported}function RemixRootDefaultHydrateFallback(){let{nonce}=useFrameworkContext();return React5.createElement(BoundaryShell,{title:"Loading...",renderScripts:!0},ENABLE_DEV_WARNINGS?React5.createElement("script",{nonce,dangerouslySetInnerHTML:{__html:`
|
|
14
|
+
console.log(
|
|
15
|
+
"\u{1F4BF} Hey developer \u{1F44B}. You can provide a way better UX than this " +
|
|
16
|
+
"when your app is loading JS modules and/or running \`clientLoader\` " +
|
|
17
|
+
"functions. Check out https://reactrouter.com/start/framework/route-module#hydratefallback " +
|
|
18
|
+
"for more information."
|
|
19
|
+
);
|
|
20
|
+
`}}):null)}function groupRoutesByParentId(manifest){let routes={};return Object.values(manifest).forEach(route=>{if(route){let parentId=route.parentId||"";routes[parentId]||(routes[parentId]=[]),routes[parentId].push(route)}}),routes}function getRouteComponents(route,routeModule,isSpaMode){let Component4=getRouteModuleComponent(routeModule),HydrateFallback=routeModule.HydrateFallback&&(!isSpaMode||route.id==="root")?routeModule.HydrateFallback:route.id==="root"?RemixRootDefaultHydrateFallback:void 0,ErrorBoundary=routeModule.ErrorBoundary?routeModule.ErrorBoundary:route.id==="root"?()=>React6.createElement(RemixRootDefaultErrorBoundary,{error:useRouteError()}):void 0;return route.id==="root"&&routeModule.Layout?{...Component4?{element:React6.createElement(routeModule.Layout,null,React6.createElement(Component4,null))}:{Component:Component4},...ErrorBoundary?{errorElement:React6.createElement(routeModule.Layout,null,React6.createElement(ErrorBoundary,null))}:{ErrorBoundary},...HydrateFallback?{hydrateFallbackElement:React6.createElement(routeModule.Layout,null,React6.createElement(HydrateFallback,null))}:{HydrateFallback}}:{Component:Component4,ErrorBoundary,HydrateFallback}}function createServerRoutes(manifest,routeModules,future,isSpaMode,parentId="",routesByParentId=groupRoutesByParentId(manifest),spaModeLazyPromise=Promise.resolve({Component:()=>null})){return(routesByParentId[parentId]||[]).map(route=>{let routeModule=routeModules[route.id];invariant2(routeModule,"No `routeModule` available to create server routes");let dataRoute={...getRouteComponents(route,routeModule,isSpaMode),caseSensitive:route.caseSensitive,id:route.id,index:route.index,path:route.path,handle:routeModule.handle,lazy:isSpaMode?()=>spaModeLazyPromise:void 0,loader:route.hasLoader||route.hasClientLoader?()=>null:void 0},children=createServerRoutes(manifest,routeModules,future,isSpaMode,route.id,routesByParentId,spaModeLazyPromise);return children.length>0&&(dataRoute.children=children),dataRoute})}function createClientRoutesWithHMRRevalidationOptOut(needsRevalidation,manifest,routeModulesCache,initialState,ssr,isSpaMode){return createClientRoutes(manifest,routeModulesCache,initialState,ssr,isSpaMode,"",groupRoutesByParentId(manifest),needsRevalidation)}function preventInvalidServerHandlerCall(type,route){if(type==="loader"&&!route.hasLoader||type==="action"&&!route.hasAction){let msg=`You are trying to call ${type==="action"?"serverAction()":"serverLoader()"} on a route that does not have a server ${type} (routeId: "${route.id}")`;throw console.error(msg),new ErrorResponseImpl(400,"Bad Request",new Error(msg),!0)}}function noActionDefinedError(type,routeId){let article=type==="clientAction"?"a":"an",msg=`Route "${routeId}" does not have ${article} ${type}, but you are trying to submit to it. To fix this, please add ${article} \`${type}\` function to the route`;throw console.error(msg),new ErrorResponseImpl(405,"Method Not Allowed",new Error(msg),!0)}function createClientRoutes(manifest,routeModulesCache,initialState,ssr,isSpaMode,parentId="",routesByParentId=groupRoutesByParentId(manifest),needsRevalidation){return(routesByParentId[parentId]||[]).map(route=>{let routeModule=routeModulesCache[route.id];function fetchServerHandler(singleFetch){return invariant2(typeof singleFetch=="function","No single fetch function available for route handler"),singleFetch()}function fetchServerLoader(singleFetch){return route.hasLoader?fetchServerHandler(singleFetch):Promise.resolve(null)}function fetchServerAction(singleFetch){if(!route.hasAction)throw noActionDefinedError("action",route.id);return fetchServerHandler(singleFetch)}function prefetchModule(modulePath){import(modulePath)}function prefetchRouteModuleChunks(route2){route2.clientActionModule&&prefetchModule(route2.clientActionModule),route2.clientLoaderModule&&prefetchModule(route2.clientLoaderModule)}async function prefetchStylesAndCallHandler(handler){let cachedModule=routeModulesCache[route.id],linkPrefetchPromise=cachedModule?prefetchStyleLinks(route,cachedModule):Promise.resolve();try{return handler()}finally{await linkPrefetchPromise}}let dataRoute={id:route.id,index:route.index,path:route.path};if(routeModule){Object.assign(dataRoute,{...dataRoute,...getRouteComponents(route,routeModule,isSpaMode),middleware:routeModule.clientMiddleware,handle:routeModule.handle,shouldRevalidate:getShouldRevalidateFunction(dataRoute.path,routeModule,route,ssr,needsRevalidation)});let hasInitialData=initialState&&initialState.loaderData&&route.id in initialState.loaderData,initialData=hasInitialData?initialState?.loaderData?.[route.id]:void 0,hasInitialError=initialState&&initialState.errors&&route.id in initialState.errors,initialError=hasInitialError?initialState?.errors?.[route.id]:void 0,isHydrationRequest=needsRevalidation==null&&(routeModule.clientLoader?.hydrate===!0||!route.hasLoader);dataRoute.loader=async({request,params,context,pattern,url},singleFetch)=>{let _isHydrationRequest=isHydrationRequest;return isHydrationRequest=!1,await prefetchStylesAndCallHandler(async()=>(invariant2(routeModule,"No `routeModule` available for critical-route loader"),routeModule.clientLoader?routeModule.clientLoader({request,params,context,pattern,url,async serverLoader(){if(preventInvalidServerHandlerCall("loader",route),_isHydrationRequest){if(hasInitialData)return initialData;if(hasInitialError)throw initialError}return fetchServerLoader(singleFetch)}}):fetchServerLoader(singleFetch)))},dataRoute.loader.hydrate=shouldHydrateRouteLoader(route.id,routeModule.clientLoader,route.hasLoader,isSpaMode),dataRoute.action=({request,params,context,pattern,url},singleFetch)=>prefetchStylesAndCallHandler(async()=>{if(invariant2(routeModule,"No `routeModule` available for critical-route action"),!routeModule.clientAction){if(isSpaMode)throw noActionDefinedError("clientAction",route.id);return fetchServerAction(singleFetch)}return routeModule.clientAction({request,params,context,pattern,url,async serverAction(){return preventInvalidServerHandlerCall("action",route),fetchServerAction(singleFetch)}})})}else{route.hasClientLoader||(dataRoute.loader=(_,singleFetch)=>prefetchStylesAndCallHandler(()=>fetchServerLoader(singleFetch))),route.hasClientAction||(dataRoute.action=(_,singleFetch)=>prefetchStylesAndCallHandler(()=>{if(isSpaMode)throw noActionDefinedError("clientAction",route.id);return fetchServerAction(singleFetch)}));let lazyRoutePromise;async function getLazyRoute(){return lazyRoutePromise?await lazyRoutePromise:(lazyRoutePromise=(async()=>{(route.clientLoaderModule||route.clientActionModule)&&await new Promise(resolve=>setTimeout(resolve,0));let routeModulePromise=loadRouteModuleWithBlockingLinks(route,routeModulesCache);return prefetchRouteModuleChunks(route),await routeModulePromise})(),await lazyRoutePromise)}dataRoute.lazy={loader:route.hasClientLoader?async()=>{let{clientLoader}=route.clientLoaderModule?await import(route.clientLoaderModule):await getLazyRoute();return invariant2(clientLoader,"No `clientLoader` export found"),(args,singleFetch)=>clientLoader({...args,async serverLoader(){return preventInvalidServerHandlerCall("loader",route),fetchServerLoader(singleFetch)}})}:void 0,action:route.hasClientAction?async()=>{let clientActionPromise=route.clientActionModule?import(route.clientActionModule):getLazyRoute();prefetchRouteModuleChunks(route);let{clientAction}=await clientActionPromise;return invariant2(clientAction,"No `clientAction` export found"),(args,singleFetch)=>clientAction({...args,async serverAction(){return preventInvalidServerHandlerCall("action",route),fetchServerAction(singleFetch)}})}:void 0,middleware:route.hasClientMiddleware?async()=>{let{clientMiddleware}=route.clientMiddlewareModule?await import(route.clientMiddlewareModule):await getLazyRoute();return invariant2(clientMiddleware,"No `clientMiddleware` export found"),clientMiddleware}:void 0,shouldRevalidate:async()=>{let lazyRoute=await getLazyRoute();return getShouldRevalidateFunction(dataRoute.path,lazyRoute,route,ssr,needsRevalidation)},handle:async()=>(await getLazyRoute()).handle,Component:async()=>(await getLazyRoute()).Component,ErrorBoundary:route.hasErrorBoundary?async()=>(await getLazyRoute()).ErrorBoundary:void 0}}let children=createClientRoutes(manifest,routeModulesCache,initialState,ssr,isSpaMode,route.id,routesByParentId,needsRevalidation);return children.length>0&&(dataRoute.children=children),dataRoute})}function getShouldRevalidateFunction(path,route,manifestRoute,ssr,needsRevalidation){if(needsRevalidation)return wrapShouldRevalidateForHdr(manifestRoute.id,route.shouldRevalidate,needsRevalidation);if(!ssr&&manifestRoute.hasLoader&&!manifestRoute.hasClientLoader){let myParams=path?compilePath(path)[1].map(p=>p.paramName):[],didParamsChange=opts=>myParams.some(p=>opts.currentParams[p]!==opts.nextParams[p]);if(route.shouldRevalidate){let fn=route.shouldRevalidate;return opts=>fn({...opts,defaultShouldRevalidate:didParamsChange(opts)})}else return opts=>didParamsChange(opts)}return route.shouldRevalidate}function wrapShouldRevalidateForHdr(routeId,routeShouldRevalidate,needsRevalidation){let handledRevalidation=!1;return arg=>handledRevalidation?routeShouldRevalidate?routeShouldRevalidate(arg):arg.defaultShouldRevalidate:(handledRevalidation=!0,needsRevalidation.has(routeId))}async function loadRouteModuleWithBlockingLinks(route,routeModules){let routeModulePromise=loadRouteModule(route,routeModules),prefetchRouteCssPromise=prefetchRouteCss(route),routeModule=await routeModulePromise;return await Promise.all([prefetchRouteCssPromise,prefetchStyleLinks(route,routeModule)]),{Component:getRouteModuleComponent(routeModule),ErrorBoundary:routeModule.ErrorBoundary,clientMiddleware:routeModule.clientMiddleware,clientAction:routeModule.clientAction,clientLoader:routeModule.clientLoader,handle:routeModule.handle,links:routeModule.links,meta:routeModule.meta,shouldRevalidate:routeModule.shouldRevalidate}}function getRouteModuleComponent(routeModule){if(routeModule.default==null)return;if(!(typeof routeModule.default=="object"&&Object.keys(routeModule.default).length===0))return routeModule.default}function shouldHydrateRouteLoader(routeId,clientLoader,hasLoader,isSpaMode){return isSpaMode&&routeId!=="root"||clientLoader!=null&&(clientLoader.hydrate===!0||hasLoader!==!0)}var nextPaths=new Set,discoveredPathsMaxSize=1e3,discoveredPaths=new Set,URL_LIMIT=7680;function getPathsWithAncestors(paths){let result=new Set;return paths.forEach(path=>{path.startsWith("/")||(path=`/${path}`);for(let i=1;i<path.length;i++)path[i]==="/"&&result.add(path.slice(0,i));result.add(path)}),Array.from(result)}function isFogOfWarEnabled(routeDiscovery,ssr){return routeDiscovery.mode==="lazy"&&ssr===!0}function getPartialManifest({sri,...manifest},router){let routeIds=new Set(router.state.matches.map(m=>m.route.id)),segments=router.state.location.pathname.split("/").filter(Boolean),paths=["/"];for(segments.pop();segments.length>0;)paths.push(`/${segments.join("/")}`),segments.pop();paths.forEach(path=>{let matches=matchRoutesImpl(router.routes,path,router.basename||"/",!1,router.branches);matches&&matches.forEach(m=>routeIds.add(m.route.id))});let initialRoutes=[...routeIds].reduce((acc,id)=>Object.assign(acc,{[id]:manifest.routes[id]}),{});return{...manifest,routes:initialRoutes,sri:sri?!0:void 0}}function getPatchRoutesOnNavigationFunction(getRouter,manifest,routeModules,ssr,routeDiscovery,isSpaMode,basename){if(isFogOfWarEnabled(routeDiscovery,ssr))return async({path,patch,signal,fetcherKey})=>{if(discoveredPaths.has(path))return;let{state}=getRouter();await fetchAndApplyManifestPatches([path],fetcherKey?window.location.href:createPath(state.navigation.location||state.location),manifest,routeModules,ssr,isSpaMode,basename,routeDiscovery.manifestPath,patch,signal)}}function useFogOFWarDiscovery(router,manifest,routeModules,ssr,routeDiscovery,isSpaMode){React7.useEffect(()=>{if(!isFogOfWarEnabled(routeDiscovery,ssr)||window.navigator?.connection?.saveData===!0)return;function registerElement(el){let path=el.tagName==="FORM"?el.getAttribute("action"):el.getAttribute("href");if(!path)return;let pathname=el.tagName==="A"?el.pathname:new URL(path,window.location.origin).pathname;discoveredPaths.has(pathname)||nextPaths.add(pathname)}async function fetchPatches(){document.querySelectorAll("a[data-discover], form[data-discover]").forEach(registerElement);let lazyPaths=Array.from(nextPaths.keys()).filter(path=>discoveredPaths.has(path)?(nextPaths.delete(path),!1):!0);if(lazyPaths.length!==0)try{await fetchAndApplyManifestPatches(lazyPaths,null,manifest,routeModules,ssr,isSpaMode,router.basename,routeDiscovery.manifestPath,router.patchRoutes)}catch(e){console.error("Failed to fetch manifest patches",e)}}let debouncedFetchPatches=debounce(fetchPatches,100);fetchPatches();let observer=new MutationObserver(()=>debouncedFetchPatches());return observer.observe(document.documentElement,{subtree:!0,childList:!0,attributes:!0,attributeFilter:["data-discover","href","action"]}),()=>observer.disconnect()},[ssr,isSpaMode,manifest,routeModules,router,routeDiscovery])}function getManifestPath(_manifestPath,basename){let manifestPath=_manifestPath||"/__manifest";return basename==null?manifestPath:joinPaths([basename,manifestPath])}var MANIFEST_VERSION_STORAGE_KEY="react-router-manifest-version";async function fetchAndApplyManifestPatches(paths,errorReloadPath,manifest,routeModules,ssr,isSpaMode,basename,manifestPath,patchRoutes,signal){paths=getPathsWithAncestors(paths);let searchParams=new URLSearchParams;searchParams.set("paths",paths.sort().join(",")),searchParams.set("version",manifest.version);let url=new URL(getManifestPath(manifestPath,basename),window.location.origin);if(url.search=searchParams.toString(),url.toString().length>URL_LIMIT){nextPaths.clear();return}let serverPatches;try{let res=await fetch(url,{signal});if(res.ok){if(res.status===204&&res.headers.has("X-Remix-Reload-Document")){if(!errorReloadPath){console.warn("Detected a manifest version mismatch during eager route discovery. The next navigation/fetch to an undiscovered route will result in a new document navigation to sync up with the latest manifest.");return}try{if(sessionStorage.getItem(MANIFEST_VERSION_STORAGE_KEY)===manifest.version){console.error("Unable to discover routes due to manifest version mismatch.");return}sessionStorage.setItem(MANIFEST_VERSION_STORAGE_KEY,manifest.version)}catch{}window.location.href=errorReloadPath,console.warn("Detected manifest version mismatch, reloading..."),await new Promise(()=>{})}else if(res.status>=400)throw new Error(await res.text())}else throw new Error(`${res.status} ${res.statusText}`);try{sessionStorage.removeItem(MANIFEST_VERSION_STORAGE_KEY)}catch{}serverPatches=await res.json()}catch(e){if(signal?.aborted)return;throw e}let knownRoutes=new Set(Object.keys(manifest.routes)),patches=Object.values(serverPatches).reduce((acc,route)=>(route&&!knownRoutes.has(route.id)&&(acc[route.id]=route),acc),{});Object.assign(manifest.routes,patches),paths.forEach(p=>addToFifoQueue(p,discoveredPaths));let parentIds=new Set;Object.values(patches).forEach(patch=>{patch&&(!patch.parentId||!patches[patch.parentId])&&parentIds.add(patch.parentId)}),parentIds.forEach(parentId=>patchRoutes(parentId||null,createClientRoutes(patches,routeModules,null,ssr,isSpaMode,parentId)))}function addToFifoQueue(path,queue){if(queue.size>=discoveredPathsMaxSize){let first=queue.values().next().value;queue.delete(first)}queue.add(path)}function debounce(callback,wait){let timeoutId;return(...args)=>{window.clearTimeout(timeoutId),timeoutId=window.setTimeout(()=>callback(...args),wait)}}function useDataRouterContext2(){let context=React8.useContext(DataRouterContext);return invariant2(context,"You must render this element inside a <DataRouterContext.Provider> element"),context}function useDataRouterStateContext(){let context=React8.useContext(DataRouterStateContext);return invariant2(context,"You must render this element inside a <DataRouterStateContext.Provider> element"),context}var FrameworkContext=React8.createContext(void 0);FrameworkContext.displayName="FrameworkContext";function useFrameworkContext(){let context=React8.useContext(FrameworkContext);return invariant2(context,"You must render this element inside a <HydratedRouter> element"),context}function usePrefetchBehavior(prefetch,theirElementProps){let frameworkContext=React8.useContext(FrameworkContext),[maybePrefetch,setMaybePrefetch]=React8.useState(!1),[shouldPrefetch,setShouldPrefetch]=React8.useState(!1),{onFocus,onBlur,onMouseEnter,onMouseLeave,onTouchStart}=theirElementProps,ref=React8.useRef(null);React8.useEffect(()=>{if(prefetch==="render"&&setShouldPrefetch(!0),prefetch==="viewport"){let callback=entries=>{entries.forEach(entry=>{setShouldPrefetch(entry.isIntersecting)})},observer=new IntersectionObserver(callback,{threshold:.5});return ref.current&&observer.observe(ref.current),()=>{observer.disconnect()}}},[prefetch]),React8.useEffect(()=>{if(maybePrefetch){let id=setTimeout(()=>{setShouldPrefetch(!0)},100);return()=>{clearTimeout(id)}}},[maybePrefetch]);let setIntent=()=>{setMaybePrefetch(!0)},cancelIntent=()=>{setMaybePrefetch(!1),setShouldPrefetch(!1)};return frameworkContext?prefetch!=="intent"?[shouldPrefetch,ref,{}]:[shouldPrefetch,ref,{onFocus:composeEventHandlers(onFocus,setIntent),onBlur:composeEventHandlers(onBlur,cancelIntent),onMouseEnter:composeEventHandlers(onMouseEnter,setIntent),onMouseLeave:composeEventHandlers(onMouseLeave,cancelIntent),onTouchStart:composeEventHandlers(onTouchStart,setIntent)}]:[!1,ref,{}]}function composeEventHandlers(theirHandler,ourHandler){return event=>{theirHandler&&theirHandler(event),event.defaultPrevented||ourHandler(event)}}function getActiveMatches(matches,errors,isSpaMode){if(isSpaMode&&!isHydrated)return[matches[0]];if(errors){let errorIdx=matches.findIndex(m=>errors[m.route.id]!==void 0);return matches.slice(0,errorIdx+1)}return matches}var CRITICAL_CSS_DATA_ATTRIBUTE="data-react-router-critical-css";function Links({nonce,crossOrigin}){let{isSpaMode,manifest,routeModules,criticalCss,nonce:contextNonce}=useFrameworkContext(),{errors,matches:routerMatches}=useDataRouterStateContext(),matches=getActiveMatches(routerMatches,errors,isSpaMode),keyedLinks=React8.useMemo(()=>getKeyedLinksForMatches(matches,routeModules,manifest),[matches,routeModules,manifest]);return nonce==null&&contextNonce&&(nonce=contextNonce),React8.createElement(React8.Fragment,null,typeof criticalCss=="string"?React8.createElement("style",{[CRITICAL_CSS_DATA_ATTRIBUTE]:"",nonce,dangerouslySetInnerHTML:{__html:criticalCss}}):null,typeof criticalCss=="object"?React8.createElement("link",{[CRITICAL_CSS_DATA_ATTRIBUTE]:"",rel:"stylesheet",href:criticalCss.href,nonce,crossOrigin}):null,keyedLinks.map(({key,link})=>isPageLinkDescriptor(link)?React8.createElement(PrefetchPageLinks,{key,nonce,...link,crossOrigin:link.crossOrigin??crossOrigin}):React8.createElement("link",{key,nonce,...link,crossOrigin:link.crossOrigin??crossOrigin})))}function PrefetchPageLinks({page,...linkProps}){let rsc=useIsRSCRouterContext(),{nonce:contextNonce}=useFrameworkContext(),{router}=useDataRouterContext2(),matches=React8.useMemo(()=>matchRoutes(router.routes,page,router.basename),[router.routes,page,router.basename]);return matches?(linkProps.nonce==null&&contextNonce&&(linkProps={...linkProps,nonce:contextNonce}),rsc?React8.createElement(RSCPrefetchPageLinksImpl,{page,matches,...linkProps}):React8.createElement(PrefetchPageLinksImpl,{page,matches,...linkProps})):null}function useKeyedPrefetchLinks(matches){let{manifest,routeModules}=useFrameworkContext(),[keyedPrefetchLinks,setKeyedPrefetchLinks]=React8.useState([]);return React8.useEffect(()=>{let interrupted=!1;return getKeyedPrefetchLinks(matches,manifest,routeModules).then(links=>{interrupted||setKeyedPrefetchLinks(links)}),()=>{interrupted=!0}},[matches,manifest,routeModules]),keyedPrefetchLinks}function RSCPrefetchPageLinksImpl({page,matches:nextMatches,...linkProps}){let location=useLocation(),{future}=useFrameworkContext(),{basename}=useDataRouterContext2(),dataHrefs=React8.useMemo(()=>{if(page===location.pathname+location.search+location.hash)return[];let url=singleFetchUrl(page,basename,future.v8_trailingSlashAwareDataRequests,"rsc"),hasSomeRoutesWithShouldRevalidate=!1,targetRoutes=[];for(let match of nextMatches)typeof match.route.shouldRevalidate=="function"?hasSomeRoutesWithShouldRevalidate=!0:targetRoutes.push(match.route.id);return hasSomeRoutesWithShouldRevalidate&&targetRoutes.length>0&&url.searchParams.set("_routes",targetRoutes.join(",")),[url.pathname+url.search]},[basename,future.v8_trailingSlashAwareDataRequests,page,location,nextMatches]);return React8.createElement(React8.Fragment,null,dataHrefs.map(href2=>React8.createElement("link",{key:href2,rel:"prefetch",as:"fetch",href:href2,...linkProps})))}function PrefetchPageLinksImpl({page,matches:nextMatches,...linkProps}){let location=useLocation(),{future,manifest,routeModules}=useFrameworkContext(),{basename}=useDataRouterContext2(),{loaderData,matches}=useDataRouterStateContext(),newMatchesForData=React8.useMemo(()=>getNewMatchesForLinks(page,nextMatches,matches,manifest,location,"data"),[page,nextMatches,matches,manifest,location]),newMatchesForAssets=React8.useMemo(()=>getNewMatchesForLinks(page,nextMatches,matches,manifest,location,"assets"),[page,nextMatches,matches,manifest,location]),dataHrefs=React8.useMemo(()=>{if(page===location.pathname+location.search+location.hash)return[];let routesParams=new Set,foundOptOutRoute=!1;if(nextMatches.forEach(m=>{let manifestRoute=manifest.routes[m.route.id];!manifestRoute||!manifestRoute.hasLoader||(!newMatchesForData.some(m2=>m2.route.id===m.route.id)&&m.route.id in loaderData&&routeModules[m.route.id]?.shouldRevalidate||manifestRoute.hasClientLoader?foundOptOutRoute=!0:routesParams.add(m.route.id))}),routesParams.size===0)return[];let url=singleFetchUrl(page,basename,future.v8_trailingSlashAwareDataRequests,"data");return foundOptOutRoute&&routesParams.size>0&&url.searchParams.set("_routes",nextMatches.filter(m=>routesParams.has(m.route.id)).map(m=>m.route.id).join(",")),[url.pathname+url.search]},[basename,future.v8_trailingSlashAwareDataRequests,loaderData,location,manifest,newMatchesForData,nextMatches,page,routeModules]),moduleHrefs=React8.useMemo(()=>getModuleLinkHrefs(newMatchesForAssets,manifest),[newMatchesForAssets,manifest]),keyedPrefetchLinks=useKeyedPrefetchLinks(newMatchesForAssets);return React8.createElement(React8.Fragment,null,dataHrefs.map(href2=>React8.createElement("link",{key:href2,rel:"prefetch",as:"fetch",href:href2,...linkProps})),moduleHrefs.map(href2=>React8.createElement("link",{key:href2,rel:"modulepreload",href:href2,...linkProps})),keyedPrefetchLinks.map(({key,link})=>React8.createElement("link",{key,nonce:linkProps.nonce,...link,crossOrigin:link.crossOrigin??linkProps.crossOrigin})))}function Meta(){let{isSpaMode,routeModules}=useFrameworkContext(),{errors,matches:routerMatches,loaderData}=useDataRouterStateContext(),location=useLocation(),_matches=getActiveMatches(routerMatches,errors,isSpaMode),error=null;errors&&(error=errors[_matches[_matches.length-1].route.id]);let meta=[],leafMeta=null,matches=[];for(let i=0;i<_matches.length;i++){let _match=_matches[i],routeId=_match.route.id,data2=loaderData[routeId],params=_match.params,routeModule=routeModules[routeId],routeMeta=[],match={id:routeId,data:data2,loaderData:data2,meta:[],params:_match.params,pathname:_match.pathname,handle:_match.route.handle,error};if(matches[i]=match,routeModule?.meta?routeMeta=typeof routeModule.meta=="function"?routeModule.meta({data:data2,loaderData:data2,params,location,matches,error}):Array.isArray(routeModule.meta)?[...routeModule.meta]:routeModule.meta:leafMeta&&(routeMeta=[...leafMeta]),routeMeta=routeMeta||[],!Array.isArray(routeMeta))throw new Error("The route at "+_match.route.path+` returns an invalid value. All route meta functions must return an array of meta objects.
|
|
21
|
+
|
|
22
|
+
To reference the meta function API, see https://reactrouter.com/start/framework/route-module#meta`);match.meta=routeMeta,matches[i]=match,meta=[...routeMeta],leafMeta=meta}return React8.createElement(React8.Fragment,null,meta.flat().map(metaProps=>{if(!metaProps)return null;if("tagName"in metaProps){let{tagName,...rest}=metaProps;return isValidMetaTag(tagName)?React8.createElement(tagName,{key:JSON.stringify(rest),...rest}):(console.warn(`A meta object uses an invalid tagName: ${tagName}. Expected either 'link' or 'meta'`),null)}if("title"in metaProps)return React8.createElement("title",{key:"title"},String(metaProps.title));if("charset"in metaProps&&(metaProps.charSet??(metaProps.charSet=metaProps.charset),delete metaProps.charset),"charSet"in metaProps&&metaProps.charSet!=null)return typeof metaProps.charSet=="string"?React8.createElement("meta",{key:"charSet",charSet:metaProps.charSet}):null;if("script:ld+json"in metaProps)try{let json=JSON.stringify(metaProps["script:ld+json"]);return React8.createElement("script",{key:`script:ld+json:${json}`,type:"application/ld+json",dangerouslySetInnerHTML:{__html:escapeHtml(json)}})}catch{return null}return React8.createElement("meta",{key:JSON.stringify(metaProps),...metaProps})}))}function isValidMetaTag(tagName){return typeof tagName=="string"&&/^(meta|link)$/.test(tagName)}var isHydrated=!1;function setIsHydrated(){isHydrated=!0}function Scripts(scriptProps){let{manifest,serverHandoffString,isSpaMode,renderMeta,routeDiscovery,ssr,nonce:contextNonce}=useFrameworkContext(),{router,static:isStatic,staticContext}=useDataRouterContext2(),{matches:routerMatches}=useDataRouterStateContext(),isRSCRouterContext=useIsRSCRouterContext(),enableFogOfWar=isFogOfWarEnabled(routeDiscovery,ssr);scriptProps.nonce==null&&contextNonce&&(scriptProps={...scriptProps,nonce:contextNonce}),renderMeta&&(renderMeta.didRenderScripts=!0);let matches=getActiveMatches(routerMatches,null,isSpaMode);React8.useEffect(()=>{setIsHydrated()},[]);let initialScripts=React8.useMemo(()=>{if(isRSCRouterContext)return null;let contextScript=staticContext?`window.__reactRouterContext = ${serverHandoffString};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamController = controller;}}).pipeThrough(new TextEncoderStream());`:" ",routeModulesScript=isStatic?`${manifest.hmr?.runtime?`import ${JSON.stringify(manifest.hmr.runtime)};`:""}${enableFogOfWar?"":`import ${JSON.stringify(manifest.url)}`};
|
|
23
|
+
${matches.map((match,routeIndex)=>{let routeVarName=`route${routeIndex}`,manifestEntry=manifest.routes[match.route.id];invariant2(manifestEntry,`Route ${match.route.id} not found in manifest`);let{clientActionModule,clientLoaderModule,clientMiddlewareModule,hydrateFallbackModule,module}=manifestEntry,chunks=[...clientActionModule?[{module:clientActionModule,varName:`${routeVarName}_clientAction`}]:[],...clientLoaderModule?[{module:clientLoaderModule,varName:`${routeVarName}_clientLoader`}]:[],...clientMiddlewareModule?[{module:clientMiddlewareModule,varName:`${routeVarName}_clientMiddleware`}]:[],...hydrateFallbackModule?[{module:hydrateFallbackModule,varName:`${routeVarName}_HydrateFallback`}]:[],{module,varName:`${routeVarName}_main`}];if(chunks.length===1)return`import * as ${routeVarName} from ${JSON.stringify(module)};`;let chunkImportsSnippet=chunks.map(chunk=>`import * as ${chunk.varName} from "${chunk.module}";`).join(`
|
|
24
|
+
`),mergedChunksSnippet=`const ${routeVarName} = {${chunks.map(chunk=>`...${chunk.varName}`).join(",")}};`;return[chunkImportsSnippet,mergedChunksSnippet].join(`
|
|
25
|
+
`)}).join(`
|
|
26
|
+
`)}
|
|
27
|
+
${enableFogOfWar?`window.__reactRouterManifest = ${JSON.stringify(getPartialManifest(manifest,router),null,2)};`:""}
|
|
28
|
+
window.__reactRouterRouteModules = {${matches.map((match,index)=>`${JSON.stringify(match.route.id)}:route${index}`).join(",")}};
|
|
29
|
+
|
|
30
|
+
import(${JSON.stringify(manifest.entry.module)});`:" ";return React8.createElement(React8.Fragment,null,React8.createElement("script",{...scriptProps,suppressHydrationWarning:!0,dangerouslySetInnerHTML:{__html:contextScript},type:void 0}),React8.createElement("script",{...scriptProps,suppressHydrationWarning:!0,dangerouslySetInnerHTML:{__html:routeModulesScript},type:"module",async:!0}))},[]),preloads=isHydrated||isRSCRouterContext?[]:[...new Set(manifest.entry.imports.concat(getModuleLinkHrefs(matches,manifest,{includeHydrateFallback:!0})))],sri=typeof manifest.sri=="object"?manifest.sri:{};return warnOnce(!isRSCRouterContext,"The <Scripts /> element is a no-op when using RSC and can be safely removed."),isHydrated||isRSCRouterContext?null:React8.createElement(React8.Fragment,null,typeof manifest.sri=="object"?React8.createElement("script",{...scriptProps,"rr-importmap":"",type:"importmap",suppressHydrationWarning:!0,dangerouslySetInnerHTML:{__html:JSON.stringify({integrity:sri})}}):null,enableFogOfWar?null:React8.createElement("link",{rel:"modulepreload",href:manifest.url,crossOrigin:scriptProps.crossOrigin,integrity:sri[manifest.url],nonce:scriptProps.nonce,suppressHydrationWarning:!0}),React8.createElement("link",{rel:"modulepreload",href:manifest.entry.module,crossOrigin:scriptProps.crossOrigin,integrity:sri[manifest.entry.module],nonce:scriptProps.nonce,suppressHydrationWarning:!0}),preloads.map(path=>React8.createElement("link",{key:path,rel:"modulepreload",href:path,crossOrigin:scriptProps.crossOrigin,integrity:sri[path],nonce:scriptProps.nonce,suppressHydrationWarning:!0})),initialScripts)}function mergeRefs(...refs){return value=>{refs.forEach(ref=>{typeof ref=="function"?ref(value):ref!=null&&(ref.current=value)})}}var RemixErrorBoundary=class extends React9.Component{constructor(props){super(props),this.state={error:props.error||null,location:props.location}}static getDerivedStateFromError(error){return{error}}static getDerivedStateFromProps(props,state){return state.location!==props.location?{error:props.error||null,location:props.location}:{error:props.error||state.error,location:state.location}}render(){return this.state.error?React9.createElement(RemixRootDefaultErrorBoundary,{error:this.state.error,isOutsideRemixApp:!0}):this.props.children}};function RemixRootDefaultErrorBoundary({error,isOutsideRemixApp}){let{nonce}=useFrameworkContext();console.error(error);let heyDeveloper=React9.createElement("script",{nonce,dangerouslySetInnerHTML:{__html:`
|
|
31
|
+
console.log(
|
|
32
|
+
"\u{1F4BF} Hey developer \u{1F44B}. You can provide a way better UX than this when your app throws errors. Check out https://reactrouter.com/how-to/error-boundary for more information."
|
|
33
|
+
);
|
|
34
|
+
`}});if(isRouteErrorResponse(error))return React9.createElement(BoundaryShell,{title:"Unhandled Thrown Response!"},React9.createElement("h1",{style:{fontSize:"24px"}},error.status," ",error.statusText),ENABLE_DEV_WARNINGS?heyDeveloper:null);let errorInstance;if(error instanceof Error)errorInstance=error;else{let errorString=error==null?"Unknown Error":typeof error=="object"&&"toString"in error?error.toString():JSON.stringify(error);errorInstance=new Error(errorString)}return React9.createElement(BoundaryShell,{title:"Application Error!",isOutsideRemixApp},React9.createElement("h1",{style:{fontSize:"24px"}},"Application Error"),React9.createElement("pre",{style:{padding:"2rem",background:"hsla(10, 50%, 50%, 0.1)",color:"red",overflow:"auto"}},errorInstance.stack),heyDeveloper)}function BoundaryShell({title,renderScripts,isOutsideRemixApp,children}){let{routeModules}=useFrameworkContext();return routeModules.root?.Layout&&!isOutsideRemixApp?children:React9.createElement("html",{lang:"en"},React9.createElement("head",null,React9.createElement("meta",{charSet:"utf-8"}),React9.createElement("meta",{name:"viewport",content:"width=device-width,initial-scale=1,viewport-fit=cover"}),React9.createElement("title",null,title)),React9.createElement("body",null,React9.createElement("main",{style:{fontFamily:"system-ui, sans-serif",padding:"2rem"}},children,renderScripts?React9.createElement(Scripts,null):null)))}var isBrowser2=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u";try{isBrowser2&&(window.__reactRouterVersion="7.18.2")}catch{}function createBrowserRouter(routes,opts){return createRouter({basename:opts?.basename,getContext:opts?.getContext,future:opts?.future,history:createBrowserHistory({window:opts?.window}),hydrationData:opts?.hydrationData||parseHydrationData(),routes,mapRouteProperties,hydrationRouteProperties,dataStrategy:opts?.dataStrategy,patchRoutesOnNavigation:opts?.patchRoutesOnNavigation,window:opts?.window,instrumentations:opts?.instrumentations}).initialize()}function createHashRouter(routes,opts){return createRouter({basename:opts?.basename,getContext:opts?.getContext,future:opts?.future,history:createHashHistory({window:opts?.window}),hydrationData:opts?.hydrationData||parseHydrationData(),routes,mapRouteProperties,hydrationRouteProperties,dataStrategy:opts?.dataStrategy,patchRoutesOnNavigation:opts?.patchRoutesOnNavigation,window:opts?.window,instrumentations:opts?.instrumentations}).initialize()}function parseHydrationData(){let state=window?.__staticRouterHydrationData;return state&&state.errors&&(state={...state,errors:deserializeErrors(state.errors)}),state}function deserializeErrors(errors){if(!errors)return null;let entries=Object.entries(errors),serialized={};for(let[key,val]of entries)if(val&&val.__type==="RouteErrorResponse")serialized[key]=new ErrorResponseImpl(val.status,val.statusText,val.data,val.internal===!0);else if(val&&val.__type==="Error"){if(typeof val.__subType=="string"&&SUPPORTED_ERROR_TYPES.includes(val.__subType)){let ErrorConstructor=window[val.__subType];if(typeof ErrorConstructor=="function")try{let error=new ErrorConstructor(val.message);error.stack="",serialized[key]=error}catch{}}if(serialized[key]==null){let error=new Error(val.message);error.stack="",serialized[key]=error}}else serialized[key]=val;return serialized}function BrowserRouter({basename,children,useTransitions,window:window2}){let historyRef=React10.useRef();historyRef.current==null&&(historyRef.current=createBrowserHistory({window:window2,v5Compat:!0}));let history=historyRef.current,[state,setStateImpl]=React10.useState({action:history.action,location:history.location}),setState=React10.useCallback(newState=>{useTransitions===!1?setStateImpl(newState):React10.startTransition(()=>setStateImpl(newState))},[useTransitions]);return React10.useLayoutEffect(()=>history.listen(setState),[history,setState]),React10.createElement(Router,{basename,children,location:state.location,navigationType:state.action,navigator:history,useTransitions})}function HashRouter({basename,children,useTransitions,window:window2}){let historyRef=React10.useRef();historyRef.current==null&&(historyRef.current=createHashHistory({window:window2,v5Compat:!0}));let history=historyRef.current,[state,setStateImpl]=React10.useState({action:history.action,location:history.location}),setState=React10.useCallback(newState=>{useTransitions===!1?setStateImpl(newState):React10.startTransition(()=>setStateImpl(newState))},[useTransitions]);return React10.useLayoutEffect(()=>history.listen(setState),[history,setState]),React10.createElement(Router,{basename,children,location:state.location,navigationType:state.action,navigator:history,useTransitions})}function HistoryRouter({basename,children,history,useTransitions}){let[state,setStateImpl]=React10.useState({action:history.action,location:history.location}),setState=React10.useCallback(newState=>{useTransitions===!1?setStateImpl(newState):React10.startTransition(()=>setStateImpl(newState))},[useTransitions]);return React10.useLayoutEffect(()=>history.listen(setState),[history,setState]),React10.createElement(Router,{basename,children,location:state.location,navigationType:state.action,navigator:history,useTransitions})}HistoryRouter.displayName="unstable_HistoryRouter";var Link=React10.forwardRef(function({onClick,discover="render",prefetch="none",relative,reloadDocument,replace:replace2,mask,state,target,to,preventScrollReset,viewTransition,defaultShouldRevalidate,...rest},forwardedRef){let{basename,navigator,useTransitions}=React10.useContext(NavigationContext),isAbsolute=typeof to=="string"&&ABSOLUTE_URL_REGEX.test(to),parsed=parseToInfo(to,basename);to=parsed.to;let href2=useHref(to,{relative}),location=useLocation(),maskedHref=null;if(mask){let resolved=resolveTo(mask,[],location.mask?location.mask.pathname:"/",!0);basename!=="/"&&(resolved.pathname=resolved.pathname==="/"?basename:joinPaths([basename,resolved.pathname])),maskedHref=navigator.createHref(resolved)}let[shouldPrefetch,prefetchRef,prefetchHandlers]=usePrefetchBehavior(prefetch,rest),internalOnClick=useLinkClickHandler(to,{replace:replace2,mask,state,target,preventScrollReset,relative,viewTransition,defaultShouldRevalidate,useTransitions});function handleClick(event){onClick&&onClick(event),event.defaultPrevented||internalOnClick(event)}let isSpaLink=!(parsed.isExternal||reloadDocument),link=React10.createElement("a",{...rest,...prefetchHandlers,href:(isSpaLink?maskedHref:void 0)||parsed.absoluteURL||href2,onClick:isSpaLink?handleClick:onClick,ref:mergeRefs(forwardedRef,prefetchRef),target,"data-discover":!isAbsolute&&discover==="render"?"true":void 0});return shouldPrefetch&&!isAbsolute?React10.createElement(React10.Fragment,null,link,React10.createElement(PrefetchPageLinks,{page:href2})):link});Link.displayName="Link";var NavLink=React10.forwardRef(function({"aria-current":ariaCurrentProp="page",caseSensitive=!1,className:classNameProp="",end=!1,style:styleProp,to,viewTransition,children,...rest},ref){let path=useResolvedPath(to,{relative:rest.relative}),location=useLocation(),routerState=React10.useContext(DataRouterStateContext),{navigator,basename}=React10.useContext(NavigationContext),isTransitioning=routerState!=null&&useViewTransitionState(path)&&viewTransition===!0,toPathname=navigator.encodeLocation?navigator.encodeLocation(path).pathname:path.pathname,locationPathname=location.pathname,nextLocationPathname=routerState&&routerState.navigation&&routerState.navigation.location?routerState.navigation.location.pathname:null;caseSensitive||(locationPathname=locationPathname.toLowerCase(),nextLocationPathname=nextLocationPathname?nextLocationPathname.toLowerCase():null,toPathname=toPathname.toLowerCase()),nextLocationPathname&&basename&&(nextLocationPathname=stripBasename(nextLocationPathname,basename)||nextLocationPathname);let endSlashPosition=toPathname!=="/"&&toPathname.endsWith("/")?toPathname.length-1:toPathname.length,isActive=locationPathname===toPathname||!end&&locationPathname.startsWith(toPathname)&&locationPathname.charAt(endSlashPosition)==="/",isPending=nextLocationPathname!=null&&(nextLocationPathname===toPathname||!end&&nextLocationPathname.startsWith(toPathname)&&nextLocationPathname.charAt(toPathname.length)==="/"),renderProps={isActive,isPending,isTransitioning},ariaCurrent=isActive?ariaCurrentProp:void 0,className;typeof classNameProp=="function"?className=classNameProp(renderProps):className=[classNameProp,isActive?"active":null,isPending?"pending":null,isTransitioning?"transitioning":null].filter(Boolean).join(" ");let style=typeof styleProp=="function"?styleProp(renderProps):styleProp;return React10.createElement(Link,{...rest,"aria-current":ariaCurrent,className,ref,style,to,viewTransition},typeof children=="function"?children(renderProps):children)});NavLink.displayName="NavLink";var Form=React10.forwardRef(({discover="render",fetcherKey,navigate,reloadDocument,replace:replace2,state,method=defaultMethod,action,onSubmit,relative,preventScrollReset,viewTransition,defaultShouldRevalidate,...props},forwardedRef)=>{let{useTransitions}=React10.useContext(NavigationContext),submit=useSubmit(),formAction=useFormAction(action,{relative}),formMethod=method.toLowerCase()==="get"?"get":"post",isAbsolute=typeof action=="string"&&ABSOLUTE_URL_REGEX.test(action);return React10.createElement("form",{ref:forwardedRef,method:formMethod,action:formAction,onSubmit:reloadDocument?onSubmit:event=>{if(onSubmit&&onSubmit(event),event.defaultPrevented)return;event.preventDefault();let submitter=event.nativeEvent.submitter,submitMethod=submitter?.getAttribute("formmethod")||method,doSubmit=()=>submit(submitter||event.currentTarget,{fetcherKey,method:submitMethod,navigate,replace:replace2,state,relative,preventScrollReset,viewTransition,defaultShouldRevalidate});useTransitions&&navigate!==!1?React10.startTransition(()=>doSubmit()):doSubmit()},...props,"data-discover":!isAbsolute&&discover==="render"?"true":void 0})});Form.displayName="Form";function ScrollRestoration({getKey,storageKey,...props}){let remixContext=React10.useContext(FrameworkContext),{basename}=React10.useContext(NavigationContext),location=useLocation(),matches=useMatches();useScrollRestoration({getKey,storageKey});let ssrKey=React10.useMemo(()=>{if(!remixContext||!getKey)return null;let userKey=getScrollRestorationKey(location,matches,basename,getKey);return userKey!==location.key?userKey:null},[]);if(!remixContext||remixContext.isSpaMode)return null;let restoreScroll=((storageKey2,restoreKey)=>{if(!window.history.state||!window.history.state.key){let key=Math.random().toString(32).slice(2);window.history.replaceState({key},"")}try{let storedY=JSON.parse(sessionStorage.getItem(storageKey2)||"{}")[restoreKey||window.history.state.key];typeof storedY=="number"&&window.scrollTo(0,storedY)}catch(error){console.error(error),sessionStorage.removeItem(storageKey2)}}).toString();return props.nonce==null&&remixContext?.nonce&&(props.nonce=remixContext.nonce),React10.createElement("script",{...props,suppressHydrationWarning:!0,dangerouslySetInnerHTML:{__html:`(${restoreScroll})(${escapeHtml(JSON.stringify(storageKey||SCROLL_RESTORATION_STORAGE_KEY))}, ${escapeHtml(JSON.stringify(ssrKey))})`}})}ScrollRestoration.displayName="ScrollRestoration";function getDataRouterConsoleError2(hookName){return`${hookName} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function useDataRouterContext3(hookName){let ctx=React10.useContext(DataRouterContext);return invariant(ctx,getDataRouterConsoleError2(hookName)),ctx}function useDataRouterState2(hookName){let state=React10.useContext(DataRouterStateContext);return invariant(state,getDataRouterConsoleError2(hookName)),state}function useLinkClickHandler(to,{target,replace:replaceProp,mask,state,preventScrollReset,relative,viewTransition,defaultShouldRevalidate,useTransitions}={}){let navigate=useNavigate(),location=useLocation(),path=useResolvedPath(to,{relative});return React10.useCallback(event=>{if(shouldProcessLinkClick(event,target)){event.preventDefault();let replace2=replaceProp!==void 0?replaceProp:createPath(location)===createPath(path),doNavigate=()=>navigate(to,{replace:replace2,mask,state,preventScrollReset,relative,viewTransition,defaultShouldRevalidate});useTransitions?React10.startTransition(()=>doNavigate()):doNavigate()}},[location,navigate,path,replaceProp,mask,state,target,to,preventScrollReset,relative,viewTransition,defaultShouldRevalidate,useTransitions])}function useSearchParams(defaultInit){warning(typeof URLSearchParams<"u","You cannot use the `useSearchParams` hook in a browser that does not support the URLSearchParams API. If you need to support Internet Explorer 11, we recommend you load a polyfill such as https://github.com/ungap/url-search-params.");let defaultSearchParamsRef=React10.useRef(createSearchParams(defaultInit)),hasSetSearchParamsRef=React10.useRef(!1),location=useLocation(),searchParams=React10.useMemo(()=>getSearchParamsForLocation(location.search,hasSetSearchParamsRef.current?null:defaultSearchParamsRef.current),[location.search]),navigate=useNavigate(),setSearchParams=React10.useCallback((nextInit,navigateOptions)=>{let newSearchParams=createSearchParams(typeof nextInit=="function"?nextInit(new URLSearchParams(searchParams)):nextInit);hasSetSearchParamsRef.current=!0,navigate("?"+newSearchParams,navigateOptions)},[navigate,searchParams]);return[searchParams,setSearchParams]}var fetcherId=0,getUniqueFetcherId=()=>`__${String(++fetcherId)}__`;function useSubmit(){let{router}=useDataRouterContext3("useSubmit"),{basename}=React10.useContext(NavigationContext),currentRouteId=useRouteId(),routerFetch=router.fetch,routerNavigate=router.navigate;return React10.useCallback(async(target,options={})=>{let{action,method,encType,formData,body}=getFormSubmissionInfo(target,basename);if(options.navigate===!1){let key=options.fetcherKey||getUniqueFetcherId();await routerFetch(key,currentRouteId,options.action||action,{defaultShouldRevalidate:options.defaultShouldRevalidate,preventScrollReset:options.preventScrollReset,formData,body,formMethod:options.method||method,formEncType:options.encType||encType,flushSync:options.flushSync})}else await routerNavigate(options.action||action,{defaultShouldRevalidate:options.defaultShouldRevalidate,preventScrollReset:options.preventScrollReset,formData,body,formMethod:options.method||method,formEncType:options.encType||encType,replace:options.replace,state:options.state,fromRouteId:currentRouteId,flushSync:options.flushSync,viewTransition:options.viewTransition})},[routerFetch,routerNavigate,basename,currentRouteId])}function useFormAction(action,{relative}={}){let{basename}=React10.useContext(NavigationContext),routeContext=React10.useContext(RouteContext);invariant(routeContext,"useFormAction must be used inside a RouteContext");let[match]=routeContext.matches.slice(-1),path={...useResolvedPath(action||".",{relative})},location=useLocation();if(action==null){path.search=location.search;let params=new URLSearchParams(path.search),indexValues=params.getAll("index");if(indexValues.some(v=>v==="")){params.delete("index"),indexValues.filter(v=>v).forEach(v=>params.append("index",v));let qs=params.toString();path.search=qs?`?${qs}`:""}}return(!action||action===".")&&match.route.index&&(path.search=path.search?path.search.replace(/^\?/,"?index&"):"?index"),basename!=="/"&&(path.pathname=path.pathname==="/"?basename:joinPaths([basename,path.pathname])),createPath(path)}function useFetcher({key}={}){let{router}=useDataRouterContext3("useFetcher"),state=useDataRouterState2("useFetcher"),fetcherData=React10.useContext(FetchersContext),route=React10.useContext(RouteContext),routeId=route.matches[route.matches.length-1]?.route.id;invariant(fetcherData,"useFetcher must be used inside a FetchersContext"),invariant(route,"useFetcher must be used inside a RouteContext"),invariant(routeId!=null,'useFetcher can only be used on routes that contain a unique "id"');let defaultKey=React10.useId(),[fetcherKey,setFetcherKey]=React10.useState(key||defaultKey);key&&key!==fetcherKey&&setFetcherKey(key);let{deleteFetcher,getFetcher,resetFetcher,fetch:routerFetch}=router;React10.useEffect(()=>(getFetcher(fetcherKey),()=>deleteFetcher(fetcherKey)),[deleteFetcher,getFetcher,fetcherKey]);let load=React10.useCallback(async(href2,opts)=>{invariant(routeId,"No routeId available for fetcher.load()"),await routerFetch(fetcherKey,routeId,href2,opts)},[fetcherKey,routeId,routerFetch]),submitImpl=useSubmit(),submit=React10.useCallback(async(target,opts)=>{await submitImpl(target,{...opts,navigate:!1,fetcherKey})},[fetcherKey,submitImpl]),reset=React10.useCallback(opts=>resetFetcher(fetcherKey,opts),[resetFetcher,fetcherKey]),FetcherForm=React10.useMemo(()=>{let FetcherForm2=React10.forwardRef((props,ref)=>React10.createElement(Form,{...props,navigate:!1,fetcherKey,ref}));return FetcherForm2.displayName="fetcher.Form",FetcherForm2},[fetcherKey]),fetcher=state.fetchers.get(fetcherKey)||IDLE_FETCHER,data2=fetcherData.get(fetcherKey);return React10.useMemo(()=>({Form:FetcherForm,submit,load,reset,...fetcher,data:data2}),[FetcherForm,submit,load,reset,fetcher,data2])}function useFetchers(){let state=useDataRouterState2("useFetchers");return React10.useMemo(()=>Array.from(state.fetchers.entries()).map(([key,fetcher])=>({...fetcher,key})),[state.fetchers])}var SCROLL_RESTORATION_STORAGE_KEY="react-router-scroll-positions",savedScrollPositions={};function getScrollRestorationKey(location,matches,basename,getKey){let key=null;return getKey&&(basename!=="/"?key=getKey({...location,pathname:stripBasename(location.pathname,basename)||location.pathname},matches):key=getKey(location,matches)),key==null&&(key=location.key),key}function useScrollRestoration({getKey,storageKey}={}){let{router}=useDataRouterContext3("useScrollRestoration"),{restoreScrollPosition,preventScrollReset}=useDataRouterState2("useScrollRestoration"),{basename}=React10.useContext(NavigationContext),location=useLocation(),matches=useMatches(),navigation=useNavigation();React10.useEffect(()=>(window.history.scrollRestoration="manual",()=>{window.history.scrollRestoration="auto"}),[]),usePageHide(React10.useCallback(()=>{if(navigation.state==="idle"){let key=getScrollRestorationKey(location,matches,basename,getKey);savedScrollPositions[key]=window.scrollY}try{sessionStorage.setItem(storageKey||SCROLL_RESTORATION_STORAGE_KEY,JSON.stringify(savedScrollPositions))}catch(error){warning(!1,`Failed to save scroll positions in sessionStorage, <ScrollRestoration /> will not work properly (${error}).`)}window.history.scrollRestoration="auto"},[navigation.state,getKey,basename,location,matches,storageKey])),typeof document<"u"&&(React10.useLayoutEffect(()=>{try{let sessionPositions=sessionStorage.getItem(storageKey||SCROLL_RESTORATION_STORAGE_KEY);sessionPositions&&(savedScrollPositions=JSON.parse(sessionPositions))}catch{}},[storageKey]),React10.useLayoutEffect(()=>{let disableScrollRestoration=router?.enableScrollRestoration(savedScrollPositions,()=>window.scrollY,getKey?(location2,matches2)=>getScrollRestorationKey(location2,matches2,basename,getKey):void 0);return()=>disableScrollRestoration&&disableScrollRestoration()},[router,basename,getKey]),React10.useLayoutEffect(()=>{if(restoreScrollPosition!==!1){if(typeof restoreScrollPosition=="number"){window.scrollTo(0,restoreScrollPosition);return}try{if(location.hash){let el=document.getElementById(decodeURIComponent(location.hash.slice(1)));if(el){el.scrollIntoView();return}}}catch{warning(!1,`"${location.hash.slice(1)}" is not a decodable element ID. The view will not scroll to it.`)}preventScrollReset!==!0&&window.scrollTo(0,0)}},[location,restoreScrollPosition,preventScrollReset]))}function useBeforeUnload(callback,options){let{capture}=options||{};React10.useEffect(()=>{let opts=capture!=null?{capture}:void 0;return window.addEventListener("beforeunload",callback,opts),()=>{window.removeEventListener("beforeunload",callback,opts)}},[callback,capture])}function usePageHide(callback,options){let{capture}=options||{};React10.useEffect(()=>{let opts=capture!=null?{capture}:void 0;return window.addEventListener("pagehide",callback,opts),()=>{window.removeEventListener("pagehide",callback,opts)}},[callback,capture])}function usePrompt({when,message}){let blocker=useBlocker(when);React10.useEffect(()=>{blocker.state==="blocked"&&(window.confirm(message)?setTimeout(blocker.proceed,0):blocker.reset())},[blocker,message]),React10.useEffect(()=>{blocker.state==="blocked"&&!when&&blocker.reset()},[blocker,when])}function useViewTransitionState(to,{relative}={}){let vtContext=React10.useContext(ViewTransitionContext);invariant(vtContext!=null,"`useViewTransitionState` must be used within `react-router-dom`'s `RouterProvider`. Did you accidentally import `RouterProvider` from `react-router`?");let{basename}=useDataRouterContext3("useViewTransitionState"),path=useResolvedPath(to,{relative});if(!vtContext.isTransitioning)return!1;let currentPath=stripBasename(vtContext.currentLocation.pathname,basename)||vtContext.currentLocation.pathname,nextPath=stripBasename(vtContext.nextLocation.pathname,basename)||vtContext.nextLocation.pathname;return matchPath(path.pathname,nextPath)!=null||matchPath(path.pathname,currentPath)!=null}function StaticRouter({basename,children,location:locationProp="/"}){typeof locationProp=="string"&&(locationProp=parsePath(locationProp));let action="POP",location={pathname:locationProp.pathname||"/",search:locationProp.search||"",hash:locationProp.hash||"",state:locationProp.state!=null?locationProp.state:null,key:locationProp.key||"default",mask:void 0},staticNavigator=getStatelessNavigator();return React11.createElement(Router,{basename,children,location,navigationType:action,navigator:staticNavigator,static:!0,useTransitions:!1})}function StaticRouterProvider({context,router,hydrate:hydrate2=!0,nonce}){invariant(router&&context,"You must provide `router` and `context` to <StaticRouterProvider>");let dataRouterContext={router,navigator:getStatelessNavigator(),static:!0,staticContext:context,basename:context.basename||"/"},fetchersContext=new Map,hydrateScript="";if(hydrate2!==!1){let data2={loaderData:context.loaderData,actionData:context.actionData,errors:serializeErrors(context.errors)};hydrateScript=`window.__staticRouterHydrationData = JSON.parse(${escapeHtml(JSON.stringify(JSON.stringify(data2)))});`}let{state}=dataRouterContext.router;return React11.createElement(React11.Fragment,null,React11.createElement(DataRouterContext.Provider,{value:dataRouterContext},React11.createElement(DataRouterStateContext.Provider,{value:state},React11.createElement(FetchersContext.Provider,{value:fetchersContext},React11.createElement(ViewTransitionContext.Provider,{value:{isTransitioning:!1}},React11.createElement(Router,{basename:dataRouterContext.basename,location:state.location,navigationType:state.historyAction,navigator:dataRouterContext.navigator,static:dataRouterContext.static,useTransitions:!1},React11.createElement(DataRoutes2,{manifest:router.manifest,routes:router.routes,future:router.future,state,isStatic:!0})))))),hydrateScript?React11.createElement("script",{suppressHydrationWarning:!0,nonce,dangerouslySetInnerHTML:{__html:hydrateScript}}):null)}function serializeErrors(errors){if(!errors)return null;let entries=Object.entries(errors),serialized={};for(let[key,val]of entries)isRouteErrorResponse(val)?serialized[key]={...val,__type:"RouteErrorResponse"}:val instanceof Error?serialized[key]={message:val.message,__type:"Error",...val.name!=="Error"?{__subType:val.name}:{}}:serialized[key]=val;return serialized}function getStatelessNavigator(){return{createHref,encodeLocation,push(to){throw new Error(`You cannot use navigator.push() on the server because it is a stateless environment. This error was probably triggered when you did a \`navigate(${JSON.stringify(to)})\` somewhere in your app.`)},replace(to){throw new Error(`You cannot use navigator.replace() on the server because it is a stateless environment. This error was probably triggered when you did a \`navigate(${JSON.stringify(to)}, { replace: true })\` somewhere in your app.`)},go(delta){throw new Error(`You cannot use navigator.go() on the server because it is a stateless environment. This error was probably triggered when you did a \`navigate(${delta})\` somewhere in your app.`)},back(){throw new Error("You cannot use navigator.back() on the server because it is a stateless environment.")},forward(){throw new Error("You cannot use navigator.forward() on the server because it is a stateless environment.")}}}function createStaticHandler2(routes,opts){return createStaticHandler(routes,{...opts,mapRouteProperties})}function createStaticRouter(routes,context,opts={}){let manifest={},dataRoutes=convertRoutesToDataRoutes(routes,mapRouteProperties,void 0,manifest),matches=context.matches.map(match=>{let route=manifest[match.route.id]||match.route;return{...match,route}}),msg=method=>`You cannot use router.${method}() on the server because it is a stateless environment`;return{get basename(){return context.basename},get future(){return{v8_middleware:!1,v8_passThroughRequests:!1,v8_trailingSlashAwareDataRequests:!1,...opts?.future}},get state(){return{historyAction:"POP",location:context.location,matches,loaderData:context.loaderData,actionData:context.actionData,errors:context.errors,initialized:!0,renderFallback:!1,navigation:IDLE_NAVIGATION,restoreScrollPosition:null,preventScrollReset:!1,revalidation:"idle",fetchers:new Map,blockers:new Map}},get routes(){return dataRoutes},get branches(){return opts.branches},get manifest(){return manifest},get window(){},initialize(){throw msg("initialize")},subscribe(){throw msg("subscribe")},enableScrollRestoration(){throw msg("enableScrollRestoration")},navigate(){throw msg("navigate")},fetch(){throw msg("fetch")},revalidate(){throw msg("revalidate")},createHref,encodeLocation,getFetcher(){return IDLE_FETCHER},deleteFetcher(){throw msg("deleteFetcher")},resetFetcher(){throw msg("resetFetcher")},dispose(){throw msg("dispose")},getBlocker(){return IDLE_BLOCKER},deleteBlocker(){throw msg("deleteBlocker")},patchRoutes(){throw msg("patchRoutes")},_internalFetchControllers:new Map,_internalSetRoutes(){throw msg("_internalSetRoutes")},_internalSetStateDoNotUseOrYouWillBreakYourApp(){throw msg("_internalSetStateDoNotUseOrYouWillBreakYourApp")}}}function createHref(to){return typeof to=="string"?to:createPath(to)}function encodeLocation(to){let href2=typeof to=="string"?to:createPath(to);href2=href2.replace(/ $/,"%20");let encoded=ABSOLUTE_URL_REGEX.test(href2)?new URL(href2):new URL(href2,"http://localhost");return{pathname:encoded.pathname,search:encoded.search,hash:encoded.hash}}var import_cookie=__toESM(require_dist(),1),import_set_cookie_parser=__toESM(require_set_cookie(),1);import*as React12 from"react";import*as React22 from"react";import*as React42 from"react";import React32 from"react";function ServerRouter({context,url,nonce}){typeof url=="string"&&(url=new URL(url));let{manifest,routeModules,criticalCss,serverHandoffString}=context,routes=createServerRoutes(manifest.routes,routeModules,context.future,context.isSpaMode);context.staticHandlerContext.loaderData={...context.staticHandlerContext.loaderData};for(let match of context.staticHandlerContext.matches){let routeId=match.route.id,route=routeModules[routeId],manifestRoute=context.manifest.routes[routeId];route&&manifestRoute&&shouldHydrateRouteLoader(routeId,route.clientLoader,manifestRoute.hasLoader,context.isSpaMode)&&(route.HydrateFallback||!manifestRoute.hasLoader)&&delete context.staticHandlerContext.loaderData[routeId]}let router=createStaticRouter(routes,context.staticHandlerContext,{branches:context.branches});return React12.createElement(React12.Fragment,null,React12.createElement(FrameworkContext.Provider,{value:{manifest,routeModules,criticalCss,serverHandoffString,future:context.future,ssr:context.ssr,isSpaMode:context.isSpaMode,routeDiscovery:context.routeDiscovery,nonce,serializeError:context.serializeError,renderMeta:context.renderMeta}},React12.createElement(RemixErrorBoundary,{location:router.state.location},React12.createElement(StaticRouterProvider,{router,context:context.staticHandlerContext,hydrate:!1}))),context.serverHandoffStream?React12.createElement(React12.Suspense,null,React12.createElement(StreamTransfer,{context,identifier:0,reader:context.serverHandoffStream.getReader(),textDecoder:new TextDecoder,nonce})):null)}function createRoutesStub(routes,_context){return function({initialEntries,initialIndex,hydrationData,future}){let routerRef=React22.useRef(),frameworkContextRef=React22.useRef();if(routerRef.current==null){frameworkContextRef.current={future:{v8_passThroughRequests:future?.v8_passThroughRequests===!0,v8_middleware:future?.v8_middleware===!0,v8_trailingSlashAwareDataRequests:future?.v8_trailingSlashAwareDataRequests===!0},manifest:{routes:{},entry:{imports:[],module:""},url:"",version:""},routeModules:{},ssr:!1,isSpaMode:!1,routeDiscovery:{mode:"lazy",manifestPath:"/__manifest"}};let patched=processRoutes(convertRoutesToDataRoutes(routes,r=>r),_context!==void 0?_context:future?.v8_middleware?new RouterContextProvider:{},frameworkContextRef.current.manifest,frameworkContextRef.current.routeModules);routerRef.current=createMemoryRouter(patched,{initialEntries,initialIndex,hydrationData})}return React22.createElement(FrameworkContext.Provider,{value:frameworkContextRef.current},React22.createElement(RouterProvider,{router:routerRef.current}))}}function processRoutes(routes,context,manifest,routeModules,parentId){return routes.map(route=>{if(!route.id)throw new Error("Expected a route.id in react-router processRoutes() function");let newRoute={id:route.id,path:route.path,index:route.index,Component:route.Component?withComponentProps(route.Component):void 0,HydrateFallback:route.HydrateFallback?withHydrateFallbackProps(route.HydrateFallback):void 0,ErrorBoundary:route.ErrorBoundary?withErrorBoundaryProps(route.ErrorBoundary):void 0,action:route.action?args=>route.action({...args,context}):void 0,loader:route.loader?args=>route.loader({...args,context}):void 0,middleware:route.middleware?route.middleware.map(mw=>(...args)=>mw({...args[0],context},args[1])):void 0,handle:route.handle,shouldRevalidate:route.shouldRevalidate},entryRoute={id:route.id,path:route.path,index:route.index,parentId,hasAction:route.action!=null,hasLoader:route.loader!=null,hasClientAction:!1,hasClientLoader:!1,hasClientMiddleware:!1,hasErrorBoundary:route.ErrorBoundary!=null,module:"build/stub-path-to-module.js",clientActionModule:void 0,clientLoaderModule:void 0,clientMiddlewareModule:void 0,hydrateFallbackModule:void 0};return manifest.routes[newRoute.id]=entryRoute,routeModules[route.id]={default:newRoute.Component||Outlet,ErrorBoundary:newRoute.ErrorBoundary||void 0,handle:route.handle,links:route.links,meta:route.meta,shouldRevalidate:route.shouldRevalidate},route.children&&(newRoute.children=processRoutes(route.children,context,manifest,routeModules,newRoute.id)),newRoute})}var encoder=new TextEncoder,sign=async(value,secret)=>{let data2=encoder.encode(value),key=await createKey2(secret,["sign"]),signature=await crypto.subtle.sign("HMAC",key,data2),hash=btoa(String.fromCharCode(...new Uint8Array(signature))).replace(/=+$/,"");return value+"."+hash},unsign=async(cookie,secret)=>{let index=cookie.lastIndexOf("."),value=cookie.slice(0,index),hash=cookie.slice(index+1),data2=encoder.encode(value),key=await createKey2(secret,["verify"]);try{let signature=byteStringToUint8Array(atob(hash));return await crypto.subtle.verify("HMAC",key,signature,data2)?value:!1}catch{return!1}},createKey2=async(secret,usages)=>crypto.subtle.importKey("raw",encoder.encode(secret),{name:"HMAC",hash:"SHA-256"},!1,usages);function byteStringToUint8Array(byteString){let array=new Uint8Array(byteString.length);for(let i=0;i<byteString.length;i++)array[i]=byteString.charCodeAt(i);return array}var createCookie=(name,cookieOptions={})=>{let{secrets=[],...options}={path:"/",sameSite:"lax",...cookieOptions};return warnOnceAboutExpiresCookie(name,options.expires),{get name(){return name},get isSigned(){return secrets.length>0},get expires(){return typeof options.maxAge<"u"?new Date(Date.now()+options.maxAge*1e3):options.expires},async parse(cookieHeader,parseOptions){if(!cookieHeader)return null;let cookies=(0,import_cookie.parse)(cookieHeader,{...options,...parseOptions});if(name in cookies){let value=cookies[name];return typeof value=="string"&&value!==""?await decodeCookieValue(value,secrets):""}else return null},async serialize(value,serializeOptions){return(0,import_cookie.serialize)(name,value===""?"":await encodeCookieValue(value,secrets),{...options,...serializeOptions})}}},isCookie=object=>object!=null&&typeof object.name=="string"&&typeof object.isSigned=="boolean"&&typeof object.parse=="function"&&typeof object.serialize=="function";async function encodeCookieValue(value,secrets){let encoded=encodeData(value);return secrets.length>0&&(encoded=await sign(encoded,secrets[0])),encoded}async function decodeCookieValue(value,secrets){if(secrets.length>0){for(let secret of secrets){let unsignedValue=await unsign(value,secret);if(unsignedValue!==!1)return decodeData(unsignedValue)}return null}return decodeData(value)}function encodeData(value){return btoa(myUnescape(encodeURIComponent(JSON.stringify(value))))}function decodeData(value){try{return JSON.parse(decodeURIComponent(myEscape(atob(value))))}catch{return{}}}function myEscape(value){let str=value.toString(),result="",index=0,chr,code;for(;index<str.length;)chr=str.charAt(index++),/[\w*+\-./@]/.exec(chr)?result+=chr:(code=chr.charCodeAt(0),code<256?result+="%"+hex(code,2):result+="%u"+hex(code,4).toUpperCase());return result}function hex(code,length){let result=code.toString(16);for(;result.length<length;)result="0"+result;return result}function myUnescape(value){let str=value.toString(),result="",index=0,chr,part;for(;index<str.length;){if(chr=str.charAt(index++),chr==="%"){if(str.charAt(index)==="u"){if(part=str.slice(index+1,index+5),/^[\da-f]{4}$/i.exec(part)){result+=String.fromCharCode(parseInt(part,16)),index+=5;continue}}else if(part=str.slice(index,index+2),/^[\da-f]{2}$/i.exec(part)){result+=String.fromCharCode(parseInt(part,16)),index+=2;continue}}result+=chr}return result}function warnOnceAboutExpiresCookie(name,expires){warnOnce(!expires,`The "${name}" cookie has an "expires" property set. This will cause the expires value to not be updated when the session is committed. Instead, you should set the expires value when serializing the cookie. You can use \`commitSession(session, { expires })\` if using a session storage object, or \`cookie.serialize("value", { expires })\` if you're using the cookie directly.`)}function createEntryRouteModules(manifest){return Object.keys(manifest).reduce((memo2,routeId)=>{let route=manifest[routeId];return route&&(memo2[routeId]=route.module),memo2},{})}var ServerMode=(ServerMode2=>(ServerMode2.Development="development",ServerMode2.Production="production",ServerMode2.Test="test",ServerMode2))(ServerMode||{});function isServerMode(value){return value==="development"||value==="production"||value==="test"}function sanitizeError(error,serverMode){if(error instanceof Error&&serverMode!=="development"){let sanitized=new Error("Unexpected Server Error");return sanitized.stack=void 0,sanitized}return error}function sanitizeErrors(errors,serverMode){return Object.entries(errors).reduce((acc,[routeId,error])=>Object.assign(acc,{[routeId]:sanitizeError(error,serverMode)}),{})}function serializeError(error,serverMode){let sanitized=sanitizeError(error,serverMode);return{message:sanitized.message,stack:sanitized.stack}}function invariant3(value,message){if(value===!1||value===null||typeof value>"u")throw console.error("The following error is a bug in React Router; please open an issue! https://github.com/remix-run/react-router/issues/new/choose"),new Error(message)}function matchServerRoutes(manifest,dataRoutes,branches,pathname,basename){let matches=matchRoutesImpl(dataRoutes,pathname,basename??"/",!1,branches);return matches?matches.map(match=>{let route=manifest[match.route.id];return invariant3(route,`Route with id "${match.route.id}" not found in manifest.`),{params:match.params,pathname:match.pathname,route}}):null}async function callRouteHandler(handler,args,future){let result=await handler({request:future.v8_passThroughRequests?args.request:stripRoutesParam(stripIndexParam2(args.request)),url:args.url,params:args.params,context:args.context,pattern:args.pattern});if(isDataWithResponseInit(result)&&result.init&&result.init.status&&isRedirectStatusCode(result.init.status))throw new Response(null,result.init);return result}function stripIndexParam2(request){let url=new URL(request.url),indexValues=url.searchParams.getAll("index");url.searchParams.delete("index");let indexValuesToKeep=[];for(let indexValue of indexValues)indexValue&&indexValuesToKeep.push(indexValue);for(let toKeep of indexValuesToKeep)url.searchParams.append("index",toKeep);let init={method:request.method,body:request.body,headers:request.headers,signal:request.signal};return init.body&&(init.duplex="half"),new Request(url.href,init)}function stripRoutesParam(request){let url=new URL(request.url);url.searchParams.delete("_routes");let init={method:request.method,body:request.body,headers:request.headers,signal:request.signal};return init.body&&(init.duplex="half"),new Request(url.href,init)}var globalDevServerHooksKey="__reactRouterDevServerHooks";function setDevServerHooks(devServerHooks){globalThis[globalDevServerHooksKey]=devServerHooks}function getDevServerHooks(){return globalThis[globalDevServerHooksKey]}function getBuildTimeHeader(request,headerName){if(typeof process<"u")try{if(process.env.hasOwnProperty("IS_RR_BUILD_REQUEST")&&process.env.IS_RR_BUILD_REQUEST==="yes")return request.headers.get(headerName)}catch{}return null}function groupRoutesByParentId2(manifest){let routes={};return Object.values(manifest).forEach(route=>{if(route){let parentId=route.parentId||"";routes[parentId]||(routes[parentId]=[]),routes[parentId].push(route)}}),routes}function createStaticHandlerDataRoutes(manifest,future,parentId="",routesByParentId=groupRoutesByParentId2(manifest)){return(routesByParentId[parentId]||[]).map(route=>{let commonRoute={hasErrorBoundary:route.id==="root"||route.module.ErrorBoundary!=null,id:route.id,path:route.path,middleware:route.module.middleware,loader:route.module.loader?async args=>{let preRenderedData=getBuildTimeHeader(args.request,"X-React-Router-Prerender-Data");if(preRenderedData!=null){let encoded=preRenderedData&&decodeURI(preRenderedData);invariant3(encoded,"Missing prerendered data for route");let uint8array=new TextEncoder().encode(encoded),stream=new ReadableStream({start(controller){controller.enqueue(uint8array),controller.close()}}),data2=(await decodeViaTurboStream(stream,global)).value;if(data2&&SingleFetchRedirectSymbol in data2){let result=data2[SingleFetchRedirectSymbol],init={status:result.status};throw result.reload?redirectDocument(result.redirect,init):result.replace?replace(result.redirect,init):redirect(result.redirect,init)}else{invariant3(data2&&route.id in data2,"Unable to decode prerendered data");let result=data2[route.id];return invariant3("data"in result,"Unable to process prerendered data"),result.data}}return await callRouteHandler(route.module.loader,args,future)}:void 0,action:route.module.action?args=>callRouteHandler(route.module.action,args,future):void 0,handle:route.module.handle};return route.index?{index:!0,...commonRoute}:{caseSensitive:route.caseSensitive,children:createStaticHandlerDataRoutes(manifest,future,route.id,routesByParentId),...commonRoute}})}function createServerHandoffString(serverHandoff){return escapeHtml(JSON.stringify(serverHandoff))}function getDocumentHeaders(context,build){return getDocumentHeadersImpl(context,m=>{let route=build.routes[m.route.id];return invariant3(route,`Route with id "${m.route.id}" not found in build`),route.module.headers})}function getDocumentHeadersImpl(context,getRouteHeadersFn,_defaultHeaders){let boundaryIdx=context.errors?context.matches.findIndex(m=>context.errors[m.route.id]):-1,matches=boundaryIdx>=0?context.matches.slice(0,boundaryIdx+1):context.matches,errorHeaders;if(boundaryIdx>=0){let{actionHeaders,actionData,loaderHeaders,loaderData}=context;context.matches.slice(boundaryIdx).some(match=>{let id=match.route.id;return actionHeaders[id]&&(!actionData||!actionData.hasOwnProperty(id))?errorHeaders=actionHeaders[id]:loaderHeaders[id]&&!loaderData.hasOwnProperty(id)&&(errorHeaders=loaderHeaders[id]),errorHeaders!=null})}let defaultHeaders=new Headers(_defaultHeaders);return matches.reduce((parentHeaders,match,idx)=>{let{id}=match.route,loaderHeaders=context.loaderHeaders[id]||new Headers,actionHeaders=context.actionHeaders[id]||new Headers,includeErrorHeaders=errorHeaders!=null&&idx===matches.length-1,includeErrorCookies=includeErrorHeaders&&errorHeaders!==loaderHeaders&&errorHeaders!==actionHeaders,headersFn=getRouteHeadersFn(match);if(headersFn==null){let headers2=new Headers(parentHeaders);return includeErrorCookies&&prependCookies(errorHeaders,headers2),prependCookies(actionHeaders,headers2),prependCookies(loaderHeaders,headers2),headers2}let headers=new Headers(typeof headersFn=="function"?headersFn({loaderHeaders,parentHeaders,actionHeaders,errorHeaders:includeErrorHeaders?errorHeaders:void 0}):headersFn);return includeErrorCookies&&prependCookies(errorHeaders,headers),prependCookies(actionHeaders,headers),prependCookies(loaderHeaders,headers),prependCookies(parentHeaders,headers),headers},new Headers(defaultHeaders))}function prependCookies(parentHeaders,childHeaders){let parentSetCookieString=parentHeaders.get("Set-Cookie");if(parentSetCookieString){let cookies=(0,import_set_cookie_parser.splitCookiesString)(parentSetCookieString),childCookies=new Set(childHeaders.getSetCookie());cookies.forEach(cookie=>{childCookies.has(cookie)||childHeaders.append("Set-Cookie",cookie)})}}function throwIfPotentialCSRFAttack(request,allowedActionOrigins){let originHeader=request.headers.get("origin"),originDomain=null;try{originDomain=typeof originHeader=="string"&&originHeader!=="null"?new URL(originHeader).host:originHeader}catch{throw new Error("`origin` header is not a valid URL. Aborting the action.")}let host=new URL(request.url).host;if(originDomain&&originDomain!==host&&!isAllowedOrigin(originDomain,allowedActionOrigins))throw new Error("The `request.url` host does not match `origin` header from a forwarded action request. Aborting the action.")}function matchWildcardDomain(domain,pattern){let domainParts=domain.split("."),patternParts=pattern.split(".");if(patternParts.length<1||domainParts.length<patternParts.length)return!1;for(;patternParts.length;){let patternPart=patternParts.pop(),domainPart=domainParts.pop();switch(patternPart){case"":return!1;case"*":{if(domainPart)continue;return!1}case"**":return patternParts.length>0?!1:domainPart!==void 0;default:if(domainPart!==patternPart)return!1}}return domainParts.length===0}function isAllowedOrigin(originDomain,allowedActionOrigins=[]){return allowedActionOrigins.some(allowedOrigin=>allowedOrigin&&(allowedOrigin===originDomain||matchWildcardDomain(originDomain,allowedOrigin)))}function getNormalizedPath(request,basename,future){basename=basename||"/";let url=new URL(request.url),pathname=url.pathname;future?.v8_trailingSlashAwareDataRequests?pathname.endsWith("/_.data")?pathname=pathname.replace(/_\.data$/,""):pathname=pathname.replace(/\.data$/,""):(stripBasename(pathname,basename)==="/_root.data"?pathname=basename:pathname.endsWith(".data")&&(pathname=pathname.replace(/\.data$/,"")),stripBasename(pathname,basename)!=="/"&&pathname.endsWith("/")&&(pathname=pathname.slice(0,-1)));let searchParams=new URLSearchParams(url.search);searchParams.delete("_routes");let search=searchParams.toString();return search&&(search=`?${search}`),{pathname,search,hash:""}}var SERVER_NO_BODY_STATUS_CODES=new Set([...NO_BODY_STATUS_CODES,304]);async function singleFetchAction(build,serverMode,staticHandler,request,handlerUrl,loadContext,handleError){try{try{throwIfPotentialCSRFAttack(request,Array.isArray(build.allowedActionOrigins)?build.allowedActionOrigins:[])}catch{return handleQueryError(new Error("Bad Request"),400)}let handlerRequest=build.future.v8_passThroughRequests?request:new Request(handlerUrl,{method:request.method,body:request.body,headers:request.headers,signal:request.signal,...request.body?{duplex:"half"}:void 0}),result=await staticHandler.query(handlerRequest,{requestContext:loadContext,skipLoaderErrorBubbling:!0,skipRevalidation:!0,generateMiddlewareResponse:build.future.v8_middleware?async query=>{try{let innerResult=await query(handlerRequest);return handleQueryResult(innerResult)}catch(error){return handleQueryError(error)}}:void 0,normalizePath:r=>getNormalizedPath(r,build.basename,build.future)});return handleQueryResult(result)}catch(error){return handleQueryError(error)}function handleQueryResult(result){return isResponse(result)?result:staticContextToResponse(result)}function handleQueryError(error,status=500){return handleError(error),generateSingleFetchResponse(request,build,serverMode,{result:{error},headers:new Headers,status})}function staticContextToResponse(context){let headers=getDocumentHeaders(context,build);if(isRedirectStatusCode(context.statusCode)&&headers.has("Location"))return new Response(null,{status:context.statusCode,headers});context.errors&&(Object.values(context.errors).forEach(err=>{(!isRouteErrorResponse(err)||err.error)&&handleError(err)}),context.errors=sanitizeErrors(context.errors,serverMode));let singleFetchResult;return context.errors?singleFetchResult={error:Object.values(context.errors)[0]}:singleFetchResult={data:Object.values(context.actionData||{})[0]},generateSingleFetchResponse(request,build,serverMode,{result:singleFetchResult,headers,status:context.statusCode})}}async function singleFetchLoaders(build,serverMode,staticHandler,request,handlerUrl,loadContext,handleError){let routesParam=new URL(request.url).searchParams.get("_routes"),loadRouteIds=routesParam?new Set(routesParam.split(",")):null;try{let handlerRequest=build.future.v8_passThroughRequests?request:new Request(handlerUrl,{headers:request.headers,signal:request.signal}),result=await staticHandler.query(handlerRequest,{requestContext:loadContext,filterMatchesToLoad:m=>!loadRouteIds||loadRouteIds.has(m.route.id),skipLoaderErrorBubbling:!0,generateMiddlewareResponse:build.future.v8_middleware?async query=>{try{let innerResult=await query(handlerRequest);return handleQueryResult(innerResult)}catch(error){return handleQueryError(error)}}:void 0,normalizePath:r=>getNormalizedPath(r,build.basename,build.future)});return handleQueryResult(result)}catch(error){return handleQueryError(error)}function handleQueryResult(result){return isResponse(result)?result:staticContextToResponse(result)}function handleQueryError(error){return handleError(error),generateSingleFetchResponse(request,build,serverMode,{result:{error},headers:new Headers,status:500})}function staticContextToResponse(context){let headers=getDocumentHeaders(context,build);if(isRedirectStatusCode(context.statusCode)&&headers.has("Location"))return new Response(null,{status:context.statusCode,headers});context.errors&&(Object.values(context.errors).forEach(err=>{(!isRouteErrorResponse(err)||err.error)&&handleError(err)}),context.errors=sanitizeErrors(context.errors,serverMode));let results={},loadedMatches=new Set(context.matches.filter(m=>loadRouteIds?loadRouteIds.has(m.route.id):m.route.loader!=null).map(m=>m.route.id));if(context.errors)for(let[id,error]of Object.entries(context.errors))results[id]={error};for(let[id,data2]of Object.entries(context.loaderData))!(id in results)&&loadedMatches.has(id)&&(results[id]={data:data2});return generateSingleFetchResponse(request,build,serverMode,{result:results,headers,status:context.statusCode})}}function generateSingleFetchResponse(request,build,serverMode,{result,headers,status}){let resultHeaders=new Headers(headers);return resultHeaders.set("X-Remix-Response","yes"),SERVER_NO_BODY_STATUS_CODES.has(status)?new Response(null,{status,headers:resultHeaders}):(resultHeaders.set("Content-Type","text/x-script"),resultHeaders.delete("Content-Length"),new Response(encodeViaTurboStream(result,request.signal,build.entry.module.streamTimeout,serverMode),{status:status||200,headers:resultHeaders}))}function generateSingleFetchRedirectResponse(redirectResponse,request,build,serverMode){let redirect2=getSingleFetchRedirect(redirectResponse.status,redirectResponse.headers,build.basename),headers=new Headers(redirectResponse.headers);return headers.delete("Location"),headers.set("Content-Type","text/x-script"),generateSingleFetchResponse(request,build,serverMode,{result:request.method==="GET"?{[SingleFetchRedirectSymbol]:redirect2}:redirect2,headers,status:SINGLE_FETCH_REDIRECT_STATUS})}function getSingleFetchRedirect(status,headers,basename){let redirect2=headers.get("Location");return basename&&(redirect2=stripBasename(redirect2,basename)||redirect2),{redirect:redirect2,status,revalidate:headers.has("X-Remix-Revalidate")||headers.has("Set-Cookie"),reload:headers.has("X-Remix-Reload-Document"),replace:headers.has("X-Remix-Replace")}}function encodeViaTurboStream(data2,requestSignal,streamTimeout,serverMode){let controller=new AbortController,timeoutId=setTimeout(()=>{controller.abort(new Error("Server Timeout")),cleanupCallbacks()},typeof streamTimeout=="number"?streamTimeout:4950),abortControllerOnRequestAbort=()=>{controller.abort(requestSignal.reason),cleanupCallbacks()};requestSignal.addEventListener("abort",abortControllerOnRequestAbort);let cleanupCallbacks=()=>{clearTimeout(timeoutId),requestSignal.removeEventListener("abort",abortControllerOnRequestAbort)};return encode(data2,{signal:controller.signal,onComplete:cleanupCallbacks,plugins:[value=>{if(value instanceof Error){let{name,message,stack}=serverMode==="production"?sanitizeError(value,serverMode):value;return["SanitizedError",name,message,stack]}if(value instanceof ErrorResponseImpl){let{data:data3,status,statusText}=value;return["ErrorResponse",data3,status,statusText]}if(value&&typeof value=="object"&&SingleFetchRedirectSymbol in value)return["SingleFetchRedirect",value[SingleFetchRedirectSymbol]]}],postPlugins:[value=>{if(value&&typeof value=="object")return["SingleFetchClassInstance",Object.fromEntries(Object.entries(value))]},()=>["SingleFetchFallback"]]})}function derive(build,mode){let dataRoutes=createStaticHandlerDataRoutes(build.routes,build.future),serverMode=isServerMode(mode)?mode:"production",staticHandler=createStaticHandler(dataRoutes,{basename:build.basename,instrumentations:build.entry.module.instrumentations,future:build.future}),errorHandler=build.entry.module.handleError||((error,{request})=>{serverMode!=="test"&&!request.signal.aborted&&console.error(isRouteErrorResponse(error)&&error.error?error.error:error)}),requestHandler=async(request,initialContext)=>{let params={},loadContext,handleError=error=>{mode==="development"&&getDevServerHooks()?.processRequestError?.(error),errorHandler(error,{context:loadContext,params,request})};if(build.future.v8_middleware){if(initialContext&&!(initialContext instanceof RouterContextProvider)){let error=new Error("Invalid `context` value provided to `handleRequest`. When middleware is enabled you must return an instance of `RouterContextProvider` from your `getLoadContext` function.");return handleError(error),returnLastResortErrorResponse(error,serverMode)}loadContext=initialContext||new RouterContextProvider}else loadContext=initialContext||{};let requestUrl=new URL(request.url),normalizedPathname=getNormalizedPath(request,build.basename,build.future).pathname,isSpaMode=getBuildTimeHeader(request,"X-React-Router-SPA-Mode")==="yes";if(!build.ssr){let decodedPath=decodeURI(normalizedPathname);if(build.basename&&build.basename!=="/"){let strippedPath=stripBasename(decodedPath,build.basename);if(strippedPath==null)return errorHandler(new ErrorResponseImpl(404,"Not Found",`Refusing to prerender the \`${decodedPath}\` path because it does not start with the basename \`${build.basename}\``),{context:loadContext,params,request}),new Response("Not Found",{status:404,statusText:"Not Found"});decodedPath=strippedPath}if(build.prerender.length===0)isSpaMode=!0;else if(!build.prerender.includes(decodedPath.replace(/\/$/,""))&&!build.prerender.includes(decodedPath.replace(/[^/]$/,"/"))){if(requestUrl.pathname.endsWith(".data"))return errorHandler(new ErrorResponseImpl(404,"Not Found",`Refusing to SSR the path \`${decodedPath}\` because \`ssr:false\` is set and the path is not included in the \`prerender\` config, so in production the path will be a 404.`),{context:loadContext,params,request}),new Response("Not Found",{status:404,statusText:"Not Found"});isSpaMode=!0}}let manifestUrl=getManifestPath(build.routeDiscovery.manifestPath,build.basename);if(build.routeDiscovery.mode==="lazy"&&requestUrl.pathname===manifestUrl)try{return await handleManifestRequest(build,staticHandler.dataRoutes,staticHandler._internalRouteBranches,requestUrl)}catch(e){return handleError(e),new Response("Unknown Server Error",{status:500})}let matches=matchServerRoutes(build.routes,staticHandler.dataRoutes,staticHandler._internalRouteBranches,normalizedPathname,build.basename);matches&&matches.length>0&&Object.assign(params,matches[0].params);let response;if(requestUrl.pathname.endsWith(".data"))response=await handleSingleFetchRequest(serverMode,build,staticHandler,request,normalizedPathname,loadContext,handleError),isRedirectResponse(response)&&(response=generateSingleFetchRedirectResponse(response,request,build,serverMode)),build.entry.module.handleDataRequest&&(response=await build.entry.module.handleDataRequest(response,{context:loadContext,params:matches?matches[0].params:{},request}),isRedirectResponse(response)&&(response=generateSingleFetchRedirectResponse(response,request,build,serverMode)));else if(!isSpaMode&&matches&&matches[matches.length-1].route.module.default==null&&matches[matches.length-1].route.module.ErrorBoundary==null)response=await handleResourceRequest(serverMode,build,staticHandler,matches.slice(-1)[0].route.id,request,loadContext,handleError);else{let{pathname}=requestUrl,criticalCss;build.unstable_getCriticalCss?criticalCss=await build.unstable_getCriticalCss({pathname}):mode==="development"&&getDevServerHooks()?.getCriticalCss&&(criticalCss=await getDevServerHooks()?.getCriticalCss?.(pathname)),response=await handleDocumentRequest(serverMode,build,staticHandler,request,loadContext,handleError,isSpaMode,criticalCss)}return request.method==="HEAD"?new Response(null,{headers:response.headers,status:response.status,statusText:response.statusText}):response};return build.entry.module.instrumentations&&(requestHandler=instrumentHandler(requestHandler,build.entry.module.instrumentations.map(i=>i.handler).filter(Boolean))),{serverMode,staticHandler,errorHandler,requestHandler}}var createRequestHandler=(build,mode)=>{let _build,serverMode,staticHandler,errorHandler,_requestHandler;return async function(request,initialContext){if(_build=typeof build=="function"?await build():build,typeof build=="function"){let derived=derive(_build,mode);serverMode=derived.serverMode,staticHandler=derived.staticHandler,errorHandler=derived.errorHandler,_requestHandler=derived.requestHandler}else if(!serverMode||!staticHandler||!errorHandler||!_requestHandler){let derived=derive(_build,mode);serverMode=derived.serverMode,staticHandler=derived.staticHandler,errorHandler=derived.errorHandler,_requestHandler=derived.requestHandler}return _requestHandler(request,initialContext)}};async function handleManifestRequest(build,dataRoutes,branches,url){if(url.toString().length>URL_LIMIT)return new Response(null,{statusText:"Bad Request",status:400});if(build.assets.version!==url.searchParams.get("version"))return new Response(null,{status:204,headers:{"X-Remix-Reload-Document":"true"}});let patches={};if(url.searchParams.has("paths")){let pathParam=url.searchParams.get("paths")||"",paths=new Set(pathParam.split(",").filter(Boolean));for(let path of paths){path.startsWith("/")||(path=`/${path}`);let matches=matchServerRoutes(build.routes,dataRoutes,branches,path,build.basename);if(matches)for(let match of matches){let routeId=match.route.id,route=build.assets.routes[routeId];route&&(patches[routeId]=route)}}return Response.json(patches,{headers:{"Cache-Control":"public, max-age=31536000, immutable"}})}return new Response("Invalid Request",{status:400})}async function handleSingleFetchRequest(serverMode,build,staticHandler,request,normalizedPath,loadContext,handleError){let handlerUrl=new URL(request.url);return handlerUrl.pathname=normalizedPath,isMutationMethod(request.method)?await singleFetchAction(build,serverMode,staticHandler,request,handlerUrl,loadContext,handleError):await singleFetchLoaders(build,serverMode,staticHandler,request,handlerUrl,loadContext,handleError)}async function handleDocumentRequest(serverMode,build,staticHandler,request,loadContext,handleError,isSpaMode,criticalCss){try{if(isMutationMethod(request.method))try{throwIfPotentialCSRFAttack(request,Array.isArray(build.allowedActionOrigins)?build.allowedActionOrigins:[])}catch(e){return handleError(e),new Response("Bad Request",{status:400})}let result=await staticHandler.query(request,{requestContext:loadContext,generateMiddlewareResponse:build.future.v8_middleware?async query=>{try{let innerResult=await query(request);return isResponse(innerResult)||(innerResult=await renderHtml(innerResult,isSpaMode)),innerResult}catch(error){return handleError(error),new Response(null,{status:500})}}:void 0,normalizePath:r=>getNormalizedPath(r,build.basename,build.future)});return isResponse(result)||(result=await renderHtml(result,isSpaMode)),result}catch(error){return handleError(error),new Response(null,{status:500})}async function renderHtml(context,isSpaMode2){let headers=getDocumentHeaders(context,build);if(SERVER_NO_BODY_STATUS_CODES.has(context.statusCode))return new Response(null,{status:context.statusCode,headers});context.errors&&(Object.values(context.errors).forEach(err=>{(!isRouteErrorResponse(err)||err.error)&&handleError(err)}),context.errors=sanitizeErrors(context.errors,serverMode));let state={loaderData:context.loaderData,actionData:context.actionData,errors:context.errors},baseServerHandoff={basename:build.basename,future:build.future,routeDiscovery:build.routeDiscovery,ssr:build.ssr,isSpaMode:isSpaMode2},entryContext={manifest:build.assets,branches:staticHandler._internalRouteBranches,routeModules:createEntryRouteModules(build.routes),staticHandlerContext:context,criticalCss,serverHandoffString:createServerHandoffString({...baseServerHandoff,criticalCss}),serverHandoffStream:encodeViaTurboStream(state,request.signal,build.entry.module.streamTimeout,serverMode),renderMeta:{},future:build.future,ssr:build.ssr,routeDiscovery:build.routeDiscovery,isSpaMode:isSpaMode2,serializeError:err=>serializeError(err,serverMode)},handleDocumentRequestFunction=build.entry.module.default;try{return await handleDocumentRequestFunction(request,context.statusCode,headers,entryContext,loadContext)}catch(error){handleError(error);let errorForSecondRender=error;if(isResponse(error))try{let data2=await unwrapResponse(error);errorForSecondRender=new ErrorResponseImpl(error.status,error.statusText,data2)}catch{}context=getStaticContextFromError(staticHandler.dataRoutes,context,errorForSecondRender),context.errors&&(context.errors=sanitizeErrors(context.errors,serverMode));let state2={loaderData:context.loaderData,actionData:context.actionData,errors:context.errors};entryContext={...entryContext,staticHandlerContext:context,serverHandoffString:createServerHandoffString(baseServerHandoff),serverHandoffStream:encodeViaTurboStream(state2,request.signal,build.entry.module.streamTimeout,serverMode),renderMeta:{}};try{return await handleDocumentRequestFunction(request,context.statusCode,headers,entryContext,loadContext)}catch(error2){return handleError(error2),returnLastResortErrorResponse(error2,serverMode)}}}}async function handleResourceRequest(serverMode,build,staticHandler,routeId,request,loadContext,handleError){try{let result=await staticHandler.queryRoute(request,{routeId,requestContext:loadContext,generateMiddlewareResponse:build.future.v8_middleware?async queryRoute=>{try{let innerResult=await queryRoute(request);return handleQueryRouteResult(innerResult)}catch(error){return handleQueryRouteError(error)}}:void 0,normalizePath:r=>getNormalizedPath(r,build.basename,build.future)});return handleQueryRouteResult(result)}catch(error){return handleQueryRouteError(error)}function handleQueryRouteResult(result){return isResponse(result)?result:typeof result=="string"?new Response(result):Response.json(result)}function handleQueryRouteError(error){if(isResponse(error))return error;if(isRouteErrorResponse(error))return handleError(error),errorResponseToJson(error,serverMode);if(error instanceof Error&&error.message==="Expected a response from queryRoute"){let newError=new Error("Expected a Response to be returned from resource route handler");return handleError(newError),returnLastResortErrorResponse(newError,serverMode)}return handleError(error),returnLastResortErrorResponse(error,serverMode)}}function errorResponseToJson(errorResponse,serverMode){return Response.json(serializeError(errorResponse.error||new Error("Unexpected Server Error"),serverMode),{status:errorResponse.status,statusText:errorResponse.statusText})}function returnLastResortErrorResponse(error,serverMode){let message="Unexpected Server Error";return serverMode!=="production"&&(message+=`
|
|
35
|
+
|
|
36
|
+
${String(error)}`),new Response(message,{status:500,headers:{"Content-Type":"text/plain"}})}function unwrapResponse(response){let contentType=response.headers.get("Content-Type");return contentType&&/\bapplication\/json\b/.test(contentType)?response.body==null?null:response.json():response.text()}function flash(name){return`__flash_${name}__`}var createSession=(initialData={},id="")=>{let map=new Map(Object.entries(initialData));return{get id(){return id},get data(){return Object.fromEntries(map)},has(name){return map.has(name)||map.has(flash(name))},get(name){if(map.has(name))return map.get(name);let flashName=flash(name);if(map.has(flashName)){let value=map.get(flashName);return map.delete(flashName),value}},set(name,value){map.set(name,value)},flash(name,value){map.set(flash(name),value)},unset(name){map.delete(name)}}},isSession=object=>object!=null&&typeof object.id=="string"&&typeof object.data<"u"&&typeof object.has=="function"&&typeof object.get=="function"&&typeof object.set=="function"&&typeof object.flash=="function"&&typeof object.unset=="function";function createSessionStorage({cookie:cookieArg,createData,readData,updateData,deleteData}){let cookie=isCookie(cookieArg)?cookieArg:createCookie(cookieArg?.name||"__session",cookieArg);return warnOnceAboutSigningSessionCookie(cookie),{async getSession(cookieHeader,options){let id=cookieHeader&&await cookie.parse(cookieHeader,options),data2=id&&await readData(id);return createSession(data2||{},id||"")},async commitSession(session,options){let{id,data:data2}=session,expires=options?.maxAge!=null?new Date(Date.now()+options.maxAge*1e3):options?.expires!=null?options.expires:cookie.expires;return id?await updateData(id,data2,expires):id=await createData(data2,expires),cookie.serialize(id,options)},async destroySession(session,options){return await deleteData(session.id),cookie.serialize("",{...options,maxAge:void 0,expires:new Date(0)})}}}function warnOnceAboutSigningSessionCookie(cookie){warnOnce(cookie.isSigned,`The "${cookie.name}" cookie is not signed, but session cookies should be signed to prevent tampering on the client before they are sent back to the server. See https://reactrouter.com/explanation/sessions-and-cookies#signing-cookies for more information.`)}function createCookieSessionStorage({cookie:cookieArg}={}){let cookie=isCookie(cookieArg)?cookieArg:createCookie(cookieArg?.name||"__session",cookieArg);return warnOnceAboutSigningSessionCookie(cookie),{async getSession(cookieHeader,options){return createSession(cookieHeader&&await cookie.parse(cookieHeader,options)||{})},async commitSession(session,options){let serializedCookie=await cookie.serialize(session.data,options);if(serializedCookie.length>4096)throw new Error("Cookie length will exceed browser maximum. Length: "+serializedCookie.length);return serializedCookie},async destroySession(_session,options){return cookie.serialize("",{...options,maxAge:void 0,expires:new Date(0)})}}}function createMemorySessionStorage({cookie}={}){let map=new Map;return createSessionStorage({cookie,async createData(data2,expires){let id=Math.random().toString(36).substring(2,10);return map.set(id,{data:data2,expires}),id},async readData(id){if(map.has(id)){let{data:data2,expires}=map.get(id);if(!expires||expires>new Date)return data2;expires&&map.delete(id)}return null},async updateData(id,data2,expires){map.set(id,{data:data2,expires})},async deleteData(id){map.delete(id)}})}function href(path,...args){let params=args[0],result=trimTrailingSplat(path).replace(/\/:([\w-]+)(\?)?/g,(_,param,questionMark)=>{let isRequired=questionMark===void 0,value=params?.[param];if(isRequired&&value===void 0)throw new Error(`Path '${path}' requires param '${param}' but it was not provided`);return value===void 0?"":"/"+value});if(path.endsWith("*")){let value=params?.["*"];value!==void 0&&(result+="/"+value)}return result||"/"}function trimTrailingSplat(path){let i=path.length-1,char=path[i];if(char!=="*"&&char!=="/")return path;for(i--;i>=0&&path[i]==="/";i--);return path.slice(0,i+1)}var encoder2=new TextEncoder,trailer="</body></html>";function injectRSCPayload(rscStream){let decoder=new TextDecoder,resolveFlightDataPromise,flightDataPromise=new Promise(resolve=>resolveFlightDataPromise=resolve),startedRSC=!1,buffered=[],timeout=null;function flushBufferedChunks(controller){for(let chunk of buffered){let buf=decoder.decode(chunk,{stream:!0});buf.endsWith(trailer)&&(buf=buf.slice(0,-trailer.length)),controller.enqueue(encoder2.encode(buf))}buffered.length=0,timeout=null}return new TransformStream({transform(chunk,controller){buffered.push(chunk),!timeout&&(timeout=setTimeout(async()=>{flushBufferedChunks(controller),startedRSC||(startedRSC=!0,writeRSCStream(rscStream,controller).catch(err=>controller.error(err)).then(resolveFlightDataPromise))},0))},async flush(controller){await flightDataPromise,timeout&&(clearTimeout(timeout),flushBufferedChunks(controller)),controller.enqueue(encoder2.encode("</body></html>"))}})}async function writeRSCStream(rscStream,controller){let decoder=new TextDecoder("utf-8",{fatal:!0}),reader=rscStream.getReader();try{let read;for(;(read=await reader.read())&&!read.done;){let chunk=read.value;try{writeChunk(JSON.stringify(decoder.decode(chunk,{stream:!0})),controller)}catch{let base64=JSON.stringify(btoa(String.fromCodePoint(...chunk)));writeChunk(`Uint8Array.from(atob(${base64}), m => m.codePointAt(0))`,controller)}}}finally{reader.releaseLock()}let remaining=decoder.decode();remaining.length&&writeChunk(JSON.stringify(remaining),controller)}function writeChunk(chunk,controller){controller.enqueue(encoder2.encode(`<script>${escapeScript(`(self.__FLIGHT_DATA||=[]).push(${chunk})`)}<\/script>`))}function escapeScript(script){return script.replace(/<!--/g,"<\\!--").replace(/<\/(script)/gi,"</\\$1")}var RSCRouterGlobalErrorBoundary=class extends React32.Component{constructor(props){super(props),this.state={error:null,location:props.location}}static getDerivedStateFromError(error){return{error}}static getDerivedStateFromProps(props,state){return state.location!==props.location?{error:null,location:props.location}:{error:state.error,location:state.location}}render(){return this.state.error?React32.createElement(RSCDefaultRootErrorBoundaryImpl,{error:this.state.error,renderAppShell:!0}):this.props.children}};function ErrorWrapper({renderAppShell,title,children}){return renderAppShell?React32.createElement("html",{lang:"en"},React32.createElement("head",null,React32.createElement("meta",{charSet:"utf-8"}),React32.createElement("meta",{name:"viewport",content:"width=device-width,initial-scale=1,viewport-fit=cover"}),React32.createElement("title",null,title)),React32.createElement("body",null,React32.createElement("main",{style:{fontFamily:"system-ui, sans-serif",padding:"2rem"}},children))):children}function RSCDefaultRootErrorBoundaryImpl({error,renderAppShell}){console.error(error);let heyDeveloper=React32.createElement("script",{dangerouslySetInnerHTML:{__html:`
|
|
37
|
+
console.log(
|
|
38
|
+
"\u{1F4BF} Hey developer \u{1F44B}. You can provide a way better UX than this when your app throws errors. Check out https://reactrouter.com/how-to/error-boundary for more information."
|
|
39
|
+
);
|
|
40
|
+
`}});if(isRouteErrorResponse(error))return React32.createElement(ErrorWrapper,{renderAppShell,title:"Unhandled Thrown Response!"},React32.createElement("h1",{style:{fontSize:"24px"}},error.status," ",error.statusText),ENABLE_DEV_WARNINGS?heyDeveloper:null);let errorInstance;if(error instanceof Error)errorInstance=error;else{let errorString=error==null?"Unknown Error":typeof error=="object"&&"toString"in error?error.toString():JSON.stringify(error);errorInstance=new Error(errorString)}return React32.createElement(ErrorWrapper,{renderAppShell,title:"Application Error!"},React32.createElement("h1",{style:{fontSize:"24px"}},"Application Error"),React32.createElement("pre",{style:{padding:"2rem",background:"hsla(10, 50%, 50%, 0.1)",color:"red",overflow:"auto"}},errorInstance.stack),heyDeveloper)}function RSCDefaultRootErrorBoundary({hasRootLayout}){let error=useRouteError();if(hasRootLayout===void 0)throw new Error("Missing 'hasRootLayout' prop");return React32.createElement(RSCDefaultRootErrorBoundaryImpl,{renderAppShell:!hasRootLayout,error})}function createRSCRouteModules(payload){let routeModules={};for(let match of payload.matches)populateRSCRouteModules(routeModules,match);return routeModules}function populateRSCRouteModules(routeModules,matches){matches=Array.isArray(matches)?matches:[matches];for(let match of matches)routeModules[match.id]={links:match.links,meta:match.meta,default:noopComponent}}var noopComponent=()=>null,defaultManifestPath="/__manifest",REACT_USE="use",useImpl=React42[REACT_USE];function useSafe(promise){if(useImpl)return useImpl(promise);throw new Error("React Router v7 requires React 19+ for RSC features.")}async function routeRSCServerRequest({request,serverResponse,createFromReadableStream,renderHTML,hydrate:hydrate2=!0}){let url=new URL(request.url);if(isReactServerRequest(url)||isManifestRequest(url)||request.headers.has("rsc-action-id")||serverResponse.headers.get("React-Router-Resource")==="true")return serverResponse;if(!serverResponse.body)throw new Error("Missing body in server response");let detectRedirectResponse=serverResponse.clone(),serverResponseB=null;hydrate2&&(serverResponseB=serverResponse.clone());let body=serverResponse.body,buffer,streamControllers=[],createStream=()=>buffer?new ReadableStream({start(controller){buffer.forEach(chunk=>controller.enqueue(chunk)),streamControllers.push(controller)}}):(buffer=[],body.pipeThrough(new TransformStream({transform(chunk,controller){buffer.push(chunk),controller.enqueue(chunk),streamControllers.forEach(c=>c.enqueue(chunk))},flush(){streamControllers.forEach(c=>c.close()),streamControllers=[]}}))),deepestRenderedBoundaryId=null,getPayload=()=>{let payloadPromise=Promise.resolve(createFromReadableStream(createStream()));return Object.defineProperties(payloadPromise,{_deepestRenderedBoundaryId:{get(){return deepestRenderedBoundaryId},set(boundaryId){deepestRenderedBoundaryId=boundaryId}},formState:{get(){return payloadPromise.then(payload=>payload.type==="render"?payload.formState:void 0)}}})},renderRedirect,renderError;try{if(!detectRedirectResponse.body)throw new Error("Failed to clone server response");let payload=await createFromReadableStream(detectRedirectResponse.body);if(serverResponse.status===SINGLE_FETCH_REDIRECT_STATUS&&payload.type==="redirect"){if(hasInvalidProtocol(payload.location))throw new Error("Invalid redirect location");let headers2=new Headers(serverResponse.headers);return headers2.delete("Content-Encoding"),headers2.delete("Content-Length"),headers2.delete("Content-Type"),headers2.delete("X-Remix-Response"),headers2.set("Location",payload.location),new Response(serverResponseB?.body||"",{headers:headers2,status:payload.status,statusText:serverResponse.statusText})}let reactHeaders=new Headers,status=serverResponse.status,statusText=serverResponse.statusText,html=await renderHTML(getPayload,{onError(error){if(typeof error=="object"&&error&&"digest"in error&&typeof error.digest=="string"){if(renderRedirect=decodeRedirectErrorDigest(error.digest),renderRedirect)return error.digest;let routeErrorResponse=decodeRouteErrorResponseDigest(error.digest);if(routeErrorResponse)return renderError=routeErrorResponse,status=routeErrorResponse.status,statusText=routeErrorResponse.statusText,error.digest}},onHeaders(headers2){for(let[key,value]of headers2)reactHeaders.append(key,value)}}),headers=new Headers(reactHeaders);for(let[key,value]of serverResponse.headers)headers.append(key,value);if(headers.set("Content-Type","text/html; charset=utf-8"),renderRedirect){if(hasInvalidProtocol(renderRedirect.location))throw new Error("Invalid redirect location");return headers.set("Location",renderRedirect.location),new Response(html,{status:renderRedirect.status,headers})}let redirectTransform=new TransformStream({flush(controller){if(renderRedirect){if(hasInvalidProtocol(renderRedirect.location))return;controller.enqueue(new TextEncoder().encode(`<meta http-equiv="refresh" content="0;url=${escapeHtml(renderRedirect.location)}"/>`))}}});if(!hydrate2)return new Response(html.pipeThrough(redirectTransform),{status,statusText,headers});if(!serverResponseB?.body)throw new Error("Failed to clone server response");let body2=html.pipeThrough(injectRSCPayload(serverResponseB.body)).pipeThrough(redirectTransform);return new Response(body2,{status,statusText,headers})}catch(error){if(error instanceof Response)return error;if(renderRedirect){if(hasInvalidProtocol(renderRedirect.location))throw new Error("Invalid redirect location");return new Response(`Redirect: ${renderRedirect.location}`,{status:renderRedirect.status,headers:{Location:renderRedirect.location}})}try{let normalizedError=renderError??error,[status,statusText]=isRouteErrorResponse(normalizedError)?[normalizedError.status,normalizedError.statusText]:[500,""],retryRedirect,reactHeaders=new Headers,html=await renderHTML(()=>{let payloadPromise=Promise.resolve(createFromReadableStream(createStream())).then(payload=>Object.assign(payload,{status,errors:deepestRenderedBoundaryId?{[deepestRenderedBoundaryId]:normalizedError}:{}}));return Object.defineProperties(payloadPromise,{_deepestRenderedBoundaryId:{get(){return deepestRenderedBoundaryId},set(boundaryId){deepestRenderedBoundaryId=boundaryId}},formState:{get(){return payloadPromise.then(payload=>payload.type==="render"?payload.formState:void 0)}}})},{onError(error2){if(typeof error2=="object"&&error2&&"digest"in error2&&typeof error2.digest=="string"){if(retryRedirect=decodeRedirectErrorDigest(error2.digest),retryRedirect)return error2.digest;let routeErrorResponse=decodeRouteErrorResponseDigest(error2.digest);if(routeErrorResponse)return status=routeErrorResponse.status,statusText=routeErrorResponse.statusText,error2.digest}},onHeaders(headers2){for(let[key,value]of headers2)reactHeaders.append(key,value)}}),headers=new Headers(reactHeaders);for(let[key,value]of serverResponse.headers)headers.append(key,value);if(headers.set("Content-Type","text/html; charset=utf-8"),retryRedirect){if(hasInvalidProtocol(retryRedirect.location))throw new Error("Invalid redirect location");return headers.set("Location",retryRedirect.location),new Response(html,{status:retryRedirect.status,headers})}let retryRedirectTransform=new TransformStream({flush(controller){if(retryRedirect){if(hasInvalidProtocol(retryRedirect.location))return;controller.enqueue(new TextEncoder().encode(`<meta http-equiv="refresh" content="0;url=${escapeHtml(retryRedirect.location)}"/>`))}}});if(!hydrate2)return new Response(html.pipeThrough(retryRedirectTransform),{status,statusText,headers});if(!serverResponseB?.body)throw new Error("Failed to clone server response");let body2=html.pipeThrough(injectRSCPayload(serverResponseB.body)).pipeThrough(retryRedirectTransform);return new Response(body2,{status,statusText,headers})}catch{}throw error}}function RSCStaticRouter({getPayload}){let decoded=getPayload(),payload=useSafe(decoded);if(payload.type==="redirect")throw hasInvalidProtocol(payload.location)?new Error("Invalid redirect location"):new Response(null,{status:payload.status,headers:{Location:payload.location}});if(payload.type!=="render")return null;let patchedLoaderData={...payload.loaderData};for(let match of payload.matches)shouldHydrateRouteLoader(match.id,match.clientLoader,match.hasLoader,!1)&&(match.hydrateFallbackElement||!match.hasLoader)&&delete patchedLoaderData[match.id];let context={get _deepestRenderedBoundaryId(){return decoded._deepestRenderedBoundaryId??null},set _deepestRenderedBoundaryId(boundaryId){decoded._deepestRenderedBoundaryId=boundaryId},actionData:payload.actionData,actionHeaders:{},basename:payload.basename,errors:payload.errors,loaderData:patchedLoaderData,loaderHeaders:{},location:payload.location,statusCode:200,matches:payload.matches.map(match=>({params:match.params,pathname:match.pathname,pathnameBase:match.pathnameBase,route:{id:match.id,action:match.hasAction||!!match.clientAction,handle:match.handle,hasErrorBoundary:match.hasErrorBoundary,loader:match.hasLoader||!!match.clientLoader,index:match.index,path:match.path,shouldRevalidate:match.shouldRevalidate}}))},router=createStaticRouter(payload.matches.reduceRight((previous,match)=>{let route={id:match.id,action:match.hasAction||!!match.clientAction,element:match.element,errorElement:match.errorElement,handle:match.handle,hasErrorBoundary:!!match.errorElement,hydrateFallbackElement:match.hydrateFallbackElement,index:match.index,loader:match.hasLoader||!!match.clientLoader,path:match.path,shouldRevalidate:match.shouldRevalidate};return previous.length>0&&(route.children=previous),[route]},[]),context),frameworkContext={future:{v8_middleware:!1,v8_trailingSlashAwareDataRequests:!0,v8_passThroughRequests:!0},isSpaMode:!1,ssr:!0,criticalCss:"",manifest:{routes:{},version:"1",url:"",entry:{module:"",imports:[]}},routeDiscovery:payload.routeDiscovery.mode==="initial"?{mode:"initial",manifestPath:defaultManifestPath}:{mode:"lazy",manifestPath:payload.routeDiscovery.manifestPath||defaultManifestPath},routeModules:createRSCRouteModules(payload)};return React42.createElement(RSCRouterContext.Provider,{value:!0},React42.createElement(RSCRouterGlobalErrorBoundary,{location:payload.location},React42.createElement(FrameworkContext.Provider,{value:frameworkContext},React42.createElement(StaticRouterProvider,{context,router,hydrate:!1,nonce:payload.nonce}))))}function isReactServerRequest(url){return url.pathname.endsWith(".rsc")}function isManifestRequest(url){return url.pathname.endsWith(".manifest")}function getHydrationData({state,routes,getRouteInfo,location,basename,isSpaMode}){let hydrationData={...state,loaderData:{...state.loaderData}},initialMatches=matchRoutes(routes,location,basename);if(initialMatches)for(let match of initialMatches){let routeId=match.route.id,routeInfo=getRouteInfo(routeId);shouldHydrateRouteLoader(routeId,routeInfo.clientLoader,routeInfo.hasLoader,isSpaMode)&&(routeInfo.hasHydrateFallback||!routeInfo.hasLoader)?delete hydrationData.loaderData[routeId]:routeInfo.hasLoader||(hydrationData.loaderData[routeId]=null)}return hydrationData}var ojm_shim_react_router_default=void 0??development_exports;export{Await,BrowserRouter,Form,HashRouter,IDLE_BLOCKER,IDLE_FETCHER,IDLE_NAVIGATION,Link,Links,MemoryRouter,Meta,NavLink,Navigate,Action as NavigationType,Outlet,PrefetchPageLinks,Route,Router,RouterContextProvider,RouterProvider,Routes,Scripts,ScrollRestoration,ServerRouter,StaticRouter,StaticRouterProvider,AwaitContextProvider as UNSAFE_AwaitContextProvider,DataRouterContext as UNSAFE_DataRouterContext,DataRouterStateContext as UNSAFE_DataRouterStateContext,ErrorResponseImpl as UNSAFE_ErrorResponseImpl,FetchersContext as UNSAFE_FetchersContext,FrameworkContext as UNSAFE_FrameworkContext,LocationContext as UNSAFE_LocationContext,NavigationContext as UNSAFE_NavigationContext,RSCDefaultRootErrorBoundary as UNSAFE_RSCDefaultRootErrorBoundary,RemixErrorBoundary as UNSAFE_RemixErrorBoundary,RouteContext as UNSAFE_RouteContext,ServerMode as UNSAFE_ServerMode,SingleFetchRedirectSymbol as UNSAFE_SingleFetchRedirectSymbol,ViewTransitionContext as UNSAFE_ViewTransitionContext,WithComponentProps as UNSAFE_WithComponentProps,WithErrorBoundaryProps as UNSAFE_WithErrorBoundaryProps,WithHydrateFallbackProps as UNSAFE_WithHydrateFallbackProps,createBrowserHistory as UNSAFE_createBrowserHistory,createClientRoutes as UNSAFE_createClientRoutes,createClientRoutesWithHMRRevalidationOptOut as UNSAFE_createClientRoutesWithHMRRevalidationOptOut,createHashHistory as UNSAFE_createHashHistory,createMemoryHistory as UNSAFE_createMemoryHistory,createRouter as UNSAFE_createRouter,decodeViaTurboStream as UNSAFE_decodeViaTurboStream,getHydrationData as UNSAFE_getHydrationData,getPatchRoutesOnNavigationFunction as UNSAFE_getPatchRoutesOnNavigationFunction,getTurboStreamSingleFetchDataStrategy as UNSAFE_getTurboStreamSingleFetchDataStrategy,hydrationRouteProperties as UNSAFE_hydrationRouteProperties,invariant as UNSAFE_invariant,mapRouteProperties as UNSAFE_mapRouteProperties,shouldHydrateRouteLoader as UNSAFE_shouldHydrateRouteLoader,useFogOFWarDiscovery as UNSAFE_useFogOFWarDiscovery,useScrollRestoration as UNSAFE_useScrollRestoration,withComponentProps as UNSAFE_withComponentProps,withErrorBoundaryProps as UNSAFE_withErrorBoundaryProps,withHydrateFallbackProps as UNSAFE_withHydrateFallbackProps,createBrowserRouter,createContext4 as createContext,createCookie,createCookieSessionStorage,createHashRouter,createMemoryRouter,createMemorySessionStorage,createPath,createRequestHandler,createRoutesFromChildren,createRoutesFromElements,createRoutesStub,createSearchParams,createSession,createSessionStorage,createStaticHandler2 as createStaticHandler,createStaticRouter,data,ojm_shim_react_router_default as default,generatePath,href,isCookie,isRouteErrorResponse,isSession,matchPath,matchRoutes,parsePath,redirect,redirectDocument,renderMatches,replace,resolvePath,HistoryRouter as unstable_HistoryRouter,RSCStaticRouter as unstable_RSCStaticRouter,routeRSCServerRequest as unstable_routeRSCServerRequest,setDevServerHooks as unstable_setDevServerHooks,usePrompt as unstable_usePrompt,useRoute as unstable_useRoute,useRouterState as unstable_useRouterState,useActionData,useAsyncError,useAsyncValue,useBeforeUnload,useBlocker,useFetcher,useFetchers,useFormAction,useHref,useInRouterContext,useLinkClickHandler,useLoaderData,useLocation,useMatch,useMatches,useNavigate,useNavigation,useNavigationType,useOutlet,useOutletContext,useParams,useResolvedPath,useRevalidator,useRouteError,useRouteLoaderData,useRoutes,useSearchParams,useSubmit,useViewTransitionState};
|
|
41
|
+
/*! Bundled license information:
|
|
42
|
+
|
|
43
|
+
react-router/dist/development/chunk-62JRHF6Z.mjs:
|
|
44
|
+
react-router/dist/development/chunk-ZA36QIGN.mjs:
|
|
45
|
+
react-router/dist/development/index.mjs:
|
|
46
|
+
(**
|
|
47
|
+
* react-router v7.18.2
|
|
48
|
+
*
|
|
49
|
+
* Copyright (c) Remix Software Inc.
|
|
50
|
+
*
|
|
51
|
+
* This source code is licensed under the MIT license found in the
|
|
52
|
+
* LICENSE.md file in the root directory of this source tree.
|
|
53
|
+
*
|
|
54
|
+
* @license MIT
|
|
55
|
+
*)
|
|
56
|
+
*/
|