@epic-web/workshop-app 4.22.0 → 4.22.1

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.
Files changed (71) hide show
  1. package/build/client/assets/_exerciseNumber-CpcJsfoV.js +2 -0
  2. package/build/client/assets/{_exerciseNumber-Cq0nozYz.js.map → _exerciseNumber-CpcJsfoV.js.map} +1 -1
  3. package/build/client/assets/_exerciseNumber_.finished-Ddb3J5ls.js +2 -0
  4. package/build/client/assets/{_exerciseNumber_.finished-Q9qnPuZX.js.map → _exerciseNumber_.finished-Ddb3J5ls.js.map} +1 -1
  5. package/build/client/assets/{_layout-AgYGL72C.js → _layout-BLsKV5zF.js} +2 -2
  6. package/build/client/assets/{_layout-AgYGL72C.js.map → _layout-BLsKV5zF.js.map} +1 -1
  7. package/build/client/assets/_layout-CGLKLU3y.js +2 -0
  8. package/build/client/assets/{_layout-C8uU4Hwj.js.map → _layout-CGLKLU3y.js.map} +1 -1
  9. package/build/client/assets/_layout-DVR5FOsb.js +2 -0
  10. package/build/client/assets/_layout-DVR5FOsb.js.map +1 -0
  11. package/build/client/assets/app-BhrXo-z3.js +2 -0
  12. package/build/client/assets/{app-BiWJY58g.js.map → app-BhrXo-z3.js.map} +1 -1
  13. package/build/client/assets/diff-BNr0PhFR.js +2 -0
  14. package/build/client/assets/{diff-Cw8ktQ1-.js.map → diff-BNr0PhFR.js.map} +1 -1
  15. package/build/client/assets/{diff-CpFxuKA2.js → diff-Cr4LLBag.js} +2 -2
  16. package/build/client/assets/{diff-CpFxuKA2.js.map → diff-Cr4LLBag.js.map} +1 -1
  17. package/build/client/assets/{epic-video-iluUs1-s.js → epic-video-CxZy3iqK.js} +2 -2
  18. package/build/client/assets/{epic-video-iluUs1-s.js.map → epic-video-CxZy3iqK.js.map} +1 -1
  19. package/build/client/assets/finished-CU8QBU41.js +2 -0
  20. package/build/client/assets/{finished-Bm-bCUU2.js.map → finished-CU8QBU41.js.map} +1 -1
  21. package/build/client/assets/index-6GyYWV9G.js +2 -0
  22. package/build/client/assets/{index-BATSX33w.js.map → index-6GyYWV9G.js.map} +1 -1
  23. package/build/client/assets/index-BotyhhDm.js +2 -0
  24. package/build/client/assets/{index-Tfdnz1AB.js.map → index-BotyhhDm.js.map} +1 -1
  25. package/build/client/assets/index-CWVcudJR.js +2 -0
  26. package/build/client/assets/{index-Dm1ll1kT.js.map → index-CWVcudJR.js.map} +1 -1
  27. package/build/client/assets/manifest-42dc4b5a.js +1 -0
  28. package/build/client/assets/mdx-D7ttfz2V.js +2 -0
  29. package/build/client/assets/mdx-D7ttfz2V.js.map +1 -0
  30. package/build/client/assets/onboarding-Co4cldZ0.js +2 -0
  31. package/build/client/assets/{onboarding-CnmE4HLR.js.map → onboarding-Co4cldZ0.js.map} +1 -1
  32. package/build/client/assets/pe-CUZaIcdt.js +2 -0
  33. package/build/client/assets/pe-CUZaIcdt.js.map +1 -0
  34. package/build/client/assets/preview-CdiZ0d0L.js +2 -0
  35. package/build/client/assets/preview-CdiZ0d0L.js.map +1 -0
  36. package/build/client/assets/progress-Biq-ngNF.js +2 -0
  37. package/build/client/assets/{progress-BsY6hGPp.js.map → progress-Biq-ngNF.js.map} +1 -1
  38. package/build/client/assets/{root-Tcnfz99O.js → root-D_FY953d.js} +2 -2
  39. package/build/client/assets/{root-Tcnfz99O.js.map → root-D_FY953d.js.map} +1 -1
  40. package/build/client/assets/set-playground-BXHckvUG.js +2 -0
  41. package/build/client/assets/set-playground-BXHckvUG.js.map +1 -0
  42. package/build/client/assets/test-_8PxC8xF.js +2 -0
  43. package/build/client/assets/{test-D9HsTvpe.js.map → test-_8PxC8xF.js.map} +1 -1
  44. package/build/client/assets/{tests-CmNNBElK.js → tests-t3Udab79.js} +2 -2
  45. package/build/client/assets/{tests-CmNNBElK.js.map → tests-t3Udab79.js.map} +1 -1
  46. package/build/server/index.js +111 -69
  47. package/build/server/index.js.map +1 -1
  48. package/package.json +3 -3
  49. package/build/client/assets/_exerciseNumber-Cq0nozYz.js +0 -2
  50. package/build/client/assets/_exerciseNumber_.finished-Q9qnPuZX.js +0 -2
  51. package/build/client/assets/_layout-BocZ2xWF.js +0 -2
  52. package/build/client/assets/_layout-BocZ2xWF.js.map +0 -1
  53. package/build/client/assets/_layout-C8uU4Hwj.js +0 -2
  54. package/build/client/assets/app-BiWJY58g.js +0 -2
  55. package/build/client/assets/diff-Cw8ktQ1-.js +0 -2
  56. package/build/client/assets/finished-Bm-bCUU2.js +0 -2
  57. package/build/client/assets/index-BATSX33w.js +0 -2
  58. package/build/client/assets/index-Dm1ll1kT.js +0 -2
  59. package/build/client/assets/index-Tfdnz1AB.js +0 -2
  60. package/build/client/assets/manifest-4a3cf2ec.js +0 -1
  61. package/build/client/assets/mdx-M0kcP-mP.js +0 -2
  62. package/build/client/assets/mdx-M0kcP-mP.js.map +0 -1
  63. package/build/client/assets/onboarding-CnmE4HLR.js +0 -2
  64. package/build/client/assets/preview-CqrRe2BV.js +0 -2
  65. package/build/client/assets/preview-CqrRe2BV.js.map +0 -1
  66. package/build/client/assets/progress-BsY6hGPp.js +0 -2
  67. package/build/client/assets/set-playground-Cdy8VlVD.js +0 -2
  68. package/build/client/assets/set-playground-Cdy8VlVD.js.map +0 -1
  69. package/build/client/assets/test-D9HsTvpe.js +0 -2
  70. package/build/client/assets/use-hydrated-Citou692.js +0 -2
  71. package/build/client/assets/use-hydrated-Citou692.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@epic-web/workshop-app",
