@epic-web/workshop-app 6.47.10 → 6.47.12

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.
@@ -0,0 +1,2 @@
1
+ import{w as oe,b as B,O as le,L as c,e as G,N as v}from"./chunk-UIGDSWPH-BWkP6tD5.js";import{j as e}from"./jsx-runtime-C5WNSv3b.js";import{c as d,I as j,a as h,m as L,n as E}from"./misc-BapXpylh.js";import{r as I}from"./index-Az39ZADK.js";import{a as ie}from"./pe-Bs-DFNma.js";import{L as $}from"./product-CGPgWFTC.js";import{u as ce}from"./revalidation-ws-BahUMYqf.js";import{D as de,a as fe,b as ue,c as he,d as me,u as F,g as K,p as xe}from"./presence-D6KivDVU.js";import{S as _,T as pe,a as T,b as V,c as W}from"./tooltip-C2AQeNhD.js";import{c as A,b as ge}from"./user-DtZkTMil.js";import{u as X}from"./workshop-config-DCYN9tG7.js";import{u as Z}from"./online-Dw7HU4wM.js";import{b as be,s as O,c as je,d as ve,e as M,m,u as we,f as Ne}from"./progress-DJ4oeyzx.js";import{T as ee}from"./index-_LzGTKVC.js";import"./root-loader-C5P2c7MU.js";import"./types-Cl2NuNg4.js";import"./index-Cod-PQ6D.js";import"./index-CjiomtK6.js";function ye(t){t.values.forEach(s=>s.stop())}function z(t,s){[...s].reverse().forEach(a=>{const i=t.getVariant(a);i&&O(t,i),t.variantChildren&&t.variantChildren.forEach(o=>{z(o,s)})})}function ke(t,s){if(Array.isArray(s))return z(t,s);if(typeof s=="string")return z(t,[s]);O(t,s)}function Ee(){const t=new Set,s={subscribe(n){return t.add(n),()=>void t.delete(n)},start(n,a){const i=[];return t.forEach(o=>{i.push(be(o,n,{transitionOverride:a}))}),Promise.all(i)},set(n){return t.forEach(a=>{ke(a,n)})},stop(){t.forEach(n=>{ye(n)})},mount(){return()=>{s.stop()}}};return s}function R(){const t=je(Ee);return ve(t.mount,[]),t}function Ce(t,s){function n(){return window.matchMedia(t).matches}function a(i){const o=window.matchMedia(t);return o.addEventListener("change",i),()=>{o.removeEventListener("change",i)}}return function(){return I.useSyncExternalStore(a,n,()=>s)}}const Q=["opacity-70","opacity-80","opacity-90","opacity-100"],q=["shadow-[0_0_2px_0_rgba(0,0,0,0.3)]","shadow-[0_0_4px_0_rgba(0,0,0,0.3)]","shadow-[0_0_7px_0_rgba(0,0,0,0.3)]","shadow-[0_0_10px_0_rgba(0,0,0,0.3)]"];function J(t){const s=Math.round(t*Q.length-1),n=Math.round(t*q.length-1);return d("shadow-purple-700 hover:opacity-100 focus:opacity-100 dark:shadow-purple-200",Q[s]??"opacity-60",q[n]??"shadow-none",t===1?"animate-pulse hover:animate-none focus:animate-none":null)}function te({isMenuOpened:t}){const s=A(),{users:n}=F(),{product:{displayNameShort:a}}=X(),i=t?17:0,o=n.length-i,g=o>(t?1:0);if(!n.length)return null;const x=t&&n.length===1?e.jsx(c,{target:"_blank",rel:"noopener noreferrer",to:"https://www.youtube.com/watch?v=w6Q3mHyzn78",children:e.jsx("img",{alt:"Tiffany Tunes",className:d("h-8 w-8 rounded-full border object-cover",J(1)),src:"/img/tiffany.png"})}):null,f=`${o}${t?" more ":" "}${a} Dev${o===1?"":"s"} working now`;return e.jsx("div",{className:"flex flex-wrap items-center gap-2",children:e.jsxs(pe,{children:[(g?n.slice(0,i):n).map(({user:r,score:w})=>{const N=J(w),p=Le(r),l=r.imageUrlSmall||r.avatarUrl,b=r.hasAccess,S=p.some(P=>P.origin?.includes("localhost")),y=Se(p),k=Pe(r.loggedInProductHosts);if(r.optOut)return e.jsxs(T,{children:[e.jsx(V,{asChild:!0,children:e.jsx("div",{className:"relative",children:e.jsx("div",{tabIndex:0,"aria-label":"Anonymous user (opted out)",className:d("bg-muted flex h-8 w-8 items-center justify-center rounded-full border opacity-50"),children:e.jsx(j,{name:"User"})})})}),e.jsx(W,{children:e.jsx("span",{className:"flex flex-col items-center justify-center gap-1",children:e.jsxs("span",{className:"flex items-center gap-1.5",children:[k?e.jsx("span",{className:"text-xs",children:k}):null,"Anonymous (opted out of sharing)"]})})})]},r.id);let u;return b?u=S?"working":"referencing":u=S?"previewing":"reviewing",e.jsxs(T,{children:[e.jsx(V,{asChild:!0,children:e.jsxs("div",{className:"relative",children:[l?e.jsx("img",{tabIndex:0,alt:r.name||a,className:d("h-8 w-8 rounded-full border object-cover",N),src:l}):e.jsx("div",{tabIndex:0,"aria-label":r.name||`${a} Dev`,className:d("flex h-8 w-8 items-center justify-center rounded-full border",N),children:e.jsx(j,{name:"User"})}),y?e.jsx("span",{className:"absolute -top-1 -left-1 text-xs leading-none","aria-label":"Workshop products",children:y}):null]})}),e.jsx(W,{children:e.jsxs("span",{className:"flex flex-col items-center justify-center gap-1",children:[e.jsxs("span",{className:"flex items-center gap-1.5",children:[k?e.jsx("span",{className:"text-xs",children:k}):null,r.name||`${a} Dev`,p.length>0?` is ${u} ${w===1&&s?.id!==r.id?"with you":""} on`:null]}),p.map((P,H)=>{const C=_e(P);return C?e.jsxs("span",{className:d("flex flex-col items-center",p.length>1?"border-border mt-1 border-t pt-1 first:mt-0 first:border-t-0 first:pt-0":""),children:[C.line1?e.jsxs("span",{children:[K(P.productHost)," ",C.line1]}):null,C.line2?e.jsx("span",{className:"text-muted-foreground text-xs",children:C.line2}):null]},`${P.workshopTitle}-${H}`):null})]})})]},r.id)}),x,g?e.jsxs(T,{children:[e.jsx(V,{asChild:!0,children:e.jsx("div",{tabIndex:0,"aria-label":f,className:d("bg-accent text-accent-foreground flex items-center justify-center rounded-full border text-xs",t?"h-8 w-8":"h-6 w-6"),children:e.jsx("span",{className:d("pointer-events-none overflow-hidden text-center text-ellipsis whitespace-nowrap",t?"w-8":"w-6"),children:t?`+${o}`:o})})}),e.jsx(W,{children:f})]}):null]})})}function Pe(t){return!t||t.length===0?null:t.map(s=>xe[s]).filter(Boolean).join(" ")}function Le(t){return t.locations&&t.locations.length>0?t.locations.filter(Boolean):t.location?[t.location]:[]}function Se(t){const s=new Set;for(const n of t)n.productHost&&s.add(n.productHost);return s.size===0?null:Array.from(s).map(n=>K(n)).filter(Boolean).join("")}const ne=Ce("(min-width: 640px)",!0),Oe=oe(function(){const s=B(),n=A(),a=ne(),i=ie(),[o,g]=I.useState(s.isMenuOpened);ce({watchPaths:["./exercises/README.mdx"]});function x(f){g(f),document.cookie=`es_menu_open=${f.toString()}; path=/; SameSite=Lax;`}return e.jsxs("div",{className:"flex flex-col",children:[n?null:e.jsx(De,{}),i&&a?null:e.jsx(Ie,{isMenuOpened:o,onMenuOpenChange:x}),e.jsxs("div",{className:d("flex grow flex-col sm:flex-row",{"h-[calc(100vh-128px-env(safe-area-inset-top)-env(safe-area-inset-bottom))] sm:h-[calc(100vh-64px-env(safe-area-inset-top)-env(safe-area-inset-bottom))]":!n,"h-[calc(100vh-64px-env(safe-area-inset-top)-env(safe-area-inset-bottom))] sm:h-[calc(100vh-env(safe-area-inset-top)-env(safe-area-inset-bottom))]":n,"h-[unset]":!a&&o}),children:[a?e.jsx(He,{isMenuOpened:o,onMenuOpenChange:x}):null,e.jsx("div",{className:d("h-full w-full max-w-full sm:max-w-[calc(100%-56px)]",o?"hidden md:block":""),children:e.jsx(le,{})})]})]})});function _e(t){if(!t)return null;const{exercise:s}=t,n=[s?[s.exerciseNumber,s.stepNumber].filter(Boolean).map(a=>a.toString().padStart(2,"0")).join("/"):null,s?.type].filter(Boolean).join(" - ");return{line1:t.workshopTitle,line2:n}}function De(){const t=ne(),{product:{host:s,displayName:n}}=X(),a=ge(),i=e.jsx("div",{children:ENV.EPICSHOP_DEPLOYED?e.jsxs("div",{children:["This is the deployed version. ",e.jsxs(e.Fragment,{children:[e.jsx(c,{className:"underline",target:"_blank",rel:"noopener noreferrer",to:ENV.EPICSHOP_GITHUB_REPO,children:"Run locally"})," for full experience."]})," "]}):a?e.jsxs("div",{children:[e.jsx(c,{to:"/login",className:"underline",children:"Login"})," ","or"," ",e.jsx("a",{href:`https://${s}/login`,className:"underline",children:"join for free"})," ","for the full experience."]}):null});return e.jsx("div",{className:"z-10 flex h-16 items-center justify-between border-b bg-linear-to-tr from-blue-500 to-indigo-500 pl-4 text-white",children:t?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"hidden flex-1 flex-wrap items-center gap-4 sm:flex",children:[e.jsx($,{size:"lg",style:"monochrome"}),e.jsxs("div",{className:"flex flex-1 flex-wrap items-center",children:[e.jsxs("p",{className:"mr-2",children:["Welcome to the"," ",e.jsx(c,{to:`https://${s}`,className:"underline",target:"_blank",children:n})," ","Workshop app!"]}),i]})]}),a?null:e.jsxs("div",{className:"hidden h-full flex-col items-center sm:flex md:flex-row",children:[e.jsxs(c,{to:`https://${s}`,target:"_blank",className:"flex h-full items-center justify-center space-x-1.5 px-5 text-sm font-semibold",children:[e.jsxs("span",{className:"drop-shadow-sm",children:["Join ",n]}),e.jsx("span",{children:"↗︎"})]}),e.jsxs(c,{to:ENV.EPICSHOP_DEPLOYED?`https://${s}/login`:"/login",className:"flex h-full items-center justify-center space-x-1.5 bg-white/20 px-5 text-sm font-semibold shadow-md transition hover:bg-white/30",children:[e.jsx(j,{name:"User",size:"lg"}),e.jsx("span",{className:"drop-shadow-sm",children:"Login"})]})]})]}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"flex flex-1 flex-wrap items-center gap-4 sm:hidden",children:[e.jsx("a",{href:`https://${s}`,children:e.jsx($,{size:"lg",style:"monochrome"})}),e.jsxs(de,{children:[e.jsx(fe,{children:e.jsx(j,{name:"Question",size:"lg",className:"animate-pulse"})}),e.jsxs(ue,{children:[e.jsxs(he,{children:[e.jsx($,{size:"lg",style:"monochrome"}),e.jsx("span",{className:"text-lg font-semibold",children:n})]}),e.jsxs(me,{children:["Welcome to the"," ",e.jsx(c,{to:`https://${s}`,className:"underline",children:n})," ","Workshop app!"]}),i]})]})]}),a?null:e.jsxs("div",{className:"flex h-full items-center",children:[e.jsxs(c,{to:`https://${s}`,target:"_blank",className:"flex h-full items-center justify-center space-x-1.5 px-5 text-sm font-semibold",children:[e.jsx("span",{className:"drop-shadow-sm",children:"Join"}),e.jsx("span",{children:"↗︎"})]}),e.jsxs(c,{to:ENV.EPICSHOP_DEPLOYED?`https://${s}/login`:"/login",className:"flex h-full items-center justify-center space-x-1.5 bg-white/20 px-5 text-sm font-semibold shadow-md transition hover:bg-white/30",children:[e.jsx(j,{name:"User",size:"lg"}),e.jsx("span",{className:"drop-shadow-sm",children:"Login"})]})]})]})})}const se={hidden:{opacity:0,x:-20},visible:{opacity:1,x:0}};function re({exerciseNumber:t,children:s}){const n=we(t);return e.jsx(m.li,{variants:se,className:d("py-[6px] first:pt-3 last:pb-3",n?`${n} before:border-t`:null),children:e.jsx("span",{className:"inline-block pl-2",children:s})})}function D({children:t,...s}){const n=Ne(s);return e.jsx(m.li,{variants:se,className:d("py-[6px] first:pt-3 last:pb-3",n?`${n} before:border-t`:null),children:e.jsx("span",{className:"inline-block pl-2",children:t})})}function Ie({isMenuOpened:t,onMenuOpenChange:s}){const n=B(),a=A(),i=M(),o=G(),g=Z(),{users:x}=F(),f={visible:{opacity:1,transition:{duration:.05,when:"beforeChildren",staggerChildren:.03}},hidden:{opacity:0}};return e.jsx("nav",{className:"flex w-full border-b sm:hidden",children:e.jsx("div",{className:"w-full",children:e.jsxs("div",{className:d("flex items-center",{"flex-col":t,"h-14":!t}),children:[e.jsx(ae,{title:n.workshopTitle,isMenuOpened:t,setMenuOpened:s}),t&&e.jsxs(m.div,{className:"scrollbar-thin scrollbar-thumb-scrollbar flex w-full grow flex-col justify-between overflow-x-auto p-6",initial:{opacity:0},animate:{opacity:1},children:[e.jsxs(m.ul,{variants:f,initial:"hidden",animate:"visible",className:"flex flex-col",children:[e.jsx("span",{children:e.jsx(v,{prefetch:"intent",to:"/",className:({isActive:r})=>h("relative px-2 py-0.5 pr-3 text-2xl font-bold whitespace-nowrap outline-none hover:underline focus:underline",'after:bg-background after:absolute after:-right-2.5 after:-bottom-2.5 after:h-5 after:w-5 after:scale-75 after:rotate-45 after:content-[""] hover:underline focus:underline',{"bg-foreground text-background":r}),children:"Home"})}),n.exercises.map(({exerciseNumber:r,title:w,steps:N})=>{const p=Number(o.exerciseNumber)===r,l=!p&&n.playground.exerciseNumber===r;return e.jsxs(re,{exerciseNumber:r,children:[e.jsxs("span",{className:"flex items-center gap-1 text-2xl font-bold",children:[e.jsx(c,{prefetch:"intent",to:L(r),className:h("relative px-2 py-0.5 pr-3 whitespace-nowrap outline-none hover:underline focus:underline",'after:bg-background after:absolute after:-right-2.5 after:-bottom-2.5 after:h-5 after:w-5 after:scale-75 after:rotate-45 after:content-[""] hover:underline focus:underline',{"bg-foreground text-background":p}),children:w}),l?e.jsx(c,{to:E(n.playground.exerciseNumber,n.playground.stepNumber,n.playground.type),prefetch:"intent",children:"🛝"}):null]}),p?e.jsxs(m.ul,{variants:f,initial:"hidden",animate:"visible",className:"mt-2 ml-4 flex flex-col",children:[e.jsx(D,{type:"instructions",exerciseNumber:r,children:e.jsx(c,{to:L(r),prefetch:"intent",className:h('after:bg-background relative px-2 py-0.5 pr-3 text-xl font-medium whitespace-nowrap outline-none after:absolute after:-right-2.5 after:-bottom-2.5 after:h-5 after:w-5 after:scale-75 after:rotate-45 after:content-[""] hover:underline focus:underline',{"bg-foreground text-background":!o.stepNumber}),children:"Intro"})},r),N.filter(Boolean).map(({stepNumber:b,title:S,problem:y,solution:k})=>e.jsx(D,{type:"step",stepNumber:b,exerciseNumber:r,children:e.jsxs("div",{className:"flex flex-col gap-0.5",children:[e.jsxs(c,{to:E(r,b),prefetch:"intent",className:"leading-tight font-semibold",children:[b.toString().padStart(2,"0"),"."," ",S]}),e.jsxs("div",{className:"mt-0.5 ml-3 flex gap-1",children:[y&&e.jsxs(v,{to:E(r,b,"problem"),prefetch:"intent",className:({isActive:u})=>h("relative px-2 py-0.5 pr-3 whitespace-nowrap outline-none hover:underline focus:underline",'after:bg-background after:absolute after:-right-2.5 after:-bottom-2.5 after:h-5 after:w-5 after:scale-75 after:rotate-45 after:content-[""] hover:underline focus:underline',{"bg-foreground text-background":u}),children:["Problem",y.name===n.playground.appName?" 🛝":""]}),k&&e.jsxs(v,{to:E(r,b,"solution"),prefetch:"intent",className:({isActive:u})=>h("relative px-2 py-0.5 pr-3 whitespace-nowrap outline-none hover:underline focus:underline",'after:bg-background after:absolute after:-right-2.5 after:-bottom-2.5 after:h-5 after:w-5 after:scale-75 after:rotate-45 after:content-[""] hover:underline focus:underline',{"bg-foreground text-background":u}),children:["Solution",k.name===n.playground.appName?" 🛝":""]})]})]})},b)),e.jsx(D,{type:"finished",exerciseNumber:r,children:e.jsx(v,{to:L(r,"finished"),prefetch:"intent",className:({isActive:b})=>h('after:bg-background relative px-2 py-0.5 pr-3 text-base font-medium whitespace-nowrap outline-none after:absolute after:-right-2.5 after:-bottom-2.5 after:h-5 after:w-5 after:scale-75 after:rotate-45 after:content-[""] hover:underline focus:underline',{"bg-foreground text-background":b}),children:"📝 Elaboration"})})]}):null]},r)})]}),e.jsx("div",{className:"mt-6",children:e.jsx(v,{to:"/finished",className:({isActive:r})=>h("relative text-lg font-bold whitespace-nowrap outline-none hover:underline focus:underline",{'after:bg-background bg-black text-white after:absolute after:-right-2.5 after:-bottom-2.5 after:h-5 after:w-5 after:scale-75 after:rotate-45 after:content-[""]':r}),children:"📝 Workshop Feedback"})})]}),e.jsx("div",{className:"grow"}),g?null:e.jsx(_,{content:t?null:"You are offline",children:e.jsx("div",{className:d("flex h-14 animate-pulse items-center justify-start p-4",t?"w-full border-t":"border-l"),children:e.jsx(j,{name:"WifiNoConnection",className:"text-foreground-destructive",children:t?"You are offline":null})})}),e.jsx("div",{className:d("flex items-center justify-start p-4",t&&x.length>4?"min-h-14":"h-14",t?"w-full border-t":"border-l"),children:e.jsx(te,{isMenuOpened:t})}),ENV.EPICSHOP_DEPLOYED?null:a?e.jsx(_,{content:t?null:"Your account",children:e.jsxs(c,{className:d("flex h-14 shrink-0 items-center justify-start space-x-3 px-4 py-4 text-center no-underline hover:underline",{"border-l":!t,"w-full border-t":t}),to:"/account",children:[a.imageUrlSmall?e.jsx("img",{alt:a.name??a.email,src:a.imageUrlSmall,className:"h-full rounded-full"}):e.jsx(j,{name:"User",className:"shrink-0",size:"lg"}),t?e.jsx(m.div,{className:"flex items-center whitespace-nowrap",initial:{opacity:0},animate:{opacity:1},children:"Your Account"}):e.jsx("span",{className:"sr-only",children:"Your account"})]})}):null,ENV.EPICSHOP_DEPLOYED?null:a&&i?e.jsx(_,{content:t?null:"Continue to next lesson",children:e.jsxs(c,{to:i,prefetch:"intent",className:h("flex h-14 w-full items-center space-x-3 border-l px-4 py-4 pl-[18px] no-underline hover:underline"),state:{from:"continue next lesson button"},children:[e.jsx(j,{name:"FastForward",className:"shrink-0",size:"md"}),t?e.jsx(m.div,{className:"flex items-center whitespace-nowrap",initial:{opacity:0},animate:{opacity:1},children:"Continue to next lesson"}):e.jsx("span",{className:"sr-only",children:"Continue to next lesson"})]})}):null,e.jsx("div",{className:d("flex h-14 w-14 items-center justify-center self-start p-4 sm:mb-4 sm:w-full",{"w-full border-t":t,"border-l":!t}),children:e.jsx(ee,{})})]})})})}const Y=400;function He({isMenuOpened:t,onMenuOpenChange:s}){const n=B(),a=A(),i=M(),o=G(),g=Z(),{users:x}=F(),f=n.exercises.find(l=>l.exerciseNumber===Number(o.exerciseNumber)),r=o.type==="solution"?f?.solutions.find(l=>l.stepNumber===Number(o.stepNumber)):o.type==="problem"?f?.problems.find(l=>l.stepNumber===Number(o.stepNumber)):null,w=R(),N={close:{width:56},open:{width:Y}},p={visible:{opacity:1,transition:{duration:.05,when:"beforeChildren",staggerChildren:.03}},hidden:{opacity:0}};return e.jsx("nav",{className:"hidden border-r sm:flex",children:e.jsx(m.div,{initial:t?"open":"close",variants:N,animate:w,children:e.jsxs("div",{className:"flex h-full flex-col items-center justify-between",children:[e.jsx(ae,{title:n.workshopTitle,menuControls:w,isMenuOpened:t,setMenuOpened:s}),t&&e.jsxs(m.div,{style:{width:Y},className:"scrollbar-thin scrollbar-thumb-scrollbar flex grow flex-col justify-between overflow-y-auto p-6",initial:{opacity:0},animate:{opacity:1},children:[e.jsxs(m.ul,{variants:p,initial:"hidden",animate:"visible",className:"flex flex-col",children:[e.jsx("span",{children:e.jsx(v,{prefetch:"intent",to:"/",className:({isActive:l})=>h("relative px-2 py-0.5 pr-3 text-2xl font-bold whitespace-nowrap outline-none hover:underline focus:underline",'after:bg-background after:absolute after:-right-2.5 after:-bottom-2.5 after:h-5 after:w-5 after:scale-75 after:rotate-45 after:content-[""] hover:underline focus:underline',{"bg-foreground text-background":l}),children:"Home"})}),n.exercises.map(({exerciseNumber:l,title:b,steps:S})=>{const y=Number(o.exerciseNumber)===l,k=!y&&n.playground.exerciseNumber===l;return e.jsxs(re,{exerciseNumber:l,children:[e.jsxs("span",{className:"flex items-center gap-1 text-2xl font-bold",children:[e.jsx(c,{prefetch:"intent",to:L(l),className:h("relative px-2 py-0.5 pr-3 whitespace-nowrap outline-none hover:underline focus:underline",'after:bg-background after:absolute after:-right-2.5 after:-bottom-2.5 after:h-5 after:w-5 after:scale-75 after:rotate-45 after:content-[""] hover:underline focus:underline',{"bg-foreground text-background":y}),children:b}),k?e.jsx(c,{to:E(n.playground.exerciseNumber,n.playground.stepNumber,n.playground.type),prefetch:"intent",children:"🛝"}):null]}),y?e.jsxs(m.ul,{variants:p,initial:"hidden",animate:"visible",className:"mt-2 ml-4 flex flex-col",children:[e.jsx(D,{type:"instructions",exerciseNumber:l,children:e.jsx(c,{to:L(l),prefetch:"intent",className:h('after:bg-background relative px-2 py-0.5 pr-3 text-xl font-medium whitespace-nowrap outline-none after:absolute after:-right-2.5 after:-bottom-2.5 after:h-5 after:w-5 after:scale-75 after:rotate-45 after:content-[""] hover:underline focus:underline',{"bg-foreground text-background":!o.stepNumber}),children:"Intro"})},l),S.filter(Boolean).map(({stepNumber:u,title:P,problem:H,solution:C})=>e.jsx(D,{type:"step",stepNumber:u,exerciseNumber:l,children:e.jsxs("div",{className:"flex flex-col gap-0.5",children:[e.jsxs(c,{to:E(l,u),prefetch:"intent",className:"leading-tight font-semibold",children:[u.toString().padStart(2,"0"),"."," ",P]}),e.jsxs("div",{className:"mt-0.5 ml-3 flex gap-1",children:[H&&e.jsxs(v,{to:E(l,u,"problem"),prefetch:"intent",className:({isActive:U})=>h("relative px-2 py-0.5 pr-3 whitespace-nowrap outline-none hover:underline focus:underline",'after:bg-background after:absolute after:-right-2.5 after:-bottom-2.5 after:h-5 after:w-5 after:scale-75 after:rotate-45 after:content-[""] hover:underline focus:underline',{"bg-foreground text-background":U}),children:["Problem",H.name===n.playground.appName?" 🛝":""]}),C&&e.jsxs(v,{to:E(l,u,"solution"),prefetch:"intent",className:({isActive:U})=>h("relative px-2 py-0.5 pr-3 whitespace-nowrap outline-none hover:underline focus:underline",'after:bg-background after:absolute after:-right-2.5 after:-bottom-2.5 after:h-5 after:w-5 after:scale-75 after:rotate-45 after:content-[""] hover:underline focus:underline',{"bg-foreground text-background":U}),children:["Solution",C.name===n.playground.appName?" 🛝":""]})]})]})},u)),e.jsx(D,{type:"finished",exerciseNumber:l,children:e.jsx(v,{to:L(l,"finished"),prefetch:"intent",className:({isActive:u})=>h('after:bg-background relative px-2 py-0.5 pr-3 text-base font-medium whitespace-nowrap outline-none after:absolute after:-right-2.5 after:-bottom-2.5 after:h-5 after:w-5 after:scale-75 after:rotate-45 after:content-[""] hover:underline focus:underline',{"bg-foreground text-background":u}),children:"📝 Elaboration"})})]}):null]},l)})]}),e.jsx("div",{className:"mt-6",children:e.jsx(v,{to:"/finished",className:({isActive:l})=>h("relative text-lg font-bold whitespace-nowrap outline-none hover:underline focus:underline",{'after:bg-background bg-black text-white after:absolute after:-right-2.5 after:-bottom-2.5 after:h-5 after:w-5 after:scale-75 after:rotate-45 after:content-[""]':l}),children:"📝 Workshop Feedback"})})]}),!t&&e.jsx("div",{className:"flex grow flex-col justify-center",children:e.jsxs("div",{className:"orientation-sideways w-full font-mono text-sm leading-none font-medium uppercase",children:[f?.title?e.jsx(c,{to:L(Number(o.exerciseNumber)),children:f.title}):null,f?.title&&r?.title?" — ":null,r?.title?e.jsx(c,{to:E(Number(o.exerciseNumber),r.stepNumber),children:r.title}):null]})}),g?null:e.jsx(_,{content:t?null:"You are offline",children:e.jsx("div",{className:d("flex w-full animate-pulse items-center border-t p-4",t?"justify-start":"justify-center"),children:e.jsx(j,{name:"WifiNoConnection",className:"text-foreground-destructive",children:t?e.jsx("span",{className:"whitespace-nowrap",children:"You are offline"}):null})})}),e.jsx("div",{className:d("flex w-full items-center justify-start border-t p-4 transition-[height]",t&&x.length>4?"h-28":"h-14"),style:t?{width:Y}:{},children:e.jsx(te,{isMenuOpened:t})}),ENV.EPICSHOP_DEPLOYED?null:a?e.jsx(_,{content:t?null:"Your account",children:e.jsxs(c,{className:"flex h-14 w-full shrink-0 items-center justify-start space-x-3 border-t px-4 py-4 text-center no-underline hover:underline",to:"/account",children:[a.imageUrlSmall?e.jsx("img",{alt:a.name??a.email,src:a.imageUrlSmall,className:"h-full rounded-full"}):e.jsx(j,{name:"User",className:"shrink-0",size:"lg"}),t?e.jsx(m.div,{className:"flex items-center whitespace-nowrap",initial:{opacity:0},animate:{opacity:1},children:"Your Account"}):e.jsx("span",{className:"sr-only",children:"Your account"})]})}):null,ENV.EPICSHOP_DEPLOYED?null:a&&i?e.jsx(_,{content:t?null:"Continue to next lesson",children:e.jsxs(c,{to:i,prefetch:"intent",className:h("flex h-14 w-full items-center space-x-3 border-t px-4 py-4 pl-[18px] no-underline hover:underline"),state:{from:"continue next lesson button"},children:[e.jsx(j,{name:"FastForward",className:"shrink-0",size:"md"}),t?e.jsx(m.div,{className:"flex items-center whitespace-nowrap",initial:{opacity:0},animate:{opacity:1},children:"Continue to next lesson"}):e.jsx("span",{className:"sr-only",children:"Continue to next lesson"})]})}):null,e.jsx("div",{className:"mb-4 w-full self-start border-t pt-[15px] pl-3",children:e.jsx(ee,{})})]})})})}function ae({title:t,isMenuOpened:s,setMenuOpened:n,menuControls:a}){const i=I.useRef(s),o=I.useRef(null),g={open:{d:"M3.06061 2.99999L21.0606 21"},closed:{d:"M0 9.5L24 9.5"}},x={open:{d:"M3.00006 21.0607L21 3.06064"},moving:{d:"M0 14.5L24 14.5"},closed:{d:"M0 14.5L15 14.5"}},f=R(),r=R();async function w(){a?.start(s?"close":"open"),n(!s),s?(f.start(g.closed),await r.start(x.moving),r.start(x.closed)):(await r.start(x.moving),f.start(g.open),r.start(x.open))}return I.useEffect(()=>{if(!s)return;function N(p){p.key==="Escape"&&o.current?.click()}return document.addEventListener("keyup",N),()=>document.removeEventListener("keyup",N)},[s]),e.jsxs("div",{className:d("relative inline-flex h-14 shrink-0 items-center justify-between overflow-hidden border-r sm:w-full sm:border-r-0 sm:border-b",{"w-full":s}),children:[e.jsx("button",{ref:o,className:"flex h-14 w-14 items-center justify-center","aria-label":"Open Navigation menu",onClick:w,children:e.jsxs("svg",{width:"24",height:"24",viewBox:"0 0 24 24",children:[e.jsx(m.path,{...g[i.current?"open":"closed"],animate:f,transition:{duration:.2},stroke:"currentColor",strokeWidth:1.5}),e.jsx(m.path,{...x[i.current?"open":"closed"],animate:r,transition:{duration:.2},stroke:"currentColor",strokeWidth:1.5})]})}),s&&e.jsx(m.p,{transition:{delay:.2},initial:{opacity:0,y:5},animate:{opacity:1,y:0},className:"absolute right-5 font-mono text-sm whitespace-nowrap uppercase",children:e.jsx(c,{to:"/",children:t})})]})}export{Oe as default};
2
+ //# sourceMappingURL=_layout-DBBP4DOc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_layout-DBBP4DOc.js","sources":["../../../../../node_modules/framer-motion/dist/es/animation/hooks/animation-controls.mjs","../../../../../node_modules/framer-motion/dist/es/animation/hooks/use-animation.mjs","../../../app/components/media-query.ts","../../../app/routes/_app+/_layout.tsx"],"sourcesContent":["import { invariant } from 'motion-utils';\nimport { setTarget } from '../../render/utils/setters.mjs';\nimport { animateVisualElement } from '../interfaces/visual-element.mjs';\n\nfunction stopAnimation(visualElement) {\n visualElement.values.forEach((value) => value.stop());\n}\nfunction setVariants(visualElement, variantLabels) {\n const reversedLabels = [...variantLabels].reverse();\n reversedLabels.forEach((key) => {\n const variant = visualElement.getVariant(key);\n variant && setTarget(visualElement, variant);\n if (visualElement.variantChildren) {\n visualElement.variantChildren.forEach((child) => {\n setVariants(child, variantLabels);\n });\n }\n });\n}\nfunction setValues(visualElement, definition) {\n if (Array.isArray(definition)) {\n return setVariants(visualElement, definition);\n }\n else if (typeof definition === \"string\") {\n return setVariants(visualElement, [definition]);\n }\n else {\n setTarget(visualElement, definition);\n }\n}\n/**\n * @public\n */\nfunction animationControls() {\n /**\n * Track whether the host component has mounted.\n */\n let hasMounted = false;\n /**\n * A collection of linked component animation controls.\n */\n const subscribers = new Set();\n const controls = {\n subscribe(visualElement) {\n subscribers.add(visualElement);\n return () => void subscribers.delete(visualElement);\n },\n start(definition, transitionOverride) {\n invariant(hasMounted, \"controls.start() should only be called after a component has mounted. Consider calling within a useEffect hook.\");\n const animations = [];\n subscribers.forEach((visualElement) => {\n animations.push(animateVisualElement(visualElement, definition, {\n transitionOverride,\n }));\n });\n return Promise.all(animations);\n },\n set(definition) {\n invariant(hasMounted, \"controls.set() should only be called after a component has mounted. Consider calling within a useEffect hook.\");\n return subscribers.forEach((visualElement) => {\n setValues(visualElement, definition);\n });\n },\n stop() {\n subscribers.forEach((visualElement) => {\n stopAnimation(visualElement);\n });\n },\n mount() {\n hasMounted = true;\n return () => {\n hasMounted = false;\n controls.stop();\n };\n },\n };\n return controls;\n}\n\nexport { animationControls, setValues };\n","\"use client\";\nimport { useConstant } from '../../utils/use-constant.mjs';\nimport { useIsomorphicLayoutEffect } from '../../utils/use-isomorphic-effect.mjs';\nimport { animationControls } from './animation-controls.mjs';\n\n/**\n * Creates `LegacyAnimationControls`, which can be used to manually start, stop\n * and sequence animations on one or more components.\n *\n * The returned `LegacyAnimationControls` should be passed to the `animate` property\n * of the components you want to animate.\n *\n * These components can then be animated with the `start` method.\n *\n * ```jsx\n * import * as React from 'react'\n * import { motion, useAnimation } from 'framer-motion'\n *\n * export function MyComponent(props) {\n * const controls = useAnimation()\n *\n * controls.start({\n * x: 100,\n * transition: { duration: 0.5 },\n * })\n *\n * return <motion.div animate={controls} />\n * }\n * ```\n *\n * @returns Animation controller with `start` and `stop` methods\n *\n * @public\n */\nfunction useAnimationControls() {\n const controls = useConstant(animationControls);\n useIsomorphicLayoutEffect(controls.mount, []);\n return controls;\n}\nconst useAnimation = useAnimationControls;\n\nexport { useAnimation, useAnimationControls };\n","import { useSyncExternalStore } from 'react'\n\nexport function makeMediaQueryStore(\n\tmediaQuery: string,\n\tserverSnapshot: boolean,\n) {\n\tfunction getSnapshot() {\n\t\treturn window.matchMedia(mediaQuery).matches\n\t}\n\n\tfunction subscribe(callback: () => void) {\n\t\tconst mediaQueryList = window.matchMedia(mediaQuery)\n\t\tmediaQueryList.addEventListener('change', callback)\n\t\treturn () => {\n\t\t\tmediaQueryList.removeEventListener('change', callback)\n\t\t}\n\t}\n\n\treturn function useMediaQuery() {\n\t\treturn useSyncExternalStore(subscribe, getSnapshot, () => serverSnapshot)\n\t}\n}\n","import {\n\textractNumbersAndTypeFromAppNameOrPath,\n\tgetExercises,\n\tgetPlaygroundAppName,\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 { clsx } from 'clsx'\nimport { motion, useAnimationControls } from 'framer-motion'\nimport * as React from 'react'\nimport {\n\tLink,\n\tNavLink,\n\tOutlet,\n\tuseLoaderData,\n\tuseParams,\n\tdata,\n\ttype HeadersFunction,\n\ttype LoaderFunctionArgs,\n} from 'react-router'\nimport { useHydrated } from 'remix-utils/use-hydrated'\nimport { Icon } from '#app/components/icons.tsx'\nimport { makeMediaQueryStore } from '#app/components/media-query.ts'\nimport { Logo } from '#app/components/product.tsx'\nimport { useRevalidationWS } from '#app/components/revalidation-ws.tsx'\nimport {\n\tDialog,\n\tDialogContent,\n\tDialogDescription,\n\tDialogHeader,\n\tDialogTrigger,\n} from '#app/components/ui/dialog.tsx'\nimport {\n\tSimpleTooltip,\n\tTooltip,\n\tTooltipContent,\n\tTooltipProvider,\n\tTooltipTrigger,\n} from '#app/components/ui/tooltip.tsx'\nimport { useOptionalUser, useUserHasAccess } from '#app/components/user.tsx'\nimport { useWorkshopConfig } from '#app/components/workshop-config.tsx'\nimport { cn, getExercisePath, getExerciseStepPath } from '#app/utils/misc.tsx'\nimport { useIsOnline } from '#app/utils/online.ts'\nimport {\n\tgetProductHostEmoji,\n\tproductHostEmojis,\n\tusePresence,\n\ttype Location,\n\ttype User,\n} from '#app/utils/presence.tsx'\nimport {\n\tuseExerciseProgressClassName,\n\tuseNextExerciseRoute,\n\tuseProgressItemClassName,\n\ttype ProgressItemSearch,\n} from '../progress.tsx'\nimport { ThemeSwitch } from '../theme/index.tsx'\n\nexport async function loader({ request }: LoaderFunctionArgs) {\n\tconst timings = makeTimings('appLayoutLoader')\n\tconst { title: workshopTitle } = getWorkshopConfig()\n\tconst [exercises, playgroundAppName] = await Promise.all([\n\t\tgetExercises({ request, timings }),\n\t\tgetPlaygroundAppName(),\n\t])\n\n\tconst playgroundNumbersAndType = extractNumbersAndTypeFromAppNameOrPath(\n\t\tplaygroundAppName ?? '',\n\t)\n\tconst playground = {\n\t\tappName: playgroundAppName,\n\t\texerciseNumber: Number(playgroundNumbersAndType?.exerciseNumber),\n\t\tstepNumber: Number(playgroundNumbersAndType?.stepNumber),\n\t\ttype: playgroundNumbersAndType?.type,\n\t}\n\n\tconst result = data(\n\t\t{\n\t\t\tworkshopTitle,\n\t\t\texercises: exercises.map((e) => ({\n\t\t\t\texerciseNumber: e.exerciseNumber,\n\t\t\t\ttitle: e.title,\n\t\t\t\tsolutions: e.solutions.map(({ stepNumber, title, name }) => ({\n\t\t\t\t\tstepNumber,\n\t\t\t\t\ttitle,\n\t\t\t\t\tname,\n\t\t\t\t})),\n\t\t\t\tproblems: e.problems.map(({ stepNumber, title, name }) => ({\n\t\t\t\t\tstepNumber,\n\t\t\t\t\ttitle,\n\t\t\t\t\tname,\n\t\t\t\t})),\n\t\t\t\tsteps: e.steps.map(({ stepNumber, problem, solution }) => ({\n\t\t\t\t\tstepNumber,\n\t\t\t\t\ttitle: problem?.title ?? solution?.title ?? 'Unknown',\n\t\t\t\t\tname: problem?.name ?? solution?.name ?? 'Unknown',\n\t\t\t\t\tproblem: problem\n\t\t\t\t\t\t? { name: problem.name, title: problem.title }\n\t\t\t\t\t\t: null,\n\t\t\t\t\tsolution: solution\n\t\t\t\t\t\t? { name: solution.name, title: solution.title }\n\t\t\t\t\t\t: null,\n\t\t\t\t})),\n\t\t\t})),\n\t\t\tplayground,\n\t\t\tisMenuOpened:\n\t\t\t\trequest.headers.get('cookie')?.includes('es_menu_open=true') ?? false,\n\t\t},\n\t\t{\n\t\t\theaders: {\n\t\t\t\tVary: 'Cookie',\n\t\t\t\t'Server-Timing': getServerTimeHeader(timings),\n\t\t\t},\n\t\t},\n\t)\n\treturn result\n}\n\nexport const headers: HeadersFunction = ({ loaderHeaders, parentHeaders }) => {\n\tconst headers = {\n\t\t'Cache-Control': loaderHeaders.get('Cache-Control') ?? '',\n\t\tVary: 'Cookie',\n\t\t'Server-Timing': combineServerTimings(loaderHeaders, parentHeaders),\n\t}\n\treturn headers\n}\n\nconst opacities = ['opacity-70', 'opacity-80', 'opacity-90', 'opacity-100']\nconst shadows = [\n\t'shadow-[0_0_2px_0_rgba(0,0,0,0.3)]',\n\t'shadow-[0_0_4px_0_rgba(0,0,0,0.3)]',\n\t'shadow-[0_0_7px_0_rgba(0,0,0,0.3)]',\n\t'shadow-[0_0_10px_0_rgba(0,0,0,0.3)]',\n]\nfunction getScoreClassNames(score: number) {\n\tconst opacityNumber = Math.round(score * opacities.length - 1)\n\tconst shadowNumber = Math.round(score * shadows.length - 1)\n\treturn cn(\n\t\t'shadow-purple-700 hover:opacity-100 focus:opacity-100 dark:shadow-purple-200',\n\t\topacities[opacityNumber] ?? 'opacity-60',\n\t\tshadows[shadowNumber] ?? 'shadow-none',\n\t\tscore === 1 ? 'animate-pulse hover:animate-none focus:animate-none' : null,\n\t)\n}\n\nfunction FacePile({ isMenuOpened }: { isMenuOpened: boolean }) {\n\tconst loggedInUser = useOptionalUser()\n\tconst { users } = usePresence()\n\tconst {\n\t\tproduct: { displayNameShort },\n\t} = useWorkshopConfig()\n\tconst limit = isMenuOpened ? 17 : 0\n\tconst numberOverLimit = users.length - limit\n\tconst shouldShowNumberOverLimit = numberOverLimit > (isMenuOpened ? 1 : 0)\n\n\tif (!users.length) return null\n\n\tconst tiffany =\n\t\tisMenuOpened && users.length === 1 ? (\n\t\t\t<Link\n\t\t\t\ttarget=\"_blank\"\n\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\tto=\"https://www.youtube.com/watch?v=w6Q3mHyzn78\"\n\t\t\t>\n\t\t\t\t<img\n\t\t\t\t\talt=\"Tiffany Tunes\"\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'h-8 w-8 rounded-full border object-cover',\n\t\t\t\t\t\tgetScoreClassNames(1),\n\t\t\t\t\t)}\n\t\t\t\t\tsrc=\"/img/tiffany.png\"\n\t\t\t\t/>\n\t\t\t</Link>\n\t\t) : null\n\tconst overLimitLabel = `${numberOverLimit}${\n\t\tisMenuOpened ? ' more ' : ' '\n\t}${displayNameShort} Dev${numberOverLimit === 1 ? '' : 's'} working now`\n\treturn (\n\t\t<div className=\"flex flex-wrap items-center gap-2\">\n\t\t\t<TooltipProvider>\n\t\t\t\t{(shouldShowNumberOverLimit ? users.slice(0, limit) : users).map(\n\t\t\t\t\t({ user, score }) => {\n\t\t\t\t\t\tconst scoreClassNames = getScoreClassNames(score)\n\t\t\t\t\t\tconst locations = getUserLocations(user)\n\t\t\t\t\t\tconst imageUrl = user.imageUrlSmall || user.avatarUrl\n\t\t\t\t\t\tconst hasAccess = user.hasAccess\n\t\t\t\t\t\tconst local = locations.some((loc) =>\n\t\t\t\t\t\t\tloc.origin?.includes('localhost'),\n\t\t\t\t\t\t)\n\t\t\t\t\t\tconst productHostEmojis = getUniqueProductHostEmojis(locations)\n\t\t\t\t\t\tconst loggedInEmojis = getLoggedInProductEmojis(\n\t\t\t\t\t\t\tuser.loggedInProductHosts,\n\t\t\t\t\t\t)\n\n\t\t\t\t\t\t// Handle opted-out users\n\t\t\t\t\t\tif (user.optOut) {\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<Tooltip key={user.id}>\n\t\t\t\t\t\t\t\t\t<TooltipTrigger asChild>\n\t\t\t\t\t\t\t\t\t\t<div className=\"relative\">\n\t\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\t\ttabIndex={0}\n\t\t\t\t\t\t\t\t\t\t\t\taria-label=\"Anonymous user (opted out)\"\n\t\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t\t'bg-muted flex h-8 w-8 items-center justify-center rounded-full border opacity-50',\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\t\t<Icon name=\"User\" />\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</TooltipTrigger>\n\t\t\t\t\t\t\t\t\t<TooltipContent>\n\t\t\t\t\t\t\t\t\t\t<span className=\"flex flex-col items-center justify-center gap-1\">\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"flex items-center gap-1.5\">\n\t\t\t\t\t\t\t\t\t\t\t\t{loggedInEmojis ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-xs\">{loggedInEmojis}</span>\n\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\tAnonymous (opted out of sharing)\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t</TooltipContent>\n\t\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet doingLabel: string\n\t\t\t\t\t\tif (hasAccess) {\n\t\t\t\t\t\t\tdoingLabel = local ? 'working' : 'referencing'\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdoingLabel = local ? 'previewing' : 'reviewing'\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<Tooltip key={user.id}>\n\t\t\t\t\t\t\t\t<TooltipTrigger asChild>\n\t\t\t\t\t\t\t\t\t<div className=\"relative\">\n\t\t\t\t\t\t\t\t\t\t{imageUrl ? (\n\t\t\t\t\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t\t\t\t\t\ttabIndex={0}\n\t\t\t\t\t\t\t\t\t\t\t\talt={user.name || displayNameShort}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t\t'h-8 w-8 rounded-full border object-cover',\n\t\t\t\t\t\t\t\t\t\t\t\t\tscoreClassNames,\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\tsrc={imageUrl}\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\t\t<div\n\t\t\t\t\t\t\t\t\t\t\t\ttabIndex={0}\n\t\t\t\t\t\t\t\t\t\t\t\taria-label={user.name || `${displayNameShort} Dev`}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t\t'flex h-8 w-8 items-center justify-center rounded-full border',\n\t\t\t\t\t\t\t\t\t\t\t\t\tscoreClassNames,\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\t\t<Icon name=\"User\" />\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\t{productHostEmojis ? (\n\t\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"absolute -top-1 -left-1 text-xs leading-none\"\n\t\t\t\t\t\t\t\t\t\t\t\taria-label=\"Workshop products\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{productHostEmojis}\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</TooltipTrigger>\n\t\t\t\t\t\t\t\t<TooltipContent>\n\t\t\t\t\t\t\t\t\t<span className=\"flex flex-col items-center justify-center gap-1\">\n\t\t\t\t\t\t\t\t\t\t<span className=\"flex items-center gap-1.5\">\n\t\t\t\t\t\t\t\t\t\t\t{loggedInEmojis ? (\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-xs\">{loggedInEmojis}</span>\n\t\t\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t\t\t\t{user.name || `${displayNameShort} Dev`}\n\t\t\t\t\t\t\t\t\t\t\t{locations.length > 0\n\t\t\t\t\t\t\t\t\t\t\t\t? ` is ${doingLabel} ${\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tscore === 1 && loggedInUser?.id !== user.id\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'with you'\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} on`\n\t\t\t\t\t\t\t\t\t\t\t\t: null}\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t{locations.map((loc, index) => {\n\t\t\t\t\t\t\t\t\t\t\tconst locationLabel = getLocationLabel(loc)\n\t\t\t\t\t\t\t\t\t\t\tif (!locationLabel) return null\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<span\n\t\t\t\t\t\t\t\t\t\t\t\t\tkey={`${loc.workshopTitle}-${index}`}\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t'flex flex-col items-center',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tlocations.length > 1\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'border-border mt-1 border-t pt-1 first:mt-0 first:border-t-0 first:pt-0'\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)}\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\t\t{locationLabel.line1 ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{getProductHostEmoji(loc.productHost)}{' '}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{locationLabel.line1}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\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{locationLabel.line2 ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-muted-foreground text-xs\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{locationLabel.line2}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\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</span>\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</span>\n\t\t\t\t\t\t\t\t</TooltipContent>\n\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t)\n\t\t\t\t\t},\n\t\t\t\t)}\n\t\t\t\t{tiffany}\n\t\t\t\t{shouldShowNumberOverLimit ? (\n\t\t\t\t\t<Tooltip>\n\t\t\t\t\t\t<TooltipTrigger asChild>\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\ttabIndex={0}\n\t\t\t\t\t\t\t\taria-label={overLimitLabel}\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t'bg-accent text-accent-foreground flex items-center justify-center rounded-full border text-xs',\n\t\t\t\t\t\t\t\t\tisMenuOpened ? 'h-8 w-8' : 'h-6 w-6',\n\t\t\t\t\t\t\t\t)}\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\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t'pointer-events-none overflow-hidden text-center text-ellipsis whitespace-nowrap',\n\t\t\t\t\t\t\t\t\t\tisMenuOpened ? 'w-8' : 'w-6',\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{isMenuOpened ? `+${numberOverLimit}` : numberOverLimit}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</TooltipTrigger>\n\t\t\t\t\t\t<TooltipContent>{overLimitLabel}</TooltipContent>\n\t\t\t\t\t</Tooltip>\n\t\t\t\t) : null}\n\t\t\t</TooltipProvider>\n\t\t</div>\n\t)\n}\n\nfunction getLoggedInProductEmojis(\n\thosts: string[] | null | undefined,\n): string | null {\n\tif (!hosts || hosts.length === 0) return null\n\treturn hosts\n\t\t.map((host) => productHostEmojis[host])\n\t\t.filter(Boolean)\n\t\t.join(' ')\n}\n\nfunction getUserLocations(user: User): Location[] {\n\tif (user.locations && user.locations.length > 0) {\n\t\treturn user.locations.filter(Boolean) as Location[]\n\t}\n\tif (user.location) {\n\t\treturn [user.location]\n\t}\n\treturn []\n}\n\nfunction getUniqueProductHostEmojis(locations: Location[]): string | null {\n\tconst uniqueHosts = new Set<string>()\n\tfor (const loc of locations) {\n\t\tif (loc.productHost) {\n\t\t\tuniqueHosts.add(loc.productHost)\n\t\t}\n\t}\n\tif (uniqueHosts.size === 0) return null\n\treturn Array.from(uniqueHosts)\n\t\t.map((host) => getProductHostEmoji(host))\n\t\t.filter(Boolean)\n\t\t.join('')\n}\n\nconst useIsWide = makeMediaQueryStore('(min-width: 640px)', true)\n\nexport default function App() {\n\tconst data = useLoaderData<typeof loader>()\n\tconst user = useOptionalUser()\n\tconst isWide = useIsWide()\n\tconst isHydrated = useHydrated()\n\n\tconst [isMenuOpened, setMenuOpenedState] = React.useState(data.isMenuOpened)\n\tuseRevalidationWS({ watchPaths: ['./exercises/README.mdx'] })\n\n\tfunction setMenuOpened(value: boolean) {\n\t\tsetMenuOpenedState(value)\n\t\tdocument.cookie = `es_menu_open=${value.toString()}; path=/; SameSite=Lax;`\n\t}\n\n\treturn (\n\t\t<div className=\"flex flex-col\">\n\t\t\t{user ? null : <NoUserBanner />}\n\t\t\t{/*\n\t\t\t\tthis isn't placed in a conditional with isWide because the server render\n\t\t\t\tdoesn't know whether it should be around or not so we just use CSS to hide it\n\t\t\t\tif it's not supposed to show up.\n\n\t\t\t\tWe don't just use media queries for the wider screen nav because we want\n\t\t\t\tto avoid running all the logic in there unnecessarily.\n\t\t\t*/}\n\t\t\t{isHydrated && isWide ? null : (\n\t\t\t\t<MobileNavigation\n\t\t\t\t\tisMenuOpened={isMenuOpened}\n\t\t\t\t\tonMenuOpenChange={setMenuOpened}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t<div\n\t\t\t\t// this nonsense is here because we want the panels to be scrollable rather\n\t\t\t\t// than having the entire page be scrollable (at least on wider screens)\n\t\t\t\tclassName={cn('flex grow flex-col sm:flex-row', {\n\t\t\t\t\t'h-[calc(100vh-128px-env(safe-area-inset-top)-env(safe-area-inset-bottom))] sm:h-[calc(100vh-64px-env(safe-area-inset-top)-env(safe-area-inset-bottom))]':\n\t\t\t\t\t\t!user,\n\t\t\t\t\t'h-[calc(100vh-64px-env(safe-area-inset-top)-env(safe-area-inset-bottom))] sm:h-[calc(100vh-env(safe-area-inset-top)-env(safe-area-inset-bottom))]':\n\t\t\t\t\t\tuser,\n\t\t\t\t\t'h-[unset]': !isWide && isMenuOpened,\n\t\t\t\t})}\n\t\t\t>\n\t\t\t\t{isWide ? (\n\t\t\t\t\t<Navigation\n\t\t\t\t\t\tisMenuOpened={isMenuOpened}\n\t\t\t\t\t\tonMenuOpenChange={setMenuOpened}\n\t\t\t\t\t/>\n\t\t\t\t) : null}\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'h-full w-full max-w-full sm:max-w-[calc(100%-56px)]',\n\t\t\t\t\t\tisMenuOpened ? 'hidden md:block' : '',\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t<Outlet />\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n\nfunction getLocationLabel(location: User['location']) {\n\tif (!location) return null\n\n\tconst { exercise } = location\n\n\tconst exercisePortion = [\n\t\texercise\n\t\t\t? [exercise.exerciseNumber, exercise.stepNumber]\n\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t.map((s) => s.toString().padStart(2, '0'))\n\t\t\t\t\t.join('/')\n\t\t\t: null,\n\t\texercise?.type,\n\t]\n\t\t.filter(Boolean)\n\t\t.join(' - ')\n\treturn { line1: location.workshopTitle, line2: exercisePortion }\n}\n\nfunction NoUserBanner() {\n\tconst isWide = useIsWide()\n\tconst {\n\t\tproduct: { host, displayName },\n\t} = useWorkshopConfig()\n\tconst userHasAccess = useUserHasAccess()\n\tconst details = (\n\t\t<div>\n\t\t\t{ENV.EPICSHOP_DEPLOYED ? (\n\t\t\t\t<div>\n\t\t\t\t\t{`This is the deployed version. `}\n\t\t\t\t\t<>\n\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\tclassName=\"underline\"\n\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\t\t\t\tto={ENV.EPICSHOP_GITHUB_REPO}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tRun locally\n\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t{` for full experience.`}\n\t\t\t\t\t</>{' '}\n\t\t\t\t</div>\n\t\t\t) : userHasAccess ? (\n\t\t\t\t<div>\n\t\t\t\t\t<Link to=\"/login\" className=\"underline\">\n\t\t\t\t\t\tLogin\n\t\t\t\t\t</Link>{' '}\n\t\t\t\t\tor{' '}\n\t\t\t\t\t<a href={`https://${host}/login`} className=\"underline\">\n\t\t\t\t\t\tjoin for free\n\t\t\t\t\t</a>{' '}\n\t\t\t\t\tfor the full experience.\n\t\t\t\t</div>\n\t\t\t) : null}\n\t\t</div>\n\t)\n\treturn (\n\t\t<div className=\"z-10 flex h-16 items-center justify-between border-b bg-linear-to-tr from-blue-500 to-indigo-500 pl-4 text-white\">\n\t\t\t{isWide ? (\n\t\t\t\t<>\n\t\t\t\t\t<div className=\"hidden flex-1 flex-wrap items-center gap-4 sm:flex\">\n\t\t\t\t\t\t<Logo size=\"lg\" style=\"monochrome\" />\n\t\t\t\t\t\t<div className=\"flex flex-1 flex-wrap items-center\">\n\t\t\t\t\t\t\t<p className=\"mr-2\">\n\t\t\t\t\t\t\t\tWelcome to the{' '}\n\t\t\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\t\t\tto={`https://${host}`}\n\t\t\t\t\t\t\t\t\tclassName=\"underline\"\n\t\t\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{displayName}\n\t\t\t\t\t\t\t\t</Link>{' '}\n\t\t\t\t\t\t\t\tWorkshop app!\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t{details}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t{userHasAccess ? null : (\n\t\t\t\t\t\t<div className=\"hidden h-full flex-col items-center sm:flex md:flex-row\">\n\t\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\t\tto={`https://${host}`}\n\t\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\t\tclassName=\"flex h-full items-center justify-center space-x-1.5 px-5 text-sm font-semibold\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<span className=\"drop-shadow-sm\">Join {displayName}</span>\n\t\t\t\t\t\t\t\t<span>↗︎</span>\n\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\t\tto={ENV.EPICSHOP_DEPLOYED ? `https://${host}/login` : '/login'}\n\t\t\t\t\t\t\t\tclassName=\"flex h-full items-center justify-center space-x-1.5 bg-white/20 px-5 text-sm font-semibold shadow-md transition hover:bg-white/30\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Icon name=\"User\" size=\"lg\" />\n\t\t\t\t\t\t\t\t<span className=\"drop-shadow-sm\">Login</span>\n\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t</>\n\t\t\t) : (\n\t\t\t\t<>\n\t\t\t\t\t<div className=\"flex flex-1 flex-wrap items-center gap-4 sm:hidden\">\n\t\t\t\t\t\t<a href={`https://${host}`}>\n\t\t\t\t\t\t\t<Logo size=\"lg\" style=\"monochrome\" />\n\t\t\t\t\t\t</a>\n\t\t\t\t\t\t<Dialog>\n\t\t\t\t\t\t\t<DialogTrigger>\n\t\t\t\t\t\t\t\t<Icon name=\"Question\" size=\"lg\" className=\"animate-pulse\" />\n\t\t\t\t\t\t\t</DialogTrigger>\n\t\t\t\t\t\t\t<DialogContent>\n\t\t\t\t\t\t\t\t<DialogHeader>\n\t\t\t\t\t\t\t\t\t<Logo size=\"lg\" style=\"monochrome\" />\n\t\t\t\t\t\t\t\t\t<span className=\"text-lg font-semibold\">{displayName}</span>\n\t\t\t\t\t\t\t\t</DialogHeader>\n\t\t\t\t\t\t\t\t<DialogDescription>\n\t\t\t\t\t\t\t\t\tWelcome to the{' '}\n\t\t\t\t\t\t\t\t\t<Link to={`https://${host}`} className=\"underline\">\n\t\t\t\t\t\t\t\t\t\t{displayName}\n\t\t\t\t\t\t\t\t\t</Link>{' '}\n\t\t\t\t\t\t\t\t\tWorkshop app!\n\t\t\t\t\t\t\t\t</DialogDescription>\n\t\t\t\t\t\t\t\t{details}\n\t\t\t\t\t\t\t</DialogContent>\n\t\t\t\t\t\t</Dialog>\n\t\t\t\t\t</div>\n\t\t\t\t\t{userHasAccess ? null : (\n\t\t\t\t\t\t<div className=\"flex h-full items-center\">\n\t\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\t\tto={`https://${host}`}\n\t\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\t\tclassName=\"flex h-full items-center justify-center space-x-1.5 px-5 text-sm font-semibold\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<span className=\"drop-shadow-sm\">Join</span>\n\t\t\t\t\t\t\t\t<span>↗︎</span>\n\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\t\tto={ENV.EPICSHOP_DEPLOYED ? `https://${host}/login` : '/login'}\n\t\t\t\t\t\t\t\tclassName=\"flex h-full items-center justify-center space-x-1.5 bg-white/20 px-5 text-sm font-semibold shadow-md transition hover:bg-white/30\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Icon name=\"User\" size=\"lg\" />\n\t\t\t\t\t\t\t\t<span className=\"drop-shadow-sm\">Login</span>\n\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t</>\n\t\t\t)}\n\t\t</div>\n\t)\n}\n\nconst itemVariants = {\n\thidden: { opacity: 0, x: -20 },\n\tvisible: { opacity: 1, x: 0 },\n}\nfunction NavigationExerciseListItem({\n\texerciseNumber,\n\tchildren,\n}: {\n\texerciseNumber: number\n\tchildren: React.ReactNode\n}) {\n\tconst progressClassName = useExerciseProgressClassName(exerciseNumber)\n\treturn (\n\t\t<motion.li\n\t\t\tvariants={itemVariants}\n\t\t\tclassName={cn(\n\t\t\t\t// add gap of 3 to children, but using padding so the progress extends through the whole height\n\t\t\t\t'py-[6px] first:pt-3 last:pb-3',\n\t\t\t\tprogressClassName ? `${progressClassName} before:border-t` : null,\n\t\t\t)}\n\t\t>\n\t\t\t<span className=\"inline-block pl-2\">{children}</span>\n\t\t</motion.li>\n\t)\n}\n\nfunction NavigationExerciseStepListItem({\n\tchildren,\n\t...progressItemSearch\n}: {\n\tchildren: React.ReactNode\n} & ProgressItemSearch) {\n\tconst progressClassName = useProgressItemClassName(progressItemSearch)\n\treturn (\n\t\t<motion.li\n\t\t\tvariants={itemVariants}\n\t\t\tclassName={cn(\n\t\t\t\t// add gap of 3 to children, but using padding so the progress extends through the whole height\n\t\t\t\t'py-[6px] first:pt-3 last:pb-3',\n\t\t\t\tprogressClassName ? `${progressClassName} before:border-t` : null,\n\t\t\t)}\n\t\t>\n\t\t\t<span className=\"inline-block pl-2\">{children}</span>\n\t\t</motion.li>\n\t)\n}\n\nfunction MobileNavigation({\n\tisMenuOpened,\n\tonMenuOpenChange: setMenuOpened,\n}: {\n\tisMenuOpened: boolean\n\tonMenuOpenChange: (change: boolean) => void\n}) {\n\tconst data = useLoaderData<typeof loader>()\n\tconst user = useOptionalUser()\n\tconst nextExerciseRoute = useNextExerciseRoute()\n\tconst params = useParams()\n\tconst isOnline = useIsOnline()\n\tconst { users } = usePresence()\n\n\t// items\n\tconst listVariants = {\n\t\tvisible: {\n\t\t\topacity: 1,\n\t\t\ttransition: {\n\t\t\t\tduration: 0.05,\n\t\t\t\twhen: 'beforeChildren',\n\t\t\t\tstaggerChildren: 0.03,\n\t\t\t},\n\t\t},\n\t\thidden: {\n\t\t\topacity: 0,\n\t\t},\n\t}\n\n\treturn (\n\t\t<nav className=\"flex w-full border-b sm:hidden\">\n\t\t\t<div className=\"w-full\">\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn('flex items-center', {\n\t\t\t\t\t\t'flex-col': isMenuOpened,\n\t\t\t\t\t\t'h-14': !isMenuOpened,\n\t\t\t\t\t})}\n\t\t\t\t>\n\t\t\t\t\t<NavToggle\n\t\t\t\t\t\ttitle={data.workshopTitle}\n\t\t\t\t\t\tisMenuOpened={isMenuOpened}\n\t\t\t\t\t\tsetMenuOpened={setMenuOpened}\n\t\t\t\t\t/>\n\t\t\t\t\t{isMenuOpened && (\n\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\tclassName=\"scrollbar-thin scrollbar-thumb-scrollbar flex w-full grow flex-col justify-between overflow-x-auto p-6\"\n\t\t\t\t\t\t\tinitial={{ opacity: 0 }}\n\t\t\t\t\t\t\tanimate={{ opacity: 1 }}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<motion.ul\n\t\t\t\t\t\t\t\tvariants={listVariants}\n\t\t\t\t\t\t\t\tinitial=\"hidden\"\n\t\t\t\t\t\t\t\tanimate=\"visible\"\n\t\t\t\t\t\t\t\tclassName=\"flex flex-col\"\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\t\t<NavLink\n\t\t\t\t\t\t\t\t\t\tprefetch=\"intent\"\n\t\t\t\t\t\t\t\t\t\tto=\"/\"\n\t\t\t\t\t\t\t\t\t\tclassName={({ isActive }) =>\n\t\t\t\t\t\t\t\t\t\t\tclsx(\n\t\t\t\t\t\t\t\t\t\t\t\t'relative px-2 py-0.5 pr-3 text-2xl font-bold whitespace-nowrap outline-none hover:underline focus:underline',\n\t\t\t\t\t\t\t\t\t\t\t\t'after:bg-background after:absolute after:-right-2.5 after:-bottom-2.5 after:h-5 after:w-5 after:scale-75 after:rotate-45 after:content-[\"\"] hover:underline focus:underline',\n\t\t\t\t\t\t\t\t\t\t\t\t{ 'bg-foreground text-background': isActive },\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>\n\t\t\t\t\t\t\t\t\t\tHome\n\t\t\t\t\t\t\t\t\t</NavLink>\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t{data.exercises.map(({ exerciseNumber, title, steps }) => {\n\t\t\t\t\t\t\t\t\tconst isActive =\n\t\t\t\t\t\t\t\t\t\tNumber(params.exerciseNumber) === exerciseNumber\n\t\t\t\t\t\t\t\t\tconst showPlayground =\n\t\t\t\t\t\t\t\t\t\t!isActive &&\n\t\t\t\t\t\t\t\t\t\tdata.playground.exerciseNumber === exerciseNumber\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t<NavigationExerciseListItem\n\t\t\t\t\t\t\t\t\t\t\tkey={exerciseNumber}\n\t\t\t\t\t\t\t\t\t\t\texerciseNumber={exerciseNumber}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"flex items-center gap-1 text-2xl font-bold\">\n\t\t\t\t\t\t\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\t\t\t\t\t\t\tprefetch=\"intent\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tto={getExercisePath(exerciseNumber)}\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName={clsx(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t'relative px-2 py-0.5 pr-3 whitespace-nowrap outline-none hover:underline focus:underline',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t'after:bg-background after:absolute after:-right-2.5 after:-bottom-2.5 after:h-5 after:w-5 after:scale-75 after:rotate-45 after:content-[\"\"] hover:underline focus:underline',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{ 'bg-foreground text-background': isActive },\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>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{title}\n\t\t\t\t\t\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t\t\t\t\t\t\t{showPlayground ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tto={getExerciseStepPath(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata.playground.exerciseNumber,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata.playground.stepNumber,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata.playground.type,\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\t\t\t\tprefetch=\"intent\"\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🛝\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Link>\n\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</span>\n\t\t\t\t\t\t\t\t\t\t\t{isActive ? (\n\t\t\t\t\t\t\t\t\t\t\t\t<motion.ul\n\t\t\t\t\t\t\t\t\t\t\t\t\tvariants={listVariants}\n\t\t\t\t\t\t\t\t\t\t\t\t\tinitial=\"hidden\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tanimate=\"visible\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"mt-2 ml-4 flex flex-col\"\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\t\t<NavigationExerciseStepListItem\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tkey={exerciseNumber}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"instructions\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\texerciseNumber={exerciseNumber}\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<Link\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tto={getExercisePath(exerciseNumber)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tprefetch=\"intent\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName={clsx(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'after:bg-background relative px-2 py-0.5 pr-3 text-xl font-medium whitespace-nowrap outline-none after:absolute after:-right-2.5 after:-bottom-2.5 after:h-5 after:w-5 after:scale-75 after:rotate-45 after:content-[\"\"] hover:underline focus:underline',\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\t\t'bg-foreground text-background':\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t!params.stepNumber,\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)}\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\t\t\t\t\tIntro\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</NavigationExerciseStepListItem>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{steps\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t.map(({ stepNumber, title, problem, solution }) => {\n\t\t\t\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\t\t\t<NavigationExerciseStepListItem\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tkey={stepNumber}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"step\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstepNumber={stepNumber}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\texerciseNumber={exerciseNumber}\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\t\t<div className=\"flex flex-col gap-0.5\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tto={getExerciseStepPath(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\texerciseNumber,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstepNumber,\n\t\t\t\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\t\t\t\tprefetch=\"intent\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"leading-tight font-semibold\"\n\t\t\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\t\t\t\t{stepNumber.toString().padStart(2, '0')}.{' '}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{title}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"mt-0.5 ml-3 flex gap-1\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{problem && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<NavLink\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tto={getExerciseStepPath(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\texerciseNumber,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstepNumber,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'problem',\n\t\t\t\t\t\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\t\t\t\t\t\tprefetch=\"intent\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName={({ isActive }) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclsx(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'relative px-2 py-0.5 pr-3 whitespace-nowrap outline-none hover:underline focus:underline',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'after:bg-background after:absolute after:-right-2.5 after:-bottom-2.5 after:h-5 after:w-5 after:scale-75 after:rotate-45 after:content-[\"\"] hover:underline focus:underline',\n\t\t\t\t\t\t\t\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\t\t\t\t\t\t\t\t\t'bg-foreground text-background':\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tisActive,\n\t\t\t\t\t\t\t\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\t\t\t\t\t\t\t)\n\t\t\t\t\t\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\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tProblem\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{problem.name ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata.playground.appName\n\t\t\t\t\t\t\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\t\t\t\t\t\t\t: ''}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</NavLink>\n\t\t\t\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\t\t\t\t{solution && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<NavLink\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tto={getExerciseStepPath(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\texerciseNumber,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstepNumber,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'solution',\n\t\t\t\t\t\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\t\t\t\t\t\tprefetch=\"intent\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName={({ isActive }) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclsx(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'relative px-2 py-0.5 pr-3 whitespace-nowrap outline-none hover:underline focus:underline',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'after:bg-background after:absolute after:-right-2.5 after:-bottom-2.5 after:h-5 after:w-5 after:scale-75 after:rotate-45 after:content-[\"\"] hover:underline focus:underline',\n\t\t\t\t\t\t\t\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\t\t\t\t\t\t\t\t\t'bg-foreground text-background':\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tisActive,\n\t\t\t\t\t\t\t\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\t\t\t\t\t\t\t)\n\t\t\t\t\t\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\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tSolution\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{solution.name ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata.playground.appName\n\t\t\t\t\t\t\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\t\t\t\t\t\t\t: ''}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</NavLink>\n\t\t\t\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\t\t\t</div>\n\t\t\t\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\t\t\t</NavigationExerciseStepListItem>\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})}\n\t\t\t\t\t\t\t\t\t\t\t\t\t<NavigationExerciseStepListItem\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"finished\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\texerciseNumber={exerciseNumber}\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<NavLink\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tto={getExercisePath(exerciseNumber, 'finished')}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tprefetch=\"intent\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName={({ isActive }) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclsx(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'after:bg-background relative px-2 py-0.5 pr-3 text-base font-medium whitespace-nowrap outline-none after:absolute after:-right-2.5 after:-bottom-2.5 after:h-5 after:w-5 after:scale-75 after:rotate-45 after:content-[\"\"] hover:underline focus:underline',\n\t\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\t\t\t'bg-foreground text-background': isActive,\n\t\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\t)\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>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t📝 Elaboration\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</NavLink>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</NavigationExerciseStepListItem>\n\t\t\t\t\t\t\t\t\t\t\t\t</motion.ul>\n\t\t\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t\t\t</NavigationExerciseListItem>\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</motion.ul>\n\t\t\t\t\t\t\t<div className=\"mt-6\">\n\t\t\t\t\t\t\t\t<NavLink\n\t\t\t\t\t\t\t\t\tto=\"/finished\"\n\t\t\t\t\t\t\t\t\tclassName={({ isActive }) =>\n\t\t\t\t\t\t\t\t\t\tclsx(\n\t\t\t\t\t\t\t\t\t\t\t'relative text-lg font-bold whitespace-nowrap outline-none hover:underline focus:underline',\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t'after:bg-background bg-black text-white after:absolute after:-right-2.5 after:-bottom-2.5 after:h-5 after:w-5 after:scale-75 after:rotate-45 after:content-[\"\"]':\n\t\t\t\t\t\t\t\t\t\t\t\t\tisActive,\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}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t📝 Workshop Feedback\n\t\t\t\t\t\t\t\t</NavLink>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t)}\n\t\t\t\t\t<div className=\"grow\" />\n\t\t\t\t\t{isOnline ? null : (\n\t\t\t\t\t\t<SimpleTooltip content={isMenuOpened ? null : 'You are offline'}>\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t'flex h-14 animate-pulse items-center justify-start p-4',\n\t\t\t\t\t\t\t\t\tisMenuOpened ? 'w-full border-t' : 'border-l',\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\t\t\tname=\"WifiNoConnection\"\n\t\t\t\t\t\t\t\t\tclassName=\"text-foreground-destructive\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{isMenuOpened ? 'You are offline' : null}\n\t\t\t\t\t\t\t\t</Icon>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</SimpleTooltip>\n\t\t\t\t\t)}\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t'flex items-center justify-start p-4',\n\t\t\t\t\t\t\tisMenuOpened && users.length > 4 ? 'min-h-14' : 'h-14',\n\t\t\t\t\t\t\tisMenuOpened ? 'w-full border-t' : 'border-l',\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t<FacePile isMenuOpened={isMenuOpened} />\n\t\t\t\t\t</div>\n\t\t\t\t\t{ENV.EPICSHOP_DEPLOYED ? null : user ? (\n\t\t\t\t\t\t<SimpleTooltip content={isMenuOpened ? null : 'Your account'}>\n\t\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t'flex h-14 shrink-0 items-center justify-start space-x-3 px-4 py-4 text-center no-underline hover:underline',\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t'border-l': !isMenuOpened,\n\t\t\t\t\t\t\t\t\t\t'w-full border-t': isMenuOpened,\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\tto=\"/account\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{user.imageUrlSmall ? (\n\t\t\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t\t\t\talt={user.name ?? user.email}\n\t\t\t\t\t\t\t\t\t\tsrc={user.imageUrlSmall}\n\t\t\t\t\t\t\t\t\t\tclassName=\"h-full rounded-full\"\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<Icon name=\"User\" className=\"shrink-0\" size=\"lg\" />\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{isMenuOpened ? (\n\t\t\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\t\t\tclassName=\"flex items-center whitespace-nowrap\"\n\t\t\t\t\t\t\t\t\t\tinitial={{ opacity: 0 }}\n\t\t\t\t\t\t\t\t\t\tanimate={{ opacity: 1 }}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\tYour Account\n\t\t\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<span className=\"sr-only\">Your account</span>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t</SimpleTooltip>\n\t\t\t\t\t) : null}\n\t\t\t\t\t{ENV.EPICSHOP_DEPLOYED ? null : user && nextExerciseRoute ? (\n\t\t\t\t\t\t<SimpleTooltip\n\t\t\t\t\t\t\tcontent={isMenuOpened ? null : 'Continue to next lesson'}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\t\tto={nextExerciseRoute}\n\t\t\t\t\t\t\t\tprefetch=\"intent\"\n\t\t\t\t\t\t\t\tclassName={clsx(\n\t\t\t\t\t\t\t\t\t'flex h-14 w-full items-center space-x-3 border-l px-4 py-4 pl-[18px] no-underline hover:underline',\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\tstate={{ from: 'continue next lesson button' }}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Icon name=\"FastForward\" className=\"shrink-0\" size=\"md\" />\n\t\t\t\t\t\t\t\t{isMenuOpened ? (\n\t\t\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\t\t\tclassName=\"flex items-center whitespace-nowrap\"\n\t\t\t\t\t\t\t\t\t\tinitial={{ opacity: 0 }}\n\t\t\t\t\t\t\t\t\t\tanimate={{ opacity: 1 }}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\tContinue to next lesson\n\t\t\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<span className=\"sr-only\">Continue to next lesson</span>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t</SimpleTooltip>\n\t\t\t\t\t) : null}\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t'flex h-14 w-14 items-center justify-center self-start p-4 sm:mb-4 sm:w-full',\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t'w-full border-t': isMenuOpened,\n\t\t\t\t\t\t\t\t'border-l': !isMenuOpened,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t<ThemeSwitch />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</nav>\n\t)\n}\n\nconst OPENED_MENU_WIDTH = 400\n\nfunction Navigation({\n\tisMenuOpened,\n\tonMenuOpenChange: setMenuOpened,\n}: {\n\tisMenuOpened: boolean\n\tonMenuOpenChange: (change: boolean) => void\n}) {\n\tconst data = useLoaderData<typeof loader>()\n\tconst user = useOptionalUser()\n\tconst nextExerciseRoute = useNextExerciseRoute()\n\tconst params = useParams()\n\tconst isOnline = useIsOnline()\n\tconst { users } = usePresence()\n\n\tconst exercise = data.exercises.find(\n\t\t(e) => e.exerciseNumber === Number(params.exerciseNumber),\n\t)\n\tconst app =\n\t\tparams.type === 'solution'\n\t\t\t? exercise?.solutions.find(\n\t\t\t\t\t(s) => s.stepNumber === Number(params.stepNumber),\n\t\t\t\t)\n\t\t\t: params.type === 'problem'\n\t\t\t\t? exercise?.problems.find(\n\t\t\t\t\t\t(p) => p.stepNumber === Number(params.stepNumber),\n\t\t\t\t\t)\n\t\t\t\t: null\n\n\t// container\n\tconst menuControls = useAnimationControls()\n\tconst menuVariants = {\n\t\tclose: { width: 56 },\n\t\topen: { width: OPENED_MENU_WIDTH },\n\t}\n\n\t// items\n\tconst listVariants = {\n\t\tvisible: {\n\t\t\topacity: 1,\n\t\t\ttransition: {\n\t\t\t\tduration: 0.05,\n\t\t\t\twhen: 'beforeChildren',\n\t\t\t\tstaggerChildren: 0.03,\n\t\t\t},\n\t\t},\n\t\thidden: {\n\t\t\topacity: 0,\n\t\t},\n\t}\n\n\treturn (\n\t\t<nav className=\"hidden border-r sm:flex\">\n\t\t\t<motion.div\n\t\t\t\tinitial={isMenuOpened ? 'open' : 'close'}\n\t\t\t\tvariants={menuVariants}\n\t\t\t\tanimate={menuControls}\n\t\t\t>\n\t\t\t\t<div className=\"flex h-full flex-col items-center justify-between\">\n\t\t\t\t\t<NavToggle\n\t\t\t\t\t\ttitle={data.workshopTitle}\n\t\t\t\t\t\tmenuControls={menuControls}\n\t\t\t\t\t\tisMenuOpened={isMenuOpened}\n\t\t\t\t\t\tsetMenuOpened={setMenuOpened}\n\t\t\t\t\t/>\n\t\t\t\t\t{isMenuOpened && (\n\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\tstyle={{ width: OPENED_MENU_WIDTH }}\n\t\t\t\t\t\t\tclassName=\"scrollbar-thin scrollbar-thumb-scrollbar flex grow flex-col justify-between overflow-y-auto p-6\"\n\t\t\t\t\t\t\tinitial={{ opacity: 0 }}\n\t\t\t\t\t\t\tanimate={{ opacity: 1 }}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<motion.ul\n\t\t\t\t\t\t\t\tvariants={listVariants}\n\t\t\t\t\t\t\t\tinitial=\"hidden\"\n\t\t\t\t\t\t\t\tanimate=\"visible\"\n\t\t\t\t\t\t\t\tclassName=\"flex flex-col\"\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\t\t<NavLink\n\t\t\t\t\t\t\t\t\t\tprefetch=\"intent\"\n\t\t\t\t\t\t\t\t\t\tto=\"/\"\n\t\t\t\t\t\t\t\t\t\tclassName={({ isActive }) =>\n\t\t\t\t\t\t\t\t\t\t\tclsx(\n\t\t\t\t\t\t\t\t\t\t\t\t'relative px-2 py-0.5 pr-3 text-2xl font-bold whitespace-nowrap outline-none hover:underline focus:underline',\n\t\t\t\t\t\t\t\t\t\t\t\t'after:bg-background after:absolute after:-right-2.5 after:-bottom-2.5 after:h-5 after:w-5 after:scale-75 after:rotate-45 after:content-[\"\"] hover:underline focus:underline',\n\t\t\t\t\t\t\t\t\t\t\t\t{ 'bg-foreground text-background': isActive },\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>\n\t\t\t\t\t\t\t\t\t\tHome\n\t\t\t\t\t\t\t\t\t</NavLink>\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t{data.exercises.map(({ exerciseNumber, title, steps }) => {\n\t\t\t\t\t\t\t\t\tconst isActive =\n\t\t\t\t\t\t\t\t\t\tNumber(params.exerciseNumber) === exerciseNumber\n\t\t\t\t\t\t\t\t\tconst showPlayground =\n\t\t\t\t\t\t\t\t\t\t!isActive &&\n\t\t\t\t\t\t\t\t\t\tdata.playground.exerciseNumber === exerciseNumber\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t<NavigationExerciseListItem\n\t\t\t\t\t\t\t\t\t\t\tkey={exerciseNumber}\n\t\t\t\t\t\t\t\t\t\t\texerciseNumber={exerciseNumber}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"flex items-center gap-1 text-2xl font-bold\">\n\t\t\t\t\t\t\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\t\t\t\t\t\t\tprefetch=\"intent\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tto={getExercisePath(exerciseNumber)}\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName={clsx(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t'relative px-2 py-0.5 pr-3 whitespace-nowrap outline-none hover:underline focus:underline',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t'after:bg-background after:absolute after:-right-2.5 after:-bottom-2.5 after:h-5 after:w-5 after:scale-75 after:rotate-45 after:content-[\"\"] hover:underline focus:underline',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{ 'bg-foreground text-background': isActive },\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>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{title}\n\t\t\t\t\t\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t\t\t\t\t\t\t{showPlayground ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tto={getExerciseStepPath(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata.playground.exerciseNumber,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata.playground.stepNumber,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata.playground.type,\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\t\t\t\tprefetch=\"intent\"\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🛝\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Link>\n\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</span>\n\t\t\t\t\t\t\t\t\t\t\t{isActive ? (\n\t\t\t\t\t\t\t\t\t\t\t\t<motion.ul\n\t\t\t\t\t\t\t\t\t\t\t\t\tvariants={listVariants}\n\t\t\t\t\t\t\t\t\t\t\t\t\tinitial=\"hidden\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tanimate=\"visible\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"mt-2 ml-4 flex flex-col\"\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\t\t<NavigationExerciseStepListItem\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tkey={exerciseNumber}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"instructions\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\texerciseNumber={exerciseNumber}\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<Link\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tto={getExercisePath(exerciseNumber)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tprefetch=\"intent\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName={clsx(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'after:bg-background relative px-2 py-0.5 pr-3 text-xl font-medium whitespace-nowrap outline-none after:absolute after:-right-2.5 after:-bottom-2.5 after:h-5 after:w-5 after:scale-75 after:rotate-45 after:content-[\"\"] hover:underline focus:underline',\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\t\t'bg-foreground text-background':\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t!params.stepNumber,\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)}\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\t\t\t\t\tIntro\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</NavigationExerciseStepListItem>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{steps\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t.map(({ stepNumber, title, problem, solution }) => {\n\t\t\t\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\t\t\t<NavigationExerciseStepListItem\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tkey={stepNumber}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"step\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstepNumber={stepNumber}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\texerciseNumber={exerciseNumber}\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\t\t<div className=\"flex flex-col gap-0.5\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tto={getExerciseStepPath(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\texerciseNumber,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstepNumber,\n\t\t\t\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\t\t\t\tprefetch=\"intent\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"leading-tight font-semibold\"\n\t\t\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\t\t\t\t{stepNumber.toString().padStart(2, '0')}.{' '}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{title}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"mt-0.5 ml-3 flex gap-1\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{problem && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<NavLink\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tto={getExerciseStepPath(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\texerciseNumber,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstepNumber,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'problem',\n\t\t\t\t\t\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\t\t\t\t\t\tprefetch=\"intent\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName={({ isActive }) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclsx(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'relative px-2 py-0.5 pr-3 whitespace-nowrap outline-none hover:underline focus:underline',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'after:bg-background after:absolute after:-right-2.5 after:-bottom-2.5 after:h-5 after:w-5 after:scale-75 after:rotate-45 after:content-[\"\"] hover:underline focus:underline',\n\t\t\t\t\t\t\t\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\t\t\t\t\t\t\t\t\t'bg-foreground text-background':\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tisActive,\n\t\t\t\t\t\t\t\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\t\t\t\t\t\t\t)\n\t\t\t\t\t\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\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tProblem\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{problem.name ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata.playground.appName\n\t\t\t\t\t\t\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\t\t\t\t\t\t\t: ''}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</NavLink>\n\t\t\t\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\t\t\t\t{solution && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<NavLink\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tto={getExerciseStepPath(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\texerciseNumber,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstepNumber,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'solution',\n\t\t\t\t\t\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\t\t\t\t\t\tprefetch=\"intent\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName={({ isActive }) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclsx(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'relative px-2 py-0.5 pr-3 whitespace-nowrap outline-none hover:underline focus:underline',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'after:bg-background after:absolute after:-right-2.5 after:-bottom-2.5 after:h-5 after:w-5 after:scale-75 after:rotate-45 after:content-[\"\"] hover:underline focus:underline',\n\t\t\t\t\t\t\t\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\t\t\t\t\t\t\t\t\t'bg-foreground text-background':\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tisActive,\n\t\t\t\t\t\t\t\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\t\t\t\t\t\t\t)\n\t\t\t\t\t\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\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tSolution\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{solution.name ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata.playground.appName\n\t\t\t\t\t\t\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\t\t\t\t\t\t\t: ''}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</NavLink>\n\t\t\t\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\t\t\t</div>\n\t\t\t\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\t\t\t</NavigationExerciseStepListItem>\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})}\n\t\t\t\t\t\t\t\t\t\t\t\t\t<NavigationExerciseStepListItem\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"finished\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\texerciseNumber={exerciseNumber}\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<NavLink\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tto={getExercisePath(exerciseNumber, 'finished')}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tprefetch=\"intent\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName={({ isActive }) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclsx(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'after:bg-background relative px-2 py-0.5 pr-3 text-base font-medium whitespace-nowrap outline-none after:absolute after:-right-2.5 after:-bottom-2.5 after:h-5 after:w-5 after:scale-75 after:rotate-45 after:content-[\"\"] hover:underline focus:underline',\n\t\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\t\t\t'bg-foreground text-background': isActive,\n\t\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\t)\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>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t📝 Elaboration\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</NavLink>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</NavigationExerciseStepListItem>\n\t\t\t\t\t\t\t\t\t\t\t\t</motion.ul>\n\t\t\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t\t\t</NavigationExerciseListItem>\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</motion.ul>\n\t\t\t\t\t\t\t<div className=\"mt-6\">\n\t\t\t\t\t\t\t\t<NavLink\n\t\t\t\t\t\t\t\t\tto=\"/finished\"\n\t\t\t\t\t\t\t\t\tclassName={({ isActive }) =>\n\t\t\t\t\t\t\t\t\t\tclsx(\n\t\t\t\t\t\t\t\t\t\t\t'relative text-lg font-bold whitespace-nowrap outline-none hover:underline focus:underline',\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t'after:bg-background bg-black text-white after:absolute after:-right-2.5 after:-bottom-2.5 after:h-5 after:w-5 after:scale-75 after:rotate-45 after:content-[\"\"]':\n\t\t\t\t\t\t\t\t\t\t\t\t\tisActive,\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}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t📝 Workshop Feedback\n\t\t\t\t\t\t\t\t</NavLink>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t)}\n\t\t\t\t\t{!isMenuOpened && (\n\t\t\t\t\t\t<div className=\"flex grow flex-col justify-center\">\n\t\t\t\t\t\t\t<div className=\"orientation-sideways w-full font-mono text-sm leading-none font-medium uppercase\">\n\t\t\t\t\t\t\t\t{exercise?.title ? (\n\t\t\t\t\t\t\t\t\t<Link to={getExercisePath(Number(params.exerciseNumber))}>\n\t\t\t\t\t\t\t\t\t\t{exercise.title}\n\t\t\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t{exercise?.title && app?.title ? ' — ' : null}\n\t\t\t\t\t\t\t\t{app?.title ? (\n\t\t\t\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\t\t\t\tto={getExerciseStepPath(\n\t\t\t\t\t\t\t\t\t\t\tNumber(params.exerciseNumber),\n\t\t\t\t\t\t\t\t\t\t\tapp.stepNumber,\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{app.title}\n\t\t\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t\t{isOnline ? null : (\n\t\t\t\t\t\t<SimpleTooltip content={isMenuOpened ? null : 'You are offline'}>\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t'flex w-full animate-pulse items-center border-t p-4',\n\t\t\t\t\t\t\t\t\tisMenuOpened ? 'justify-start' : 'justify-center',\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\t\t\tname=\"WifiNoConnection\"\n\t\t\t\t\t\t\t\t\tclassName=\"text-foreground-destructive\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{isMenuOpened ? (\n\t\t\t\t\t\t\t\t\t\t<span className=\"whitespace-nowrap\">You are offline</span>\n\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t</Icon>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</SimpleTooltip>\n\t\t\t\t\t)}\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t'flex w-full items-center justify-start border-t p-4 transition-[height]',\n\t\t\t\t\t\t\tisMenuOpened && users.length > 4 ? 'h-28' : 'h-14',\n\t\t\t\t\t\t)}\n\t\t\t\t\t\tstyle={isMenuOpened ? { width: OPENED_MENU_WIDTH } : {}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<FacePile isMenuOpened={isMenuOpened} />\n\t\t\t\t\t</div>\n\t\t\t\t\t{ENV.EPICSHOP_DEPLOYED ? null : user ? (\n\t\t\t\t\t\t<SimpleTooltip content={isMenuOpened ? null : 'Your account'}>\n\t\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\t\tclassName=\"flex h-14 w-full shrink-0 items-center justify-start space-x-3 border-t px-4 py-4 text-center no-underline hover:underline\"\n\t\t\t\t\t\t\t\tto=\"/account\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{user.imageUrlSmall ? (\n\t\t\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t\t\t\talt={user.name ?? user.email}\n\t\t\t\t\t\t\t\t\t\tsrc={user.imageUrlSmall}\n\t\t\t\t\t\t\t\t\t\tclassName=\"h-full rounded-full\"\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<Icon name=\"User\" className=\"shrink-0\" size=\"lg\" />\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{isMenuOpened ? (\n\t\t\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\t\t\tclassName=\"flex items-center whitespace-nowrap\"\n\t\t\t\t\t\t\t\t\t\tinitial={{ opacity: 0 }}\n\t\t\t\t\t\t\t\t\t\tanimate={{ opacity: 1 }}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\tYour Account\n\t\t\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<span className=\"sr-only\">Your account</span>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t</SimpleTooltip>\n\t\t\t\t\t) : null}\n\t\t\t\t\t{ENV.EPICSHOP_DEPLOYED ? null : user && nextExerciseRoute ? (\n\t\t\t\t\t\t<SimpleTooltip\n\t\t\t\t\t\t\tcontent={isMenuOpened ? null : 'Continue to next lesson'}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\t\tto={nextExerciseRoute}\n\t\t\t\t\t\t\t\tprefetch=\"intent\"\n\t\t\t\t\t\t\t\tclassName={clsx(\n\t\t\t\t\t\t\t\t\t'flex h-14 w-full items-center space-x-3 border-t px-4 py-4 pl-[18px] no-underline hover:underline',\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\tstate={{ from: 'continue next lesson button' }}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Icon name=\"FastForward\" className=\"shrink-0\" size=\"md\" />\n\t\t\t\t\t\t\t\t{isMenuOpened ? (\n\t\t\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\t\t\tclassName=\"flex items-center whitespace-nowrap\"\n\t\t\t\t\t\t\t\t\t\tinitial={{ opacity: 0 }}\n\t\t\t\t\t\t\t\t\t\tanimate={{ opacity: 1 }}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\tContinue to next lesson\n\t\t\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<span className=\"sr-only\">Continue to next lesson</span>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t</SimpleTooltip>\n\t\t\t\t\t) : null}\n\t\t\t\t\t<div className=\"mb-4 w-full self-start border-t pt-[15px] pl-3\">\n\t\t\t\t\t\t<ThemeSwitch />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</motion.div>\n\t\t</nav>\n\t)\n}\n\nfunction NavToggle({\n\ttitle,\n\tisMenuOpened,\n\tsetMenuOpened,\n\tmenuControls,\n}: {\n\ttitle: string\n\tisMenuOpened: boolean\n\tsetMenuOpened: (value: boolean) => void\n\tmenuControls?: ReturnType<typeof useAnimationControls>\n}) {\n\tconst initialOpenRef = React.useRef(isMenuOpened)\n\tconst menuButtonRef = React.useRef<HTMLButtonElement>(null)\n\tconst path01Variants = {\n\t\topen: { d: 'M3.06061 2.99999L21.0606 21' },\n\t\tclosed: { d: 'M0 9.5L24 9.5' },\n\t}\n\tconst path02Variants = {\n\t\topen: { d: 'M3.00006 21.0607L21 3.06064' },\n\t\tmoving: { d: 'M0 14.5L24 14.5' },\n\t\tclosed: { d: 'M0 14.5L15 14.5' },\n\t}\n\tconst path01Controls = useAnimationControls()\n\tconst path02Controls = useAnimationControls()\n\n\tasync function toggleMenu() {\n\t\tvoid menuControls?.start(isMenuOpened ? 'close' : 'open')\n\t\tsetMenuOpened(!isMenuOpened)\n\t\tif (isMenuOpened) {\n\t\t\tvoid path01Controls.start(path01Variants.closed)\n\t\t\tawait path02Controls.start(path02Variants.moving)\n\t\t\tvoid path02Controls.start(path02Variants.closed)\n\t\t} else {\n\t\t\tawait path02Controls.start(path02Variants.moving)\n\t\t\tvoid path01Controls.start(path01Variants.open)\n\t\t\tvoid path02Controls.start(path02Variants.open)\n\t\t}\n\t}\n\n\tReact.useEffect(() => {\n\t\tif (!isMenuOpened) return\n\n\t\tfunction handleKeyUp(event: KeyboardEvent) {\n\t\t\tif (event.key === 'Escape') {\n\t\t\t\tmenuButtonRef.current?.click()\n\t\t\t}\n\t\t}\n\t\tdocument.addEventListener('keyup', handleKeyUp)\n\t\treturn () => document.removeEventListener('keyup', handleKeyUp)\n\t}, [isMenuOpened])\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t'relative inline-flex h-14 shrink-0 items-center justify-between overflow-hidden border-r sm:w-full sm:border-r-0 sm:border-b',\n\t\t\t\t{\n\t\t\t\t\t'w-full': isMenuOpened,\n\t\t\t\t},\n\t\t\t)}\n\t\t>\n\t\t\t<button\n\t\t\t\tref={menuButtonRef}\n\t\t\t\tclassName=\"flex h-14 w-14 items-center justify-center\"\n\t\t\t\taria-label=\"Open Navigation menu\"\n\t\t\t\tonClick={toggleMenu}\n\t\t\t>\n\t\t\t\t<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n\t\t\t\t\t<motion.path\n\t\t\t\t\t\t{...path01Variants[initialOpenRef.current ? 'open' : 'closed']}\n\t\t\t\t\t\tanimate={path01Controls}\n\t\t\t\t\t\ttransition={{ duration: 0.2 }}\n\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\tstrokeWidth={1.5}\n\t\t\t\t\t/>\n\t\t\t\t\t<motion.path\n\t\t\t\t\t\t{...path02Variants[initialOpenRef.current ? 'open' : 'closed']}\n\t\t\t\t\t\tanimate={path02Controls}\n\t\t\t\t\t\ttransition={{ duration: 0.2 }}\n\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\tstrokeWidth={1.5}\n\t\t\t\t\t/>\n\t\t\t\t</svg>\n\t\t\t</button>\n\t\t\t{isMenuOpened && (\n\t\t\t\t<motion.p\n\t\t\t\t\ttransition={{ delay: 0.2 }}\n\t\t\t\t\tinitial={{ opacity: 0, y: 5 }}\n\t\t\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\t\t\tclassName=\"absolute right-5 font-mono text-sm whitespace-nowrap uppercase\"\n\t\t\t\t>\n\t\t\t\t\t<Link to=\"/\">{title}</Link>\n\t\t\t\t</motion.p>\n\t\t\t)}\n\t\t</div>\n\t)\n}\n"],"names":["stopAnimation","visualElement","value","setVariants","variantLabels","key","variant","setTarget","child","setValues","definition","animationControls","subscribers","controls","transitionOverride","animations","animateVisualElement","useAnimationControls","useConstant","useIsomorphicLayoutEffect","makeMediaQueryStore","mediaQuery","serverSnapshot","getSnapshot","subscribe","callback","mediaQueryList","useSyncExternalStore","opacities","shadows","getScoreClassNames","score","opacityNumber","Math","round","length","shadowNumber","cn","FacePile","isMenuOpened","loggedInUser","useOptionalUser","users","usePresence","product","displayNameShort","useWorkshopConfig","limit","numberOverLimit","shouldShowNumberOverLimit","tiffany","jsx","Link","target","rel","to","children","alt","className","src","overLimitLabel","TooltipProvider","slice","map","user","scoreClassNames","locations","getUserLocations","imageUrl","imageUrlSmall","avatarUrl","hasAccess","local","some","loc","origin","includes","productHostEmojis","getUniqueProductHostEmojis","loggedInEmojis","getLoggedInProductEmojis","loggedInProductHosts","optOut","Tooltip","TooltipTrigger","asChild","tabIndex","Icon","name","TooltipContent","jsxs","id","doingLabel","index","locationLabel","getLocationLabel","line1","getProductHostEmoji","productHost","line2","workshopTitle","hosts","host","filter","Boolean","join","location","uniqueHosts","Set","add","size","Array","from","useIsWide","_layout","_UNSAFE_withComponentProps","data","useLoaderData","isWide","isHydrated","useHydrated","setMenuOpenedState","React","useRevalidationWS","watchPaths","setMenuOpened","document","cookie","toString","NoUserBanner","MobileNavigation","onMenuOpenChange","Navigation","Outlet","exercise","exercisePortion","exerciseNumber","stepNumber","s","padStart","type","displayName","userHasAccess","useUserHasAccess","details","ENV","EPICSHOP_DEPLOYED","Fragment","EPICSHOP_GITHUB_REPO","href","Logo","style","Dialog","DialogTrigger","DialogContent","DialogHeader","DialogDescription","itemVariants","hidden","opacity","x","visible","NavigationExerciseListItem","progressClassName","useExerciseProgressClassName","motion","li","variants","NavigationExerciseStepListItem","progressItemSearch","useProgressItemClassName","nextExerciseRoute","useNextExerciseRoute","params","useParams","isOnline","useIsOnline","listVariants","transition","duration","when","staggerChildren","NavToggle","title","div","initial","animate","ul","NavLink","prefetch","isActive","clsx","exercises","steps","Number","showPlayground","playground","getExercisePath","getExerciseStepPath","problem","solution","appName","SimpleTooltip","content","email","state","ThemeSwitch","OPENED_MENU_WIDTH","find","e","app","solutions","problems","p","menuControls","menuVariants","close","width","open","initialOpenRef","menuButtonRef","path01Variants","d","closed","path02Variants","moving","path01Controls","path02Controls","toggleMenu","start","handleKeyUp","event","current","click","addEventListener","removeEventListener","ref","onClick","height","viewBox","path","stroke","strokeWidth","delay","y"],"mappings":"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","x_google_ignoreList":[0,1]}
@@ -1 +1 @@
1
- window.__reactRouterManifest={"entry":{"module":"/assets/entry.client-DjFfCWKe.js","imports":["/assets/jsx-runtime-C5WNSv3b.js","/assets/index-Az39ZADK.js","/assets/index-CjiomtK6.js","/assets/chunk-JG3XND5A-pL43G3x8.js","/assets/chunk-UIGDSWPH-BWkP6tD5.js","/assets/preload-helper-BXl3LOEh.js"],"css":[]},"routes":{"root":{"id":"root","path":"","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":true,"module":"/assets/root-8Sq6HSdp.js","imports":["/assets/jsx-runtime-C5WNSv3b.js","/assets/index-Az39ZADK.js","/assets/index-CjiomtK6.js","/assets/chunk-JG3XND5A-pL43G3x8.js","/assets/chunk-UIGDSWPH-BWkP6tD5.js","/assets/preload-helper-BXl3LOEh.js","/assets/misc-BapXpylh.js","/assets/client-only-DtkKCk_i.js","/assets/error-boundary-C8da5z08.js","/assets/presence-OxG7Cpak.js","/assets/progress-bar-D66irkpP.js","/assets/index-Dd9cSrtE.js","/assets/tooltip-C2AQeNhD.js","/assets/types-Cl2NuNg4.js","/assets/index-_LzGTKVC.js","/assets/seo-t5J-DRxw.js","/assets/pe-Bs-DFNma.js","/assets/index-Cod-PQ6D.js","/assets/online-Dw7HU4wM.js","/assets/root-loader-C5P2c7MU.js"],"css":[]},"routes/$":{"id":"routes/$","parentId":"root","path":"*","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":true,"module":"/assets/_-1yI9s8bZ.js","imports":["/assets/chunk-UIGDSWPH-BWkP6tD5.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/error-boundary-C8da5z08.js","/assets/misc-BapXpylh.js","/assets/index-Az39ZADK.js","/assets/preload-helper-BXl3LOEh.js"],"css":[]},"routes/_app+/_layout":{"id":"routes/_app+/_layout","parentId":"root","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/_layout-BulHW5p3.js","imports":["/assets/chunk-UIGDSWPH-BWkP6tD5.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/misc-BapXpylh.js","/assets/index-Az39ZADK.js","/assets/pe-Bs-DFNma.js","/assets/product-CGPgWFTC.js","/assets/revalidation-ws-BahUMYqf.js","/assets/presence-OxG7Cpak.js","/assets/tooltip-C2AQeNhD.js","/assets/user-DtZkTMil.js","/assets/workshop-config-DCYN9tG7.js","/assets/online-Dw7HU4wM.js","/assets/progress-DJ4oeyzx.js","/assets/index-_LzGTKVC.js","/assets/root-loader-C5P2c7MU.js","/assets/types-Cl2NuNg4.js","/assets/index-Cod-PQ6D.js","/assets/index-CjiomtK6.js"],"css":[]},"routes/_app+/account":{"id":"routes/_app+/account","parentId":"routes/_app+/_layout","path":"account","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/account-Cs6fPUt5.js","imports":["/assets/chunk-UIGDSWPH-BWkP6tD5.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/button-Ds94YjAg.js","/assets/misc-BapXpylh.js","/assets/tooltip-C2AQeNhD.js","/assets/user-DtZkTMil.js","/assets/workshop-config-DCYN9tG7.js","/assets/index-Az39ZADK.js","/assets/index-CjiomtK6.js","/assets/root-loader-C5P2c7MU.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,"hasClientMiddleware":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,"hasClientMiddleware":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,"hasClientMiddleware":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,"hasClientMiddleware":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,"hasClientMiddleware":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,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/test.epic_ws_.js_-l0sNRNKZ.js","imports":[],"css":[]},"routes/_app+/app.epic_ws[.js]":{"id":"routes/_app+/app.epic_ws[.js]","parentId":"routes/_app+/_layout","path":"app/epic_ws.js","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/app.epic_ws_.js_-l0sNRNKZ.js","imports":[],"css":[]},"routes/_app+/discord":{"id":"routes/_app+/discord","parentId":"routes/_app+/_layout","path":"discord","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/discord-CuIGDSx9.js","imports":["/assets/discord-CRlZTq2g.js","/assets/chunk-UIGDSWPH-BWkP6tD5.js","/assets/index-Az39ZADK.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/misc-BapXpylh.js","/assets/user-DtZkTMil.js","/assets/root-loader-C5P2c7MU.js","/assets/workshop-config-DCYN9tG7.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,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/_layout-DJDj5-wE.js","imports":["/assets/chunk-UIGDSWPH-BWkP6tD5.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-Az39ZADK.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,"hasClientMiddleware":false,"hasErrorBoundary":true,"module":"/assets/_exerciseNumber-CrMXg7Kc.js","imports":["/assets/chunk-UIGDSWPH-BWkP6tD5.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-BwZqB-mh.js","/assets/epic-video-DQNGJhVF.js","/assets/error-boundary-C8da5z08.js","/assets/revalidation-ws-BahUMYqf.js","/assets/launch-editor-FcTaA5kv.js","/assets/progress-DJ4oeyzx.js","/assets/mdx-C_z6TweY.js","/assets/root-loader-C5P2c7MU.js","/assets/seo-t5J-DRxw.js","/assets/error-boundary-ChRytjv2.js","/assets/index-Az39ZADK.js","/assets/index-_LzGTKVC.js","/assets/misc-BapXpylh.js","/assets/tooltip-C2AQeNhD.js","/assets/index-CjiomtK6.js","/assets/pe-Bs-DFNma.js","/assets/types-Cl2NuNg4.js","/assets/online-Dw7HU4wM.js","/assets/loading-DyvhEH4Q.js","/assets/user-DtZkTMil.js","/assets/workshop-config-DCYN9tG7.js","/assets/preload-helper-BXl3LOEh.js","/assets/progress-bar-D66irkpP.js","/assets/index-Dd9cSrtE.js","/assets/chunk-JG3XND5A-pL43G3x8.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout":{"id":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout","parentId":"routes/_app+/exercise+/_layout","path":":exerciseNumber/:stepNumber/:type","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":true,"module":"/assets/_layout-Bm8WMscw.js","imports":["/assets/chunk-UIGDSWPH-BWkP6tD5.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-BwZqB-mh.js","/assets/index-Az39ZADK.js","/assets/error-boundary-C8da5z08.js","/assets/nav-chevrons-Q_xwzgQq.js","/assets/revalidation-ws-BahUMYqf.js","/assets/launch-editor-FcTaA5kv.js","/assets/progress-DJ4oeyzx.js","/assets/set-playground-kIjHv9mG.js","/assets/misc-BapXpylh.js","/assets/root-loader-C5P2c7MU.js","/assets/seo-t5J-DRxw.js","/assets/error-boundary-ChRytjv2.js","/assets/epic-video-DQNGJhVF.js","/assets/tooltip-C2AQeNhD.js","/assets/mdx-C_z6TweY.js","/assets/index-Cod-PQ6D.js","/assets/preload-helper-BXl3LOEh.js","/assets/types-Cl2NuNg4.js","/assets/progress-bar-D66irkpP.js","/assets/pe-Bs-DFNma.js","/assets/index--z_DgN94.js","/assets/index-CjiomtK6.js","/assets/chunk-JG3XND5A-pL43G3x8.js","/assets/index-_LzGTKVC.js","/assets/online-Dw7HU4wM.js","/assets/loading-DyvhEH4Q.js","/assets/user-DtZkTMil.js","/assets/workshop-config-DCYN9tG7.js","/assets/index-Dd9cSrtE.js"],"css":["/assets/epic-video-irT-uesJ.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,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/app-Wqtaq0if.js","imports":["/assets/chunk-UIGDSWPH-BWkP6tD5.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-Az39ZADK.js","/assets/preview-CuS2jg4z.js","/assets/misc-BapXpylh.js","/assets/button-Ds94YjAg.js","/assets/loading-DyvhEH4Q.js","/assets/index-_LzGTKVC.js","/assets/tooltip-C2AQeNhD.js","/assets/index-CjiomtK6.js","/assets/root-loader-C5P2c7MU.js","/assets/pe-Bs-DFNma.js","/assets/types-Cl2NuNg4.js","/assets/progress-bar-D66irkpP.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,"hasClientMiddleware":false,"hasErrorBoundary":true,"module":"/assets/index-DUTmihtu.js","imports":["/assets/chunk-UIGDSWPH-BWkP6tD5.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-Az39ZADK.js","/assets/tooltip-C2AQeNhD.js","/assets/index--z_DgN94.js","/assets/misc-BapXpylh.js","/assets/diff-BxjWXZ8S.js","/assets/error-boundary-C8da5z08.js","/assets/workshop-config-DCYN9tG7.js","/assets/loading-DyvhEH4Q.js","/assets/discord-CRlZTq2g.js","/assets/online-Dw7HU4wM.js","/assets/index-Dd9cSrtE.js","/assets/set-playground-kIjHv9mG.js","/assets/tests-CA21WazO.js","/assets/preview-CuS2jg4z.js","/assets/index-CjiomtK6.js","/assets/index-Cod-PQ6D.js","/assets/accordion-APJveXWr.js","/assets/mdx-C_z6TweY.js","/assets/epic-video-DQNGJhVF.js","/assets/index-_LzGTKVC.js","/assets/root-loader-C5P2c7MU.js","/assets/pe-Bs-DFNma.js","/assets/types-Cl2NuNg4.js","/assets/user-DtZkTMil.js","/assets/preload-helper-BXl3LOEh.js","/assets/launch-editor-FcTaA5kv.js","/assets/progress-bar-D66irkpP.js","/assets/revalidation-ws-BahUMYqf.js","/assets/use-event-source-CrGUTTzj.js","/assets/button-Ds94YjAg.js"],"css":["/assets/epic-video-irT-uesJ.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,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/test-gTncEzfm.js","imports":["/assets/chunk-UIGDSWPH-BWkP6tD5.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/tests-CA21WazO.js","/assets/index-Az39ZADK.js","/assets/accordion-APJveXWr.js","/assets/tooltip-C2AQeNhD.js","/assets/index-CjiomtK6.js","/assets/misc-BapXpylh.js","/assets/index--z_DgN94.js","/assets/index-Cod-PQ6D.js","/assets/epic-video-DQNGJhVF.js","/assets/index-_LzGTKVC.js","/assets/root-loader-C5P2c7MU.js","/assets/pe-Bs-DFNma.js","/assets/types-Cl2NuNg4.js","/assets/online-Dw7HU4wM.js","/assets/loading-DyvhEH4Q.js","/assets/user-DtZkTMil.js","/assets/workshop-config-DCYN9tG7.js","/assets/use-event-source-CrGUTTzj.js","/assets/set-playground-kIjHv9mG.js","/assets/progress-bar-D66irkpP.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.index":{"id":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.index","parentId":"routes/_app+/exercise+/_layout","path":":exerciseNumber/:stepNumber","index":true,"hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":true,"module":"/assets/_exerciseNumber_._stepNumber.index-Dy66qf8f.js","imports":["/assets/chunk-UIGDSWPH-BWkP6tD5.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/error-boundary-C8da5z08.js","/assets/error-boundary-ChRytjv2.js","/assets/index-Az39ZADK.js","/assets/preload-helper-BXl3LOEh.js","/assets/misc-BapXpylh.js","/assets/chunk-JG3XND5A-pL43G3x8.js","/assets/types-Cl2NuNg4.js"],"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,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/_exerciseNumber_.finished-Dpykf0EZ.js","imports":["/assets/chunk-UIGDSWPH-BWkP6tD5.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-BwZqB-mh.js","/assets/index-Az39ZADK.js","/assets/epic-video-DQNGJhVF.js","/assets/misc-BapXpylh.js","/assets/loading-DyvhEH4Q.js","/assets/nav-chevrons-Q_xwzgQq.js","/assets/revalidation-ws-BahUMYqf.js","/assets/launch-editor-FcTaA5kv.js","/assets/progress-DJ4oeyzx.js","/assets/index-_LzGTKVC.js","/assets/mdx-C_z6TweY.js","/assets/online-Dw7HU4wM.js","/assets/root-loader-C5P2c7MU.js","/assets/seo-t5J-DRxw.js","/assets/types-Cl2NuNg4.js","/assets/user-DtZkTMil.js","/assets/workshop-config-DCYN9tG7.js","/assets/progress-bar-D66irkpP.js","/assets/pe-Bs-DFNma.js","/assets/tooltip-C2AQeNhD.js","/assets/index-CjiomtK6.js","/assets/index-Dd9cSrtE.js","/assets/preload-helper-BXl3LOEh.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/_app+/finished":{"id":"routes/_app+/finished","parentId":"routes/_app+/_layout","path":"finished","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/finished-B2yFbqLt.js","imports":["/assets/chunk-UIGDSWPH-BWkP6tD5.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-BwZqB-mh.js","/assets/index-Az39ZADK.js","/assets/epic-video-DQNGJhVF.js","/assets/misc-BapXpylh.js","/assets/loading-DyvhEH4Q.js","/assets/nav-chevrons-Q_xwzgQq.js","/assets/revalidation-ws-BahUMYqf.js","/assets/mdx-C_z6TweY.js","/assets/online-Dw7HU4wM.js","/assets/root-loader-C5P2c7MU.js","/assets/seo-t5J-DRxw.js","/assets/launch-editor-FcTaA5kv.js","/assets/progress-DJ4oeyzx.js","/assets/index-_LzGTKVC.js","/assets/types-Cl2NuNg4.js","/assets/user-DtZkTMil.js","/assets/workshop-config-DCYN9tG7.js","/assets/index-CjiomtK6.js","/assets/index-Dd9cSrtE.js","/assets/preload-helper-BXl3LOEh.js","/assets/progress-bar-D66irkpP.js","/assets/pe-Bs-DFNma.js","/assets/tooltip-C2AQeNhD.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/_app+/index":{"id":"routes/_app+/index","parentId":"routes/_app+/_layout","index":true,"hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":true,"module":"/assets/index-C2q1R-FH.js","imports":["/assets/chunk-UIGDSWPH-BWkP6tD5.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-BwZqB-mh.js","/assets/epic-video-DQNGJhVF.js","/assets/error-boundary-C8da5z08.js","/assets/launch-editor-FcTaA5kv.js","/assets/mdx-C_z6TweY.js","/assets/misc-BapXpylh.js","/assets/progress-DJ4oeyzx.js","/assets/index-Az39ZADK.js","/assets/index-_LzGTKVC.js","/assets/tooltip-C2AQeNhD.js","/assets/index-CjiomtK6.js","/assets/root-loader-C5P2c7MU.js","/assets/pe-Bs-DFNma.js","/assets/types-Cl2NuNg4.js","/assets/online-Dw7HU4wM.js","/assets/loading-DyvhEH4Q.js","/assets/user-DtZkTMil.js","/assets/workshop-config-DCYN9tG7.js","/assets/preload-helper-BXl3LOEh.js","/assets/progress-bar-D66irkpP.js","/assets/index-Dd9cSrtE.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/_app+/l":{"id":"routes/_app+/l","parentId":"routes/_app+/_layout","path":"l","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/l-Cct_IxW4.js","imports":["/assets/chunk-UIGDSWPH-BWkP6tD5.js","/assets/index-Az39ZADK.js"],"css":[]},"routes/_app+/login":{"id":"routes/_app+/login","parentId":"routes/_app+/_layout","path":"login","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/login-yLggg23y.js","imports":["/assets/chunk-UIGDSWPH-BWkP6tD5.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-Az39ZADK.js","/assets/use-event-source-CrGUTTzj.js","/assets/button-Ds94YjAg.js","/assets/loading-DyvhEH4Q.js","/assets/product-CGPgWFTC.js","/assets/workshop-config-DCYN9tG7.js","/assets/types-Cl2NuNg4.js","/assets/misc-BapXpylh.js","/assets/index-_LzGTKVC.js","/assets/tooltip-C2AQeNhD.js","/assets/index-CjiomtK6.js","/assets/root-loader-C5P2c7MU.js","/assets/pe-Bs-DFNma.js"],"css":[]},"routes/_app+/preferences":{"id":"routes/_app+/preferences","parentId":"routes/_app+/_layout","path":"preferences","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/preferences-zUgsPzPt.js","imports":["/assets/chunk-UIGDSWPH-BWkP6tD5.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/button-Ds94YjAg.js","/assets/misc-BapXpylh.js","/assets/tooltip-C2AQeNhD.js","/assets/root-loader-C5P2c7MU.js","/assets/index-Az39ZADK.js","/assets/index-CjiomtK6.js"],"css":[]},"routes/_app+/support":{"id":"routes/_app+/support","parentId":"routes/_app+/_layout","path":"support","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/support-Df0EnQVB.js","imports":["/assets/chunk-UIGDSWPH-BWkP6tD5.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-Az39ZADK.js"],"css":[]},"routes/_app+/workspace-structure":{"id":"routes/_app+/workspace-structure","parentId":"routes/_app+/_layout","path":"workspace-structure","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/workspace-structure-DDQsVv9A.js","imports":["/assets/chunk-UIGDSWPH-BWkP6tD5.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/button-Ds94YjAg.js","/assets/index-Az39ZADK.js","/assets/misc-BapXpylh.js"],"css":[]},"routes/admin+/_layout":{"id":"routes/admin+/_layout","parentId":"root","path":"admin","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/_layout-BpAXVqmz.js","imports":["/assets/chunk-UIGDSWPH-BWkP6tD5.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/root-loader-C5P2c7MU.js","/assets/index-Az39ZADK.js"],"css":[]},"routes/admin+/apps":{"id":"routes/admin+/apps","parentId":"routes/admin+/_layout","path":"apps","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/apps-l0sNRNKZ.js","imports":[],"css":[]},"routes/admin+/cache":{"id":"routes/admin+/cache","parentId":"routes/admin+/_layout","path":"cache","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/cache-BC7pviSz.js","imports":["/assets/chunk-JG3XND5A-pL43G3x8.js","/assets/chunk-UIGDSWPH-BWkP6tD5.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-Az39ZADK.js","/assets/client-only-DtkKCk_i.js","/assets/button-Ds94YjAg.js","/assets/misc-BapXpylh.js","/assets/launch-editor-FcTaA5kv.js","/assets/pe-Bs-DFNma.js","/assets/progress-bar-D66irkpP.js","/assets/root-loader-C5P2c7MU.js"],"css":[]},"routes/admin+/cache.$":{"id":"routes/admin+/cache.$","parentId":"routes/admin+/cache","path":"*","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/cache._-l0sNRNKZ.js","imports":[],"css":[]},"routes/admin+/db":{"id":"routes/admin+/db","parentId":"routes/admin+/_layout","path":"db","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/db-Bgj8fG7B.js","imports":["/assets/chunk-UIGDSWPH-BWkP6tD5.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/misc-BapXpylh.js","/assets/tooltip-C2AQeNhD.js","/assets/launch-editor-FcTaA5kv.js","/assets/index-Az39ZADK.js","/assets/index-CjiomtK6.js","/assets/progress-bar-D66irkpP.js","/assets/pe-Bs-DFNma.js","/assets/root-loader-C5P2c7MU.js"],"css":[]},"routes/admin+/index":{"id":"routes/admin+/index","parentId":"routes/admin+/_layout","index":true,"hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/index-DO6Ta8On.js","imports":["/assets/chunk-UIGDSWPH-BWkP6tD5.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/misc-BapXpylh.js","/assets/tooltip-C2AQeNhD.js","/assets/progress-DJ4oeyzx.js","/assets/root-loader-C5P2c7MU.js","/assets/index-Az39ZADK.js","/assets/index-CjiomtK6.js","/assets/pe-Bs-DFNma.js"],"css":[]},"routes/admin+/notifications":{"id":"routes/admin+/notifications","parentId":"routes/admin+/_layout","path":"notifications","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/notifications-l0sNRNKZ.js","imports":[],"css":[]},"routes/admin+/version":{"id":"routes/admin+/version","parentId":"routes/admin+/_layout","path":"version","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/version-DqkJKhhX.js","imports":["/assets/chunk-UIGDSWPH-BWkP6tD5.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/workshop-config-DCYN9tG7.js","/assets/index-Az39ZADK.js","/assets/root-loader-C5P2c7MU.js"],"css":[]},"routes/admin+/version[.json]":{"id":"routes/admin+/version[.json]","parentId":"routes/admin+/_layout","path":"version.json","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/version_.json_-l0sNRNKZ.js","imports":[],"css":[]},"routes/apps":{"id":"routes/apps","parentId":"root","path":"apps","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/apps-DP2rzg_V.js","imports":[],"css":[]},"routes/diff":{"id":"routes/diff","parentId":"root","path":"diff","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/diff-DxM2txSk.js","imports":["/assets/chunk-UIGDSWPH-BWkP6tD5.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/misc-BapXpylh.js","/assets/diff-BxjWXZ8S.js","/assets/nav-chevrons-Q_xwzgQq.js","/assets/index-Az39ZADK.js","/assets/accordion-APJveXWr.js","/assets/tooltip-C2AQeNhD.js","/assets/index-CjiomtK6.js","/assets/index--z_DgN94.js","/assets/index-Cod-PQ6D.js","/assets/mdx-C_z6TweY.js","/assets/index-Dd9cSrtE.js","/assets/epic-video-DQNGJhVF.js","/assets/index-_LzGTKVC.js","/assets/root-loader-C5P2c7MU.js","/assets/pe-Bs-DFNma.js","/assets/types-Cl2NuNg4.js","/assets/online-Dw7HU4wM.js","/assets/loading-DyvhEH4Q.js","/assets/user-DtZkTMil.js","/assets/workshop-config-DCYN9tG7.js","/assets/preload-helper-BXl3LOEh.js","/assets/launch-editor-FcTaA5kv.js","/assets/progress-bar-D66irkpP.js","/assets/revalidation-ws-BahUMYqf.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/diff.$shortcut":{"id":"routes/diff.$shortcut","parentId":"routes/diff","path":":shortcut","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/diff._shortcut-l0sNRNKZ.js","imports":[],"css":[]},"routes/exercises":{"id":"routes/exercises","parentId":"root","path":"exercises","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":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,"hasClientMiddleware":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,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/login-sse-l0sNRNKZ.js","imports":[],"css":[]},"routes/mcp-ui+/epic-video":{"id":"routes/mcp-ui+/epic-video","parentId":"root","path":"mcp-ui/epic-video","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/epic-video-D_8dpHsg.js","imports":["/assets/chunk-UIGDSWPH-BWkP6tD5.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-Az39ZADK.js","/assets/epic-video-DQNGJhVF.js","/assets/index-_LzGTKVC.js","/assets/misc-BapXpylh.js","/assets/tooltip-C2AQeNhD.js","/assets/index-CjiomtK6.js","/assets/root-loader-C5P2c7MU.js","/assets/pe-Bs-DFNma.js","/assets/types-Cl2NuNg4.js","/assets/online-Dw7HU4wM.js","/assets/loading-DyvhEH4Q.js","/assets/user-DtZkTMil.js","/assets/workshop-config-DCYN9tG7.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/og":{"id":"routes/og","parentId":"root","path":"og","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/og-l0sNRNKZ.js","imports":[],"css":[]},"routes/processes":{"id":"routes/processes","parentId":"root","path":"processes","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":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,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/progress-l0sNRNKZ.js","imports":[],"css":[]},"routes/resources+/healthcheck":{"id":"routes/resources+/healthcheck","parentId":"root","path":"resources/healthcheck","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/healthcheck-l0sNRNKZ.js","imports":[],"css":[]},"routes/resources+/lookout":{"id":"routes/resources+/lookout","parentId":"root","path":"resources/lookout","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/lookout-l0sNRNKZ.js","imports":[],"css":[]},"routes/robots[.]txt":{"id":"routes/robots[.]txt","parentId":"root","path":"robots.txt","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":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,"hasClientMiddleware":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,"hasClientMiddleware":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,"hasClientMiddleware":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,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/test-l0sNRNKZ.js","imports":[],"css":[]},"routes/theme/index":{"id":"routes/theme/index","parentId":"root","path":"theme","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/index-DP2rzg_V.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,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/index-K6Dvbx-E.js","imports":[],"css":[]}},"url":"/assets/manifest-2680d130.js","version":"2680d130"};
1
+ window.__reactRouterManifest={"entry":{"module":"/assets/entry.client-DjFfCWKe.js","imports":["/assets/jsx-runtime-C5WNSv3b.js","/assets/index-Az39ZADK.js","/assets/index-CjiomtK6.js","/assets/chunk-JG3XND5A-pL43G3x8.js","/assets/chunk-UIGDSWPH-BWkP6tD5.js","/assets/preload-helper-BXl3LOEh.js"],"css":[]},"routes":{"root":{"id":"root","path":"","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":true,"module":"/assets/root-1p9mpscc.js","imports":["/assets/jsx-runtime-C5WNSv3b.js","/assets/index-Az39ZADK.js","/assets/index-CjiomtK6.js","/assets/chunk-JG3XND5A-pL43G3x8.js","/assets/chunk-UIGDSWPH-BWkP6tD5.js","/assets/preload-helper-BXl3LOEh.js","/assets/misc-BapXpylh.js","/assets/client-only-DtkKCk_i.js","/assets/error-boundary-C8da5z08.js","/assets/presence-D6KivDVU.js","/assets/progress-bar-D66irkpP.js","/assets/index-Dd9cSrtE.js","/assets/tooltip-C2AQeNhD.js","/assets/types-Cl2NuNg4.js","/assets/index-_LzGTKVC.js","/assets/seo-t5J-DRxw.js","/assets/pe-Bs-DFNma.js","/assets/index-Cod-PQ6D.js","/assets/online-Dw7HU4wM.js","/assets/root-loader-C5P2c7MU.js"],"css":[]},"routes/$":{"id":"routes/$","parentId":"root","path":"*","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":true,"module":"/assets/_-1yI9s8bZ.js","imports":["/assets/chunk-UIGDSWPH-BWkP6tD5.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/error-boundary-C8da5z08.js","/assets/misc-BapXpylh.js","/assets/index-Az39ZADK.js","/assets/preload-helper-BXl3LOEh.js"],"css":[]},"routes/_app+/_layout":{"id":"routes/_app+/_layout","parentId":"root","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/_layout-DBBP4DOc.js","imports":["/assets/chunk-UIGDSWPH-BWkP6tD5.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/misc-BapXpylh.js","/assets/index-Az39ZADK.js","/assets/pe-Bs-DFNma.js","/assets/product-CGPgWFTC.js","/assets/revalidation-ws-BahUMYqf.js","/assets/presence-D6KivDVU.js","/assets/tooltip-C2AQeNhD.js","/assets/user-DtZkTMil.js","/assets/workshop-config-DCYN9tG7.js","/assets/online-Dw7HU4wM.js","/assets/progress-DJ4oeyzx.js","/assets/index-_LzGTKVC.js","/assets/root-loader-C5P2c7MU.js","/assets/types-Cl2NuNg4.js","/assets/index-Cod-PQ6D.js","/assets/index-CjiomtK6.js"],"css":[]},"routes/_app+/account":{"id":"routes/_app+/account","parentId":"routes/_app+/_layout","path":"account","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/account-Cs6fPUt5.js","imports":["/assets/chunk-UIGDSWPH-BWkP6tD5.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/button-Ds94YjAg.js","/assets/misc-BapXpylh.js","/assets/tooltip-C2AQeNhD.js","/assets/user-DtZkTMil.js","/assets/workshop-config-DCYN9tG7.js","/assets/index-Az39ZADK.js","/assets/index-CjiomtK6.js","/assets/root-loader-C5P2c7MU.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,"hasClientMiddleware":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,"hasClientMiddleware":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,"hasClientMiddleware":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,"hasClientMiddleware":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,"hasClientMiddleware":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,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/test.epic_ws_.js_-l0sNRNKZ.js","imports":[],"css":[]},"routes/_app+/app.epic_ws[.js]":{"id":"routes/_app+/app.epic_ws[.js]","parentId":"routes/_app+/_layout","path":"app/epic_ws.js","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/app.epic_ws_.js_-l0sNRNKZ.js","imports":[],"css":[]},"routes/_app+/discord":{"id":"routes/_app+/discord","parentId":"routes/_app+/_layout","path":"discord","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/discord-CuIGDSx9.js","imports":["/assets/discord-CRlZTq2g.js","/assets/chunk-UIGDSWPH-BWkP6tD5.js","/assets/index-Az39ZADK.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/misc-BapXpylh.js","/assets/user-DtZkTMil.js","/assets/root-loader-C5P2c7MU.js","/assets/workshop-config-DCYN9tG7.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,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/_layout-DJDj5-wE.js","imports":["/assets/chunk-UIGDSWPH-BWkP6tD5.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-Az39ZADK.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,"hasClientMiddleware":false,"hasErrorBoundary":true,"module":"/assets/_exerciseNumber-CrMXg7Kc.js","imports":["/assets/chunk-UIGDSWPH-BWkP6tD5.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-BwZqB-mh.js","/assets/epic-video-DQNGJhVF.js","/assets/error-boundary-C8da5z08.js","/assets/revalidation-ws-BahUMYqf.js","/assets/launch-editor-FcTaA5kv.js","/assets/progress-DJ4oeyzx.js","/assets/mdx-C_z6TweY.js","/assets/root-loader-C5P2c7MU.js","/assets/seo-t5J-DRxw.js","/assets/error-boundary-ChRytjv2.js","/assets/index-Az39ZADK.js","/assets/index-_LzGTKVC.js","/assets/misc-BapXpylh.js","/assets/tooltip-C2AQeNhD.js","/assets/index-CjiomtK6.js","/assets/pe-Bs-DFNma.js","/assets/types-Cl2NuNg4.js","/assets/online-Dw7HU4wM.js","/assets/loading-DyvhEH4Q.js","/assets/user-DtZkTMil.js","/assets/workshop-config-DCYN9tG7.js","/assets/preload-helper-BXl3LOEh.js","/assets/progress-bar-D66irkpP.js","/assets/index-Dd9cSrtE.js","/assets/chunk-JG3XND5A-pL43G3x8.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout":{"id":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout","parentId":"routes/_app+/exercise+/_layout","path":":exerciseNumber/:stepNumber/:type","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":true,"module":"/assets/_layout-Bm8WMscw.js","imports":["/assets/chunk-UIGDSWPH-BWkP6tD5.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-BwZqB-mh.js","/assets/index-Az39ZADK.js","/assets/error-boundary-C8da5z08.js","/assets/nav-chevrons-Q_xwzgQq.js","/assets/revalidation-ws-BahUMYqf.js","/assets/launch-editor-FcTaA5kv.js","/assets/progress-DJ4oeyzx.js","/assets/set-playground-kIjHv9mG.js","/assets/misc-BapXpylh.js","/assets/root-loader-C5P2c7MU.js","/assets/seo-t5J-DRxw.js","/assets/error-boundary-ChRytjv2.js","/assets/epic-video-DQNGJhVF.js","/assets/tooltip-C2AQeNhD.js","/assets/mdx-C_z6TweY.js","/assets/index-Cod-PQ6D.js","/assets/preload-helper-BXl3LOEh.js","/assets/types-Cl2NuNg4.js","/assets/progress-bar-D66irkpP.js","/assets/pe-Bs-DFNma.js","/assets/index--z_DgN94.js","/assets/index-CjiomtK6.js","/assets/chunk-JG3XND5A-pL43G3x8.js","/assets/index-_LzGTKVC.js","/assets/online-Dw7HU4wM.js","/assets/loading-DyvhEH4Q.js","/assets/user-DtZkTMil.js","/assets/workshop-config-DCYN9tG7.js","/assets/index-Dd9cSrtE.js"],"css":["/assets/epic-video-irT-uesJ.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,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/app-Wqtaq0if.js","imports":["/assets/chunk-UIGDSWPH-BWkP6tD5.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-Az39ZADK.js","/assets/preview-CuS2jg4z.js","/assets/misc-BapXpylh.js","/assets/button-Ds94YjAg.js","/assets/loading-DyvhEH4Q.js","/assets/index-_LzGTKVC.js","/assets/tooltip-C2AQeNhD.js","/assets/index-CjiomtK6.js","/assets/root-loader-C5P2c7MU.js","/assets/pe-Bs-DFNma.js","/assets/types-Cl2NuNg4.js","/assets/progress-bar-D66irkpP.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,"hasClientMiddleware":false,"hasErrorBoundary":true,"module":"/assets/index-DUTmihtu.js","imports":["/assets/chunk-UIGDSWPH-BWkP6tD5.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-Az39ZADK.js","/assets/tooltip-C2AQeNhD.js","/assets/index--z_DgN94.js","/assets/misc-BapXpylh.js","/assets/diff-BxjWXZ8S.js","/assets/error-boundary-C8da5z08.js","/assets/workshop-config-DCYN9tG7.js","/assets/loading-DyvhEH4Q.js","/assets/discord-CRlZTq2g.js","/assets/online-Dw7HU4wM.js","/assets/index-Dd9cSrtE.js","/assets/set-playground-kIjHv9mG.js","/assets/tests-CA21WazO.js","/assets/preview-CuS2jg4z.js","/assets/index-CjiomtK6.js","/assets/index-Cod-PQ6D.js","/assets/accordion-APJveXWr.js","/assets/mdx-C_z6TweY.js","/assets/epic-video-DQNGJhVF.js","/assets/index-_LzGTKVC.js","/assets/root-loader-C5P2c7MU.js","/assets/pe-Bs-DFNma.js","/assets/types-Cl2NuNg4.js","/assets/user-DtZkTMil.js","/assets/preload-helper-BXl3LOEh.js","/assets/launch-editor-FcTaA5kv.js","/assets/progress-bar-D66irkpP.js","/assets/revalidation-ws-BahUMYqf.js","/assets/use-event-source-CrGUTTzj.js","/assets/button-Ds94YjAg.js"],"css":["/assets/epic-video-irT-uesJ.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,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/test-gTncEzfm.js","imports":["/assets/chunk-UIGDSWPH-BWkP6tD5.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/tests-CA21WazO.js","/assets/index-Az39ZADK.js","/assets/accordion-APJveXWr.js","/assets/tooltip-C2AQeNhD.js","/assets/index-CjiomtK6.js","/assets/misc-BapXpylh.js","/assets/index--z_DgN94.js","/assets/index-Cod-PQ6D.js","/assets/epic-video-DQNGJhVF.js","/assets/index-_LzGTKVC.js","/assets/root-loader-C5P2c7MU.js","/assets/pe-Bs-DFNma.js","/assets/types-Cl2NuNg4.js","/assets/online-Dw7HU4wM.js","/assets/loading-DyvhEH4Q.js","/assets/user-DtZkTMil.js","/assets/workshop-config-DCYN9tG7.js","/assets/use-event-source-CrGUTTzj.js","/assets/set-playground-kIjHv9mG.js","/assets/progress-bar-D66irkpP.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.index":{"id":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.index","parentId":"routes/_app+/exercise+/_layout","path":":exerciseNumber/:stepNumber","index":true,"hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":true,"module":"/assets/_exerciseNumber_._stepNumber.index-Dy66qf8f.js","imports":["/assets/chunk-UIGDSWPH-BWkP6tD5.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/error-boundary-C8da5z08.js","/assets/error-boundary-ChRytjv2.js","/assets/index-Az39ZADK.js","/assets/preload-helper-BXl3LOEh.js","/assets/misc-BapXpylh.js","/assets/chunk-JG3XND5A-pL43G3x8.js","/assets/types-Cl2NuNg4.js"],"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,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/_exerciseNumber_.finished-Dpykf0EZ.js","imports":["/assets/chunk-UIGDSWPH-BWkP6tD5.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-BwZqB-mh.js","/assets/index-Az39ZADK.js","/assets/epic-video-DQNGJhVF.js","/assets/misc-BapXpylh.js","/assets/loading-DyvhEH4Q.js","/assets/nav-chevrons-Q_xwzgQq.js","/assets/revalidation-ws-BahUMYqf.js","/assets/launch-editor-FcTaA5kv.js","/assets/progress-DJ4oeyzx.js","/assets/index-_LzGTKVC.js","/assets/mdx-C_z6TweY.js","/assets/online-Dw7HU4wM.js","/assets/root-loader-C5P2c7MU.js","/assets/seo-t5J-DRxw.js","/assets/types-Cl2NuNg4.js","/assets/user-DtZkTMil.js","/assets/workshop-config-DCYN9tG7.js","/assets/progress-bar-D66irkpP.js","/assets/pe-Bs-DFNma.js","/assets/tooltip-C2AQeNhD.js","/assets/index-CjiomtK6.js","/assets/index-Dd9cSrtE.js","/assets/preload-helper-BXl3LOEh.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/_app+/finished":{"id":"routes/_app+/finished","parentId":"routes/_app+/_layout","path":"finished","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/finished-B2yFbqLt.js","imports":["/assets/chunk-UIGDSWPH-BWkP6tD5.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-BwZqB-mh.js","/assets/index-Az39ZADK.js","/assets/epic-video-DQNGJhVF.js","/assets/misc-BapXpylh.js","/assets/loading-DyvhEH4Q.js","/assets/nav-chevrons-Q_xwzgQq.js","/assets/revalidation-ws-BahUMYqf.js","/assets/mdx-C_z6TweY.js","/assets/online-Dw7HU4wM.js","/assets/root-loader-C5P2c7MU.js","/assets/seo-t5J-DRxw.js","/assets/launch-editor-FcTaA5kv.js","/assets/progress-DJ4oeyzx.js","/assets/index-_LzGTKVC.js","/assets/types-Cl2NuNg4.js","/assets/user-DtZkTMil.js","/assets/workshop-config-DCYN9tG7.js","/assets/index-CjiomtK6.js","/assets/index-Dd9cSrtE.js","/assets/preload-helper-BXl3LOEh.js","/assets/progress-bar-D66irkpP.js","/assets/pe-Bs-DFNma.js","/assets/tooltip-C2AQeNhD.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/_app+/index":{"id":"routes/_app+/index","parentId":"routes/_app+/_layout","index":true,"hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":true,"module":"/assets/index-C2q1R-FH.js","imports":["/assets/chunk-UIGDSWPH-BWkP6tD5.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-BwZqB-mh.js","/assets/epic-video-DQNGJhVF.js","/assets/error-boundary-C8da5z08.js","/assets/launch-editor-FcTaA5kv.js","/assets/mdx-C_z6TweY.js","/assets/misc-BapXpylh.js","/assets/progress-DJ4oeyzx.js","/assets/index-Az39ZADK.js","/assets/index-_LzGTKVC.js","/assets/tooltip-C2AQeNhD.js","/assets/index-CjiomtK6.js","/assets/root-loader-C5P2c7MU.js","/assets/pe-Bs-DFNma.js","/assets/types-Cl2NuNg4.js","/assets/online-Dw7HU4wM.js","/assets/loading-DyvhEH4Q.js","/assets/user-DtZkTMil.js","/assets/workshop-config-DCYN9tG7.js","/assets/preload-helper-BXl3LOEh.js","/assets/progress-bar-D66irkpP.js","/assets/index-Dd9cSrtE.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/_app+/l":{"id":"routes/_app+/l","parentId":"routes/_app+/_layout","path":"l","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/l-Cct_IxW4.js","imports":["/assets/chunk-UIGDSWPH-BWkP6tD5.js","/assets/index-Az39ZADK.js"],"css":[]},"routes/_app+/login":{"id":"routes/_app+/login","parentId":"routes/_app+/_layout","path":"login","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/login-yLggg23y.js","imports":["/assets/chunk-UIGDSWPH-BWkP6tD5.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-Az39ZADK.js","/assets/use-event-source-CrGUTTzj.js","/assets/button-Ds94YjAg.js","/assets/loading-DyvhEH4Q.js","/assets/product-CGPgWFTC.js","/assets/workshop-config-DCYN9tG7.js","/assets/types-Cl2NuNg4.js","/assets/misc-BapXpylh.js","/assets/index-_LzGTKVC.js","/assets/tooltip-C2AQeNhD.js","/assets/index-CjiomtK6.js","/assets/root-loader-C5P2c7MU.js","/assets/pe-Bs-DFNma.js"],"css":[]},"routes/_app+/preferences":{"id":"routes/_app+/preferences","parentId":"routes/_app+/_layout","path":"preferences","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/preferences-zUgsPzPt.js","imports":["/assets/chunk-UIGDSWPH-BWkP6tD5.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/button-Ds94YjAg.js","/assets/misc-BapXpylh.js","/assets/tooltip-C2AQeNhD.js","/assets/root-loader-C5P2c7MU.js","/assets/index-Az39ZADK.js","/assets/index-CjiomtK6.js"],"css":[]},"routes/_app+/support":{"id":"routes/_app+/support","parentId":"routes/_app+/_layout","path":"support","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/support-Df0EnQVB.js","imports":["/assets/chunk-UIGDSWPH-BWkP6tD5.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-Az39ZADK.js"],"css":[]},"routes/_app+/workspace-structure":{"id":"routes/_app+/workspace-structure","parentId":"routes/_app+/_layout","path":"workspace-structure","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/workspace-structure-DDQsVv9A.js","imports":["/assets/chunk-UIGDSWPH-BWkP6tD5.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/button-Ds94YjAg.js","/assets/index-Az39ZADK.js","/assets/misc-BapXpylh.js"],"css":[]},"routes/admin+/_layout":{"id":"routes/admin+/_layout","parentId":"root","path":"admin","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/_layout-BpAXVqmz.js","imports":["/assets/chunk-UIGDSWPH-BWkP6tD5.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/root-loader-C5P2c7MU.js","/assets/index-Az39ZADK.js"],"css":[]},"routes/admin+/apps":{"id":"routes/admin+/apps","parentId":"routes/admin+/_layout","path":"apps","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/apps-l0sNRNKZ.js","imports":[],"css":[]},"routes/admin+/cache":{"id":"routes/admin+/cache","parentId":"routes/admin+/_layout","path":"cache","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/cache-BC7pviSz.js","imports":["/assets/chunk-JG3XND5A-pL43G3x8.js","/assets/chunk-UIGDSWPH-BWkP6tD5.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-Az39ZADK.js","/assets/client-only-DtkKCk_i.js","/assets/button-Ds94YjAg.js","/assets/misc-BapXpylh.js","/assets/launch-editor-FcTaA5kv.js","/assets/pe-Bs-DFNma.js","/assets/progress-bar-D66irkpP.js","/assets/root-loader-C5P2c7MU.js"],"css":[]},"routes/admin+/cache.$":{"id":"routes/admin+/cache.$","parentId":"routes/admin+/cache","path":"*","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/cache._-l0sNRNKZ.js","imports":[],"css":[]},"routes/admin+/db":{"id":"routes/admin+/db","parentId":"routes/admin+/_layout","path":"db","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/db-Bgj8fG7B.js","imports":["/assets/chunk-UIGDSWPH-BWkP6tD5.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/misc-BapXpylh.js","/assets/tooltip-C2AQeNhD.js","/assets/launch-editor-FcTaA5kv.js","/assets/index-Az39ZADK.js","/assets/index-CjiomtK6.js","/assets/progress-bar-D66irkpP.js","/assets/pe-Bs-DFNma.js","/assets/root-loader-C5P2c7MU.js"],"css":[]},"routes/admin+/index":{"id":"routes/admin+/index","parentId":"routes/admin+/_layout","index":true,"hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/index-DO6Ta8On.js","imports":["/assets/chunk-UIGDSWPH-BWkP6tD5.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/misc-BapXpylh.js","/assets/tooltip-C2AQeNhD.js","/assets/progress-DJ4oeyzx.js","/assets/root-loader-C5P2c7MU.js","/assets/index-Az39ZADK.js","/assets/index-CjiomtK6.js","/assets/pe-Bs-DFNma.js"],"css":[]},"routes/admin+/notifications":{"id":"routes/admin+/notifications","parentId":"routes/admin+/_layout","path":"notifications","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/notifications-l0sNRNKZ.js","imports":[],"css":[]},"routes/admin+/version":{"id":"routes/admin+/version","parentId":"routes/admin+/_layout","path":"version","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/version-DqkJKhhX.js","imports":["/assets/chunk-UIGDSWPH-BWkP6tD5.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/workshop-config-DCYN9tG7.js","/assets/index-Az39ZADK.js","/assets/root-loader-C5P2c7MU.js"],"css":[]},"routes/admin+/version[.json]":{"id":"routes/admin+/version[.json]","parentId":"routes/admin+/_layout","path":"version.json","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/version_.json_-l0sNRNKZ.js","imports":[],"css":[]},"routes/apps":{"id":"routes/apps","parentId":"root","path":"apps","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/apps-DP2rzg_V.js","imports":[],"css":[]},"routes/diff":{"id":"routes/diff","parentId":"root","path":"diff","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/diff-DxM2txSk.js","imports":["/assets/chunk-UIGDSWPH-BWkP6tD5.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/misc-BapXpylh.js","/assets/diff-BxjWXZ8S.js","/assets/nav-chevrons-Q_xwzgQq.js","/assets/index-Az39ZADK.js","/assets/accordion-APJveXWr.js","/assets/tooltip-C2AQeNhD.js","/assets/index-CjiomtK6.js","/assets/index--z_DgN94.js","/assets/index-Cod-PQ6D.js","/assets/mdx-C_z6TweY.js","/assets/index-Dd9cSrtE.js","/assets/epic-video-DQNGJhVF.js","/assets/index-_LzGTKVC.js","/assets/root-loader-C5P2c7MU.js","/assets/pe-Bs-DFNma.js","/assets/types-Cl2NuNg4.js","/assets/online-Dw7HU4wM.js","/assets/loading-DyvhEH4Q.js","/assets/user-DtZkTMil.js","/assets/workshop-config-DCYN9tG7.js","/assets/preload-helper-BXl3LOEh.js","/assets/launch-editor-FcTaA5kv.js","/assets/progress-bar-D66irkpP.js","/assets/revalidation-ws-BahUMYqf.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/diff.$shortcut":{"id":"routes/diff.$shortcut","parentId":"routes/diff","path":":shortcut","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/diff._shortcut-l0sNRNKZ.js","imports":[],"css":[]},"routes/exercises":{"id":"routes/exercises","parentId":"root","path":"exercises","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":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,"hasClientMiddleware":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,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/login-sse-l0sNRNKZ.js","imports":[],"css":[]},"routes/mcp-ui+/epic-video":{"id":"routes/mcp-ui+/epic-video","parentId":"root","path":"mcp-ui/epic-video","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/epic-video-D_8dpHsg.js","imports":["/assets/chunk-UIGDSWPH-BWkP6tD5.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-Az39ZADK.js","/assets/epic-video-DQNGJhVF.js","/assets/index-_LzGTKVC.js","/assets/misc-BapXpylh.js","/assets/tooltip-C2AQeNhD.js","/assets/index-CjiomtK6.js","/assets/root-loader-C5P2c7MU.js","/assets/pe-Bs-DFNma.js","/assets/types-Cl2NuNg4.js","/assets/online-Dw7HU4wM.js","/assets/loading-DyvhEH4Q.js","/assets/user-DtZkTMil.js","/assets/workshop-config-DCYN9tG7.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/og":{"id":"routes/og","parentId":"root","path":"og","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/og-l0sNRNKZ.js","imports":[],"css":[]},"routes/processes":{"id":"routes/processes","parentId":"root","path":"processes","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":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,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/progress-l0sNRNKZ.js","imports":[],"css":[]},"routes/resources+/healthcheck":{"id":"routes/resources+/healthcheck","parentId":"root","path":"resources/healthcheck","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/healthcheck-l0sNRNKZ.js","imports":[],"css":[]},"routes/resources+/lookout":{"id":"routes/resources+/lookout","parentId":"root","path":"resources/lookout","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/lookout-l0sNRNKZ.js","imports":[],"css":[]},"routes/robots[.]txt":{"id":"routes/robots[.]txt","parentId":"root","path":"robots.txt","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":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,"hasClientMiddleware":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,"hasClientMiddleware":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,"hasClientMiddleware":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,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/test-l0sNRNKZ.js","imports":[],"css":[]},"routes/theme/index":{"id":"routes/theme/index","parentId":"root","path":"theme","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/index-DP2rzg_V.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,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/index-K6Dvbx-E.js","imports":[],"css":[]}},"url":"/assets/manifest-22982a43.js","version":"22982a43"};