@epic-web/workshop-app 6.72.1 → 6.73.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/client/assets/_exerciseNumber_.finished-C_jLQFDa.js +2 -0
- package/build/client/assets/_exerciseNumber_.finished-C_jLQFDa.js.map +1 -0
- package/build/client/assets/finished-CCILsO6v.js +2 -0
- package/build/client/assets/finished-CCILsO6v.js.map +1 -0
- package/build/client/assets/manifest-b4d09d3a.js +1 -0
- package/build/client/assets/retrieval-practice-CBwxJaFi.js +2 -0
- package/build/client/assets/retrieval-practice-CBwxJaFi.js.map +1 -0
- package/build/client/assets/{root-CKcj2hDc.js → root-BwYDIUyI.js} +2 -2
- package/build/client/assets/{root-CKcj2hDc.js.map → root-BwYDIUyI.js.map} +1 -1
- package/build/client/assets/tailwind-C8PqsZFp.css +1 -0
- package/build/server/index.js +59 -8
- package/build/server/index.js.map +1 -1
- package/package.json +3 -3
- package/build/client/assets/_exerciseNumber_.finished-C4sVkuEq.js +0 -2
- package/build/client/assets/_exerciseNumber_.finished-C4sVkuEq.js.map +0 -1
- package/build/client/assets/finished-BW_4ow3n.js +0 -2
- package/build/client/assets/finished-BW_4ow3n.js.map +0 -1
- package/build/client/assets/manifest-9e0c0428.js +0 -1
- package/build/client/assets/tailwind-C1_1LEqo.css +0 -1
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{w as n,L as l}from"./chunk-EPOLDU6W-BCLmut3y.js";import{j as e}from"./jsx-runtime-C5WNSv3b.js";import{E as c}from"./index-CEVyDj51.js";import{r as m}from"./index-CqIc3cxq.js";import{E as a}from"./epic-video-DnXXh6qE.js";import{I as x,c as d}from"./misc-W4055b-0.js";import{L as f}from"./loading-CDNzW5oO.js";import{N as p}from"./nav-chevrons-Dk4GtZwQ.js";import{u as h}from"./revalidation-ws-BJWJviUX.js";import{R as u}from"./retrieval-practice-CBwxJaFi.js";import{E as b}from"./launch-editor-D2exGfVu.js";import{P as j}from"./progress-BcA4i0iU.js";import{u as g}from"./index-CdzVFL-Z.js";import{M as N}from"./mdx-Dun3ONG_.js";import{u as v}from"./online-DiNLkgTC.js";import{g as w}from"./root-loader-BOzEMapJ.js";import{g as E}from"./seo-t5J-DRxw.js";import"./use-event-source-BuD4_2SF.js";import"./index-DzdDahau.js";import"./index-vDCSPjrM.js";import"./schemas-Uj5SZtvt.js";import"./tooltip-Tlsyx2YO.js";import"./user-BsPobzjB.js";import"./workshop-config-Zfc8zU0x.js";import"./progress-bar-DpWhcyhC.js";import"./pe-CIZUOJMr.js";import"./preload-helper-BXl3LOEh.js";const ee=({loaderData:s,matches:r})=>{const i=s?.exercise.exerciseNumber.toString().padStart(2,"0"),o=w(r);return!s||!o?[{title:"🦉 | Error"}]:E({title:`🦉 | ${i}. ${s.exercise.title} | ${o?.workshopTitle}`,description:`Elaboration for ${i}. ${s.exercise.title}`,ogTitle:`Finished: ${s.exercise.title}`,ogDescription:`Elaboration for exercise ${Number(i)}`,instructor:o.instructor,requestInfo:o.requestInfo})},y={h1:()=>null},re=n(function({loaderData:r}){const i=r.exercise.exerciseNumber.toString().padStart(2,"0");return h({watchPaths:[`./exercises/${i}/FINISHED.mdx`]}),e.jsx("div",{className:"flex max-w-full grow flex-col",children:e.jsxs("main",{className:"flex grow flex-col sm:grid sm:h-full sm:min-h-[800px] sm:grid-cols-1 sm:grid-rows-2 md:min-h-[unset] lg:grid-cols-2 lg:grid-rows-1",children:[e.jsxs("div",{className:"relative flex flex-col sm:col-span-1 sm:row-span-1 sm:h-full lg:border-r",children:[e.jsx("h1",{className:"h-14 border-b pr-5 pl-10 text-sm leading-tight font-medium",children:e.jsx("div",{className:"flex h-14 flex-wrap items-center justify-between gap-x-2 py-2",children:e.jsxs("div",{className:"flex items-center justify-start gap-x-2",children:[e.jsx(l,{to:`/${i}`,className:"hover:underline",children:`${i}. ${r.exercise.title}`}),e.jsx("span",{children:"/"}),e.jsx("span",{children:"Elaboration"})]})})}),e.jsxs("article",{className:"shadow-on-scrollbox scrollbar-thin scrollbar-thumb-scrollbar h-full w-full max-w-none flex-1 scroll-pt-6 space-y-6 overflow-y-auto p-2 sm:p-10 sm:pt-8",id:r.articleId,children:[r.exercise.finishedCode?e.jsx(a,{epicVideoInfosPromise:r.epicVideoInfosPromise,children:e.jsx("div",{className:"prose dark:prose-invert sm:prose-lg",children:e.jsx(N,{code:r.exercise.finishedCode,components:y})})}):"No finished instructions yet...",e.jsx(u,{exerciseNumber:r.exercise.exerciseNumber})]}),e.jsx(c,{elementQuery:`#${r.articleId}`}),e.jsx(j,{type:"finished",exerciseNumber:r.exercise.exerciseNumber,className:"h-14 border-t px-6"}),e.jsxs("div",{className:"@container flex h-16 justify-between border-t border-b-4 lg:border-b-0",children:[e.jsx("div",{}),e.jsx(b,{file:r.exerciseFinished.file,relativePath:r.exerciseFinished.relativePath}),e.jsx(p,{prev:r.prevStepLink,next:r.nextStepLink})]})]}),e.jsx($,{exerciseFormEmbedUrl:r.exerciseFormEmbedUrl,exerciseTitle:r.exercise.title})]})})});function $({exerciseFormEmbedUrl:s,exerciseTitle:r}){const i=g(),[o,t]=m.useState(!1);return v()?e.jsxs("div",{className:"relative min-h-full sm:min-h-[unset] sm:shrink-0",children:[o?null:e.jsx("div",{className:"absolute inset-0 z-10 flex items-center justify-center",children:e.jsx(f,{children:e.jsxs("span",{children:["Loading ",r," Elaboration form"]})})}),e.jsx("iframe",{onLoad:()=>t(!0),onError:()=>t(!0),title:"Elaboration",src:s,className:d("absolute inset-0 flex h-full w-full transition-opacity duration-300",o?"opacity-100":"opacity-0"),style:{colorScheme:i}})]}):e.jsx("div",{className:"relative shrink-0",children:e.jsx("div",{className:"text-body-md text-foreground-destructive absolute inset-0 z-10 flex items-center justify-center",children:e.jsx(x,{name:"WifiNoConnection",size:"xl",children:e.jsxs("span",{children:["Unable to load the ",e.jsx("a",{href:s,className:"underline",children:`${r} feedback form`})," when offline"]})})})})}export{re as default,ee as meta};
|
|
2
|
+
//# sourceMappingURL=_exerciseNumber_.finished-C_jLQFDa.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_exerciseNumber_.finished-C_jLQFDa.js","sources":["../../../app/routes/_app+/exercise+/$exerciseNumber_.finished.tsx"],"sourcesContent":["import path from 'path'\nimport { invariantResponse } from '@epic-web/invariant'\nimport { ElementScrollRestoration } from '@epic-web/restore-scroll'\nimport {\n\tgetAppPageRoute,\n\tgetApps,\n\tgetExercise,\n\tgetWorkshopRoot,\n\tisExtraApp,\n\tisExerciseStepApp,\n} from '@epic-web/workshop-utils/apps.server'\nimport { getWorkshopConfig } from '@epic-web/workshop-utils/config.server'\nimport { getEpicVideoInfos } from '@epic-web/workshop-utils/epic-api.server'\nimport {\n\tcombineServerTimings,\n\tgetServerTimeHeader,\n\tmakeTimings,\n} from '@epic-web/workshop-utils/timing.server'\nimport slugify from '@sindresorhus/slugify'\nimport * as React from 'react'\nimport { data, type HeadersFunction, Link } from 'react-router'\nimport { EpicVideoInfoProvider } from '#app/components/epic-video.tsx'\nimport { Icon } from '#app/components/icons.tsx'\nimport { Loading } from '#app/components/loading.tsx'\nimport { NavChevrons } from '#app/components/nav-chevrons.tsx'\nimport { useRevalidationWS } from '#app/components/revalidation-ws.tsx'\nimport { RetrievalPractice } from '#app/components/retrieval-practice.tsx'\nimport { EditFileOnGitHub } from '#app/routes/launch-editor.tsx'\nimport { ProgressToggle } from '#app/routes/progress.tsx'\nimport { useTheme } from '#app/routes/theme/index.tsx'\nimport { Mdx } from '#app/utils/mdx.tsx'\nimport { cn } from '#app/utils/misc.tsx'\nimport { useIsOnline } from '#app/utils/online.ts'\nimport { getRootMatchLoaderData } from '#app/utils/root-loader.ts'\nimport { getSeoMetaTags } from '#app/utils/seo.ts'\nimport { type Route } from './+types/$exerciseNumber_.finished.tsx'\n\nexport const meta: Route.MetaFunction = ({ loaderData, matches }) => {\n\tconst number = loaderData?.exercise.exerciseNumber.toString().padStart(2, '0')\n\n\tconst rootData = getRootMatchLoaderData(matches)\n\tif (!loaderData || !rootData) return [{ title: '🦉 | Error' }]\n\n\treturn getSeoMetaTags({\n\t\ttitle: `🦉 | ${number}. ${loaderData.exercise.title} | ${rootData?.workshopTitle}`,\n\t\tdescription: `Elaboration for ${number}. ${loaderData.exercise.title}`,\n\t\togTitle: `Finished: ${loaderData.exercise.title}`,\n\t\togDescription: `Elaboration for exercise ${Number(number)}`,\n\t\tinstructor: rootData.instructor,\n\t\trequestInfo: rootData.requestInfo,\n\t})\n}\n\nexport async function loader({ request, params }: Route.LoaderArgs) {\n\tconst timings = makeTimings('exerciseFinishedLoader')\n\tinvariantResponse(params.exerciseNumber, 'exerciseNumber is required')\n\tconst exercise = await getExercise(params.exerciseNumber, {\n\t\ttimings,\n\t\trequest,\n\t})\n\tif (!exercise) {\n\t\tthrow new Response('Not found', { status: 404 })\n\t}\n\tconst workshopConfig = getWorkshopConfig()\n\tconst exerciseFormTemplate = workshopConfig.forms.exercise\n\tconst exerciseFormEmbedUrl = exerciseFormTemplate\n\t\t.replace('{workshopTitle}', encodeURIComponent(workshopConfig.title))\n\t\t.replace('{exerciseTitle}', encodeURIComponent(exercise.title))\n\tconst nextExercise = await getExercise(exercise.exerciseNumber + 1, {\n\t\ttimings,\n\t\trequest,\n\t})\n\n\tconst finishedFilepath = path.join(\n\t\tgetWorkshopRoot(),\n\t\t'exercises',\n\t\texercise.dirName,\n\t\t'FINISHED.mdx',\n\t)\n\n\tconst apps = await getApps({ request, timings })\n\tconst hasExtras = apps.some(isExtraApp)\n\tconst exerciseApps = apps\n\t\t.filter(isExerciseStepApp)\n\t\t.filter((app) => app.exerciseNumber === exercise.exerciseNumber)\n\tconst prevApp = exerciseApps[exerciseApps.length - 1]\n\n\tconst articleId = `workshop-${slugify(workshopConfig.title)}-${\n\t\texercise.exerciseNumber\n\t}-finished`\n\n\treturn data(\n\t\t{\n\t\t\tarticleId,\n\t\t\tworkshopTitle: workshopConfig.title,\n\t\t\texercise,\n\t\t\texerciseFormEmbedUrl,\n\t\t\tepicVideoInfosPromise: getEpicVideoInfos(\n\t\t\t\texercise.finishedEpicVideoEmbeds,\n\t\t\t\t{ request },\n\t\t\t),\n\t\t\texerciseFinished: {\n\t\t\t\tfile: finishedFilepath,\n\t\t\t\trelativePath: `exercises/${exercise.dirName}/FINISHED.mdx`,\n\t\t\t},\n\t\t\tprevStepLink: prevApp\n\t\t\t\t? {\n\t\t\t\t\t\tto: getAppPageRoute(prevApp),\n\t\t\t\t\t\t'aria-label': `${prevApp.title} (${prevApp.type})`,\n\t\t\t\t\t}\n\t\t\t\t: null,\n\t\t\tnextStepLink: nextExercise\n\t\t\t\t? {\n\t\t\t\t\t\tto: `/exercise/${nextExercise.exerciseNumber.toString().padStart(2, '0')}`,\n\t\t\t\t\t\t'aria-label': `${nextExercise.title}`,\n\t\t\t\t\t}\n\t\t\t\t: hasExtras\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tto: '/extra',\n\t\t\t\t\t\t\t'aria-label': 'Extras',\n\t\t\t\t\t\t}\n\t\t\t\t\t: {\n\t\t\t\t\t\t\tto: '/finished',\n\t\t\t\t\t\t\t'aria-label': 'Finished! 🎉',\n\t\t\t\t\t\t},\n\t\t},\n\t\t{\n\t\t\theaders: {\n\t\t\t\t'Server-Timing': getServerTimeHeader(timings),\n\t\t\t},\n\t\t},\n\t)\n}\n\nexport const headers: HeadersFunction = ({ loaderHeaders, parentHeaders }) => {\n\tconst headers = {\n\t\t'Cache-Control': loaderHeaders.get('Cache-Control') ?? '',\n\t\t'Server-Timing': combineServerTimings(loaderHeaders, parentHeaders),\n\t}\n\treturn headers\n}\n\nconst mdxComponents = { h1: () => null }\nexport default function ExerciseFinished({\n\tloaderData: data,\n}: Route.ComponentProps) {\n\tconst exerciseNumber = data.exercise.exerciseNumber\n\t\t.toString()\n\t\t.padStart(2, '0')\n\n\tuseRevalidationWS({\n\t\twatchPaths: [`./exercises/${exerciseNumber}/FINISHED.mdx`],\n\t})\n\n\treturn (\n\t\t<div className=\"flex max-w-full grow flex-col\">\n\t\t\t<main className=\"flex grow flex-col sm:grid sm:h-full sm:min-h-[800px] sm:grid-cols-1 sm:grid-rows-2 md:min-h-[unset] lg:grid-cols-2 lg:grid-rows-1\">\n\t\t\t\t<div className=\"relative flex flex-col sm:col-span-1 sm:row-span-1 sm:h-full lg:border-r\">\n\t\t\t\t\t<h1 className=\"h-14 border-b pr-5 pl-10 text-sm leading-tight font-medium\">\n\t\t\t\t\t\t<div className=\"flex h-14 flex-wrap items-center justify-between gap-x-2 py-2\">\n\t\t\t\t\t\t\t<div className=\"flex items-center justify-start gap-x-2\">\n\t\t\t\t\t\t\t\t<Link to={`/${exerciseNumber}`} className=\"hover:underline\">\n\t\t\t\t\t\t\t\t\t{`${exerciseNumber}. ${data.exercise.title}`}\n\t\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t\t\t<span>/</span>\n\t\t\t\t\t\t\t\t<span>Elaboration</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</h1>\n\n\t\t\t\t\t<article\n\t\t\t\t\t\tclassName=\"shadow-on-scrollbox scrollbar-thin scrollbar-thumb-scrollbar h-full w-full max-w-none flex-1 scroll-pt-6 space-y-6 overflow-y-auto p-2 sm:p-10 sm:pt-8\"\n\t\t\t\t\t\tid={data.articleId}\n\t\t\t\t\t>\n\t\t\t\t\t\t{data.exercise.finishedCode ? (\n\t\t\t\t\t\t\t<EpicVideoInfoProvider\n\t\t\t\t\t\t\t\tepicVideoInfosPromise={data.epicVideoInfosPromise}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<div className=\"prose dark:prose-invert sm:prose-lg\">\n\t\t\t\t\t\t\t\t\t<Mdx\n\t\t\t\t\t\t\t\t\t\tcode={data.exercise.finishedCode}\n\t\t\t\t\t\t\t\t\t\tcomponents={mdxComponents}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</EpicVideoInfoProvider>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t// TODO: render a random dad joke...\n\t\t\t\t\t\t\t'No finished instructions yet...'\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t<RetrievalPractice exerciseNumber={data.exercise.exerciseNumber} />\n\t\t\t\t\t</article>\n\t\t\t\t\t<ElementScrollRestoration elementQuery={`#${data.articleId}`} />\n\t\t\t\t\t<ProgressToggle\n\t\t\t\t\t\ttype=\"finished\"\n\t\t\t\t\t\texerciseNumber={data.exercise.exerciseNumber}\n\t\t\t\t\t\tclassName=\"h-14 border-t px-6\"\n\t\t\t\t\t/>\n\t\t\t\t\t<div className=\"@container flex h-16 justify-between border-t border-b-4 lg:border-b-0\">\n\t\t\t\t\t\t<div />\n\t\t\t\t\t\t<EditFileOnGitHub\n\t\t\t\t\t\t\tfile={data.exerciseFinished.file}\n\t\t\t\t\t\t\trelativePath={data.exerciseFinished.relativePath}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<NavChevrons prev={data.prevStepLink} next={data.nextStepLink} />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<Survey\n\t\t\t\t\texerciseFormEmbedUrl={data.exerciseFormEmbedUrl}\n\t\t\t\t\texerciseTitle={data.exercise.title}\n\t\t\t\t/>\n\t\t\t</main>\n\t\t</div>\n\t)\n}\n\nfunction Survey({\n\texerciseFormEmbedUrl,\n\texerciseTitle,\n}: {\n\texerciseFormEmbedUrl: string\n\texerciseTitle: string\n}) {\n\tconst theme = useTheme()\n\tconst [iframeLoaded, setIframeLoaded] = React.useState(false)\n\tconst isOnline = useIsOnline()\n\tif (!isOnline) {\n\t\treturn (\n\t\t\t<div className=\"relative shrink-0\">\n\t\t\t\t<div className=\"text-body-md text-foreground-destructive absolute inset-0 z-10 flex items-center justify-center\">\n\t\t\t\t\t<Icon name=\"WifiNoConnection\" size=\"xl\">\n\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t{'Unable to load the '}\n\t\t\t\t\t\t\t<a href={exerciseFormEmbedUrl} className=\"underline\">\n\t\t\t\t\t\t\t\t{`${exerciseTitle} feedback form`}\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t{' when offline'}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</Icon>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t)\n\t}\n\treturn (\n\t\t<div className=\"relative min-h-full sm:min-h-[unset] sm:shrink-0\">\n\t\t\t{!iframeLoaded ? (\n\t\t\t\t<div className=\"absolute inset-0 z-10 flex items-center justify-center\">\n\t\t\t\t\t<Loading>\n\t\t\t\t\t\t<span>Loading {exerciseTitle} Elaboration form</span>\n\t\t\t\t\t</Loading>\n\t\t\t\t</div>\n\t\t\t) : null}\n\t\t\t<iframe\n\t\t\t\tonLoad={() => setIframeLoaded(true)}\n\t\t\t\t// show what would have shown if there is an error\n\t\t\t\tonError={() => setIframeLoaded(true)}\n\t\t\t\ttitle=\"Elaboration\"\n\t\t\t\tsrc={exerciseFormEmbedUrl}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'absolute inset-0 flex h-full w-full transition-opacity duration-300',\n\t\t\t\t\tiframeLoaded ? 'opacity-100' : 'opacity-0',\n\t\t\t\t)}\n\t\t\t\tstyle={{ colorScheme: theme }}\n\t\t\t/>\n\t\t</div>\n\t)\n}\n"],"names":["meta","loaderData","matches","number","exercise","exerciseNumber","toString","padStart","rootData","getRootMatchLoaderData","title","getSeoMetaTags","workshopTitle","description","ogTitle","ogDescription","Number","instructor","requestInfo","mdxComponents","h1","$exerciseNumber__finished","_UNSAFE_withComponentProps","data","useRevalidationWS","watchPaths","className","children","jsxs","jsx","Link","to","id","articleId","finishedCode","EpicVideoInfoProvider","epicVideoInfosPromise","Mdx","code","components","RetrievalPractice","ElementScrollRestoration","elementQuery","ProgressToggle","type","EditFileOnGitHub","file","exerciseFinished","relativePath","NavChevrons","prev","prevStepLink","next","nextStepLink","Survey","exerciseFormEmbedUrl","exerciseTitle","theme","useTheme","iframeLoaded","setIframeLoaded","React","useIsOnline","Loading","onLoad","onError","src","cn","style","colorScheme","Icon","name","size","href"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{w as n,L as l}from"./chunk-EPOLDU6W-BCLmut3y.js";import{j as e}from"./jsx-runtime-C5WNSv3b.js";import{E as a}from"./index-CEVyDj51.js";import{r as c}from"./index-CqIc3cxq.js";import{E as m}from"./epic-video-DnXXh6qE.js";import{I as d,c as p}from"./misc-W4055b-0.js";import{L as f}from"./loading-CDNzW5oO.js";import{N as h}from"./nav-chevrons-Dk4GtZwQ.js";import{u as x}from"./revalidation-ws-BJWJviUX.js";import{M as u}from"./mdx-Dun3ONG_.js";import{u as j}from"./online-DiNLkgTC.js";import{g as b}from"./root-loader-BOzEMapJ.js";import{g}from"./seo-t5J-DRxw.js";import{R as v}from"./retrieval-practice-CBwxJaFi.js";import{E as w}from"./launch-editor-D2exGfVu.js";import{P as N}from"./progress-BcA4i0iU.js";import{u as k}from"./index-CdzVFL-Z.js";import"./use-event-source-BuD4_2SF.js";import"./index-DzdDahau.js";import"./index-vDCSPjrM.js";import"./schemas-Uj5SZtvt.js";import"./tooltip-Tlsyx2YO.js";import"./user-BsPobzjB.js";import"./workshop-config-Zfc8zU0x.js";import"./preload-helper-BXl3LOEh.js";import"./progress-bar-DpWhcyhC.js";import"./pe-CIZUOJMr.js";const ee={getSitemapEntries:()=>[{route:"/finished"}]},se=({matches:r})=>{const s=b(r);return s?g({title:`🎉 ${s?.workshopTitle}`,description:`Elaboration for ${s?.workshopTitle}`,ogTitle:`Finished ${s?.workshopTitle}`,ogDescription:"You finished! Time to submit feedback.",instructor:s.instructor,requestInfo:s.requestInfo}):[]},E={h1:()=>null},re=n(function({loaderData:s}){return x({watchPaths:["./exercises/FINISHED.mdx"]}),e.jsx("div",{className:"flex h-full grow flex-col",children:e.jsxs("main",{className:"grid h-full grow grid-cols-1 grid-rows-2 lg:grid-cols-2 lg:grid-rows-1",children:[e.jsxs("div",{className:"relative col-span-1 row-span-1 flex h-full flex-col lg:border-r",children:[e.jsx("h1",{className:"h-14 border-b pr-5 pl-10 text-sm leading-none font-medium uppercase",children:e.jsx("div",{className:"flex h-14 flex-wrap items-center justify-between gap-x-2 py-2",children:e.jsxs("div",{className:"flex items-center justify-start gap-x-2",children:[e.jsx(l,{to:"/",className:"hover:underline",children:s.workshopTitle}),e.jsx("span",{children:"/"}),e.jsx("span",{children:"Elaboration"})]})})}),e.jsxs("article",{className:"shadow-on-scrollbox scrollbar-thin scrollbar-thumb-scrollbar h-full w-full max-w-none flex-1 scroll-pt-6 space-y-6 overflow-y-auto p-2 sm:p-10 sm:pt-8",id:s.articleId,children:[s.finishedCode?e.jsx(m,{epicVideoInfosPromise:s.epicVideoInfosPromise,children:e.jsx("div",{className:"prose dark:prose-invert sm:prose-lg",children:e.jsx(u,{code:s.finishedCode,components:E})})}):"No finished instructions yet...",e.jsx(v,{})]}),e.jsx(a,{elementQuery:`#${s.articleId}`}),e.jsx(N,{type:"workshop-finished",className:"h-14 border-t px-6"}),e.jsxs("div",{className:"@container flex h-16 justify-between border-t border-b-4 lg:border-b-0",children:[e.jsx("div",{}),s.workshopFinished.status==="success"?e.jsx(w,{file:s.workshopFinished.file,relativePath:s.workshopFinished.relativePath}):null,e.jsx(h,{prev:s.prevStepLink,next:{to:"/"}})]})]}),e.jsx(y,{workshopTitle:s.workshopTitle,workshopFormEmbedUrl:s.workshopFormEmbedUrl})]})})});function y({workshopTitle:r,workshopFormEmbedUrl:s}){const t=k(),[o,i]=c.useState(!1);return j()?e.jsxs("div",{className:"relative shrink-0",children:[o?null:e.jsx("div",{className:"absolute inset-0 z-10 flex items-center justify-center",children:e.jsx(f,{children:e.jsxs("span",{children:["Loading ",r," Elaboration form"]})})}),e.jsx("iframe",{onLoad:()=>i(!0),onError:()=>i(!0),title:"Elaboration",src:s,className:p("absolute inset-0 flex h-full w-full transition-opacity duration-300",o?"opacity-100":"opacity-0"),style:{colorScheme:t}})]}):e.jsx("div",{className:"relative shrink-0",children:e.jsx("div",{className:"text-foreground-destructive absolute inset-0 z-10 flex items-center justify-center",children:e.jsx(d,{name:"WifiNoConnection",size:"xl",children:e.jsxs("span",{children:["Unable to load the ",e.jsx("a",{href:s,className:"underline",children:`${r} feedback form`})," when offline"]})})})})}export{re as default,ee as handle,se as meta};
|
|
2
|
+
//# sourceMappingURL=finished-CCILsO6v.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"finished-CCILsO6v.js","sources":["../../../app/routes/_app+/finished.tsx"],"sourcesContent":["import { ElementScrollRestoration } from '@epic-web/restore-scroll'\nimport {\n\tgetExercises,\n\tgetWorkshopFinished,\n} from '@epic-web/workshop-utils/apps.server'\nimport { getWorkshopConfig } from '@epic-web/workshop-utils/config.server'\nimport { getEpicVideoInfos } from '@epic-web/workshop-utils/epic-api.server'\nimport {\n\tcombineServerTimings,\n\tgetServerTimeHeader,\n\tmakeTimings,\n\ttime,\n} from '@epic-web/workshop-utils/timing.server'\nimport { type SEOHandle } from '@nasa-gcn/remix-seo'\nimport slugify from '@sindresorhus/slugify'\nimport * as React from 'react'\nimport { data, type HeadersFunction, Link } from 'react-router'\nimport { EpicVideoInfoProvider } from '#app/components/epic-video.tsx'\nimport { Icon } from '#app/components/icons.tsx'\nimport { Loading } from '#app/components/loading.tsx'\nimport { NavChevrons } from '#app/components/nav-chevrons.tsx'\nimport { useRevalidationWS } from '#app/components/revalidation-ws.tsx'\nimport { Mdx } from '#app/utils/mdx.tsx'\nimport { cn } from '#app/utils/misc.tsx'\nimport { useIsOnline } from '#app/utils/online.ts'\nimport { getRootMatchLoaderData } from '#app/utils/root-loader.ts'\nimport { getSeoMetaTags } from '#app/utils/seo.ts'\nimport { RetrievalPractice } from '#app/components/retrieval-practice.tsx'\nimport { EditFileOnGitHub } from '../launch-editor.tsx'\nimport { ProgressToggle } from '../progress.tsx'\nimport { useTheme } from '../theme/index.tsx'\nimport { type Route } from './+types/finished.tsx'\n\nexport const handle: SEOHandle = {\n\tgetSitemapEntries: () => [{ route: '/finished' }],\n}\n\nexport const meta: Route.MetaFunction = ({ matches }) => {\n\tconst rootData = getRootMatchLoaderData(matches)\n\tif (!rootData) return []\n\n\treturn getSeoMetaTags({\n\t\ttitle: `🎉 ${rootData?.workshopTitle}`,\n\t\tdescription: `Elaboration for ${rootData?.workshopTitle}`,\n\t\togTitle: `Finished ${rootData?.workshopTitle}`,\n\t\togDescription: `You finished! Time to submit feedback.`,\n\t\tinstructor: rootData.instructor,\n\t\trequestInfo: rootData.requestInfo,\n\t})\n}\n\nexport async function loader({ request }: Route.LoaderArgs) {\n\tconst timings = makeTimings('finishedLoader')\n\tconst exercises = await getExercises({ request, timings })\n\tconst compiledFinished = await time(() => getWorkshopFinished({ request }), {\n\t\ttimings,\n\t\ttype: 'compileMdx',\n\t\tdesc: 'compileMdx in finished',\n\t})\n\n\tconst lastExercises = exercises[exercises.length - 1]\n\tconst workshopConfig = getWorkshopConfig()\n\tconst workshopTitle = workshopConfig.title\n\tconst workshopFormTemplate = workshopConfig.forms.workshop\n\tconst workshopFormEmbedUrl = workshopFormTemplate.replace(\n\t\t'{workshopTitle}',\n\t\tencodeURIComponent(workshopTitle),\n\t)\n\treturn data(\n\t\t{\n\t\t\tarticleId: `workshop-${slugify(workshopTitle)}-finished`,\n\t\t\tworkshopTitle,\n\t\t\tworkshopFormEmbedUrl,\n\t\t\tfinishedCode:\n\t\t\t\tcompiledFinished.compiled.status === 'success'\n\t\t\t\t\t? compiledFinished.compiled.code\n\t\t\t\t\t: null,\n\t\t\tepicVideoInfosPromise:\n\t\t\t\tcompiledFinished.compiled.status === 'success'\n\t\t\t\t\t? getEpicVideoInfos(compiledFinished.compiled.epicVideoEmbeds, {\n\t\t\t\t\t\t\trequest,\n\t\t\t\t\t\t})\n\t\t\t\t\t: null,\n\t\t\tworkshopFinished: {\n\t\t\t\tstatus: compiledFinished.compiled.status,\n\t\t\t\tfile: compiledFinished.file,\n\t\t\t\trelativePath: compiledFinished.relativePath,\n\t\t\t},\n\t\t\tprevStepLink: lastExercises\n\t\t\t\t? {\n\t\t\t\t\t\tto: `/${lastExercises.exerciseNumber}/finished`,\n\t\t\t\t\t}\n\t\t\t\t: null,\n\t\t},\n\t\t{\n\t\t\theaders: {\n\t\t\t\t'Server-Timing': getServerTimeHeader(timings),\n\t\t\t},\n\t\t},\n\t)\n}\n\nexport const headers: HeadersFunction = ({ loaderHeaders, parentHeaders }) => {\n\tconst headers = {\n\t\t'Cache-Control': loaderHeaders.get('Cache-Control') ?? '',\n\t\t'Server-Timing': combineServerTimings(loaderHeaders, parentHeaders),\n\t}\n\treturn headers\n}\n\nconst mdxComponents = { h1: () => null }\n\nexport default function ExerciseFinished({\n\tloaderData: data,\n}: Route.ComponentProps) {\n\tuseRevalidationWS({ watchPaths: ['./exercises/FINISHED.mdx'] })\n\treturn (\n\t\t<div className=\"flex h-full grow flex-col\">\n\t\t\t<main className=\"grid h-full grow grid-cols-1 grid-rows-2 lg:grid-cols-2 lg:grid-rows-1\">\n\t\t\t\t<div className=\"relative col-span-1 row-span-1 flex h-full flex-col lg:border-r\">\n\t\t\t\t\t<h1 className=\"h-14 border-b pr-5 pl-10 text-sm leading-none font-medium uppercase\">\n\t\t\t\t\t\t<div className=\"flex h-14 flex-wrap items-center justify-between gap-x-2 py-2\">\n\t\t\t\t\t\t\t<div className=\"flex items-center justify-start gap-x-2\">\n\t\t\t\t\t\t\t\t<Link to=\"/\" className=\"hover:underline\">\n\t\t\t\t\t\t\t\t\t{data.workshopTitle}\n\t\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t\t\t<span>/</span>\n\t\t\t\t\t\t\t\t<span>Elaboration</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</h1>\n\t\t\t\t\t<article\n\t\t\t\t\t\tclassName=\"shadow-on-scrollbox scrollbar-thin scrollbar-thumb-scrollbar h-full w-full max-w-none flex-1 scroll-pt-6 space-y-6 overflow-y-auto p-2 sm:p-10 sm:pt-8\"\n\t\t\t\t\t\tid={data.articleId}\n\t\t\t\t\t>\n\t\t\t\t\t\t{data.finishedCode ? (\n\t\t\t\t\t\t\t<EpicVideoInfoProvider\n\t\t\t\t\t\t\t\tepicVideoInfosPromise={data.epicVideoInfosPromise}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<div className=\"prose dark:prose-invert sm:prose-lg\">\n\t\t\t\t\t\t\t\t\t<Mdx code={data.finishedCode} components={mdxComponents} />\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</EpicVideoInfoProvider>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t// TODO: render a random dad joke...\n\t\t\t\t\t\t\t'No finished instructions yet...'\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t<RetrievalPractice />\n\t\t\t\t\t</article>\n\t\t\t\t\t<ElementScrollRestoration elementQuery={`#${data.articleId}`} />\n\t\t\t\t\t<ProgressToggle\n\t\t\t\t\t\ttype=\"workshop-finished\"\n\t\t\t\t\t\tclassName=\"h-14 border-t px-6\"\n\t\t\t\t\t/>\n\t\t\t\t\t<div className=\"@container flex h-16 justify-between border-t border-b-4 lg:border-b-0\">\n\t\t\t\t\t\t<div />\n\t\t\t\t\t\t{data.workshopFinished.status === 'success' ? (\n\t\t\t\t\t\t\t<EditFileOnGitHub\n\t\t\t\t\t\t\t\tfile={data.workshopFinished.file}\n\t\t\t\t\t\t\t\trelativePath={data.workshopFinished.relativePath}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t<NavChevrons prev={data.prevStepLink} next={{ to: '/' }} />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<Survey\n\t\t\t\t\tworkshopTitle={data.workshopTitle}\n\t\t\t\t\tworkshopFormEmbedUrl={data.workshopFormEmbedUrl}\n\t\t\t\t/>\n\t\t\t</main>\n\t\t</div>\n\t)\n}\n\nfunction Survey({\n\tworkshopTitle,\n\tworkshopFormEmbedUrl,\n}: {\n\tworkshopTitle: string\n\tworkshopFormEmbedUrl: string\n}) {\n\tconst theme = useTheme()\n\tconst [iframeLoaded, setIframeLoaded] = React.useState(false)\n\tconst isOnline = useIsOnline()\n\tif (!isOnline) {\n\t\treturn (\n\t\t\t<div className=\"relative shrink-0\">\n\t\t\t\t<div className=\"text-foreground-destructive absolute inset-0 z-10 flex items-center justify-center\">\n\t\t\t\t\t<Icon name=\"WifiNoConnection\" size=\"xl\">\n\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t{'Unable to load the '}\n\t\t\t\t\t\t\t<a href={workshopFormEmbedUrl} className=\"underline\">\n\t\t\t\t\t\t\t\t{`${workshopTitle} feedback form`}\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t{' when offline'}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</Icon>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t)\n\t}\n\treturn (\n\t\t<div className=\"relative shrink-0\">\n\t\t\t{!iframeLoaded ? (\n\t\t\t\t<div className=\"absolute inset-0 z-10 flex items-center justify-center\">\n\t\t\t\t\t<Loading>\n\t\t\t\t\t\t<span>Loading {workshopTitle} Elaboration form</span>\n\t\t\t\t\t</Loading>\n\t\t\t\t</div>\n\t\t\t) : null}\n\t\t\t<iframe\n\t\t\t\tonLoad={() => setIframeLoaded(true)}\n\t\t\t\t// show what would have shown if there is an error\n\t\t\t\tonError={() => setIframeLoaded(true)}\n\t\t\t\ttitle=\"Elaboration\"\n\t\t\t\tsrc={workshopFormEmbedUrl}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'absolute inset-0 flex h-full w-full transition-opacity duration-300',\n\t\t\t\t\tiframeLoaded ? 'opacity-100' : 'opacity-0',\n\t\t\t\t)}\n\t\t\t\tstyle={{ colorScheme: theme }}\n\t\t\t/>\n\t\t</div>\n\t)\n}\n"],"names":["handle","getSitemapEntries","route","meta","matches","rootData","getRootMatchLoaderData","getSeoMetaTags","title","workshopTitle","description","ogTitle","ogDescription","instructor","requestInfo","mdxComponents","h1","finished","_UNSAFE_withComponentProps","loaderData","data","useRevalidationWS","watchPaths","className","children","jsxs","jsx","Link","to","id","articleId","finishedCode","EpicVideoInfoProvider","epicVideoInfosPromise","Mdx","code","components","RetrievalPractice","ElementScrollRestoration","elementQuery","ProgressToggle","type","workshopFinished","status","EditFileOnGitHub","file","relativePath","NavChevrons","prev","prevStepLink","next","Survey","workshopFormEmbedUrl","theme","useTheme","iframeLoaded","setIframeLoaded","React","useIsOnline","Loading","onLoad","onError","src","cn","style","colorScheme","Icon","name","size","href"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
window.__reactRouterManifest={"entry":{"module":"/assets/entry.client-DdbTov6T.js","imports":["/assets/jsx-runtime-C5WNSv3b.js","/assets/index-CqIc3cxq.js","/assets/index-vDCSPjrM.js","/assets/chunk-FNSCYPCZ-BHgC5cdx.js","/assets/chunk-EPOLDU6W-BCLmut3y.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-BwYDIUyI.js","imports":["/assets/jsx-runtime-C5WNSv3b.js","/assets/index-CqIc3cxq.js","/assets/index-vDCSPjrM.js","/assets/chunk-FNSCYPCZ-BHgC5cdx.js","/assets/chunk-EPOLDU6W-BCLmut3y.js","/assets/preload-helper-BXl3LOEh.js","/assets/misc-W4055b-0.js","/assets/client-only-BeMV-Wuv.js","/assets/error-boundary-DxHqAEHX.js","/assets/dialog-CzO65Z5w.js","/assets/progress-bar-DpWhcyhC.js","/assets/index-DzdDahau.js","/assets/tooltip-Tlsyx2YO.js","/assets/schemas-Uj5SZtvt.js","/assets/index-CdzVFL-Z.js","/assets/presence-VCvV2mg7.js","/assets/seo-t5J-DRxw.js","/assets/pe-CIZUOJMr.js","/assets/index-ynYvVAOK.js","/assets/root-loader-BOzEMapJ.js","/assets/online-DiNLkgTC.js","/assets/coerce-CkHW0SMv.js"],"css":[]},"routes/$":{"id":"routes/$","parentId":"root","path":"*","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":true,"module":"/assets/_-C4AWl_1u.js","imports":["/assets/chunk-EPOLDU6W-BCLmut3y.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/error-boundary-DxHqAEHX.js","/assets/misc-W4055b-0.js","/assets/index-CqIc3cxq.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-C9vSX5Ti.js","imports":["/assets/chunk-EPOLDU6W-BCLmut3y.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/misc-W4055b-0.js","/assets/index-CqIc3cxq.js","/assets/pe-CIZUOJMr.js","/assets/onboarding-indicator-B-XR90_G.js","/assets/product-CvyMpYD_.js","/assets/revalidation-ws-BJWJviUX.js","/assets/status-indicator-C6DiLYL5.js","/assets/dialog-CzO65Z5w.js","/assets/index-CmflCPTU.js","/assets/tooltip-Tlsyx2YO.js","/assets/user-BsPobzjB.js","/assets/workshop-config-Zfc8zU0x.js","/assets/online-DiNLkgTC.js","/assets/presence-VCvV2mg7.js","/assets/root-loader-BOzEMapJ.js","/assets/progress-BcA4i0iU.js","/assets/index-CdzVFL-Z.js","/assets/schemas-Uj5SZtvt.js","/assets/index-ynYvVAOK.js","/assets/index-vDCSPjrM.js","/assets/coerce-CkHW0SMv.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-C96cpeZR.js","imports":["/assets/chunk-EPOLDU6W-BCLmut3y.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/button-Cd-ekki5.js","/assets/misc-W4055b-0.js","/assets/onboarding-indicator-B-XR90_G.js","/assets/tooltip-Tlsyx2YO.js","/assets/user-BsPobzjB.js","/assets/workshop-config-Zfc8zU0x.js","/assets/index-CqIc3cxq.js","/assets/root-loader-BOzEMapJ.js","/assets/index-vDCSPjrM.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-r3m19sUM.js","imports":["/assets/discord-BJkw0IrB.js","/assets/chunk-EPOLDU6W-BCLmut3y.js","/assets/index-CqIc3cxq.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/misc-W4055b-0.js","/assets/user-BsPobzjB.js","/assets/root-loader-BOzEMapJ.js","/assets/workshop-config-Zfc8zU0x.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-BvtJxESE.js","imports":["/assets/chunk-EPOLDU6W-BCLmut3y.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-CqIc3cxq.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-DUwXPNgl.js","imports":["/assets/chunk-EPOLDU6W-BCLmut3y.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-CEVyDj51.js","/assets/epic-video-DnXXh6qE.js","/assets/error-boundary-DxHqAEHX.js","/assets/revalidation-ws-BJWJviUX.js","/assets/launch-editor-D2exGfVu.js","/assets/progress-BcA4i0iU.js","/assets/mdx-Dun3ONG_.js","/assets/root-loader-BOzEMapJ.js","/assets/seo-t5J-DRxw.js","/assets/error-boundary-BDqWjIFP.js","/assets/index-CqIc3cxq.js","/assets/use-event-source-BuD4_2SF.js","/assets/index-DzdDahau.js","/assets/index-vDCSPjrM.js","/assets/index-CdzVFL-Z.js","/assets/misc-W4055b-0.js","/assets/tooltip-Tlsyx2YO.js","/assets/pe-CIZUOJMr.js","/assets/schemas-Uj5SZtvt.js","/assets/online-DiNLkgTC.js","/assets/loading-CDNzW5oO.js","/assets/user-BsPobzjB.js","/assets/workshop-config-Zfc8zU0x.js","/assets/preload-helper-BXl3LOEh.js","/assets/progress-bar-DpWhcyhC.js","/assets/chunk-FNSCYPCZ-BHgC5cdx.js","/assets/coerce-CkHW0SMv.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-DDTXkx2z.js","imports":["/assets/chunk-EPOLDU6W-BCLmut3y.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-CEVyDj51.js","/assets/index-CqIc3cxq.js","/assets/error-boundary-DxHqAEHX.js","/assets/nav-chevrons-Dk4GtZwQ.js","/assets/revalidation-ws-BJWJviUX.js","/assets/launch-editor-D2exGfVu.js","/assets/progress-BcA4i0iU.js","/assets/set-playground-BSGwH9dH.js","/assets/misc-W4055b-0.js","/assets/root-loader-BOzEMapJ.js","/assets/seo-t5J-DRxw.js","/assets/split-layout-DnRER1bP.js","/assets/error-boundary-BDqWjIFP.js","/assets/epic-video-DnXXh6qE.js","/assets/tooltip-Tlsyx2YO.js","/assets/mdx-Dun3ONG_.js","/assets/index-CmflCPTU.js","/assets/onboarding-indicator-B-XR90_G.js","/assets/preload-helper-BXl3LOEh.js","/assets/schemas-Uj5SZtvt.js","/assets/progress-bar-DpWhcyhC.js","/assets/pe-CIZUOJMr.js","/assets/index-CJDOQ1bl.js","/assets/index-vDCSPjrM.js","/assets/index-ynYvVAOK.js","/assets/button-Cd-ekki5.js","/assets/dialog-CzO65Z5w.js","/assets/chunk-FNSCYPCZ-BHgC5cdx.js","/assets/coerce-CkHW0SMv.js","/assets/use-event-source-BuD4_2SF.js","/assets/index-DzdDahau.js","/assets/index-CdzVFL-Z.js","/assets/online-DiNLkgTC.js","/assets/loading-CDNzW5oO.js","/assets/user-BsPobzjB.js","/assets/workshop-config-Zfc8zU0x.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-CJniokic.js","imports":["/assets/chunk-EPOLDU6W-BCLmut3y.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-CqIc3cxq.js","/assets/preview-fhmjENlm.js","/assets/misc-W4055b-0.js","/assets/button-Cd-ekki5.js","/assets/loading-CDNzW5oO.js","/assets/index-CdzVFL-Z.js","/assets/tooltip-Tlsyx2YO.js","/assets/index-vDCSPjrM.js","/assets/root-loader-BOzEMapJ.js","/assets/pe-CIZUOJMr.js","/assets/schemas-Uj5SZtvt.js","/assets/progress-bar-DpWhcyhC.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-BgExztV_.js","imports":["/assets/chunk-EPOLDU6W-BCLmut3y.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/playground-DmEAkxG1.js","/assets/diff-HIgoC1PO.js","/assets/error-boundary-DxHqAEHX.js","/assets/workshop-config-Zfc8zU0x.js","/assets/misc-W4055b-0.js","/assets/preview-fhmjENlm.js","/assets/tests-1-kVRtTc.js","/assets/index-CqIc3cxq.js","/assets/loading-CDNzW5oO.js","/assets/index-CdzVFL-Z.js","/assets/tooltip-Tlsyx2YO.js","/assets/index-vDCSPjrM.js","/assets/root-loader-BOzEMapJ.js","/assets/pe-CIZUOJMr.js","/assets/schemas-Uj5SZtvt.js","/assets/discord-BJkw0IrB.js","/assets/user-BsPobzjB.js","/assets/online-DiNLkgTC.js","/assets/index-CJDOQ1bl.js","/assets/index-ynYvVAOK.js","/assets/status-indicator-C6DiLYL5.js","/assets/index-DzdDahau.js","/assets/set-playground-BSGwH9dH.js","/assets/button-Cd-ekki5.js","/assets/onboarding-indicator-B-XR90_G.js","/assets/progress-bar-DpWhcyhC.js","/assets/dialog-CzO65Z5w.js","/assets/playground-window-x2mQ5o1O.js","/assets/accordion-CQ7oujC6.js","/assets/mdx-Dun3ONG_.js","/assets/epic-video-DnXXh6qE.js","/assets/use-event-source-BuD4_2SF.js","/assets/preload-helper-BXl3LOEh.js","/assets/launch-editor-D2exGfVu.js","/assets/revalidation-ws-BJWJviUX.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-BU7jE-eU.js","imports":["/assets/chunk-EPOLDU6W-BCLmut3y.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/tests-1-kVRtTc.js","/assets/index-CqIc3cxq.js","/assets/accordion-CQ7oujC6.js","/assets/tooltip-Tlsyx2YO.js","/assets/index-vDCSPjrM.js","/assets/misc-W4055b-0.js","/assets/index-CJDOQ1bl.js","/assets/index-ynYvVAOK.js","/assets/epic-video-DnXXh6qE.js","/assets/use-event-source-BuD4_2SF.js","/assets/index-DzdDahau.js","/assets/index-CdzVFL-Z.js","/assets/root-loader-BOzEMapJ.js","/assets/pe-CIZUOJMr.js","/assets/schemas-Uj5SZtvt.js","/assets/online-DiNLkgTC.js","/assets/loading-CDNzW5oO.js","/assets/user-BsPobzjB.js","/assets/workshop-config-Zfc8zU0x.js","/assets/playground-window-x2mQ5o1O.js","/assets/set-playground-BSGwH9dH.js","/assets/button-Cd-ekki5.js","/assets/onboarding-indicator-B-XR90_G.js","/assets/progress-bar-DpWhcyhC.js","/assets/dialog-CzO65Z5w.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-BPqMtmN8.js","imports":["/assets/chunk-EPOLDU6W-BCLmut3y.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/error-boundary-DxHqAEHX.js","/assets/error-boundary-BDqWjIFP.js","/assets/index-CqIc3cxq.js","/assets/preload-helper-BXl3LOEh.js","/assets/misc-W4055b-0.js","/assets/chunk-FNSCYPCZ-BHgC5cdx.js","/assets/schemas-Uj5SZtvt.js","/assets/coerce-CkHW0SMv.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-C_jLQFDa.js","imports":["/assets/chunk-EPOLDU6W-BCLmut3y.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-CEVyDj51.js","/assets/index-CqIc3cxq.js","/assets/epic-video-DnXXh6qE.js","/assets/misc-W4055b-0.js","/assets/loading-CDNzW5oO.js","/assets/nav-chevrons-Dk4GtZwQ.js","/assets/revalidation-ws-BJWJviUX.js","/assets/retrieval-practice-CBwxJaFi.js","/assets/launch-editor-D2exGfVu.js","/assets/progress-BcA4i0iU.js","/assets/index-CdzVFL-Z.js","/assets/mdx-Dun3ONG_.js","/assets/online-DiNLkgTC.js","/assets/root-loader-BOzEMapJ.js","/assets/seo-t5J-DRxw.js","/assets/use-event-source-BuD4_2SF.js","/assets/index-DzdDahau.js","/assets/index-vDCSPjrM.js","/assets/schemas-Uj5SZtvt.js","/assets/tooltip-Tlsyx2YO.js","/assets/user-BsPobzjB.js","/assets/workshop-config-Zfc8zU0x.js","/assets/progress-bar-DpWhcyhC.js","/assets/pe-CIZUOJMr.js","/assets/preload-helper-BXl3LOEh.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/_app+/extra+/_layout":{"id":"routes/_app+/extra+/_layout","parentId":"routes/_app+/_layout","path":"extra","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/_layout-jJ6TnDJF.js","imports":["/assets/chunk-EPOLDU6W-BCLmut3y.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-CqIc3cxq.js"],"css":[]},"routes/_app+/extra+/$extra":{"id":"routes/_app+/extra+/$extra","parentId":"routes/_app+/extra+/_layout","path":":extra","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":true,"module":"/assets/_extra-DkiDFYVP.js","imports":["/assets/chunk-EPOLDU6W-BCLmut3y.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-CEVyDj51.js","/assets/playground-DmEAkxG1.js","/assets/index-CqIc3cxq.js","/assets/diff-HIgoC1PO.js","/assets/epic-video-DnXXh6qE.js","/assets/error-boundary-DxHqAEHX.js","/assets/nav-chevrons-Dk4GtZwQ.js","/assets/revalidation-ws-BJWJviUX.js","/assets/workshop-config-Zfc8zU0x.js","/assets/preview-fhmjENlm.js","/assets/launch-editor-D2exGfVu.js","/assets/set-playground-BSGwH9dH.js","/assets/mdx-Dun3ONG_.js","/assets/root-loader-BOzEMapJ.js","/assets/seo-t5J-DRxw.js","/assets/split-layout-DnRER1bP.js","/assets/misc-W4055b-0.js","/assets/loading-CDNzW5oO.js","/assets/index-CdzVFL-Z.js","/assets/tooltip-Tlsyx2YO.js","/assets/index-vDCSPjrM.js","/assets/pe-CIZUOJMr.js","/assets/schemas-Uj5SZtvt.js","/assets/discord-BJkw0IrB.js","/assets/user-BsPobzjB.js","/assets/online-DiNLkgTC.js","/assets/index-CJDOQ1bl.js","/assets/index-ynYvVAOK.js","/assets/status-indicator-C6DiLYL5.js","/assets/index-DzdDahau.js","/assets/playground-window-x2mQ5o1O.js","/assets/accordion-CQ7oujC6.js","/assets/use-event-source-BuD4_2SF.js","/assets/preload-helper-BXl3LOEh.js","/assets/button-Cd-ekki5.js","/assets/progress-bar-DpWhcyhC.js","/assets/onboarding-indicator-B-XR90_G.js","/assets/dialog-CzO65Z5w.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/_app+/extra+/index":{"id":"routes/_app+/extra+/index","parentId":"routes/_app+/extra+/_layout","index":true,"hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":true,"module":"/assets/index-IgBUhsxX.js","imports":["/assets/chunk-EPOLDU6W-BCLmut3y.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-CEVyDj51.js","/assets/epic-video-DnXXh6qE.js","/assets/error-boundary-DxHqAEHX.js","/assets/revalidation-ws-BJWJviUX.js","/assets/launch-editor-D2exGfVu.js","/assets/mdx-Dun3ONG_.js","/assets/misc-W4055b-0.js","/assets/root-loader-BOzEMapJ.js","/assets/seo-t5J-DRxw.js","/assets/index-CqIc3cxq.js","/assets/use-event-source-BuD4_2SF.js","/assets/index-DzdDahau.js","/assets/index-vDCSPjrM.js","/assets/index-CdzVFL-Z.js","/assets/tooltip-Tlsyx2YO.js","/assets/pe-CIZUOJMr.js","/assets/schemas-Uj5SZtvt.js","/assets/online-DiNLkgTC.js","/assets/loading-CDNzW5oO.js","/assets/user-BsPobzjB.js","/assets/workshop-config-Zfc8zU0x.js","/assets/preload-helper-BXl3LOEh.js","/assets/progress-bar-DpWhcyhC.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-CCILsO6v.js","imports":["/assets/chunk-EPOLDU6W-BCLmut3y.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-CEVyDj51.js","/assets/index-CqIc3cxq.js","/assets/epic-video-DnXXh6qE.js","/assets/misc-W4055b-0.js","/assets/loading-CDNzW5oO.js","/assets/nav-chevrons-Dk4GtZwQ.js","/assets/revalidation-ws-BJWJviUX.js","/assets/mdx-Dun3ONG_.js","/assets/online-DiNLkgTC.js","/assets/root-loader-BOzEMapJ.js","/assets/seo-t5J-DRxw.js","/assets/retrieval-practice-CBwxJaFi.js","/assets/launch-editor-D2exGfVu.js","/assets/progress-BcA4i0iU.js","/assets/index-CdzVFL-Z.js","/assets/use-event-source-BuD4_2SF.js","/assets/index-DzdDahau.js","/assets/index-vDCSPjrM.js","/assets/schemas-Uj5SZtvt.js","/assets/tooltip-Tlsyx2YO.js","/assets/user-BsPobzjB.js","/assets/workshop-config-Zfc8zU0x.js","/assets/preload-helper-BXl3LOEh.js","/assets/progress-bar-DpWhcyhC.js","/assets/pe-CIZUOJMr.js"],"css":["/assets/epic-video-irT-uesJ.css"]},"routes/_app+/guide":{"id":"routes/_app+/guide","parentId":"routes/_app+/_layout","path":"guide","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/guide-Cinib8Ji.js","imports":["/assets/chunk-EPOLDU6W-BCLmut3y.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-CqIc3cxq.js"],"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-PKjGT1Rp.js","imports":["/assets/chunk-EPOLDU6W-BCLmut3y.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-CEVyDj51.js","/assets/epic-video-DnXXh6qE.js","/assets/error-boundary-DxHqAEHX.js","/assets/launch-editor-D2exGfVu.js","/assets/mdx-Dun3ONG_.js","/assets/misc-W4055b-0.js","/assets/progress-BcA4i0iU.js","/assets/index-CqIc3cxq.js","/assets/use-event-source-BuD4_2SF.js","/assets/index-DzdDahau.js","/assets/index-vDCSPjrM.js","/assets/index-CdzVFL-Z.js","/assets/tooltip-Tlsyx2YO.js","/assets/root-loader-BOzEMapJ.js","/assets/pe-CIZUOJMr.js","/assets/schemas-Uj5SZtvt.js","/assets/online-DiNLkgTC.js","/assets/loading-CDNzW5oO.js","/assets/user-BsPobzjB.js","/assets/workshop-config-Zfc8zU0x.js","/assets/preload-helper-BXl3LOEh.js","/assets/progress-bar-DpWhcyhC.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-BWU2-fsj.js","imports":["/assets/chunk-EPOLDU6W-BCLmut3y.js","/assets/index-CqIc3cxq.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-mWjVXGbJ.js","imports":["/assets/chunk-EPOLDU6W-BCLmut3y.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-CqIc3cxq.js","/assets/use-event-source-BuD4_2SF.js","/assets/button-Cd-ekki5.js","/assets/loading-CDNzW5oO.js","/assets/product-CvyMpYD_.js","/assets/workshop-config-Zfc8zU0x.js","/assets/schemas-Uj5SZtvt.js","/assets/misc-W4055b-0.js","/assets/index-CdzVFL-Z.js","/assets/tooltip-Tlsyx2YO.js","/assets/index-vDCSPjrM.js","/assets/root-loader-BOzEMapJ.js","/assets/pe-CIZUOJMr.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-D6HQ5bK1.js","imports":["/assets/chunk-EPOLDU6W-BCLmut3y.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/button-Cd-ekki5.js","/assets/misc-W4055b-0.js","/assets/tooltip-Tlsyx2YO.js","/assets/root-loader-BOzEMapJ.js","/assets/index-CqIc3cxq.js","/assets/index-vDCSPjrM.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-D5mDQ-c-.js","imports":["/assets/chunk-EPOLDU6W-BCLmut3y.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-CqIc3cxq.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-B6Rpl-B2.js","imports":["/assets/chunk-EPOLDU6W-BCLmut3y.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/button-Cd-ekki5.js","/assets/index-CqIc3cxq.js","/assets/misc-W4055b-0.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-CunOyAg4.js","imports":["/assets/chunk-EPOLDU6W-BCLmut3y.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/root-loader-BOzEMapJ.js","/assets/index-CqIc3cxq.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-CAr50MIB.js","imports":["/assets/chunk-FNSCYPCZ-BHgC5cdx.js","/assets/chunk-EPOLDU6W-BCLmut3y.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-CqIc3cxq.js","/assets/client-only-BeMV-Wuv.js","/assets/button-Cd-ekki5.js","/assets/misc-W4055b-0.js","/assets/launch-editor-D2exGfVu.js","/assets/pe-CIZUOJMr.js","/assets/progress-bar-DpWhcyhC.js","/assets/root-loader-BOzEMapJ.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-DAnX-T3_.js","imports":["/assets/chunk-EPOLDU6W-BCLmut3y.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/misc-W4055b-0.js","/assets/tooltip-Tlsyx2YO.js","/assets/launch-editor-D2exGfVu.js","/assets/index-CqIc3cxq.js","/assets/index-vDCSPjrM.js","/assets/progress-bar-DpWhcyhC.js","/assets/pe-CIZUOJMr.js","/assets/root-loader-BOzEMapJ.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-DroM8fzS.js","imports":["/assets/chunk-EPOLDU6W-BCLmut3y.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/misc-W4055b-0.js","/assets/index-CqIc3cxq.js","/assets/tooltip-Tlsyx2YO.js","/assets/progress-BcA4i0iU.js","/assets/root-loader-BOzEMapJ.js","/assets/index-vDCSPjrM.js","/assets/pe-CIZUOJMr.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+/offline-videos":{"id":"routes/admin+/offline-videos","parentId":"routes/admin+/_layout","path":"offline-videos","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/offline-videos-BP7_xJkO.js","imports":["/assets/chunk-EPOLDU6W-BCLmut3y.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/misc-W4055b-0.js","/assets/index-CqIc3cxq.js"],"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-f8qqYbyU.js","imports":["/assets/chunk-EPOLDU6W-BCLmut3y.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/workshop-config-Zfc8zU0x.js","/assets/index-CqIc3cxq.js","/assets/root-loader-BOzEMapJ.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-DwJn8fSQ.js","imports":["/assets/chunk-EPOLDU6W-BCLmut3y.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/misc-W4055b-0.js","/assets/diff-HIgoC1PO.js","/assets/nav-chevrons-Dk4GtZwQ.js","/assets/index-CqIc3cxq.js","/assets/accordion-CQ7oujC6.js","/assets/tooltip-Tlsyx2YO.js","/assets/index-vDCSPjrM.js","/assets/index-CJDOQ1bl.js","/assets/index-ynYvVAOK.js","/assets/mdx-Dun3ONG_.js","/assets/index-DzdDahau.js","/assets/epic-video-DnXXh6qE.js","/assets/use-event-source-BuD4_2SF.js","/assets/index-CdzVFL-Z.js","/assets/root-loader-BOzEMapJ.js","/assets/pe-CIZUOJMr.js","/assets/schemas-Uj5SZtvt.js","/assets/online-DiNLkgTC.js","/assets/loading-CDNzW5oO.js","/assets/user-BsPobzjB.js","/assets/workshop-config-Zfc8zU0x.js","/assets/preload-helper-BXl3LOEh.js","/assets/launch-editor-D2exGfVu.js","/assets/progress-bar-DpWhcyhC.js","/assets/revalidation-ws-BJWJviUX.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/mark-onboarding-complete":{"id":"routes/mark-onboarding-complete","parentId":"root","path":"mark-onboarding-complete","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/mark-onboarding-complete-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-DEq93iL_.js","imports":["/assets/chunk-EPOLDU6W-BCLmut3y.js","/assets/jsx-runtime-C5WNSv3b.js","/assets/index-CqIc3cxq.js","/assets/epic-video-DnXXh6qE.js","/assets/use-event-source-BuD4_2SF.js","/assets/index-DzdDahau.js","/assets/index-vDCSPjrM.js","/assets/index-CdzVFL-Z.js","/assets/misc-W4055b-0.js","/assets/tooltip-Tlsyx2YO.js","/assets/root-loader-BOzEMapJ.js","/assets/pe-CIZUOJMr.js","/assets/schemas-Uj5SZtvt.js","/assets/online-DiNLkgTC.js","/assets/loading-CDNzW5oO.js","/assets/user-BsPobzjB.js","/assets/workshop-config-Zfc8zU0x.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/persist-playground":{"id":"routes/persist-playground","parentId":"root","path":"persist-playground","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/persist-playground-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/resources+/offline-video-progress.$playbackId":{"id":"routes/resources+/offline-video-progress.$playbackId","parentId":"root","path":"resources/offline-video-progress/:playbackId","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/offline-video-progress._playbackId-l0sNRNKZ.js","imports":[],"css":[]},"routes/resources+/offline-videos":{"id":"routes/resources+/offline-videos","parentId":"root","path":"resources/offline-videos","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/offline-videos-l0sNRNKZ.js","imports":[],"css":[]},"routes/resources+/offline-videos.$playbackId":{"id":"routes/resources+/offline-videos.$playbackId","parentId":"routes/resources+/offline-videos","path":":playbackId","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/offline-videos._playbackId-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/saved-playgrounds":{"id":"routes/saved-playgrounds","parentId":"root","path":"saved-playgrounds","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasClientMiddleware":false,"hasErrorBoundary":false,"module":"/assets/saved-playgrounds-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-b4d09d3a.js","version":"b4d09d3a"};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{j as e}from"./jsx-runtime-C5WNSv3b.js";import{r as a}from"./index-CqIc3cxq.js";import{I as n}from"./misc-W4055b-0.js";function d({exerciseNumber:r}){const[t,s]=a.useState(!1),i=r?`Please quiz me on exercise ${r} using the epicshop MCP server. Call the get_quiz_instructions tool with exerciseNumber "${r}" to get the quiz instructions, then quiz me one question at a time.`:"Please quiz me on this workshop using the epicshop MCP server. Call the get_quiz_instructions tool to get the quiz instructions, then quiz me one question at a time.";a.useEffect(()=>{if(t){const o=setTimeout(()=>s(!1),1e3);return()=>clearTimeout(o)}},[t]);const l=async()=>{try{await navigator.clipboard.writeText(i),s(!0)}catch(o){console.error("Failed to copy to clipboard:",o)}};return e.jsxs("div",{className:"border-t border-border pt-6 mt-6",children:[e.jsx("h2",{className:"text-foreground text-xl font-semibold mb-3",children:"Test Your Knowledge"}),e.jsx("p",{className:"text-muted-foreground mb-4",children:"Retrieval practice helps solidify learning by actively recalling information. Use this prompt with your AI assistant to quiz yourself on what you've learned."}),e.jsxs("div",{className:"bg-background border border-border rounded-lg p-4 mb-4 relative",children:[e.jsx("pre",{className:"text-foreground text-sm whitespace-pre-wrap break-words pr-10",children:i}),e.jsx("button",{onClick:l,className:"absolute top-4 right-4 text-muted-foreground hover:text-foreground transition-colors","aria-label":t?"Copied!":"Copy prompt to clipboard",children:e.jsx(n,{name:t?"CheckSmall":"Copy",size:"sm"})})]}),e.jsx("p",{className:"text-muted-foreground text-sm",children:e.jsxs("a",{href:"https://www.epicai.pro/your-ai-assistant-instructor-the-epicshop-mcp-server-0eazr",target:"_blank",rel:"noopener noreferrer",className:"text-foreground hover:underline inline-flex items-center gap-1.5",children:["Learn how to set up the epicshop MCP server",e.jsx(n,{name:"ExternalLink",size:"sm"})]})})]})}export{d as R};
|
|
2
|
+
//# sourceMappingURL=retrieval-practice-CBwxJaFi.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retrieval-practice-CBwxJaFi.js","sources":["../../../app/components/retrieval-practice.tsx"],"sourcesContent":["import * as React from 'react'\nimport { Icon } from '#app/components/icons.tsx'\n\nexport function RetrievalPractice({\n\texerciseNumber,\n}: {\n\texerciseNumber?: number\n}) {\n\tconst [copied, setCopied] = React.useState(false)\n\n\tconst prompt = exerciseNumber\n\t\t? `Please quiz me on exercise ${exerciseNumber} using the epicshop MCP server. Call the get_quiz_instructions tool with exerciseNumber \"${exerciseNumber}\" to get the quiz instructions, then quiz me one question at a time.`\n\t\t: `Please quiz me on this workshop using the epicshop MCP server. Call the get_quiz_instructions tool to get the quiz instructions, then quiz me one question at a time.`\n\n\tReact.useEffect(() => {\n\t\tif (copied) {\n\t\t\tconst timeoutId = setTimeout(() => setCopied(false), 1000)\n\t\t\treturn () => clearTimeout(timeoutId)\n\t\t}\n\t}, [copied])\n\n\tconst handleCopy = async () => {\n\t\ttry {\n\t\t\tawait navigator.clipboard.writeText(prompt)\n\t\t\tsetCopied(true)\n\t\t} catch (error) {\n\t\t\tconsole.error('Failed to copy to clipboard:', error)\n\t\t}\n\t}\n\n\treturn (\n\t\t<div className=\"border-t border-border pt-6 mt-6\">\n\t\t\t<h2 className=\"text-foreground text-xl font-semibold mb-3\">\n\t\t\t\tTest Your Knowledge\n\t\t\t</h2>\n\t\t\t<p className=\"text-muted-foreground mb-4\">\n\t\t\t\tRetrieval practice helps solidify learning by actively recalling\n\t\t\t\tinformation. Use this prompt with your AI assistant to quiz yourself on\n\t\t\t\twhat you've learned.\n\t\t\t</p>\n\t\t\t<div className=\"bg-background border border-border rounded-lg p-4 mb-4 relative\">\n\t\t\t\t<pre className=\"text-foreground text-sm whitespace-pre-wrap break-words pr-10\">\n\t\t\t\t\t{prompt}\n\t\t\t\t</pre>\n\t\t\t\t<button\n\t\t\t\t\tonClick={handleCopy}\n\t\t\t\t\tclassName=\"absolute top-4 right-4 text-muted-foreground hover:text-foreground transition-colors\"\n\t\t\t\t\taria-label={copied ? 'Copied!' : 'Copy prompt to clipboard'}\n\t\t\t\t>\n\t\t\t\t\t<Icon name={copied ? 'CheckSmall' : 'Copy'} size=\"sm\" />\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t\t<p className=\"text-muted-foreground text-sm\">\n\t\t\t\t<a\n\t\t\t\t\thref=\"https://www.epicai.pro/your-ai-assistant-instructor-the-epicshop-mcp-server-0eazr\"\n\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\t\tclassName=\"text-foreground hover:underline inline-flex items-center gap-1.5\"\n\t\t\t\t>\n\t\t\t\t\tLearn how to set up the epicshop MCP server\n\t\t\t\t\t<Icon name=\"ExternalLink\" size=\"sm\" />\n\t\t\t\t</a>\n\t\t\t</p>\n\t\t</div>\n\t)\n}\n"],"names":["RetrievalPractice","exerciseNumber","copied","setCopied","React.useState","prompt","React.useEffect","timeoutId","handleCopy","error","jsxs","jsx","Icon"],"mappings":"6HAGO,SAASA,EAAkB,CACjC,eAAAC,CACD,EAEG,CACF,KAAM,CAACC,EAAQC,CAAS,EAAIC,EAAAA,SAAe,EAAK,EAE1CC,EAASJ,EACZ,8BAA8BA,CAAc,4FAA4FA,CAAc,uEACtJ,wKAEHK,EAAAA,UAAgB,IAAM,CACrB,GAAIJ,EAAQ,CACX,MAAMK,EAAY,WAAW,IAAMJ,EAAU,EAAK,EAAG,GAAI,EACzD,MAAO,IAAM,aAAaI,CAAS,CACpC,CACD,EAAG,CAACL,CAAM,CAAC,EAEX,MAAMM,EAAa,SAAY,CAC9B,GAAI,CACH,MAAM,UAAU,UAAU,UAAUH,CAAM,EAC1CF,EAAU,EAAI,CACf,OAASM,EAAO,CACf,QAAQ,MAAM,+BAAgCA,CAAK,CACpD,CACD,EAEA,OACCC,EAAAA,KAAC,MAAA,CAAI,UAAU,mCACd,SAAA,CAAAC,EAAAA,IAAC,KAAA,CAAG,UAAU,6CAA6C,SAAA,sBAE3D,EACAA,EAAAA,IAAC,IAAA,CAAE,UAAU,6BAA6B,SAAA,gKAI1C,EACAD,EAAAA,KAAC,MAAA,CAAI,UAAU,kEACd,SAAA,CAAAC,EAAAA,IAAC,MAAA,CAAI,UAAU,gEACb,SAAAN,EACF,EACAM,EAAAA,IAAC,SAAA,CACA,QAASH,EACT,UAAU,uFACV,aAAYN,EAAS,UAAY,2BAEjC,eAACU,EAAA,CAAK,KAAMV,EAAS,aAAe,OAAQ,KAAK,IAAA,CAAK,CAAA,CAAA,CACvD,EACD,EACAS,EAAAA,IAAC,IAAA,CAAE,UAAU,gCACZ,SAAAD,EAAAA,KAAC,IAAA,CACA,KAAK,oFACL,OAAO,SACP,IAAI,sBACJ,UAAU,mEACV,SAAA,CAAA,8CAEAC,EAAAA,IAACC,EAAA,CAAK,KAAK,eAAe,KAAK,IAAA,CAAK,CAAA,CAAA,CAAA,CACrC,CACD,CAAA,EACD,CAEF"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index.client-CsIUPfXc.js","assets/index-CqIc3cxq.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{_ as Y}from"./preload-helper-BXl3LOEh.js";import{L as Q,f as L,w as H,a as $,b as q,k as z,O as K,M as X,P as J,S as Z,Q as ee}from"./chunk-EPOLDU6W-BCLmut3y.js";import{j as a}from"./jsx-runtime-C5WNSv3b.js";import{g as te,R as O,r as f}from"./index-CqIc3cxq.js";import{I as B,d as ne,u as re,c as ie}from"./misc-W4055b-0.js";import{C as se}from"./client-only-BeMV-Wuv.js";import{G as oe}from"./error-boundary-DxHqAEHX.js";import{D as ae,a as ce,b as ue,c as le,d as fe}from"./dialog-CzO65Z5w.js";import{E as he}from"./progress-bar-DpWhcyhC.js";import{T as de,t as h}from"./index-DzdDahau.js";import{m as pe}from"./tooltip-Tlsyx2YO.js";import{o as me,s as ve,j as xe}from"./schemas-Uj5SZtvt.js";import{u as ge,C as ye}from"./index-CdzVFL-Z.js";import{P as we}from"./presence-VCvV2mg7.js";import{g as ke}from"./seo-t5J-DRxw.js";import"./pe-CIZUOJMr.js";import"./index-ynYvVAOK.js";import"./index-vDCSPjrM.js";import"./root-loader-BOzEMapJ.js";import"./online-DiNLkgTC.js";import"./coerce-CkHW0SMv.js";var _,A;function je(){if(A)return _;A=1;var s={linear:function(e,n,t,i){var r=t-n;return r*e/i+n},easeInQuad:function(e,n,t,i){var r=t-n;return r*(e/=i)*e+n},easeOutQuad:function(e,n,t,i){var r=t-n;return-r*(e/=i)*(e-2)+n},easeInOutQuad:function(e,n,t,i){var r=t-n;return(e/=i/2)<1?r/2*e*e+n:-r/2*(--e*(e-2)-1)+n},easeInCubic:function(e,n,t,i){var r=t-n;return r*(e/=i)*e*e+n},easeOutCubic:function(e,n,t,i){var r=t-n;return r*((e=e/i-1)*e*e+1)+n},easeInOutCubic:function(e,n,t,i){var r=t-n;return(e/=i/2)<1?r/2*e*e*e+n:r/2*((e-=2)*e*e+2)+n},easeInQuart:function(e,n,t,i){var r=t-n;return r*(e/=i)*e*e*e+n},easeOutQuart:function(e,n,t,i){var r=t-n;return-r*((e=e/i-1)*e*e*e-1)+n},easeInOutQuart:function(e,n,t,i){var r=t-n;return(e/=i/2)<1?r/2*e*e*e*e+n:-r/2*((e-=2)*e*e*e-2)+n},easeInQuint:function(e,n,t,i){var r=t-n;return r*(e/=i)*e*e*e*e+n},easeOutQuint:function(e,n,t,i){var r=t-n;return r*((e=e/i-1)*e*e*e*e+1)+n},easeInOutQuint:function(e,n,t,i){var r=t-n;return(e/=i/2)<1?r/2*e*e*e*e*e+n:r/2*((e-=2)*e*e*e*e+2)+n},easeInSine:function(e,n,t,i){var r=t-n;return-r*Math.cos(e/i*(Math.PI/2))+r+n},easeOutSine:function(e,n,t,i){var r=t-n;return r*Math.sin(e/i*(Math.PI/2))+n},easeInOutSine:function(e,n,t,i){var r=t-n;return-r/2*(Math.cos(Math.PI*e/i)-1)+n},easeInExpo:function(e,n,t,i){var r=t-n;return e==0?n:r*Math.pow(2,10*(e/i-1))+n},easeOutExpo:function(e,n,t,i){var r=t-n;return e==i?n+r:r*(-Math.pow(2,-10*e/i)+1)+n},easeInOutExpo:function(e,n,t,i){var r=t-n;return e===0?n:e===i?n+r:(e/=i/2)<1?r/2*Math.pow(2,10*(e-1))+n:r/2*(-Math.pow(2,-10*--e)+2)+n},easeInCirc:function(e,n,t,i){var r=t-n;return-r*(Math.sqrt(1-(e/=i)*e)-1)+n},easeOutCirc:function(e,n,t,i){var r=t-n;return r*Math.sqrt(1-(e=e/i-1)*e)+n},easeInOutCirc:function(e,n,t,i){var r=t-n;return(e/=i/2)<1?-r/2*(Math.sqrt(1-e*e)-1)+n:r/2*(Math.sqrt(1-(e-=2)*e)+1)+n},easeInElastic:function(e,n,t,i){var r=t-n,o,c,u;return u=1.70158,c=0,o=r,e===0?n:(e/=i)===1?n+r:(c||(c=i*.3),o<Math.abs(r)?(o=r,u=c/4):u=c/(2*Math.PI)*Math.asin(r/o),-(o*Math.pow(2,10*(e-=1))*Math.sin((e*i-u)*(2*Math.PI)/c))+n)},easeOutElastic:function(e,n,t,i){var r=t-n,o,c,u;return u=1.70158,c=0,o=r,e===0?n:(e/=i)===1?n+r:(c||(c=i*.3),o<Math.abs(r)?(o=r,u=c/4):u=c/(2*Math.PI)*Math.asin(r/o),o*Math.pow(2,-10*e)*Math.sin((e*i-u)*(2*Math.PI)/c)+r+n)},easeInOutElastic:function(e,n,t,i){var r=t-n,o,c,u;return u=1.70158,c=0,o=r,e===0?n:(e/=i/2)===2?n+r:(c||(c=i*(.3*1.5)),o<Math.abs(r)?(o=r,u=c/4):u=c/(2*Math.PI)*Math.asin(r/o),e<1?-.5*(o*Math.pow(2,10*(e-=1))*Math.sin((e*i-u)*(2*Math.PI)/c))+n:o*Math.pow(2,-10*(e-=1))*Math.sin((e*i-u)*(2*Math.PI)/c)*.5+r+n)},easeInBack:function(e,n,t,i,r){var o=t-n;return r===void 0&&(r=1.70158),o*(e/=i)*e*((r+1)*e-r)+n},easeOutBack:function(e,n,t,i,r){var o=t-n;return r===void 0&&(r=1.70158),o*((e=e/i-1)*e*((r+1)*e+r)+1)+n},easeInOutBack:function(e,n,t,i,r){var o=t-n;return r===void 0&&(r=1.70158),(e/=i/2)<1?o/2*(e*e*(((r*=1.525)+1)*e-r))+n:o/2*((e-=2)*e*(((r*=1.525)+1)*e+r)+2)+n},easeInBounce:function(e,n,t,i){var r=t-n,o;return o=s.easeOutBounce(i-e,0,r,i),r-o+n},easeOutBounce:function(e,n,t,i){var r=t-n;return(e/=i)<1/2.75?r*(7.5625*e*e)+n:e<2/2.75?r*(7.5625*(e-=1.5/2.75)*e+.75)+n:e<2.5/2.75?r*(7.5625*(e-=2.25/2.75)*e+.9375)+n:r*(7.5625*(e-=2.625/2.75)*e+.984375)+n},easeInOutBounce:function(e,n,t,i){var r=t-n,o;return e<i/2?(o=s.easeInBounce(e*2,0,r,i),o*.5+n):(o=s.easeOutBounce(e*2-i,0,r,i),o*.5+r*.5+n)}};return _=s,_}var Pe=je();const Ie=te(Pe);function Oe(s,e){for(var n=0;n<e.length;n++){var t=e[n];t.enumerable=t.enumerable||!1,t.configurable=!0,"value"in t&&(t.writable=!0),Object.defineProperty(s,t.key,t)}}function be(s,e,n){return e&&Oe(s.prototype,e),s}function b(){return b=Object.assign||function(s){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var t in n)Object.prototype.hasOwnProperty.call(n,t)&&(s[t]=n[t])}return s},b.apply(this,arguments)}function Se(s,e){s.prototype=Object.create(e.prototype),s.prototype.constructor=s,R(s,e)}function R(s,e){return R=Object.setPrototypeOf||function(t,i){return t.__proto__=i,t},R(s,e)}function Ne(s){return s*Math.PI/180}function d(s,e){return s+Math.random()*(e-s)}function Ce(s,e){return Math.floor(s+Math.random()*(e-s+1))}var I;(function(s){s[s.Circle=0]="Circle",s[s.Square=1]="Square",s[s.Strip=2]="Strip"})(I||(I={}));var x;(function(s){s[s.Positive=1]="Positive",s[s.Negative=-1]="Negative"})(x||(x={}));var Ee=(function(){function s(n,t,i,r){this.getOptions=t;var o=this.getOptions(),c=o.colors,u=o.initialVelocityX,l=o.initialVelocityY;this.context=n,this.x=i,this.y=r,this.w=d(5,20),this.h=d(5,20),this.radius=d(5,10),this.vx=d(-u,u),this.vy=d(-l,0),this.shape=Ce(0,2),this.angle=Ne(d(0,360)),this.angularSpin=d(-.2,.2),this.color=c[Math.floor(Math.random()*c.length)],this.rotateY=d(0,1),this.rotationDirection=d(0,1)?x.Positive:x.Negative}var e=s.prototype;return e.update=function(){var t=this.getOptions(),i=t.gravity,r=t.wind,o=t.friction,c=t.opacity,u=t.drawShape;this.x+=this.vx,this.y+=this.vy,this.vy+=i,this.vx+=r,this.vx*=o,this.vy*=o,this.rotateY>=1&&this.rotationDirection===x.Positive?this.rotationDirection=x.Negative:this.rotateY<=-1&&this.rotationDirection===x.Negative&&(this.rotationDirection=x.Positive);var l=.1*this.rotationDirection;if(this.rotateY+=l,this.angle+=this.angularSpin,this.context.save(),this.context.translate(this.x,this.y),this.context.rotate(this.angle),this.context.scale(1,this.rotateY),this.context.rotate(this.angle),this.context.beginPath(),this.context.fillStyle=this.color,this.context.strokeStyle=this.color,this.context.globalAlpha=c,this.context.lineCap="round",this.context.lineWidth=2,u&&typeof u=="function")u.call(this,this.context);else switch(this.shape){case I.Circle:{this.context.beginPath(),this.context.arc(0,0,this.radius,0,2*Math.PI),this.context.fill();break}case I.Square:{this.context.fillRect(-this.w/2,-this.h/2,this.w,this.h);break}case I.Strip:{this.context.fillRect(-this.w/6,-this.h/2,this.w/3,this.h);break}default:throw new Error("Unknown type in Particle.ts")}this.context.closePath(),this.context.restore()},s})(),Me=function(e,n){var t=this;this.x=0,this.y=0,this.w=0,this.h=0,this.lastNumberOfPieces=0,this.tweenInitTime=Date.now(),this.particles=[],this.particlesGenerated=0,this.removeParticleAt=function(r){t.particles.splice(r,1)},this.getParticle=function(){var r=d(t.x,t.w+t.x),o=d(t.y,t.h+t.y);return new Ee(t.context,t.getOptions,r,o)},this.animate=function(){var r=t.canvas,o=t.context,c=t.particlesGenerated,u=t.lastNumberOfPieces,l=t.getOptions(),w=l.run,S=l.recycle,p=l.numberOfPieces,C=l.debug,m=l.tweenFunction,y=l.tweenDuration;if(!w)return!1;var g=t.particles.length,v=S?g:c,N=Date.now();if(v<p){u!==p&&(t.tweenInitTime=N,t.lastNumberOfPieces=p);for(var k=t.tweenInitTime,E=N-k>y?y:Math.max(0,N-k),M=m(E,v,p,y),j=Math.round(M-v),G=0;G<j;G+=1)t.particles.push(t.getParticle());t.particlesGenerated+=j}return C&&(o.font="12px sans-serif",o.fillStyle="#333",o.textAlign="right",o.fillText("Particles: "+g,r.width-10,r.height-20)),t.particles.forEach(function(P,U){P.update(),(P.y>r.height||P.y<-100||P.x>r.width+100||P.x<-100)&&(S&&v<=p?t.particles[U]=t.getParticle():t.removeParticleAt(U))}),g>0||v<p},this.canvas=e;var i=this.canvas.getContext("2d");if(!i)throw new Error("Could not get canvas context");this.context=i,this.getOptions=n},T={width:typeof window<"u"?window.innerWidth:300,height:typeof window<"u"?window.innerHeight:200,numberOfPieces:200,friction:.99,wind:0,gravity:.1,initialVelocityX:4,initialVelocityY:10,colors:["#f44336","#e91e63","#9c27b0","#673ab7","#3f51b5","#2196f3","#03a9f4","#00bcd4","#009688","#4CAF50","#8BC34A","#CDDC39","#FFEB3B","#FFC107","#FF9800","#FF5722","#795548"],opacity:1,debug:!1,tweenFunction:Ie.easeInOutQuad,tweenDuration:5e3,recycle:!0,run:!0},_e=(function(){function s(e,n){var t=this;this.setOptionsWithDefaults=function(r){var o={confettiSource:{x:0,y:0,w:t.canvas.width,h:0}};t._options=b({},o,T,r),Object.assign(t,r.confettiSource)},this.update=function(){var r=t.options,o=r.run,c=r.onConfettiComplete,u=t.canvas,l=t.context;o&&(l.fillStyle="white",l.clearRect(0,0,u.width,u.height)),t.generator.animate()?t.rafId=requestAnimationFrame(t.update):(c&&typeof c=="function"&&t.generator.particlesGenerated>0&&c.call(t,t),t._options.run=!1)},this.reset=function(){t.generator&&t.generator.particlesGenerated>0&&(t.generator.particlesGenerated=0,t.generator.particles=[],t.generator.lastNumberOfPieces=0)},this.stop=function(){t.options={run:!1},t.rafId&&(cancelAnimationFrame(t.rafId),t.rafId=void 0)},this.canvas=e;var i=this.canvas.getContext("2d");if(!i)throw new Error("Could not get canvas context");this.context=i,this.generator=new Me(this.canvas,function(){return t.options}),this.options=n,this.update()}return be(s,[{key:"options",get:function(){return this._options},set:function(n){var t=this._options&&this._options.run,i=this._options&&this._options.recycle;this.setOptionsWithDefaults(n),this.generator&&(Object.assign(this.generator,this.options.confettiSource),typeof n.recycle=="boolean"&&n.recycle&&i===!1&&(this.generator.lastNumberOfPieces=this.generator.particles.length)),typeof n.run=="boolean"&&n.run&&t===!1&&this.update()}}]),s})(),W=O.createRef();function D(s){var e={},n={},t={},i=[].concat(Object.keys(T),["confettiSource","drawShape","onConfettiComplete"]),r=["canvasRef"];return Object.keys(s).forEach(function(o){var c=s[o];i.includes(o)?e[o]=c:r.includes(o)?r[o]=c:t[o]=c}),[e,t,n]}var F=(function(s){Se(e,s);function e(t){var i;return i=s.call(this,t)||this,i.canvas=O.createRef(),i.canvas=t.canvasRef||W,i}var n=e.prototype;return n.componentDidMount=function(){if(this.canvas.current){var i=D(this.props)[0];this.confetti=new _e(this.canvas.current,i)}},n.componentDidUpdate=function(){var i=D(this.props)[0];this.confetti&&(this.confetti.options=i)},n.componentWillUnmount=function(){this.confetti&&this.confetti.stop(),this.confetti=void 0},n.render=function(){var i=D(this.props),r=i[0],o=i[1],c=b({zIndex:2,position:"absolute",pointerEvents:"none",top:0,left:0,bottom:0,right:0},o.style);return O.createElement("canvas",Object.assign({width:r.width,height:r.height,ref:this.canvas},o,{style:c}))},e})(f.Component);F.defaultProps=b({},T);F.displayName="ConfettiReact";var De=O.forwardRef(function(s,e){return O.createElement(F,Object.assign({canvasRef:W},s))});function Re({id:s}){return s?a.jsx(se,{children:()=>a.jsx(De,{run:!!s,recycle:!1,numberOfPieces:800,width:window.innerWidth,height:window.innerHeight},s)}):null}function Te(){return a.jsx("div",{className:"border-destructive bg-destructive fixed top-0 right-0 left-0 z-50 border-b",children:a.jsxs("div",{className:"relative w-full p-4",children:[a.jsx(Q,{to:"/workspace-structure",className:"absolute inset-0 z-10 block h-full w-full","aria-label":"Learn more about workspace structure"}),a.jsxs("div",{className:"relative z-0 container flex items-center justify-between",children:[a.jsxs("div",{className:"flex items-center gap-3",children:[a.jsx(B,{name:"Error",className:"text-destructive-foreground h-5 w-5"}),a.jsxs("div",{children:[a.jsx("h3",{className:"text-destructive-foreground text-sm font-semibold",children:"Warning: Changes detected in exercises directory"}),a.jsx("p",{className:"text-destructive-foreground/80 text-xs",children:"You should typically work in the playground directory, not the exercises directory."})]})]}),a.jsxs("div",{className:"text-destructive-foreground flex items-center gap-2 text-xs",children:[a.jsx("span",{children:"Learn more"}),a.jsx(B,{name:"ArrowRight",className:"h-3 w-3"})]})]})]})})}const Fe=[{title:"Navigation",shortcuts:[{keys:["g","h"],description:"Go to home"},{keys:["g","1-9"],description:"Go to exercise (e.g., g+1 → /exercise/01)"},{keys:["g","1-9",".","1-9"],description:"Go to exercise step (e.g., g+1+.+2 → /exercise/01/02/problem)"},{keys:["g","1-9",".","f"],description:"Go to exercise finished page (e.g., g+1+.+f → /exercise/01/finished)"},{keys:["g","p"],description:"Go to previous step/page"},{keys:["g","n"],description:"Go to next step/page"},{keys:["g","a"],description:"Go to account page"},{keys:["g","d"],description:"Go to admin page"},{keys:["g","l"],description:"Go to last exercise solution"},{keys:["Escape"],description:"Close sidebar navigation (when open)"}]},{title:"Playback Controls",shortcuts:[{keys:["Space","k"],description:"Play/pause video"},{keys:["j"],description:"Seek backward 10 seconds"},{keys:["l"],description:"Seek forward 10 seconds"},{keys:["←"],description:"Seek backward 10 seconds"},{keys:["→"],description:"Seek forward 10 seconds"}]},{title:"Frame-by-Frame Navigation",shortcuts:[{keys:[","],description:"Go to previous frame (when paused)"},{keys:["."],description:"Go to next frame (when paused)"}]},{title:"Volume Control",shortcuts:[{keys:["↑"],description:"Increase volume by 10%"},{keys:["↓"],description:"Decrease volume by 10%"}]},{title:"Playback Speed",shortcuts:[{keys:["Shift",">"],description:"Increase playback speed"},{keys:["Shift","<"],description:"Decrease playback speed"}]},{title:"Fullscreen and Picture-in-Picture",shortcuts:[{keys:["f"],description:"Toggle fullscreen mode"},{keys:["i"],description:"Toggle picture-in-picture mode"}]},{title:"Captions",shortcuts:[{keys:["c"],description:"Toggle captions/subtitles"}]},{title:"Quick Seek",shortcuts:[{keys:["0-9"],description:"Seek to percentage of video (0 = 0%, 1 = 10%, ..., 9 = 90%)"}]}];function Ge({open:s,onOpenChange:e}){return a.jsx(ae,{open:s,onOpenChange:e,children:a.jsxs(ce,{className:"max-h-[80vh] max-w-2xl overflow-y-auto",children:[a.jsxs(ue,{children:[a.jsx(le,{children:"Keyboard Shortcuts"}),a.jsxs(fe,{children:["Use these keyboard shortcuts to navigate and control the video player. Press"," ",a.jsx("kbd",{className:"border-border bg-muted rounded border px-1.5 py-0.5 font-mono text-xs",children:"?"})," ","or select the question mark icon in the navigation to open this list."]})]}),a.jsx("div",{className:"space-y-6",children:Fe.map(n=>a.jsxs("div",{children:[a.jsx("h3",{className:"text-foreground mb-3 text-sm font-semibold",children:n.title}),a.jsx("div",{className:"space-y-2",children:n.shortcuts.map((t,i)=>a.jsxs("div",{className:"flex items-center justify-between gap-4",children:[a.jsx("span",{className:"text-muted-foreground flex-1 text-sm",children:t.description}),a.jsx("div",{className:"flex shrink-0 items-center gap-1",children:t.keys.map((r,o)=>a.jsxs(f.Fragment,{children:[a.jsx("kbd",{className:"border-border bg-muted rounded border px-2 py-1 font-mono text-xs",children:r}),o<t.keys.length-1&&a.jsx("span",{className:"text-muted-foreground",children:"+"})]},o))})]},i))})]},n.title))}),a.jsx("div",{className:"border-border mt-4 border-t pt-4",children:a.jsxs("p",{className:"text-muted-foreground text-xs",children:[a.jsx("strong",{children:"Note:"})," Shortcuts are ignored when focus is on interactive elements (inputs, buttons, etc.). Press"," ",a.jsx("kbd",{className:"border-border bg-muted rounded border px-1.5 py-0.5 font-mono text-xs",children:"?"})," ","to toggle this dialog."]})})]})})}function Ue({toast:s}){return a.jsxs(a.Fragment,{children:[a.jsx(de,{closeButton:!0,position:"top-center"}),s?a.jsx(Be,{toast:s}):null]})}function Be({toast:s}){const{id:e,type:n,title:t,description:i}=s;return f.useEffect(()=>{setTimeout(()=>{h[n](t,{id:e,description:i})},0)},[i,e,t,n]),null}function Ae({repoUpdates:s}){const{updatesAvailable:e,repoUpdatesAvailable:n,dependenciesNeedInstall:t,updateNotificationId:i,diffLink:r}=s,o=L(),c=f.useRef(o);f.useEffect(()=>{c.current=o},[o]);const u=f.useRef(null),l=f.useRef(null),w=f.useRef(!1);return f.useEffect(()=>{if(e&&i){l.current&&(h.dismiss(l.current),l.current=null);const S=n?"New workshop updates available":"Dependencies out of date",p=n?a.jsxs("div",{children:[t?"Get the latest updates and reinstall dependencies by clicking the update button. ":"Get the latest updates by clicking the update button. ",r?a.jsx("a",{href:r,target:"_blank",rel:"noreferrer",className:"text-xs underline",children:"View changes"}):null]}):a.jsxs("div",{children:["Your installed packages don't match package.json. ","Click the update button to reinstall dependencies."]}),C=h.info(S,{duration:1/0,description:p,onDismiss:()=>{},action:{label:"Update",onClick:async()=>{if(l.current&&(h.dismiss(l.current),l.current=null),u.current||(u.current=h.loading("Update in progress...")),!w.current){w.current=!0;try{const{EPICSHOP_PARENT_PORT:m,EPICSHOP_PARENT_TOKEN:y}=window.ENV||{};if(!m||!y)throw new Error("Update API not available");const g=await fetch(`http://localhost:${m}/__epicshop-restart`,{method:"POST",headers:{"x-epicshop-token":y}});if(!g.ok)throw new Error(`Request to update workshop failed: ${g.statusText}`);const v=await g.json().catch(()=>({})),k=me({status:xe(["ok","error"]),message:ve().optional()}).safeParse(v);if(!k.success)throw console.error("Invalid response from update API",v),new Error("Invalid response from update API");const{status:E,message:M}=k.data;if(E==="ok"){let j=!1;h.success("Workshop updated",{description:"Reloading in 2 seconds... You can reload now if you prefer.",duration:2e3,action:{label:"Reload now",onClick:()=>{j=!0,window.location.reload()}},onAutoClose:()=>{j||window.location.reload()}})}else h.error("Failed to update workshop",{description:M||"Unknown error"})}catch(m){h.error("Failed to update workshop",{description:m instanceof Error?m.message:String(m)})}finally{w.current=!1,u.current&&(h.dismiss(u.current),u.current=null)}}}},cancel:{label:"Dismiss",onClick:()=>{l.current&&(h.dismiss(l.current),l.current=null),c.current.submit({intent:"mute",id:i},{method:"post",action:"/admin/notifications"})}}});l.current=C}},[e,i,n,t,r]),null}function Le({unmutedNotifications:s}){const e=L(),n=f.useRef(e),t=f.useRef(new Set);return f.useEffect(()=>{for(const i of s)t.current.has(i.id)||(t.current.add(i.id),h.info(i.title,{id:i.id,description:a.jsxs("div",{children:[a.jsx("p",{children:i.message}),i.link&&a.jsx("a",{href:i.link,target:"_blank",className:"text-xs underline",children:"Learn more"})]}),duration:1/0,action:{label:"Dismiss",onClick:()=>{n.current.submit({intent:"mute",id:i.id},{method:"post",action:"/admin/notifications"})}}}))},[s]),null}const qe="/assets/app-BUxWY8xC.css",We="/assets/tailwind-C1_1LEqo.css",Ve="unknown@example.com";function Ye({user:s,userId:e}){const n=s?.id??e?.id??void 0,t=s?.email&&s.email!==Ve?s.email:void 0;if(!n&&!t)return null;const i={};return n&&(i.id=n),t&&(i.email=t),i}const pt=()=>[{rel:"stylesheet",href:"/neogrotesk-font.css"},{rel:"stylesheet",href:"https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:ital,wght@0,200;0,300;0,400;0,500;0,600;1,700&display=swap"},{rel:"stylesheet",href:We},{rel:"stylesheet",href:qe},{rel:"icon",href:"/favicon.ico",sizes:"48x48"},{rel:"icon",type:"image/svg+xml",href:"/favicon.svg"}],mt=({loaderData:s})=>s?ke({instructor:s.instructor,title:s.workshopTitle,description:s.workshopSubtitle,requestInfo:s.requestInfo}):[];function V({children:s,env:e={},className:n,style:t}){return a.jsxs("html",{lang:"en",className:n,style:t,children:[a.jsxs("head",{children:[a.jsx(ye,{}),a.jsx(X,{}),a.jsx("meta",{charSet:"utf-8"}),a.jsx("meta",{name:"viewport",content:"width=device-width,initial-scale=1"}),a.jsx(J,{}),a.jsx("script",{dangerouslySetInnerHTML:{__html:`window.ENV = ${JSON.stringify(e)}`}})]}),a.jsxs("body",{className:"bg-background text-foreground scrollbar-thin scrollbar-thumb-scrollbar h-screen-safe",children:[s,a.jsx(Z,{}),a.jsx(ee,{})]})]})}function Qe(){const s=q(),e=z(),n=ne.useSpinDelay(e.state!=="idle",{delay:400,minDuration:200}),t=re(),[i,r]=f.useState(!1);f.useEffect(()=>{const c=()=>{r(u=>!u)};return window.addEventListener("toggle-keyboard-shortcuts",c),()=>{window.removeEventListener("toggle-keyboard-shortcuts",c)}},[]),f.useEffect(()=>{if(!ENV.EPICSHOP_IS_PUBLISHED)return;const c=Ye({user:s.user,userId:s.userId});Y(()=>import("./index.client-CsIUPfXc.js"),__vite__mapDeps([0,1])).then(u=>{c?u.setUser(c):u.setUser(null)}).catch(()=>{})},[s.user,s.userId]);const o=ge();return a.jsxs(V,{style:s.preferences?.fontSize?{fontSize:`${s.preferences?.fontSize}px`}:{},className:ie("h-screen-safe antialiased",o,{"cursor-progress":n},t?"alt-down":null),env:s.ENV,children:[s.exerciseChanges&&!s.preferences?.exerciseWarning?.dismissed&&a.jsx(Te,{}),a.jsx(K,{}),a.jsx(Re,{id:s.confettiId}),a.jsx(Ue,{toast:s.toast}),a.jsx(Ae,{repoUpdates:s.repoUpdates}),a.jsx(he,{}),a.jsx(Le,{unmutedNotifications:s.unmutedNotifications}),a.jsx(Ge,{open:i,onOpenChange:r})]})}const vt=H(function(){const{user:e}=q();return a.jsx(we,{user:e,children:a.jsx(pe,{children:a.jsx(Qe,{})})})}),xt=$(function(){return a.jsx(V,{className:"h-screen-safe",children:a.jsx(oe,{})})});export{xt as ErrorBoundary,vt as default,pt as links,mt as meta};
|
|
3
|
-
//# sourceMappingURL=root-
|
|
2
|
+
import{_ as Y}from"./preload-helper-BXl3LOEh.js";import{L as Q,f as q,w as H,a as $,b as L,k as z,O as K,M as X,P as J,S as Z,Q as ee}from"./chunk-EPOLDU6W-BCLmut3y.js";import{j as a}from"./jsx-runtime-C5WNSv3b.js";import{g as te,R as O,r as f}from"./index-CqIc3cxq.js";import{I as B,d as ne,u as re,c as ie}from"./misc-W4055b-0.js";import{C as se}from"./client-only-BeMV-Wuv.js";import{G as oe}from"./error-boundary-DxHqAEHX.js";import{D as ae,a as ce,b as ue,c as le,d as fe}from"./dialog-CzO65Z5w.js";import{E as he}from"./progress-bar-DpWhcyhC.js";import{T as de,t as h}from"./index-DzdDahau.js";import{m as pe}from"./tooltip-Tlsyx2YO.js";import{o as me,s as ve,j as xe}from"./schemas-Uj5SZtvt.js";import{u as ge,C as ye}from"./index-CdzVFL-Z.js";import{P as we}from"./presence-VCvV2mg7.js";import{g as ke}from"./seo-t5J-DRxw.js";import"./pe-CIZUOJMr.js";import"./index-ynYvVAOK.js";import"./index-vDCSPjrM.js";import"./root-loader-BOzEMapJ.js";import"./online-DiNLkgTC.js";import"./coerce-CkHW0SMv.js";var _,A;function je(){if(A)return _;A=1;var s={linear:function(e,n,t,i){var r=t-n;return r*e/i+n},easeInQuad:function(e,n,t,i){var r=t-n;return r*(e/=i)*e+n},easeOutQuad:function(e,n,t,i){var r=t-n;return-r*(e/=i)*(e-2)+n},easeInOutQuad:function(e,n,t,i){var r=t-n;return(e/=i/2)<1?r/2*e*e+n:-r/2*(--e*(e-2)-1)+n},easeInCubic:function(e,n,t,i){var r=t-n;return r*(e/=i)*e*e+n},easeOutCubic:function(e,n,t,i){var r=t-n;return r*((e=e/i-1)*e*e+1)+n},easeInOutCubic:function(e,n,t,i){var r=t-n;return(e/=i/2)<1?r/2*e*e*e+n:r/2*((e-=2)*e*e+2)+n},easeInQuart:function(e,n,t,i){var r=t-n;return r*(e/=i)*e*e*e+n},easeOutQuart:function(e,n,t,i){var r=t-n;return-r*((e=e/i-1)*e*e*e-1)+n},easeInOutQuart:function(e,n,t,i){var r=t-n;return(e/=i/2)<1?r/2*e*e*e*e+n:-r/2*((e-=2)*e*e*e-2)+n},easeInQuint:function(e,n,t,i){var r=t-n;return r*(e/=i)*e*e*e*e+n},easeOutQuint:function(e,n,t,i){var r=t-n;return r*((e=e/i-1)*e*e*e*e+1)+n},easeInOutQuint:function(e,n,t,i){var r=t-n;return(e/=i/2)<1?r/2*e*e*e*e*e+n:r/2*((e-=2)*e*e*e*e+2)+n},easeInSine:function(e,n,t,i){var r=t-n;return-r*Math.cos(e/i*(Math.PI/2))+r+n},easeOutSine:function(e,n,t,i){var r=t-n;return r*Math.sin(e/i*(Math.PI/2))+n},easeInOutSine:function(e,n,t,i){var r=t-n;return-r/2*(Math.cos(Math.PI*e/i)-1)+n},easeInExpo:function(e,n,t,i){var r=t-n;return e==0?n:r*Math.pow(2,10*(e/i-1))+n},easeOutExpo:function(e,n,t,i){var r=t-n;return e==i?n+r:r*(-Math.pow(2,-10*e/i)+1)+n},easeInOutExpo:function(e,n,t,i){var r=t-n;return e===0?n:e===i?n+r:(e/=i/2)<1?r/2*Math.pow(2,10*(e-1))+n:r/2*(-Math.pow(2,-10*--e)+2)+n},easeInCirc:function(e,n,t,i){var r=t-n;return-r*(Math.sqrt(1-(e/=i)*e)-1)+n},easeOutCirc:function(e,n,t,i){var r=t-n;return r*Math.sqrt(1-(e=e/i-1)*e)+n},easeInOutCirc:function(e,n,t,i){var r=t-n;return(e/=i/2)<1?-r/2*(Math.sqrt(1-e*e)-1)+n:r/2*(Math.sqrt(1-(e-=2)*e)+1)+n},easeInElastic:function(e,n,t,i){var r=t-n,o,c,u;return u=1.70158,c=0,o=r,e===0?n:(e/=i)===1?n+r:(c||(c=i*.3),o<Math.abs(r)?(o=r,u=c/4):u=c/(2*Math.PI)*Math.asin(r/o),-(o*Math.pow(2,10*(e-=1))*Math.sin((e*i-u)*(2*Math.PI)/c))+n)},easeOutElastic:function(e,n,t,i){var r=t-n,o,c,u;return u=1.70158,c=0,o=r,e===0?n:(e/=i)===1?n+r:(c||(c=i*.3),o<Math.abs(r)?(o=r,u=c/4):u=c/(2*Math.PI)*Math.asin(r/o),o*Math.pow(2,-10*e)*Math.sin((e*i-u)*(2*Math.PI)/c)+r+n)},easeInOutElastic:function(e,n,t,i){var r=t-n,o,c,u;return u=1.70158,c=0,o=r,e===0?n:(e/=i/2)===2?n+r:(c||(c=i*(.3*1.5)),o<Math.abs(r)?(o=r,u=c/4):u=c/(2*Math.PI)*Math.asin(r/o),e<1?-.5*(o*Math.pow(2,10*(e-=1))*Math.sin((e*i-u)*(2*Math.PI)/c))+n:o*Math.pow(2,-10*(e-=1))*Math.sin((e*i-u)*(2*Math.PI)/c)*.5+r+n)},easeInBack:function(e,n,t,i,r){var o=t-n;return r===void 0&&(r=1.70158),o*(e/=i)*e*((r+1)*e-r)+n},easeOutBack:function(e,n,t,i,r){var o=t-n;return r===void 0&&(r=1.70158),o*((e=e/i-1)*e*((r+1)*e+r)+1)+n},easeInOutBack:function(e,n,t,i,r){var o=t-n;return r===void 0&&(r=1.70158),(e/=i/2)<1?o/2*(e*e*(((r*=1.525)+1)*e-r))+n:o/2*((e-=2)*e*(((r*=1.525)+1)*e+r)+2)+n},easeInBounce:function(e,n,t,i){var r=t-n,o;return o=s.easeOutBounce(i-e,0,r,i),r-o+n},easeOutBounce:function(e,n,t,i){var r=t-n;return(e/=i)<1/2.75?r*(7.5625*e*e)+n:e<2/2.75?r*(7.5625*(e-=1.5/2.75)*e+.75)+n:e<2.5/2.75?r*(7.5625*(e-=2.25/2.75)*e+.9375)+n:r*(7.5625*(e-=2.625/2.75)*e+.984375)+n},easeInOutBounce:function(e,n,t,i){var r=t-n,o;return e<i/2?(o=s.easeInBounce(e*2,0,r,i),o*.5+n):(o=s.easeOutBounce(e*2-i,0,r,i),o*.5+r*.5+n)}};return _=s,_}var Pe=je();const Ie=te(Pe);function Oe(s,e){for(var n=0;n<e.length;n++){var t=e[n];t.enumerable=t.enumerable||!1,t.configurable=!0,"value"in t&&(t.writable=!0),Object.defineProperty(s,t.key,t)}}function be(s,e,n){return e&&Oe(s.prototype,e),s}function b(){return b=Object.assign||function(s){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var t in n)Object.prototype.hasOwnProperty.call(n,t)&&(s[t]=n[t])}return s},b.apply(this,arguments)}function Se(s,e){s.prototype=Object.create(e.prototype),s.prototype.constructor=s,R(s,e)}function R(s,e){return R=Object.setPrototypeOf||function(t,i){return t.__proto__=i,t},R(s,e)}function Ne(s){return s*Math.PI/180}function d(s,e){return s+Math.random()*(e-s)}function Ce(s,e){return Math.floor(s+Math.random()*(e-s+1))}var I;(function(s){s[s.Circle=0]="Circle",s[s.Square=1]="Square",s[s.Strip=2]="Strip"})(I||(I={}));var x;(function(s){s[s.Positive=1]="Positive",s[s.Negative=-1]="Negative"})(x||(x={}));var Ee=(function(){function s(n,t,i,r){this.getOptions=t;var o=this.getOptions(),c=o.colors,u=o.initialVelocityX,l=o.initialVelocityY;this.context=n,this.x=i,this.y=r,this.w=d(5,20),this.h=d(5,20),this.radius=d(5,10),this.vx=d(-u,u),this.vy=d(-l,0),this.shape=Ce(0,2),this.angle=Ne(d(0,360)),this.angularSpin=d(-.2,.2),this.color=c[Math.floor(Math.random()*c.length)],this.rotateY=d(0,1),this.rotationDirection=d(0,1)?x.Positive:x.Negative}var e=s.prototype;return e.update=function(){var t=this.getOptions(),i=t.gravity,r=t.wind,o=t.friction,c=t.opacity,u=t.drawShape;this.x+=this.vx,this.y+=this.vy,this.vy+=i,this.vx+=r,this.vx*=o,this.vy*=o,this.rotateY>=1&&this.rotationDirection===x.Positive?this.rotationDirection=x.Negative:this.rotateY<=-1&&this.rotationDirection===x.Negative&&(this.rotationDirection=x.Positive);var l=.1*this.rotationDirection;if(this.rotateY+=l,this.angle+=this.angularSpin,this.context.save(),this.context.translate(this.x,this.y),this.context.rotate(this.angle),this.context.scale(1,this.rotateY),this.context.rotate(this.angle),this.context.beginPath(),this.context.fillStyle=this.color,this.context.strokeStyle=this.color,this.context.globalAlpha=c,this.context.lineCap="round",this.context.lineWidth=2,u&&typeof u=="function")u.call(this,this.context);else switch(this.shape){case I.Circle:{this.context.beginPath(),this.context.arc(0,0,this.radius,0,2*Math.PI),this.context.fill();break}case I.Square:{this.context.fillRect(-this.w/2,-this.h/2,this.w,this.h);break}case I.Strip:{this.context.fillRect(-this.w/6,-this.h/2,this.w/3,this.h);break}default:throw new Error("Unknown type in Particle.ts")}this.context.closePath(),this.context.restore()},s})(),Me=function(e,n){var t=this;this.x=0,this.y=0,this.w=0,this.h=0,this.lastNumberOfPieces=0,this.tweenInitTime=Date.now(),this.particles=[],this.particlesGenerated=0,this.removeParticleAt=function(r){t.particles.splice(r,1)},this.getParticle=function(){var r=d(t.x,t.w+t.x),o=d(t.y,t.h+t.y);return new Ee(t.context,t.getOptions,r,o)},this.animate=function(){var r=t.canvas,o=t.context,c=t.particlesGenerated,u=t.lastNumberOfPieces,l=t.getOptions(),w=l.run,S=l.recycle,p=l.numberOfPieces,C=l.debug,m=l.tweenFunction,y=l.tweenDuration;if(!w)return!1;var g=t.particles.length,v=S?g:c,N=Date.now();if(v<p){u!==p&&(t.tweenInitTime=N,t.lastNumberOfPieces=p);for(var k=t.tweenInitTime,E=N-k>y?y:Math.max(0,N-k),M=m(E,v,p,y),j=Math.round(M-v),G=0;G<j;G+=1)t.particles.push(t.getParticle());t.particlesGenerated+=j}return C&&(o.font="12px sans-serif",o.fillStyle="#333",o.textAlign="right",o.fillText("Particles: "+g,r.width-10,r.height-20)),t.particles.forEach(function(P,U){P.update(),(P.y>r.height||P.y<-100||P.x>r.width+100||P.x<-100)&&(S&&v<=p?t.particles[U]=t.getParticle():t.removeParticleAt(U))}),g>0||v<p},this.canvas=e;var i=this.canvas.getContext("2d");if(!i)throw new Error("Could not get canvas context");this.context=i,this.getOptions=n},T={width:typeof window<"u"?window.innerWidth:300,height:typeof window<"u"?window.innerHeight:200,numberOfPieces:200,friction:.99,wind:0,gravity:.1,initialVelocityX:4,initialVelocityY:10,colors:["#f44336","#e91e63","#9c27b0","#673ab7","#3f51b5","#2196f3","#03a9f4","#00bcd4","#009688","#4CAF50","#8BC34A","#CDDC39","#FFEB3B","#FFC107","#FF9800","#FF5722","#795548"],opacity:1,debug:!1,tweenFunction:Ie.easeInOutQuad,tweenDuration:5e3,recycle:!0,run:!0},_e=(function(){function s(e,n){var t=this;this.setOptionsWithDefaults=function(r){var o={confettiSource:{x:0,y:0,w:t.canvas.width,h:0}};t._options=b({},o,T,r),Object.assign(t,r.confettiSource)},this.update=function(){var r=t.options,o=r.run,c=r.onConfettiComplete,u=t.canvas,l=t.context;o&&(l.fillStyle="white",l.clearRect(0,0,u.width,u.height)),t.generator.animate()?t.rafId=requestAnimationFrame(t.update):(c&&typeof c=="function"&&t.generator.particlesGenerated>0&&c.call(t,t),t._options.run=!1)},this.reset=function(){t.generator&&t.generator.particlesGenerated>0&&(t.generator.particlesGenerated=0,t.generator.particles=[],t.generator.lastNumberOfPieces=0)},this.stop=function(){t.options={run:!1},t.rafId&&(cancelAnimationFrame(t.rafId),t.rafId=void 0)},this.canvas=e;var i=this.canvas.getContext("2d");if(!i)throw new Error("Could not get canvas context");this.context=i,this.generator=new Me(this.canvas,function(){return t.options}),this.options=n,this.update()}return be(s,[{key:"options",get:function(){return this._options},set:function(n){var t=this._options&&this._options.run,i=this._options&&this._options.recycle;this.setOptionsWithDefaults(n),this.generator&&(Object.assign(this.generator,this.options.confettiSource),typeof n.recycle=="boolean"&&n.recycle&&i===!1&&(this.generator.lastNumberOfPieces=this.generator.particles.length)),typeof n.run=="boolean"&&n.run&&t===!1&&this.update()}}]),s})(),W=O.createRef();function D(s){var e={},n={},t={},i=[].concat(Object.keys(T),["confettiSource","drawShape","onConfettiComplete"]),r=["canvasRef"];return Object.keys(s).forEach(function(o){var c=s[o];i.includes(o)?e[o]=c:r.includes(o)?r[o]=c:t[o]=c}),[e,t,n]}var F=(function(s){Se(e,s);function e(t){var i;return i=s.call(this,t)||this,i.canvas=O.createRef(),i.canvas=t.canvasRef||W,i}var n=e.prototype;return n.componentDidMount=function(){if(this.canvas.current){var i=D(this.props)[0];this.confetti=new _e(this.canvas.current,i)}},n.componentDidUpdate=function(){var i=D(this.props)[0];this.confetti&&(this.confetti.options=i)},n.componentWillUnmount=function(){this.confetti&&this.confetti.stop(),this.confetti=void 0},n.render=function(){var i=D(this.props),r=i[0],o=i[1],c=b({zIndex:2,position:"absolute",pointerEvents:"none",top:0,left:0,bottom:0,right:0},o.style);return O.createElement("canvas",Object.assign({width:r.width,height:r.height,ref:this.canvas},o,{style:c}))},e})(f.Component);F.defaultProps=b({},T);F.displayName="ConfettiReact";var De=O.forwardRef(function(s,e){return O.createElement(F,Object.assign({canvasRef:W},s))});function Re({id:s}){return s?a.jsx(se,{children:()=>a.jsx(De,{run:!!s,recycle:!1,numberOfPieces:800,width:window.innerWidth,height:window.innerHeight},s)}):null}function Te(){return a.jsx("div",{className:"border-destructive bg-destructive fixed top-0 right-0 left-0 z-50 border-b",children:a.jsxs("div",{className:"relative w-full p-4",children:[a.jsx(Q,{to:"/workspace-structure",className:"absolute inset-0 z-10 block h-full w-full","aria-label":"Learn more about workspace structure"}),a.jsxs("div",{className:"relative z-0 container flex items-center justify-between",children:[a.jsxs("div",{className:"flex items-center gap-3",children:[a.jsx(B,{name:"Error",className:"text-destructive-foreground h-5 w-5"}),a.jsxs("div",{children:[a.jsx("h3",{className:"text-destructive-foreground text-sm font-semibold",children:"Warning: Changes detected in exercises directory"}),a.jsx("p",{className:"text-destructive-foreground/80 text-xs",children:"You should typically work in the playground directory, not the exercises directory."})]})]}),a.jsxs("div",{className:"text-destructive-foreground flex items-center gap-2 text-xs",children:[a.jsx("span",{children:"Learn more"}),a.jsx(B,{name:"ArrowRight",className:"h-3 w-3"})]})]})]})})}const Fe=[{title:"Navigation",shortcuts:[{keys:["g","h"],description:"Go to home"},{keys:["g","1-9"],description:"Go to exercise (e.g., g+1 → /exercise/01)"},{keys:["g","1-9",".","1-9"],description:"Go to exercise step (e.g., g+1+.+2 → /exercise/01/02/problem)"},{keys:["g","1-9",".","f"],description:"Go to exercise finished page (e.g., g+1+.+f → /exercise/01/finished)"},{keys:["g","p"],description:"Go to previous step/page"},{keys:["g","n"],description:"Go to next step/page"},{keys:["g","a"],description:"Go to account page"},{keys:["g","d"],description:"Go to admin page"},{keys:["g","l"],description:"Go to last exercise solution"},{keys:["Escape"],description:"Close sidebar navigation (when open)"}]},{title:"Playback Controls",shortcuts:[{keys:["Space","k"],description:"Play/pause video"},{keys:["j"],description:"Seek backward 10 seconds"},{keys:["l"],description:"Seek forward 10 seconds"},{keys:["←"],description:"Seek backward 10 seconds"},{keys:["→"],description:"Seek forward 10 seconds"}]},{title:"Frame-by-Frame Navigation",shortcuts:[{keys:[","],description:"Go to previous frame (when paused)"},{keys:["."],description:"Go to next frame (when paused)"}]},{title:"Volume Control",shortcuts:[{keys:["↑"],description:"Increase volume by 10%"},{keys:["↓"],description:"Decrease volume by 10%"}]},{title:"Playback Speed",shortcuts:[{keys:["Shift",">"],description:"Increase playback speed"},{keys:["Shift","<"],description:"Decrease playback speed"}]},{title:"Fullscreen and Picture-in-Picture",shortcuts:[{keys:["f"],description:"Toggle fullscreen mode"},{keys:["i"],description:"Toggle picture-in-picture mode"}]},{title:"Captions",shortcuts:[{keys:["c"],description:"Toggle captions/subtitles"}]},{title:"Quick Seek",shortcuts:[{keys:["0-9"],description:"Seek to percentage of video (0 = 0%, 1 = 10%, ..., 9 = 90%)"}]}];function Ge({open:s,onOpenChange:e}){return a.jsx(ae,{open:s,onOpenChange:e,children:a.jsxs(ce,{className:"max-h-[80vh] max-w-2xl overflow-y-auto",children:[a.jsxs(ue,{children:[a.jsx(le,{children:"Keyboard Shortcuts"}),a.jsxs(fe,{children:["Use these keyboard shortcuts to navigate and control the video player. Press"," ",a.jsx("kbd",{className:"border-border bg-muted rounded border px-1.5 py-0.5 font-mono text-xs",children:"?"})," ","or select the question mark icon in the navigation to open this list."]})]}),a.jsx("div",{className:"space-y-6",children:Fe.map(n=>a.jsxs("div",{children:[a.jsx("h3",{className:"text-foreground mb-3 text-sm font-semibold",children:n.title}),a.jsx("div",{className:"space-y-2",children:n.shortcuts.map((t,i)=>a.jsxs("div",{className:"flex items-center justify-between gap-4",children:[a.jsx("span",{className:"text-muted-foreground flex-1 text-sm",children:t.description}),a.jsx("div",{className:"flex shrink-0 items-center gap-1",children:t.keys.map((r,o)=>a.jsxs(f.Fragment,{children:[a.jsx("kbd",{className:"border-border bg-muted rounded border px-2 py-1 font-mono text-xs",children:r}),o<t.keys.length-1&&a.jsx("span",{className:"text-muted-foreground",children:"+"})]},o))})]},i))})]},n.title))}),a.jsx("div",{className:"border-border mt-4 border-t pt-4",children:a.jsxs("p",{className:"text-muted-foreground text-xs",children:[a.jsx("strong",{children:"Note:"})," Shortcuts are ignored when focus is on interactive elements (inputs, buttons, etc.). Press"," ",a.jsx("kbd",{className:"border-border bg-muted rounded border px-1.5 py-0.5 font-mono text-xs",children:"?"})," ","to toggle this dialog."]})})]})})}function Ue({toast:s}){return a.jsxs(a.Fragment,{children:[a.jsx(de,{closeButton:!0,position:"top-center"}),s?a.jsx(Be,{toast:s}):null]})}function Be({toast:s}){const{id:e,type:n,title:t,description:i}=s;return f.useEffect(()=>{setTimeout(()=>{h[n](t,{id:e,description:i})},0)},[i,e,t,n]),null}function Ae({repoUpdates:s}){const{updatesAvailable:e,repoUpdatesAvailable:n,dependenciesNeedInstall:t,updateNotificationId:i,diffLink:r}=s,o=q(),c=f.useRef(o);f.useEffect(()=>{c.current=o},[o]);const u=f.useRef(null),l=f.useRef(null),w=f.useRef(!1);return f.useEffect(()=>{if(e&&i){l.current&&(h.dismiss(l.current),l.current=null);const S=n?"New workshop updates available":"Dependencies out of date",p=n?a.jsxs("div",{children:[t?"Get the latest updates and reinstall dependencies by clicking the update button. ":"Get the latest updates by clicking the update button. ",r?a.jsx("a",{href:r,target:"_blank",rel:"noreferrer",className:"text-xs underline",children:"View changes"}):null]}):a.jsxs("div",{children:["Your installed packages don't match package.json. ","Click the update button to reinstall dependencies."]}),C=h.info(S,{duration:1/0,description:p,onDismiss:()=>{},action:{label:"Update",onClick:async()=>{if(l.current&&(h.dismiss(l.current),l.current=null),u.current||(u.current=h.loading("Update in progress...")),!w.current){w.current=!0;try{const{EPICSHOP_PARENT_PORT:m,EPICSHOP_PARENT_TOKEN:y}=window.ENV||{};if(!m||!y)throw new Error("Update API not available");const g=await fetch(`http://localhost:${m}/__epicshop-restart`,{method:"POST",headers:{"x-epicshop-token":y}});if(!g.ok)throw new Error(`Request to update workshop failed: ${g.statusText}`);const v=await g.json().catch(()=>({})),k=me({status:xe(["ok","error"]),message:ve().optional()}).safeParse(v);if(!k.success)throw console.error("Invalid response from update API",v),new Error("Invalid response from update API");const{status:E,message:M}=k.data;if(E==="ok"){let j=!1;h.success("Workshop updated",{description:"Reloading in 2 seconds... You can reload now if you prefer.",duration:2e3,action:{label:"Reload now",onClick:()=>{j=!0,window.location.reload()}},onAutoClose:()=>{j||window.location.reload()}})}else h.error("Failed to update workshop",{description:M||"Unknown error"})}catch(m){h.error("Failed to update workshop",{description:m instanceof Error?m.message:String(m)})}finally{w.current=!1,u.current&&(h.dismiss(u.current),u.current=null)}}}},cancel:{label:"Dismiss",onClick:()=>{l.current&&(h.dismiss(l.current),l.current=null),c.current.submit({intent:"mute",id:i},{method:"post",action:"/admin/notifications"})}}});l.current=C}},[e,i,n,t,r]),null}function qe({unmutedNotifications:s}){const e=q(),n=f.useRef(e),t=f.useRef(new Set);return f.useEffect(()=>{for(const i of s)t.current.has(i.id)||(t.current.add(i.id),h.info(i.title,{id:i.id,description:a.jsxs("div",{children:[a.jsx("p",{children:i.message}),i.link&&a.jsx("a",{href:i.link,target:"_blank",className:"text-xs underline",children:"Learn more"})]}),duration:1/0,action:{label:"Dismiss",onClick:()=>{n.current.submit({intent:"mute",id:i.id},{method:"post",action:"/admin/notifications"})}}}))},[s]),null}const Le="/assets/app-BUxWY8xC.css",We="/assets/tailwind-C8PqsZFp.css",Ve="unknown@example.com";function Ye({user:s,userId:e}){const n=s?.id??e?.id??void 0,t=s?.email&&s.email!==Ve?s.email:void 0;if(!n&&!t)return null;const i={};return n&&(i.id=n),t&&(i.email=t),i}const pt=()=>[{rel:"stylesheet",href:"/neogrotesk-font.css"},{rel:"stylesheet",href:"https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:ital,wght@0,200;0,300;0,400;0,500;0,600;1,700&display=swap"},{rel:"stylesheet",href:We},{rel:"stylesheet",href:Le},{rel:"icon",href:"/favicon.ico",sizes:"48x48"},{rel:"icon",type:"image/svg+xml",href:"/favicon.svg"}],mt=({loaderData:s})=>s?ke({instructor:s.instructor,title:s.workshopTitle,description:s.workshopSubtitle,requestInfo:s.requestInfo}):[];function V({children:s,env:e={},className:n,style:t}){return a.jsxs("html",{lang:"en",className:n,style:t,children:[a.jsxs("head",{children:[a.jsx(ye,{}),a.jsx(X,{}),a.jsx("meta",{charSet:"utf-8"}),a.jsx("meta",{name:"viewport",content:"width=device-width,initial-scale=1"}),a.jsx(J,{}),a.jsx("script",{dangerouslySetInnerHTML:{__html:`window.ENV = ${JSON.stringify(e)}`}})]}),a.jsxs("body",{className:"bg-background text-foreground scrollbar-thin scrollbar-thumb-scrollbar h-screen-safe",children:[s,a.jsx(Z,{}),a.jsx(ee,{})]})]})}function Qe(){const s=L(),e=z(),n=ne.useSpinDelay(e.state!=="idle",{delay:400,minDuration:200}),t=re(),[i,r]=f.useState(!1);f.useEffect(()=>{const c=()=>{r(u=>!u)};return window.addEventListener("toggle-keyboard-shortcuts",c),()=>{window.removeEventListener("toggle-keyboard-shortcuts",c)}},[]),f.useEffect(()=>{if(!ENV.EPICSHOP_IS_PUBLISHED)return;const c=Ye({user:s.user,userId:s.userId});Y(()=>import("./index.client-CsIUPfXc.js"),__vite__mapDeps([0,1])).then(u=>{c?u.setUser(c):u.setUser(null)}).catch(()=>{})},[s.user,s.userId]);const o=ge();return a.jsxs(V,{style:s.preferences?.fontSize?{fontSize:`${s.preferences?.fontSize}px`}:{},className:ie("h-screen-safe antialiased",o,{"cursor-progress":n},t?"alt-down":null),env:s.ENV,children:[s.exerciseChanges&&!s.preferences?.exerciseWarning?.dismissed&&a.jsx(Te,{}),a.jsx(K,{}),a.jsx(Re,{id:s.confettiId}),a.jsx(Ue,{toast:s.toast}),a.jsx(Ae,{repoUpdates:s.repoUpdates}),a.jsx(he,{}),a.jsx(qe,{unmutedNotifications:s.unmutedNotifications}),a.jsx(Ge,{open:i,onOpenChange:r})]})}const vt=H(function(){const{user:e}=L();return a.jsx(we,{user:e,children:a.jsx(pe,{children:a.jsx(Qe,{})})})}),xt=$(function(){return a.jsx(V,{className:"h-screen-safe",children:a.jsx(oe,{})})});export{xt as ErrorBoundary,vt as default,pt as links,mt as meta};
|
|
3
|
+
//# sourceMappingURL=root-BwYDIUyI.js.map
|