3
- "version": "4.22.0",
3
+ "version": "4.22.1",
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.22.0",
48
- "@epic-web/workshop-utils": "4.22.0",
47
+ "@epic-web/workshop-presence": "4.22.1",
48
+ "@epic-web/workshop-utils": "4.22.1",
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 r,a as l,i as c}from"./index-1cKOJFpX.js";import{E as m}from"./index-Dx5GmdYq.js";import{E as a}from"./epic-video-iluUs1-s.js";import{M as d,E as x}from"./mdx-M0kcP-mP.js";import{P as p}from"./progress-BsY6hGPp.js";import{g as u}from"./misc-ENVX3CWf.js";import{g as f}from"./seo-pBpFCWsy.js";import{u as b,L as h}from"./components-CME-nGId.js";import"./index-BATSX33w.js";import"./request-info-CEhUGODY.js";import"./tooltip-BiHTe_7F.js";import"./client-hints-DNUUFGmB.js";import"./loading-C5uX0jJw.js";import"./user-D6tTg1yS.js";import"./clsx-B-dksMZM.js";import"./progress-bar-CSvo1ZXP.js";const V=({data:e,matches:o})=>{var i;const t=e==null?void 0:e.exercise.exerciseNumber.toString().padStart(2,"0"),s=(i=o.find(n=>n.id==="root"))==null?void 0:i.data;return!e||!s?[{title:"🦉 | Error"}]:f({title:`📝 | ${t}. ${e.exercise.title} | ${s==null?void 0:s.workshopTitle}`,description:`Introduction for ${t}. ${e.exercise.title}`,ogTitle:e.exercise.title,ogDescription:`Introduction for exercise ${Number(t)}`,instructor:s.instructor,requestInfo:s.requestInfo})},j={h1:()=>null};function q(){var t;const e=b(),o=String(((t=e.firstStep)==null?void 0:t.stepNumber)??"01").padStart(2,"0");return r.jsxs("main",{className:"relative flex h-full w-full max-w-5xl flex-col justify-between border-r md:w-3/4 xl:w-2/3",children:[r.jsxs("article",{id:e.articleId,className:"shadow-on-scrollbox flex w-full flex-1 flex-col gap-12 overflow-y-scroll px-3 py-4 pt-6 scrollbar-thin scrollbar-thumb-scrollbar md:px-10 md:py-12 md:pt-16",children:[r.jsx("div",{children:r.jsx("h1",{className:"text-[clamp(3rem,6vw,7.5rem)] font-extrabold leading-none",children:e.exercise.title})}),r.jsx("div",{children:e.exercise.instructionsCode?r.jsx(a,{epicVideoInfosPromise:e.epicVideoInfosPromise,children:r.jsx("div",{className:"prose dark:prose-invert sm:prose-lg",children:r.jsx(d,{code:e.exercise.instructionsCode,components:j})})}):"No instructions yet..."})]},e.articleId),r.jsx(m,{elementQuery:`#${e.articleId}`},`scroll-${e.articleId}`),r.jsx(p,{type:"instructions",exerciseNumber:e.exerciseNumber,className:"h-14 border-t px-6"}),r.jsxs("div",{className:"flex h-16 justify-between border-b-4 border-t lg:border-b-0",children:[r.jsx("div",{}),r.jsx(x,{file:e.exerciseReadme.file,relativePath:e.exerciseReadme.relativePath}),r.jsx(h,{to:`${o}/${e.firstType}`,prefetch:"intent",className:"flex h-full items-center justify-center bg-foreground px-7 text-background",children:"Start Learning"})]})]})}function B(){const e=l();return typeof document<"u"&&console.error(e),c(e)?e.status===404?r.jsx("p",{children:"Sorry, we couldn't find that step."}):r.jsxs("p",{children:[e.status," ",e.data]}):r.jsx("p",{children:u(e)})}export{B as ErrorBoundary,q as default,V as meta};
2
- //# sourceMappingURL=_exerciseNumber-Cq0nozYz.js.map
@@ -1,2 +0,0 @@
1
- import{j as r,r as n}from"./index-1cKOJFpX.js";import{E as c}from"./index-Dx5GmdYq.js";import{E as a}from"./epic-video-iluUs1-s.js";import{L as m}from"./loading-C5uX0jJw.js";import{N as x}from"./nav-chevrons-B82nbdyj.js";import{M as d,E as f}from"./mdx-M0kcP-mP.js";import{P as p}from"./progress-BsY6hGPp.js";import{c as u}from"./misc-ENVX3CWf.js";import{g as h}from"./seo-pBpFCWsy.js";import{u as b,L as j}from"./components-CME-nGId.js";import"./index-BATSX33w.js";import"./request-info-CEhUGODY.js";import"./tooltip-BiHTe_7F.js";import"./client-hints-DNUUFGmB.js";import"./user-D6tTg1yS.js";import"./clsx-B-dksMZM.js";import"./progress-bar-CSvo1ZXP.js";const U=({data:e,matches:i})=>{var o;const t=e==null?void 0:e.exercise.exerciseNumber.toString().padStart(2,"0"),s=(o=i.find(l=>l.id==="root"))==null?void 0:o.data;return!e||!s?[{title:"🦉 | Error"}]:h({title:`🦉 | ${t}. ${e.exercise.title} | ${s==null?void 0:s.workshopTitle}`,description:`Elaboration for ${t}. ${e.exercise.title}`,ogTitle:`Finished: ${e.exercise.title}`,ogDescription:`Elaboration for exercise ${Number(t)}`,instructor:s.instructor,requestInfo:s.requestInfo})},g={h1:()=>null};function z(){const e=b(),i=e.exercise.exerciseNumber.toString().padStart(2,"0");return r.jsx("div",{className:"flex max-w-full flex-grow flex-col",children:r.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:[r.jsxs("div",{className:"relative flex flex-col sm:col-span-1 sm:row-span-1 sm:h-full lg:border-r",children:[r.jsx("h1",{className:"h-14 border-b pl-10 pr-5 text-sm font-medium leading-tight",children:r.jsx("div",{className:"flex h-14 flex-wrap items-center justify-between gap-x-2 py-2",children:r.jsxs("div",{className:"flex items-center justify-start gap-x-2",children:[r.jsx(j,{to:`/${i}`,className:"hover:underline",children:`${i}. ${e.exercise.title}`}),r.jsx("span",{children:"/"}),r.jsx("span",{children:"Elaboration"})]})})}),r.jsx("article",{className:"shadow-on-scrollbox h-full w-full max-w-none flex-1 scroll-pt-6 space-y-6 overflow-y-auto p-2 scrollbar-thin scrollbar-thumb-scrollbar sm:p-10 sm:pt-8",id:e.articleId,children:e.exercise.finishedCode?r.jsx(a,{epicVideoInfosPromise:e.epicVideoInfosPromise,children:r.jsx("div",{className:"prose dark:prose-invert sm:prose-lg",children:r.jsx(d,{code:e.exercise.finishedCode,components:g})})}):"No finished instructions yet..."}),r.jsx(c,{elementQuery:`#${e.articleId}`}),r.jsx(p,{type:"finished",exerciseNumber:e.exercise.exerciseNumber,className:"h-14 border-t px-6"}),r.jsxs("div",{className:"flex h-16 justify-between border-b-4 border-t lg:border-b-0",children:[r.jsx("div",{}),e.exerciseFinished?r.jsx(f,{file:e.exerciseFinished.file,relativePath:e.exerciseFinished.relativePath}):null,r.jsx(x,{prev:e.prevStepLink,next:e.nextStepLink})]})]}),r.jsx(N,{exerciseFormEmbedUrl:e.exerciseFormEmbedUrl,exerciseTitle:e.exercise.title})]})})}function N({exerciseFormEmbedUrl:e,exerciseTitle:i}){const[t,s]=n.useState(!1);return r.jsxs("div",{className:"relative min-h-full sm:min-h-[unset] sm:flex-shrink-0",children:[t?null:r.jsx("div",{className:"absolute inset-0 z-10 flex items-center justify-center",children:r.jsx(m,{children:r.jsxs("span",{children:["Loading ",i," Elaboration form"]})})}),r.jsx("iframe",{onLoad:()=>s(!0),onError:()=>s(!0),title:"Elaboration",src:e,className:u("absolute inset-0 flex h-full w-full transition-opacity duration-300",t?"opacity-100":"opacity-0")})]})}export{z as default,U as meta};
2
- //# sourceMappingURL=_exerciseNumber_.finished-Q9qnPuZX.js.map
@@ -1,2 +0,0 @@
1
- import{j as e,r as p,O as Z}from"./index-1cKOJFpX.js";import{E as J}from"./index-Dx5GmdYq.js";import{G as X}from"./error-boundary-DDTvdkB4.js";import{N as ee}from"./nav-chevrons-B82nbdyj.js";import{M as re,L as b,E as te}from"./mdx-M0kcP-mP.js";import{P as ne}from"./progress-BsY6hGPp.js";import{S as D}from"./set-playground-Cdy8VlVD.js";import{g as oe}from"./seo-pBpFCWsy.js";import{c as C}from"./clsx-B-dksMZM.js";import{E as se}from"./epic-video-iluUs1-s.js";import{a as ie,c as k,I as S}from"./misc-ENVX3CWf.js";import{S as w,d as ae,j as _,A as I,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-BiHTe_7F.js";import{s as xe}from"./progress-bar-CSvo1ZXP.js";import{a as he,u as v,L as g,b as ve,A as ge}from"./components-CME-nGId.js";import{u as je}from"./request-info-CEhUGODY.js";import{h as Pe,R as be,u as Ne,F as Ce,P as Se}from"./index-BXWoOGxB.js";import"./index-hogig2HK.js";import"./index-BATSX33w.js";import"./client-hints-DNUUFGmB.js";import"./loading-C5uX0jJw.js";import"./user-D6tTg1yS.js";function we({handleClick:r,cacheLocation:n,embeddedKey:t,appFullPath:o}){const s=he();return e.jsxs(s.Form,{action:"/update-mdx-cache",method:"POST",children:[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 Ee(){const r=p.useContext(T);if(!r)throw new Error("useStepContext must be used within a StepContext.Provider");return r}function ye({children:r,inBrowserBrowserRef:n}){return e.jsx(T.Provider,{value:{inBrowserBrowserRef:n},children:r})}const Oe={CodeFile:De,CodeFileNotification:_e,DiffLink:E,PrevDiffLink:ke,NextDiffLink:Ae,InlineFile:Ie,LinkToApp:Le};function Re({inBrowserBrowserRef:r}){const n=v();return n.exerciseStepApp.instructionsCode?e.jsx(ye,{inBrowserBrowserRef:r,children:e.jsx(se,{epicVideoInfosPromise:n.epicVideoInfosPromise,children:e.jsx("div",{className:"prose dark:prose-invert sm:prose-lg",children:e.jsx(re,{code:n.exerciseStepApp.instructionsCode,components:Oe})})})}):null}function M(r,n,t){const o=new URLSearchParams(r);return t===null?o.delete(n):o.set(n,t),o}function Ae({app:r=0,fullPage:n=!1,children:t}){return e.jsx(E,{app1:r,app2:r+1,fullPage:n,children:t})}function ke({app:r=-1,fullPage:n=!1,children:t}){return e.jsx(E,{app1:r,app2:r+1,fullPage:n,children:t})}function E({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 De({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 Ie({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(w,{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 Fe(r){return r==="problem"?"problem":r==="solution"?"solution":"playground"}function Le({to:r,children:n=e.jsx("code",{children:r.toString()}),...t}){var f;const[o]=ve(),s=`?${M(o,"pathname",r.toString()).toString()}`,i=v(),a=Fe(o.get("preview")),l=je(),c=i[a],d=(c==null?void 0:c.dev.type)==="script"?ie({domain:l.domain,port:c.dev.portNumber}):((f=i.playground)==null?void 0:f.dev.type)==="browser"?i.playground.dev.pathname:null,{inBrowserBrowserRef:u}=Ee(),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(w,{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,gr]=ae(y,[_]),N=_(),[$e,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($e,{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",Te=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,{...i,...o,ref:n})});Te.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(I,{asChild:!0,...i,children:l})});B.displayName=Y;var O="PopoverPortal",[Me,He]=H(O,{forceMount:void 0}),G=r=>{const{__scopePopover:n,forceMount:t,children:o,container:s}=r,i=h(O,n);return e.jsx(Me,{scope:n,forceMount:t,children:e.jsx($,{present:t||i.open,children:e.jsx(Se,{asChild:!0,container:s,children:o})})})};G.displayName=O;var j="PopoverContent",q=p.forwardRef((r,n)=>{const t=He(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(Ue,{...s,ref:n}):e.jsx(Ve,{...s,ref:n})})});q.displayName=j;var Ue=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 Pe(a)},[]),e.jsx(be,{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})})})}),Ve=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 Ne(),e.jsx(Ce,{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",Ye=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))})});Ye.displayName=z;var Be="PopoverArrow",Ge=p.forwardRef((r,n)=>{const{__scopePopover:t,...o}=r,s=N(t);return e.jsx(de,{...s,...o,ref:n})});Ge.displayName=Be;function W(r){return r?"open":"closed"}var qe=U,Ke=B,ze=G,We=q;function Qe({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(qe,{open:t,onOpenChange:o,children:[e.jsx(Ke,{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(ze,{children:e.jsx(We,{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(w,{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(ge,{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 jr=({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 Pr(){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(Re,{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(Qe,{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 br(){return e.jsx(X,{statusHandlers:{404:()=>e.jsx("p",{children:"Sorry, we couldn't find an app here."})}})}export{br as ErrorBoundary,Pr as default,jr as meta};
2
- //# sourceMappingURL=_layout-BocZ2xWF.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"_layout-BocZ2xWF.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'\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 json({ 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\n\treturn (\n\t\t<fetcher.Form action=\"/update-mdx-cache\" method=\"POST\">\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","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{c as b,j as e}from"./index-1cKOJFpX.js";import{I as m}from"./misc-ENVX3CWf.js";import{S as f}from"./tooltip-BiHTe_7F.js";import{a as g}from"./progress-BsY6hGPp.js";import{u as N,L as i,F as c}from"./components-CME-nGId.js";import"./clsx-B-dksMZM.js";const L={getSitemapEntries:()=>null},T=({matches:n})=>{var r;const l=(r=n.find(o=>o.id==="root"))==null?void 0:r.data;return[{title:`👷 | ${l==null?void 0:l.workshopTitle}`}]};function S(n,l){return n.type==="unknown"&&l.type==="unknown"?0:n.type==="unknown"?-1:l.type==="unknown"?1:0}function w(n){switch(n.type){case"workshop-instructions":return"/";case"workshop-finished":return"/finished";case"instructions":return`/${n.exerciseNumber.toString().padStart(2,"0")}`;case"step":return`/${n.exerciseNumber.toString().padStart(2,"0")}/${n.stepNumber.toString().padStart(2,"0")}`;case"finished":return`/${n.exerciseNumber.toString().padStart(2,"0")}/finished`;default:return""}}function A(){var a,d;const n=N(),l=b(),r=g(),o=((a=l.formData)==null?void 0:a.get("intent"))==="inspect",u=((d=l.formData)==null?void 0:d.get("intent"))==="stop-inspect",j={completed:"bg-blue-500",incomplete:"bg-yellow-500"};return e.jsxs("main",{className:"container mx-auto mt-8",children:[e.jsx("h1",{className:"text-4xl font-bold",children:"Admin"}),e.jsxs("div",{className:"flex flex-col gap-4",children:[e.jsx("nav",{children:e.jsxs("ul",{className:"flex gap-3",children:[e.jsx("li",{children:e.jsx(i,{className:"underline",to:"/",children:"Home"})}),e.jsx("li",{children:e.jsx(i,{className:"underline",to:"/diff",children:"Diff Viewer"})})]})}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-lg font-bold",children:"Progress"}),r?e.jsx("ul",{className:"flex max-h-72 flex-col gap-2 overflow-y-scroll border-2 p-8 scrollbar-thin scrollbar-thumb-scrollbar",children:r.sort(S).map(s=>{const t=`https://www.epicweb.dev/workshops/${n.workshopSlug}/${s.epicSectionSlug}/${s.epicLessonSlug}`,p=s.epicCompletedAt?"completed":"incomplete",h=[`${s.epicSectionSlug}/${s.epicLessonSlug}`,s.epicCompletedAt?`(${s.epicCompletedAt})`:null].filter(Boolean).join(" ");return e.jsxs("li",{className:"flex items-center gap-2",children:[e.jsx("span",{className:`h-3 w-3 rounded-full ${j[p]}`,title:p}),s.type==="unknown"?e.jsxs("span",{className:"flex items-center gap-1",children:[h,e.jsx("span",{className:"text-red-500",children:e.jsx(f,{content:"This video is in the workshop on EpicWeb.dev, but not in the local workshop.",children:e.jsx(m,{name:"Close"})})})]}):e.jsx(i,{to:w(s),children:h}),e.jsx(i,{to:t,children:e.jsx(m,{name:"ExternalLink"})})]},s.epicLessonSlug)})}):e.jsx("p",{children:"No progress data"})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-lg font-bold",children:"Commands"}),e.jsxs("ul",{className:"max-h-48 overflow-y-scroll border-2 p-8 scrollbar-thin scrollbar-thumb-scrollbar",children:[e.jsx("li",{children:e.jsx(c,{method:"POST",children:e.jsx("button",{name:"intent",value:"clear-caches",children:"Clear local caches"})})}),e.jsx("li",{children:e.jsx(c,{method:"POST",children:e.jsx("button",{name:"intent",value:"clear-data",children:"Clear all local data (including auth data)"})})}),e.jsx("li",{children:n.inspectorRunning?e.jsx(c,{method:"POST",children:e.jsx("button",{name:"intent",value:"stop-inspect",children:o?"Stopping inspector...":"Stop inspector"})}):e.jsx(c,{method:"POST",children:e.jsx("button",{name:"intent",value:"inspect",children:u?"Starting inspector...":"Start inspector"})})})]})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-lg font-bold",children:"Apps"}),e.jsx("ul",{className:"max-h-48 list-none overflow-y-scroll border-2 p-8 scrollbar-thin scrollbar-thumb-scrollbar",children:n.apps.map(s=>e.jsxs("li",{className:"flex items-center gap-2 py-1",children:[n.processes[s.name]?e.jsx(x,{status:"running"}):e.jsx(x,{status:"stopped"}),s.name]},s.name))})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-lg font-bold",children:"Processes"}),e.jsx("ul",{className:"overflow-y-scroll border-2 p-8 scrollbar-thin scrollbar-thumb-scrollbar",children:Object.entries(n.processes).map(([s,t])=>e.jsx("li",{children:e.jsxs("span",{children:[s," - Port: ",t.port," - PID ",t.pid," -"," ",t.color]})},s))})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-lg font-bold",children:"Test Processes"}),e.jsx("ul",{className:"overflow-y-scroll border-2 p-8 scrollbar-thin scrollbar-thumb-scrollbar",children:Object.entries(n.testProcesses).map(([s,t])=>e.jsx("li",{children:e.jsxs("span",{children:[s," - PID ",t.pid," - Exit code: ",t.exitCode]})},s))})]})]})]})}function x({status:n}){const l={running:{pinger:"bg-green-400",circle:"bg-green-500"},starting:{pinger:"bg-sky-400",circle:"bg-sky-500"},stopped:{circle:"bg-gray-500"},taken:{pinger:"bg-red-400",circle:"bg-red-500"}}[n];return e.jsxs("span",{className:"relative flex h-3 w-3",children:[l.pinger?e.jsx("span",{className:`absolute inline-flex h-full w-full animate-ping rounded-full ${l.pinger} opacity-75`}):null,e.jsx("span",{className:`relative inline-flex h-3 w-3 rounded-full ${l.circle}`})]})}export{A as default,L as handle,T as meta};
2
- //# sourceMappingURL=_layout-C8uU4Hwj.js.map
@@ -1,2 +0,0 @@
1
- import{r as t,j as s}from"./index-1cKOJFpX.js";import{P as i}from"./preview-CqrRe2BV.js";import{u as p}from"./components-CME-nGId.js";import"./misc-ENVX3CWf.js";import"./clsx-B-dksMZM.js";import"./request-info-CEhUGODY.js";import"./button-BklqyTPS.js";import"./loading-C5uX0jJw.js";import"./client-hints-DNUUFGmB.js";import"./progress-bar-CSvo1ZXP.js";import"./tooltip-BiHTe_7F.js";import"./index-BATSX33w.js";function d(){const{appInfo:r}=p(),o=t.useRef(null);return s.jsx(i,{appInfo:r,inBrowserBrowserRef:o})}export{d as default};
2
- //# sourceMappingURL=app-BiWJY58g.js.map
@@ -1,2 +0,0 @@
1
- import{c as o,j as r}from"./index-1cKOJFpX.js";import{d as e,c as m}from"./misc-ENVX3CWf.js";import{D as p}from"./diff-CpFxuKA2.js";import{N as n}from"./nav-chevrons-B82nbdyj.js";import{u as f,b as c}from"./components-CME-nGId.js";import"./clsx-B-dksMZM.js";import"./accordion-BroSqIct.js";import"./tooltip-BiHTe_7F.js";import"./index-hogig2HK.js";import"./index-BXWoOGxB.js";import"./mdx-M0kcP-mP.js";import"./epic-video-iluUs1-s.js";import"./index-BATSX33w.js";import"./request-info-CEhUGODY.js";import"./client-hints-DNUUFGmB.js";import"./loading-C5uX0jJw.js";import"./user-D6tTg1yS.js";import"./progress-bar-CSvo1ZXP.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-Cw8ktQ1-.js.map
@@ -1,2 +0,0 @@
1
- import{j as e,r as t}from"./index-1cKOJFpX.js";import{E as l}from"./index-Dx5GmdYq.js";import{E as n}from"./epic-video-iluUs1-s.js";import{L as a}from"./loading-C5uX0jJw.js";import{N as d}from"./nav-chevrons-B82nbdyj.js";import{M as c,E as m}from"./mdx-M0kcP-mP.js";import{c as p}from"./misc-ENVX3CWf.js";import{g as f}from"./seo-pBpFCWsy.js";import{P as h}from"./progress-BsY6hGPp.js";import{u as x,L as u}from"./components-CME-nGId.js";import"./index-BATSX33w.js";import"./request-info-CEhUGODY.js";import"./tooltip-BiHTe_7F.js";import"./client-hints-DNUUFGmB.js";import"./user-D6tTg1yS.js";import"./clsx-B-dksMZM.js";import"./progress-bar-CSvo1ZXP.js";const q={getSitemapEntries:()=>[{route:"/finished"}]},R=({matches:s})=>{var o;const r=(o=s.find(i=>i.id==="root"))==null?void 0:o.data;return r?f({title:`🎉 ${r==null?void 0:r.workshopTitle}`,description:`Elaboration for ${r==null?void 0:r.workshopTitle}`,ogTitle:`Finished ${r==null?void 0:r.workshopTitle}`,ogDescription:"You finished! Time to submit feedback.",instructor:r.instructor,requestInfo:r.requestInfo}):[]},j={h1:()=>null};function U(){const s=x();return e.jsx("div",{className:"flex h-full flex-grow flex-col",children:e.jsxs("main",{className:"grid h-full flex-grow grid-cols-1 grid-rows-2 lg:grid-cols-2 lg:grid-rows-1",children:[e.jsxs("div",{className:"relative col-span-1 row-span-1 flex h-full flex-col lg:border-r",children:[e.jsx("h1",{className:"h-14 border-b pl-10 pr-5 text-sm font-medium uppercase leading-none",children:e.jsx("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",children:[e.jsx(u,{to:"/",className:"hover:underline",children:s.workshopTitle}),e.jsx("span",{children:"/"}),e.jsx("span",{children:"Elaboration"})]})})}),e.jsx("article",{className:"shadow-on-scrollbox h-full w-full max-w-none flex-1 scroll-pt-6 space-y-6 overflow-y-auto p-2 scrollbar-thin scrollbar-thumb-scrollbar sm:p-10 sm:pt-8",id:s.articleId,children:s.finishedCode?e.jsx(n,{epicVideoInfosPromise:s.epicVideoInfosPromise,children:e.jsx("div",{className:"prose dark:prose-invert sm:prose-lg",children:e.jsx(c,{code:s.finishedCode,components:j})})}):"No finished instructions yet..."}),e.jsx(l,{elementQuery:`#${s.articleId}`}),e.jsx(h,{type:"workshop-finished",className:"h-14 border-t px-6"}),e.jsxs("div",{className:"flex h-16 justify-between border-b-4 border-t lg:border-b-0",children:[e.jsx("div",{}),s.workshopFinished.status==="success"?e.jsx(m,{file:s.workshopFinished.file,relativePath:s.workshopFinished.relativePath}):null,e.jsx(d,{prev:s.prevStepLink,next:{to:"/"}})]})]}),e.jsx(b,{workshopTitle:s.workshopTitle,workshopFormEmbedUrl:s.workshopFormEmbedUrl})]})})}function b({workshopTitle:s,workshopFormEmbedUrl:r}){const[o,i]=t.useState(!1);return e.jsxs("div",{className:"relative flex-shrink-0",children:[o?null:e.jsx("div",{className:"absolute inset-0 z-10 flex items-center justify-center",children:e.jsx(a,{children:e.jsxs("span",{children:["Loading ",s," Elaboration form"]})})}),e.jsx("iframe",{onLoad:()=>i(!0),onError:()=>i(!0),title:"Elaboration",src:r,className:p("absolute inset-0 flex h-full w-full transition-opacity duration-300",o?"opacity-100":"opacity-0")})]})}export{U as default,q as handle,R as meta};
2
- //# sourceMappingURL=finished-Bm-bCUU2.js.map
@@ -1,2 +0,0 @@
1
- import{r as I,j}from"./index-1cKOJFpX.js";import{a as A,Z as _e,b as Ce,c as Ue,d as Re,e as Me,f as $e,g as Be,h as Je,i as Ke,j as ze,k as qe,l as He,m as We,z as te,u as Ne}from"./request-info-CEhUGODY.js";import{I as ne}from"./misc-ENVX3CWf.js";import{S as Ge}from"./tooltip-BiHTe_7F.js";import{u as Xe}from"./client-hints-DNUUFGmB.js";import{a as Qe,d as Ye}from"./components-CME-nGId.js";function ye(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r&&(n=n.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),t.push.apply(t,n)}return t}function y(e){for(var r=1;r<arguments.length;r++){var t=arguments[r]!=null?arguments[r]:{};r%2?ye(Object(t),!0).forEach(function(n){xe(e,n,t[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ye(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})}return e}function xe(e,r,t){return r=rr(r),r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function er(e,r){if(typeof e!="object"||e===null)return e;var t=e[Symbol.toPrimitive];if(t!==void 0){var n=t.call(e,r||"default");if(typeof n!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return(r==="string"?String:Number)(e)}function rr(e){var r=er(e,"string");return typeof r=="symbol"?r:String(r)}function tr(e,r){var t=new FormData(e,r);if(r&&r.type==="submit"&&r.name!==""){var n=t.getAll(r.name);n.includes(r.value)||t.append(r.name,r.value)}return t}function T(e){return e?e.split(/\.|(\[\d*\])/).reduce((r,t)=>{if(typeof t<"u"&&t!==""&&t!=="__proto__"&&t!=="constructor"&&t!=="prototype")if(t.startsWith("[")&&t.endsWith("]")){var n=t.slice(1,-1);r.push(Number(n))}else r.push(t);return r},[]):[]}function _(e){return e.reduce((r,t)=>typeof t=="number"?"".concat(r,"[").concat(Number.isNaN(t)?"":t,"]"):r===""||t===""?[r,t].join(""):[r,t].join("."),"")}function z(e,r){return typeof r<"u"?_([...T(e),r]):e??""}function W(e,r){var t=T(e),n=T(r);return t.length>=n.length&&n.every((a,o)=>t[o]===a)}function k(e,r,t){for(var n=T(r),a=n.length,o=a-1,l=-1,i=e;i!=null&&++l<a;){var u=n[l],c=n[l+1],m=l!=o?Object.prototype.hasOwnProperty.call(i,u)&&i[u]!==null?i[u]:typeof c=="number"?[]:{}:t(i[u]);i[u]=m,i=i[u]}}function x(e,r){var t=e;for(var n of T(r)){if(typeof t>"u"||t==null)break;if(!Object.prototype.hasOwnProperty.call(t,n))return;if(Z(t)&&typeof n=="string")t=t[n];else if(Array.isArray(t)&&typeof n=="number")t=t[n];else return}return t}function Z(e){return!!e&&e.constructor===Object&&Object.getPrototypeOf(e)===Object.prototype}function nr(e){return typeof File>"u"?!1:e instanceof File}function M(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;if(Z(e)){var t=Object.keys(e).sort().reduce((n,a)=>{var o=M(e[a],r);return typeof o<"u"&&(n[a]=o),n},{});return Object.keys(t).length===0?void 0:t}if(Array.isArray(e))return e.length===0?void 0:e.map(n=>M(n,r));if(!(typeof e=="string"&&e===""||e===null||nr(e)&&(!r||e.size===0)))return e}function de(e){var r,t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n={},a=(r=t.resolve)!==null&&r!==void 0?r:i=>i;function o(i,u){var c=M(a(i));if(typeof c<"u"&&(n[u]=c),Array.isArray(i))for(var m=0;m<i.length;m++)o(i[m],"".concat(u,"[").concat(m,"]"));else if(Z(i))for(var[g,N]of Object.entries(i))o(N,u?"".concat(u,".").concat(g):g)}if(e){var l;o(e,(l=t.prefix)!==null&&l!==void 0?l:"")}return n}function ee(e,r){if(!e)throw new Error(r)}function $(){return(Date.now()*Math.random()).toString(36)}function J(e){return JSON.parse(JSON.stringify(e))}function ar(e){return e instanceof Element&&(e.tagName==="INPUT"||e.tagName==="SELECT"||e.tagName==="TEXTAREA"||e.tagName==="BUTTON")}function ae(e){return ar(e)&&e.type!=="submit"&&e.type!=="button"&&e.type!=="reset"}function ir(e){var r,t,n=e.target,a=e.submitter;return(r=(t=a==null?void 0:a.getAttribute("formaction"))!==null&&t!==void 0?t:n.getAttribute("action"))!==null&&r!==void 0?r:"".concat(location.pathname).concat(location.search)}function or(e){var r,t=e.target,n=e.submitter,a=(r=n==null?void 0:n.getAttribute("formenctype"))!==null&&r!==void 0?r:t.enctype;return a==="multipart/form-data"?a:"application/x-www-form-urlencoded"}function ur(e){var r,t,n=e.target,a=e.submitter,o=(r=(t=a==null?void 0:a.getAttribute("formmethod"))!==null&&t!==void 0?t:n.getAttribute("method"))===null||r===void 0?void 0:r.toUpperCase();switch(o){case"POST":case"PUT":case"PATCH":case"DELETE":return o}return"GET"}function lr(e,r){if(ee(!!e,"Failed to submit the form. The element provided is null or undefined."),typeof e.requestSubmit=="function")e.requestSubmit(r);else{var t=new SubmitEvent("submit",{bubbles:!0,cancelable:!0,submitter:r});e.dispatchEvent(t)}}var K="__intent__",ie="__state__";function Ee(e){var r=e.get(K),t=e.get(ie);ee((typeof r=="string"||r===null)&&(typeof t=="string"||t===null),'The input name "'.concat(K,'" and "').concat(ie,'" are reserved by Conform. Please use another name for your input.'));var n={payload:{},fields:new Set,intent:fr(r)};t&&(n.state=JSON.parse(t));var a=function(u){if(o===K||o===ie)return 1;n.fields.add(o),k(n.payload,o,c=>c?Array.isArray(c)?c.concat(u):[c,u]:u)};for(var[o,l]of e.entries())a(l);return n}function sr(e,r){var t=Ee(e),n=t.intent;if(n)switch(n.type){case"update":{var a=z(n.payload.name,n.payload.index),o=n.payload.value;typeof n.payload.value<"u"&&(a?k(t.payload,a,()=>o):t.payload=o);break}case"reset":{var l=z(n.payload.name,n.payload.index);l?k(t.payload,l,()=>{}):t.payload={};break}case"insert":case"remove":case"reorder":{je(t.payload,n);break}}var i=r.resolve(t.payload,n),u=c=>dr(y(y({},t),{},{value:c.value,error:c.error}));return i instanceof Promise?i.then(u):u(i)}function dr(e){return e.intent||!e.value||e.error?{status:e.intent?void 0:"error",payload:e.payload,error:typeof e.error<"u"?e.error:{},reply(r){return me(e,r)}}:{status:"success",payload:e.payload,value:e.value,reply(r){return me(e,r)}}}function me(e){var r,t,n,a,o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if("resetForm"in o&&o.resetForm||((r=e.intent)===null||r===void 0?void 0:r.type)==="reset"&&((t=e.intent.payload.name)!==null&&t!==void 0?t:"")==="")return{initialValue:null};if("hideFields"in o&&o.hideFields)for(var l of o.hideFields){var i=x(e.payload,l);typeof i<"u"&&k(e.payload,l,()=>{})}var u="formErrors"in o||"fieldErrors"in o?M(y({"":(n=o.formErrors)!==null&&n!==void 0?n:null},o.fieldErrors)):null,c=e.error||u?y(y({},e.error),u):void 0;return{status:e.intent?void 0:c?"error":"success",intent:e.intent?e.intent:void 0,initialValue:(a=M(e.payload,typeof document<"u"))!==null&&a!==void 0?a:{},error:c,state:e.state,fields:Array.from(e.fields)}}function fr(e){if(!e)return null;var r=JSON.parse(e);if(typeof r.type!="string"||typeof r.payload>"u")throw new Error("Unknown form control intent");return r}function cr(e){switch(e.type){case"insert":return JSON.stringify({type:e.type,payload:y(y({},e.payload),{},{defaultValue:q(e.payload.defaultValue)})});case"update":return JSON.stringify({type:e.type,payload:y(y({},e.payload),{},{value:q(e.payload.value)})});default:return JSON.stringify(e)}}function ue(e,r){var t;switch(ee(Array.isArray(e),"Failed to update list. The value is not an array."),r.type){case"insert":e.splice((t=r.payload.index)!==null&&t!==void 0?t:e.length,0,r.payload.defaultValue);break;case"remove":e.splice(r.payload.index,1);break;case"reorder":e.splice(r.payload.to,0,...e.splice(r.payload.from,1));break;default:throw new Error("Unknown list intent received")}}function je(e,r){k(e,r.payload.name,t=>{var n=t??[];return ue(n,r),n})}var le=Symbol.for("root");function Y(e,r,t){var n=Object.keys(e).sort((u,c)=>c.localeCompare(u)),a={},o=function(){var c=e[l];W(l,r)&&l!==r&&(k(a,l,m=>typeof m>"u"?c:(m[le]=c,m)),delete e[l])};for(var l of n)o();var i=t(x(a,r));Object.assign(e,de(i,{resolve(u){if(Z(u)||Array.isArray(u)){var c;return(c=u[le])!==null&&c!==void 0?c:null}return u},prefix:r}))}function ge(e,r,t){Y(e,r.payload.name,n=>{var a=n??[];switch(r.type){case"insert":ue(a,{type:r.type,payload:y(y({},r.payload),{},{defaultValue:t==null?void 0:t(r.payload.defaultValue)})});break;default:ue(a,r);break}return a})}function q(e){return Z(e)?Object.entries(e).reduce((r,t)=>{var[n,a]=t;return r[n]=q(a),r},{}):Array.isArray(e)?e.map(q):e instanceof Date?e.toISOString():typeof e=="boolean"?e?"on":void 0:typeof e=="number"||typeof e=="bigint"?e.toString():e??void 0}function be(e,r){var t,n,a,o,l,i=r?void 0:e.lastResult,u=e.defaultValue?q(e.defaultValue):{},c=(t=i==null?void 0:i.initialValue)!==null&&t!==void 0?t:u,m={formId:e.formId,isValueUpdated:!1,submissionStatus:i==null?void 0:i.status,defaultValue:u,initialValue:c,value:c,constraint:(n=e.constraint)!==null&&n!==void 0?n:{},validated:(a=i==null||(o=i.state)===null||o===void 0?void 0:o.validated)!==null&&a!==void 0?a:{},key:r?y({"":$()},H(u)):H(u),error:(l=i==null?void 0:i.error)!==null&&l!==void 0?l:{}};return Ie(m,i==null?void 0:i.intent,i==null?void 0:i.fields),m}function H(e,r){return Object.entries(de(e,{prefix:r})).reduce((t,n)=>{var[a,o]=n;if(Array.isArray(o))for(var l=0;l<o.length;l++)t[z(a,l)]=$();return t},{})}function he(e,r){for(var t of Object.keys(e.error).concat(r??[]))e.validated[t]=!0}function Ie(e,r,t,n){var a;if(!r){he(e,t);return}switch(r.type){case"validate":{r.payload.name?e.validated[r.payload.name]=!0:he(e,t);break}case"update":{var{validated:o,value:l}=r.payload,i=z(r.payload.name,r.payload.index);typeof l<"u"&&Oe(e,i??"",l),typeof o<"u"&&(i?Y(e.validated,i,()=>{}):e.validated={},o?((Z(l)||Array.isArray(l))&&Object.assign(e.validated,de(l,{resolve(){return!0},prefix:i})),e.validated[i??""]=!0):i&&delete e.validated[i]);break}case"reset":{var u=z(r.payload.name,r.payload.index),c=x(e.defaultValue,u);Oe(e,u,c),u?(Y(e.validated,u,()=>{}),delete e.validated[u]):e.validated={};break}case"insert":case"remove":case"reorder":{n&&(e.initialValue=J(e.initialValue),e.key=J(e.key),ge(e.key,r,g=>!Array.isArray(g)&&!Z(g)?$():Object.assign(H(g),{[le]:$()})),je(e.initialValue,r)),ge(e.validated,r),e.validated[r.payload.name]=!0;break}}var m=(a=t==null?void 0:t.filter(g=>e.validated[g]))!==null&&a!==void 0?a:[];e.error=Object.entries(e.error).reduce((g,N)=>{var[E,P]=N;return(e.validated[E]||m.some(V=>W(E,V)))&&(g[E]=P),g},{})}function Oe(e,r,t){if(r===""){e.initialValue=t,e.value=t,e.key=y(y({},H(t)),{},{"":$()});return}e.initialValue=J(e.initialValue),e.value=J(e.value),e.key=J(e.key),k(e.initialValue,r,()=>t),k(e.value,r,()=>t),(Z(t)||Array.isArray(t))&&(Y(e.key,r,()=>{}),Object.assign(e.key,H(t,r))),e.key[r]=$()}function G(e){var r={};return new Proxy(r,{get(t,n,a){var o;if(typeof n=="string")return(o=r[n])!==null&&o!==void 0?o:r[n]=e(n,a)}})}function oe(e){var r=M(e);return G((t,n)=>{if(t==="")return r;var a=T(t),o=_(a.slice(0,-1)),l=_(a.slice(-1)),i=n[o];return x(i,l)})}function vr(e){return G((r,t)=>{var n,a=e[r];if(!a){for(var o=T(r),l=o.length-1;l>=0;l--){var i=o[l];if(typeof i=="number"&&!Number.isNaN(i)){o[l]=Number.NaN;break}}var u=_(o);r!==u&&(a=t[u])}return(n=a)!==null&&n!==void 0?n:{}})}function pr(e){return G((r,t)=>{var n=e[r],a=T(r);if(a.length===0)return n;var o=t[_(a.slice(0,-1))];return typeof o>"u"?n:"".concat(o,"/").concat(n??a.at(-1))})}function yr(e){return G(r=>{var t=Object.keys(e);if(r==="")return t.length===0;for(var n of t)if(W(n,r)&&typeof e[n]<"u")return!1;return!0})}function mr(e,r,t){return G(n=>JSON.stringify(e[n])!==JSON.stringify(r[n],(a,o)=>n===""&&a===""&&o?Object.entries(o).reduce((l,i)=>{var[u,c]=i;return t(u)?Object.assign(l??{},{[u]:c}):l},void 0):o))}function U(e,r,t,n){var a=arguments.length>4&&arguments[4]!==void 0?arguments[4]:(E,P)=>JSON.stringify(E)!==JSON.stringify(P);if(n&&e!==r){var o,l,i=(o=n.prefix)!==null&&o!==void 0?o:[],u=(l=n.name)!==null&&l!==void 0?l:[],c=i.length===0?u:Array.from(new Set([...Object.keys(e),...Object.keys(r)])),m=function(P){if(i.length===0||u.includes(P)||i.some(B=>W(P,B))){var V;if((V=t[P])!==null&&V!==void 0||(t[P]=a(e[P],r[P])),t[P])return{v:!0}}},g;for(var N of c)if(g=m(N),g)return g.v}return!1}function gr(e){var r=[],t=e,n=be(e),a=l(n);function o(){return document.forms.namedItem(t.formId)}function l(s){var f=arguments.length>1&&arguments[1]!==void 0?arguments[1]:s,d=arguments.length>2?arguments[2]:void 0,v=!d||f.defaultValue!==s.defaultValue?oe(s.defaultValue):d.defaultValue,h=s.initialValue===s.defaultValue?v:!d||f.initialValue!==s.initialValue?oe(s.initialValue):d.initialValue,b=s.value===s.initialValue?h:!d||f.value!==s.value?oe(s.value):d.value;return{submissionStatus:s.submissionStatus,defaultValue:v,initialValue:h,value:b,error:!d||f.error!==s.error?s.error:d.error,validated:s.validated,constraint:!d||f.constraint!==s.constraint?vr(s.constraint):d.constraint,key:!d||f.key!==s.key?pr(s.key):d.key,valid:!d||f.error!==s.error?yr(s.error):d.valid,dirty:!d||f.defaultValue!==s.defaultValue||f.value!==s.value?mr(v,b,O=>{var w,L;return(w=(L=t.shouldDirtyConsider)===null||L===void 0?void 0:L.call(t,O))!==null&&w!==void 0?w:!0}):d.dirty}}function i(s){var f=n,d=a,v=l(s,f,d);n=s,a=v;var h={value:{},error:{},initialValue:{},key:{},valid:{},dirty:{}};for(var b of r){var O,w=(O=b.getSubject)===null||O===void 0?void 0:O.call(b);(!w||w.formId&&f.formId!==s.formId||w.status&&d.submissionStatus!==v.submissionStatus||U(d.error,v.error,h.error,w.error)||U(d.initialValue,v.initialValue,h.initialValue,w.initialValue)||U(d.key,v.key,h.key,w.key,(L,X)=>L!==X)||U(d.valid,v.valid,h.valid,w.valid,u)||U(d.dirty,v.dirty,h.dirty,w.dirty,u)||U(d.value,v.value,h.value,w.value))&&b.callback()}}function u(){var s=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,f=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;return s!==f}function c(){return JSON.stringify({validated:n.validated})}function m(s){var f=s.target,d=s.submitter;ee(f===o(),"The submit event is dispatched by form#".concat(f.id," instead of form#").concat(t.formId));var v=tr(f,d),h={formData:v,action:ir(s),encType:or(s),method:ur(s)};if(typeof(t==null?void 0:t.onValidate)>"u")return h;var b=t.onValidate({form:f,formData:v,submitter:d});if(b.status==="success"||b.error!==null){var O=b.reply();fe(y(y({},O),{},{status:O.status!=="success"?O.status:void 0}))}return y(y({},h),{},{submission:b})}function g(s){var f=o(),d=s.target;return!f||!ae(d)||d.form!==f||!d.form.isConnected||d.name===""?null:d}function N(s,f){var{shouldValidate:d="onSubmit",shouldRevalidate:v=d}=t,h=n.validated[s.name];return h?v===f&&(f==="onInput"||n.isValueUpdated):d===f}function E(s){var f=new FormData(s),d=Ee(f);i(y(y({},n),{},{isValueUpdated:!0,value:d.payload}))}function P(s){var f=g(s);!f||!f.form||(s.defaultPrevented||!N(f,"onInput")?E(f.form):re({type:"validate",payload:{name:f.name}}))}function V(s){var f=g(s);!f||s.defaultPrevented||!N(f,"onBlur")||re({type:"validate",payload:{name:f.name}})}function B(){i(be(t,!0))}function Te(s){var f=o();s.type!=="reset"||s.target!==f||s.defaultPrevented||B()}function fe(s){var f,d,v=o();if(!s.initialValue){B();return}var h=Object.entries((f=s.error)!==null&&f!==void 0?f:{}).reduce((w,L)=>{var[X,ve]=L,pe=ve===null?n.error[X]:ve;return pe&&(w[X]=pe),w},{}),b=y(y({},n),{},{isValueUpdated:!1,submissionStatus:s.status,value:s.initialValue,validated:y(y({},n.validated),(d=s.state)===null||d===void 0?void 0:d.validated),error:h});if(Ie(b,s.intent,s.fields,!0),i(b),v&&s.status==="error"){for(var O of v.elements)if(ae(O)&&n.error[O.name]){O.focus();break}}}function De(s){var f=t.formId,d=t.lastResult;Object.assign(t,s),t.formId!==f?B():s.lastResult&&s.lastResult!==d&&fe(s.lastResult)}function ke(s,f){var d={callback:s,getSubject:f};return r.push(d),()=>{r=r.filter(v=>v!==d)}}function Ze(){return a}function re(s){var f=o(),d=document.createElement("button"),v=ce(s);d.name=v.name,d.value=v.value,d.hidden=!0,d.formNoValidate=!0,f==null||f.appendChild(d),lr(f,d),f==null||f.removeChild(d)}function ce(s){return{name:K,value:cr(s),form:t.formId,formNoValidate:!0}}function C(s){var f=function(){var v=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};return re({type:s,payload:v})};return Object.assign(f,{getButtonProps(){var d=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};return ce({type:s,payload:d})}})}function Le(){var s=new MutationObserver(f=>{var d=o();if(d)for(var v of f){var h=v.type==="childList"?[...v.addedNodes,...v.removedNodes]:[v.target];for(var b of h){var O=ae(b)?b:b instanceof HTMLElement?b.querySelector("input,select,textarea"):null;if((O==null?void 0:O.form)===d){E(d);return}}}});return s.observe(document,{subtree:!0,childList:!0,attributes:!0,attributeFilter:["form","name"]}),()=>{s.disconnect()}}return{getFormId(){return n.formId},submit:m,onReset:Te,onInput:P,onBlur:V,onUpdate:De,validate:C("validate"),reset:C("reset"),update:C("update"),insert:C("insert"),remove:C("remove"),reorder:C("reorder"),subscribe:ke,getState:Ze,getSerializedState:c,observe:Le}}function Se(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r&&(n=n.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),t.push.apply(t,n)}return t}function F(e){for(var r=1;r<arguments.length;r++){var t=arguments[r]!=null?arguments[r]:{};r%2?Se(Object(t),!0).forEach(function(n){br(e,n,t[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):Se(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})}return e}function br(e,r,t){return r=wr(r),r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function hr(e,r){if(e==null)return{};var t={},n=Object.keys(e),a,o;for(o=0;o<n.length;o++)a=n[o],!(r.indexOf(a)>=0)&&(t[a]=e[a]);return t}function Or(e,r){if(e==null)return{};var t=hr(e,r),n,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],!(r.indexOf(n)>=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(t[n]=e[n])}return t}function Sr(e,r){if(typeof e!="object"||e===null)return e;var t=e[Symbol.toPrimitive];if(t!==void 0){var n=t.call(e,r||"default");if(typeof n!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return(r==="string"?String:Number)(e)}function wr(e){var r=Sr(e,"string");return typeof r=="symbol"?r:String(r)}var Pr=Symbol("wrapped");function Nr(e,r){var t=I.useCallback(n=>e.subscribe(n,()=>r==null?void 0:r.current),[e,r]);return I.useSyncExternalStore(t,e.getState,e.getState)}function Er(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},r=I.useRef(e);return r.current=e,r}function R(e,r,t,n){if(r==="status"||r==="formId")e.current[r]=!0;else if(typeof t<"u"&&typeof n<"u"){var a,o;e.current[r]=F(F({},e.current[r]),{},{[t]:((a=(o=e.current[r])===null||o===void 0?void 0:o[t])!==null&&a!==void 0?a:[]).concat(n)})}}function Ve(e,r,t){var n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:"",a=n?"".concat(e.getFormId(),"-").concat(n):e.getFormId(),o=e.getState();return new Proxy({id:a,name:n,errorId:"".concat(a,"-error"),descriptionId:"".concat(a,"-description"),get initialValue(){return o.initialValue[n]},get value(){return o.value[n]},get errors(){return o.error[n]},get key(){return o.key[n]},get valid(){return o.valid[n]},get dirty(){return o.dirty[n]},get allErrors(){if(n==="")return o.error;var l={};for(var[i,u]of Object.entries(o.error))W(i,n)&&(l[i]=u);return l},get getFieldset(){return()=>new Proxy({},{get(l,i,u){return typeof i=="string"?Ae(e,r,t,n,i):Reflect.get(l,i,u)}})}},{get(l,i,u){if(o===t)switch(i){case"id":case"errorId":case"descriptionId":R(r,"formId");break;case"key":case"initialValue":case"value":case"valid":case"dirty":R(r,i,"name",n);break;case"errors":case"allErrors":R(r,"error",i==="errors"?"name":"prefix",n);break}return Reflect.get(l,i,u)}})}function Ae(e,r,t){var n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:"",a=arguments.length>4?arguments[4]:void 0,o=typeof a>"u"?n:_([...T(n),a]);return new Proxy({},{get(l,i,u){var c,m=Ve(e,r,t,o),g=e.getState();switch(i){case"formId":return g===t&&R(r,"formId"),e.getFormId();case"required":case"minLength":case"maxLength":case"min":case"max":case"pattern":case"step":case"multiple":return(c=g.constraint[o])===null||c===void 0?void 0:c[i];case"getFieldList":return()=>{var N,E=(N=g.initialValue[o])!==null&&N!==void 0?N:[];if(g===t&&R(r,"initialValue","name",o),!Array.isArray(E))throw new Error("The initial value at the given name is not a list");return Array(E.length).fill(0).map((P,V)=>Ae(e,r,t,o,V))}}return Reflect.get(m,i,u)}})}function jr(e,r,t,n){return new Proxy({},{get(a,o,l){var i=Ve(e,r,t),u=e.getState();switch(o){case"context":return{[Pr]:e};case"status":return u===t&&R(r,"status"),u.submissionStatus;case"validate":case"update":case"reset":case"insert":case"remove":case"reorder":return e[o];case"onSubmit":return e.submit;case"noValidate":return n}return Reflect.get(i,o,l)}})}function Ir(e){var{onSubmit:r}=e,t=gr(e);return F(F({},t),{},{submit(n){var a=n.nativeEvent,o=t.submit(a);if(!o.submission||o.submission.status==="success"||o.submission.error===null){if(!o.formData.has(K)){var l;(l=r)===null||l===void 0||l(n,o)}}else n.preventDefault()},onUpdate(n){r=n.onSubmit,t.onUpdate(n)}})}var Vr=["id"],se=typeof document>"u"?I.useEffect:I.useLayoutEffect;function Ar(e){var r=I.useId();return e??r}function Fr(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0,[r,t]=I.useState(e);return se(()=>{r||t(!0)},[r]),r}function Tr(e){var{id:r}=e,t=Or(e,Vr),n=Ar(r),[a]=I.useState(()=>Ir(F(F({},t),{},{formId:n})));se(()=>{var c=a.observe();return document.addEventListener("input",a.onInput),document.addEventListener("focusout",a.onBlur),document.addEventListener("reset",a.onReset),()=>{c(),document.removeEventListener("input",a.onInput),document.removeEventListener("focusout",a.onBlur),document.removeEventListener("reset",a.onReset)}},[a]),se(()=>{a.onUpdate(F(F({},t),{},{formId:n}))});var o=Er(),l=Nr(a,o),i=Fr(e.defaultNoValidate),u=jr(a,o,l,i);return[u,u.getFieldset()]}function Fe(e){for(var r in e)e[r]===void 0&&delete e[r];return e}function Dr(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(typeof r.ariaAttributes<"u"&&!r.ariaAttributes)return{};var t=r.ariaInvalid==="allErrors"?!e.valid:typeof e.errors<"u",n=r.ariaDescribedBy;return Fe({"aria-invalid":t||void 0,"aria-describedby":t?"".concat(e.errorId," ").concat(n??"").trim():n})}function kr(e,r){return Fe(F({id:e.id,onSubmit:e.onSubmit,noValidate:e.noValidate},Dr(e,r)))}function we(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r&&(n=n.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),t.push.apply(t,n)}return t}function p(e){for(var r=1;r<arguments.length;r++){var t=arguments[r]!=null?arguments[r]:{};r%2?we(Object(t),!0).forEach(function(n){Zr(e,n,t[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):we(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})}return e}function Zr(e,r,t){return r=_r(r),r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function Lr(e,r){if(typeof e!="object"||e===null)return e;var t=e[Symbol.toPrimitive];if(t!==void 0){var n=t.call(e,r||"default");if(typeof n!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return(r==="string"?String:Number)(e)}function _r(e){var r=Lr(e,"string");return typeof r=="symbol"?r:String(r)}function D(e,r){if(typeof e!="string")return e;if(e!=="")return typeof r!="function"?e:r(e)}function Q(e){if(!(typeof File<"u"&&e instanceof File&&e.name===""&&e.size===0))return e}function Cr(e){return typeof File>"u"?!1:e._def.effect.type==="refinement"&&e.innerType()._def.typeName==="ZodAny"&&e.safeParse(new File([],"")).success&&!e.safeParse("").success}function S(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:new Map,t=r.get(e);if(t)return t;var n=e,a=e._def;if(a.typeName==="ZodString"||a.typeName==="ZodLiteral"||a.typeName==="ZodEnum"||a.typeName==="ZodNativeEnum")n=A().transform(i=>D(i)).pipe(e);else if(a.typeName==="ZodNumber")n=A().transform(i=>D(i,u=>u.trim()===""?Number.NaN:Number(u))).pipe(e);else if(a.typeName==="ZodBoolean")n=A().transform(i=>D(i,u=>u==="on"?!0:u)).pipe(e);else if(a.typeName==="ZodDate")n=A().transform(i=>D(i,u=>{var c=new Date(u);return isNaN(c.getTime())?u:c})).pipe(e);else if(a.typeName==="ZodBigInt")n=A().transform(i=>D(i,BigInt)).pipe(e);else if(a.typeName==="ZodArray")n=A().transform(i=>Array.isArray(i)?i:typeof i>"u"||typeof Q(D(i))>"u"?[]:[i]).pipe(new _e(p(p({},a),{},{type:S(a.type,r)})));else if(a.typeName==="ZodObject"){var o=Object.fromEntries(Object.entries(a.shape()).map(i=>{var[u,c]=i;return[u,S(c,r)]}));n=new Ce(p(p({},a),{},{shape:()=>o}))}else if(a.typeName==="ZodEffects")Cr(e)?n=A().transform(i=>Q(i)).pipe(e):n=new Ue(p(p({},a),{},{schema:S(a.schema,r)}));else if(a.typeName==="ZodOptional")n=A().transform(i=>Q(D(i))).pipe(new Re(p(p({},a),{},{innerType:S(a.innerType,r)})));else if(a.typeName==="ZodDefault")n=A().transform(i=>Q(D(i))).pipe(new Me(p(p({},a),{},{innerType:S(a.innerType,r)})));else if(a.typeName==="ZodCatch")n=new $e(p(p({},a),{},{innerType:S(a.innerType,r)}));else if(a.typeName==="ZodIntersection")n=new Be(p(p({},a),{},{left:S(a.left,r),right:S(a.right,r)}));else if(a.typeName==="ZodUnion")n=new Je(p(p({},a),{},{options:a.options.map(i=>S(i,r))}));else if(a.typeName==="ZodDiscriminatedUnion")n=new Ke(p(p({},a),{},{options:a.options.map(i=>S(i,r)),optionsMap:new Map(Array.from(a.optionsMap.entries()).map(i=>{var[u,c]=i;return[u,S(c,r)]}))}));else if(a.typeName==="ZodTuple")n=new ze(p(p({},a),{},{items:a.items.map(i=>S(i,r))}));else if(a.typeName==="ZodNullable")n=new qe(p(p({},a),{},{innerType:S(a.innerType,r)}));else if(a.typeName==="ZodPipeline")n=new He(p(p({},a),{},{in:S(a.in,r),out:S(a.out,r)}));else if(a.typeName==="ZodLazy"){var l=a.getter();n=We(()=>S(l,r))}return e!==n&&r.set(e,n),n}function Ur(e,r){var t={};for(var n of e.errors){var a=_(n.path);switch(n.message){case Pe.VALIDATION_UNDEFINED:return null;case Pe.VALIDATION_SKIPPED:t[a]=null;break;default:{var o=t[a];o!==null&&(o?t[a]=o.concat(n):t[a]=[n]);break}}}return Object.entries(t).reduce((l,i)=>{var[u,c]=i;return l[u]=c?r(c):null,l},{})}function Rr(e,r){return sr(e,{resolve(t,n){var a=r.errorMap,o=S(typeof r.schema=="function"?r.schema(n):r.schema),l=i=>{var u;return{value:i.success?i.data:void 0,error:i.success?void 0:Ur(i.error,(u=r.formatError)!==null&&u!==void 0?u:c=>c.map(m=>m.message))}};return r.async?o.safeParseAsync(t,{errorMap:a}).then(i=>l(i)):l(o.safeParse(t,{errorMap:a}))}})}var Pe={VALIDATION_SKIPPED:"__skipped__",VALIDATION_UNDEFINED:"__undefined__"};function Mr({id:e,errors:r}){const t=r==null?void 0:r.filter(Boolean);return t!=null&&t.length?j.jsx("ul",{id:e,className:"space-y-1",children:t.map(n=>j.jsx("li",{className:"text-danger text-[10px]",children:n},n))}):null}const $r="/theme",Br=te.object({redirectTo:te.string().optional(),theme:te.enum(["system","light","dark"])});function Gr(){const e=Ne(),r=Qe(),[t,n]=I.useState(!1);I.useEffect(()=>{n(!0)},[]);const[a]=Tr({lastResult:r.data,onValidate({formData:u}){return Rr(u,{schema:Br})}}),o=e.session.theme??"system",l=o==="system"?"light":o==="light"?"dark":"system",i={light:j.jsx(ne,{size:"md",name:"Sun",title:"Light mode"}),dark:j.jsx(ne,{size:"md",name:"Moon",title:"Dark mode"}),system:j.jsx(ne,{size:"md",name:"Laptop",title:"System mode"})};return j.jsxs(r.Form,{method:"POST",action:$r,...kr(a),children:[j.jsxs("div",{className:"flex gap-2",children:[t?null:j.jsx("input",{type:"hidden",name:"redirectTo",value:e.path}),j.jsx("input",{type:"hidden",name:"theme",value:l}),j.jsx(Ge,{content:`Change theme from ${o} mode`,children:j.jsx("button",{type:"submit",name:"intent",value:"update-theme",className:"flex h-8 w-8 cursor-pointer items-center justify-center",children:i[o]})})]}),j.jsx(Mr,{errors:a.errors,id:a.errorId})]})}function Xr(){var o;const e=Xe(),r=Ne(),n=Ye().find(l=>{var i;return((i=l.formData)==null?void 0:i.get("intent"))==="update-theme"}),a=(o=n==null?void 0:n.formData)==null?void 0:o.get("theme");return a==="system"?e.theme:a==="light"||a==="dark"?a:r.session.theme??e.theme}export{Gr as T,Xr as u};
2
- //# sourceMappingURL=index-BATSX33w.js.map
@@ -1,2 +0,0 @@
1
- import{r as F,j as t,l as re,n as ne,d as Le}from"./index-1cKOJFpX.js";import{d as me,h as Ye,u as ve,m as He,P as J,f as z,e as pe,g as ze,S as Ge}from"./tooltip-BiHTe_7F.js";import{f as Ke,u as xe}from"./index-hogig2HK.js";import{c as Be}from"./clsx-B-dksMZM.js";import{D as Ve}from"./diff-CpFxuKA2.js";import{G as Ze}from"./error-boundary-DDTvdkB4.js";import{u as ge,I as te}from"./misc-ENVX3CWf.js";import{L as We}from"./loading-C5uX0jJw.js";import{u as Je}from"./client-hints-DNUUFGmB.js";import{D as qe,u as Qe}from"./discord-Dq4e30wV.js";import{u as le,A as Xe,L as $e,b as et}from"./components-CME-nGId.js";import{J as tt}from"./index-B-hHvmeV.js";import{S as rt}from"./set-playground-Cdy8VlVD.js";import{P as nt,a as st}from"./tests-CmNNBElK.js";import{P as oe}from"./preview-CqrRe2BV.js";import"./index-BXWoOGxB.js";import"./accordion-BroSqIct.js";import"./mdx-M0kcP-mP.js";import"./epic-video-iluUs1-s.js";import"./index-BATSX33w.js";import"./request-info-CEhUGODY.js";import"./user-D6tTg1yS.js";import"./progress-bar-CSvo1ZXP.js";import"./use-event-source-A_0lEOPX.js";import"./button-BklqyTPS.js";var ie="rovingFocusGroup.onEntryFocus",at={bubbles:!1,cancelable:!0},se="RovingFocusGroup",[ce,be,it]=Ke(se),[ot,we]=me(se,[it]),[ct,ut]=ot(se),ye=F.forwardRef((e,l)=>t.jsx(ce.Provider,{scope:e.__scopeRovingFocusGroup,children:t.jsx(ce.Slot,{scope:e.__scopeRovingFocusGroup,children:t.jsx(lt,{...e,ref:l})})}));ye.displayName=se;var lt=F.forwardRef((e,l)=>{const{__scopeRovingFocusGroup:c,orientation:s,loop:D=!1,dir:C,currentTabStopId:m,defaultCurrentTabStopId:S,onCurrentTabStopIdChange:h,onEntryFocus:f,preventScrollOnEntryFocus:b=!1,...x}=e,v=F.useRef(null),T=Ye(l,v),d=xe(C),[n=null,o]=ve({prop:m,defaultProp:S,onChange:h}),[y,w]=F.useState(!1),M=He(f),R=be(c),N=F.useRef(!1),[P,k]=F.useState(0);return F.useEffect(()=>{const I=v.current;if(I)return I.addEventListener(ie,M),()=>I.removeEventListener(ie,M)},[M]),t.jsx(ct,{scope:c,orientation:s,dir:d,loop:D,currentTabStopId:n,onItemFocus:F.useCallback(I=>o(I),[o]),onItemShiftTab:F.useCallback(()=>w(!0),[]),onFocusableItemAdd:F.useCallback(()=>k(I=>I+1),[]),onFocusableItemRemove:F.useCallback(()=>k(I=>I-1),[]),children:t.jsx(J.div,{tabIndex:y||P===0?-1:0,"data-orientation":s,...x,ref:T,style:{outline:"none",...e.style},onMouseDown:z(e.onMouseDown,()=>{N.current=!0}),onFocus:z(e.onFocus,I=>{const L=!N.current;if(I.target===I.currentTarget&&L&&!y){const O=new CustomEvent(ie,at);if(I.currentTarget.dispatchEvent(O),!O.defaultPrevented){const j=R().filter(r=>r.focusable),V=j.find(r=>r.active),X=j.find(r=>r.id===n),a=[V,X,...j].filter(Boolean).map(r=>r.ref.current);Te(a,b)}}N.current=!1}),onBlur:z(e.onBlur,()=>w(!1))})})}),je="RovingFocusGroupItem",De=F.forwardRef((e,l)=>{const{__scopeRovingFocusGroup:c,focusable:s=!0,active:D=!1,tabStopId:C,...m}=e,S=pe(),h=C||S,f=ut(je,c),b=f.currentTabStopId===h,x=be(c),{onFocusableItemAdd:v,onFocusableItemRemove:T}=f;return F.useEffect(()=>{if(s)return v(),()=>T()},[s,v,T]),t.jsx(ce.ItemSlot,{scope:c,id:h,focusable:s,active:D,children:t.jsx(J.span,{tabIndex:b?0:-1,"data-orientation":f.orientation,...m,ref:l,onMouseDown:z(e.onMouseDown,d=>{s?f.onItemFocus(h):d.preventDefault()}),onFocus:z(e.onFocus,()=>f.onItemFocus(h)),onKeyDown:z(e.onKeyDown,d=>{if(d.key==="Tab"&&d.shiftKey){f.onItemShiftTab();return}if(d.target!==d.currentTarget)return;const n=ht(d,f.orientation,f.dir);if(n!==void 0){if(d.metaKey||d.ctrlKey||d.altKey||d.shiftKey)return;d.preventDefault();let y=x().filter(w=>w.focusable).map(w=>w.ref.current);if(n==="last")y.reverse();else if(n==="prev"||n==="next"){n==="prev"&&y.reverse();const w=y.indexOf(d.currentTarget);y=f.loop?mt(y,w+1):y.slice(w+1)}setTimeout(()=>Te(y))}})})})});De.displayName=je;var ft={ArrowLeft:"prev",ArrowUp:"prev",ArrowRight:"next",ArrowDown:"next",PageUp:"first",Home:"first",PageDown:"last",End:"last"};function dt(e,l){return l!=="rtl"?e:e==="ArrowLeft"?"ArrowRight":e==="ArrowRight"?"ArrowLeft":e}function ht(e,l,c){const s=dt(e.key,c);if(!(l==="vertical"&&["ArrowLeft","ArrowRight"].includes(s))&&!(l==="horizontal"&&["ArrowUp","ArrowDown"].includes(s)))return ft[s]}function Te(e,l=!1){const c=document.activeElement;for(const s of e)if(s===c||(s.focus({preventScroll:l}),document.activeElement!==c))return}function mt(e,l){return e.map((c,s)=>e[(l+s)%e.length])}var vt=ye,pt=De,fe="Tabs",[xt,ir]=me(fe,[we]),Se=we(),[gt,de]=xt(fe),Ne=F.forwardRef((e,l)=>{const{__scopeTabs:c,value:s,onValueChange:D,defaultValue:C,orientation:m="horizontal",dir:S,activationMode:h="automatic",...f}=e,b=xe(S),[x,v]=ve({prop:s,onChange:D,defaultProp:C});return t.jsx(gt,{scope:c,baseId:pe(),value:x,onValueChange:v,orientation:m,dir:b,activationMode:h,children:t.jsx(J.div,{dir:b,"data-orientation":m,...f,ref:l})})});Ne.displayName=fe;var Me="TabsList",Ce=F.forwardRef((e,l)=>{const{__scopeTabs:c,loop:s=!0,...D}=e,C=de(Me,c),m=Se(c);return t.jsx(vt,{asChild:!0,...m,orientation:C.orientation,dir:C.dir,loop:s,children:t.jsx(J.div,{role:"tablist","aria-orientation":C.orientation,...D,ref:l})})});Ce.displayName=Me;var Ie="TabsTrigger",Oe=F.forwardRef((e,l)=>{const{__scopeTabs:c,value:s,disabled:D=!1,...C}=e,m=de(Ie,c),S=Se(c),h=_e(m.baseId,s),f=Fe(m.baseId,s),b=s===m.value;return t.jsx(pt,{asChild:!0,...S,focusable:!D,active:b,children:t.jsx(J.button,{type:"button",role:"tab","aria-selected":b,"aria-controls":f,"data-state":b?"active":"inactive","data-disabled":D?"":void 0,disabled:D,id:h,...C,ref:l,onMouseDown:z(e.onMouseDown,x=>{!D&&x.button===0&&x.ctrlKey===!1?m.onValueChange(s):x.preventDefault()}),onKeyDown:z(e.onKeyDown,x=>{[" ","Enter"].includes(x.key)&&m.onValueChange(s)}),onFocus:z(e.onFocus,()=>{const x=m.activationMode!=="manual";!b&&!D&&x&&m.onValueChange(s)})})})});Oe.displayName=Ie;var Ee="TabsContent",Pe=F.forwardRef((e,l)=>{const{__scopeTabs:c,value:s,forceMount:D,children:C,...m}=e,S=de(Ee,c),h=_e(S.baseId,s),f=Fe(S.baseId,s),b=s===S.value,x=F.useRef(b);return F.useEffect(()=>{const v=requestAnimationFrame(()=>x.current=!1);return()=>cancelAnimationFrame(v)},[]),t.jsx(ze,{present:D||b,children:({present:v})=>t.jsx(J.div,{"data-state":b?"active":"inactive","data-orientation":S.orientation,role:"tabpanel","aria-labelledby":h,hidden:!v,id:f,tabIndex:0,...m,ref:l,style:{...e.style,animationDuration:x.current?"0s":void 0},children:v&&C})})});Pe.displayName=Ee;function _e(e,l){return`${e}-trigger-${l}`}function Fe(e,l){return`${e}-content-${l}`}var $t=Ne,bt=Ce,wt=Oe,W=Pe,Re={exports:{}};(function(e,l){(function(c,s){e.exports=s()})(ne,function(){var c=1e3,s=6e4,D=36e5,C="millisecond",m="second",S="minute",h="hour",f="day",b="week",x="month",v="quarter",T="year",d="date",n="Invalid Date",o=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,y=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,w={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(p){var a=["th","st","nd","rd"],r=p%100;return"["+p+(a[(r-20)%10]||a[r]||a[0])+"]"}},M=function(p,a,r){var u=String(p);return!u||u.length>=a?p:""+Array(a+1-u.length).join(r)+p},R={s:M,z:function(p){var a=-p.utcOffset(),r=Math.abs(a),u=Math.floor(r/60),i=r%60;return(a<=0?"+":"-")+M(u,2,"0")+":"+M(i,2,"0")},m:function p(a,r){if(a.date()<r.date())return-p(r,a);var u=12*(r.year()-a.year())+(r.month()-a.month()),i=a.clone().add(u,x),g=r-i<0,$=a.clone().add(u+(g?-1:1),x);return+(-(u+(r-i)/(g?i-$:$-i))||0)},a:function(p){return p<0?Math.ceil(p)||0:Math.floor(p)},p:function(p){return{M:x,y:T,w:b,d:f,D:d,h,m:S,s:m,ms:C,Q:v}[p]||String(p||"").toLowerCase().replace(/s$/,"")},u:function(p){return p===void 0}},N="en",P={};P[N]=w;var k="$isDayjsObject",I=function(p){return p instanceof V||!(!p||!p[k])},L=function p(a,r,u){var i;if(!a)return N;if(typeof a=="string"){var g=a.toLowerCase();P[g]&&(i=g),r&&(P[g]=r,i=g);var $=a.split("-");if(!i&&$.length>1)return p($[0])}else{var E=a.name;P[E]=a,i=E}return!u&&i&&(N=i),i||!u&&N},O=function(p,a){if(I(p))return p.clone();var r=typeof a=="object"?a:{};return r.date=p,r.args=arguments,new V(r)},j=R;j.l=L,j.i=I,j.w=function(p,a){return O(p,{locale:a.$L,utc:a.$u,x:a.$x,$offset:a.$offset})};var V=function(){function p(r){this.$L=L(r.locale,null,!0),this.parse(r),this.$x=this.$x||r.x||{},this[k]=!0}var a=p.prototype;return a.parse=function(r){this.$d=function(u){var i=u.date,g=u.utc;if(i===null)return new Date(NaN);if(j.u(i))return new Date;if(i instanceof Date)return new Date(i);if(typeof i=="string"&&!/Z$/i.test(i)){var $=i.match(o);if($){var E=$[2]-1||0,_=($[7]||"0").substring(0,3);return g?new Date(Date.UTC($[1],E,$[3]||1,$[4]||0,$[5]||0,$[6]||0,_)):new Date($[1],E,$[3]||1,$[4]||0,$[5]||0,$[6]||0,_)}}return new Date(i)}(r),this.init()},a.init=function(){var r=this.$d;this.$y=r.getFullYear(),this.$M=r.getMonth(),this.$D=r.getDate(),this.$W=r.getDay(),this.$H=r.getHours(),this.$m=r.getMinutes(),this.$s=r.getSeconds(),this.$ms=r.getMilliseconds()},a.$utils=function(){return j},a.isValid=function(){return this.$d.toString()!==n},a.isSame=function(r,u){var i=O(r);return this.startOf(u)<=i&&i<=this.endOf(u)},a.isAfter=function(r,u){return O(r)<this.startOf(u)},a.isBefore=function(r,u){return this.endOf(u)<O(r)},a.$g=function(r,u,i){return j.u(r)?this[u]:this.set(i,r)},a.unix=function(){return Math.floor(this.valueOf()/1e3)},a.valueOf=function(){return this.$d.getTime()},a.startOf=function(r,u){var i=this,g=!!j.u(u)||u,$=j.p(r),E=function(B,Y){var G=j.w(i.$u?Date.UTC(i.$y,Y,B):new Date(i.$y,Y,B),i);return g?G:G.endOf(f)},_=function(B,Y){return j.w(i.toDate()[B].apply(i.toDate("s"),(g?[0,0,0,0]:[23,59,59,999]).slice(Y)),i)},A=this.$W,U=this.$M,H=this.$D,Z="set"+(this.$u?"UTC":"");switch($){case T:return g?E(1,0):E(31,11);case x:return g?E(1,U):E(0,U+1);case b:var K=this.$locale().weekStart||0,q=(A<K?A+7:A)-K;return E(g?H-q:H+(6-q),U);case f:case d:return _(Z+"Hours",0);case h:return _(Z+"Minutes",1);case S:return _(Z+"Seconds",2);case m:return _(Z+"Milliseconds",3);default:return this.clone()}},a.endOf=function(r){return this.startOf(r,!1)},a.$set=function(r,u){var i,g=j.p(r),$="set"+(this.$u?"UTC":""),E=(i={},i[f]=$+"Date",i[d]=$+"Date",i[x]=$+"Month",i[T]=$+"FullYear",i[h]=$+"Hours",i[S]=$+"Minutes",i[m]=$+"Seconds",i[C]=$+"Milliseconds",i)[g],_=g===f?this.$D+(u-this.$W):u;if(g===x||g===T){var A=this.clone().set(d,1);A.$d[E](_),A.init(),this.$d=A.set(d,Math.min(this.$D,A.daysInMonth())).$d}else E&&this.$d[E](_);return this.init(),this},a.set=function(r,u){return this.clone().$set(r,u)},a.get=function(r){return this[j.p(r)]()},a.add=function(r,u){var i,g=this;r=Number(r);var $=j.p(u),E=function(U){var H=O(g);return j.w(H.date(H.date()+Math.round(U*r)),g)};if($===x)return this.set(x,this.$M+r);if($===T)return this.set(T,this.$y+r);if($===f)return E(1);if($===b)return E(7);var _=(i={},i[S]=s,i[h]=D,i[m]=c,i)[$]||1,A=this.$d.getTime()+r*_;return j.w(A,this)},a.subtract=function(r,u){return this.add(-1*r,u)},a.format=function(r){var u=this,i=this.$locale();if(!this.isValid())return i.invalidDate||n;var g=r||"YYYY-MM-DDTHH:mm:ssZ",$=j.z(this),E=this.$H,_=this.$m,A=this.$M,U=i.weekdays,H=i.months,Z=i.meridiem,K=function(Y,G,Q,ee){return Y&&(Y[G]||Y(u,g))||Q[G].slice(0,ee)},q=function(Y){return j.s(E%12||12,Y,"0")},B=Z||function(Y,G,Q){var ee=Y<12?"AM":"PM";return Q?ee.toLowerCase():ee};return g.replace(y,function(Y,G){return G||function(Q){switch(Q){case"YY":return String(u.$y).slice(-2);case"YYYY":return j.s(u.$y,4,"0");case"M":return A+1;case"MM":return j.s(A+1,2,"0");case"MMM":return K(i.monthsShort,A,H,3);case"MMMM":return K(H,A);case"D":return u.$D;case"DD":return j.s(u.$D,2,"0");case"d":return String(u.$W);case"dd":return K(i.weekdaysMin,u.$W,U,2);case"ddd":return K(i.weekdaysShort,u.$W,U,3);case"dddd":return U[u.$W];case"H":return String(E);case"HH":return j.s(E,2,"0");case"h":return q(1);case"hh":return q(2);case"a":return B(E,_,!0);case"A":return B(E,_,!1);case"m":return String(_);case"mm":return j.s(_,2,"0");case"s":return String(u.$s);case"ss":return j.s(u.$s,2,"0");case"SSS":return j.s(u.$ms,3,"0");case"Z":return $}return null}(Y)||$.replace(":","")})},a.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},a.diff=function(r,u,i){var g,$=this,E=j.p(u),_=O(r),A=(_.utcOffset()-this.utcOffset())*s,U=this-_,H=function(){return j.m($,_)};switch(E){case T:g=H()/12;break;case x:g=H();break;case v:g=H()/3;break;case b:g=(U-A)/6048e5;break;case f:g=(U-A)/864e5;break;case h:g=U/D;break;case S:g=U/s;break;case m:g=U/c;break;default:g=U}return i?g:j.a(g)},a.daysInMonth=function(){return this.endOf(x).$D},a.$locale=function(){return P[this.$L]},a.locale=function(r,u){if(!r)return this.$L;var i=this.clone(),g=L(r,u,!0);return g&&(i.$L=g),i},a.clone=function(){return j.w(this.$d,this)},a.toDate=function(){return new Date(this.valueOf())},a.toJSON=function(){return this.isValid()?this.toISOString():null},a.toISOString=function(){return this.$d.toISOString()},a.toString=function(){return this.$d.toUTCString()},p}(),X=V.prototype;return O.prototype=X,[["$ms",C],["$s",m],["$m",S],["$H",h],["$W",f],["$M",x],["$y",T],["$D",d]].forEach(function(p){X[p[1]]=function(a){return this.$g(a,p[0],p[1])}}),O.extend=function(p,a){return p.$i||(p(a,V,O),p.$i=!0),O},O.locale=L,O.isDayjs=I,O.unix=function(p){return O(1e3*p)},O.en=P[N],O.Ls=P,O.p={},O})})(Re);var yt=Re.exports;const ae=re(yt);var ke={exports:{}};(function(e,l){(function(c,s){e.exports=s()})(ne,function(){return function(c,s,D){c=c||{};var C=s.prototype,m={future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"};function S(f,b,x,v){return C.fromToBase(f,b,x,v)}D.en.relativeTime=m,C.fromToBase=function(f,b,x,v,T){for(var d,n,o,y=x.$locale().relativeTime||m,w=c.thresholds||[{l:"s",r:44,d:"second"},{l:"m",r:89},{l:"mm",r:44,d:"minute"},{l:"h",r:89},{l:"hh",r:21,d:"hour"},{l:"d",r:35},{l:"dd",r:25,d:"day"},{l:"M",r:45},{l:"MM",r:10,d:"month"},{l:"y",r:17},{l:"yy",d:"year"}],M=w.length,R=0;R<M;R+=1){var N=w[R];N.d&&(d=v?D(f).diff(x,N.d,!0):x.diff(f,N.d,!0));var P=(c.rounding||Math.round)(Math.abs(d));if(o=d>0,P<=N.r||!N.r){P<=1&&R>0&&(N=w[R-1]);var k=y[N.l];T&&(P=T(""+P)),n=typeof k=="string"?k.replace("%d",P):k(P,b,N.l,o);break}}if(b)return n;var I=o?y.future:y.past;return typeof I=="function"?I(n):I.replace("%s",n)},C.to=function(f,b){return S(f,b,this,!0)},C.from=function(f,b){return S(f,b,this)};var h=function(f){return f.$u?D.utc():D()};C.toNow=function(f){return this.to(h(this),f)},C.fromNow=function(f){return this.from(h(this),f)}}})})(ke);var jt=ke.exports;const Dt=re(jt);var Ae={exports:{}};(function(e,l){(function(c,s){e.exports=s()})(ne,function(){var c={year:0,month:1,day:2,hour:3,minute:4,second:5},s={};return function(D,C,m){var S,h=function(v,T,d){d===void 0&&(d={});var n=new Date(v),o=function(y,w){w===void 0&&(w={});var M=w.timeZoneName||"short",R=y+"|"+M,N=s[R];return N||(N=new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:y,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",timeZoneName:M}),s[R]=N),N}(T,d);return o.formatToParts(n)},f=function(v,T){for(var d=h(v,T),n=[],o=0;o<d.length;o+=1){var y=d[o],w=y.type,M=y.value,R=c[w];R>=0&&(n[R]=parseInt(M,10))}var N=n[3],P=N===24?0:N,k=n[0]+"-"+n[1]+"-"+n[2]+" "+P+":"+n[4]+":"+n[5]+":000",I=+v;return(m.utc(k).valueOf()-(I-=I%1e3))/6e4},b=C.prototype;b.tz=function(v,T){v===void 0&&(v=S);var d=this.utcOffset(),n=this.toDate(),o=n.toLocaleString("en-US",{timeZone:v}),y=Math.round((n-new Date(o))/1e3/60),w=m(o,{locale:this.$L}).$set("millisecond",this.$ms).utcOffset(15*-Math.round(n.getTimezoneOffset()/15)-y,!0);if(T){var M=w.utcOffset();w=w.add(d-M,"minute")}return w.$x.$timezone=v,w},b.offsetName=function(v){var T=this.$x.$timezone||m.tz.guess(),d=h(this.valueOf(),T,{timeZoneName:v}).find(function(n){return n.type.toLowerCase()==="timezonename"});return d&&d.value};var x=b.startOf;b.startOf=function(v,T){if(!this.$x||!this.$x.$timezone)return x.call(this,v,T);var d=m(this.format("YYYY-MM-DD HH:mm:ss:SSS"),{locale:this.$L});return x.call(d,v,T).tz(this.$x.$timezone,!0)},m.tz=function(v,T,d){var n=d&&T,o=d||T||S,y=f(+m(),o);if(typeof v!="string")return m(v).tz(o);var w=function(P,k,I){var L=P-60*k*1e3,O=f(L,I);if(k===O)return[L,k];var j=f(L-=60*(O-k)*1e3,I);return O===j?[L,O]:[P-60*Math.min(O,j)*1e3,Math.max(O,j)]}(m.utc(v,n).valueOf(),y,o),M=w[0],R=w[1],N=m(M).utcOffset(R);return N.$x.$timezone=o,N},m.tz.guess=function(){return Intl.DateTimeFormat().resolvedOptions().timeZone},m.tz.setDefault=function(v){S=v}}})})(Ae);var Tt=Ae.exports;const St=re(Tt);var Ue={exports:{}};(function(e,l){(function(c,s){e.exports=s()})(ne,function(){var c="minute",s=/[+-]\d\d(?::?\d\d)?/g,D=/([+-]|\d\d)/g;return function(C,m,S){var h=m.prototype;S.utc=function(n){var o={date:n,utc:!0,args:arguments};return new m(o)},h.utc=function(n){var o=S(this.toDate(),{locale:this.$L,utc:!0});return n?o.add(this.utcOffset(),c):o},h.local=function(){return S(this.toDate(),{locale:this.$L,utc:!1})};var f=h.parse;h.parse=function(n){n.utc&&(this.$u=!0),this.$utils().u(n.$offset)||(this.$offset=n.$offset),f.call(this,n)};var b=h.init;h.init=function(){if(this.$u){var n=this.$d;this.$y=n.getUTCFullYear(),this.$M=n.getUTCMonth(),this.$D=n.getUTCDate(),this.$W=n.getUTCDay(),this.$H=n.getUTCHours(),this.$m=n.getUTCMinutes(),this.$s=n.getUTCSeconds(),this.$ms=n.getUTCMilliseconds()}else b.call(this)};var x=h.utcOffset;h.utcOffset=function(n,o){var y=this.$utils().u;if(y(n))return this.$u?0:y(this.$offset)?x.call(this):this.$offset;if(typeof n=="string"&&(n=function(N){N===void 0&&(N="");var P=N.match(s);if(!P)return null;var k=(""+P[0]).match(D)||["-",0,0],I=k[0],L=60*+k[1]+ +k[2];return L===0?0:I==="+"?L:-L}(n),n===null))return this;var w=Math.abs(n)<=16?60*n:n,M=this;if(o)return M.$offset=w,M.$u=n===0,M;if(n!==0){var R=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();(M=this.local().add(w+R,c)).$offset=w,M.$x.$localOffset=R}else M=this.utc();return M};var v=h.format;h.format=function(n){var o=n||(this.$u?"YYYY-MM-DDTHH:mm:ss[Z]":"");return v.call(this,o)},h.valueOf=function(){var n=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||this.$d.getTimezoneOffset());return this.$d.valueOf()-6e4*n},h.isUTC=function(){return!!this.$u},h.toISOString=function(){return this.toDate().toISOString()},h.toString=function(){return this.toDate().toUTCString()};var T=h.toDate;h.toDate=function(n){return n==="s"&&this.$offset?S(this.format("YYYY-MM-DD HH:mm:ss:SSS")).toDate():T.call(this)};var d=h.diff;h.diff=function(n,o,y){if(n&&this.$u===n.$u)return d.call(this,n,o,y);var w=this.local(),M=S(n).local();return d.call(w,M,o,y)}}})})(Ue);var Nt=Ue.exports;const Mt=re(Nt);ae.extend(Mt);ae.extend(St);ae.extend(Dt);function Ct(){const e=le();return t.jsxs("div",{className:"flex h-full w-full flex-col gap-4 pt-4",children:[t.jsx("div",{className:"text-center",children:t.jsx(qe,{discordAuthUrl:e.discordAuthUrl})}),t.jsx("div",{className:"flex-1 overflow-y-scroll bg-accent pb-4 scrollbar-thin scrollbar-thumb-scrollbar",children:t.jsx(It,{})})]})}function It(){const e=le(),l=Qe({discordAuthUrl:e.discordAuthUrl}),c=ge();return t.jsxs("div",{className:"flex h-full flex-col items-center justify-between",children:[t.jsx(F.Suspense,{fallback:t.jsx("div",{className:"flex h-full w-full flex-col items-center justify-center",children:t.jsx(We,{children:"Loading Discord Posts"})}),children:t.jsx(Xe,{resolve:e.discordPostsPromise,errorElement:t.jsx("div",{className:"text-red-500",children:"There was a problem loading the discord posts"}),children:s=>t.jsx("ul",{className:"flex w-full flex-col gap-4 p-3 xl:p-12",children:s.map(D=>t.jsx("li",{className:"rounded-xl border bg-background transition-all duration-200 focus-within:-translate-y-1 focus-within:shadow-lg hover:-translate-y-1 hover:shadow-lg",children:t.jsx(Ot,{thread:D})},D.id))})})}),t.jsx("div",{children:t.jsxs($e,{to:c&&!l.includes("oauth")?l.replace(/^https/,"discord"):l,target:l.includes("oauth")?void 0:"_blank",rel:"noreferrer noopener",onClick:c?s=>{s.preventDefault(),window.open(s.currentTarget.href,"_blank","noreferrer noopener")}:void 0,className:"flex items-center gap-2 p-2 text-xl hover:underline",children:["Create Post ",t.jsx(te,{name:"ExternalLink"})]})})]})}function Ot({thread:e}){const l=e.reactions.filter(s=>s.count),c=Je();return t.jsx("div",{children:t.jsxs("div",{className:"flex flex-col gap-2 p-4",children:[t.jsxs("div",{className:"flex gap-4",children:[t.jsxs("div",{className:"flex flex-col gap-1",children:[e.tags.length?t.jsx("div",{className:"flex gap-2",children:e.tags.map(s=>t.jsxs("div",{className:"flex items-center justify-center gap-1 rounded-full bg-accent px-2 py-1 text-sm",children:[t.jsx("span",{className:"h-3 w-3 leading-3",children:t.jsx(he,{name:s.emojiName,url:s.emojiUrl})}),t.jsx("span",{children:s.name})]},s.name))}):null,t.jsx("strong",{className:"text-xl font-bold",children:e.name}),t.jsxs("div",{className:"flex items-start gap-1",children:[t.jsxs("div",{className:"flex items-center gap-1",children:[e.authorAvatarUrl?t.jsx("img",{src:e.authorAvatarUrl,alt:"",className:"h-6 w-6 rounded-full"}):null,t.jsxs("span",{children:[t.jsx("span",{className:"font-bold",style:e.authorHexAccentColor?{color:e.authorHexAccentColor}:{},children:e.authorDisplayName}),":"," "]})]}),t.jsx("span",{className:"flex-1 overflow-ellipsis text-muted-foreground",children:e.messagePreview})]})]}),e.previewImageUrl?t.jsx("img",{src:e.previewImageUrl,alt:"",className:"h-28 w-28 rounded-lg object-cover"}):null]}),t.jsxs("div",{className:"flex justify-between",children:[t.jsxs("div",{className:"flex items-center gap-3",children:[t.jsx("span",{children:l.length?t.jsx("ul",{className:"flex items-center gap-2",children:l.map((s,D)=>t.jsxs("li",{className:"flex items-center gap-1 rounded-md border border-blue-600 bg-blue-500/20 px-[5px] py-[0.5px] text-sm",children:[t.jsx("span",{className:"h-3 w-3 leading-3",children:t.jsx(he,{name:s.emojiName,url:s.emojiUrl})}),t.jsx("span",{children:s.count})]},D))}):null}),t.jsxs("span",{className:"flex items-center gap-1",children:[t.jsxs("span",{className:"inline-flex items-center gap-1",children:[t.jsx(te,{name:"Chat"})," ",e.messageCount]}),` · ${ae(e.lastUpdated).tz(c.timeZone).fromNow()}`]})]}),t.jsxs("span",{className:"flex items-center gap-4",children:[t.jsx("a",{href:e.link.replace(/^https/,"discord"),children:t.jsx(te,{name:"Discord"})}),t.jsx("a",{href:e.link,target:"_blank",rel:"noreferrer noopener",children:t.jsx(te,{name:"ExternalLink"})})]})]})]})})}function he({name:e,url:l}){return l?t.jsx("img",{src:l,alt:e,className:"h-full w-full"}):e||null}function Et({appInfo:e,inBrowserBrowserRef:l,problemAppName:c,allApps:s,isUpToDate:D}){return t.jsx(nt,{playgroundAppName:e==null?void 0:e.appName,problemAppName:c,allApps:s,isUpToDate:D,children:(e==null?void 0:e.dev.type)==="none"?t.jsxs("div",{children:[t.jsx("div",{className:"text-foreground-secondary flex h-full items-center justify-center text-2xl",children:"Non-UI playground"}),t.jsx("div",{children:t.jsxs("div",{className:"text-foreground-secondary flex flex-wrap gap-1 text-center",children:["Navigate to"," ",t.jsx(Ge,{content:e.fullPath,children:t.jsx("span",{className:"underline",onClick:()=>{navigator.clipboard.writeText(e.fullPath),tt.success("Copied playground path to clipboard")},children:"the playground directory"})})," ","in your editor and terminal to work on this exercise!"]})})]}):e?t.jsx(oe,{id:e.appName,appInfo:e,inBrowserBrowserRef:l}):t.jsxs("div",{className:"flex flex-col justify-center gap-2",children:[t.jsx("p",{children:"Please set the playground first"}),c?t.jsx(rt,{appName:c}):null]})})}const ue=["playground","problem","solution","tests","diff","chat"],Pt=e=>!!(e&&ue.includes(e));function _t(e,l,c){const s=new URLSearchParams(e);return c===null?s.delete(l):s.set(l,c),s}function or(){var b,x,v,T,d,n;const e=le(),[l]=et(),c=l.get("preview"),s=F.useRef(null),D=ge(),C=Le();function m(o){var y,w,M;if(o==="tests")return ENV.EPICSHOP_DEPLOYED||!e.playground||e.playground.test.type==="none";if(o==="problem"||o==="solution"){if(((y=e[o])==null?void 0:y.dev.type)==="none")return!0;if(ENV.EPICSHOP_DEPLOYED)return((w=e[o])==null?void 0:w.dev.type)!=="browser"&&!((M=e[o])!=null&&M.stackBlitzUrl)}return!!(o==="playground"&&ENV.EPICSHOP_DEPLOYED)}const S=Pt(c)?c:ue.find(o=>!m(o)),h=`/diff?${new URLSearchParams({app1:((b=e.problem)==null?void 0:b.name)??"",app2:((x=e.solution)==null?void 0:x.name)??""})}`;function f(o){o.altKey&&!o.ctrlKey&&!o.shiftKey&&!o.metaKey&&(o.preventDefault(),C(h))}return t.jsxs($t,{className:"relative flex flex-col overflow-y-auto sm:col-span-1 sm:row-span-1",value:S,children:[t.jsx(bt,{className:"h-14 min-h-14 overflow-x-hidden border-b scrollbar-thin scrollbar-thumb-scrollbar",children:ue.map(o=>{const y=m(o);return t.jsx(wt,{value:o,hidden:y,asChild:!0,children:t.jsx($e,{id:`${o}-tab`,className:Be("clip-path-button relative h-full px-6 py-4 font-mono text-sm uppercase outline-none radix-state-active:z-10 radix-state-active:bg-foreground radix-state-active:text-background radix-state-active:hover:bg-foreground/80 radix-state-active:hover:text-background/80 radix-state-inactive:hover:bg-foreground/20 radix-state-inactive:hover:text-foreground/80 focus:bg-foreground/80 focus:text-background/80",y?"hidden":"inline-block"),preventScrollReset:!0,prefetch:"intent",onClick:f,to:o==="diff"&&D?h:`?${_t(l,"preview",o==="playground"?null:o)}`,children:o})},o)})}),t.jsxs("div",{className:"relative z-10 flex min-h-96 flex-grow flex-col overflow-y-auto",children:[t.jsx(W,{value:"playground",className:"flex w-full flex-grow items-center justify-center self-start radix-state-inactive:hidden",children:t.jsx(Et,{appInfo:e.playground,problemAppName:(v=e.problem)==null?void 0:v.name,inBrowserBrowserRef:s,allApps:e.allApps,isUpToDate:((T=e.playground)==null?void 0:T.isUpToDate)??!1})}),t.jsx(W,{value:"problem",className:"flex w-full flex-grow items-center justify-center self-start radix-state-inactive:hidden",children:t.jsx(oe,{appInfo:e.problem,inBrowserBrowserRef:s})}),t.jsx(W,{value:"solution",className:"flex w-full flex-grow items-center justify-center self-start radix-state-inactive:hidden",children:t.jsx(oe,{appInfo:e.solution,inBrowserBrowserRef:s})}),t.jsx(W,{value:"tests",className:"flex w-full flex-grow items-start justify-center self-start overflow-hidden radix-state-inactive:hidden",children:t.jsx(st,{appInfo:e.playground,problemAppName:(d=e.problem)==null?void 0:d.name,allApps:e.allApps,isUpToDate:((n=e.playground)==null?void 0:n.isUpToDate)??!1})}),t.jsx(W,{value:"diff",className:"flex h-full w-full flex-grow items-start justify-center self-start radix-state-inactive:hidden",children:t.jsx(Ve,{diff:e.diff,allApps:e.allApps})}),t.jsx(W,{value:"chat",className:"flex h-full w-full flex-grow items-start justify-center self-start radix-state-inactive:hidden",children:t.jsx(Ct,{})})]})]})}function cr(){return t.jsx(Ze,{statusHandlers:{404:()=>t.jsx("p",{children:"Sorry, we couldn't find an app here."})}})}export{cr as ErrorBoundary,or as default};
2
- //# sourceMappingURL=index-Dm1ll1kT.js.map
@@ -1,2 +0,0 @@
1
- import{j as e}from"./index-1cKOJFpX.js";import{E as t}from"./index-Dx5GmdYq.js";import{E as a}from"./epic-video-iluUs1-s.js";import{G as i}from"./error-boundary-DDTvdkB4.js";import{M as l,E as m}from"./mdx-M0kcP-mP.js";import{c as n}from"./misc-ENVX3CWf.js";import{P as c,u as d}from"./progress-BsY6hGPp.js";import{u as p,L as x}from"./components-CME-nGId.js";import"./index-BATSX33w.js";import"./request-info-CEhUGODY.js";import"./tooltip-BiHTe_7F.js";import"./client-hints-DNUUFGmB.js";import"./loading-C5uX0jJw.js";import"./user-D6tTg1yS.js";import"./clsx-B-dksMZM.js";import"./progress-bar-CSvo1ZXP.js";function h({exercise:r}){const s=d(r.exerciseNumber);return e.jsx("li",{children:e.jsxs(x,{className:n("relative flex items-center gap-4 px-4 py-3 text-lg font-semibold transition after:absolute after:right-10 after:-translate-x-2 after:opacity-0 after:transition after:content-['→'] hover:bg-gray-50 hover:after:translate-x-0 hover:after:opacity-100 dark:hover:bg-white/5",s),to:`${r.exerciseNumber.toString().padStart(2,"0")}`,children:[e.jsx("span",{className:"text-xs font-normal tabular-nums opacity-50",children:r.exerciseNumber}),e.jsx("span",{children:r.title})]})},r.exerciseNumber)}const f={h1:()=>null};function S(){const r=p(),s=e.jsxs("ul",{className:"flex flex-col divide-y divide-border dark:divide-border/50",children:[e.jsx("strong",{className:"px-10 pb-3 font-mono text-xs uppercase",children:"Exercises"}),r.exercises.map(o=>e.jsx(h,{exercise:o},o.exerciseNumber))]});return e.jsxs("main",{className:"relative flex h-full w-full max-w-5xl flex-col justify-between border-r md:w-3/4 xl:w-2/3",children:[e.jsxs("article",{id:r.articleId,className:"shadow-on-scrollbox flex w-full flex-1 flex-col gap-12 overflow-y-scroll px-3 py-4 pt-6 scrollbar-thin scrollbar-thumb-scrollbar md:px-10 md:py-12 md:pt-16",children:[e.jsx("div",{children:e.jsx("h1",{className:"px-10 text-[clamp(3rem,6vw,7.5rem)] font-extrabold leading-none",children:r.title})}),e.jsxs("div",{className:"w-full max-w-none scroll-pt-6 border-t px-3 pt-3 md:px-10 md:pt-8",children:[e.jsx("h2",{className:"pb-5 font-mono text-xs font-semibold uppercase",children:"Intro"}),r.workshopReadme.compiled.status==="success"&&r.workshopReadme.compiled.code?e.jsx(a,{epicVideoInfosPromise:r.epicVideoInfosPromise,children:e.jsx("div",{className:"prose dark:prose-invert sm:prose-lg",children:e.jsx(l,{code:r.workshopReadme.compiled.code,components:f})})}):r.workshopReadme.compiled.status==="error"?e.jsxs("div",{className:"text-red-500",children:["There was an error:",e.jsx("pre",{children:r.workshopReadme.compiled.error})]}):"No instructions yet..."]}),e.jsx("div",{className:"pb-5 pt-10",children:r.workshopReadme.compiled.status==="success"&&r.workshopReadme.compiled.code&&r.workshopReadme.compiled.code.length>500?s:null})]}),e.jsx(t,{elementQuery:`#${r.articleId}`}),e.jsx(c,{type:"workshop-instructions",className:"h-14 border-t px-6"}),e.jsx("div",{className:"flex h-16 justify-center border-t",children:e.jsx(m,{file:r.workshopReadme.file,relativePath:r.workshopReadme.relativePath})})]})}function V(){return e.jsx(i,{})}export{V as ErrorBoundary,S as default};
2
- //# sourceMappingURL=index-Tfdnz1AB.js.map
@@ -1 +0,0 @@
1
- window.__remixManifest={"entry":{"module":"/assets/entry.client-3M2p-8I3.js","imports":["/assets/index-1cKOJFpX.js","/assets/components-CME-nGId.js"],"css":[]},"routes":{"root":{"id":"root","path":"","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":true,"module":"/assets/root-Tcnfz99O.js","imports":["/assets/index-1cKOJFpX.js","/assets/components-CME-nGId.js","/assets/clsx-B-dksMZM.js","/assets/misc-ENVX3CWf.js","/assets/request-info-CEhUGODY.js","/assets/tooltip-BiHTe_7F.js","/assets/client-hints-DNUUFGmB.js","/assets/use-hydrated-Citou692.js","/assets/error-boundary-DDTvdkB4.js","/assets/progress-bar-CSvo1ZXP.js","/assets/index-B-hHvmeV.js","/assets/index-BATSX33w.js","/assets/presence-Cr--lRCr.js","/assets/seo-pBpFCWsy.js"],"css":[]},"routes/$":{"id":"routes/$","parentId":"root","path":"*","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":true,"module":"/assets/_-DbrWZazo.js","imports":["/assets/index-1cKOJFpX.js","/assets/clsx-B-dksMZM.js","/assets/components-CME-nGId.js","/assets/misc-ENVX3CWf.js","/assets/error-boundary-DDTvdkB4.js"],"css":[]},"routes/_app+/_layout":{"id":"routes/_app+/_layout","parentId":"root","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/_layout-AgYGL72C.js","imports":["/assets/index-1cKOJFpX.js","/assets/clsx-B-dksMZM.js","/assets/components-CME-nGId.js","/assets/misc-ENVX3CWf.js","/assets/tooltip-BiHTe_7F.js","/assets/request-info-CEhUGODY.js","/assets/client-hints-DNUUFGmB.js","/assets/use-hydrated-Citou692.js","/assets/index-BXWoOGxB.js","/assets/user-D6tTg1yS.js","/assets/presence-Cr--lRCr.js","/assets/progress-BsY6hGPp.js","/assets/index-BATSX33w.js"],"css":[]},"routes/_app+/account":{"id":"routes/_app+/account","parentId":"routes/_app+/_layout","path":"account","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/account-7o6O4ruO.js","imports":["/assets/index-1cKOJFpX.js","/assets/clsx-B-dksMZM.js","/assets/components-CME-nGId.js","/assets/misc-ENVX3CWf.js","/assets/request-info-CEhUGODY.js","/assets/button-BklqyTPS.js","/assets/tooltip-BiHTe_7F.js","/assets/user-D6tTg1yS.js","/assets/presence-Cr--lRCr.js"],"css":[]},"routes/_app+/app.$appName+/$":{"id":"routes/_app+/app.$appName+/$","parentId":"routes/_app+/_layout","path":"app/:appName/*","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/_-l0sNRNKZ.js","imports":[],"css":[]},"routes/_app+/app.$appName+/api.$":{"id":"routes/_app+/app.$appName+/api.$","parentId":"routes/_app+/_layout","path":"app/:appName/api/*","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/api._-l0sNRNKZ.js","imports":[],"css":[]},"routes/_app+/app.$appName+/epic_ws[.js]":{"id":"routes/_app+/app.$appName+/epic_ws[.js]","parentId":"routes/_app+/_layout","path":"app/:appName/epic_ws.js","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/epic_ws_.js_-l0sNRNKZ.js","imports":[],"css":[]},"routes/_app+/app.$appName+/index":{"id":"routes/_app+/app.$appName+/index","parentId":"routes/_app+/_layout","path":"app/:appName/","index":true,"hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/index-l0sNRNKZ.js","imports":[],"css":[]},"routes/_app+/app.$appName+/test.$testName":{"id":"routes/_app+/app.$appName+/test.$testName","parentId":"routes/_app+/_layout","path":"app/:appName/test/:testName","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/test._testName-l0sNRNKZ.js","imports":[],"css":[]},"routes/_app+/app.$appName+/test.epic_ws[.js]":{"id":"routes/_app+/app.$appName+/test.epic_ws[.js]","parentId":"routes/_app+/_layout","path":"app/:appName/test/epic_ws.js","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/test.epic_ws_.js_-l0sNRNKZ.js","imports":[],"css":[]},"routes/_app+/discord":{"id":"routes/_app+/discord","parentId":"routes/_app+/_layout","path":"discord","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/discord-CHP4_JLJ.js","imports":["/assets/index-1cKOJFpX.js","/assets/clsx-B-dksMZM.js","/assets/components-CME-nGId.js","/assets/misc-ENVX3CWf.js","/assets/user-D6tTg1yS.js","/assets/discord-Dq4e30wV.js"],"css":[]},"routes/_app+/exercise+/_layout":{"id":"routes/_app+/exercise+/_layout","parentId":"routes/_app+/_layout","path":"exercise","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/_layout-BUs3av-e.js","imports":["/assets/index-1cKOJFpX.js"],"css":[]},"routes/_app+/exercise+/$exerciseNumber":{"id":"routes/_app+/exercise+/$exerciseNumber","parentId":"routes/_app+/exercise+/_layout","path":":exerciseNumber","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":true,"module":"/assets/_exerciseNumber-Cq0nozYz.js","imports":["/assets/index-1cKOJFpX.js","/assets/components-CME-nGId.js","/assets/clsx-B-dksMZM.js","/assets/misc-ENVX3CWf.js","/assets/request-info-CEhUGODY.js","/assets/tooltip-BiHTe_7F.js","/assets/client-hints-DNUUFGmB.js","/assets/index-BATSX33w.js","/assets/loading-C5uX0jJw.js","/assets/user-D6tTg1yS.js","/assets/epic-video-iluUs1-s.js","/assets/progress-bar-CSvo1ZXP.js","/assets/index-Dx5GmdYq.js","/assets/mdx-M0kcP-mP.js","/assets/progress-BsY6hGPp.js","/assets/seo-pBpFCWsy.js"],"css":["/assets/epic-video-DUnRvy1A.css"]},"routes/_app+/exercise+/$exerciseNumber_.$stepNumber":{"id":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber","parentId":"routes/_app+/exercise+/_layout","path":":exerciseNumber/:stepNumber","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":true,"module":"/assets/_exerciseNumber_._stepNumber-B5pmJ29o.js","imports":["/assets/index-1cKOJFpX.js","/assets/clsx-B-dksMZM.js","/assets/components-CME-nGId.js","/assets/misc-ENVX3CWf.js"],"css":[]},"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout":{"id":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout","parentId":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber","path":":type","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":true,"module":"/assets/_layout-BocZ2xWF.js","imports":["/assets/index-1cKOJFpX.js","/assets/clsx-B-dksMZM.js","/assets/components-CME-nGId.js","/assets/misc-ENVX3CWf.js","/assets/request-info-CEhUGODY.js","/assets/tooltip-BiHTe_7F.js","/assets/client-hints-DNUUFGmB.js","/assets/index-BATSX33w.js","/assets/loading-C5uX0jJw.js","/assets/user-D6tTg1yS.js","/assets/epic-video-iluUs1-s.js","/assets/progress-bar-CSvo1ZXP.js","/assets/index-BXWoOGxB.js","/assets/index-hogig2HK.js","/assets/index-Dx5GmdYq.js","/assets/error-boundary-DDTvdkB4.js","/assets/nav-chevrons-B82nbdyj.js","/assets/mdx-M0kcP-mP.js","/assets/progress-BsY6hGPp.js","/assets/set-playground-Cdy8VlVD.js","/assets/seo-pBpFCWsy.js"],"css":["/assets/epic-video-DUnRvy1A.css"]},"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/app":{"id":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/app","parentId":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout","path":"app","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/app-BiWJY58g.js","imports":["/assets/index-1cKOJFpX.js","/assets/clsx-B-dksMZM.js","/assets/components-CME-nGId.js","/assets/request-info-CEhUGODY.js","/assets/client-hints-DNUUFGmB.js","/assets/misc-ENVX3CWf.js","/assets/tooltip-BiHTe_7F.js","/assets/button-BklqyTPS.js","/assets/loading-C5uX0jJw.js","/assets/progress-bar-CSvo1ZXP.js","/assets/index-BATSX33w.js","/assets/preview-CqrRe2BV.js"],"css":[]},"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/index":{"id":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/index","parentId":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout","index":true,"hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":true,"module":"/assets/index-Dm1ll1kT.js","imports":["/assets/index-1cKOJFpX.js","/assets/clsx-B-dksMZM.js","/assets/components-CME-nGId.js","/assets/misc-ENVX3CWf.js","/assets/tooltip-BiHTe_7F.js","/assets/index-BXWoOGxB.js","/assets/index-hogig2HK.js","/assets/request-info-CEhUGODY.js","/assets/client-hints-DNUUFGmB.js","/assets/index-BATSX33w.js","/assets/loading-C5uX0jJw.js","/assets/user-D6tTg1yS.js","/assets/epic-video-iluUs1-s.js","/assets/progress-bar-CSvo1ZXP.js","/assets/accordion-BroSqIct.js","/assets/mdx-M0kcP-mP.js","/assets/use-event-source-A_0lEOPX.js","/assets/set-playground-Cdy8VlVD.js","/assets/button-BklqyTPS.js","/assets/diff-CpFxuKA2.js","/assets/error-boundary-DDTvdkB4.js","/assets/discord-Dq4e30wV.js","/assets/index-B-hHvmeV.js","/assets/tests-CmNNBElK.js","/assets/preview-CqrRe2BV.js"],"css":["/assets/epic-video-DUnRvy1A.css"]},"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/test":{"id":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/test","parentId":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout","path":"test","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/test-D9HsTvpe.js","imports":["/assets/index-1cKOJFpX.js","/assets/clsx-B-dksMZM.js","/assets/components-CME-nGId.js","/assets/misc-ENVX3CWf.js","/assets/tooltip-BiHTe_7F.js","/assets/index-BXWoOGxB.js","/assets/index-hogig2HK.js","/assets/request-info-CEhUGODY.js","/assets/client-hints-DNUUFGmB.js","/assets/progress-bar-CSvo1ZXP.js","/assets/accordion-BroSqIct.js","/assets/index-BATSX33w.js","/assets/use-event-source-A_0lEOPX.js","/assets/set-playground-Cdy8VlVD.js","/assets/tests-CmNNBElK.js"],"css":[]},"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.index":{"id":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.index","parentId":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber","index":true,"hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/_exerciseNumber_._stepNumber.index-l0sNRNKZ.js","imports":[],"css":[]},"routes/_app+/exercise+/$exerciseNumber_.finished":{"id":"routes/_app+/exercise+/$exerciseNumber_.finished","parentId":"routes/_app+/exercise+/_layout","path":":exerciseNumber/finished","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/_exerciseNumber_.finished-Q9qnPuZX.js","imports":["/assets/index-1cKOJFpX.js","/assets/components-CME-nGId.js","/assets/clsx-B-dksMZM.js","/assets/misc-ENVX3CWf.js","/assets/request-info-CEhUGODY.js","/assets/tooltip-BiHTe_7F.js","/assets/client-hints-DNUUFGmB.js","/assets/index-BATSX33w.js","/assets/loading-C5uX0jJw.js","/assets/user-D6tTg1yS.js","/assets/epic-video-iluUs1-s.js","/assets/progress-bar-CSvo1ZXP.js","/assets/index-Dx5GmdYq.js","/assets/nav-chevrons-B82nbdyj.js","/assets/mdx-M0kcP-mP.js","/assets/progress-BsY6hGPp.js","/assets/seo-pBpFCWsy.js"],"css":["/assets/epic-video-DUnRvy1A.css"]},"routes/_app+/finished":{"id":"routes/_app+/finished","parentId":"routes/_app+/_layout","path":"finished","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/finished-Bm-bCUU2.js","imports":["/assets/index-1cKOJFpX.js","/assets/components-CME-nGId.js","/assets/clsx-B-dksMZM.js","/assets/misc-ENVX3CWf.js","/assets/request-info-CEhUGODY.js","/assets/tooltip-BiHTe_7F.js","/assets/client-hints-DNUUFGmB.js","/assets/index-BATSX33w.js","/assets/loading-C5uX0jJw.js","/assets/user-D6tTg1yS.js","/assets/epic-video-iluUs1-s.js","/assets/progress-bar-CSvo1ZXP.js","/assets/index-Dx5GmdYq.js","/assets/nav-chevrons-B82nbdyj.js","/assets/mdx-M0kcP-mP.js","/assets/seo-pBpFCWsy.js","/assets/progress-BsY6hGPp.js"],"css":["/assets/epic-video-DUnRvy1A.css"]},"routes/_app+/index":{"id":"routes/_app+/index","parentId":"routes/_app+/_layout","index":true,"hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":true,"module":"/assets/index-Tfdnz1AB.js","imports":["/assets/index-1cKOJFpX.js","/assets/components-CME-nGId.js","/assets/clsx-B-dksMZM.js","/assets/misc-ENVX3CWf.js","/assets/request-info-CEhUGODY.js","/assets/tooltip-BiHTe_7F.js","/assets/client-hints-DNUUFGmB.js","/assets/index-BATSX33w.js","/assets/loading-C5uX0jJw.js","/assets/user-D6tTg1yS.js","/assets/epic-video-iluUs1-s.js","/assets/progress-bar-CSvo1ZXP.js","/assets/index-Dx5GmdYq.js","/assets/error-boundary-DDTvdkB4.js","/assets/mdx-M0kcP-mP.js","/assets/progress-BsY6hGPp.js"],"css":["/assets/epic-video-DUnRvy1A.css"]},"routes/_app+/login":{"id":"routes/_app+/login","parentId":"routes/_app+/_layout","path":"login","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/login-4cvVFzF8.js","imports":["/assets/index-1cKOJFpX.js","/assets/clsx-B-dksMZM.js","/assets/components-CME-nGId.js","/assets/request-info-CEhUGODY.js","/assets/client-hints-DNUUFGmB.js","/assets/use-event-source-A_0lEOPX.js","/assets/button-BklqyTPS.js","/assets/loading-C5uX0jJw.js"],"css":[]},"routes/_app+/support":{"id":"routes/_app+/support","parentId":"routes/_app+/_layout","path":"support","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/support-hcqGIpir.js","imports":["/assets/index-1cKOJFpX.js","/assets/components-CME-nGId.js"],"css":[]},"routes/admin+/_layout":{"id":"routes/admin+/_layout","parentId":"root","path":"admin","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/_layout-C8uU4Hwj.js","imports":["/assets/index-1cKOJFpX.js","/assets/clsx-B-dksMZM.js","/assets/components-CME-nGId.js","/assets/misc-ENVX3CWf.js","/assets/tooltip-BiHTe_7F.js","/assets/progress-BsY6hGPp.js"],"css":[]},"routes/admin+/apps":{"id":"routes/admin+/apps","parentId":"routes/admin+/_layout","path":"apps","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/apps-DP2rzg_V.js","imports":[],"css":[]},"routes/admin+/cache":{"id":"routes/admin+/cache","parentId":"routes/admin+/_layout","path":"cache","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/cache-l0sNRNKZ.js","imports":[],"css":[]},"routes/apps":{"id":"routes/apps","parentId":"root","path":"apps","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/apps-l0sNRNKZ.js","imports":[],"css":[]},"routes/diff":{"id":"routes/diff","parentId":"root","path":"diff","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/diff-Cw8ktQ1-.js","imports":["/assets/index-1cKOJFpX.js","/assets/clsx-B-dksMZM.js","/assets/components-CME-nGId.js","/assets/misc-ENVX3CWf.js","/assets/tooltip-BiHTe_7F.js","/assets/index-BXWoOGxB.js","/assets/index-hogig2HK.js","/assets/request-info-CEhUGODY.js","/assets/client-hints-DNUUFGmB.js","/assets/index-BATSX33w.js","/assets/loading-C5uX0jJw.js","/assets/user-D6tTg1yS.js","/assets/epic-video-iluUs1-s.js","/assets/progress-bar-CSvo1ZXP.js","/assets/accordion-BroSqIct.js","/assets/mdx-M0kcP-mP.js","/assets/diff-CpFxuKA2.js","/assets/nav-chevrons-B82nbdyj.js"],"css":["/assets/epic-video-DUnRvy1A.css"]},"routes/discord.callback":{"id":"routes/discord.callback","parentId":"root","path":"discord/callback","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/discord.callback-l0sNRNKZ.js","imports":[],"css":[]},"routes/exercises":{"id":"routes/exercises","parentId":"root","path":"exercises","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/exercises-l0sNRNKZ.js","imports":[],"css":[]},"routes/launch-editor":{"id":"routes/launch-editor","parentId":"root","path":"launch-editor","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/launch-editor-l0sNRNKZ.js","imports":[],"css":[]},"routes/login-sse":{"id":"routes/login-sse","parentId":"root","path":"login-sse","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/login-sse-l0sNRNKZ.js","imports":[],"css":[]},"routes/og":{"id":"routes/og","parentId":"root","path":"og","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/og-l0sNRNKZ.js","imports":[],"css":[]},"routes/onboarding":{"id":"routes/onboarding","parentId":"root","path":"onboarding","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/onboarding-CnmE4HLR.js","imports":["/assets/index-1cKOJFpX.js","/assets/clsx-B-dksMZM.js","/assets/components-CME-nGId.js","/assets/misc-ENVX3CWf.js","/assets/request-info-CEhUGODY.js","/assets/tooltip-BiHTe_7F.js","/assets/client-hints-DNUUFGmB.js","/assets/index-BATSX33w.js","/assets/loading-C5uX0jJw.js","/assets/user-D6tTg1yS.js","/assets/button-BklqyTPS.js","/assets/epic-video-iluUs1-s.js"],"css":["/assets/epic-video-DUnRvy1A.css"]},"routes/processes":{"id":"routes/processes","parentId":"root","path":"processes","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/processes-l0sNRNKZ.js","imports":[],"css":[]},"routes/progress":{"id":"routes/progress","parentId":"root","path":"progress","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/progress-l0sNRNKZ.js","imports":[],"css":[]},"routes/robots[.]txt":{"id":"routes/robots[.]txt","parentId":"root","path":"robots.txt","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/robots_._txt-l0sNRNKZ.js","imports":[],"css":[]},"routes/set-playground":{"id":"routes/set-playground","parentId":"root","path":"set-playground","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/set-playground-l0sNRNKZ.js","imports":[],"css":[]},"routes/sitemap[.]xml":{"id":"routes/sitemap[.]xml","parentId":"root","path":"sitemap.xml","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/sitemap_._xml-l0sNRNKZ.js","imports":[],"css":[]},"routes/start":{"id":"routes/start","parentId":"root","path":"start","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/start-l0sNRNKZ.js","imports":[],"css":[]},"routes/test":{"id":"routes/test","parentId":"root","path":"test","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/test-l0sNRNKZ.js","imports":[],"css":[]},"routes/theme/index":{"id":"routes/theme/index","parentId":"root","path":"theme","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/index-DP2rzg_V.js","imports":[],"css":[]},"routes/update-mdx-cache":{"id":"routes/update-mdx-cache","parentId":"root","path":"update-mdx-cache","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/update-mdx-cache-l0sNRNKZ.js","imports":[],"css":[]},"routes/video-player/index":{"id":"routes/video-player/index","parentId":"root","path":"video-player","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/index-K6Dvbx-E.js","imports":[],"css":[]}},"url":"/assets/manifest-4a3cf2ec.js","version":"4a3cf2ec"};