@epic-web/workshop-app 4.23.0 → 4.23.2
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/build/client/assets/{_-Cv8HqtE8.js → _-BtebIQXw.js} +2 -2
- package/build/client/assets/{_-Cv8HqtE8.js.map → _-BtebIQXw.js.map} +1 -1
- package/build/client/assets/{_exerciseNumber-D2tXimAK.js → _exerciseNumber-DPHRlskl.js} +2 -2
- package/build/client/assets/{_exerciseNumber-D2tXimAK.js.map → _exerciseNumber-DPHRlskl.js.map} +1 -1
- package/build/client/assets/{_exerciseNumber_._stepNumber-CquNe5XV.js → _exerciseNumber_._stepNumber-D1CLZqv3.js} +2 -2
- package/build/client/assets/{_exerciseNumber_._stepNumber-CquNe5XV.js.map → _exerciseNumber_._stepNumber-D1CLZqv3.js.map} +1 -1
- package/build/client/assets/{_exerciseNumber_.finished-B-sqDk3j.js → _exerciseNumber_.finished-BtU0LxSx.js} +2 -2
- package/build/client/assets/{_exerciseNumber_.finished-B-sqDk3j.js.map → _exerciseNumber_.finished-BtU0LxSx.js.map} +1 -1
- package/build/client/assets/{_layout-CRkVkufr.js → _layout-BUs3av-e.js} +2 -2
- package/build/client/assets/{_layout-CRkVkufr.js.map → _layout-BUs3av-e.js.map} +1 -1
- package/build/client/assets/{_layout-Ciyqvptc.js → _layout-D2SdN9lJ.js} +2 -2
- package/build/client/assets/{_layout-Ciyqvptc.js.map → _layout-D2SdN9lJ.js.map} +1 -1
- package/build/client/assets/_layout-D9AYVDws.js +2 -0
- package/build/client/assets/_layout-D9AYVDws.js.map +1 -0
- package/build/client/assets/{_layout-C9AozQxr.js → _layout-DN2lWivk.js} +2 -2
- package/build/client/assets/{_layout-C9AozQxr.js.map → _layout-DN2lWivk.js.map} +1 -1
- package/build/client/assets/{accordion-B-gQ5Whz.js → accordion-BTylpyuo.js} +2 -2
- package/build/client/assets/{accordion-B-gQ5Whz.js.map → accordion-BTylpyuo.js.map} +1 -1
- package/build/client/assets/{account-B-3k5HDM.js → account-Boc55rcF.js} +2 -2
- package/build/client/assets/{account-B-3k5HDM.js.map → account-Boc55rcF.js.map} +1 -1
- package/build/client/assets/app-D21SF96g.js +2 -0
- package/build/client/assets/{app-DAWCzuDw.js.map → app-D21SF96g.js.map} +1 -1
- package/build/client/assets/{button-DataaIpW.js → button-D3GGLffs.js} +2 -2
- package/build/client/assets/{button-DataaIpW.js.map → button-D3GGLffs.js.map} +1 -1
- package/build/client/assets/{components-BQB6wEvm.js → components-CME-nGId.js} +18 -18
- package/build/client/assets/{components-BQB6wEvm.js.map → components-CME-nGId.js.map} +1 -1
- package/build/client/assets/{diff-BWSOt7tL.js → diff-Dlhnb9s0.js} +2 -2
- package/build/client/assets/{diff-BWSOt7tL.js.map → diff-Dlhnb9s0.js.map} +1 -1
- package/build/client/assets/diff-_Yp5qaGd.js +2 -0
- package/build/client/assets/{diff-JWdZCc2F.js.map → diff-_Yp5qaGd.js.map} +1 -1
- package/build/client/assets/discord-BZFQqiA1.js +2 -0
- package/build/client/assets/discord-BZFQqiA1.js.map +1 -0
- package/build/client/assets/{discord-BfUTLoVF.js → discord-ClGJ4reK.js} +2 -2
- package/build/client/assets/{discord-BfUTLoVF.js.map → discord-ClGJ4reK.js.map} +1 -1
- package/build/client/assets/{entry.client-7AjQ7fYK.js → entry.client-3M2p-8I3.js} +9 -9
- package/build/client/assets/{entry.client-7AjQ7fYK.js.map → entry.client-3M2p-8I3.js.map} +1 -1
- package/build/client/assets/{epic-video-D8tfMIv8.js → epic-video-BDMU5eQx.js} +2 -2
- package/build/client/assets/{epic-video-D8tfMIv8.js.map → epic-video-BDMU5eQx.js.map} +1 -1
- package/build/client/assets/{error-boundary-Bx1mDmB-.js → error-boundary-w-YmME9H.js} +2 -2
- package/build/client/assets/{error-boundary-Bx1mDmB-.js.map → error-boundary-w-YmME9H.js.map} +1 -1
- package/build/client/assets/{finished-DvXH6L-Q.js → finished-DpVgSUHh.js} +2 -2
- package/build/client/assets/{finished-DvXH6L-Q.js.map → finished-DpVgSUHh.js.map} +1 -1
- package/build/client/assets/index-1cKOJFpX.js +37 -0
- package/build/client/assets/{index-2WpY3jqc.js.map → index-1cKOJFpX.js.map} +1 -1
- package/build/client/assets/{index-DmASob5Y.js → index-4mfbmNml.js} +2 -2
- package/build/client/assets/{index-DmASob5Y.js.map → index-4mfbmNml.js.map} +1 -1
- package/build/client/assets/{index-Bt0Fs1uZ.js → index-B-hHvmeV.js} +2 -2
- package/build/client/assets/{index-Bt0Fs1uZ.js.map → index-B-hHvmeV.js.map} +1 -1
- package/build/client/assets/{index-kXas9qNh.js → index-BMMmOqxO.js} +2 -2
- package/build/client/assets/{index-kXas9qNh.js.map → index-BMMmOqxO.js.map} +1 -1
- package/build/client/assets/{index-bM_TIo_p.js → index-Cr2THg3v.js} +2 -2
- package/build/client/assets/{index-bM_TIo_p.js.map → index-Cr2THg3v.js.map} +1 -1
- package/build/client/assets/{index-aPMCrDDW.js → index-CrCyg109.js} +2 -2
- package/build/client/assets/{index-aPMCrDDW.js.map → index-CrCyg109.js.map} +1 -1
- package/build/client/assets/{index-DGsreVfh.js → index-Dx5GmdYq.js} +2 -2
- package/build/client/assets/{index-DGsreVfh.js.map → index-Dx5GmdYq.js.map} +1 -1
- package/build/client/assets/{index-TIHEbU65.js → index-lG6dAghh.js} +2 -2
- package/build/client/assets/{index-TIHEbU65.js.map → index-lG6dAghh.js.map} +1 -1
- package/build/client/assets/{loading-DXKqMYHW.js → loading-CYX0lUnA.js} +2 -2
- package/build/client/assets/{loading-DXKqMYHW.js.map → loading-CYX0lUnA.js.map} +1 -1
- package/build/client/assets/{login-WXKB-OYe.js → login-BfJnysK5.js} +2 -2
- package/build/client/assets/{login-WXKB-OYe.js.map → login-BfJnysK5.js.map} +1 -1
- package/build/client/assets/{manifest-5edda375.js → manifest-342e7776.js} +1 -1
- package/build/client/assets/mdx-DGrucPXJ.js +2 -0
- package/build/client/assets/{mdx-D0cZm8uP.js.map → mdx-DGrucPXJ.js.map} +1 -1
- package/build/client/assets/misc-BvHlNnqL.js +2 -0
- package/build/client/assets/misc-BvHlNnqL.js.map +1 -0
- package/build/client/assets/{nav-chevrons-BB1CK34B.js → nav-chevrons-DNlM2M58.js} +2 -2
- package/build/client/assets/{nav-chevrons-BB1CK34B.js.map → nav-chevrons-DNlM2M58.js.map} +1 -1
- package/build/client/assets/{onboarding-CK8-hFDT.js → onboarding-C9YKrBRk.js} +2 -2
- package/build/client/assets/{onboarding-CK8-hFDT.js.map → onboarding-C9YKrBRk.js.map} +1 -1
- package/build/client/assets/{pe-BmTNRcy_.js → pe-CUZaIcdt.js} +2 -2
- package/build/client/assets/{pe-BmTNRcy_.js.map → pe-CUZaIcdt.js.map} +1 -1
- package/build/client/assets/{presence-CmTnJPJh.js → presence-Cr--lRCr.js} +2 -2
- package/build/client/assets/{presence-CmTnJPJh.js.map → presence-Cr--lRCr.js.map} +1 -1
- package/build/client/assets/{preview-BbJZ7UrX.js → preview-cQAZ1sWw.js} +2 -2
- package/build/client/assets/{preview-BbJZ7UrX.js.map → preview-cQAZ1sWw.js.map} +1 -1
- package/build/client/assets/{product-Bi2uble-.js → product-BUD74Itn.js} +2 -2
- package/build/client/assets/{product-Bi2uble-.js.map → product-BUD74Itn.js.map} +1 -1
- package/build/client/assets/{progress-fFpCuCyE.js → progress-Dn5gs-vs.js} +2 -2
- package/build/client/assets/{progress-fFpCuCyE.js.map → progress-Dn5gs-vs.js.map} +1 -1
- package/build/client/assets/{progress-bar-HYCoNAkN.js → progress-bar-C7Wl3UWv.js} +2 -2
- package/build/client/assets/{progress-bar-HYCoNAkN.js.map → progress-bar-C7Wl3UWv.js.map} +1 -1
- package/build/client/assets/{request-info-D6MPpnDd.js → request-info-CEhUGODY.js} +2 -2
- package/build/client/assets/{request-info-D6MPpnDd.js.map → request-info-CEhUGODY.js.map} +1 -1
- package/build/client/assets/{root-CY8QRU4e.js → root-BO8-KppB.js} +3 -3
- package/build/client/assets/{root-CY8QRU4e.js.map → root-BO8-KppB.js.map} +1 -1
- package/build/client/assets/{set-playground-8-BH15HT.js → set-playground-CCm119Nm.js} +2 -2
- package/build/client/assets/{set-playground-8-BH15HT.js.map → set-playground-CCm119Nm.js.map} +1 -1
- package/build/client/assets/{support-l4EbxG8X.js → support-hcqGIpir.js} +2 -2
- package/build/client/assets/{support-l4EbxG8X.js.map → support-hcqGIpir.js.map} +1 -1
- package/build/client/assets/test-CPv5Bgs_.js +2 -0
- package/build/client/assets/{test--z-MS4Cz.js.map → test-CPv5Bgs_.js.map} +1 -1
- package/build/client/assets/{tests-CNclXTWp.js → tests-DCK6NqSg.js} +2 -2
- package/build/client/assets/{tests-CNclXTWp.js.map → tests-DCK6NqSg.js.map} +1 -1
- package/build/client/assets/{tooltip-Blm9zu1K.js → tooltip-fa2eC7LQ.js} +2 -2
- package/build/client/assets/{tooltip-Blm9zu1K.js.map → tooltip-fa2eC7LQ.js.map} +1 -1
- package/build/client/assets/{use-event-source-C81lzj_8.js → use-event-source-A_0lEOPX.js} +2 -2
- package/build/client/assets/{use-event-source-C81lzj_8.js.map → use-event-source-A_0lEOPX.js.map} +1 -1
- package/build/client/assets/{user-2ca9K5af.js → user-D6tTg1yS.js} +2 -2
- package/build/client/assets/{user-2ca9K5af.js.map → user-D6tTg1yS.js.map} +1 -1
- package/build/client/assets/{workshop-config-COvWTBns.js → workshop-config-CL4F08kr.js} +2 -2
- package/build/client/assets/{workshop-config-COvWTBns.js.map → workshop-config-CL4F08kr.js.map} +1 -1
- package/build/server/index.js +32 -26
- package/build/server/index.js.map +1 -1
- package/dist/server/index.js +5 -5
- package/package.json +3 -3
- package/build/client/assets/_layout-C7yUCsjZ.js +0 -2
- package/build/client/assets/_layout-C7yUCsjZ.js.map +0 -1
- package/build/client/assets/app-DAWCzuDw.js +0 -2
- package/build/client/assets/diff-JWdZCc2F.js +0 -2
- package/build/client/assets/discord-BqGuuhG3.js +0 -2
- package/build/client/assets/discord-BqGuuhG3.js.map +0 -1
- package/build/client/assets/index-2WpY3jqc.js +0 -37
- package/build/client/assets/mdx-D0cZm8uP.js +0 -2
- package/build/client/assets/misc-LevbAJZ6.js +0 -2
- package/build/client/assets/misc-LevbAJZ6.js.map +0 -1
- package/build/client/assets/test--z-MS4Cz.js +0 -2
- /package/build/client/{icons.svg → assets/icons-CnZJXICl.svg} +0 -0
package/dist/server/index.js
CHANGED
|
@@ -41,6 +41,11 @@ void getPresentUsers();
|
|
|
41
41
|
const app = express();
|
|
42
42
|
app.use(compression());
|
|
43
43
|
app.disable("x-powered-by");
|
|
44
|
+
app.use(
|
|
45
|
+
express.static(path.join(workshopRoot, "public"), {
|
|
46
|
+
maxAge: isProd ? "1h" : 0
|
|
47
|
+
})
|
|
48
|
+
);
|
|
44
49
|
if (viteDevServer) {
|
|
45
50
|
app.use(viteDevServer.middlewares);
|
|
46
51
|
} else {
|
|
@@ -50,11 +55,6 @@ if (viteDevServer) {
|
|
|
50
55
|
})
|
|
51
56
|
);
|
|
52
57
|
}
|
|
53
|
-
app.use(
|
|
54
|
-
express.static(path.join(workshopRoot, "public"), {
|
|
55
|
-
maxAge: isProd ? "1h" : 0
|
|
56
|
-
})
|
|
57
|
-
);
|
|
58
58
|
if (process.env.NODE_ENV !== "production" && !isPublished || isDeployed) {
|
|
59
59
|
morgan.token("url", (req) => decodeURIComponent(req.url ?? ""));
|
|
60
60
|
app.use(morgan("tiny"));
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@epic-web/workshop-app",
|
|
3
|
-
"version": "4.23.
|
|
3
|
+
"version": "4.23.2",
|
|
4
4
|
"sideEffects": false,
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
@@ -44,8 +44,8 @@
|
|
|
44
44
|
"@epic-web/invariant": "^1.0.0",
|
|
45
45
|
"@epic-web/remember": "^1.0.2",
|
|
46
46
|
"@epic-web/restore-scroll": "^1.1.1",
|
|
47
|
-
"@epic-web/workshop-presence": "4.23.
|
|
48
|
-
"@epic-web/workshop-utils": "4.23.
|
|
47
|
+
"@epic-web/workshop-presence": "4.23.2",
|
|
48
|
+
"@epic-web/workshop-utils": "4.23.2",
|
|
49
49
|
"@mdx-js/mdx": "^3.0.1",
|
|
50
50
|
"@mux/mux-player-react": "^2.6.0",
|
|
51
51
|
"@nasa-gcn/remix-seo": "^2.0.1",
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{j as e,r as p,O as Z}from"./index-2WpY3jqc.js";import{E as J}from"./index-DGsreVfh.js";import{G as X}from"./error-boundary-Bx1mDmB-.js";import{N as ee}from"./nav-chevrons-BB1CK34B.js";import{M as re,L as b,E as te}from"./mdx-D0cZm8uP.js";import{P as ne}from"./progress-fFpCuCyE.js";import{S as D}from"./set-playground-8-BH15HT.js";import{g as oe}from"./seo-pBpFCWsy.js";import{c as C,b as se,a as k,I as S}from"./misc-LevbAJZ6.js";import{E as ie}from"./epic-video-D8tfMIv8.js";import{S as E,d as ae,j as I,A as _,h as F,P as L,f as P,g as $,k as le,D as ce,C as pe,l as de,u as ue,R as me,e as fe}from"./tooltip-Blm9zu1K.js";import{s as xe}from"./progress-bar-HYCoNAkN.js";import{u as he}from"./pe-BmTNRcy_.js";import{a as ve,u as v,L as g,b as ge,A as je}from"./components-BQB6wEvm.js";import{u as Pe}from"./request-info-D6MPpnDd.js";import{h as be,R as Ne,u as Ce,F as Se,P as Ee}from"./index-bM_TIo_p.js";import"./index-aPMCrDDW.js";import"./index-TIHEbU65.js";import"./loading-DXKqMYHW.js";import"./user-2ca9K5af.js";import"./workshop-config-COvWTBns.js";function we({handleClick:r,cacheLocation:n,embeddedKey:t,appFullPath:o}){const s=ve(),i=he();return e.jsxs(s.Form,{action:"/update-mdx-cache",method:"POST",children:[i,xe,e.jsx("input",{type:"hidden",name:"cacheLocation",value:n}),e.jsx("input",{type:"hidden",name:"embeddedKey",value:t}),e.jsx("input",{type:"hidden",name:"appFullPath",value:o}),e.jsx("button",{type:"submit",onClick:r,className:C("launch_button",s.state==="idle"?null:"cursor-progress"),children:"Cancel Warning"})]})}const T=p.createContext(null);function ye(){const r=p.useContext(T);if(!r)throw new Error("useStepContext must be used within a StepContext.Provider");return r}function Oe({children:r,inBrowserBrowserRef:n}){return e.jsx(T.Provider,{value:{inBrowserBrowserRef:n},children:r})}const Re={CodeFile:Ie,CodeFileNotification:_e,DiffLink:w,PrevDiffLink:De,NextDiffLink:ke,InlineFile:Fe,LinkToApp:$e};function Ae({inBrowserBrowserRef:r}){const n=v();return n.exerciseStepApp.instructionsCode?e.jsx(Oe,{inBrowserBrowserRef:r,children:e.jsx(ie,{epicVideoInfosPromise:n.epicVideoInfosPromise,children:e.jsx("div",{className:"prose dark:prose-invert sm:prose-lg",children:e.jsx(re,{code:n.exerciseStepApp.instructionsCode,components:Re})})})}):null}function M(r,n,t){const o=new URLSearchParams(r);return t===null?o.delete(n):o.set(n,t),o}function ke({app:r=0,fullPage:n=!1,children:t}){return e.jsx(w,{app1:r,app2:r+1,fullPage:n,children:t})}function De({app:r=-1,fullPage:n=!1,children:t}){return e.jsx(w,{app1:r,app2:r+1,fullPage:n,children:t})}function w({app1:r=0,app2:n=1,children:t,fullPage:o=!1,to:s}){const i=v();if(!s&&!r&&!n)return e.jsx("callout-danger",{className:"notification",children:e.jsx("div",{className:"title",children:"DiffLink Error: invalid input"})});function a(u){var m;if(typeof u=="number"){const f=i.exerciseIndex+u;return(m=i.allApps[f])==null?void 0:m.name}if(!u)return null;for(const{name:f,stepName:x}of i.allApps)if(u===f||u===x)return f;return null}if(s){const u=new URLSearchParams(s);r=u.get("app1"),n=u.get("app2")}const l=a(r),c=a(n);if(!l||!c)return e.jsxs("callout-danger",{className:"notification",children:[e.jsx("div",{className:"title",children:"DiffLink Error: invalid input"}),!l&&e.jsxs("div",{children:['app1: "',r,'" is not a valid app name']}),!c&&e.jsxs("div",{children:['app2: "',n,'" is not a valid app name']})]});s||(s=`app1=${l}&app2=${c}`);const d=o?`/diff?${s}`:`?${decodeURIComponent(M(new URLSearchParams,"preview",`diff&${s}`).toString())}`;return t||(t=e.jsxs("span",{children:["Go to Diff ",o?"":"Preview"," from: ",e.jsx("code",{children:l})," to:"," ",e.jsx("code",{children:c})]})),e.jsx(g,{to:d,children:t})}function Ie({file:r}){return e.jsxs("div",{className:"border-4 border-[#ff4545] bg-[#ff454519] p-4 text-lg",children:["Something went wrong compiling ",e.jsx("b",{children:"CodeFile"})," for file: ",e.jsx("u",{children:r})," to markdown"]})}function _e({file:r,type:n="problem",children:t,variant:o,cacheLocation:s,embeddedKey:i,...a}){const[l,c]=p.useState("visible"),u=v()[n],m=()=>{l==="visible"&&(c("collapse"),setTimeout(()=>{c("none")},400))},f=C("rounded px-4 py-1 font-mono text-sm font-semibold outline-none transition duration-300 ease-in-out",{"bg-amber-300/70 hover:bg-amber-300/40 active:bg-amber-300/50":o==="warning","bg-red-300/70 hover:bg-red-300/40 active:bg-red-300/50":o==="error"});return e.jsxs("div",{className:C("notification important h-15 relative",{"duration-400 !my-0 !h-0 !py-0 !opacity-0 transition-all ease-out":l!=="visible",hidden:l==="none"}),children:[e.jsxs("div",{className:"absolute right-3 top-3 z-50 flex gap-4",children:[u?e.jsx("div",{className:f,title:`Edit ${r}`,children:e.jsx(b,{appFile:r,appName:u.name,...a,children:"Edit this File"})}):null,u&&o==="warning"?e.jsx("div",{className:f,title:`Remove the warning from here and from ${r} cache file`,children:e.jsx(we,{handleClick:m,cacheLocation:s,embeddedKey:i,appFullPath:u.fullPath})}):null]}),t]})}function Fe({file:r,type:n="playground",children:t=e.jsx("code",{children:r}),...o}){const s=v(),i=s[n]||s[s.type],a=e.jsxs("div",{className:"launch-editor-button-wrapper flex underline underline-offset-4",children:[t," ",e.jsx("svg",{height:24,width:24,children:e.jsx("use",{href:"/icons.svg#Keyboard"})})]});return ENV.EPICSHOP_DEPLOYED&&i?e.jsx("div",{className:"inline-block grow",children:e.jsx(b,{appFile:r,appName:i.name,...o,children:a})}):i?e.jsx("div",{className:"inline-block grow",children:e.jsx(b,{appFile:r,appName:i.name,...o,children:a})}):n==="playground"?e.jsx(E,{content:"You must 'Set to Playground' before opening a file",children:e.jsx("div",{className:"inline-block grow cursor-not-allowed",children:a})}):e.jsx(e.Fragment,{children:"children"})}function Le(r){return r==="problem"?"problem":r==="solution"?"solution":"playground"}function $e({to:r,children:n=e.jsx("code",{children:r.toString()}),...t}){var f;const[o]=ge(),s=`?${M(o,"pathname",r.toString()).toString()}`,i=v(),a=Le(o.get("preview")),l=Pe(),c=i[a],d=(c==null?void 0:c.dev.type)==="script"?se({domain:l.domain,port:c.dev.portNumber}):((f=i.playground)==null?void 0:f.dev.type)==="browser"?i.playground.dev.pathname:null,{inBrowserBrowserRef:u}=ye(),m=d?d.slice(0,-1)+r.toString():null;return e.jsxs("div",{className:"inline-flex items-center justify-between gap-1",children:[e.jsx(g,{to:s,...t,className:k(t.className,{"cursor-not-allowed":ENV.EPICSHOP_DEPLOYED}),title:ENV.EPICSHOP_DEPLOYED?"Cannot link to app in deployed version":void 0,onClick:x=>{var R,A;ENV.EPICSHOP_DEPLOYED&&x.preventDefault(),(R=t.onClick)==null||R.call(t,x),(A=u.current)==null||A.handleExtrnalNavigation(r.toString())},children:n}),m?e.jsx(E,{content:"Open in new tab",children:e.jsx("a",{href:m,target:"_blank",rel:"noreferrer",className:k("flex aspect-square items-center justify-center",{"cursor-not-allowed":ENV.EPICSHOP_DEPLOYED}),title:ENV.EPICSHOP_DEPLOYED?"Cannot link to app in deployed version":"Open in new tab",onClick:x=>{ENV.EPICSHOP_DEPLOYED&&x.preventDefault()},children:e.jsx(S,{name:"ExternalLink"})})}):null]})}var y="Popover",[H,jr]=ae(y,[I]),N=I(),[Te,h]=H(y),U=r=>{const{__scopePopover:n,children:t,open:o,defaultOpen:s,onOpenChange:i,modal:a=!1}=r,l=N(n),c=p.useRef(null),[d,u]=p.useState(!1),[m=!1,f]=ue({prop:o,defaultProp:s,onChange:i});return e.jsx(me,{...l,children:e.jsx(Te,{scope:n,contentId:fe(),triggerRef:c,open:m,onOpenChange:f,onOpenToggle:p.useCallback(()=>f(x=>!x),[f]),hasCustomAnchor:d,onCustomAnchorAdd:p.useCallback(()=>u(!0),[]),onCustomAnchorRemove:p.useCallback(()=>u(!1),[]),modal:a,children:t})})};U.displayName=y;var V="PopoverAnchor",Me=p.forwardRef((r,n)=>{const{__scopePopover:t,...o}=r,s=h(V,t),i=N(t),{onCustomAnchorAdd:a,onCustomAnchorRemove:l}=s;return p.useEffect(()=>(a(),()=>l()),[a,l]),e.jsx(_,{...i,...o,ref:n})});Me.displayName=V;var Y="PopoverTrigger",B=p.forwardRef((r,n)=>{const{__scopePopover:t,...o}=r,s=h(Y,t),i=N(t),a=F(n,s.triggerRef),l=e.jsx(L.button,{type:"button","aria-haspopup":"dialog","aria-expanded":s.open,"aria-controls":s.contentId,"data-state":W(s.open),...o,ref:a,onClick:P(r.onClick,s.onOpenToggle)});return s.hasCustomAnchor?l:e.jsx(_,{asChild:!0,...i,children:l})});B.displayName=Y;var O="PopoverPortal",[He,Ue]=H(O,{forceMount:void 0}),G=r=>{const{__scopePopover:n,forceMount:t,children:o,container:s}=r,i=h(O,n);return e.jsx(He,{scope:n,forceMount:t,children:e.jsx($,{present:t||i.open,children:e.jsx(Ee,{asChild:!0,container:s,children:o})})})};G.displayName=O;var j="PopoverContent",q=p.forwardRef((r,n)=>{const t=Ue(j,r.__scopePopover),{forceMount:o=t.forceMount,...s}=r,i=h(j,r.__scopePopover);return e.jsx($,{present:o||i.open,children:i.modal?e.jsx(Ve,{...s,ref:n}):e.jsx(Ye,{...s,ref:n})})});q.displayName=j;var Ve=p.forwardRef((r,n)=>{const t=h(j,r.__scopePopover),o=p.useRef(null),s=F(n,o),i=p.useRef(!1);return p.useEffect(()=>{const a=o.current;if(a)return be(a)},[]),e.jsx(Ne,{as:le,allowPinchZoom:!0,children:e.jsx(K,{...r,ref:s,trapFocus:t.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:P(r.onCloseAutoFocus,a=>{var l;a.preventDefault(),i.current||(l=t.triggerRef.current)==null||l.focus()}),onPointerDownOutside:P(r.onPointerDownOutside,a=>{const l=a.detail.originalEvent,c=l.button===0&&l.ctrlKey===!0,d=l.button===2||c;i.current=d},{checkForDefaultPrevented:!1}),onFocusOutside:P(r.onFocusOutside,a=>a.preventDefault(),{checkForDefaultPrevented:!1})})})}),Ye=p.forwardRef((r,n)=>{const t=h(j,r.__scopePopover),o=p.useRef(!1),s=p.useRef(!1);return e.jsx(K,{...r,ref:n,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:i=>{var a,l;(a=r.onCloseAutoFocus)==null||a.call(r,i),i.defaultPrevented||(o.current||(l=t.triggerRef.current)==null||l.focus(),i.preventDefault()),o.current=!1,s.current=!1},onInteractOutside:i=>{var c,d;(c=r.onInteractOutside)==null||c.call(r,i),i.defaultPrevented||(o.current=!0,i.detail.originalEvent.type==="pointerdown"&&(s.current=!0));const a=i.target;((d=t.triggerRef.current)==null?void 0:d.contains(a))&&i.preventDefault(),i.detail.originalEvent.type==="focusin"&&s.current&&i.preventDefault()}})}),K=p.forwardRef((r,n)=>{const{__scopePopover:t,trapFocus:o,onOpenAutoFocus:s,onCloseAutoFocus:i,disableOutsidePointerEvents:a,onEscapeKeyDown:l,onPointerDownOutside:c,onFocusOutside:d,onInteractOutside:u,...m}=r,f=h(j,t),x=N(t);return Ce(),e.jsx(Se,{asChild:!0,loop:!0,trapped:o,onMountAutoFocus:s,onUnmountAutoFocus:i,children:e.jsx(ce,{asChild:!0,disableOutsidePointerEvents:a,onInteractOutside:u,onEscapeKeyDown:l,onPointerDownOutside:c,onFocusOutside:d,onDismiss:()=>f.onOpenChange(!1),children:e.jsx(pe,{"data-state":W(f.open),role:"dialog",id:f.contentId,...x,...m,ref:n,style:{...m.style,"--radix-popover-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-popover-content-available-width":"var(--radix-popper-available-width)","--radix-popover-content-available-height":"var(--radix-popper-available-height)","--radix-popover-trigger-width":"var(--radix-popper-anchor-width)","--radix-popover-trigger-height":"var(--radix-popper-anchor-height)"}})})})}),z="PopoverClose",Be=p.forwardRef((r,n)=>{const{__scopePopover:t,...o}=r,s=h(z,t);return e.jsx(L.button,{type:"button",...o,ref:n,onClick:P(r.onClick,()=>s.onOpenChange(!1))})});Be.displayName=z;var Ge="PopoverArrow",qe=p.forwardRef((r,n)=>{const{__scopePopover:t,...o}=r,s=N(t);return e.jsx(de,{...s,...o,ref:n})});qe.displayName=Ge;function W(r){return r?"open":"closed"}var Ke=U,ze=B,We=G,Qe=q;function Ze({diffFilesPromise:r}){var l,c;const n=v(),[t,o]=p.useState(!1),s=p.useRef(null);function i(){o(!1)}const a=(l=n.playground)==null?void 0:l.appName;return e.jsx(e.Fragment,{children:e.jsxs(Ke,{open:t,onOpenChange:o,children:[e.jsx(ze,{asChild:!0,children:e.jsxs("button",{className:"flex h-full items-center gap-1 border-r px-6 py-3 font-mono text-sm uppercase","aria-label":"Relevant Files",children:[e.jsx(S,{name:"Files"}),"Files"]})}),e.jsx(We,{children:e.jsx(Qe,{ref:s,className:"slideRightContent lg:slideUpContent invert-theme z-10 select-none rounded bg-background px-9 py-8 text-foreground",align:"start",sideOffset:5,children:e.jsxs("div",{className:"launch-editor-wrapper",children:[e.jsx("strong",{className:"inline-block px-2 pb-4 font-semibold uppercase",children:"Relevant Files"}),n.problem&&((c=n.playground)==null?void 0:c.appName)!==n.problem.name?e.jsx("div",{className:"mb-2 rounded p-1 font-mono font-medium",children:e.jsx(D,{appName:n.problem.name})}):null,e.jsx("div",{id:"files",children:e.jsx(p.Suspense,{fallback:e.jsx(E,{content:"Loading diff",children:e.jsx("div",{className:"flex justify-center",children:e.jsx(S,{name:"Refresh",className:"h-8 w-8 animate-spin"})})}),children:e.jsx(je,{resolve:r,errorElement:e.jsx("div",{className:"text-foreground-danger",children:"Something went wrong."}),children:d=>{if(!d)return e.jsx("p",{className:"text-foreground-danger",children:"Unable to determine diff"});if(typeof d=="string")return e.jsx("p",{className:"text-foreground-danger",children:d});if(!d.length)return e.jsx("p",{children:"No files changed"});const u=a||ENV.EPICSHOP_GITHUB_ROOT?{}:{title:"You must 'Set to Playground' before opening a file",className:"not-allowed"};return e.jsxs("ul",{...u,children:[d.length>1&&!ENV.EPICSHOP_DEPLOYED?e.jsx("div",{className:"mb-2 border-b border-b-gray-50 border-opacity-50 pb-2 font-sans",children:e.jsx(b,{appFile:d.map(m=>`${m.path},${m.line},1`),appName:"playground",onUpdate:i,children:e.jsx("p",{children:"Open All Files"})})}):null,d.map(m=>{var f;return e.jsx("li",{"data-state":m.status,children:e.jsx(b,{appFile:`${m.path},${m.line},1`,appName:ENV.EPICSHOP_DEPLOYED?((f=n.problem)==null?void 0:f.name)??"playground":"playground",onUpdate:i,children:e.jsx("code",{children:m.path})})},m.path)})]})}})})})]})})})]})})}function Q(r,n){var a;const t=(r==null?void 0:r.exerciseStepApp.exerciseNumber.toString().padStart(2,"0"))??"00",o=(r==null?void 0:r.exerciseStepApp.stepNumber.toString().padStart(2,"0"))??"00",s={problem:"💪",solution:"🏁"}[(r==null?void 0:r.type)??"problem"],i=((a=r==null?void 0:r[r.type])==null?void 0:a.title)??"N/A";return{emoji:s,stepNumber:o,title:i,exerciseNumber:t,exerciseTitle:(r==null?void 0:r.exerciseTitle)??"Unknown exercise",workshopTitle:n,type:(r==null?void 0:r.type)??"problem"}}const Pr=({data:r,matches:n,params:t})=>{var d;const o=(d=n.find(u=>u.id==="root"))==null?void 0:d.data;if(!r||!o)return[{title:"🦉 | Error"}];const{emoji:s,stepNumber:i,title:a,exerciseNumber:l,exerciseTitle:c}=Q(r);return oe({title:`${s} | ${i}. ${a} | ${l}. ${c} | ${o.workshopTitle}`,description:`${t.type} step for exercise ${l}. ${c}`,ogTitle:a,ogDescription:`${c} step ${Number(i)} ${t.type}`,instructor:o.instructor,requestInfo:o.requestInfo})};function br(){var o;const r=v(),n=p.useRef(null),t=Q(r);return e.jsx("div",{className:"flex max-w-full flex-grow flex-col",children:e.jsxs("main",{className:"flex flex-grow flex-col sm:grid sm:h-full sm:min-h-[800px] sm:grid-cols-1 sm:grid-rows-2 md:min-h-[unset] lg:grid-cols-2 lg:grid-rows-1",children:[e.jsxs("div",{className:"relative flex flex-col sm:col-span-1 sm:row-span-1 sm:h-full lg:border-r",children:[e.jsx("h1",{className:"h-14 border-b pl-10 pr-5 text-sm font-medium leading-tight",children:e.jsxs("div",{className:"flex h-14 flex-wrap items-center justify-between gap-x-2 py-2",children:[e.jsxs("div",{className:"flex items-center justify-start gap-x-2 uppercase",children:[e.jsxs(g,{to:`/${t.exerciseNumber}`,className:"hover:underline",children:[t.exerciseNumber,". ",t.exerciseTitle]}),"/",e.jsxs(g,{to:".",className:"hover:underline",children:[t.stepNumber,". ",t.title," (",t.emoji," ",t.type,")"]})]}),r.problem&&((o=r.playground)==null?void 0:o.appName)!==r.problem.name?e.jsx("div",{className:"hidden md:block",children:e.jsx(D,{appName:r.problem.name})}):null]})}),e.jsxs("article",{id:r.articleId,className:"shadow-on-scrollbox flex h-full w-full max-w-none flex-1 scroll-pt-6 flex-col justify-between space-y-6 overflow-y-auto p-2 scrollbar-thin scrollbar-thumb-scrollbar sm:p-10 sm:pt-8",children:[r.exerciseStepApp.instructionsCode?e.jsx(Ae,{inBrowserBrowserRef:n}):e.jsx("div",{className:"flex h-full items-center justify-center text-lg",children:e.jsx("p",{children:"No instructions yet..."})}),e.jsxs("div",{className:"mt-auto flex justify-between",children:[r.prevStepLink?e.jsx(g,{to:r.prevStepLink.to,"aria-label":"Previous Step",prefetch:"intent",children:"← Previous"}):e.jsx("span",{}),r.nextStepLink?e.jsx(g,{to:r.nextStepLink.to,"aria-label":"Next Step",prefetch:"intent",children:"Next →"}):e.jsx("span",{})]})]},r.articleId),e.jsx(J,{elementQuery:`#${r.articleId}`},`scroll-${r.articleId}`),r.type==="solution"?e.jsx(ne,{type:"step",exerciseNumber:r.exerciseStepApp.exerciseNumber,stepNumber:r.exerciseStepApp.stepNumber,className:"h-14 border-t px-6"}):null,e.jsxs("div",{className:"flex h-16 justify-between border-b-4 border-t lg:border-b-0",children:[e.jsx("div",{children:e.jsx("div",{className:"h-full",children:e.jsx(Ze,{diffFilesPromise:r.diffFiles})})}),e.jsx(te,{appName:r.exerciseStepApp.name,relativePath:r.exerciseStepApp.relativePath}),e.jsx(ee,{prev:r.prevStepLink?{to:r.prevStepLink.to,"aria-label":"Previous Step"}:null,next:r.nextStepLink?{to:r.nextStepLink.to,"aria-label":"Next Step"}:null})]})]}),e.jsx(Z,{})]})})}function Nr(){return e.jsx(X,{statusHandlers:{404:()=>e.jsx("p",{children:"Sorry, we couldn't find an app here."})}})}export{Nr as ErrorBoundary,br as default,Pr as meta};
|
|
2
|
-
//# sourceMappingURL=_layout-C7yUCsjZ.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"_layout-C7yUCsjZ.js","sources":["../../../app/routes/update-mdx-cache.tsx","../../../app/routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/__shared/step-mdx.tsx","../../../../../node_modules/@radix-ui/react-popover/dist/index.mjs","../../../app/routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/__shared/touched-files.tsx","../../../app/routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout.tsx"],"sourcesContent":["import fs from 'node:fs'\nimport { setModifiedTimesForDir } from '@epic-web/workshop-utils/apps.server'\nimport { type EmbeddedFile } from '@epic-web/workshop-utils/codefile-mdx.server'\nimport { json, type ActionFunctionArgs } from '@remix-run/node'\nimport { useFetcher } from '@remix-run/react'\nimport { clsx } from 'clsx'\nimport { z } from 'zod'\nimport { showProgressBarField } from '#app/components/progress-bar.tsx'\nimport { ensureUndeployed } from '#app/utils/misc.tsx'\nimport { jsonWithPE, usePERedirectInput } from '#app/utils/pe.js'\n\nconst cacheSchema = z.object({\n\tcacheLocation: z.string(),\n\tembeddedKey: z.string(),\n\tappFullPath: z.string(),\n})\n\nfunction checkFileExists(file: string) {\n\treturn fs.promises.access(file, fs.constants.F_OK).then(\n\t\t() => true,\n\t\t() => false,\n\t)\n}\n\nexport async function action({ request }: ActionFunctionArgs) {\n\tensureUndeployed()\n\tconst formData = await request.formData()\n\tconst rawData = {\n\t\tcacheLocation: formData.get('cacheLocation'),\n\t\tembeddedKey: formData.get('embeddedKey'),\n\t\tappFullPath: formData.get('appFullPath'),\n\t}\n\n\tconst { cacheLocation, embeddedKey, appFullPath } = cacheSchema.parse(rawData)\n\n\tif (!(await checkFileExists(cacheLocation))) {\n\t\tconsole.log(`file ${cacheLocation} not found`)\n\t\treturn json({ success: true })\n\t}\n\n\tconst cached = JSON.parse(\n\t\tawait fs.promises.readFile(cacheLocation, 'utf-8'),\n\t) as any\n\n\tconst cachedEmbeddedFiles = new Map<string, EmbeddedFile>(\n\t\tObject.entries(cached?.value?.embeddedFiles ?? {}),\n\t)\n\n\tif (cachedEmbeddedFiles.has(embeddedKey)) {\n\t\tdelete cachedEmbeddedFiles.get(embeddedKey)?.warning\n\n\t\tcached.value.embeddedFiles = Object.fromEntries(cachedEmbeddedFiles)\n\t}\n\n\ttry {\n\t\tcached.value.warningCancled = true\n\t\tawait fs.promises.writeFile(cacheLocation, JSON.stringify(cached))\n\t} catch (error) {\n\t\tconsole.log(\n\t\t\t`Error when trying to write cache file at ${cacheLocation}`,\n\t\t\terror,\n\t\t)\n\t}\n\tsetModifiedTimesForDir(appFullPath)\n\n\treturn jsonWithPE(formData, { success: true })\n}\n\nexport function UpdateMdxCache({\n\thandleClick,\n\tcacheLocation,\n\tembeddedKey,\n\tappFullPath,\n}: {\n\thandleClick: () => void\n\tcacheLocation: string\n\tembeddedKey: string\n\tappFullPath: string\n}) {\n\tconst fetcher = useFetcher<typeof action>()\n\tconst peRedirectInput = usePERedirectInput()\n\n\treturn (\n\t\t<fetcher.Form action=\"/update-mdx-cache\" method=\"POST\">\n\t\t\t{peRedirectInput}\n\t\t\t{showProgressBarField}\n\t\t\t<input type=\"hidden\" name=\"cacheLocation\" value={cacheLocation} />\n\t\t\t<input type=\"hidden\" name=\"embeddedKey\" value={embeddedKey} />\n\t\t\t<input type=\"hidden\" name=\"appFullPath\" value={appFullPath} />\n\t\t\t<button\n\t\t\t\ttype=\"submit\"\n\t\t\t\tonClick={handleClick}\n\t\t\t\tclassName={clsx(\n\t\t\t\t\t'launch_button',\n\t\t\t\t\tfetcher.state === 'idle' ? null : 'cursor-progress',\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\tCancel Warning\n\t\t\t</button>\n\t\t</fetcher.Form>\n\t)\n}\n","import {\n\tLink,\n\tuseLoaderData,\n\tuseSearchParams,\n\ttype LinkProps,\n} from '@remix-run/react'\nimport { clsx } from 'clsx'\nimport * as React from 'react'\nimport { useState, type PropsWithChildren } from 'react'\nimport { EpicVideoInfoProvider } from '#app/components/epic-video.tsx'\nimport { Icon } from '#app/components/icons.tsx'\nimport { type InBrowserBrowserRef } from '#app/components/in-browser-browser.tsx'\nimport { SimpleTooltip } from '#app/components/ui/tooltip.tsx'\nimport { LaunchEditor } from '#app/routes/launch-editor.tsx'\nimport { UpdateMdxCache } from '#app/routes/update-mdx-cache.tsx'\nimport { Mdx } from '#app/utils/mdx.tsx'\nimport { cn, getBaseUrl } from '#app/utils/misc.tsx'\nimport { useRequestInfo } from '#app/utils/request-info.ts'\nimport { type loader } from '../_layout.tsx'\n\ntype StepContextType = {\n\tinBrowserBrowserRef: React.RefObject<InBrowserBrowserRef | null>\n}\nconst StepContext = React.createContext<StepContextType | null>(null)\n\nfunction useStepContext() {\n\tconst context = React.useContext(StepContext)\n\tif (!context) {\n\t\tthrow new Error('useStepContext must be used within a StepContext.Provider')\n\t}\n\treturn context\n}\n\nfunction StepContextProvider({\n\tchildren,\n\tinBrowserBrowserRef,\n}: {\n\tchildren: React.ReactNode\n\tinBrowserBrowserRef: React.RefObject<InBrowserBrowserRef | null>\n}) {\n\treturn (\n\t\t<StepContext.Provider value={{ inBrowserBrowserRef }}>\n\t\t\t{children}\n\t\t</StepContext.Provider>\n\t)\n}\n\nconst stepMdxComponents = {\n\tCodeFile,\n\tCodeFileNotification,\n\tDiffLink,\n\tPrevDiffLink,\n\tNextDiffLink,\n\tInlineFile,\n\tLinkToApp,\n}\n\nexport function StepMdx({\n\tinBrowserBrowserRef,\n}: {\n\tinBrowserBrowserRef: React.RefObject<InBrowserBrowserRef | null>\n}) {\n\tconst data = useLoaderData<typeof loader>()\n\tif (!data.exerciseStepApp.instructionsCode) return null\n\treturn (\n\t\t<StepContextProvider inBrowserBrowserRef={inBrowserBrowserRef}>\n\t\t\t<EpicVideoInfoProvider epicVideoInfosPromise={data.epicVideoInfosPromise}>\n\t\t\t\t<div className=\"prose dark:prose-invert sm:prose-lg\">\n\t\t\t\t\t<Mdx\n\t\t\t\t\t\tcode={data.exerciseStepApp.instructionsCode}\n\t\t\t\t\t\tcomponents={stepMdxComponents}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</EpicVideoInfoProvider>\n\t\t</StepContextProvider>\n\t)\n}\n\nfunction withParam(\n\tsearchParams: URLSearchParams,\n\tkey: string,\n\tvalue: string | null,\n) {\n\tconst newSearchParams = new URLSearchParams(searchParams)\n\tif (value === null) {\n\t\tnewSearchParams.delete(key)\n\t} else {\n\t\tnewSearchParams.set(key, value)\n\t}\n\treturn newSearchParams\n}\n\nfunction NextDiffLink({\n\tapp = 0,\n\tfullPage = false,\n\tchildren,\n}: {\n\tapp: number\n\tfullPage?: boolean\n\tchildren?: React.ReactNode\n}) {\n\treturn (\n\t\t<DiffLink app1={app} app2={app + 1} fullPage={fullPage}>\n\t\t\t{children}\n\t\t</DiffLink>\n\t)\n}\n\nfunction PrevDiffLink({\n\tapp = -1,\n\tfullPage = false,\n\tchildren,\n}: {\n\tapp: number\n\tfullPage?: boolean\n\tchildren?: React.ReactNode\n}) {\n\treturn (\n\t\t<DiffLink app1={app} app2={app + 1} fullPage={fullPage}>\n\t\t\t{children}\n\t\t</DiffLink>\n\t)\n}\n\nfunction DiffLink({\n\tapp1 = 0,\n\tapp2 = 1,\n\tchildren,\n\tfullPage = false,\n\tto,\n}: {\n\tapp1?: string | number | null\n\tapp2?: string | number | null\n\tto?: string\n\tfullPage?: boolean\n\tchildren?: React.ReactNode\n}) {\n\tconst data = useLoaderData<typeof loader>()\n\tif (!to && !app1 && !app2) {\n\t\treturn (\n\t\t\t// @ts-expect-error 🤷♂️\n\t\t\t<callout-danger className=\"notification\">\n\t\t\t\t<div className=\"title\">DiffLink Error: invalid input</div>\n\t\t\t\t{/* @ts-expect-error 🤷♂️ */}\n\t\t\t</callout-danger>\n\t\t)\n\t}\n\n\tfunction getAppName(input: typeof app1) {\n\t\tif (typeof input === 'number') {\n\t\t\tconst stepIndex = data.exerciseIndex + input\n\t\t\treturn data.allApps[stepIndex]?.name\n\t\t}\n\t\tif (!input) return null\n\t\tfor (const { name, stepName } of data.allApps) {\n\t\t\tif (input === name || input === stepName) {\n\t\t\t\treturn name\n\t\t\t}\n\t\t}\n\t\treturn null\n\t}\n\n\tif (to) {\n\t\tconst params = new URLSearchParams(to)\n\t\tapp1 = params.get('app1')\n\t\tapp2 = params.get('app2')\n\t}\n\tconst app1Name = getAppName(app1)\n\tconst app2Name = getAppName(app2)\n\tif (!app1Name || !app2Name) {\n\t\treturn (\n\t\t\t// @ts-expect-error 🤷♂️\n\t\t\t<callout-danger className=\"notification\">\n\t\t\t\t<div className=\"title\">DiffLink Error: invalid input</div>\n\t\t\t\t{!app1Name && <div>app1: \"{app1}\" is not a valid app name</div>}\n\t\t\t\t{!app2Name && <div>app2: \"{app2}\" is not a valid app name</div>}\n\t\t\t\t{/* @ts-expect-error 🤷♂️ */}\n\t\t\t</callout-danger>\n\t\t)\n\t}\n\n\tif (!to) {\n\t\tto = `app1=${app1Name}&app2=${app2Name}`\n\t}\n\tconst pathToDiff = fullPage\n\t\t? `/diff?${to}`\n\t\t: `?${decodeURIComponent(\n\t\t\t\twithParam(new URLSearchParams(), 'preview', `diff&${to}`).toString(),\n\t\t\t)}`\n\n\tif (!children) {\n\t\tchildren = (\n\t\t\t<span>\n\t\t\t\tGo to Diff {fullPage ? '' : 'Preview'} from: <code>{app1Name}</code> to:{' '}\n\t\t\t\t<code>{app2Name}</code>\n\t\t\t</span>\n\t\t)\n\t}\n\n\treturn <Link to={pathToDiff}>{children}</Link>\n}\n\nfunction CodeFile({ file }: { file: string }) {\n\treturn (\n\t\t<div className=\"border-4 border-[#ff4545] bg-[#ff454519] p-4 text-lg\">\n\t\t\tSomething went wrong compiling <b>CodeFile</b> for file: <u>{file}</u> to\n\t\t\tmarkdown\n\t\t</div>\n\t)\n}\n\nfunction CodeFileNotification({\n\tfile,\n\ttype = 'problem',\n\tchildren,\n\tvariant,\n\tcacheLocation,\n\tembeddedKey,\n\t...props\n}: {\n\tfile: string\n\ttype?: 'solution' | 'problem'\n\tchildren: React.ReactNode\n} & (\n\t| {\n\t\t\tvariant: 'error'\n\t\t\tcacheLocation?: never\n\t\t\tembeddedKey?: never\n\t }\n\t| {\n\t\t\tvariant: 'warning'\n\t\t\tcacheLocation: string\n\t\t\tembeddedKey: string\n\t }\n)) {\n\tconst [visibility, setVisibility] = useState('visible')\n\tconst data = useLoaderData<typeof loader>()\n\tconst app = data[type]\n\n\tconst handleClick = () => {\n\t\tif (visibility !== 'visible') return\n\t\tsetVisibility('collapse')\n\t\tsetTimeout(() => {\n\t\t\tsetVisibility('none')\n\t\t}, 400)\n\t}\n\n\tconst className = clsx(\n\t\t'rounded px-4 py-1 font-mono text-sm font-semibold outline-none transition duration-300 ease-in-out',\n\t\t{\n\t\t\t'bg-amber-300/70 hover:bg-amber-300/40 active:bg-amber-300/50':\n\t\t\t\tvariant === 'warning',\n\t\t\t'bg-red-300/70 hover:bg-red-300/40 active:bg-red-300/50':\n\t\t\t\tvariant === 'error',\n\t\t},\n\t)\n\n\treturn (\n\t\t<div\n\t\t\tclassName={clsx('notification important h-15 relative', {\n\t\t\t\t'duration-400 !my-0 !h-0 !py-0 !opacity-0 transition-all ease-out':\n\t\t\t\t\tvisibility !== 'visible',\n\t\t\t\thidden: visibility === 'none',\n\t\t\t})}\n\t\t>\n\t\t\t<div className=\"absolute right-3 top-3 z-50 flex gap-4\">\n\t\t\t\t{app ? (\n\t\t\t\t\t<div className={className} title={`Edit ${file}`}>\n\t\t\t\t\t\t<LaunchEditor appFile={file} appName={app.name} {...props}>\n\t\t\t\t\t\t\tEdit this File\n\t\t\t\t\t\t</LaunchEditor>\n\t\t\t\t\t</div>\n\t\t\t\t) : null}\n\t\t\t\t{app && variant === 'warning' ? (\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={className}\n\t\t\t\t\t\ttitle={`Remove the warning from here and from ${file} cache file`}\n\t\t\t\t\t>\n\t\t\t\t\t\t<UpdateMdxCache\n\t\t\t\t\t\t\thandleClick={handleClick}\n\t\t\t\t\t\t\tcacheLocation={cacheLocation}\n\t\t\t\t\t\t\tembeddedKey={embeddedKey}\n\t\t\t\t\t\t\tappFullPath={app.fullPath}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t) : null}\n\t\t\t</div>\n\t\t\t{children}\n\t\t</div>\n\t)\n}\n\nfunction InlineFile({\n\tfile,\n\ttype = 'playground',\n\tchildren = <code>{file}</code>,\n\t...props\n}: Omit<PropsWithChildren<typeof LaunchEditor>, 'appName'> & {\n\tfile: string\n\ttype?: 'playground' | 'solution' | 'problem'\n}) {\n\tconst data = useLoaderData<typeof loader>()\n\tconst app = data[type] || data[data.type]\n\n\tconst info = (\n\t\t<div className=\"launch-editor-button-wrapper flex underline underline-offset-4\">\n\t\t\t{children}{' '}\n\t\t\t<svg height={24} width={24}>\n\t\t\t\t<use href={`/icons.svg#Keyboard`} />\n\t\t\t</svg>\n\t\t</div>\n\t)\n\n\treturn ENV.EPICSHOP_DEPLOYED && app ? (\n\t\t<div className=\"inline-block grow\">\n\t\t\t<LaunchEditor appFile={file} appName={app.name} {...props}>\n\t\t\t\t{info}\n\t\t\t</LaunchEditor>\n\t\t</div>\n\t) : app ? (\n\t\t<div className=\"inline-block grow\">\n\t\t\t<LaunchEditor appFile={file} appName={app.name} {...props}>\n\t\t\t\t{info}\n\t\t\t</LaunchEditor>\n\t\t</div>\n\t) : type === 'playground' ? (\n\t\t// playground does not exist yet\n\t\t<SimpleTooltip content=\"You must 'Set to Playground' before opening a file\">\n\t\t\t<div className=\"inline-block grow cursor-not-allowed\">{info}</div>\n\t\t</SimpleTooltip>\n\t) : (\n\t\t<>children</>\n\t)\n}\n\nfunction getPreviewType(\n\tpreview: string | null,\n): 'playground' | 'problem' | 'solution' {\n\tif (preview === 'problem') return 'problem'\n\tif (preview === 'solution') return 'solution'\n\treturn 'playground'\n}\n\nfunction LinkToApp({\n\tto: appTo,\n\tchildren = <code>{appTo.toString()}</code>,\n\t...props\n}: LinkProps) {\n\tconst [searchParams] = useSearchParams()\n\tconst to = `?${withParam(\n\t\tsearchParams,\n\t\t'pathname',\n\t\tappTo.toString(),\n\t).toString()}`\n\tconst data = useLoaderData<typeof loader>()\n\tconst type = getPreviewType(searchParams.get('preview'))\n\tconst requestInfo = useRequestInfo()\n\tconst app = data[type]\n\tconst previewAppUrl =\n\t\tapp?.dev.type === 'script'\n\t\t\t? getBaseUrl({\n\t\t\t\t\tdomain: requestInfo.domain,\n\t\t\t\t\tport: app.dev.portNumber,\n\t\t\t\t})\n\t\t\t: data.playground?.dev.type === 'browser'\n\t\t\t\t? data.playground.dev.pathname\n\t\t\t\t: null\n\tconst { inBrowserBrowserRef } = useStepContext()\n\tconst href = previewAppUrl\n\t\t? previewAppUrl.slice(0, -1) + appTo.toString()\n\t\t: null\n\treturn (\n\t\t<div className=\"inline-flex items-center justify-between gap-1\">\n\t\t\t<Link\n\t\t\t\tto={to}\n\t\t\t\t{...props}\n\t\t\t\tclassName={cn(props.className, {\n\t\t\t\t\t'cursor-not-allowed': ENV.EPICSHOP_DEPLOYED,\n\t\t\t\t})}\n\t\t\t\ttitle={\n\t\t\t\t\tENV.EPICSHOP_DEPLOYED\n\t\t\t\t\t\t? 'Cannot link to app in deployed version'\n\t\t\t\t\t\t: undefined\n\t\t\t\t}\n\t\t\t\tonClick={(event) => {\n\t\t\t\t\tif (ENV.EPICSHOP_DEPLOYED) event.preventDefault()\n\n\t\t\t\t\tprops.onClick?.(event)\n\t\t\t\t\tinBrowserBrowserRef.current?.handleExtrnalNavigation(appTo.toString())\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</Link>\n\t\t\t{href ? (\n\t\t\t\t<SimpleTooltip content=\"Open in new tab\">\n\t\t\t\t\t<a\n\t\t\t\t\t\thref={href}\n\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\trel=\"noreferrer\"\n\t\t\t\t\t\tclassName={cn('flex aspect-square items-center justify-center', {\n\t\t\t\t\t\t\t'cursor-not-allowed': ENV.EPICSHOP_DEPLOYED,\n\t\t\t\t\t\t})}\n\t\t\t\t\t\ttitle={\n\t\t\t\t\t\t\tENV.EPICSHOP_DEPLOYED\n\t\t\t\t\t\t\t\t? 'Cannot link to app in deployed version'\n\t\t\t\t\t\t\t\t: 'Open in new tab'\n\t\t\t\t\t\t}\n\t\t\t\t\t\tonClick={(event) => {\n\t\t\t\t\t\t\tif (ENV.EPICSHOP_DEPLOYED) event.preventDefault()\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Icon name=\"ExternalLink\" />\n\t\t\t\t\t</a>\n\t\t\t\t</SimpleTooltip>\n\t\t\t) : null}\n\t\t</div>\n\t)\n}\n","\"use client\";\n\n// packages/react/popover/src/Popover.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { DismissableLayer } from \"@radix-ui/react-dismissable-layer\";\nimport { useFocusGuards } from \"@radix-ui/react-focus-guards\";\nimport { FocusScope } from \"@radix-ui/react-focus-scope\";\nimport { useId } from \"@radix-ui/react-id\";\nimport * as PopperPrimitive from \"@radix-ui/react-popper\";\nimport { createPopperScope } from \"@radix-ui/react-popper\";\nimport { Portal as PortalPrimitive } from \"@radix-ui/react-portal\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { hideOthers } from \"aria-hidden\";\nimport { RemoveScroll } from \"react-remove-scroll\";\nimport { jsx } from \"react/jsx-runtime\";\nvar POPOVER_NAME = \"Popover\";\nvar [createPopoverContext, createPopoverScope] = createContextScope(POPOVER_NAME, [\n createPopperScope\n]);\nvar usePopperScope = createPopperScope();\nvar [PopoverProvider, usePopoverContext] = createPopoverContext(POPOVER_NAME);\nvar Popover = (props) => {\n const {\n __scopePopover,\n children,\n open: openProp,\n defaultOpen,\n onOpenChange,\n modal = false\n } = props;\n const popperScope = usePopperScope(__scopePopover);\n const triggerRef = React.useRef(null);\n const [hasCustomAnchor, setHasCustomAnchor] = React.useState(false);\n const [open = false, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen,\n onChange: onOpenChange\n });\n return /* @__PURE__ */ jsx(PopperPrimitive.Root, { ...popperScope, children: /* @__PURE__ */ jsx(\n PopoverProvider,\n {\n scope: __scopePopover,\n contentId: useId(),\n triggerRef,\n open,\n onOpenChange: setOpen,\n onOpenToggle: React.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen]),\n hasCustomAnchor,\n onCustomAnchorAdd: React.useCallback(() => setHasCustomAnchor(true), []),\n onCustomAnchorRemove: React.useCallback(() => setHasCustomAnchor(false), []),\n modal,\n children\n }\n ) });\n};\nPopover.displayName = POPOVER_NAME;\nvar ANCHOR_NAME = \"PopoverAnchor\";\nvar PopoverAnchor = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopePopover, ...anchorProps } = props;\n const context = usePopoverContext(ANCHOR_NAME, __scopePopover);\n const popperScope = usePopperScope(__scopePopover);\n const { onCustomAnchorAdd, onCustomAnchorRemove } = context;\n React.useEffect(() => {\n onCustomAnchorAdd();\n return () => onCustomAnchorRemove();\n }, [onCustomAnchorAdd, onCustomAnchorRemove]);\n return /* @__PURE__ */ jsx(PopperPrimitive.Anchor, { ...popperScope, ...anchorProps, ref: forwardedRef });\n }\n);\nPopoverAnchor.displayName = ANCHOR_NAME;\nvar TRIGGER_NAME = \"PopoverTrigger\";\nvar PopoverTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopePopover, ...triggerProps } = props;\n const context = usePopoverContext(TRIGGER_NAME, __scopePopover);\n const popperScope = usePopperScope(__scopePopover);\n const composedTriggerRef = useComposedRefs(forwardedRef, context.triggerRef);\n const trigger = /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n \"aria-haspopup\": \"dialog\",\n \"aria-expanded\": context.open,\n \"aria-controls\": context.contentId,\n \"data-state\": getState(context.open),\n ...triggerProps,\n ref: composedTriggerRef,\n onClick: composeEventHandlers(props.onClick, context.onOpenToggle)\n }\n );\n return context.hasCustomAnchor ? trigger : /* @__PURE__ */ jsx(PopperPrimitive.Anchor, { asChild: true, ...popperScope, children: trigger });\n }\n);\nPopoverTrigger.displayName = TRIGGER_NAME;\nvar PORTAL_NAME = \"PopoverPortal\";\nvar [PortalProvider, usePortalContext] = createPopoverContext(PORTAL_NAME, {\n forceMount: void 0\n});\nvar PopoverPortal = (props) => {\n const { __scopePopover, forceMount, children, container } = props;\n const context = usePopoverContext(PORTAL_NAME, __scopePopover);\n return /* @__PURE__ */ jsx(PortalProvider, { scope: __scopePopover, forceMount, children: /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(PortalPrimitive, { asChild: true, container, children }) }) });\n};\nPopoverPortal.displayName = PORTAL_NAME;\nvar CONTENT_NAME = \"PopoverContent\";\nvar PopoverContent = React.forwardRef(\n (props, forwardedRef) => {\n const portalContext = usePortalContext(CONTENT_NAME, props.__scopePopover);\n const { forceMount = portalContext.forceMount, ...contentProps } = props;\n const context = usePopoverContext(CONTENT_NAME, props.__scopePopover);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: context.modal ? /* @__PURE__ */ jsx(PopoverContentModal, { ...contentProps, ref: forwardedRef }) : /* @__PURE__ */ jsx(PopoverContentNonModal, { ...contentProps, ref: forwardedRef }) });\n }\n);\nPopoverContent.displayName = CONTENT_NAME;\nvar PopoverContentModal = React.forwardRef(\n (props, forwardedRef) => {\n const context = usePopoverContext(CONTENT_NAME, props.__scopePopover);\n const contentRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, contentRef);\n const isRightClickOutsideRef = React.useRef(false);\n React.useEffect(() => {\n const content = contentRef.current;\n if (content) return hideOthers(content);\n }, []);\n return /* @__PURE__ */ jsx(RemoveScroll, { as: Slot, allowPinchZoom: true, children: /* @__PURE__ */ jsx(\n PopoverContentImpl,\n {\n ...props,\n ref: composedRefs,\n trapFocus: context.open,\n disableOutsidePointerEvents: true,\n onCloseAutoFocus: composeEventHandlers(props.onCloseAutoFocus, (event) => {\n event.preventDefault();\n if (!isRightClickOutsideRef.current) context.triggerRef.current?.focus();\n }),\n onPointerDownOutside: composeEventHandlers(\n props.onPointerDownOutside,\n (event) => {\n const originalEvent = event.detail.originalEvent;\n const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;\n const isRightClick = originalEvent.button === 2 || ctrlLeftClick;\n isRightClickOutsideRef.current = isRightClick;\n },\n { checkForDefaultPrevented: false }\n ),\n onFocusOutside: composeEventHandlers(\n props.onFocusOutside,\n (event) => event.preventDefault(),\n { checkForDefaultPrevented: false }\n )\n }\n ) });\n }\n);\nvar PopoverContentNonModal = React.forwardRef(\n (props, forwardedRef) => {\n const context = usePopoverContext(CONTENT_NAME, props.__scopePopover);\n const hasInteractedOutsideRef = React.useRef(false);\n const hasPointerDownOutsideRef = React.useRef(false);\n return /* @__PURE__ */ jsx(\n PopoverContentImpl,\n {\n ...props,\n ref: forwardedRef,\n trapFocus: false,\n disableOutsidePointerEvents: false,\n onCloseAutoFocus: (event) => {\n props.onCloseAutoFocus?.(event);\n if (!event.defaultPrevented) {\n if (!hasInteractedOutsideRef.current) context.triggerRef.current?.focus();\n event.preventDefault();\n }\n hasInteractedOutsideRef.current = false;\n hasPointerDownOutsideRef.current = false;\n },\n onInteractOutside: (event) => {\n props.onInteractOutside?.(event);\n if (!event.defaultPrevented) {\n hasInteractedOutsideRef.current = true;\n if (event.detail.originalEvent.type === \"pointerdown\") {\n hasPointerDownOutsideRef.current = true;\n }\n }\n const target = event.target;\n const targetIsTrigger = context.triggerRef.current?.contains(target);\n if (targetIsTrigger) event.preventDefault();\n if (event.detail.originalEvent.type === \"focusin\" && hasPointerDownOutsideRef.current) {\n event.preventDefault();\n }\n }\n }\n );\n }\n);\nvar PopoverContentImpl = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopePopover,\n trapFocus,\n onOpenAutoFocus,\n onCloseAutoFocus,\n disableOutsidePointerEvents,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside,\n onInteractOutside,\n ...contentProps\n } = props;\n const context = usePopoverContext(CONTENT_NAME, __scopePopover);\n const popperScope = usePopperScope(__scopePopover);\n useFocusGuards();\n return /* @__PURE__ */ jsx(\n FocusScope,\n {\n asChild: true,\n loop: true,\n trapped: trapFocus,\n onMountAutoFocus: onOpenAutoFocus,\n onUnmountAutoFocus: onCloseAutoFocus,\n children: /* @__PURE__ */ jsx(\n DismissableLayer,\n {\n asChild: true,\n disableOutsidePointerEvents,\n onInteractOutside,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside,\n onDismiss: () => context.onOpenChange(false),\n children: /* @__PURE__ */ jsx(\n PopperPrimitive.Content,\n {\n \"data-state\": getState(context.open),\n role: \"dialog\",\n id: context.contentId,\n ...popperScope,\n ...contentProps,\n ref: forwardedRef,\n style: {\n ...contentProps.style,\n // re-namespace exposed content custom properties\n ...{\n \"--radix-popover-content-transform-origin\": \"var(--radix-popper-transform-origin)\",\n \"--radix-popover-content-available-width\": \"var(--radix-popper-available-width)\",\n \"--radix-popover-content-available-height\": \"var(--radix-popper-available-height)\",\n \"--radix-popover-trigger-width\": \"var(--radix-popper-anchor-width)\",\n \"--radix-popover-trigger-height\": \"var(--radix-popper-anchor-height)\"\n }\n }\n }\n )\n }\n )\n }\n );\n }\n);\nvar CLOSE_NAME = \"PopoverClose\";\nvar PopoverClose = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopePopover, ...closeProps } = props;\n const context = usePopoverContext(CLOSE_NAME, __scopePopover);\n return /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n ...closeProps,\n ref: forwardedRef,\n onClick: composeEventHandlers(props.onClick, () => context.onOpenChange(false))\n }\n );\n }\n);\nPopoverClose.displayName = CLOSE_NAME;\nvar ARROW_NAME = \"PopoverArrow\";\nvar PopoverArrow = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopePopover, ...arrowProps } = props;\n const popperScope = usePopperScope(__scopePopover);\n return /* @__PURE__ */ jsx(PopperPrimitive.Arrow, { ...popperScope, ...arrowProps, ref: forwardedRef });\n }\n);\nPopoverArrow.displayName = ARROW_NAME;\nfunction getState(open) {\n return open ? \"open\" : \"closed\";\n}\nvar Root2 = Popover;\nvar Anchor2 = PopoverAnchor;\nvar Trigger = PopoverTrigger;\nvar Portal = PopoverPortal;\nvar Content2 = PopoverContent;\nvar Close = PopoverClose;\nvar Arrow2 = PopoverArrow;\nexport {\n Anchor2 as Anchor,\n Arrow2 as Arrow,\n Close,\n Content2 as Content,\n Popover,\n PopoverAnchor,\n PopoverArrow,\n PopoverClose,\n PopoverContent,\n PopoverPortal,\n PopoverTrigger,\n Portal,\n Root2 as Root,\n Trigger,\n createPopoverScope\n};\n//# sourceMappingURL=index.mjs.map\n","import * as Popover from '@radix-ui/react-popover'\nimport { type SerializeFrom } from '@remix-run/node'\nimport { Await, useLoaderData } from '@remix-run/react'\nimport * as React from 'react'\nimport { Icon } from '#app/components/icons.tsx'\nimport { SimpleTooltip } from '#app/components/ui/tooltip.tsx'\nimport { LaunchEditor } from '#app/routes/launch-editor.tsx'\nimport { SetAppToPlayground } from '#app/routes/set-playground.tsx'\nimport { type loader } from '../_layout.tsx'\n\nfunction TouchedFiles({\n\tdiffFilesPromise,\n}: {\n\tdiffFilesPromise: SerializeFrom<typeof loader>['diffFiles']\n}) {\n\tconst data = useLoaderData<typeof loader>()\n\n\tconst [open, setOpen] = React.useState(false)\n\tconst contentRef = React.useRef<HTMLDivElement>(null)\n\n\tfunction handleLaunchUpdate() {\n\t\tsetOpen(false)\n\t}\n\n\tconst appName = data.playground?.appName\n\n\treturn (\n\t\t<>\n\t\t\t<Popover.Root open={open} onOpenChange={setOpen}>\n\t\t\t\t<Popover.Trigger asChild>\n\t\t\t\t\t<button\n\t\t\t\t\t\tclassName=\"flex h-full items-center gap-1 border-r px-6 py-3 font-mono text-sm uppercase\"\n\t\t\t\t\t\taria-label=\"Relevant Files\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<Icon name=\"Files\" />\n\t\t\t\t\t\tFiles\n\t\t\t\t\t</button>\n\t\t\t\t</Popover.Trigger>\n\t\t\t\t<Popover.Portal>\n\t\t\t\t\t<Popover.Content\n\t\t\t\t\t\tref={contentRef}\n\t\t\t\t\t\tclassName=\"slideRightContent lg:slideUpContent invert-theme z-10 select-none rounded bg-background px-9 py-8 text-foreground\"\n\t\t\t\t\t\talign=\"start\"\n\t\t\t\t\t\tsideOffset={5}\n\t\t\t\t\t>\n\t\t\t\t\t\t<div className=\"launch-editor-wrapper\">\n\t\t\t\t\t\t\t<strong className=\"inline-block px-2 pb-4 font-semibold uppercase\">\n\t\t\t\t\t\t\t\tRelevant Files\n\t\t\t\t\t\t\t</strong>\n\t\t\t\t\t\t\t{data.problem &&\n\t\t\t\t\t\t\tdata.playground?.appName !== data.problem.name ? (\n\t\t\t\t\t\t\t\t<div className=\"mb-2 rounded p-1 font-mono font-medium\">\n\t\t\t\t\t\t\t\t\t<SetAppToPlayground appName={data.problem.name} />\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t<div id=\"files\">\n\t\t\t\t\t\t\t\t<React.Suspense\n\t\t\t\t\t\t\t\t\tfallback={\n\t\t\t\t\t\t\t\t\t\t<SimpleTooltip content=\"Loading diff\">\n\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex justify-center\">\n\t\t\t\t\t\t\t\t\t\t\t\t<Icon name=\"Refresh\" className=\"h-8 w-8 animate-spin\" />\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t</SimpleTooltip>\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<Await\n\t\t\t\t\t\t\t\t\t\tresolve={diffFilesPromise}\n\t\t\t\t\t\t\t\t\t\terrorElement={\n\t\t\t\t\t\t\t\t\t\t\t<div className=\"text-foreground-danger\">\n\t\t\t\t\t\t\t\t\t\t\t\tSomething went wrong.\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{(diffFiles) => {\n\t\t\t\t\t\t\t\t\t\t\tif (!diffFiles) {\n\t\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<p className=\"text-foreground-danger\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tUnable to determine diff\n\t\t\t\t\t\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tif (typeof diffFiles === 'string') {\n\t\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<p className=\"text-foreground-danger\">{diffFiles}</p>\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tif (!diffFiles.length) {\n\t\t\t\t\t\t\t\t\t\t\t\treturn <p>No files changed</p>\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\tconst props =\n\t\t\t\t\t\t\t\t\t\t\t\tappName || ENV.EPICSHOP_GITHUB_ROOT\n\t\t\t\t\t\t\t\t\t\t\t\t\t? {}\n\t\t\t\t\t\t\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttitle:\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"You must 'Set to Playground' before opening a file\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName: 'not-allowed',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t<ul {...props}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{diffFiles.length > 1 && !ENV.EPICSHOP_DEPLOYED ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"mb-2 border-b border-b-gray-50 border-opacity-50 pb-2 font-sans\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<LaunchEditor\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tappFile={diffFiles.map(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(file) => `${file.path},${file.line},1`,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tappName=\"playground\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonUpdate={handleLaunchUpdate}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<p>Open All Files</p>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</LaunchEditor>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t\t\t\t\t\t{diffFiles.map((file) => (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<li key={file.path} data-state={file.status}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<LaunchEditor\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tappFile={`${file.path},${file.line},1`}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tappName={\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tENV.EPICSHOP_DEPLOYED\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? data.problem?.name ?? 'playground'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: 'playground'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonUpdate={handleLaunchUpdate}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<code>{file.path}</code>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</LaunchEditor>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t</Await>\n\t\t\t\t\t\t\t\t</React.Suspense>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</Popover.Content>\n\t\t\t\t</Popover.Portal>\n\t\t\t</Popover.Root>\n\t\t</>\n\t)\n}\n\nexport default TouchedFiles\n","import { ElementScrollRestoration } from '@epic-web/restore-scroll'\nimport {\n\tgetAppDisplayName,\n\tgetAppPageRoute,\n\tgetApps,\n\tgetExerciseApp,\n\tgetNextExerciseApp,\n\tgetPrevExerciseApp,\n\tisExerciseStepApp,\n\tisPlaygroundApp,\n\trequireExercise,\n\trequireExerciseApp,\n\ttype App,\n\ttype ExerciseStepApp,\n} from '@epic-web/workshop-utils/apps.server'\nimport { getWorkshopConfig } from '@epic-web/workshop-utils/config.server'\nimport {\n\tcombineServerTimings,\n\tgetServerTimeHeader,\n\tmakeTimings,\n} from '@epic-web/workshop-utils/timing.server'\nimport {\n\tdefer,\n\tredirect,\n\ttype HeadersFunction,\n\ttype LoaderFunctionArgs,\n\ttype MetaFunction,\n\ttype SerializeFrom,\n} from '@remix-run/node'\nimport { Link, Outlet, useLoaderData } from '@remix-run/react'\nimport slugify from '@sindresorhus/slugify'\nimport { useRef } from 'react'\nimport { GeneralErrorBoundary } from '#app/components/error-boundary.tsx'\nimport { type InBrowserBrowserRef } from '#app/components/in-browser-browser.tsx'\nimport { NavChevrons } from '#app/components/nav-chevrons.tsx'\nimport { type loader as rootLoader } from '#app/root.tsx'\nimport { EditFileOnGitHub } from '#app/routes/launch-editor.tsx'\nimport { ProgressToggle } from '#app/routes/progress.tsx'\nimport { SetAppToPlayground } from '#app/routes/set-playground.tsx'\nimport { getDiffFiles } from '#app/utils/diff.server.js'\nimport { getEpicVideoInfos } from '#app/utils/epic-api.ts'\nimport { getSeoMetaTags } from '#app/utils/seo.js'\nimport { StepMdx } from './__shared/step-mdx.tsx'\nimport TouchedFiles from './__shared/touched-files.tsx'\n\nfunction pageTitle(\n\tdata: SerializeFrom<typeof loader> | undefined,\n\tworkshopTitle?: string,\n) {\n\tconst exerciseNumber =\n\t\tdata?.exerciseStepApp.exerciseNumber.toString().padStart(2, '0') ?? '00'\n\tconst stepNumber =\n\t\tdata?.exerciseStepApp.stepNumber.toString().padStart(2, '0') ?? '00'\n\tconst emoji = (\n\t\t{\n\t\t\tproblem: '💪',\n\t\t\tsolution: '🏁',\n\t\t} as const\n\t)[data?.type ?? 'problem']\n\tconst title = data?.[data.type]?.title ?? 'N/A'\n\treturn {\n\t\temoji,\n\t\tstepNumber,\n\t\ttitle,\n\t\texerciseNumber,\n\t\texerciseTitle: data?.exerciseTitle ?? 'Unknown exercise',\n\t\tworkshopTitle,\n\t\ttype: data?.type ?? 'problem',\n\t}\n}\n\nexport const meta: MetaFunction<typeof loader, { root: typeof rootLoader }> = ({\n\tdata,\n\tmatches,\n\tparams,\n}) => {\n\tconst rootData = matches.find((m) => m.id === 'root')?.data\n\tif (!data || !rootData) return [{ title: '🦉 | Error' }]\n\tconst { emoji, stepNumber, title, exerciseNumber, exerciseTitle } =\n\t\tpageTitle(data)\n\n\treturn getSeoMetaTags({\n\t\ttitle: `${emoji} | ${stepNumber}. ${title} | ${exerciseNumber}. ${exerciseTitle} | ${rootData.workshopTitle}`,\n\t\tdescription: `${params.type} step for exercise ${exerciseNumber}. ${exerciseTitle}`,\n\t\togTitle: title,\n\t\togDescription: `${exerciseTitle} step ${Number(stepNumber)} ${params.type}`,\n\t\tinstructor: rootData.instructor,\n\t\trequestInfo: rootData.requestInfo,\n\t})\n}\n\nexport async function loader({ request, params }: LoaderFunctionArgs) {\n\tconst timings = makeTimings('exerciseStepTypeLoader')\n\tconst url = new URL(request.url)\n\tconst { title: workshopTitle } = getWorkshopConfig()\n\tconst cacheOptions = { request, timings }\n\tconst exerciseStepApp = await requireExerciseApp(params, cacheOptions)\n\tconst exercise = await requireExercise(\n\t\texerciseStepApp.exerciseNumber,\n\t\tcacheOptions,\n\t)\n\tconst reqUrl = new URL(request.url)\n\n\tconst pathnameParam = reqUrl.searchParams.get('pathname')\n\tif (pathnameParam === '' || pathnameParam === '/') {\n\t\treqUrl.searchParams.delete('pathname')\n\t\tthrow redirect(reqUrl.toString())\n\t}\n\n\tconst problemApp = await getExerciseApp(\n\t\t{ ...params, type: 'problem' },\n\t\tcacheOptions,\n\t)\n\tconst solutionApp = await getExerciseApp(\n\t\t{ ...params, type: 'solution' },\n\t\tcacheOptions,\n\t)\n\n\tif (!problemApp && !solutionApp) {\n\t\tthrow new Response('Not found', { status: 404 })\n\t}\n\n\tconst allAppsFull = await getApps(cacheOptions)\n\tconst playgroundApp = allAppsFull.find(isPlaygroundApp)\n\n\tfunction getStepId(a: ExerciseStepApp) {\n\t\treturn (\n\t\t\ta.exerciseNumber * 1000 +\n\t\t\ta.stepNumber * 10 +\n\t\t\t(a.type === 'problem' ? 0 : 1)\n\t\t)\n\t}\n\n\tfunction getStepNameAndId(a: App) {\n\t\tif (isExerciseStepApp(a)) {\n\t\t\tconst exerciseNumberStr = String(a.exerciseNumber).padStart(2, '0')\n\t\t\tconst stepNumberStr = String(a.stepNumber).padStart(2, '0')\n\n\t\t\treturn {\n\t\t\t\tstepName: `${exerciseNumberStr}/${stepNumberStr}.${a.type}`,\n\t\t\t\tstepId: getStepId(a),\n\t\t\t}\n\t\t}\n\t\treturn { stepName: '', stepId: -1 }\n\t}\n\n\tconst allApps = allAppsFull\n\t\t.filter((a, i, ar) => ar.findIndex((b) => a.name === b.name) === i)\n\t\t.map((a) => ({\n\t\t\tdisplayName: getAppDisplayName(a, allAppsFull),\n\t\t\tname: a.name,\n\t\t\ttitle: a.title,\n\t\t\ttype: a.type,\n\t\t\t...getStepNameAndId(a),\n\t\t}))\n\n\tallApps.sort((a, b) => {\n\t\t// order them by their stepId\n\t\tif (a.stepId > 0 && b.stepId > 0) return a.stepId - b.stepId\n\n\t\t// non-step apps should come after step apps\n\t\tif (a.stepId > 0) return -1\n\t\tif (b.stepId > 0) return 1\n\n\t\treturn 0\n\t})\n\tconst exerciseId = getStepId(exerciseStepApp)\n\tconst exerciseIndex = allApps.findIndex((step) => step.stepId === exerciseId)\n\n\tconst exerciseApps = allAppsFull\n\t\t.filter(isExerciseStepApp)\n\t\t.filter((app) => app.exerciseNumber === exerciseStepApp.exerciseNumber)\n\tconst isLastStep =\n\t\texerciseApps[exerciseApps.length - 1]?.name === exerciseStepApp.name\n\tconst isFirstStep = exerciseApps[0]?.name === exerciseStepApp.name\n\n\tconst nextApp = await getNextExerciseApp(exerciseStepApp, cacheOptions)\n\tconst prevApp = await getPrevExerciseApp(exerciseStepApp, cacheOptions)\n\n\tconst articleId = `workshop-${slugify(workshopTitle)}-${\n\t\texercise.exerciseNumber\n\t}-${exerciseStepApp.stepNumber}-${exerciseStepApp.type}`\n\n\tconst subroute = url.pathname.split(\n\t\t`/exercise/${params.exerciseNumber}/${params.stepNumber}/${params.type}/`,\n\t)[1]\n\treturn defer(\n\t\t{\n\t\t\tarticleId,\n\t\t\ttype: params.type as 'problem' | 'solution',\n\t\t\texerciseStepApp,\n\t\t\texerciseTitle: exercise.title,\n\t\t\tepicVideoInfosPromise: getEpicVideoInfos(exerciseStepApp.epicVideoEmbeds),\n\t\t\texerciseIndex,\n\t\t\tallApps,\n\t\t\tprevStepLink: isFirstStep\n\t\t\t\t? {\n\t\t\t\t\t\tto: `/exercise/${exerciseStepApp.exerciseNumber\n\t\t\t\t\t\t\t.toString()\n\t\t\t\t\t\t\t.padStart(2, '0')}`,\n\t\t\t\t\t}\n\t\t\t\t: prevApp\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tto: getAppPageRoute(prevApp, {\n\t\t\t\t\t\t\t\tsubroute,\n\t\t\t\t\t\t\t\tsearchParams: url.searchParams,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t}\n\t\t\t\t\t: null,\n\t\t\tnextStepLink: isLastStep\n\t\t\t\t? {\n\t\t\t\t\t\tto: `/exercise/${exerciseStepApp.exerciseNumber\n\t\t\t\t\t\t\t.toString()\n\t\t\t\t\t\t\t.padStart(2, '0')}/finished`,\n\t\t\t\t\t}\n\t\t\t\t: nextApp\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tto: getAppPageRoute(nextApp, {\n\t\t\t\t\t\t\t\tsubroute,\n\t\t\t\t\t\t\t\tsearchParams: url.searchParams,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t}\n\t\t\t\t\t: null,\n\t\t\tplayground: playgroundApp\n\t\t\t\t? ({\n\t\t\t\t\t\ttype: 'playground',\n\t\t\t\t\t\tappName: playgroundApp.appName,\n\t\t\t\t\t\tname: playgroundApp.name,\n\t\t\t\t\t\tfullPath: playgroundApp.fullPath,\n\t\t\t\t\t\tdev: playgroundApp.dev,\n\t\t\t\t\t} as const)\n\t\t\t\t: null,\n\t\t\tproblem: problemApp\n\t\t\t\t? ({\n\t\t\t\t\t\ttype: 'problem',\n\t\t\t\t\t\ttitle: problemApp.title,\n\t\t\t\t\t\tname: problemApp.name,\n\t\t\t\t\t\tfullPath: problemApp.fullPath,\n\t\t\t\t\t\tdev: problemApp.dev,\n\t\t\t\t\t} as const)\n\t\t\t\t: null,\n\t\t\tsolution: solutionApp\n\t\t\t\t? ({\n\t\t\t\t\t\ttype: 'solution',\n\t\t\t\t\t\ttitle: solutionApp.title,\n\t\t\t\t\t\tname: solutionApp.name,\n\t\t\t\t\t\tfullPath: solutionApp.fullPath,\n\t\t\t\t\t\tdev: solutionApp.dev,\n\t\t\t\t\t} as const)\n\t\t\t\t: null,\n\t\t\tdiffFiles:\n\t\t\t\tproblemApp && solutionApp\n\t\t\t\t\t? getDiffFiles(problemApp, solutionApp, {\n\t\t\t\t\t\t\t...cacheOptions,\n\t\t\t\t\t\t\tforceFresh: url.searchParams.get('forceFresh') === 'diff',\n\t\t\t\t\t\t}).catch((e) => {\n\t\t\t\t\t\t\tconsole.error(e)\n\t\t\t\t\t\t\treturn 'There was a problem generating the diff (check the terminal output)'\n\t\t\t\t\t\t})\n\t\t\t\t\t: 'No diff available',\n\t\t} as const,\n\t\t{\n\t\t\theaders: {\n\t\t\t\t'Server-Timing': getServerTimeHeader(timings),\n\t\t\t},\n\t\t},\n\t)\n}\n\nexport const headers: HeadersFunction = ({ loaderHeaders, parentHeaders }) => {\n\tconst headers = {\n\t\t'Server-Timing': combineServerTimings(loaderHeaders, parentHeaders),\n\t}\n\treturn headers\n}\n\nexport default function ExercisePartRoute() {\n\tconst data = useLoaderData<typeof loader>()\n\n\tconst inBrowserBrowserRef = useRef<InBrowserBrowserRef>(null)\n\n\tconst titleBits = pageTitle(data)\n\n\treturn (\n\t\t<div className=\"flex max-w-full flex-grow flex-col\">\n\t\t\t<main className=\"flex flex-grow flex-col sm:grid sm:h-full sm:min-h-[800px] sm:grid-cols-1 sm:grid-rows-2 md:min-h-[unset] lg:grid-cols-2 lg:grid-rows-1\">\n\t\t\t\t<div className=\"relative flex flex-col sm:col-span-1 sm:row-span-1 sm:h-full lg:border-r\">\n\t\t\t\t\t<h1 className=\"h-14 border-b pl-10 pr-5 text-sm font-medium leading-tight\">\n\t\t\t\t\t\t<div className=\"flex h-14 flex-wrap items-center justify-between gap-x-2 py-2\">\n\t\t\t\t\t\t\t<div className=\"flex items-center justify-start gap-x-2 uppercase\">\n\t\t\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\t\t\tto={`/${titleBits.exerciseNumber}`}\n\t\t\t\t\t\t\t\t\tclassName=\"hover:underline\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{titleBits.exerciseNumber}. {titleBits.exerciseTitle}\n\t\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t\t\t{'/'}\n\t\t\t\t\t\t\t\t<Link to=\".\" className=\"hover:underline\">\n\t\t\t\t\t\t\t\t\t{titleBits.stepNumber}. {titleBits.title}\n\t\t\t\t\t\t\t\t\t{' ('}\n\t\t\t\t\t\t\t\t\t{titleBits.emoji} {titleBits.type}\n\t\t\t\t\t\t\t\t\t{')'}\n\t\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t{data.problem &&\n\t\t\t\t\t\t\tdata.playground?.appName !== data.problem.name ? (\n\t\t\t\t\t\t\t\t<div className=\"hidden md:block\">\n\t\t\t\t\t\t\t\t\t<SetAppToPlayground appName={data.problem.name} />\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</h1>\n\t\t\t\t\t<article\n\t\t\t\t\t\tid={data.articleId}\n\t\t\t\t\t\tkey={data.articleId}\n\t\t\t\t\t\tclassName=\"shadow-on-scrollbox flex h-full w-full max-w-none flex-1 scroll-pt-6 flex-col justify-between space-y-6 overflow-y-auto p-2 scrollbar-thin scrollbar-thumb-scrollbar sm:p-10 sm:pt-8\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{data.exerciseStepApp.instructionsCode ? (\n\t\t\t\t\t\t\t<StepMdx inBrowserBrowserRef={inBrowserBrowserRef} />\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<div className=\"flex h-full items-center justify-center text-lg\">\n\t\t\t\t\t\t\t\t<p>No instructions yet...</p>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t<div className=\"mt-auto flex justify-between\">\n\t\t\t\t\t\t\t{data.prevStepLink ? (\n\t\t\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\t\t\tto={data.prevStepLink.to}\n\t\t\t\t\t\t\t\t\taria-label=\"Previous Step\"\n\t\t\t\t\t\t\t\t\tprefetch=\"intent\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t← Previous\n\t\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<span />\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{data.nextStepLink ? (\n\t\t\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\t\t\tto={data.nextStepLink.to}\n\t\t\t\t\t\t\t\t\taria-label=\"Next Step\"\n\t\t\t\t\t\t\t\t\tprefetch=\"intent\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\tNext →\n\t\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<span />\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</article>\n\t\t\t\t\t<ElementScrollRestoration\n\t\t\t\t\t\telementQuery={`#${data.articleId}`}\n\t\t\t\t\t\tkey={`scroll-${data.articleId}`}\n\t\t\t\t\t/>\n\t\t\t\t\t{data.type === 'solution' ? (\n\t\t\t\t\t\t<ProgressToggle\n\t\t\t\t\t\t\ttype=\"step\"\n\t\t\t\t\t\t\texerciseNumber={data.exerciseStepApp.exerciseNumber}\n\t\t\t\t\t\t\tstepNumber={data.exerciseStepApp.stepNumber}\n\t\t\t\t\t\t\tclassName=\"h-14 border-t px-6\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t) : null}\n\t\t\t\t\t<div className=\"flex h-16 justify-between border-b-4 border-t lg:border-b-0\">\n\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t<div className=\"h-full\">\n\t\t\t\t\t\t\t\t<TouchedFiles diffFilesPromise={data.diffFiles} />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<EditFileOnGitHub\n\t\t\t\t\t\t\tappName={data.exerciseStepApp.name}\n\t\t\t\t\t\t\trelativePath={data.exerciseStepApp.relativePath}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<NavChevrons\n\t\t\t\t\t\t\tprev={\n\t\t\t\t\t\t\t\tdata.prevStepLink\n\t\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t\t\tto: data.prevStepLink.to,\n\t\t\t\t\t\t\t\t\t\t\t'aria-label': 'Previous Step',\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tnext={\n\t\t\t\t\t\t\t\tdata.nextStepLink\n\t\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t\t\tto: data.nextStepLink.to,\n\t\t\t\t\t\t\t\t\t\t\t'aria-label': 'Next Step',\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<Outlet />\n\t\t\t</main>\n\t\t</div>\n\t)\n}\n\nexport function ErrorBoundary() {\n\treturn (\n\t\t<GeneralErrorBoundary\n\t\t\tstatusHandlers={{\n\t\t\t\t404: () => <p>Sorry, we couldn't find an app here.</p>,\n\t\t\t}}\n\t\t/>\n\t)\n}\n"],"names":["UpdateMdxCache","handleClick","cacheLocation","embeddedKey","appFullPath","fetcher","useFetcher","peRedirectInput","usePERedirectInput","Form","action","method","children","showProgressBarField","type","name","value","jsx","onClick","className","clsx","state","StepContext","React.createContext","useStepContext","context","React.useContext","StepContextProvider","inBrowserBrowserRef","stepMdxComponents","CodeFile","CodeFileNotification","DiffLink","PrevDiffLink","NextDiffLink","InlineFile","LinkToApp","StepMdx","data","useLoaderData","EpicVideoInfoProvider","Mdx","withParam","searchParams","key","newSearchParams","app","fullPage","app1","app2","to","getAppName","input","stepIndex","_a","stepName","params","app1Name","app2Name","jsxs","pathToDiff","Link","file","variant","props","visibility","setVisibility","useState","LaunchEditor","info","SimpleTooltip","getPreviewType","preview","appTo","useSearchParams","requestInfo","useRequestInfo","previewAppUrl","getBaseUrl","href","cn","event","_b","Icon","POPOVER_NAME","createPopoverContext","createPopoverScope","createContextScope","createPopperScope","usePopperScope","PopoverProvider","usePopoverContext","Popover","__scopePopover","openProp","defaultOpen","onOpenChange","modal","popperScope","triggerRef","React.useRef","hasCustomAnchor","setHasCustomAnchor","React.useState","open","setOpen","useControllableState","PopperPrimitive.Root","useId","React.useCallback","prevOpen","ANCHOR_NAME","PopoverAnchor","React.forwardRef","forwardedRef","anchorProps","onCustomAnchorAdd","onCustomAnchorRemove","React.useEffect","PopperPrimitive.Anchor","TRIGGER_NAME","PopoverTrigger","triggerProps","composedTriggerRef","useComposedRefs","trigger","Primitive","getState","composeEventHandlers","PORTAL_NAME","PortalProvider","usePortalContext","PopoverPortal","forceMount","container","Presence","PortalPrimitive","CONTENT_NAME","PopoverContent","portalContext","contentProps","PopoverContentModal","PopoverContentNonModal","contentRef","composedRefs","isRightClickOutsideRef","content","hideOthers","RemoveScroll","Slot","PopoverContentImpl","originalEvent","ctrlLeftClick","isRightClick","hasInteractedOutsideRef","hasPointerDownOutsideRef","target","trapFocus","onOpenAutoFocus","onCloseAutoFocus","disableOutsidePointerEvents","onEscapeKeyDown","onPointerDownOutside","onFocusOutside","onInteractOutside","useFocusGuards","FocusScope","DismissableLayer","PopperPrimitive.Content","CLOSE_NAME","PopoverClose","closeProps","ARROW_NAME","PopoverArrow","arrowProps","PopperPrimitive.Arrow","Root2","Trigger","Portal","Content2","TouchedFiles","diffFilesPromise","handleLaunchUpdate","appName","Popover.Root","Popover.Trigger","Popover.Portal","Popover.Content","SetAppToPlayground","React.Suspense","Await","diffFiles","pageTitle","workshopTitle","exerciseNumber","exerciseStepApp","toString","padStart","stepNumber","emoji","problem","solution","title","exerciseTitle","meta","matches","rootData","find","m","id","getSeoMetaTags","description","ogTitle","ogDescription","Number","instructor","ExercisePartRoute","useRef","titleBits","playground","articleId","instructionsCode","prevStepLink","prefetch","nextStepLink","ElementScrollRestoration","elementQuery","ProgressToggle","EditFileOnGitHub","relativePath","NavChevrons","prev","next","Outlet","ErrorBoundary","GeneralErrorBoundary","statusHandlers"],"mappings":"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","x_google_ignoreList":[2]}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{r as t,j as s}from"./index-2WpY3jqc.js";import{P as e}from"./preview-BbJZ7UrX.js";import{u as i}from"./components-BQB6wEvm.js";import"./misc-LevbAJZ6.js";import"./request-info-D6MPpnDd.js";import"./button-DataaIpW.js";import"./loading-DXKqMYHW.js";import"./index-TIHEbU65.js";import"./tooltip-Blm9zu1K.js";import"./pe-BmTNRcy_.js";import"./progress-bar-HYCoNAkN.js";function R(){const{appInfo:r}=i(),o=t.useRef(null);return s.jsx(e,{appInfo:r,inBrowserBrowserRef:o})}export{R as default};
|
|
2
|
-
//# sourceMappingURL=app-DAWCzuDw.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{c as o,j as r}from"./index-2WpY3jqc.js";import{d as e,a as m}from"./misc-LevbAJZ6.js";import{D as p}from"./diff-BWSOt7tL.js";import{N as n}from"./nav-chevrons-BB1CK34B.js";import{u as f,b as c}from"./components-BQB6wEvm.js";import"./accordion-B-gQ5Whz.js";import"./tooltip-Blm9zu1K.js";import"./index-aPMCrDDW.js";import"./index-bM_TIo_p.js";import"./mdx-D0cZm8uP.js";import"./epic-video-D8tfMIv8.js";import"./index-TIHEbU65.js";import"./request-info-D6MPpnDd.js";import"./pe-BmTNRcy_.js";import"./loading-DXKqMYHW.js";import"./user-2ca9K5af.js";import"./workshop-config-COvWTBns.js";import"./progress-bar-HYCoNAkN.js";function E(){const i=f(),[s]=c();new URLSearchParams(s).set("forceFresh","diff");const t=o(),a=e.useSpinDelay(t.state!=="idle",{delay:200,minDuration:200});return r.jsxs("div",{className:m("grid h-full grid-rows-[1fr,auto]",{"cursor-wait opacity-30":a}),children:[r.jsx("div",{className:"overflow-y-auto",children:r.jsx(p,{diff:i.diff,allApps:i.allApps})}),r.jsx("div",{className:"flex h-16 items-center justify-end border-t",children:r.jsx(n,{prev:i.prevLink,next:i.nextLink})})]})}export{E as default};
|
|
2
|
-
//# sourceMappingURL=diff-JWdZCc2F.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"discord-BqGuuhG3.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
function Wr(e,t){for(var r=0;r<t.length;r++){const n=t[r];if(typeof n!="string"&&!Array.isArray(n)){for(const a in n)if(a!=="default"&&!(a in e)){const u=Object.getOwnPropertyDescriptor(n,a);u&&Object.defineProperty(e,a,u.get?u:{enumerable:!0,get:()=>n[a]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}var fa=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function Jr(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var pr={exports:{}},pt={};/**
|
|
2
|
-
* @license React
|
|
3
|
-
* react-jsx-runtime.production.js
|
|
4
|
-
*
|
|
5
|
-
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
6
|
-
*
|
|
7
|
-
* This source code is licensed under the MIT license found in the
|
|
8
|
-
* LICENSE file in the root directory of this source tree.
|
|
9
|
-
*/var Vr=Symbol.for("react.transitional.element"),Gr=Symbol.for("react.fragment");function mr(e,t,r){var n=null;if(r!==void 0&&(n=""+r),t.key!==void 0&&(n=""+t.key),"key"in t){r={};for(var a in t)a!=="key"&&(r[a]=t[a])}else r=t;return t=r.ref,{$$typeof:Vr,type:e,key:n,ref:t!==void 0?t:null,props:r}}pt.Fragment=Gr;pt.jsx=mr;pt.jsxs=mr;pr.exports=pt;var ha=pr.exports,Rt={exports:{}},U={};/**
|
|
10
|
-
* @license React
|
|
11
|
-
* react.production.js
|
|
12
|
-
*
|
|
13
|
-
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
14
|
-
*
|
|
15
|
-
* This source code is licensed under the MIT license found in the
|
|
16
|
-
* LICENSE file in the root directory of this source tree.
|
|
17
|
-
*/var Gt;function qr(){if(Gt)return U;Gt=1;var e=Symbol.for("react.transitional.element"),t=Symbol.for("react.portal"),r=Symbol.for("react.fragment"),n=Symbol.for("react.strict_mode"),a=Symbol.for("react.profiler"),u=Symbol.for("react.consumer"),l=Symbol.for("react.context"),f=Symbol.for("react.forward_ref"),c=Symbol.for("react.suspense"),y=Symbol.for("react.memo"),g=Symbol.for("react.lazy"),h=Symbol.iterator;function E(i){return i===null||typeof i!="object"?null:(i=h&&i[h]||i["@@iterator"],typeof i=="function"?i:null)}var N={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},C=Object.assign,x={};function D(i,v,M){this.props=i,this.context=v,this.refs=x,this.updater=M||N}D.prototype.isReactComponent={},D.prototype.setState=function(i,v){if(typeof i!="object"&&typeof i!="function"&&i!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,i,v,"setState")},D.prototype.forceUpdate=function(i){this.updater.enqueueForceUpdate(this,i,"forceUpdate")};function W(){}W.prototype=D.prototype;function k(i,v,M){this.props=i,this.context=v,this.refs=x,this.updater=M||N}var ee=k.prototype=new W;ee.constructor=k,C(ee,D.prototype),ee.isPureReactComponent=!0;var ae=Array.isArray,B={H:null,A:null,T:null},p=Object.prototype.hasOwnProperty;function le(i,v,M,j,T,Y,L){return M=L.ref,{$$typeof:e,type:i,key:v,ref:M!==void 0?M:null,props:L}}function ve(i,v){return le(i.type,v,null,void 0,void 0,void 0,i.props)}function z(i){return typeof i=="object"&&i!==null&&i.$$typeof===e}function se(i){var v={"=":"=0",":":"=2"};return"$"+i.replace(/[=:]/g,function(M){return v[M]})}var te=/\/+/g;function ce(i,v){return typeof i=="object"&&i!==null&&i.key!=null?se(""+i.key):v.toString(36)}function fe(){}function oe(i){switch(i.status){case"fulfilled":return i.value;case"rejected":throw i.reason;default:switch(typeof i.status=="string"?i.then(fe,fe):(i.status="pending",i.then(function(v){i.status==="pending"&&(i.status="fulfilled",i.value=v)},function(v){i.status==="pending"&&(i.status="rejected",i.reason=v)})),i.status){case"fulfilled":return i.value;case"rejected":throw i.reason}}throw i}function he(i,v,M,j,T){var Y=typeof i;(Y==="undefined"||Y==="boolean")&&(i=null);var L=!1;if(i===null)L=!0;else switch(Y){case"bigint":case"string":case"number":L=!0;break;case"object":switch(i.$$typeof){case e:case t:L=!0;break;case g:return L=i._init,he(L(i._payload),v,M,j,T)}}if(L)return T=T(i),L=j===""?"."+ce(i,0):j,ae(T)?(M="",L!=null&&(M=L.replace(te,"$&/")+"/"),he(T,v,M,"",function(gt){return gt})):T!=null&&(z(T)&&(T=ve(T,M+(!T.key||i&&i.key===T.key?"":(""+T.key).replace(te,"$&/")+"/")+L)),v.push(T)),1;L=0;var be=j===""?".":j+":";if(ae(i))for(var X=0;X<i.length;X++)j=i[X],Y=be+ce(j,X),L+=he(j,v,M,Y,T);else if(X=E(i),typeof X=="function")for(i=X.call(i),X=0;!(j=i.next()).done;)j=j.value,Y=be+ce(j,X++),L+=he(j,v,M,Y,T);else if(Y==="object"){if(typeof i.then=="function")return he(oe(i),v,M,j,T);throw v=String(i),Error("Objects are not valid as a React child (found: "+(v==="[object Object]"?"object with keys {"+Object.keys(i).join(", ")+"}":v)+"). If you meant to render a collection of children, use an array instead.")}return L}function we(i,v,M){if(i==null)return i;var j=[],T=0;return he(i,j,"","",function(Y){return v.call(M,Y,T++)}),j}function Q(i){if(i._status===-1){var v=i._result;v=v(),v.then(function(M){(i._status===0||i._status===-1)&&(i._status=1,i._result=M)},function(M){(i._status===0||i._status===-1)&&(i._status=2,i._result=M)}),i._status===-1&&(i._status=0,i._result=v)}if(i._status===1)return i._result.default;throw i._result}var je=typeof reportError=="function"?reportError:function(i){if(typeof window=="object"&&typeof window.ErrorEvent=="function"){var v=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:typeof i=="object"&&i!==null&&typeof i.message=="string"?String(i.message):String(i),error:i});if(!window.dispatchEvent(v))return}else if(typeof process=="object"&&typeof process.emit=="function"){process.emit("uncaughtException",i);return}console.error(i)};function Oe(){}return U.Children={map:we,forEach:function(i,v,M){we(i,function(){v.apply(this,arguments)},M)},count:function(i){var v=0;return we(i,function(){v++}),v},toArray:function(i){return we(i,function(v){return v})||[]},only:function(i){if(!z(i))throw Error("React.Children.only expected to receive a single React element child.");return i}},U.Component=D,U.Fragment=r,U.Profiler=a,U.PureComponent=k,U.StrictMode=n,U.Suspense=c,U.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=B,U.act=function(){throw Error("act(...) is not supported in production builds of React.")},U.cache=function(i){return function(){return i.apply(null,arguments)}},U.cloneElement=function(i,v,M){if(i==null)throw Error("The argument must be a React element, but you passed "+i+".");var j=C({},i.props),T=i.key,Y=void 0;if(v!=null)for(L in v.ref!==void 0&&(Y=void 0),v.key!==void 0&&(T=""+v.key),v)!p.call(v,L)||L==="key"||L==="__self"||L==="__source"||L==="ref"&&v.ref===void 0||(j[L]=v[L]);var L=arguments.length-2;if(L===1)j.children=M;else if(1<L){for(var be=Array(L),X=0;X<L;X++)be[X]=arguments[X+2];j.children=be}return le(i.type,T,null,void 0,void 0,Y,j)},U.createContext=function(i){return i={$$typeof:l,_currentValue:i,_currentValue2:i,_threadCount:0,Provider:null,Consumer:null},i.Provider=i,i.Consumer={$$typeof:u,_context:i},i},U.createElement=function(i,v,M){var j,T={},Y=null;if(v!=null)for(j in v.key!==void 0&&(Y=""+v.key),v)p.call(v,j)&&j!=="key"&&j!=="__self"&&j!=="__source"&&(T[j]=v[j]);var L=arguments.length-2;if(L===1)T.children=M;else if(1<L){for(var be=Array(L),X=0;X<L;X++)be[X]=arguments[X+2];T.children=be}if(i&&i.defaultProps)for(j in L=i.defaultProps,L)T[j]===void 0&&(T[j]=L[j]);return le(i,Y,null,void 0,void 0,null,T)},U.createRef=function(){return{current:null}},U.forwardRef=function(i){return{$$typeof:f,render:i}},U.isValidElement=z,U.lazy=function(i){return{$$typeof:g,_payload:{_status:-1,_result:i},_init:Q}},U.memo=function(i,v){return{$$typeof:y,type:i,compare:v===void 0?null:v}},U.startTransition=function(i){var v=B.T,M=new Set;B.T={_callbacks:M};var j=B.T;try{var T=i();typeof T=="object"&&T!==null&&typeof T.then=="function"&&(M.forEach(function(Y){return Y(j,T)}),T.then(Oe,je))}catch(Y){je(Y)}finally{B.T=v}},U.unstable_useCacheRefresh=function(){return B.H.useCacheRefresh()},U.use=function(i){return B.H.use(i)},U.useActionState=function(i,v,M){return B.H.useActionState(i,v,M)},U.useCallback=function(i,v){return B.H.useCallback(i,v)},U.useContext=function(i){return B.H.useContext(i)},U.useDebugValue=function(){},U.useDeferredValue=function(i,v){return B.H.useDeferredValue(i,v)},U.useEffect=function(i,v){return B.H.useEffect(i,v)},U.useId=function(){return B.H.useId()},U.useImperativeHandle=function(i,v,M){return B.H.useImperativeHandle(i,v,M)},U.useInsertionEffect=function(i,v){return B.H.useInsertionEffect(i,v)},U.useLayoutEffect=function(i,v){return B.H.useLayoutEffect(i,v)},U.useMemo=function(i,v){return B.H.useMemo(i,v)},U.useOptimistic=function(i,v){return B.H.useOptimistic(i,v)},U.useReducer=function(i,v,M){return B.H.useReducer(i,v,M)},U.useRef=function(i){return B.H.useRef(i)},U.useState=function(i){return B.H.useState(i)},U.useSyncExternalStore=function(i,v,M){return B.H.useSyncExternalStore(i,v,M)},U.useTransition=function(){return B.H.useTransition()},U.version="19.0.0-rc-f994737d14-20240522",U}var qt;function Xr(){return qt||(qt=1,Rt.exports=qr()),Rt.exports}var w=Xr();const Qr=Jr(w),pa=Wr({__proto__:null,default:Qr},[w]);/**
|
|
18
|
-
* @remix-run/router v1.17.0
|
|
19
|
-
*
|
|
20
|
-
* Copyright (c) Remix Software Inc.
|
|
21
|
-
*
|
|
22
|
-
* This source code is licensed under the MIT license found in the
|
|
23
|
-
* LICENSE.md file in the root directory of this source tree.
|
|
24
|
-
*
|
|
25
|
-
* @license MIT
|
|
26
|
-
*/function q(){return q=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},q.apply(this,arguments)}var ne;(function(e){e.Pop="POP",e.Push="PUSH",e.Replace="REPLACE"})(ne||(ne={}));const Xt="popstate";function ma(e){e===void 0&&(e={});function t(n,a){let{pathname:u,search:l,hash:f}=n.location;return Ze("",{pathname:u,search:l,hash:f},a.state&&a.state.usr||null,a.state&&a.state.key||"default")}function r(n,a){return typeof a=="string"?a:tt(a)}return en(t,r,null,e)}function F(e,t){if(e===!1||e===null||typeof e>"u")throw new Error(t)}function $e(e,t){if(!e){typeof console<"u"&&console.warn(t);try{throw new Error(t)}catch{}}}function Zr(){return Math.random().toString(36).substr(2,8)}function Qt(e,t){return{usr:e.state,key:e.key,idx:t}}function Ze(e,t,r,n){return r===void 0&&(r=null),q({pathname:typeof e=="string"?e:e.pathname,search:"",hash:""},typeof t=="string"?Te(t):t,{state:r,key:t&&t.key||n||Zr()})}function tt(e){let{pathname:t="/",search:r="",hash:n=""}=e;return r&&r!=="?"&&(t+=r.charAt(0)==="?"?r:"?"+r),n&&n!=="#"&&(t+=n.charAt(0)==="#"?n:"#"+n),t}function Te(e){let t={};if(e){let r=e.indexOf("#");r>=0&&(t.hash=e.substr(r),e=e.substr(0,r));let n=e.indexOf("?");n>=0&&(t.search=e.substr(n),e=e.substr(0,n)),e&&(t.pathname=e)}return t}function en(e,t,r,n){n===void 0&&(n={});let{window:a=document.defaultView,v5Compat:u=!1}=n,l=a.history,f=ne.Pop,c=null,y=g();y==null&&(y=0,l.replaceState(q({},l.state,{idx:y}),""));function g(){return(l.state||{idx:null}).idx}function h(){f=ne.Pop;let D=g(),W=D==null?null:D-y;y=D,c&&c({action:f,location:x.location,delta:W})}function E(D,W){f=ne.Push;let k=Ze(x.location,D,W);y=g()+1;let ee=Qt(k,y),ae=x.createHref(k);try{l.pushState(ee,"",ae)}catch(B){if(B instanceof DOMException&&B.name==="DataCloneError")throw B;a.location.assign(ae)}u&&c&&c({action:f,location:x.location,delta:1})}function N(D,W){f=ne.Replace;let k=Ze(x.location,D,W);y=g();let ee=Qt(k,y),ae=x.createHref(k);l.replaceState(ee,"",ae),u&&c&&c({action:f,location:x.location,delta:0})}function C(D){let W=a.location.origin!=="null"?a.location.origin:a.location.href,k=typeof D=="string"?D:tt(D);return k=k.replace(/ $/,"%20"),F(W,"No window.location.(origin|href) available to create URL for href: "+k),new URL(k,W)}let x={get action(){return f},get location(){return e(a,l)},listen(D){if(c)throw new Error("A history only accepts one active listener");return a.addEventListener(Xt,h),c=D,()=>{a.removeEventListener(Xt,h),c=null}},createHref(D){return t(a,D)},createURL:C,encodeLocation(D){let W=C(D);return{pathname:W.pathname,search:W.search,hash:W.hash}},push:E,replace:N,go(D){return l.go(D)}};return x}var G;(function(e){e.data="data",e.deferred="deferred",e.redirect="redirect",e.error="error"})(G||(G={}));const tn=new Set(["lazy","caseSensitive","path","id","index","children"]);function rn(e){return e.index===!0}function et(e,t,r,n){return r===void 0&&(r=[]),n===void 0&&(n={}),e.map((a,u)=>{let l=[...r,String(u)],f=typeof a.id=="string"?a.id:l.join("-");if(F(a.index!==!0||!a.children,"Cannot specify children on an index route"),F(!n[f],'Found a route id collision on id "'+f+`". Route id's must be globally unique within Data Router usages`),rn(a)){let c=q({},a,t(a),{id:f});return n[f]=c,c}else{let c=q({},a,t(a),{id:f,children:void 0});return n[f]=c,a.children&&(c.children=et(a.children,t,l,n)),c}})}function Ue(e,t,r){return r===void 0&&(r="/"),dt(e,t,r,!1)}function dt(e,t,r,n){let a=typeof t=="string"?Te(t):t,u=rt(a.pathname||"/",r);if(u==null)return null;let l=gr(e);nn(l);let f=null;for(let c=0;f==null&&c<l.length;++c){let y=mn(u);f=hn(l[c],y,n)}return f}function vr(e,t){let{route:r,pathname:n,params:a}=e;return{id:r.id,pathname:n,params:a,data:t[r.id],handle:r.handle}}function gr(e,t,r,n){t===void 0&&(t=[]),r===void 0&&(r=[]),n===void 0&&(n="");let a=(u,l,f)=>{let c={relativePath:f===void 0?u.path||"":f,caseSensitive:u.caseSensitive===!0,childrenIndex:l,route:u};c.relativePath.startsWith("/")&&(F(c.relativePath.startsWith(n),'Absolute route path "'+c.relativePath+'" nested under path '+('"'+n+'" is not valid. An absolute child route path ')+"must start with the combined path of all its parent routes."),c.relativePath=c.relativePath.slice(n.length));let y=Se([n,c.relativePath]),g=r.concat(c);u.children&&u.children.length>0&&(F(u.index!==!0,"Index routes must not have child routes. Please remove "+('all child routes from route path "'+y+'".')),gr(u.children,t,g,y)),!(u.path==null&&!u.index)&&t.push({path:y,score:dn(y,u.index),routesMeta:g})};return e.forEach((u,l)=>{var f;if(u.path===""||!((f=u.path)!=null&&f.includes("?")))a(u,l);else for(let c of yr(u.path))a(u,l,c)}),t}function yr(e){let t=e.split("/");if(t.length===0)return[];let[r,...n]=t,a=r.endsWith("?"),u=r.replace(/\?$/,"");if(n.length===0)return a?[u,""]:[u];let l=yr(n.join("/")),f=[];return f.push(...l.map(c=>c===""?u:[u,c].join("/"))),a&&f.push(...l),f.map(c=>e.startsWith("/")&&c===""?"/":c)}function nn(e){e.sort((t,r)=>t.score!==r.score?r.score-t.score:fn(t.routesMeta.map(n=>n.childrenIndex),r.routesMeta.map(n=>n.childrenIndex)))}const an=/^:[\w-]+$/,on=3,ln=2,sn=1,un=10,cn=-2,Zt=e=>e==="*";function dn(e,t){let r=e.split("/"),n=r.length;return r.some(Zt)&&(n+=cn),t&&(n+=ln),r.filter(a=>!Zt(a)).reduce((a,u)=>a+(an.test(u)?on:u===""?sn:un),n)}function fn(e,t){return e.length===t.length&&e.slice(0,-1).every((n,a)=>n===t[a])?e[e.length-1]-t[t.length-1]:0}function hn(e,t,r){r===void 0&&(r=!1);let{routesMeta:n}=e,a={},u="/",l=[];for(let f=0;f<n.length;++f){let c=n[f],y=f===n.length-1,g=u==="/"?t:t.slice(u.length)||"/",h=er({path:c.relativePath,caseSensitive:c.caseSensitive,end:y},g),E=c.route;if(!h&&y&&r&&!n[n.length-1].route.index&&(h=er({path:c.relativePath,caseSensitive:c.caseSensitive,end:!1},g)),!h)return null;Object.assign(a,h.params),l.push({params:a,pathname:Se([u,h.pathname]),pathnameBase:yn(Se([u,h.pathnameBase])),route:E}),h.pathnameBase!=="/"&&(u=Se([u,h.pathnameBase]))}return l}function er(e,t){typeof e=="string"&&(e={path:e,caseSensitive:!1,end:!0});let[r,n]=pn(e.path,e.caseSensitive,e.end),a=t.match(r);if(!a)return null;let u=a[0],l=u.replace(/(.)\/+$/,"$1"),f=a.slice(1);return{params:n.reduce((y,g,h)=>{let{paramName:E,isOptional:N}=g;if(E==="*"){let x=f[h]||"";l=u.slice(0,u.length-x.length).replace(/(.)\/+$/,"$1")}const C=f[h];return N&&!C?y[E]=void 0:y[E]=(C||"").replace(/%2F/g,"/"),y},{}),pathname:u,pathnameBase:l,pattern:e}}function pn(e,t,r){t===void 0&&(t=!1),r===void 0&&(r=!0),$e(e==="*"||!e.endsWith("*")||e.endsWith("/*"),'Route path "'+e+'" will be treated as if it were '+('"'+e.replace(/\*$/,"/*")+'" because the `*` character must ')+"always follow a `/` in the pattern. To get rid of this warning, "+('please change the route path to "'+e.replace(/\*$/,"/*")+'".'));let n=[],a="^"+e.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(l,f,c)=>(n.push({paramName:f,isOptional:c!=null}),c?"/?([^\\/]+)?":"/([^\\/]+)"));return e.endsWith("*")?(n.push({paramName:"*"}),a+=e==="*"||e==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):r?a+="\\/*$":e!==""&&e!=="/"&&(a+="(?:(?=\\/|$))"),[new RegExp(a,t?void 0:"i"),n]}function mn(e){try{return e.split("/").map(t=>decodeURIComponent(t).replace(/\//g,"%2F")).join("/")}catch(t){return $e(!1,'The URL path "'+e+'" could not be decoded because it is is a malformed URL segment. This is probably due to a bad percent '+("encoding ("+t+").")),e}}function rt(e,t){if(t==="/")return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let r=t.endsWith("/")?t.length-1:t.length,n=e.charAt(r);return n&&n!=="/"?null:e.slice(r)||"/"}function vn(e,t){t===void 0&&(t="/");let{pathname:r,search:n="",hash:a=""}=typeof e=="string"?Te(e):e;return{pathname:r?r.startsWith("/")?r:gn(r,t):t,search:En(n),hash:bn(a)}}function gn(e,t){let r=t.replace(/\/+$/,"").split("/");return e.split("/").forEach(a=>{a===".."?r.length>1&&r.pop():a!=="."&&r.push(a)}),r.length>1?r.join("/"):"/"}function wt(e,t,r,n){return"Cannot include a '"+e+"' character in a manually specified "+("`to."+t+"` field ["+JSON.stringify(n)+"]. Please separate it out to the ")+("`to."+r+"` field. Alternatively you may provide the full path as ")+'a string in <Link to="..."> and the router will parse it for you.'}function Er(e){return e.filter((t,r)=>r===0||t.route.path&&t.route.path.length>0)}function Dt(e,t){let r=Er(e);return t?r.map((n,a)=>a===e.length-1?n.pathname:n.pathnameBase):r.map(n=>n.pathnameBase)}function Mt(e,t,r,n){n===void 0&&(n=!1);let a;typeof e=="string"?a=Te(e):(a=q({},e),F(!a.pathname||!a.pathname.includes("?"),wt("?","pathname","search",a)),F(!a.pathname||!a.pathname.includes("#"),wt("#","pathname","hash",a)),F(!a.search||!a.search.includes("#"),wt("#","search","hash",a)));let u=e===""||a.pathname==="",l=u?"/":a.pathname,f;if(l==null)f=r;else{let h=t.length-1;if(!n&&l.startsWith("..")){let E=l.split("/");for(;E[0]==="..";)E.shift(),h-=1;a.pathname=E.join("/")}f=h>=0?t[h]:"/"}let c=vn(a,f),y=l&&l!=="/"&&l.endsWith("/"),g=(u||l===".")&&r.endsWith("/");return!c.pathname.endsWith("/")&&(y||g)&&(c.pathname+="/"),c}const Se=e=>e.join("/").replace(/\/\/+/g,"/"),yn=e=>e.replace(/\/+$/,"").replace(/^\/*/,"/"),En=e=>!e||e==="?"?"":e.startsWith("?")?e:"?"+e,bn=e=>!e||e==="#"?"":e.startsWith("#")?e:"#"+e;class St extends Error{}class va{constructor(t,r){this.pendingKeysSet=new Set,this.subscribers=new Set,this.deferredKeys=[],F(t&&typeof t=="object"&&!Array.isArray(t),"defer() only accepts plain objects");let n;this.abortPromise=new Promise((u,l)=>n=l),this.controller=new AbortController;let a=()=>n(new St("Deferred data aborted"));this.unlistenAbortSignal=()=>this.controller.signal.removeEventListener("abort",a),this.controller.signal.addEventListener("abort",a),this.data=Object.entries(t).reduce((u,l)=>{let[f,c]=l;return Object.assign(u,{[f]:this.trackPromise(f,c)})},{}),this.done&&this.unlistenAbortSignal(),this.init=r}trackPromise(t,r){if(!(r instanceof Promise))return r;this.deferredKeys.push(t),this.pendingKeysSet.add(t);let n=Promise.race([r,this.abortPromise]).then(a=>this.onSettle(n,t,void 0,a),a=>this.onSettle(n,t,a));return n.catch(()=>{}),Object.defineProperty(n,"_tracked",{get:()=>!0}),n}onSettle(t,r,n,a){if(this.controller.signal.aborted&&n instanceof St)return this.unlistenAbortSignal(),Object.defineProperty(t,"_error",{get:()=>n}),Promise.reject(n);if(this.pendingKeysSet.delete(r),this.done&&this.unlistenAbortSignal(),n===void 0&&a===void 0){let u=new Error('Deferred data for key "'+r+'" resolved/rejected with `undefined`, you must resolve/reject with a value or `null`.');return Object.defineProperty(t,"_error",{get:()=>u}),this.emit(!1,r),Promise.reject(u)}return a===void 0?(Object.defineProperty(t,"_error",{get:()=>n}),this.emit(!1,r),Promise.reject(n)):(Object.defineProperty(t,"_data",{get:()=>a}),this.emit(!1,r),a)}emit(t,r){this.subscribers.forEach(n=>n(t,r))}subscribe(t){return this.subscribers.add(t),()=>this.subscribers.delete(t)}cancel(){this.controller.abort(),this.pendingKeysSet.forEach((t,r)=>this.pendingKeysSet.delete(r)),this.emit(!0)}async resolveData(t){let r=!1;if(!this.done){let n=()=>this.cancel();t.addEventListener("abort",n),r=await new Promise(a=>{this.subscribe(u=>{t.removeEventListener("abort",n),(u||this.done)&&a(u)})})}return r}get done(){return this.pendingKeysSet.size===0}get unwrappedData(){return F(this.data!==null&&this.done,"Can only unwrap data on initialized and settled deferreds"),Object.entries(this.data).reduce((t,r)=>{let[n,a]=r;return Object.assign(t,{[n]:wn(a)})},{})}get pendingKeys(){return Array.from(this.pendingKeysSet)}}function Rn(e){return e instanceof Promise&&e._tracked===!0}function wn(e){if(!Rn(e))return e;if(e._error)throw e._error;return e._data}const ga=function(t,r){r===void 0&&(r=302);let n=r;typeof n=="number"?n={status:n}:typeof n.status>"u"&&(n.status=302);let a=new Headers(n.headers);return a.set("Location",t),new Response(null,q({},n,{headers:a}))};class br{constructor(t,r,n,a){a===void 0&&(a=!1),this.status=t,this.statusText=r||"",this.internal=a,n instanceof Error?(this.data=n.toString(),this.error=n):this.data=n}}function mt(e){return e!=null&&typeof e.status=="number"&&typeof e.statusText=="string"&&typeof e.internal=="boolean"&&"data"in e}const Rr=["post","put","patch","delete"],xn=new Set(Rr),Pn=["get",...Rr],Sn=new Set(Pn),_n=new Set([301,302,303,307,308]),Cn=new Set([307,308]),xt={state:"idle",location:void 0,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0},Dn={state:"idle",data:void 0,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0},Ge={state:"unblocked",proceed:void 0,reset:void 0,location:void 0},Lt=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,Mn=e=>({hasErrorBoundary:!!e.hasErrorBoundary}),wr="remix-router-transitions";function ya(e){const t=e.window?e.window:typeof window<"u"?window:void 0,r=typeof t<"u"&&typeof t.document<"u"&&typeof t.document.createElement<"u",n=!r;F(e.routes.length>0,"You must provide a non-empty routes array to createRouter");let a;if(e.mapRouteProperties)a=e.mapRouteProperties;else if(e.detectErrorBoundary){let o=e.detectErrorBoundary;a=s=>({hasErrorBoundary:o(s)})}else a=Mn;let u={},l=et(e.routes,a,void 0,u),f,c=e.basename||"/",y=e.unstable_dataStrategy||An,g=e.unstable_patchRoutesOnMiss,h=q({v7_fetcherPersist:!1,v7_normalizeFormMethod:!1,v7_partialHydration:!1,v7_prependBasename:!1,v7_relativeSplatPath:!1,unstable_skipActionErrorRevalidation:!1},e.future),E=null,N=new Set,C=null,x=null,D=null,W=e.hydrationData!=null,k=Ue(l,e.history.location,c),ee=null;if(k==null&&!g){let o=ue(404,{pathname:e.history.location.pathname}),{matches:s,route:d}=cr(l);k=s,ee={[d.id]:o}}let ae;if(!k)ae=!1,k=[];else if(k.some(o=>o.route.lazy))ae=!1;else if(!k.some(o=>o.route.loader))ae=!0;else if(h.v7_partialHydration){let o=e.hydrationData?e.hydrationData.loaderData:null,s=e.hydrationData?e.hydrationData.errors:null,d=m=>m.route.loader?typeof m.route.loader=="function"&&m.route.loader.hydrate===!0?!1:o&&o[m.route.id]!==void 0||s&&s[m.route.id]!==void 0:!0;if(s){let m=k.findIndex(R=>s[R.route.id]!==void 0);ae=k.slice(0,m+1).every(d)}else ae=k.every(d)}else ae=e.hydrationData!=null;let B,p={historyAction:e.history.action,location:e.history.location,matches:k,initialized:ae,navigation:xt,restoreScrollPosition:e.hydrationData!=null?!1:null,preventScrollReset:!1,revalidation:"idle",loaderData:e.hydrationData&&e.hydrationData.loaderData||{},actionData:e.hydrationData&&e.hydrationData.actionData||null,errors:e.hydrationData&&e.hydrationData.errors||ee,fetchers:new Map,blockers:new Map},le=ne.Pop,ve=!1,z,se=!1,te=new Map,ce=null,fe=!1,oe=!1,he=[],we=[],Q=new Map,je=0,Oe=-1,i=new Map,v=new Set,M=new Map,j=new Map,T=new Set,Y=new Map,L=new Map,be=new Map,X=!1;function gt(){if(E=e.history.listen(o=>{let{action:s,location:d,delta:m}=o;if(X){X=!1;return}$e(L.size===0||m!=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 R=Yt({currentLocation:p.location,nextLocation:d,historyAction:s});if(R&&m!=null){X=!0,e.history.go(m*-1),ot(R,{state:"blocked",location:d,proceed(){ot(R,{state:"proceeding",proceed:void 0,reset:void 0,location:d}),e.history.go(m)},reset(){let S=new Map(p.blockers);S.set(R,Ge),de({blockers:S})}});return}return Ae(s,d)}),r){Jn(t,te);let o=()=>Vn(t,te);t.addEventListener("pagehide",o),ce=()=>t.removeEventListener("pagehide",o)}return p.initialized||Ae(ne.Pop,p.location,{initialHydration:!0}),B}function Tr(){E&&E(),ce&&ce(),N.clear(),z&&z.abort(),p.fetchers.forEach((o,s)=>at(s)),p.blockers.forEach((o,s)=>$t(s))}function jr(o){return N.add(o),()=>N.delete(o)}function de(o,s){s===void 0&&(s={}),p=q({},p,o);let d=[],m=[];h.v7_fetcherPersist&&p.fetchers.forEach((R,S)=>{R.state==="idle"&&(T.has(S)?m.push(S):d.push(S))}),[...N].forEach(R=>R(p,{deletedFetchers:m,unstable_viewTransitionOpts:s.viewTransitionOpts,unstable_flushSync:s.flushSync===!0})),h.v7_fetcherPersist&&(d.forEach(R=>p.fetchers.delete(R)),m.forEach(R=>at(R)))}function Ie(o,s,d){var m,R;let{flushSync:S}=d===void 0?{}:d,_=p.actionData!=null&&p.navigation.formMethod!=null&&ye(p.navigation.formMethod)&&p.navigation.state==="loading"&&((m=o.state)==null?void 0:m._isRedirect)!==!0,b;s.actionData?Object.keys(s.actionData).length>0?b=s.actionData:b=null:_?b=p.actionData:b=null;let O=s.loaderData?sr(p.loaderData,s.loaderData,s.matches||[],s.errors):p.loaderData,P=p.blockers;P.size>0&&(P=new Map(P),P.forEach((H,J)=>P.set(J,Ge)));let A=ve===!0||p.navigation.formMethod!=null&&ye(p.navigation.formMethod)&&((R=o.state)==null?void 0:R._isRedirect)!==!0;f&&(l=f,f=void 0),fe||le===ne.Pop||(le===ne.Push?e.history.push(o,o.state):le===ne.Replace&&e.history.replace(o,o.state));let K;if(le===ne.Pop){let H=te.get(p.location.pathname);H&&H.has(o.pathname)?K={currentLocation:p.location,nextLocation:o}:te.has(o.pathname)&&(K={currentLocation:o,nextLocation:p.location})}else if(se){let H=te.get(p.location.pathname);H?H.add(o.pathname):(H=new Set([o.pathname]),te.set(p.location.pathname,H)),K={currentLocation:p.location,nextLocation:o}}de(q({},s,{actionData:b,loaderData:O,historyAction:le,location:o,initialized:!0,navigation:xt,revalidation:"idle",restoreScrollPosition:Wt(o,s.matches||p.matches),preventScrollReset:A,blockers:P}),{viewTransitionOpts:K,flushSync:S===!0}),le=ne.Pop,ve=!1,se=!1,fe=!1,oe=!1,he=[],we=[]}async function Ft(o,s){if(typeof o=="number"){e.history.go(o);return}let d=_t(p.location,p.matches,c,h.v7_prependBasename,o,h.v7_relativeSplatPath,s==null?void 0:s.fromRouteId,s==null?void 0:s.relative),{path:m,submission:R,error:S}=tr(h.v7_normalizeFormMethod,!1,d,s),_=p.location,b=Ze(p.location,m,s&&s.state);b=q({},b,e.history.encodeLocation(b));let O=s&&s.replace!=null?s.replace:void 0,P=ne.Push;O===!0?P=ne.Replace:O===!1||R!=null&&ye(R.formMethod)&&R.formAction===p.location.pathname+p.location.search&&(P=ne.Replace);let A=s&&"preventScrollReset"in s?s.preventScrollReset===!0:void 0,K=(s&&s.unstable_flushSync)===!0,H=Yt({currentLocation:_,nextLocation:b,historyAction:P});if(H){ot(H,{state:"blocked",location:b,proceed(){ot(H,{state:"proceeding",proceed:void 0,reset:void 0,location:b}),Ft(o,s)},reset(){let J=new Map(p.blockers);J.set(H,Ge),de({blockers:J})}});return}return await Ae(P,b,{submission:R,pendingError:S,preventScrollReset:A,replace:s&&s.replace,enableViewTransition:s&&s.unstable_viewTransition,flushSync:K})}function Or(){if(yt(),de({revalidation:"loading"}),p.navigation.state!=="submitting"){if(p.navigation.state==="idle"){Ae(p.historyAction,p.location,{startUninterruptedRevalidation:!0});return}Ae(le||p.historyAction,p.navigation.location,{overrideNavigation:p.navigation})}}async function Ae(o,s,d){z&&z.abort(),z=null,le=o,fe=(d&&d.startUninterruptedRevalidation)===!0,$r(p.location,p.matches),ve=(d&&d.preventScrollReset)===!0,se=(d&&d.enableViewTransition)===!0;let m=f||l,R=d&&d.overrideNavigation,S=Ue(m,s,c),_=(d&&d.flushSync)===!0,b=Jt(S,m,s.pathname);if(b.active&&b.matches&&(S=b.matches),!S){let{error:$,notFoundMatches:ie,route:re}=Et(s.pathname);Ie(s,{matches:ie,loaderData:{},errors:{[re.id]:$}},{flushSync:_});return}if(p.initialized&&!oe&&kn(p.location,s)&&!(d&&d.submission&&ye(d.submission.formMethod))){Ie(s,{matches:S},{flushSync:_});return}z=new AbortController;let O=He(e.history,s,z.signal,d&&d.submission),P;if(d&&d.pendingError)P=[Qe(S).route.id,{type:G.error,error:d.pendingError}];else if(d&&d.submission&&ye(d.submission.formMethod)){let $=await Ar(O,s,d.submission,S,b.active,{replace:d.replace,flushSync:_});if($.shortCircuited)return;if($.pendingActionResult){let[ie,re]=$.pendingActionResult;if(me(re)&&mt(re.error)&&re.error.status===404){z=null,Ie(s,{matches:$.matches,loaderData:{},errors:{[ie]:re.error}});return}}S=$.matches||S,P=$.pendingActionResult,R=Pt(s,d.submission),_=!1,b.active=!1,O=He(e.history,O.url,O.signal)}let{shortCircuited:A,matches:K,loaderData:H,errors:J}=await Ur(O,s,S,b.active,R,d&&d.submission,d&&d.fetcherSubmission,d&&d.replace,d&&d.initialHydration===!0,_,P);A||(z=null,Ie(s,q({matches:K||S},ur(P),{loaderData:H,errors:J})))}async function Ar(o,s,d,m,R,S){S===void 0&&(S={}),yt();let _=Kn(s,d);if(de({navigation:_},{flushSync:S.flushSync===!0}),R){let P=await lt(m,s.pathname,o.signal);if(P.type==="aborted")return{shortCircuited:!0};if(P.type==="error"){let{error:A,notFoundMatches:K,route:H}=it(s.pathname,P);return{matches:K,pendingActionResult:[H.id,{type:G.error,error:A}]}}else if(P.matches)m=P.matches;else{let{notFoundMatches:A,error:K,route:H}=Et(s.pathname);return{matches:A,pendingActionResult:[H.id,{type:G.error,error:K}]}}}let b,O=Xe(m,s);if(!O.route.action&&!O.route.lazy)b={type:G.error,error:ue(405,{method:o.method,pathname:s.pathname,routeId:O.route.id})};else if(b=(await Je("action",o,[O],m))[0],o.signal.aborted)return{shortCircuited:!0};if(Ne(b)){let P;return S&&S.replace!=null?P=S.replace:P=or(b.response.headers.get("Location"),new URL(o.url),c)===p.location.pathname+p.location.search,await We(o,b,{submission:d,replace:P}),{shortCircuited:!0}}if(Fe(b))throw ue(400,{type:"defer-action"});if(me(b)){let P=Qe(m,O.route.id);return(S&&S.replace)!==!0&&(le=ne.Push),{matches:m,pendingActionResult:[P.route.id,b]}}return{matches:m,pendingActionResult:[O.route.id,b]}}async function Ur(o,s,d,m,R,S,_,b,O,P,A){let K=R||Pt(s,S),H=S||_||hr(K),J=!fe&&(!h.v7_partialHydration||!O);if(m){if(J){let Z=Nt(A);de(q({navigation:K},Z!==void 0?{actionData:Z}:{}),{flushSync:P})}let I=await lt(d,s.pathname,o.signal);if(I.type==="aborted")return{shortCircuited:!0};if(I.type==="error"){let{error:Z,notFoundMatches:pe,route:V}=it(s.pathname,I);return{matches:pe,loaderData:{},errors:{[V.id]:Z}}}else if(I.matches)d=I.matches;else{let{error:Z,notFoundMatches:pe,route:V}=Et(s.pathname);return{matches:pe,loaderData:{},errors:{[V.id]:Z}}}}let $=f||l,[ie,re]=rr(e.history,p,d,H,s,h.v7_partialHydration&&O===!0,h.unstable_skipActionErrorRevalidation,oe,he,we,T,M,v,$,c,A);if(bt(I=>!(d&&d.some(Z=>Z.route.id===I))||ie&&ie.some(Z=>Z.route.id===I)),Oe=++je,ie.length===0&&re.length===0){let I=zt();return Ie(s,q({matches:d,loaderData:{},errors:A&&me(A[1])?{[A[0]]:A[1].error}:null},ur(A),I?{fetchers:new Map(p.fetchers)}:{}),{flushSync:P}),{shortCircuited:!0}}if(J){let I={};if(!m){I.navigation=K;let Z=Nt(A);Z!==void 0&&(I.actionData=Z)}re.length>0&&(I.fetchers=Fr(re)),de(I,{flushSync:P})}re.forEach(I=>{Q.has(I.key)&&De(I.key),I.controller&&Q.set(I.key,I.controller)});let Ve=()=>re.forEach(I=>De(I.key));z&&z.signal.addEventListener("abort",Ve);let{loaderResults:Me,fetcherResults:Be}=await It(p.matches,d,ie,re,o);if(o.signal.aborted)return{shortCircuited:!0};z&&z.signal.removeEventListener("abort",Ve),re.forEach(I=>Q.delete(I.key));let ke=dr([...Me,...Be]);if(ke){if(ke.idx>=ie.length){let I=re[ke.idx-ie.length].key;v.add(I)}return await We(o,ke.result,{replace:b}),{shortCircuited:!0}}let{loaderData:ze,errors:Re}=lr(p,d,ie,Me,A,re,Be,Y);Y.forEach((I,Z)=>{I.subscribe(pe=>{(pe||I.done)&&Y.delete(Z)})}),h.v7_partialHydration&&O&&p.errors&&Object.entries(p.errors).filter(I=>{let[Z]=I;return!ie.some(pe=>pe.route.id===Z)}).forEach(I=>{let[Z,pe]=I;Re=Object.assign(Re||{},{[Z]:pe})});let st=zt(),ut=Ht(Oe),ct=st||ut||re.length>0;return q({matches:d,loaderData:ze,errors:Re},ct?{fetchers:new Map(p.fetchers)}:{})}function Nt(o){if(o&&!me(o[1]))return{[o[0]]:o[1].data};if(p.actionData)return Object.keys(p.actionData).length===0?null:p.actionData}function Fr(o){return o.forEach(s=>{let d=p.fetchers.get(s.key),m=qe(void 0,d?d.data:void 0);p.fetchers.set(s.key,m)}),new Map(p.fetchers)}function Nr(o,s,d,m){if(n)throw new Error("router.fetch() was called during the server render, but it shouldn't be. You are likely calling a useFetcher() method in the body of your component. Try moving it to a useEffect or a callback.");Q.has(o)&&De(o);let R=(m&&m.unstable_flushSync)===!0,S=f||l,_=_t(p.location,p.matches,c,h.v7_prependBasename,d,h.v7_relativeSplatPath,s,m==null?void 0:m.relative),b=Ue(S,_,c),O=Jt(b,S,_);if(O.active&&O.matches&&(b=O.matches),!b){xe(o,s,ue(404,{pathname:_}),{flushSync:R});return}let{path:P,submission:A,error:K}=tr(h.v7_normalizeFormMethod,!0,_,m);if(K){xe(o,s,K,{flushSync:R});return}let H=Xe(b,P);if(ve=(m&&m.preventScrollReset)===!0,A&&ye(A.formMethod)){Ir(o,s,P,H,b,O.active,R,A);return}M.set(o,{routeId:s,path:P}),Br(o,s,P,H,b,O.active,R,A)}async function Ir(o,s,d,m,R,S,_,b){yt(),M.delete(o);function O(V){if(!V.route.action&&!V.route.lazy){let Pe=ue(405,{method:b.formMethod,pathname:d,routeId:s});return xe(o,s,Pe,{flushSync:_}),!0}return!1}if(!S&&O(m))return;let P=p.fetchers.get(o);Ce(o,Wn(b,P),{flushSync:_});let A=new AbortController,K=He(e.history,d,A.signal,b);if(S){let V=await lt(R,d,K.signal);if(V.type==="aborted")return;if(V.type==="error"){let{error:Pe}=it(d,V);xe(o,s,Pe,{flushSync:_});return}else if(V.matches){if(R=V.matches,m=Xe(R,d),O(m))return}else{xe(o,s,ue(404,{pathname:d}),{flushSync:_});return}}Q.set(o,A);let H=je,$=(await Je("action",K,[m],R))[0];if(K.signal.aborted){Q.get(o)===A&&Q.delete(o);return}if(h.v7_fetcherPersist&&T.has(o)){if(Ne($)||me($)){Ce(o,Le(void 0));return}}else{if(Ne($))if(Q.delete(o),Oe>H){Ce(o,Le(void 0));return}else return v.add(o),Ce(o,qe(b)),We(K,$,{fetcherSubmission:b});if(me($)){xe(o,s,$.error);return}}if(Fe($))throw ue(400,{type:"defer-action"});let ie=p.navigation.location||p.location,re=He(e.history,ie,A.signal),Ve=f||l,Me=p.navigation.state!=="idle"?Ue(Ve,p.navigation.location,c):p.matches;F(Me,"Didn't find any matches after fetcher action");let Be=++je;i.set(o,Be);let ke=qe(b,$.data);p.fetchers.set(o,ke);let[ze,Re]=rr(e.history,p,Me,b,ie,!1,h.unstable_skipActionErrorRevalidation,oe,he,we,T,M,v,Ve,c,[m.route.id,$]);Re.filter(V=>V.key!==o).forEach(V=>{let Pe=V.key,Vt=p.fetchers.get(Pe),Kr=qe(void 0,Vt?Vt.data:void 0);p.fetchers.set(Pe,Kr),Q.has(Pe)&&De(Pe),V.controller&&Q.set(Pe,V.controller)}),de({fetchers:new Map(p.fetchers)});let st=()=>Re.forEach(V=>De(V.key));A.signal.addEventListener("abort",st);let{loaderResults:ut,fetcherResults:ct}=await It(p.matches,Me,ze,Re,re);if(A.signal.aborted)return;A.signal.removeEventListener("abort",st),i.delete(o),Q.delete(o),Re.forEach(V=>Q.delete(V.key));let I=dr([...ut,...ct]);if(I){if(I.idx>=ze.length){let V=Re[I.idx-ze.length].key;v.add(V)}return We(re,I.result)}let{loaderData:Z,errors:pe}=lr(p,p.matches,ze,ut,void 0,Re,ct,Y);if(p.fetchers.has(o)){let V=Le($.data);p.fetchers.set(o,V)}Ht(Be),p.navigation.state==="loading"&&Be>Oe?(F(le,"Expected pending action"),z&&z.abort(),Ie(p.navigation.location,{matches:Me,loaderData:Z,errors:pe,fetchers:new Map(p.fetchers)})):(de({errors:pe,loaderData:sr(p.loaderData,Z,Me,pe),fetchers:new Map(p.fetchers)}),oe=!1)}async function Br(o,s,d,m,R,S,_,b){let O=p.fetchers.get(o);Ce(o,qe(b,O?O.data:void 0),{flushSync:_});let P=new AbortController,A=He(e.history,d,P.signal);if(S){let $=await lt(R,d,A.signal);if($.type==="aborted")return;if($.type==="error"){let{error:ie}=it(d,$);xe(o,s,ie,{flushSync:_});return}else if($.matches)R=$.matches,m=Xe(R,d);else{xe(o,s,ue(404,{pathname:d}),{flushSync:_});return}}Q.set(o,P);let K=je,J=(await Je("loader",A,[m],R))[0];if(Fe(J)&&(J=await Cr(J,A.signal,!0)||J),Q.get(o)===P&&Q.delete(o),!A.signal.aborted){if(T.has(o)){Ce(o,Le(void 0));return}if(Ne(J))if(Oe>K){Ce(o,Le(void 0));return}else{v.add(o),await We(A,J);return}if(me(J)){xe(o,s,J.error);return}F(!Fe(J),"Unhandled fetcher deferred data"),Ce(o,Le(J.data))}}async function We(o,s,d){let{submission:m,fetcherSubmission:R,replace:S}=d===void 0?{}:d;s.response.headers.has("X-Remix-Revalidate")&&(oe=!0);let _=s.response.headers.get("Location");F(_,"Expected a Location header on the redirect Response"),_=or(_,new URL(o.url),c);let b=Ze(p.location,_,{_isRedirect:!0});if(r){let J=!1;if(s.response.headers.has("X-Remix-Reload-Document"))J=!0;else if(Lt.test(_)){const $=e.history.createURL(_);J=$.origin!==t.location.origin||rt($.pathname,c)==null}if(J){S?t.location.replace(_):t.location.assign(_);return}}z=null;let O=S===!0?ne.Replace:ne.Push,{formMethod:P,formAction:A,formEncType:K}=p.navigation;!m&&!R&&P&&A&&K&&(m=hr(p.navigation));let H=m||R;if(Cn.has(s.response.status)&&H&&ye(H.formMethod))await Ae(O,b,{submission:q({},H,{formAction:_}),preventScrollReset:ve});else{let J=Pt(b,m);await Ae(O,b,{overrideNavigation:J,fetcherSubmission:R,preventScrollReset:ve})}}async function Je(o,s,d,m){try{let R=await Un(y,o,s,d,m,u,a);return await Promise.all(R.map((S,_)=>{if(Hn(S)){let b=S.result;return{type:G.redirect,response:In(b,s,d[_].route.id,m,c,h.v7_relativeSplatPath)}}return Nn(S)}))}catch(R){return d.map(()=>({type:G.error,error:R}))}}async function It(o,s,d,m,R){let[S,..._]=await Promise.all([d.length?Je("loader",R,d,s):[],...m.map(b=>{if(b.matches&&b.match&&b.controller){let O=He(e.history,b.path,b.controller.signal);return Je("loader",O,[b.match],b.matches).then(P=>P[0])}else return Promise.resolve({type:G.error,error:ue(404,{pathname:b.path})})})]);return await Promise.all([fr(o,d,S,S.map(()=>R.signal),!1,p.loaderData),fr(o,m.map(b=>b.match),_,m.map(b=>b.controller?b.controller.signal:null),!0)]),{loaderResults:S,fetcherResults:_}}function yt(){oe=!0,he.push(...bt()),M.forEach((o,s)=>{Q.has(s)&&(we.push(s),De(s))})}function Ce(o,s,d){d===void 0&&(d={}),p.fetchers.set(o,s),de({fetchers:new Map(p.fetchers)},{flushSync:(d&&d.flushSync)===!0})}function xe(o,s,d,m){m===void 0&&(m={});let R=Qe(p.matches,s);at(o),de({errors:{[R.route.id]:d},fetchers:new Map(p.fetchers)},{flushSync:(m&&m.flushSync)===!0})}function Bt(o){return h.v7_fetcherPersist&&(j.set(o,(j.get(o)||0)+1),T.has(o)&&T.delete(o)),p.fetchers.get(o)||Dn}function at(o){let s=p.fetchers.get(o);Q.has(o)&&!(s&&s.state==="loading"&&i.has(o))&&De(o),M.delete(o),i.delete(o),v.delete(o),T.delete(o),p.fetchers.delete(o)}function kr(o){if(h.v7_fetcherPersist){let s=(j.get(o)||0)-1;s<=0?(j.delete(o),T.add(o)):j.set(o,s)}else at(o);de({fetchers:new Map(p.fetchers)})}function De(o){let s=Q.get(o);F(s,"Expected fetch controller: "+o),s.abort(),Q.delete(o)}function kt(o){for(let s of o){let d=Bt(s),m=Le(d.data);p.fetchers.set(s,m)}}function zt(){let o=[],s=!1;for(let d of v){let m=p.fetchers.get(d);F(m,"Expected fetcher: "+d),m.state==="loading"&&(v.delete(d),o.push(d),s=!0)}return kt(o),s}function Ht(o){let s=[];for(let[d,m]of i)if(m<o){let R=p.fetchers.get(d);F(R,"Expected fetcher: "+d),R.state==="loading"&&(De(d),i.delete(d),s.push(d))}return kt(s),s.length>0}function zr(o,s){let d=p.blockers.get(o)||Ge;return L.get(o)!==s&&L.set(o,s),d}function $t(o){p.blockers.delete(o),L.delete(o)}function ot(o,s){let d=p.blockers.get(o)||Ge;F(d.state==="unblocked"&&s.state==="blocked"||d.state==="blocked"&&s.state==="blocked"||d.state==="blocked"&&s.state==="proceeding"||d.state==="blocked"&&s.state==="unblocked"||d.state==="proceeding"&&s.state==="unblocked","Invalid blocker state transition: "+d.state+" -> "+s.state);let m=new Map(p.blockers);m.set(o,s),de({blockers:m})}function Yt(o){let{currentLocation:s,nextLocation:d,historyAction:m}=o;if(L.size===0)return;L.size>1&&$e(!1,"A router only supports one blocker at a time");let R=Array.from(L.entries()),[S,_]=R[R.length-1],b=p.blockers.get(S);if(!(b&&b.state==="proceeding")&&_({currentLocation:s,nextLocation:d,historyAction:m}))return S}function Et(o){let s=ue(404,{pathname:o}),d=f||l,{matches:m,route:R}=cr(d);return bt(),{notFoundMatches:m,route:R,error:s}}function it(o,s){let d=s.partialMatches,m=d[d.length-1].route,R=ue(400,{type:"route-discovery",routeId:m.id,pathname:o,message:s.error!=null&&"message"in s.error?s.error:String(s.error)});return{notFoundMatches:d,route:m,error:R}}function bt(o){let s=[];return Y.forEach((d,m)=>{(!o||o(m))&&(d.cancel(),s.push(m),Y.delete(m))}),s}function Hr(o,s,d){if(C=o,D=s,x=d||null,!W&&p.navigation===xt){W=!0;let m=Wt(p.location,p.matches);m!=null&&de({restoreScrollPosition:m})}return()=>{C=null,D=null,x=null}}function Kt(o,s){return x&&x(o,s.map(m=>vr(m,p.loaderData)))||o.key}function $r(o,s){if(C&&D){let d=Kt(o,s);C[d]=D()}}function Wt(o,s){if(C){let d=Kt(o,s),m=C[d];if(typeof m=="number")return m}return null}function Jt(o,s,d){if(g)if(o){if(o[o.length-1].route.path==="*")return{active:!0,matches:dt(s,d,c,!0)}}else return{active:!0,matches:dt(s,d,c,!0)||[]};return{active:!1,matches:null}}async function lt(o,s,d){let m=o,R=m.length>0?m[m.length-1].route:null;for(;;){try{await On(g,s,m,l||f,u,a,be,d)}catch(P){return{type:"error",error:P,partialMatches:m}}if(d.aborted)return{type:"aborted"};let S=f||l,_=Ue(S,s,c),b=!1;if(_){let P=_[_.length-1].route;if(P.index)return{type:"success",matches:_};if(P.path&&P.path.length>0)if(P.path==="*")b=!0;else return{type:"success",matches:_}}let O=dt(S,s,c,!0);if(!O||m.map(P=>P.route.id).join("-")===O.map(P=>P.route.id).join("-"))return{type:"success",matches:b?_:null};if(m=O,R=m[m.length-1].route,R.path==="*")return{type:"success",matches:m}}}function Yr(o){u={},f=et(o,a,void 0,u)}return B={get basename(){return c},get future(){return h},get state(){return p},get routes(){return l},get window(){return t},initialize:gt,subscribe:jr,enableScrollRestoration:Hr,navigate:Ft,fetch:Nr,revalidate:Or,createHref:o=>e.history.createHref(o),encodeLocation:o=>e.history.encodeLocation(o),getFetcher:Bt,deleteFetcher:kr,dispose:Tr,getBlocker:zr,deleteBlocker:$t,patchRoutes(o,s){return Pr(o,s,l||f,u,a)},_internalFetchControllers:Q,_internalActiveDeferreds:Y,_internalSetRoutes:Yr},B}function Ln(e){return e!=null&&("formData"in e&&e.formData!=null||"body"in e&&e.body!==void 0)}function _t(e,t,r,n,a,u,l,f){let c,y;if(l){c=[];for(let h of t)if(c.push(h),h.route.id===l){y=h;break}}else c=t,y=t[t.length-1];let g=Mt(a||".",Dt(c,u),rt(e.pathname,r)||e.pathname,f==="path");return a==null&&(g.search=e.search,g.hash=e.hash),(a==null||a===""||a===".")&&y&&y.route.index&&!Tt(g.search)&&(g.search=g.search?g.search.replace(/^\?/,"?index&"):"?index"),n&&r!=="/"&&(g.pathname=g.pathname==="/"?r:Se([r,g.pathname])),tt(g)}function tr(e,t,r,n){if(!n||!Ln(n))return{path:r};if(n.formMethod&&!Yn(n.formMethod))return{path:r,error:ue(405,{method:n.formMethod})};let a=()=>({path:r,error:ue(400,{type:"invalid-body"})}),u=n.formMethod||"get",l=e?u.toUpperCase():u.toLowerCase(),f=Sr(r);if(n.body!==void 0){if(n.formEncType==="text/plain"){if(!ye(l))return a();let E=typeof n.body=="string"?n.body:n.body instanceof FormData||n.body instanceof URLSearchParams?Array.from(n.body.entries()).reduce((N,C)=>{let[x,D]=C;return""+N+x+"="+D+`
|
|
27
|
-
`},""):String(n.body);return{path:r,submission:{formMethod:l,formAction:f,formEncType:n.formEncType,formData:void 0,json:void 0,text:E}}}else if(n.formEncType==="application/json"){if(!ye(l))return a();try{let E=typeof n.body=="string"?JSON.parse(n.body):n.body;return{path:r,submission:{formMethod:l,formAction:f,formEncType:n.formEncType,formData:void 0,json:E,text:void 0}}}catch{return a()}}}F(typeof FormData=="function","FormData is not available in this environment");let c,y;if(n.formData)c=Ct(n.formData),y=n.formData;else if(n.body instanceof FormData)c=Ct(n.body),y=n.body;else if(n.body instanceof URLSearchParams)c=n.body,y=ir(c);else if(n.body==null)c=new URLSearchParams,y=new FormData;else try{c=new URLSearchParams(n.body),y=ir(c)}catch{return a()}let g={formMethod:l,formAction:f,formEncType:n&&n.formEncType||"application/x-www-form-urlencoded",formData:y,json:void 0,text:void 0};if(ye(g.formMethod))return{path:r,submission:g};let h=Te(r);return t&&h.search&&Tt(h.search)&&c.append("index",""),h.search="?"+c,{path:tt(h),submission:g}}function Tn(e,t){let r=e;if(t){let n=e.findIndex(a=>a.route.id===t);n>=0&&(r=e.slice(0,n))}return r}function rr(e,t,r,n,a,u,l,f,c,y,g,h,E,N,C,x){let D=x?me(x[1])?x[1].error:x[1].data:void 0,W=e.createURL(t.location),k=e.createURL(a),ee=x&&me(x[1])?x[0]:void 0,ae=ee?Tn(r,ee):r,B=x?x[1].statusCode:void 0,p=l&&B&&B>=400,le=ae.filter((z,se)=>{let{route:te}=z;if(te.lazy)return!0;if(te.loader==null)return!1;if(u)return typeof te.loader!="function"||te.loader.hydrate?!0:t.loaderData[te.id]===void 0&&(!t.errors||t.errors[te.id]===void 0);if(jn(t.loaderData,t.matches[se],z)||c.some(oe=>oe===z.route.id))return!0;let ce=t.matches[se],fe=z;return nr(z,q({currentUrl:W,currentParams:ce.params,nextUrl:k,nextParams:fe.params},n,{actionResult:D,unstable_actionStatus:B,defaultShouldRevalidate:p?!1:f||W.pathname+W.search===k.pathname+k.search||W.search!==k.search||xr(ce,fe)}))}),ve=[];return h.forEach((z,se)=>{if(u||!r.some(he=>he.route.id===z.routeId)||g.has(se))return;let te=Ue(N,z.path,C);if(!te){ve.push({key:se,routeId:z.routeId,path:z.path,matches:null,match:null,controller:null});return}let ce=t.fetchers.get(se),fe=Xe(te,z.path),oe=!1;E.has(se)?oe=!1:y.includes(se)?oe=!0:ce&&ce.state!=="idle"&&ce.data===void 0?oe=f:oe=nr(fe,q({currentUrl:W,currentParams:t.matches[t.matches.length-1].params,nextUrl:k,nextParams:r[r.length-1].params},n,{actionResult:D,unstable_actionStatus:B,defaultShouldRevalidate:p?!1:f})),oe&&ve.push({key:se,routeId:z.routeId,path:z.path,matches:te,match:fe,controller:new AbortController})}),[le,ve]}function jn(e,t,r){let n=!t||r.route.id!==t.route.id,a=e[r.route.id]===void 0;return n||a}function xr(e,t){let r=e.route.path;return e.pathname!==t.pathname||r!=null&&r.endsWith("*")&&e.params["*"]!==t.params["*"]}function nr(e,t){if(e.route.shouldRevalidate){let r=e.route.shouldRevalidate(t);if(typeof r=="boolean")return r}return t.defaultShouldRevalidate}async function On(e,t,r,n,a,u,l,f){let c=[t,...r.map(y=>y.route.id)].join("-");try{let y=l.get(c);y||(y=e({path:t,matches:r,patch:(g,h)=>{f.aborted||Pr(g,h,n,a,u)}}),l.set(c,y)),y&&zn(y)&&await y}finally{l.delete(c)}}function Pr(e,t,r,n,a){if(e){var u;let l=n[e];F(l,"No route found to patch children into: routeId = "+e);let f=et(t,a,[e,"patch",String(((u=l.children)==null?void 0:u.length)||"0")],n);l.children?l.children.push(...f):l.children=f}else{let l=et(t,a,["patch",String(r.length||"0")],n);r.push(...l)}}async function ar(e,t,r){if(!e.lazy)return;let n=await e.lazy();if(!e.lazy)return;let a=r[e.id];F(a,"No route found in manifest");let u={};for(let l in n){let c=a[l]!==void 0&&l!=="hasErrorBoundary";$e(!c,'Route "'+a.id+'" has a static property "'+l+'" defined but its lazy function is also returning a value for this property. '+('The lazy route property "'+l+'" will be ignored.')),!c&&!tn.has(l)&&(u[l]=n[l])}Object.assign(a,u),Object.assign(a,q({},t(a),{lazy:void 0}))}function An(e){return Promise.all(e.matches.map(t=>t.resolve()))}async function Un(e,t,r,n,a,u,l,f){let c=n.reduce((h,E)=>h.add(E.route.id),new Set),y=new Set,g=await e({matches:a.map(h=>{let E=c.has(h.route.id);return q({},h,{shouldLoad:E,resolve:C=>(y.add(h.route.id),E?Fn(t,r,h,u,l,C,f):Promise.resolve({type:G.data,result:void 0}))})}),request:r,params:a[0].params,context:f});return a.forEach(h=>F(y.has(h.route.id),'`match.resolve()` was not called for route id "'+h.route.id+'". You must call `match.resolve()` on every match passed to `dataStrategy` to ensure all routes are properly loaded.')),g.filter((h,E)=>c.has(a[E].route.id))}async function Fn(e,t,r,n,a,u,l){let f,c,y=g=>{let h,E=new Promise((x,D)=>h=D);c=()=>h(),t.signal.addEventListener("abort",c);let N=x=>typeof g!="function"?Promise.reject(new Error("You cannot call the handler for a route which defines a boolean "+('"'+e+'" [routeId: '+r.route.id+"]"))):g({request:t,params:r.params,context:l},...x!==void 0?[x]:[]),C;return u?C=u(x=>N(x)):C=(async()=>{try{return{type:"data",result:await N()}}catch(x){return{type:"error",result:x}}})(),Promise.race([C,E])};try{let g=r.route[e];if(r.route.lazy)if(g){let h,[E]=await Promise.all([y(g).catch(N=>{h=N}),ar(r.route,a,n)]);if(h!==void 0)throw h;f=E}else if(await ar(r.route,a,n),g=r.route[e],g)f=await y(g);else if(e==="action"){let h=new URL(t.url),E=h.pathname+h.search;throw ue(405,{method:t.method,pathname:E,routeId:r.route.id})}else return{type:G.data,result:void 0};else if(g)f=await y(g);else{let h=new URL(t.url),E=h.pathname+h.search;throw ue(404,{pathname:E})}F(f.result!==void 0,"You defined "+(e==="action"?"an action":"a loader")+" for route "+('"'+r.route.id+"\" but didn't return anything from your `"+e+"` ")+"function. Please return a value or `null`.")}catch(g){return{type:G.error,result:g}}finally{c&&t.signal.removeEventListener("abort",c)}return f}async function Nn(e){let{result:t,type:r,status:n}=e;if(_r(t)){let l;try{let f=t.headers.get("Content-Type");f&&/\bapplication\/json\b/.test(f)?t.body==null?l=null:l=await t.json():l=await t.text()}catch(f){return{type:G.error,error:f}}return r===G.error?{type:G.error,error:new br(t.status,t.statusText,l),statusCode:t.status,headers:t.headers}:{type:G.data,data:l,statusCode:t.status,headers:t.headers}}if(r===G.error)return{type:G.error,error:t,statusCode:mt(t)?t.status:n};if($n(t)){var a,u;return{type:G.deferred,deferredData:t,statusCode:(a=t.init)==null?void 0:a.status,headers:((u=t.init)==null?void 0:u.headers)&&new Headers(t.init.headers)}}return{type:G.data,data:t,statusCode:n}}function In(e,t,r,n,a,u){let l=e.headers.get("Location");if(F(l,"Redirects returned/thrown from loaders/actions must have a Location header"),!Lt.test(l)){let f=n.slice(0,n.findIndex(c=>c.route.id===r)+1);l=_t(new URL(t.url),f,a,!0,l,u),e.headers.set("Location",l)}return e}function or(e,t,r){if(Lt.test(e)){let n=e,a=n.startsWith("//")?new URL(t.protocol+n):new URL(n),u=rt(a.pathname,r)!=null;if(a.origin===t.origin&&u)return a.pathname+a.search+a.hash}return e}function He(e,t,r,n){let a=e.createURL(Sr(t)).toString(),u={signal:r};if(n&&ye(n.formMethod)){let{formMethod:l,formEncType:f}=n;u.method=l.toUpperCase(),f==="application/json"?(u.headers=new Headers({"Content-Type":f}),u.body=JSON.stringify(n.json)):f==="text/plain"?u.body=n.text:f==="application/x-www-form-urlencoded"&&n.formData?u.body=Ct(n.formData):u.body=n.formData}return new Request(a,u)}function Ct(e){let t=new URLSearchParams;for(let[r,n]of e.entries())t.append(r,typeof n=="string"?n:n.name);return t}function ir(e){let t=new FormData;for(let[r,n]of e.entries())t.append(r,n);return t}function Bn(e,t,r,n,a,u){let l={},f=null,c,y=!1,g={},h=n&&me(n[1])?n[1].error:void 0;return r.forEach((E,N)=>{let C=t[N].route.id;if(F(!Ne(E),"Cannot handle redirect results in processLoaderData"),me(E)){let x=E.error;h!==void 0&&(x=h,h=void 0),f=f||{};{let D=Qe(e,C);f[D.route.id]==null&&(f[D.route.id]=x)}l[C]=void 0,y||(y=!0,c=mt(E.error)?E.error.status:500),E.headers&&(g[C]=E.headers)}else Fe(E)?(a.set(C,E.deferredData),l[C]=E.deferredData.data,E.statusCode!=null&&E.statusCode!==200&&!y&&(c=E.statusCode),E.headers&&(g[C]=E.headers)):(l[C]=E.data,E.statusCode&&E.statusCode!==200&&!y&&(c=E.statusCode),E.headers&&(g[C]=E.headers))}),h!==void 0&&n&&(f={[n[0]]:h},l[n[0]]=void 0),{loaderData:l,errors:f,statusCode:c||200,loaderHeaders:g}}function lr(e,t,r,n,a,u,l,f){let{loaderData:c,errors:y}=Bn(t,r,n,a,f);for(let g=0;g<u.length;g++){let{key:h,match:E,controller:N}=u[g];F(l!==void 0&&l[g]!==void 0,"Did not find corresponding fetcher result");let C=l[g];if(!(N&&N.signal.aborted))if(me(C)){let x=Qe(e.matches,E==null?void 0:E.route.id);y&&y[x.route.id]||(y=q({},y,{[x.route.id]:C.error})),e.fetchers.delete(h)}else if(Ne(C))F(!1,"Unhandled fetcher revalidation redirect");else if(Fe(C))F(!1,"Unhandled fetcher deferred data");else{let x=Le(C.data);e.fetchers.set(h,x)}}return{loaderData:c,errors:y}}function sr(e,t,r,n){let a=q({},t);for(let u of r){let l=u.route.id;if(t.hasOwnProperty(l)?t[l]!==void 0&&(a[l]=t[l]):e[l]!==void 0&&u.route.loader&&(a[l]=e[l]),n&&n.hasOwnProperty(l))break}return a}function ur(e){return e?me(e[1])?{actionData:{}}:{actionData:{[e[0]]:e[1].data}}:{}}function Qe(e,t){return(t?e.slice(0,e.findIndex(n=>n.route.id===t)+1):[...e]).reverse().find(n=>n.route.hasErrorBoundary===!0)||e[0]}function cr(e){let t=e.length===1?e[0]:e.find(r=>r.index||!r.path||r.path==="/")||{id:"__shim-error-route__"};return{matches:[{params:{},pathname:"",pathnameBase:"",route:t}],route:t}}function ue(e,t){let{pathname:r,routeId:n,method:a,type:u,message:l}=t===void 0?{}:t,f="Unknown Server Error",c="Unknown @remix-run/router error";return e===400?(f="Bad Request",u==="route-discovery"?c='Unable to match URL "'+r+'" - the `children()` function for '+("route `"+n+"` threw the following error:\n"+l):a&&r&&n?c="You made a "+a+' request to "'+r+'" but '+('did not provide a `loader` for route "'+n+'", ')+"so there is no way to handle the request.":u==="defer-action"?c="defer() is not supported in actions":u==="invalid-body"&&(c="Unable to encode submission body")):e===403?(f="Forbidden",c='Route "'+n+'" does not match URL "'+r+'"'):e===404?(f="Not Found",c='No route matches URL "'+r+'"'):e===405&&(f="Method Not Allowed",a&&r&&n?c="You made a "+a.toUpperCase()+' request to "'+r+'" but '+('did not provide an `action` for route "'+n+'", ')+"so there is no way to handle the request.":a&&(c='Invalid request method "'+a.toUpperCase()+'"')),new br(e||500,f,new Error(c),!0)}function dr(e){for(let t=e.length-1;t>=0;t--){let r=e[t];if(Ne(r))return{result:r,idx:t}}}function Sr(e){let t=typeof e=="string"?Te(e):e;return tt(q({},t,{hash:""}))}function kn(e,t){return e.pathname!==t.pathname||e.search!==t.search?!1:e.hash===""?t.hash!=="":e.hash===t.hash?!0:t.hash!==""}function zn(e){return typeof e=="object"&&e!=null&&"then"in e}function Hn(e){return _r(e.result)&&_n.has(e.result.status)}function Fe(e){return e.type===G.deferred}function me(e){return e.type===G.error}function Ne(e){return(e&&e.type)===G.redirect}function $n(e){let t=e;return t&&typeof t=="object"&&typeof t.data=="object"&&typeof t.subscribe=="function"&&typeof t.cancel=="function"&&typeof t.resolveData=="function"}function _r(e){return e!=null&&typeof e.status=="number"&&typeof e.statusText=="string"&&typeof e.headers=="object"&&typeof e.body<"u"}function Yn(e){return Sn.has(e.toLowerCase())}function ye(e){return xn.has(e.toLowerCase())}async function fr(e,t,r,n,a,u){for(let l=0;l<r.length;l++){let f=r[l],c=t[l];if(!c)continue;let y=e.find(h=>h.route.id===c.route.id),g=y!=null&&!xr(y,c)&&(u&&u[c.route.id])!==void 0;if(Fe(f)&&(a||g)){let h=n[l];F(h,"Expected an AbortSignal for revalidating fetcher deferred result"),await Cr(f,h,a).then(E=>{E&&(r[l]=E||r[l])})}}}async function Cr(e,t,r){if(r===void 0&&(r=!1),!await e.deferredData.resolveData(t)){if(r)try{return{type:G.data,data:e.deferredData.unwrappedData}}catch(a){return{type:G.error,error:a}}return{type:G.data,data:e.deferredData.data}}}function Tt(e){return new URLSearchParams(e).getAll("index").some(t=>t==="")}function Xe(e,t){let r=typeof t=="string"?Te(t).search:t.search;if(e[e.length-1].route.index&&Tt(r||""))return e[e.length-1];let n=Er(e);return n[n.length-1]}function hr(e){let{formMethod:t,formAction:r,formEncType:n,text:a,formData:u,json:l}=e;if(!(!t||!r||!n)){if(a!=null)return{formMethod:t,formAction:r,formEncType:n,formData:void 0,json:void 0,text:a};if(u!=null)return{formMethod:t,formAction:r,formEncType:n,formData:u,json:void 0,text:void 0};if(l!==void 0)return{formMethod:t,formAction:r,formEncType:n,formData:void 0,json:l,text:void 0}}}function Pt(e,t){return t?{state:"loading",location:e,formMethod:t.formMethod,formAction:t.formAction,formEncType:t.formEncType,formData:t.formData,json:t.json,text:t.text}:{state:"loading",location:e,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0}}function Kn(e,t){return{state:"submitting",location:e,formMethod:t.formMethod,formAction:t.formAction,formEncType:t.formEncType,formData:t.formData,json:t.json,text:t.text}}function qe(e,t){return e?{state:"loading",formMethod:e.formMethod,formAction:e.formAction,formEncType:e.formEncType,formData:e.formData,json:e.json,text:e.text,data:t}:{state:"loading",formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0,data:t}}function Wn(e,t){return{state:"submitting",formMethod:e.formMethod,formAction:e.formAction,formEncType:e.formEncType,formData:e.formData,json:e.json,text:e.text,data:t?t.data:void 0}}function Le(e){return{state:"idle",formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0,data:e}}function Jn(e,t){try{let r=e.sessionStorage.getItem(wr);if(r){let n=JSON.parse(r);for(let[a,u]of Object.entries(n||{}))u&&Array.isArray(u)&&t.set(a,new Set(u||[]))}}catch{}}function Vn(e,t){if(t.size>0){let r={};for(let[n,a]of t)r[n]=[...a];try{e.sessionStorage.setItem(wr,JSON.stringify(r))}catch(n){$e(!1,"Failed to save applied view transitions in sessionStorage ("+n+").")}}}/**
|
|
28
|
-
* React Router v6.24.0
|
|
29
|
-
*
|
|
30
|
-
* Copyright (c) Remix Software Inc.
|
|
31
|
-
*
|
|
32
|
-
* This source code is licensed under the MIT license found in the
|
|
33
|
-
* LICENSE.md file in the root directory of this source tree.
|
|
34
|
-
*
|
|
35
|
-
* @license MIT
|
|
36
|
-
*/function ft(){return ft=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},ft.apply(this,arguments)}const jt=w.createContext(null),Gn=w.createContext(null),ht=w.createContext(null),Ye=w.createContext(null),Ot=w.createContext(null),_e=w.createContext({outlet:null,matches:[],isDataRoute:!1}),Dr=w.createContext(null);function Ea(e,t){let{relative:r}=t===void 0?{}:t;nt()||F(!1);let{basename:n,navigator:a}=w.useContext(Ye),{hash:u,pathname:l,search:f}=Zn(e,{relative:r}),c=l;return n!=="/"&&(c=l==="/"?n:Se([n,l])),a.createHref({pathname:c,search:f,hash:u})}function nt(){return w.useContext(Ot)!=null}function At(){return nt()||F(!1),w.useContext(Ot).location}function Mr(e){w.useContext(Ye).static||w.useLayoutEffect(e)}function ba(){let{isDataRoute:e}=w.useContext(_e);return e?sa():qn()}function qn(){nt()||F(!1);let e=w.useContext(jt),{basename:t,future:r,navigator:n}=w.useContext(Ye),{matches:a}=w.useContext(_e),{pathname:u}=At(),l=JSON.stringify(Dt(a,r.v7_relativeSplatPath)),f=w.useRef(!1);return Mr(()=>{f.current=!0}),w.useCallback(function(y,g){if(g===void 0&&(g={}),!f.current)return;if(typeof y=="number"){n.go(y);return}let h=Mt(y,JSON.parse(l),u,g.relative==="path");e==null&&t!=="/"&&(h.pathname=h.pathname==="/"?t:Se([t,h.pathname])),(g.replace?n.replace:n.push)(h,g.state,g)},[t,n,l,u,e])}const Xn=w.createContext(null);function Qn(e){let t=w.useContext(_e).outlet;return t&&w.createElement(Xn.Provider,{value:e},t)}function Ra(){let{matches:e}=w.useContext(_e),t=e[e.length-1];return t?t.params:{}}function Zn(e,t){let{relative:r}=t===void 0?{}:t,{future:n}=w.useContext(Ye),{matches:a}=w.useContext(_e),{pathname:u}=At(),l=JSON.stringify(Dt(a,n.v7_relativeSplatPath));return w.useMemo(()=>Mt(e,JSON.parse(l),u,r==="path"),[e,l,u,r])}function wa(e,t,r,n){nt()||F(!1);let{navigator:a}=w.useContext(Ye),{matches:u}=w.useContext(_e),l=u[u.length-1],f=l?l.params:{};l&&l.pathname;let c=l?l.pathnameBase:"/";l&&l.route;let y=At(),g;g=y;let h=g.pathname||"/",E=h;if(c!=="/"){let x=c.replace(/^\//,"").split("/");E="/"+h.replace(/^\//,"").split("/").slice(x.length).join("/")}let N=Ue(e,{pathname:E});return aa(N&&N.map(x=>Object.assign({},x,{params:Object.assign({},f,x.params),pathname:Se([c,a.encodeLocation?a.encodeLocation(x.pathname).pathname:x.pathname]),pathnameBase:x.pathnameBase==="/"?c:Se([c,a.encodeLocation?a.encodeLocation(x.pathnameBase).pathname:x.pathnameBase])})),u,r,n)}function ea(){let e=ia(),t=mt(e)?e.status+" "+e.statusText:e instanceof Error?e.message:JSON.stringify(e),r=e instanceof Error?e.stack:null,a={padding:"0.5rem",backgroundColor:"rgba(200,200,200, 0.5)"};return w.createElement(w.Fragment,null,w.createElement("h2",null,"Unexpected Application Error!"),w.createElement("h3",{style:{fontStyle:"italic"}},t),r?w.createElement("pre",{style:a},r):null,null)}const ta=w.createElement(ea,null);class ra extends w.Component{constructor(t){super(t),this.state={location:t.location,revalidation:t.revalidation,error:t.error}}static getDerivedStateFromError(t){return{error:t}}static getDerivedStateFromProps(t,r){return r.location!==t.location||r.revalidation!=="idle"&&t.revalidation==="idle"?{error:t.error,location:t.location,revalidation:t.revalidation}:{error:t.error!==void 0?t.error:r.error,location:r.location,revalidation:t.revalidation||r.revalidation}}componentDidCatch(t,r){console.error("React Router caught the following error during render",t,r)}render(){return this.state.error!==void 0?w.createElement(_e.Provider,{value:this.props.routeContext},w.createElement(Dr.Provider,{value:this.state.error,children:this.props.component})):this.props.children}}function na(e){let{routeContext:t,match:r,children:n}=e,a=w.useContext(jt);return a&&a.static&&a.staticContext&&(r.route.errorElement||r.route.ErrorBoundary)&&(a.staticContext._deepestRenderedBoundaryId=r.route.id),w.createElement(_e.Provider,{value:t},n)}function aa(e,t,r,n){var a;if(t===void 0&&(t=[]),r===void 0&&(r=null),n===void 0&&(n=null),e==null){var u;if((u=r)!=null&&u.errors)e=r.matches;else return null}let l=e,f=(a=r)==null?void 0:a.errors;if(f!=null){let g=l.findIndex(h=>h.route.id&&(f==null?void 0:f[h.route.id])!==void 0);g>=0||F(!1),l=l.slice(0,Math.min(l.length,g+1))}let c=!1,y=-1;if(r&&n&&n.v7_partialHydration)for(let g=0;g<l.length;g++){let h=l[g];if((h.route.HydrateFallback||h.route.hydrateFallbackElement)&&(y=g),h.route.id){let{loaderData:E,errors:N}=r,C=h.route.loader&&E[h.route.id]===void 0&&(!N||N[h.route.id]===void 0);if(h.route.lazy||C){c=!0,y>=0?l=l.slice(0,y+1):l=[l[0]];break}}}return l.reduceRight((g,h,E)=>{let N,C=!1,x=null,D=null;r&&(N=f&&h.route.id?f[h.route.id]:void 0,x=h.route.errorElement||ta,c&&(y<0&&E===0?(C=!0,D=null):y===E&&(C=!0,D=h.route.hydrateFallbackElement||null)));let W=t.concat(l.slice(0,E+1)),k=()=>{let ee;return N?ee=x:C?ee=D:h.route.Component?ee=w.createElement(h.route.Component,null):h.route.element?ee=h.route.element:ee=g,w.createElement(na,{match:h,routeContext:{outlet:g,matches:W,isDataRoute:r!=null},children:ee})};return r&&(h.route.ErrorBoundary||h.route.errorElement||E===0)?w.createElement(ra,{location:r.location,revalidation:r.revalidation,component:x,error:N,children:k(),routeContext:{outlet:null,matches:W,isDataRoute:!0}}):k()},null)}var Ut=function(e){return e.UseBlocker="useBlocker",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e}(Ut||{}),Ee=function(e){return e.UseBlocker="useBlocker",e.UseLoaderData="useLoaderData",e.UseActionData="useActionData",e.UseRouteError="useRouteError",e.UseNavigation="useNavigation",e.UseRouteLoaderData="useRouteLoaderData",e.UseMatches="useMatches",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e.UseRouteId="useRouteId",e}(Ee||{});function Lr(e){let t=w.useContext(jt);return t||F(!1),t}function Ke(e){let t=w.useContext(Gn);return t||F(!1),t}function oa(e){let t=w.useContext(_e);return t||F(!1),t}function vt(e){let t=oa(),r=t.matches[t.matches.length-1];return r.route.id||F(!1),r.route.id}function xa(){return vt(Ee.UseRouteId)}function Pa(){return Ke(Ee.UseNavigation).navigation}function Sa(){let e=Lr(Ut.UseRevalidator),t=Ke(Ee.UseRevalidator);return w.useMemo(()=>({revalidate:e.router.revalidate,state:t.revalidation}),[e.router.revalidate,t.revalidation])}function _a(){let{matches:e,loaderData:t}=Ke(Ee.UseMatches);return w.useMemo(()=>e.map(r=>vr(r,t)),[e,t])}function Ca(){let e=Ke(Ee.UseLoaderData),t=vt(Ee.UseLoaderData);if(e.errors&&e.errors[t]!=null){console.error("You cannot `useLoaderData` in an errorElement (routeId: "+t+")");return}return e.loaderData[t]}function Da(e){return Ke(Ee.UseRouteLoaderData).loaderData[e]}function ia(){var e;let t=w.useContext(Dr),r=Ke(Ee.UseRouteError),n=vt(Ee.UseRouteError);return t!==void 0?t:(e=r.errors)==null?void 0:e[n]}function la(){let e=w.useContext(ht);return e==null?void 0:e._data}function Ma(){let e=w.useContext(ht);return e==null?void 0:e._error}function sa(){let{router:e}=Lr(Ut.UseNavigateStable),t=vt(Ee.UseNavigateStable),r=w.useRef(!1);return Mr(()=>{r.current=!0}),w.useCallback(function(a,u){u===void 0&&(u={}),r.current&&(typeof a=="number"?e.navigate(a):e.navigate(a,ft({fromRouteId:t},u)))},[e,t])}function La(e){return Qn(e.context)}function Ta(e){let{basename:t="/",children:r=null,location:n,navigationType:a=ne.Pop,navigator:u,static:l=!1,future:f}=e;nt()&&F(!1);let c=t.replace(/^\/*/,"/"),y=w.useMemo(()=>({basename:c,navigator:u,static:l,future:ft({v7_relativeSplatPath:!1},f)}),[c,f,u,l]);typeof n=="string"&&(n=Te(n));let{pathname:g="/",search:h="",hash:E="",state:N=null,key:C="default"}=n,x=w.useMemo(()=>{let D=rt(g,c);return D==null?null:{location:{pathname:D,search:h,hash:E,state:N,key:C},navigationType:a}},[c,g,h,E,N,C,a]);return x==null?null:w.createElement(Ye.Provider,{value:y},w.createElement(Ot.Provider,{children:r,value:x}))}function ja(e){let{children:t,errorElement:r,resolve:n}=e;return w.createElement(ca,{resolve:n,errorElement:r},w.createElement(da,null,t))}var ge=function(e){return e[e.pending=0]="pending",e[e.success=1]="success",e[e.error=2]="error",e}(ge||{});const ua=new Promise(()=>{});class ca extends w.Component{constructor(t){super(t),this.state={error:null}}static getDerivedStateFromError(t){return{error:t}}componentDidCatch(t,r){console.error("<Await> caught the following error during render",t,r)}render(){let{children:t,errorElement:r,resolve:n}=this.props,a=null,u=ge.pending;if(!(n instanceof Promise))u=ge.success,a=Promise.resolve(),Object.defineProperty(a,"_tracked",{get:()=>!0}),Object.defineProperty(a,"_data",{get:()=>n});else if(this.state.error){u=ge.error;let l=this.state.error;a=Promise.reject().catch(()=>{}),Object.defineProperty(a,"_tracked",{get:()=>!0}),Object.defineProperty(a,"_error",{get:()=>l})}else n._tracked?(a=n,u="_error"in a?ge.error:"_data"in a?ge.success:ge.pending):(u=ge.pending,Object.defineProperty(n,"_tracked",{get:()=>!0}),a=n.then(l=>Object.defineProperty(n,"_data",{get:()=>l}),l=>Object.defineProperty(n,"_error",{get:()=>l})));if(u===ge.error&&a._error instanceof St)throw ua;if(u===ge.error&&!r)throw a._error;if(u===ge.error)return w.createElement(ht.Provider,{value:a,children:r});if(u===ge.success)return w.createElement(ht.Provider,{value:a,children:t});throw a}}function da(e){let{children:t}=e,r=la(),n=typeof t=="function"?t(r):t;return w.createElement(w.Fragment,null,n)}function Oa(e){let t={hasErrorBoundary:e.ErrorBoundary!=null||e.errorElement!=null};return e.Component&&Object.assign(t,{element:w.createElement(e.Component),Component:void 0}),e.HydrateFallback&&Object.assign(t,{hydrateFallbackElement:w.createElement(e.HydrateFallback),HydrateFallback:void 0}),e.ErrorBoundary&&Object.assign(t,{errorElement:w.createElement(e.ErrorBoundary),ErrorBoundary:void 0}),t}export{wa as A,Ea as B,pa as C,jt as D,br as E,er as F,Te as G,St as H,Dn as I,va as J,ga as K,Ca as L,ja as M,Ye as N,La as O,Ma as P,Da as Q,Qr as R,ia as a,Ra as b,Pa as c,ba as d,Sa as e,Xr as f,ya as g,ma as h,mt as i,ha as j,Oa as k,_a as l,Ue as m,Jr as n,fa as o,xa as p,_e as q,w as r,F as s,Zn as t,At as u,Se as v,tt as w,rt as x,Gn as y,Ta as z};
|
|
37
|
-
//# sourceMappingURL=index-2WpY3jqc.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
var Qt=Object.defineProperty;var Lt=n=>{throw TypeError(n)};var te=(n,e,i)=>e in n?Qt(n,e,{enumerable:!0,configurable:!0,writable:!0,value:i}):n[e]=i;var O=(n,e,i)=>te(n,typeof e!="symbol"?e+"":e,i),xt=(n,e,i)=>e.has(n)||Lt("Cannot "+i);var t=(n,e,i)=>(xt(n,e,"read from private field"),i?i.call(n):e.get(n)),m=(n,e,i)=>e.has(n)?Lt("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(n):e.set(n,i),f=(n,e,i,s)=>(xt(n,e,"write to private field"),s?s.call(n,i):e.set(n,i),i),u=(n,e,i)=>(xt(n,e,"access private method"),i);var mt=(n,e,i,s)=>({set _(o){f(n,e,o,i)},get _(){return t(n,e,s)}});import{j as g,r as ft,f as ee}from"./index-2WpY3jqc.js";import{c as St,I as ie,a as se,H as at,A as ne}from"./misc-LevbAJZ6.js";import{e as re,L as Ht,a as oe,r as ae,u as he}from"./components-BQB6wEvm.js";import{V as le,D as ce}from"./epic-video-D8tfMIv8.js";import{s as ue}from"./progress-bar-HYCoNAkN.js";import{u as fe}from"./pe-BmTNRcy_.js";import{u as de}from"./request-info-D6MPpnDd.js";function pe(){const n=re("root");if(!n)throw new Error("useApps requires a data object from the root loader");return n.apps}function Ut(n){const e=oe();return ft.useEffect(()=>{e.state==="idle"&&e.data!=null&&(n==null||n("fetcher-done"))},[e,n]),e}function ge({file:n,appFile:e,appName:i,syncTo:s,line:o,column:r,children:a,onUpdate:h}){var _;const c=Ut(h),b=fe(),v=typeof e=="string"?[e]:e,w=n?"file":e?"appFile":"",L=s!=null&&s.file?"file":s!=null&&s.appFile?"appFile":"";return g.jsxs(c.Form,{action:"/launch-editor",method:"POST",className:"flex items-center",children:[b,ue,g.jsx("input",{type:"hidden",name:"line",value:o}),g.jsx("input",{type:"hidden",name:"column",value:r}),g.jsx("input",{type:"hidden",name:"type",value:w}),g.jsx("input",{type:"hidden",name:"file",value:n}),g.jsx("input",{type:"hidden",name:"appName",value:i}),v==null?void 0:v.map(j=>g.jsx("input",{type:"hidden",name:"appFile",value:j},j)),s?g.jsxs(g.Fragment,{children:[g.jsx("input",{type:"hidden",name:"syncTo.type",value:L}),g.jsx("input",{type:"hidden",name:"syncTo.file",value:s.file}),g.jsx("input",{type:"hidden",name:"syncTo.appName",value:s.appName}),g.jsx("input",{type:"hidden",name:"syncTo.appFile",value:s.appFile})]}):null,g.jsx("button",{type:"submit",className:St("launch_button",c.state==="idle"?null:"cursor-progress",((_=c.data)==null?void 0:_.status)==="error"?"cursor-not-allowed":null),children:a})]})}function me({file:n,appFile:e,appName:i,line:s,children:o}){const r=pe(),a=de();if(Array.isArray(e))return g.jsx("div",{children:"Cannot open more than one file"});if(n){const b=v=>v.replace(/\\/g,"/");return g.jsx("a",{className:"launch_button !no-underline",href:b(n).replace(b(ENV.EPICSHOP_CONTEXT_CWD),ENV.EPICSHOP_GITHUB_ROOT)+(s?`#L${s}`:""),rel:"noreferrer",target:"_blank",children:o})}const h=r.find(b=>b.name===i),c=[...(h==null?void 0:h.relativePath.split(a.separator))??[],e+(s?`#L${s}`:"")].join("/");return g.jsx("a",{className:"launch_button !no-underline",href:`${ENV.EPICSHOP_GITHUB_ROOT}/${c}`,rel:"noreferrer",target:"_blank",children:o})}function Le({appFile:n="README.mdx",appName:e,file:i,relativePath:s}){const o=Ut(),r=h=>{if(!h.altKey||ENV.EPICSHOP_DEPLOYED)return;h.preventDefault();const c=new FormData,b=i?"file":"appFile";c.append(b,i??n),c.append("type",b),e&&c.append("appName",e),o.submit(c,{method:"POST",action:"/launch-editor"})},a=ENV.EPICSHOP_GITHUB_ROOT.replace(/\/tree\/|\/blob\//,"/edit/");return g.jsxs(Ht,{className:"self-center font-mono text-sm",onClick:r,target:"_blank",to:`${a}/${s}/${n}`.replace(/\\/g,"/"),children:[g.jsx("span",{className:"block md:hidden",children:"Edit on GitHub"}),g.jsx("span",{className:"hidden md:block",children:"Edit this page on GitHub"})]})}const Vt=ENV.EPICSHOP_DEPLOYED?me:ge,ht=typeof performance=="object"&&performance&&typeof performance.now=="function"?performance:Date,Bt=new Set,At=typeof process=="object"&&process?process:{},$t=(n,e,i,s)=>{typeof At.emitWarning=="function"?At.emitWarning(n,e,i,s):console.error(`[${i}] ${e}: ${n}`)};let yt=globalThis.AbortController,It=globalThis.AbortSignal;var Mt;if(typeof yt>"u"){It=class{constructor(){O(this,"onabort");O(this,"_onabort",[]);O(this,"reason");O(this,"aborted",!1)}addEventListener(s,o){this._onabort.push(o)}},yt=class{constructor(){O(this,"signal",new It);e()}abort(s){var o,r;if(!this.signal.aborted){this.signal.reason=s,this.signal.aborted=!0;for(const a of this.signal._onabort)a(s);(r=(o=this.signal).onabort)==null||r.call(o,s)}}};let n=((Mt=At.env)==null?void 0:Mt.LRU_CACHE_IGNORE_AC_WARNING)!=="1";const e=()=>{n&&(n=!1,$t("AbortController is not defined. If using lru-cache in node 14, load an AbortController polyfill from the `node-abort-controller` package. A minimal polyfill is provided for use by LRUCache.fetch(), but it should not be relied upon in other contexts (eg, passing it to other APIs that use AbortController/AbortSignal might have undesirable effects). You may disable this with LRU_CACHE_IGNORE_AC_WARNING=1 in the env.","NO_ABORT_CONTROLLER","ENOTSUP",e))}}const be=n=>!Bt.has(n),Q=n=>n&&n===Math.floor(n)&&n>0&&isFinite(n),qt=n=>Q(n)?n<=Math.pow(2,8)?Uint8Array:n<=Math.pow(2,16)?Uint16Array:n<=Math.pow(2,32)?Uint32Array:n<=Number.MAX_SAFE_INTEGER?bt:null:null;class bt extends Array{constructor(e){super(e),this.fill(0)}}var lt;const nt=class nt{constructor(e,i){O(this,"heap");O(this,"length");if(!t(nt,lt))throw new TypeError("instantiate Stack using Stack.create(n)");this.heap=new i(e),this.length=0}static create(e){const i=qt(e);if(!i)return[];f(nt,lt,!0);const s=new nt(e,i);return f(nt,lt,!1),s}push(e){this.heap[this.length++]=e}pop(){return this.heap[--this.length]}};lt=new WeakMap,m(nt,lt,!1);let Ft=nt;var Gt,kt,U,I,V,B,ct,F,$,A,E,p,R,M,P,T,q,D,X,Y,G,K,it,N,l,Ct,rt,Z,pt,k,Xt,ot,ut,gt,tt,et,Tt,wt,_t,S,Dt,dt;const Rt=class Rt{constructor(e){m(this,l);m(this,U);m(this,I);m(this,V);m(this,B);m(this,ct);O(this,"ttl");O(this,"ttlResolution");O(this,"ttlAutopurge");O(this,"updateAgeOnGet");O(this,"updateAgeOnHas");O(this,"allowStale");O(this,"noDisposeOnSet");O(this,"noUpdateTTL");O(this,"maxEntrySize");O(this,"sizeCalculation");O(this,"noDeleteOnFetchRejection");O(this,"noDeleteOnStaleGet");O(this,"allowStaleOnFetchAbort");O(this,"allowStaleOnFetchRejection");O(this,"ignoreFetchAbort");m(this,F);m(this,$);m(this,A);m(this,E);m(this,p);m(this,R);m(this,M);m(this,P);m(this,T);m(this,q);m(this,D);m(this,X);m(this,Y);m(this,G);m(this,K);m(this,it);m(this,N);m(this,rt,()=>{});m(this,Z,()=>{});m(this,pt,()=>{});m(this,k,()=>!1);m(this,ot,e=>{});m(this,ut,(e,i,s)=>{});m(this,gt,(e,i,s,o)=>{if(s||o)throw new TypeError("cannot set size without setting maxSize or maxEntrySize on cache");return 0});O(this,Gt,"LRUCache");const{max:i=0,ttl:s,ttlResolution:o=1,ttlAutopurge:r,updateAgeOnGet:a,updateAgeOnHas:h,allowStale:c,dispose:b,disposeAfter:v,noDisposeOnSet:w,noUpdateTTL:L,maxSize:_=0,maxEntrySize:j=0,sizeCalculation:x,fetchMethod:C,noDeleteOnFetchRejection:d,noDeleteOnStaleGet:y,allowStaleOnFetchRejection:W,allowStaleOnFetchAbort:z,ignoreFetchAbort:H}=e;if(i!==0&&!Q(i))throw new TypeError("max option must be a nonnegative integer");const st=i?qt(i):Array;if(!st)throw new Error("invalid max value: "+i);if(f(this,U,i),f(this,I,_),this.maxEntrySize=j||t(this,I),this.sizeCalculation=x,this.sizeCalculation){if(!t(this,I)&&!this.maxEntrySize)throw new TypeError("cannot set sizeCalculation without setting maxSize or maxEntrySize");if(typeof this.sizeCalculation!="function")throw new TypeError("sizeCalculation set to non-function")}if(C!==void 0&&typeof C!="function")throw new TypeError("fetchMethod must be a function if specified");if(f(this,ct,C),f(this,it,!!C),f(this,A,new Map),f(this,E,new Array(i).fill(void 0)),f(this,p,new Array(i).fill(void 0)),f(this,R,new st(i)),f(this,M,new st(i)),f(this,P,0),f(this,T,0),f(this,q,Ft.create(i)),f(this,F,0),f(this,$,0),typeof b=="function"&&f(this,V,b),typeof v=="function"?(f(this,B,v),f(this,D,[])):(f(this,B,void 0),f(this,D,void 0)),f(this,K,!!t(this,V)),f(this,N,!!t(this,B)),this.noDisposeOnSet=!!w,this.noUpdateTTL=!!L,this.noDeleteOnFetchRejection=!!d,this.allowStaleOnFetchRejection=!!W,this.allowStaleOnFetchAbort=!!z,this.ignoreFetchAbort=!!H,this.maxEntrySize!==0){if(t(this,I)!==0&&!Q(t(this,I)))throw new TypeError("maxSize must be a positive integer if specified");if(!Q(this.maxEntrySize))throw new TypeError("maxEntrySize must be a positive integer if specified");u(this,l,Xt).call(this)}if(this.allowStale=!!c,this.noDeleteOnStaleGet=!!y,this.updateAgeOnGet=!!a,this.updateAgeOnHas=!!h,this.ttlResolution=Q(o)||o===0?o:1,this.ttlAutopurge=!!r,this.ttl=s||0,this.ttl){if(!Q(this.ttl))throw new TypeError("ttl must be a positive integer if specified");u(this,l,Ct).call(this)}if(t(this,U)===0&&this.ttl===0&&t(this,I)===0)throw new TypeError("At least one of max, maxSize, or ttl is required");if(!this.ttlAutopurge&&!t(this,U)&&!t(this,I)){const J="LRU_CACHE_UNBOUNDED";be(J)&&(Bt.add(J),$t("TTL caching without ttlAutopurge, max, or maxSize can result in unbounded memory consumption.","UnboundedCacheWarning",J,Rt))}}static unsafeExposeInternals(e){return{starts:t(e,Y),ttls:t(e,G),sizes:t(e,X),keyMap:t(e,A),keyList:t(e,E),valList:t(e,p),next:t(e,R),prev:t(e,M),get head(){return t(e,P)},get tail(){return t(e,T)},free:t(e,q),isBackgroundFetch:i=>{var s;return u(s=e,l,S).call(s,i)},backgroundFetch:(i,s,o,r)=>{var a;return u(a=e,l,_t).call(a,i,s,o,r)},moveToTail:i=>{var s;return u(s=e,l,dt).call(s,i)},indexes:i=>{var s;return u(s=e,l,tt).call(s,i)},rindexes:i=>{var s;return u(s=e,l,et).call(s,i)},isStale:i=>{var s;return t(s=e,k).call(s,i)}}}get max(){return t(this,U)}get maxSize(){return t(this,I)}get calculatedSize(){return t(this,$)}get size(){return t(this,F)}get fetchMethod(){return t(this,ct)}get dispose(){return t(this,V)}get disposeAfter(){return t(this,B)}getRemainingTTL(e){return t(this,A).has(e)?1/0:0}*entries(){for(const e of u(this,l,tt).call(this))t(this,p)[e]!==void 0&&t(this,E)[e]!==void 0&&!u(this,l,S).call(this,t(this,p)[e])&&(yield[t(this,E)[e],t(this,p)[e]])}*rentries(){for(const e of u(this,l,et).call(this))t(this,p)[e]!==void 0&&t(this,E)[e]!==void 0&&!u(this,l,S).call(this,t(this,p)[e])&&(yield[t(this,E)[e],t(this,p)[e]])}*keys(){for(const e of u(this,l,tt).call(this)){const i=t(this,E)[e];i!==void 0&&!u(this,l,S).call(this,t(this,p)[e])&&(yield i)}}*rkeys(){for(const e of u(this,l,et).call(this)){const i=t(this,E)[e];i!==void 0&&!u(this,l,S).call(this,t(this,p)[e])&&(yield i)}}*values(){for(const e of u(this,l,tt).call(this))t(this,p)[e]!==void 0&&!u(this,l,S).call(this,t(this,p)[e])&&(yield t(this,p)[e])}*rvalues(){for(const e of u(this,l,et).call(this))t(this,p)[e]!==void 0&&!u(this,l,S).call(this,t(this,p)[e])&&(yield t(this,p)[e])}[(kt=Symbol.iterator,Gt=Symbol.toStringTag,kt)](){return this.entries()}find(e,i={}){for(const s of u(this,l,tt).call(this)){const o=t(this,p)[s],r=u(this,l,S).call(this,o)?o.__staleWhileFetching:o;if(r!==void 0&&e(r,t(this,E)[s],this))return this.get(t(this,E)[s],i)}}forEach(e,i=this){for(const s of u(this,l,tt).call(this)){const o=t(this,p)[s],r=u(this,l,S).call(this,o)?o.__staleWhileFetching:o;r!==void 0&&e.call(i,r,t(this,E)[s],this)}}rforEach(e,i=this){for(const s of u(this,l,et).call(this)){const o=t(this,p)[s],r=u(this,l,S).call(this,o)?o.__staleWhileFetching:o;r!==void 0&&e.call(i,r,t(this,E)[s],this)}}purgeStale(){let e=!1;for(const i of u(this,l,et).call(this,{allowStale:!0}))t(this,k).call(this,i)&&(this.delete(t(this,E)[i]),e=!0);return e}info(e){const i=t(this,A).get(e);if(i===void 0)return;const s=t(this,p)[i],o=u(this,l,S).call(this,s)?s.__staleWhileFetching:s;if(o===void 0)return;const r={value:o};if(t(this,G)&&t(this,Y)){const a=t(this,G)[i],h=t(this,Y)[i];if(a&&h){const c=a-(ht.now()-h);r.ttl=c,r.start=Date.now()}}return t(this,X)&&(r.size=t(this,X)[i]),r}dump(){const e=[];for(const i of u(this,l,tt).call(this,{allowStale:!0})){const s=t(this,E)[i],o=t(this,p)[i],r=u(this,l,S).call(this,o)?o.__staleWhileFetching:o;if(r===void 0||s===void 0)continue;const a={value:r};if(t(this,G)&&t(this,Y)){a.ttl=t(this,G)[i];const h=ht.now()-t(this,Y)[i];a.start=Math.floor(Date.now()-h)}t(this,X)&&(a.size=t(this,X)[i]),e.unshift([s,a])}return e}load(e){this.clear();for(const[i,s]of e){if(s.start){const o=Date.now()-s.start;s.start=ht.now()-o}this.set(i,s.value,s)}}set(e,i,s={}){var L,_,j,x,C;if(i===void 0)return this.delete(e),this;const{ttl:o=this.ttl,start:r,noDisposeOnSet:a=this.noDisposeOnSet,sizeCalculation:h=this.sizeCalculation,status:c}=s;let{noUpdateTTL:b=this.noUpdateTTL}=s;const v=t(this,gt).call(this,e,i,s.size||0,h);if(this.maxEntrySize&&v>this.maxEntrySize)return c&&(c.set="miss",c.maxEntrySizeExceeded=!0),this.delete(e),this;let w=t(this,F)===0?void 0:t(this,A).get(e);if(w===void 0)w=t(this,F)===0?t(this,T):t(this,q).length!==0?t(this,q).pop():t(this,F)===t(this,U)?u(this,l,wt).call(this,!1):t(this,F),t(this,E)[w]=e,t(this,p)[w]=i,t(this,A).set(e,w),t(this,R)[t(this,T)]=w,t(this,M)[w]=t(this,T),f(this,T,w),mt(this,F)._++,t(this,ut).call(this,w,v,c),c&&(c.set="add"),b=!1;else{u(this,l,dt).call(this,w);const d=t(this,p)[w];if(i!==d){if(t(this,it)&&u(this,l,S).call(this,d)){d.__abortController.abort(new Error("replaced"));const{__staleWhileFetching:y}=d;y!==void 0&&!a&&(t(this,K)&&((L=t(this,V))==null||L.call(this,y,e,"set")),t(this,N)&&((_=t(this,D))==null||_.push([y,e,"set"])))}else a||(t(this,K)&&((j=t(this,V))==null||j.call(this,d,e,"set")),t(this,N)&&((x=t(this,D))==null||x.push([d,e,"set"])));if(t(this,ot).call(this,w),t(this,ut).call(this,w,v,c),t(this,p)[w]=i,c){c.set="replace";const y=d&&u(this,l,S).call(this,d)?d.__staleWhileFetching:d;y!==void 0&&(c.oldValue=y)}}else c&&(c.set="update")}if(o!==0&&!t(this,G)&&u(this,l,Ct).call(this),t(this,G)&&(b||t(this,pt).call(this,w,o,r),c&&t(this,Z).call(this,c,w)),!a&&t(this,N)&&t(this,D)){const d=t(this,D);let y;for(;y=d==null?void 0:d.shift();)(C=t(this,B))==null||C.call(this,...y)}return this}pop(){var e;try{for(;t(this,F);){const i=t(this,p)[t(this,P)];if(u(this,l,wt).call(this,!0),u(this,l,S).call(this,i)){if(i.__staleWhileFetching)return i.__staleWhileFetching}else if(i!==void 0)return i}}finally{if(t(this,N)&&t(this,D)){const i=t(this,D);let s;for(;s=i==null?void 0:i.shift();)(e=t(this,B))==null||e.call(this,...s)}}}has(e,i={}){const{updateAgeOnHas:s=this.updateAgeOnHas,status:o}=i,r=t(this,A).get(e);if(r!==void 0){const a=t(this,p)[r];if(u(this,l,S).call(this,a)&&a.__staleWhileFetching===void 0)return!1;if(t(this,k).call(this,r))o&&(o.has="stale",t(this,Z).call(this,o,r));else return s&&t(this,rt).call(this,r),o&&(o.has="hit",t(this,Z).call(this,o,r)),!0}else o&&(o.has="miss");return!1}peek(e,i={}){const{allowStale:s=this.allowStale}=i,o=t(this,A).get(e);if(o===void 0||!s&&t(this,k).call(this,o))return;const r=t(this,p)[o];return u(this,l,S).call(this,r)?r.__staleWhileFetching:r}async fetch(e,i={}){const{allowStale:s=this.allowStale,updateAgeOnGet:o=this.updateAgeOnGet,noDeleteOnStaleGet:r=this.noDeleteOnStaleGet,ttl:a=this.ttl,noDisposeOnSet:h=this.noDisposeOnSet,size:c=0,sizeCalculation:b=this.sizeCalculation,noUpdateTTL:v=this.noUpdateTTL,noDeleteOnFetchRejection:w=this.noDeleteOnFetchRejection,allowStaleOnFetchRejection:L=this.allowStaleOnFetchRejection,ignoreFetchAbort:_=this.ignoreFetchAbort,allowStaleOnFetchAbort:j=this.allowStaleOnFetchAbort,context:x,forceRefresh:C=!1,status:d,signal:y}=i;if(!t(this,it))return d&&(d.fetch="get"),this.get(e,{allowStale:s,updateAgeOnGet:o,noDeleteOnStaleGet:r,status:d});const W={allowStale:s,updateAgeOnGet:o,noDeleteOnStaleGet:r,ttl:a,noDisposeOnSet:h,size:c,sizeCalculation:b,noUpdateTTL:v,noDeleteOnFetchRejection:w,allowStaleOnFetchRejection:L,allowStaleOnFetchAbort:j,ignoreFetchAbort:_,status:d,signal:y};let z=t(this,A).get(e);if(z===void 0){d&&(d.fetch="miss");const H=u(this,l,_t).call(this,e,z,W,x);return H.__returned=H}else{const H=t(this,p)[z];if(u(this,l,S).call(this,H)){const Wt=s&&H.__staleWhileFetching!==void 0;return d&&(d.fetch="inflight",Wt&&(d.returnedStale=!0)),Wt?H.__staleWhileFetching:H.__returned=H}const st=t(this,k).call(this,z);if(!C&&!st)return d&&(d.fetch="hit"),u(this,l,dt).call(this,z),o&&t(this,rt).call(this,z),d&&t(this,Z).call(this,d,z),H;const J=u(this,l,_t).call(this,e,z,W,x),Nt=J.__staleWhileFetching!==void 0&&s;return d&&(d.fetch=st?"stale":"refresh",Nt&&st&&(d.returnedStale=!0)),Nt?J.__staleWhileFetching:J.__returned=J}}get(e,i={}){const{allowStale:s=this.allowStale,updateAgeOnGet:o=this.updateAgeOnGet,noDeleteOnStaleGet:r=this.noDeleteOnStaleGet,status:a}=i,h=t(this,A).get(e);if(h!==void 0){const c=t(this,p)[h],b=u(this,l,S).call(this,c);return a&&t(this,Z).call(this,a,h),t(this,k).call(this,h)?(a&&(a.get="stale"),b?(a&&s&&c.__staleWhileFetching!==void 0&&(a.returnedStale=!0),s?c.__staleWhileFetching:void 0):(r||this.delete(e),a&&s&&(a.returnedStale=!0),s?c:void 0)):(a&&(a.get="hit"),b?c.__staleWhileFetching:(u(this,l,dt).call(this,h),o&&t(this,rt).call(this,h),c))}else a&&(a.get="miss")}delete(e){var s,o,r,a;let i=!1;if(t(this,F)!==0){const h=t(this,A).get(e);if(h!==void 0)if(i=!0,t(this,F)===1)this.clear();else{t(this,ot).call(this,h);const c=t(this,p)[h];if(u(this,l,S).call(this,c)?c.__abortController.abort(new Error("deleted")):(t(this,K)||t(this,N))&&(t(this,K)&&((s=t(this,V))==null||s.call(this,c,e,"delete")),t(this,N)&&((o=t(this,D))==null||o.push([c,e,"delete"]))),t(this,A).delete(e),t(this,E)[h]=void 0,t(this,p)[h]=void 0,h===t(this,T))f(this,T,t(this,M)[h]);else if(h===t(this,P))f(this,P,t(this,R)[h]);else{const b=t(this,M)[h];t(this,R)[b]=t(this,R)[h];const v=t(this,R)[h];t(this,M)[v]=t(this,M)[h]}mt(this,F)._--,t(this,q).push(h)}}if(t(this,N)&&((r=t(this,D))!=null&&r.length)){const h=t(this,D);let c;for(;c=h==null?void 0:h.shift();)(a=t(this,B))==null||a.call(this,...c)}return i}clear(){var e,i,s;for(const o of u(this,l,et).call(this,{allowStale:!0})){const r=t(this,p)[o];if(u(this,l,S).call(this,r))r.__abortController.abort(new Error("deleted"));else{const a=t(this,E)[o];t(this,K)&&((e=t(this,V))==null||e.call(this,r,a,"delete")),t(this,N)&&((i=t(this,D))==null||i.push([r,a,"delete"]))}}if(t(this,A).clear(),t(this,p).fill(void 0),t(this,E).fill(void 0),t(this,G)&&t(this,Y)&&(t(this,G).fill(0),t(this,Y).fill(0)),t(this,X)&&t(this,X).fill(0),f(this,P,0),f(this,T,0),t(this,q).length=0,f(this,$,0),f(this,F,0),t(this,N)&&t(this,D)){const o=t(this,D);let r;for(;r=o==null?void 0:o.shift();)(s=t(this,B))==null||s.call(this,...r)}}};U=new WeakMap,I=new WeakMap,V=new WeakMap,B=new WeakMap,ct=new WeakMap,F=new WeakMap,$=new WeakMap,A=new WeakMap,E=new WeakMap,p=new WeakMap,R=new WeakMap,M=new WeakMap,P=new WeakMap,T=new WeakMap,q=new WeakMap,D=new WeakMap,X=new WeakMap,Y=new WeakMap,G=new WeakMap,K=new WeakMap,it=new WeakMap,N=new WeakMap,l=new WeakSet,Ct=function(){const e=new bt(t(this,U)),i=new bt(t(this,U));f(this,G,e),f(this,Y,i),f(this,pt,(r,a,h=ht.now())=>{if(i[r]=a!==0?h:0,e[r]=a,a!==0&&this.ttlAutopurge){const c=setTimeout(()=>{t(this,k).call(this,r)&&this.delete(t(this,E)[r])},a+1);c.unref&&c.unref()}}),f(this,rt,r=>{i[r]=e[r]!==0?ht.now():0}),f(this,Z,(r,a)=>{if(e[a]){const h=e[a],c=i[a];if(!h||!c)return;r.ttl=h,r.start=c,r.now=s||o();const b=r.now-c;r.remainingTTL=h-b}});let s=0;const o=()=>{const r=ht.now();if(this.ttlResolution>0){s=r;const a=setTimeout(()=>s=0,this.ttlResolution);a.unref&&a.unref()}return r};this.getRemainingTTL=r=>{const a=t(this,A).get(r);if(a===void 0)return 0;const h=e[a],c=i[a];if(!h||!c)return 1/0;const b=(s||o())-c;return h-b},f(this,k,r=>{const a=i[r],h=e[r];return!!h&&!!a&&(s||o())-a>h})},rt=new WeakMap,Z=new WeakMap,pt=new WeakMap,k=new WeakMap,Xt=function(){const e=new bt(t(this,U));f(this,$,0),f(this,X,e),f(this,ot,i=>{f(this,$,t(this,$)-e[i]),e[i]=0}),f(this,gt,(i,s,o,r)=>{if(u(this,l,S).call(this,s))return 0;if(!Q(o))if(r){if(typeof r!="function")throw new TypeError("sizeCalculation must be a function");if(o=r(s,i),!Q(o))throw new TypeError("sizeCalculation return invalid (expect positive integer)")}else throw new TypeError("invalid size value (must be positive integer). When maxSize or maxEntrySize is used, sizeCalculation or size must be set.");return o}),f(this,ut,(i,s,o)=>{if(e[i]=s,t(this,I)){const r=t(this,I)-e[i];for(;t(this,$)>r;)u(this,l,wt).call(this,!0)}f(this,$,t(this,$)+e[i]),o&&(o.entrySize=s,o.totalCalculatedSize=t(this,$))})},ot=new WeakMap,ut=new WeakMap,gt=new WeakMap,tt=function*({allowStale:e=this.allowStale}={}){if(t(this,F))for(let i=t(this,T);!(!u(this,l,Tt).call(this,i)||((e||!t(this,k).call(this,i))&&(yield i),i===t(this,P)));)i=t(this,M)[i]},et=function*({allowStale:e=this.allowStale}={}){if(t(this,F))for(let i=t(this,P);!(!u(this,l,Tt).call(this,i)||((e||!t(this,k).call(this,i))&&(yield i),i===t(this,T)));)i=t(this,R)[i]},Tt=function(e){return e!==void 0&&t(this,A).get(t(this,E)[e])===e},wt=function(e){var r,a;const i=t(this,P),s=t(this,E)[i],o=t(this,p)[i];return t(this,it)&&u(this,l,S).call(this,o)?o.__abortController.abort(new Error("evicted")):(t(this,K)||t(this,N))&&(t(this,K)&&((r=t(this,V))==null||r.call(this,o,s,"evict")),t(this,N)&&((a=t(this,D))==null||a.push([o,s,"evict"]))),t(this,ot).call(this,i),e&&(t(this,E)[i]=void 0,t(this,p)[i]=void 0,t(this,q).push(i)),t(this,F)===1?(f(this,P,f(this,T,0)),t(this,q).length=0):f(this,P,t(this,R)[i]),t(this,A).delete(s),mt(this,F)._--,i},_t=function(e,i,s,o){const r=i===void 0?void 0:t(this,p)[i];if(u(this,l,S).call(this,r))return r;const a=new yt,{signal:h}=s;h==null||h.addEventListener("abort",()=>a.abort(h.reason),{signal:a.signal});const c={signal:a.signal,options:s,context:o},b=(x,C=!1)=>{const{aborted:d}=a.signal,y=s.ignoreFetchAbort&&x!==void 0;if(s.status&&(d&&!C?(s.status.fetchAborted=!0,s.status.fetchError=a.signal.reason,y&&(s.status.fetchAbortIgnored=!0)):s.status.fetchResolved=!0),d&&!y&&!C)return w(a.signal.reason);const W=_;return t(this,p)[i]===_&&(x===void 0?W.__staleWhileFetching?t(this,p)[i]=W.__staleWhileFetching:this.delete(e):(s.status&&(s.status.fetchUpdated=!0),this.set(e,x,c.options))),x},v=x=>(s.status&&(s.status.fetchRejected=!0,s.status.fetchError=x),w(x)),w=x=>{const{aborted:C}=a.signal,d=C&&s.allowStaleOnFetchAbort,y=d||s.allowStaleOnFetchRejection,W=y||s.noDeleteOnFetchRejection,z=_;if(t(this,p)[i]===_&&(!W||z.__staleWhileFetching===void 0?this.delete(e):d||(t(this,p)[i]=z.__staleWhileFetching)),y)return s.status&&z.__staleWhileFetching!==void 0&&(s.status.returnedStale=!0),z.__staleWhileFetching;if(z.__returned===z)throw x},L=(x,C)=>{var y;const d=(y=t(this,ct))==null?void 0:y.call(this,e,r,c);d&&d instanceof Promise&&d.then(W=>x(W===void 0?void 0:W),C),a.signal.addEventListener("abort",()=>{(!s.ignoreFetchAbort||s.allowStaleOnFetchAbort)&&(x(void 0),s.allowStaleOnFetchAbort&&(x=W=>b(W,!0)))})};s.status&&(s.status.fetchDispatched=!0);const _=new Promise(L).then(b,v),j=Object.assign(_,{__abortController:a,__staleWhileFetching:r,__returned:void 0});return i===void 0?(this.set(e,j,{...c.options,status:void 0}),i=t(this,A).get(e)):t(this,p)[i]=j,j},S=function(e){if(!t(this,it))return!1;const i=e;return!!i&&i instanceof Promise&&i.hasOwnProperty("__staleWhileFetching")&&i.__abortController instanceof yt},Dt=function(e,i){t(this,M)[i]=e,t(this,R)[e]=i},dt=function(e){e!==t(this,T)&&(e===t(this,P)?f(this,P,t(this,R)[e]):u(this,l,Dt).call(this,t(this,M)[e],t(this,R)[e]),u(this,l,Dt).call(this,t(this,T),e),f(this,T,e))};let jt=Rt;var Et={};Object.defineProperty(Et,"__esModule",{value:!0});Et.getMDXComponent=Se;Et.getMDXExport=Kt;var we=Pt(ee()),_e=Pt(g),ye=Pt(ae);function Yt(n){if(typeof WeakMap!="function")return null;var e=new WeakMap,i=new WeakMap;return(Yt=function(s){return s?i:e})(n)}function Pt(n,e){if(n&&n.__esModule)return n;if(n===null||typeof n!="object"&&typeof n!="function")return{default:n};var i=Yt(e);if(i&&i.has(n))return i.get(n);var s={__proto__:null},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var r in n)if(r!=="default"&&{}.hasOwnProperty.call(n,r)){var a=o?Object.getOwnPropertyDescriptor(n,r):null;a&&(a.get||a.set)?Object.defineProperty(s,r,a):s[r]=n[r]}return s.default=n,i&&i.set(n,s),s}function Se(n,e){return Kt(n,e).default}function Kt(n,e){const i={React:we,ReactDOM:ye,_jsx_runtime:_e,...e};return new Function(...Object.keys(i),n)(...Object.values(i))}var Ee=Et;const Ot=n=>n.replace(/\\/g,"/");function Zt(n,e,i){const[,s]=n.replace(/\\|\//g,e).split(`${i==="playground"?"example":"exercises"}${e}`);return s}const zt="border-border bg-[var(--shiki-background)] hover:bg-foreground/20 active:bg-foreground/30 box-content block rounded border-2 px-2 py-0.5 font-mono text-xs font-semibold outline-none transition duration-300 ease-in-out";function xe({"data-buttons":n,"data-filename":e,"data-fullpath":i,"data-sep":s="/","data-start":o,"data-type":r}){var L;const a=he();if(r==="other"||!n||!e||!i)return null;const h=Ot(((L=a[a.type])==null?void 0:L.fullPath)??""),c=!i.startsWith(h),b=ENV.EPICSHOP_DEPLOYED?["problem","solution"]:["problem","solution","playground"],v=n.split(","),w=b.filter(_=>v.includes(_));return g.jsx(g.Fragment,{children:w.map(_=>{var d;const j=a[_];if(_==="playground"){const y=a.playground&&a.playground.appName!==((d=a.problem)==null?void 0:d.name);if(!j||y||c)return g.jsxs("button",{className:St(zt,"cursor-not-allowed"),title:y?"Playground is not set to the right app":c?"This file is from different app":"You must 'Set to Playground' before opening a file",children:[g.jsx("span",{className:"uppercase",children:"Open"})," in ",_]},_)}if(!j||!j.fullPath)return null;const x=[Ot(j.fullPath),Ot(e)].join(s),C=Zt(x,s,_);return g.jsx(Vt,{file:x,line:Number(o??1),children:g.jsxs("span",{title:C,className:zt,children:[g.jsx("span",{className:"uppercase",children:"Open"})," in ",_]})},_)})})}function Oe(){const[n,e]=ft.useState(!1);return ft.useEffect(()=>{if(n){const i=setTimeout(()=>e(!1),1500);return()=>clearTimeout(i)}},[n]),g.jsx("button",{className:se(zt,"w-12 uppercase"),onClick:i=>{var r,a,h;e(!0);const o=((h=(a=(r=i.currentTarget.parentElement)==null?void 0:r.parentElement)==null?void 0:a.querySelector("pre"))==null?void 0:h.textContent)||"";navigator.clipboard.writeText(o)},children:n?"copied":"copy"})}function ve({children:n,...e}){const{"data-buttons":i,"data-filename":s,"data-fullpath":o,"data-nocopy":r,"data-sep":a}=e,h=r===void 0;function c(){if(o&&a)return!s||s.includes("..")?{"data-filename":Zt(o,a)}:{"data-filename":s.replace(/\//g,a)}}return g.jsxs("div",{className:"group relative",children:[g.jsxs("div",{className:"absolute right-0 top-0 z-50 m-2 flex items-baseline justify-end gap-4 opacity-0 transition duration-300 ease-in-out focus-within:opacity-100 group-hover:opacity-100",children:[i?g.jsx(xe,{...e}):null,h?g.jsx(Oe,{}):null]}),g.jsx("pre",{...e,className:St("scrollbar-thin scrollbar-thumb-scrollbar",e.className??""),...c(),children:n})]})}const Ae={h1:n=>g.jsx(at,{...n,as:"h1"}),h2:n=>g.jsx(at,{...n,as:"h2"}),h3:n=>g.jsx(at,{...n,as:"h3"}),h4:n=>g.jsx(at,{...n,as:"h4"}),h5:n=>g.jsx(at,{...n,as:"h5"}),h6:n=>g.jsx(at,{...n,as:"h6"}),a:ne,p:n=>g.jsx("div",{...n}),pre:n=>g.jsx("pre",{...n,className:St("scrollbar-thin scrollbar-thumb-scrollbar",n.className??"")}),LaunchEditor:Vt,VideoEmbed:le,EpicVideo:ce};function Fe(n){const e=Ee.getMDXComponent(n);function i({components:s,...o}){const r=ft.useMemo(()=>({...Ae,...s}),[s]);return g.jsx(e,{components:r,...o})}return i}const vt=new jt({max:1e3});function je(n){return ft.useMemo(()=>{if(vt.has(n))return vt.get(n);const e=Fe(n);return vt.set(n,e),e},[n])}function Ge({code:n,components:e}){const i=je(n),s=ft.useMemo(()=>({Icon:ie,pre:ve,Link:Ht,...e}),[e]);return g.jsx(i,{components:s})}export{Le as E,Vt as L,Ge as M};
|
|
2
|
-
//# sourceMappingURL=mdx-D0cZm8uP.js.map
|