@epic-web/workshop-app 6.72.1 → 6.74.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-jokuvO2V.js +2 -0
- package/build/client/assets/{_exerciseNumber-DUwXPNgl.js.map → _exerciseNumber-jokuvO2V.js.map} +1 -1
- package/build/client/assets/_exerciseNumber_.finished-BaC--Y5p.js +2 -0
- package/build/client/assets/_exerciseNumber_.finished-BaC--Y5p.js.map +1 -0
- package/build/client/assets/_extra-DXypL1sc.js +2 -0
- package/build/client/assets/{_extra-DkiDFYVP.js.map → _extra-DXypL1sc.js.map} +1 -1
- package/build/client/assets/_layout-_Aw6qzZC.js +2 -0
- package/build/client/assets/{_layout-DDTXkx2z.js.map → _layout-_Aw6qzZC.js.map} +1 -1
- package/build/client/assets/diff-DfWBhj2O.js +2 -0
- package/build/client/assets/{diff-DwJn8fSQ.js.map → diff-DfWBhj2O.js.map} +1 -1
- package/build/client/assets/{diff-HIgoC1PO.js → diff-Dng5ItOr.js} +2 -2
- package/build/client/assets/{diff-HIgoC1PO.js.map → diff-Dng5ItOr.js.map} +1 -1
- package/build/client/assets/epic-video-C1_HSISA.js +2 -0
- package/build/client/assets/{epic-video-DEq93iL_.js.map → epic-video-C1_HSISA.js.map} +1 -1
- package/build/client/assets/{epic-video-DnXXh6qE.js → epic-video-CC0372g5.js} +164 -164
- package/build/client/assets/{epic-video-DnXXh6qE.js.map → epic-video-CC0372g5.js.map} +1 -1
- package/build/client/assets/finished-BbEk1NdF.js +2 -0
- package/build/client/assets/finished-BbEk1NdF.js.map +1 -0
- package/build/client/assets/format-CZ5n8p10.js +2 -0
- package/build/client/assets/format-CZ5n8p10.js.map +1 -0
- package/build/client/assets/index-CFM_ffAh.js +2 -0
- package/build/client/assets/{index-IgBUhsxX.js.map → index-CFM_ffAh.js.map} +1 -1
- package/build/client/assets/index-CfU0fdf7.js +2 -0
- package/build/client/assets/{index-PKjGT1Rp.js.map → index-CfU0fdf7.js.map} +1 -1
- package/build/client/assets/index-Pxi8WjFA.js +2 -0
- package/build/client/assets/{index-BgExztV_.js.map → index-Pxi8WjFA.js.map} +1 -1
- package/build/client/assets/manifest-835c6db1.js +1 -0
- package/build/client/assets/{mdx-Dun3ONG_.js → mdx-vy-1-0a3.js} +2 -2
- package/build/client/assets/{mdx-Dun3ONG_.js.map → mdx-vy-1-0a3.js.map} +1 -1
- package/build/client/assets/{offline-videos-BP7_xJkO.js → offline-videos-DAsuWMco.js} +2 -2
- package/build/client/assets/offline-videos-DAsuWMco.js.map +1 -0
- package/build/client/assets/preferences-B7ND1VS9.js +2 -0
- package/build/client/assets/preferences-B7ND1VS9.js.map +1 -0
- package/build/client/assets/retrieval-practice-BOku32wW.js +2 -0
- package/build/client/assets/retrieval-practice-BOku32wW.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/client/assets/test-Ciw2aKZE.js +2 -0
- package/build/client/assets/{test-BU7jE-eU.js.map → test-Ciw2aKZE.js.map} +1 -1
- package/build/client/assets/{tests-1-kVRtTc.js → tests-CZ2AhDKA.js} +2 -2
- package/build/client/assets/{tests-1-kVRtTc.js.map → tests-CZ2AhDKA.js.map} +1 -1
- package/build/server/index.js +110 -25
- package/build/server/index.js.map +1 -1
- package/package.json +3 -3
- package/build/client/assets/_exerciseNumber-DUwXPNgl.js +0 -2
- 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/_extra-DkiDFYVP.js +0 -2
- package/build/client/assets/_layout-DDTXkx2z.js +0 -2
- package/build/client/assets/diff-DwJn8fSQ.js +0 -2
- package/build/client/assets/epic-video-DEq93iL_.js +0 -2
- 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/index-BgExztV_.js +0 -2
- package/build/client/assets/index-IgBUhsxX.js +0 -2
- package/build/client/assets/index-PKjGT1Rp.js +0 -2
- package/build/client/assets/manifest-9e0c0428.js +0 -1
- package/build/client/assets/offline-videos-BP7_xJkO.js.map +0 -1
- package/build/client/assets/preferences-D6HQ5bK1.js +0 -2
- package/build/client/assets/preferences-D6HQ5bK1.js.map +0 -1
- package/build/client/assets/tailwind-C1_1LEqo.css +0 -1
- package/build/client/assets/test-BU7jE-eU.js +0 -2
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@epic-web/workshop-app",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.74.0",
|
|
4
4
|
"sideEffects": false,
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
@@ -42,8 +42,8 @@
|
|
|
42
42
|
"@epic-web/invariant": "^1.0.0",
|
|
43
43
|
"@epic-web/remember": "^1.1.0",
|
|
44
44
|
"@epic-web/restore-scroll": "^2.0.0",
|
|
45
|
-
"@epic-web/workshop-presence": "6.
|
|
46
|
-
"@epic-web/workshop-utils": "6.
|
|
45
|
+
"@epic-web/workshop-presence": "6.74.0",
|
|
46
|
+
"@epic-web/workshop-utils": "6.74.0",
|
|
47
47
|
"@mdx-js/mdx": "^3.1.1",
|
|
48
48
|
"@mux/mux-player-react": "^3.10.2",
|
|
49
49
|
"@nasa-gcn/remix-seo": "^2.0.1",
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{w as s,a as n,L as c}from"./chunk-EPOLDU6W-BCLmut3y.js";import{j as r}from"./jsx-runtime-C5WNSv3b.js";import{E as m}from"./index-CEVyDj51.js";import{E as l}from"./epic-video-DnXXh6qE.js";import{G as p}from"./error-boundary-DxHqAEHX.js";import{u as a}from"./revalidation-ws-BJWJviUX.js";import{E as x}from"./launch-editor-D2exGfVu.js";import{P as u}from"./progress-BcA4i0iU.js";import{M as f}from"./mdx-Dun3ONG_.js";import{g as d}from"./root-loader-BOzEMapJ.js";import{g as b}from"./seo-t5J-DRxw.js";import{E as h}from"./error-boundary-BDqWjIFP.js";import"./index-CqIc3cxq.js";import"./use-event-source-BuD4_2SF.js";import"./index-DzdDahau.js";import"./index-vDCSPjrM.js";import"./index-CdzVFL-Z.js";import"./misc-W4055b-0.js";import"./tooltip-Tlsyx2YO.js";import"./pe-CIZUOJMr.js";import"./schemas-Uj5SZtvt.js";import"./online-DiNLkgTC.js";import"./loading-CDNzW5oO.js";import"./user-BsPobzjB.js";import"./workshop-config-Zfc8zU0x.js";import"./preload-helper-BXl3LOEh.js";import"./progress-bar-DpWhcyhC.js";import"./chunk-FNSCYPCZ-BHgC5cdx.js";import"./coerce-CkHW0SMv.js";const K=({loaderData:t,matches:e})=>{const o=t?.exercise.exerciseNumber.toString().padStart(2,"0"),i=d(e);return!t||!i?[{title:"🦉 | Error"}]:b({title:`📝 | ${o}. ${t.exercise.title} | ${i?.workshopTitle}`,description:`Introduction for ${o}. ${t.exercise.title}`,ogTitle:t.exercise.title,ogDescription:`Introduction for exercise ${Number(o)}`,instructor:i.instructor,requestInfo:i.requestInfo})},g={h1:()=>null},U=s(function({loaderData:e}){a({watchPaths:[e.exerciseReadme.file]});const o=String(e.firstStep?.stepNumber??"01").padStart(2,"0");return r.jsxs("main",{className:"relative flex h-full w-full max-w-5xl flex-col justify-between border-r md:w-3/4 xl:w-2/3",children:[r.jsxs("article",{id:e.articleId,className:"shadow-on-scrollbox scrollbar-thin scrollbar-thumb-scrollbar flex w-full flex-1 flex-col gap-12 overflow-y-scroll px-3 py-4 pt-6 md:px-10 md:py-12 md:pt-16",children:[r.jsx("div",{children:r.jsx("h1",{className:"text-[clamp(3rem,6vw,7.5rem)] leading-none font-extrabold",children:e.exercise.title})}),r.jsx("div",{children:e.exercise.instructionsCode?r.jsx(l,{epicVideoInfosPromise:e.epicVideoInfosPromise,children:r.jsx("div",{className:"prose dark:prose-invert sm:prose-lg",children:r.jsx(f,{code:e.exercise.instructionsCode,components:g})})}):"No instructions yet..."})]},e.articleId),r.jsx(m,{elementQuery:`#${e.articleId}`},`scroll-${e.articleId}`),r.jsx(u,{type:"instructions",exerciseNumber:e.exerciseNumber,className:"h-14 border-t px-6"}),r.jsxs("div",{className:"@container flex h-16 justify-between border-t border-b-4 lg:border-b-0",children:[r.jsx("div",{}),r.jsx(x,{file:e.exerciseReadme.file,relativePath:e.exerciseReadme.relativePath}),r.jsx(c,{to:`${o}/${e.firstType}`,prefetch:"intent",className:"bg-foreground text-background flex h-full items-center justify-center px-7","data-keyboard-action":"g+n",children:"Start Learning"})]})]})}),X=n(function(){return r.jsx(p,{className:"container flex items-center justify-center",statusHandlers:{404:h}})});export{X as ErrorBoundary,U as default,K as meta};
|
|
2
|
-
//# sourceMappingURL=_exerciseNumber-DUwXPNgl.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
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{E as u}from"./launch-editor-D2exGfVu.js";import{P as b}from"./progress-BcA4i0iU.js";import{u as j}from"./index-CdzVFL-Z.js";import{M as g}from"./mdx-Dun3ONG_.js";import{u as N}from"./online-DiNLkgTC.js";import{g as v}from"./root-loader-BOzEMapJ.js";import{g as w}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 Y=({loaderData:s,matches:r})=>{const i=s?.exercise.exerciseNumber.toString().padStart(2,"0"),o=v(r);return!s||!o?[{title:"🦉 | Error"}]:w({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})},E={h1:()=>null},Z=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.jsx("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(g,{code:r.exercise.finishedCode,components:E})})}):"No finished instructions yet..."}),e.jsx(c,{elementQuery:`#${r.articleId}`}),e.jsx(b,{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(u,{file:r.exerciseFinished.file,relativePath:r.exerciseFinished.relativePath}),e.jsx(p,{prev:r.prevStepLink,next:r.nextStepLink})]})]}),e.jsx(y,{exerciseFormEmbedUrl:r.exerciseFormEmbedUrl,exerciseTitle:r.exercise.title})]})})});function y({exerciseFormEmbedUrl:s,exerciseTitle:r}){const i=j(),[o,t]=m.useState(!1);return N()?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{Z as default,Y as meta};
|
|
2
|
-
//# sourceMappingURL=_exerciseNumber_.finished-C4sVkuEq.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"_exerciseNumber_.finished-C4sVkuEq.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 { 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</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","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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"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{w as R,a as S,b as T,d as k,L as l}from"./chunk-EPOLDU6W-BCLmut3y.js";import{j as e}from"./jsx-runtime-C5WNSv3b.js";import{E as $}from"./index-CEVyDj51.js";import{g as A,R as L,P as M,C as n,a as B,D as H}from"./playground-DmEAkxG1.js";import{r as i}from"./index-CqIc3cxq.js";import{U as O}from"./diff-HIgoC1PO.js";import{E as U}from"./epic-video-DnXXh6qE.js";import{G as V}from"./error-boundary-DxHqAEHX.js";import{N as z}from"./nav-chevrons-Dk4GtZwQ.js";import{u as X}from"./revalidation-ws-BJWJviUX.js";import{u as F}from"./workshop-config-Zfc8zU0x.js";import{P as G}from"./preview-fhmjENlm.js";import{E as W}from"./launch-editor-D2exGfVu.js";import{S as q}from"./set-playground-BSGwH9dH.js";import{c as Y,M as _}from"./mdx-Dun3ONG_.js";import{g as Q,u as J}from"./root-loader-BOzEMapJ.js";import{g as K}from"./seo-t5J-DRxw.js";import{s as w,a as Z}from"./split-layout-DnRER1bP.js";import"./misc-W4055b-0.js";import"./loading-CDNzW5oO.js";import"./index-CdzVFL-Z.js";import"./tooltip-Tlsyx2YO.js";import"./index-vDCSPjrM.js";import"./pe-CIZUOJMr.js";import"./schemas-Uj5SZtvt.js";import"./discord-BJkw0IrB.js";import"./user-BsPobzjB.js";import"./online-DiNLkgTC.js";import"./index-CJDOQ1bl.js";import"./index-ynYvVAOK.js";import"./status-indicator-C6DiLYL5.js";import"./index-DzdDahau.js";import"./playground-window-x2mQ5o1O.js";import"./accordion-CQ7oujC6.js";import"./use-event-source-BuD4_2SF.js";import"./preload-helper-BXl3LOEh.js";import"./button-Cd-ekki5.js";import"./progress-bar-DpWhcyhC.js";import"./onboarding-indicator-B-XR90_G.js";import"./dialog-CzO65Z5w.js";const Ue=o=>{const r=o.data,s=Q(o.matches);return!r||!s?[{title:"🦉 | Error"}]:K({title:`📚 | ${r.extra.title} | ${s.workshopTitle}`,description:`Extra: ${r.extra.title}`,ogTitle:r.extra.title,ogDescription:`Extra: ${r.extra.title}`,instructor:s.instructor,requestInfo:s.requestInfo})},Ve=R(function(){const r=T(),s=J(),h=i.useRef(null),c=i.useRef(null),g=i.useRef(null),[P,d]=i.useState(r.splitPercent),[j]=k(),b=F(),y=i.useMemo(()=>Promise.resolve(s.userHasAccess??!1),[s.userHasAccess]),v=r.playground?.appName!==r.extra.name,N=v||r.playground?.isUpToDate===!1,m=["playground","extra","diff","chat"],p=j.get("preview"),x=r.previousExtra?{to:`/extra/${r.previousExtra.dirName}`,"aria-label":"Previous Extra"}:{to:"/extra","aria-label":"Extras"},u=r.nextExtra?{to:`/extra/${r.nextExtra.dirName}`,"aria-label":"Next Extra"}:{to:"/finished","aria-label":"Workshop finished"};function E(t){return!!(t&&m.includes(t))}function f(t){if(t==="playground")return ENV.EPICSHOP_DEPLOYED;if(t==="extra"&&ENV.EPICSHOP_DEPLOYED){const a=r.extra.dev.type;return a!=="browser"&&a!=="export"&&!r.extra.stackBlitzUrl}return t==="chat"?!b.product.discordChannelId:!1}const D=E(p)&&!f(p)?p:m.find(t=>!f(t))??"playground",C=m.map(t=>{const a=f(t);return{id:t,label:t,hidden:a,to:`?${A(j,t,"playground")}`}}),I=i.useMemo(()=>{const t=Y(()=>({name:r.extra.name,fullPath:r.extra.fullPath}));return{h1:()=>null,InlineFile:t}},[r.extra.name,r.extra.fullPath]);return X({watchPaths:[r.extraReadme.file]}),e.jsx("div",{className:"flex max-w-full grow flex-col",children:e.jsxs("main",{ref:c,className:"flex grow flex-col sm:h-full sm:min-h-[800px] md:min-h-[unset] lg:flex-row",children:[e.jsxs("div",{className:"relative flex min-w-0 flex-none basis-full flex-col sm:col-span-1 sm:row-span-1 sm:h-full lg:basis-(--split-pct)",style:{"--split-pct":`${P}%`},ref:g,children:[e.jsx("h1",{className:"@container h-14 border-b pr-5 pl-10 text-sm leading-tight font-medium",children:e.jsxs("div",{className:"flex h-14 items-center justify-between gap-x-2 py-2 whitespace-nowrap",children:[e.jsxs("div",{className:"flex items-center justify-start gap-x-2 uppercase",children:[e.jsx(l,{to:"/extra",className:"hover:underline",children:e.jsx("span",{children:"Extras"})}),e.jsx("span",{children:"/"}),e.jsx(l,{to:".",className:"hover:underline",children:e.jsx("span",{children:r.extra.title})})]}),N?e.jsx(q,{appName:r.extra.name,isOutdated:r.playground?.isUpToDate===!1,hideTextOnNarrow:!0,showOnboardingIndicator:v}):null]})}),e.jsxs("article",{id:r.articleId,className:"shadow-on-scrollbox scrollbar-thin scrollbar-thumb-scrollbar flex h-full w-full max-w-none flex-1 scroll-pt-6 flex-col justify-between space-y-6 overflow-y-auto p-2 sm:p-10 sm:pt-8",children:[r.extra.instructionsCode?e.jsx(U,{epicVideoInfosPromise:r.epicVideoInfosPromise,children:e.jsx("div",{className:"prose dark:prose-invert sm:prose-lg",children:e.jsx(_,{code:r.extra.instructionsCode,components:I})})}):e.jsx("div",{className:"flex h-full items-center justify-center text-lg",children:e.jsx("p",{children:"No instructions yet..."})}),e.jsxs("div",{className:"mt-auto flex justify-between",children:[e.jsxs(l,{to:x.to,"aria-label":x["aria-label"],prefetch:"intent",children:[e.jsx("span",{"aria-hidden":!0,children:"←"}),e.jsx("span",{className:"hidden xl:inline",children:" Previous"})]}),e.jsxs(l,{to:u.to,"aria-label":u["aria-label"],prefetch:"intent",children:[e.jsx("span",{className:"hidden xl:inline",children:"Next "}),e.jsx("span",{"aria-hidden":!0,children:"→"})]})]})]},r.articleId),e.jsx($,{elementQuery:`#${r.articleId}`},`scroll-${r.articleId}`),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(W,{appName:r.extra.name,relativePath:r.extraReadme.relativePath}),e.jsx(z,{prev:x,next:u})]})]}),e.jsx("div",{role:"separator","aria-orientation":"vertical",title:"Drag to resize",className:"bg-border hover:bg-muted hidden w-1 cursor-col-resize lg:block",onMouseDown:t=>w({container:c.current,initialClientX:t.clientX,setSplitPercent:d}),onDoubleClick:()=>{d(Z(50))},onTouchStart:t=>{const a=t.touches?.[0];a&&w({container:c.current,initialClientX:a.clientX,setSplitPercent:d})}}),e.jsxs(L,{className:"relative flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden",value:D,children:[e.jsx(M,{tabs:C}),e.jsxs("div",{className:"relative z-10 flex min-h-0 flex-1 flex-col overflow-hidden",children:[e.jsx(n,{value:"playground",className:"radix-state-inactive:hidden flex min-h-0 w-full grow basis-0 items-stretch justify-center self-start",forceMount:!0,children:e.jsx(B,{appInfo:r.playground,problemAppName:r.extra.name,allApps:r.allApps??[],isUpToDate:r.playground?.isUpToDate??!1,inBrowserBrowserRef:h})}),e.jsx(n,{value:"extra",className:"radix-state-inactive:hidden flex min-h-0 w-full grow basis-0 items-stretch justify-center self-start",forceMount:!0,children:e.jsx(G,{appInfo:r.extra,inBrowserBrowserRef:h})}),e.jsx(n,{value:"diff",className:"radix-state-inactive:hidden flex h-full min-h-0 w-full grow basis-0 items-stretch justify-center self-start",children:e.jsx(O,{diff:r.diff,allApps:r.allApps,userHasAccessPromise:y})}),e.jsx(n,{value:"chat",className:"radix-state-inactive:hidden flex h-full min-h-0 w-full grow basis-0 items-stretch justify-center self-start",children:e.jsx(H,{discordPostsPromise:r.discordPostsPromise})})]})]})]})})}),ze=S(function(){return e.jsx(V,{})});export{ze as ErrorBoundary,Ve as default,Ue as meta};
|
|
2
|
-
//# sourceMappingURL=_extra-DkiDFYVP.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{b as f,d as C,L as h,A as k,w as D,a as L,O}from"./chunk-EPOLDU6W-BCLmut3y.js";import{j as e}from"./jsx-runtime-C5WNSv3b.js";import{E as I}from"./index-CEVyDj51.js";import{r as x}from"./index-CqIc3cxq.js";import{G as R}from"./error-boundary-DxHqAEHX.js";import{N as $}from"./nav-chevrons-Dk4GtZwQ.js";import{u as A}from"./revalidation-ws-BJWJviUX.js";import{L as j,E as T}from"./launch-editor-D2exGfVu.js";import{P as B}from"./progress-BcA4i0iU.js";import{S}from"./set-playground-BSGwH9dH.js";import{l as U,c as v,I as g,m as H,n as V}from"./misc-W4055b-0.js";import{a as _,g as F}from"./root-loader-BOzEMapJ.js";import{g as Y}from"./seo-t5J-DRxw.js";import{s as y,a as M}from"./split-layout-DnRER1bP.js";import{E as q}from"./error-boundary-BDqWjIFP.js";import{E as G}from"./epic-video-DnXXh6qE.js";import{S as N}from"./tooltip-Tlsyx2YO.js";import{M as X}from"./mdx-Dun3ONG_.js";import{R as z,T as K,P as Q,C as W}from"./index-CmflCPTU.js";import{u as J,O as Z}from"./onboarding-indicator-B-XR90_G.js";import"./preload-helper-BXl3LOEh.js";import"./schemas-Uj5SZtvt.js";import"./progress-bar-DpWhcyhC.js";import"./pe-CIZUOJMr.js";import"./index-CJDOQ1bl.js";import"./index-vDCSPjrM.js";import"./index-ynYvVAOK.js";import"./button-Cd-ekki5.js";import"./dialog-CzO65Z5w.js";import"./chunk-FNSCYPCZ-BHgC5cdx.js";import"./coerce-CkHW0SMv.js";import"./use-event-source-BuD4_2SF.js";import"./index-DzdDahau.js";import"./index-CdzVFL-Z.js";import"./online-DiNLkgTC.js";import"./loading-CDNzW5oO.js";import"./user-BsPobzjB.js";import"./workshop-config-Zfc8zU0x.js";const P=x.createContext(null);function ee(){const r=x.useContext(P);if(!r)throw new Error("useStepContext must be used within a StepContextProvider");return r}function ne({children:r,inBrowserBrowserRef:n}){return e.jsx(P,{value:{inBrowserBrowserRef:n},children:r})}const re={DiffLink:b,PrevDiffLink:ie,NextDiffLink:se,InlineFile:oe,LinkToApp:ae};function te({inBrowserBrowserRef:r}){const n=f();return n.exerciseStepApp.instructionsCode?e.jsx(ne,{inBrowserBrowserRef:r,children:e.jsx(G,{epicVideoInfosPromise:n.epicVideoInfosPromise,children:e.jsx("div",{className:"prose dark:prose-invert sm:prose-lg",children:e.jsx(X,{code:n.exerciseStepApp.instructionsCode,components:re})})})}):null}function w(r,n,t){const s=new URLSearchParams(r);return t===null?s.delete(n):s.set(n,t),s}function se({app:r=0,fullPage:n=!1,children:t}){return e.jsx(b,{app1:r,app2:r+1,fullPage:n,children:t})}function ie({app:r=-1,fullPage:n=!1,children:t}){return e.jsx(b,{app1:r,app2:r+1,fullPage:n,children:t})}function b({app1:r=0,app2:n=1,children:t,fullPage:s=!1,to:l}){const i=f();if(!l&&!r&&!n)return e.jsx("callout-danger",{className:"notification",children:e.jsx("div",{className:"title",children:"DiffLink Error: invalid input"})});function c(o){if(typeof o=="number"){const u=i.exerciseIndex+o;return i.allApps[u]?.name}if(!o)return null;for(const{name:u,stepName:d}of i.allApps)if(o===u||o===d)return u;return null}if(l){const o=new URLSearchParams(l);r=o.get("app1"),n=o.get("app2")}const a=c(r),p=c(n);if(!a||!p)return e.jsxs("callout-danger",{className:"notification",children:[e.jsx("div",{className:"title",children:"DiffLink Error: invalid input"}),!a&&e.jsxs("div",{children:['app1: "',r,'" is not a valid app name']}),!p&&e.jsxs("div",{children:['app2: "',n,'" is not a valid app name']})]});l||(l=`app1=${a}&app2=${p}`);const m=s?`/diff?${l}`:`?${decodeURIComponent(w(new URLSearchParams,"preview",`diff&${l}`).toString())}`;return t||(t=e.jsxs("span",{children:["Go to Diff ",s?"":"Preview"," from: ",e.jsx("code",{children:a})," to:"," ",e.jsx("code",{children:p})]})),e.jsx(h,{to:m,children:t})}function oe({file:r,type:n="playground",children:t=e.jsx("code",{children:r}),...s}){const l=f(),i=l[n]||l[l.type],c=e.jsxs("div",{className:"launch-editor-button-wrapper flex underline underline-offset-4",children:[t," ",e.jsx("svg",{height:24,width:24,children:e.jsx("use",{href:`${H}#Keyboard`})})]});return ENV.EPICSHOP_DEPLOYED&&i?e.jsx("div",{className:"inline-block grow",children:e.jsx(j,{appFile:r,appName:i.name,...s,children:c})}):i?e.jsx("div",{className:"inline-block grow",children:e.jsx(j,{appFile:r,appName:i.name,...s,children:c})}):n==="playground"?e.jsx(N,{content:"You must 'Set to Playground' before opening a file",children:e.jsx("div",{className:"inline-block grow cursor-not-allowed",children:c})}):e.jsx(e.Fragment,{children:"children"})}function le(r){return r==="problem"?"problem":r==="solution"?"solution":"playground"}function ae({to:r,children:n=e.jsx("code",{children:r.toString()}),...t}){const[s]=C(),l=`?${w(s,"pathname",r.toString()).toString()}`,i=f(),c=le(s.get("preview")),a=_(),p=i[c],m=p?.dev.type==="script"?U({domain:a.domain,port:p.dev.portNumber}):i.playground?.dev.type==="browser"||i.playground?.dev.type==="export"?i.playground.dev.pathname:null,{inBrowserBrowserRef:o}=ee(),u=m?m.slice(0,-1)+r.toString():null;return e.jsxs("div",{className:"inline-flex items-center justify-between gap-1",children:[e.jsx(h,{to:l,...t,className:v(t.className,{"cursor-not-allowed":ENV.EPICSHOP_DEPLOYED}),title:ENV.EPICSHOP_DEPLOYED?"Cannot link to app in deployed version":void 0,onClick:d=>{ENV.EPICSHOP_DEPLOYED&&d.preventDefault(),t.onClick?.(d),o.current?.handleExtrnalNavigation(r.toString())},children:n}),u?e.jsx(N,{content:"Open in new tab",children:e.jsx("a",{href:u,target:"_blank",rel:"noreferrer",className:v("flex aspect-square items-center justify-center",{"cursor-not-allowed":ENV.EPICSHOP_DEPLOYED}),title:ENV.EPICSHOP_DEPLOYED?"Cannot link to app in deployed version":"Open in new tab",onClick:d=>{ENV.EPICSHOP_DEPLOYED&&d.preventDefault()},children:e.jsx(g,{name:"ExternalLink"})})}):null]})}function ce({diffFilesPromise:r}){const n=f(),[t,s]=J("files-popover"),[l,i]=x.useState(!1),c=x.useRef(null);function a(o){i(o),o&&s()}function p(){i(!1)}const m=n.playground?.appName;return e.jsx(e.Fragment,{children:e.jsxs(z,{open:l,onOpenChange:a,children:[e.jsx(K,{asChild:!0,children:e.jsxs("button",{className:"relative flex h-full items-center gap-1 border-r px-6 py-3 font-mono text-sm uppercase","aria-label":"Relevant Files",children:[e.jsx(g,{name:"Files"}),e.jsx("span",{className:"hidden @min-[640px]:inline",children:"Files"}),t?e.jsx(Z,{tooltip:"Click to see which files to edit!"}):null]})}),e.jsx(Q,{children:e.jsx(W,{ref:c,className:"slideRightContent lg:slideUpContent invert-theme bg-background text-foreground z-10 rounded px-9 py-8 select-none",align:"start",sideOffset:5,children:e.jsxs("div",{className:"launch-editor-wrapper",children:[e.jsx("strong",{className:"inline-block px-2 pb-2 font-semibold uppercase",children:"Relevant Files"}),e.jsxs("p",{className:"text-muted-foreground mb-4 max-w-2xs px-2 text-sm",children:["These are the files you'll need to modify for this exercise. Click any file to open it directly in your editor at the right location."," ",e.jsx(h,{to:"/guide#file-links",className:"text-highlight underline",onClick:()=>i(!1),children:"Learn more →"})]}),n.problem&&n.playground?.appName!==n.problem.name?e.jsx("div",{className:"mb-2 rounded p-1 font-mono font-medium",children:e.jsx(S,{appName:n.problem.name})}):null,e.jsx("div",{id:"files",children:e.jsx(x.Suspense,{fallback:e.jsx(N,{content:"Loading diff",children:e.jsx("div",{className:"flex justify-center",children:e.jsx(g,{name:"Refresh",className:"h-8 w-8 animate-spin"})})}),children:e.jsx(k,{resolve:r,errorElement:e.jsx("div",{className:"text-foreground-destructive",children:"Something went wrong."}),children:o=>{if(!o)return e.jsx("p",{className:"text-foreground-destructive",children:"Unable to determine diff"});if(typeof o=="string")return e.jsx("p",{className:"text-foreground-destructive",children:o});if(!o.length)return e.jsx("p",{children:"No files changed"});const u=m||ENV.EPICSHOP_GITHUB_ROOT?{}:{title:"You must 'Set to Playground' before opening a file",className:"not-allowed"};return e.jsxs("ul",{...u,children:[o.length>1&&!ENV.EPICSHOP_DEPLOYED?e.jsx("div",{className:"border-opacity-50 mb-2 border-b border-b-gray-50 pb-2 font-sans",children:e.jsx(j,{appFile:o.map(d=>`${d.path},${d.line},1`),appName:"playground",onUpdate:p,children:e.jsx("p",{children:"Open All Files"})})}):null,o.map(d=>e.jsx("li",{"data-state":d.status,children:e.jsx(j,{appFile:`${d.path},${d.line},1`,appName:ENV.EPICSHOP_DEPLOYED?n.problem?.name??"playground":"playground",onUpdate:p,children:e.jsx("code",{children:d.path})})},d.path))]})}})})})]})})})]})})}function E(r,n){const t=r?.exerciseStepApp.exerciseNumber.toString().padStart(2,"0")??"00",s=r?.exerciseStepApp.stepNumber.toString().padStart(2,"0")??"00",l={problem:"💪",solution:"🏁"}[r?.type??"problem"],i=r?.[r.type]?.title??"N/A";return{emoji:l,stepNumber:s,title:i,exerciseNumber:t,exerciseTitle:r?.exerciseTitle??"Unknown exercise",workshopTitle:n,type:r?.type??"problem"}}const ze=({loaderData:r,matches:n,params:t})=>{const s=F(n);if(!r||!s)return[{title:"🦉 | Error"}];const{emoji:l,stepNumber:i,title:c,exerciseNumber:a,exerciseTitle:p}=E(r);return Y({title:`${l} | ${i}. ${c} | ${a}. ${p} | ${s.workshopTitle}`,description:`${t.type} step for exercise ${a}. ${p}`,ogTitle:c,ogDescription:`${p} step ${Number(i)} ${t.type}`,instructor:s.instructor,requestInfo:s.requestInfo})},Ke=D(function({loaderData:n}){const t=x.useRef(null),s=x.useRef(null),l=x.useRef(null),[i,c]=x.useState(n.splitPercent),a=E(n);A({watchPaths:[`${n.exerciseStepApp.relativePath}/README.mdx`]});const p=n.problem?n.playground?.appName!==n.problem.name:!1;return e.jsx("div",{className:"flex max-w-full grow flex-col",children:e.jsxs("main",{ref:s,className:"flex grow flex-col overflow-y-auto sm:h-full sm:min-h-[800px] md:min-h-[unset] lg:flex-row lg:overflow-y-hidden",children:[e.jsxs("div",{className:"relative flex min-w-0 flex-none basis-auto flex-col sm:col-span-1 sm:row-span-1 lg:h-full lg:basis-(--split-pct)",style:{"--split-pct":`${i}%`},ref:l,children:[e.jsx("h1",{className:"@container h-14 border-b pr-5 pl-10 text-sm leading-tight font-medium",children:e.jsxs("div",{className:"flex h-14 items-center justify-between gap-x-2 py-2 whitespace-nowrap",children:[e.jsxs("div",{className:"flex items-center justify-start gap-x-2 uppercase",children:[e.jsxs(h,{to:V(n.exerciseStepApp.exerciseNumber),className:"hover:underline",children:[e.jsxs("span",{children:[a.exerciseNumber,"."]}),e.jsxs("span",{className:"hidden @min-[500px]:inline",children:[" ",a.exerciseTitle]})]}),e.jsx("span",{children:"/"}),e.jsxs(h,{to:".",className:"hover:underline",children:[e.jsxs("span",{children:[a.stepNumber,"."]}),e.jsxs("span",{className:"hidden @min-[300px]:inline",children:[" ",a.title]}),e.jsxs("span",{children:[" (",a.emoji]}),e.jsxs("span",{className:"hidden @min-[400px]:inline",children:[" ",a.type]}),e.jsx("span",{children:")"})]})]}),n.problem&&(n.playground?.appName!==n.problem.name||!n.playground?.isUpToDate)?e.jsx(S,{appName:n.problem.name,isOutdated:n.playground?.isUpToDate===!1,hideTextOnNarrow:!0,showOnboardingIndicator:p}):null]})}),e.jsxs("article",{id:n.articleId,className:"shadow-on-scrollbox scrollbar-thin scrollbar-thumb-scrollbar flex w-full max-w-none scroll-pt-6 flex-col justify-between space-y-6 p-2 sm:p-10 sm:pt-8 lg:h-full lg:flex-1 lg:overflow-y-auto",children:[n.exerciseStepApp.instructionsCode?e.jsx(te,{inBrowserBrowserRef:t}):e.jsx("div",{className:"flex h-full items-center justify-center text-lg",children:e.jsx("p",{children:"No instructions yet..."})}),e.jsxs("div",{className:"mt-auto flex justify-between",children:[n.prevStepLink?e.jsxs(h,{to:n.prevStepLink.to,"aria-label":"Previous Step","data-keyboard-action":"g+p",prefetch:"intent",children:[e.jsx("span",{"aria-hidden":!0,children:"←"}),e.jsx("span",{className:"hidden xl:inline",children:" Previous"})]}):e.jsx("span",{}),n.nextStepLink?e.jsxs(h,{to:n.nextStepLink.to,"aria-label":"Next Step","data-keyboard-action":"g+n",prefetch:"intent",children:[e.jsx("span",{className:"hidden xl:inline",children:"Next "}),e.jsx("span",{"aria-hidden":!0,children:"→"})]}):e.jsx("span",{})]})]},n.articleId),e.jsx(I,{elementQuery:`#${n.articleId}`},`scroll-${n.articleId}`),n.type==="solution"?e.jsx(B,{type:"step",exerciseNumber:n.exerciseStepApp.exerciseNumber,stepNumber:n.exerciseStepApp.stepNumber,className:"h-14 border-t px-6"}):null,e.jsxs("div",{className:"@container flex h-16 justify-between border-t border-b-4 lg:border-b-0",children:[e.jsx("div",{children:e.jsx("div",{className:"h-full",children:e.jsx(ce,{diffFilesPromise:n.diffFiles})})}),e.jsx(T,{appName:n.exerciseStepApp.name,relativePath:`${n.exerciseStepApp.relativePath}/README.mdx`}),e.jsx($,{prev:n.prevStepLink?{to:n.prevStepLink.to,"aria-label":"Previous Step"}:null,next:n.nextStepLink?{to:n.nextStepLink.to,"aria-label":"Next Step"}:null})]})]}),e.jsx("div",{role:"separator","aria-orientation":"vertical",title:"Drag to resize",className:"bg-border hover:bg-accent hidden w-1 cursor-col-resize lg:block",onMouseDown:m=>y({container:s.current,initialClientX:m.clientX,setSplitPercent:c}),onDoubleClick:()=>{c(M(50))},onTouchStart:m=>{const o=m.touches?.[0];o&&y({container:s.current,initialClientX:o.clientX,setSplitPercent:c})}}),e.jsx("div",{className:"flex min-h-[50vh] min-w-0 flex-none lg:min-h-0 lg:flex-1",children:e.jsx(O,{context:{inBrowserBrowserRef:t}})})]})})}),Qe=L(function(){return e.jsx(R,{className:"container flex items-center justify-center",statusHandlers:{404:q}})});export{Qe as ErrorBoundary,Ke as default,ze as meta};
|
|
2
|
-
//# sourceMappingURL=_layout-DDTXkx2z.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{w as o,b as a,d as m,k as p}from"./chunk-EPOLDU6W-BCLmut3y.js";import{j as s}from"./jsx-runtime-C5WNSv3b.js";import{d as n,c}from"./misc-W4055b-0.js";import{U as f}from"./diff-HIgoC1PO.js";import{N as d}from"./nav-chevrons-Dk4GtZwQ.js";import"./index-CqIc3cxq.js";import"./accordion-CQ7oujC6.js";import"./tooltip-Tlsyx2YO.js";import"./index-vDCSPjrM.js";import"./index-CJDOQ1bl.js";import"./index-ynYvVAOK.js";import"./mdx-Dun3ONG_.js";import"./index-DzdDahau.js";import"./epic-video-DnXXh6qE.js";import"./use-event-source-BuD4_2SF.js";import"./index-CdzVFL-Z.js";import"./root-loader-BOzEMapJ.js";import"./pe-CIZUOJMr.js";import"./schemas-Uj5SZtvt.js";import"./online-DiNLkgTC.js";import"./loading-CDNzW5oO.js";import"./user-BsPobzjB.js";import"./workshop-config-Zfc8zU0x.js";import"./preload-helper-BXl3LOEh.js";import"./launch-editor-D2exGfVu.js";import"./progress-bar-DpWhcyhC.js";import"./revalidation-ws-BJWJviUX.js";const I=o(function(){const r=a(),[i]=m();new URLSearchParams(i).set("forceFresh","diff");const t=p(),e=n.useSpinDelay(t.state!=="idle",{delay:200,minDuration:200});return s.jsxs("div",{className:c("h-screen-safe relative",{"cursor-wait opacity-30":e}),children:[s.jsx("div",{className:"h-full pb-16",children:s.jsx(f,{diff:r.diff,allApps:r.allApps,userHasAccessPromise:r.userHasAccessPromise})}),s.jsx("div",{className:"bg-background fixed inset-x-0 bottom-0 z-10 flex h-16 items-center justify-end border-t",children:s.jsx("div",{className:"flex h-full items-center justify-end",children:s.jsx(d,{prev:r.prevLink,next:r.nextLink})})})]})});export{I as default};
|
|
2
|
-
//# sourceMappingURL=diff-DwJn8fSQ.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{w}from"./chunk-EPOLDU6W-BCLmut3y.js";import{j as m}from"./jsx-runtime-C5WNSv3b.js";import{r as u}from"./index-CqIc3cxq.js";import{E as g,D as h}from"./epic-video-DnXXh6qE.js";import"./use-event-source-BuD4_2SF.js";import"./index-DzdDahau.js";import"./index-vDCSPjrM.js";import"./index-CdzVFL-Z.js";import"./misc-W4055b-0.js";import"./tooltip-Tlsyx2YO.js";import"./root-loader-BOzEMapJ.js";import"./pe-CIZUOJMr.js";import"./schemas-Uj5SZtvt.js";import"./online-DiNLkgTC.js";import"./loading-CDNzW5oO.js";import"./user-BsPobzjB.js";import"./workshop-config-Zfc8zU0x.js";function l(p,r,i={}){const{schema:s}=i,e=crypto.randomUUID();return new Promise((t,o)=>{if(!window.parent||window.parent===window){console.log("[MCP] No parent frame available. Would have sent message:",{type:p,messageId:e,payload:r}),o(new Error("No parent frame available"));return}window.parent.postMessage({type:p,messageId:e,payload:r},"*");function n(a){if(a.data.type!=="ui-message-response"||a.data.messageId!==e)return;window.removeEventListener("message",n);const{response:d,error:f}=a.data.payload;if(f)return o(f);if(!s)return t(d);const c=s.safeParse(d);return c.success?t(c.data):o(c.error)}window.addEventListener("message",n)})}const D=w(function({loaderData:r}){const i=u.useRef(null);u.useEffect(()=>{r.videoInfos?.finally(()=>{if(window.parent.postMessage({type:"ui-lifecycle-iframe-ready"},"*"),!i.current)return;const e=i.current.clientHeight,t=i.current.clientWidth;window.parent.postMessage({type:"ui-size-change",payload:{height:e,width:t}},"*")})},[r.videoInfos]);async function s(e){const t=e.target;if(!(t instanceof HTMLAnchorElement))return;const o=t.href;if(!o)return;e.preventDefault(),e.stopPropagation();const n=o.startsWith("http")?new URL(o):new URL(o,window.location.origin);n.host===window.location.host&&n.pathname==="/login"&&await l("tool",{toolName:"login",params:{workshopDirectory:ENV.EPICSHOP_CONTEXT_CWD}}),await l("link",{url:n.toString()})}return m.jsx("div",{ref:i,onClickCapture:s,children:m.jsx(g,{epicVideoInfosPromise:r.videoInfos,children:m.jsx(h,{url:r.videoUrl})})})});export{D as default};
|
|
2
|
-
//# sourceMappingURL=epic-video-DEq93iL_.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
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{E as v}from"./launch-editor-D2exGfVu.js";import{P as w}from"./progress-BcA4i0iU.js";import{u as N}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 Z={getSitemapEntries:()=>[{route:"/finished"}]},_=({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}):[]},k={h1:()=>null},ee=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.jsx("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:k})})}):"No finished instructions yet..."}),e.jsx(a,{elementQuery:`#${s.articleId}`}),e.jsx(w,{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(v,{file:s.workshopFinished.file,relativePath:s.workshopFinished.relativePath}):null,e.jsx(h,{prev:s.prevStepLink,next:{to:"/"}})]})]}),e.jsx(E,{workshopTitle:s.workshopTitle,workshopFormEmbedUrl:s.workshopFormEmbedUrl})]})})});function E({workshopTitle:r,workshopFormEmbedUrl:s}){const t=N(),[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{ee as default,Z as handle,_ as meta};
|
|
2
|
-
//# sourceMappingURL=finished-BW_4ow3n.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"finished-BW_4ow3n.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 { 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</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","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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"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{w as j,a as E,c as A,d as C,e as N}from"./chunk-EPOLDU6W-BCLmut3y.js";import{j as r}from"./jsx-runtime-C5WNSv3b.js";import{g as T,R as H,P as U,C as t,a as b,D as B}from"./playground-DmEAkxG1.js";import{U as I}from"./diff-HIgoC1PO.js";import{G as R}from"./error-boundary-DxHqAEHX.js";import{u as S}from"./workshop-config-Zfc8zU0x.js";import{u as O}from"./misc-W4055b-0.js";import{P as a}from"./preview-fhmjENlm.js";import{T as k}from"./tests-1-kVRtTc.js";import"./index-CqIc3cxq.js";import"./loading-CDNzW5oO.js";import"./index-CdzVFL-Z.js";import"./tooltip-Tlsyx2YO.js";import"./index-vDCSPjrM.js";import"./root-loader-BOzEMapJ.js";import"./pe-CIZUOJMr.js";import"./schemas-Uj5SZtvt.js";import"./discord-BJkw0IrB.js";import"./user-BsPobzjB.js";import"./online-DiNLkgTC.js";import"./index-CJDOQ1bl.js";import"./index-ynYvVAOK.js";import"./status-indicator-C6DiLYL5.js";import"./index-DzdDahau.js";import"./set-playground-BSGwH9dH.js";import"./button-Cd-ekki5.js";import"./onboarding-indicator-B-XR90_G.js";import"./progress-bar-DpWhcyhC.js";import"./dialog-CzO65Z5w.js";import"./playground-window-x2mQ5o1O.js";import"./accordion-CQ7oujC6.js";import"./mdx-Dun3ONG_.js";import"./epic-video-DnXXh6qE.js";import"./use-event-source-BuD4_2SF.js";import"./preload-helper-BXl3LOEh.js";import"./launch-editor-D2exGfVu.js";import"./revalidation-ws-BJWJviUX.js";const l=["playground","problem","solution","tests","diff","chat"],L=n=>!!(n&&l.includes(n)),Ps=j(function({loaderData:e}){const{inBrowserBrowserRef:p}=A(),d=S(),[u]=C(),f=u.get("preview"),h=O(),x=N();function m(s){if(s==="tests")return ENV.EPICSHOP_DEPLOYED||!e.playground||e.playground.test.type==="none";if(s==="problem"||s==="solution"){if(e[s]?.dev.type==="none")return!0;if(ENV.EPICSHOP_DEPLOYED){const i=e[s]?.dev.type;return i!=="browser"&&i!=="export"&&!e[s]?.stackBlitzUrl}}return s==="playground"&&ENV.EPICSHOP_DEPLOYED?!0:s==="chat"?!d.product.discordChannelId:!1}function w(s){if(s==="tests"){if(!e.playground)return null;const{isTestRunning:i,testExitCode:o}=e.playground;return i?"running":o===0?"passed":o!==null&&o!==0?"failed":null}return(s==="problem"||s==="solution"||s==="playground")&&(s==="playground"?e.playground:e[s])?.isRunning?"running":null}const y=L(f)?f:l.find(s=>!m(s)),c=`/diff?${new URLSearchParams({app1:e.problem?.name??"",app2:e.solution?.name??""})}`;function g(s){s.altKey&&!s.ctrlKey&&!s.shiftKey&&!s.metaKey&&(s.preventDefault(),x(c))}const v=l.map(s=>{const i=m(s),o=w(s),P=s==="diff"&&h?c:`?${T(u,s,"playground")}`;return{id:s,label:s,hidden:i,status:o,to:P,onClick:s==="diff"?g:void 0}});return r.jsxs(H,{className:"relative flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden sm:col-span-1 sm:row-span-1",value:y,children:[r.jsx(U,{tabs:v}),r.jsxs("div",{className:"relative z-10 flex min-h-0 flex-1 flex-col overflow-hidden",children:[r.jsx(t,{value:"playground",className:"radix-state-inactive:hidden flex min-h-0 w-full grow basis-0 items-stretch justify-center self-start",forceMount:!0,children:r.jsx(b,{appInfo:e.playground,problemAppName:e.problem?.name,inBrowserBrowserRef:p,allApps:e.allApps,isUpToDate:e.playground?.isUpToDate??!1})}),r.jsx(t,{value:"problem",className:"radix-state-inactive:hidden flex min-h-0 w-full grow basis-0 items-stretch justify-center self-start",forceMount:!0,children:r.jsx(a,{appInfo:e.problem,inBrowserBrowserRef:p})}),r.jsx(t,{value:"solution",className:"radix-state-inactive:hidden flex min-h-0 w-full grow basis-0 items-stretch justify-center self-start",forceMount:!0,children:r.jsx(a,{appInfo:e.solution,inBrowserBrowserRef:p})}),r.jsx(t,{value:"tests",className:"radix-state-inactive:hidden flex min-h-0 w-full grow basis-0 items-stretch justify-center self-start overflow-hidden",children:r.jsx(k,{appInfo:e.playground,problemAppName:e.problem?.name,allApps:e.allApps,isUpToDate:e.playground?.isUpToDate??!1,userHasAccessPromise:e.userHasAccessPromise})}),r.jsx(t,{value:"diff",className:"radix-state-inactive:hidden flex h-full min-h-0 w-full grow basis-0 items-stretch justify-center self-start",children:r.jsx(I,{diff:e.diff,allApps:e.allApps,userHasAccessPromise:e.userHasAccessPromise})}),r.jsx(t,{value:"chat",className:"radix-state-inactive:hidden flex h-full min-h-0 w-full grow basis-0 items-stretch justify-center self-start",children:r.jsx(B,{discordPostsPromise:e.discordPostsPromise})})]})]})}),js=E(function(){return r.jsx(R,{statusHandlers:{404:()=>r.jsx("p",{children:"Sorry, we couldn't find an app here."})}})});export{js as ErrorBoundary,Ps as default};
|
|
2
|
-
//# sourceMappingURL=index-BgExztV_.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{w as s,a,b as i,L as l}from"./chunk-EPOLDU6W-BCLmut3y.js";import{j as e}from"./jsx-runtime-C5WNSv3b.js";import{E as n}from"./index-CEVyDj51.js";import{E as m}from"./epic-video-DnXXh6qE.js";import{G as d}from"./error-boundary-DxHqAEHX.js";import{u as c}from"./revalidation-ws-BJWJviUX.js";import{E as x}from"./launch-editor-D2exGfVu.js";import{M as p}from"./mdx-Dun3ONG_.js";import{c as f}from"./misc-W4055b-0.js";import{g as u}from"./root-loader-BOzEMapJ.js";import{g as h}from"./seo-t5J-DRxw.js";import"./index-CqIc3cxq.js";import"./use-event-source-BuD4_2SF.js";import"./index-DzdDahau.js";import"./index-vDCSPjrM.js";import"./index-CdzVFL-Z.js";import"./tooltip-Tlsyx2YO.js";import"./pe-CIZUOJMr.js";import"./schemas-Uj5SZtvt.js";import"./online-DiNLkgTC.js";import"./loading-CDNzW5oO.js";import"./user-BsPobzjB.js";import"./workshop-config-Zfc8zU0x.js";import"./preload-helper-BXl3LOEh.js";import"./progress-bar-DpWhcyhC.js";const Q=o=>{const r=o.data,t=u(o.matches);return!r||!t?[{title:"🦉 | Error"}]:h({title:`📚 | ${r.title} | ${t.workshopTitle}`,description:`Extras for ${t.workshopTitle}`,ogTitle:r.title,ogDescription:`Extras for ${t.workshopTitle}`,instructor:t.instructor,requestInfo:t.requestInfo})};function j({extra:o}){return e.jsx("li",{children:e.jsxs(l,{className:f("relative flex items-center gap-4 px-4 py-3 text-lg font-semibold transition","hover:bg-muted/60 focus:bg-muted/60"),prefetch:"intent",to:o.dirName,children:[e.jsx("span",{className:"text-muted-foreground text-xs font-normal tabular-nums",children:"•"}),e.jsx("span",{className:"truncate",children:o.title})]})})}const v={h1:()=>null},W=s(function(){const r=i();return c({watchPaths:["./extra","./example","./examples"]}),e.jsxs("main",{className:"relative flex h-full w-full max-w-5xl flex-col justify-between border-r md:w-3/4 xl:w-2/3",children:[e.jsxs("article",{id:r.articleId,className:"shadow-on-scrollbox scrollbar-thin scrollbar-thumb-scrollbar flex w-full flex-1 flex-col gap-12 overflow-y-scroll px-3 py-4 pt-6 md:px-10 md:py-12 md:pt-16",children:[e.jsx("div",{children:e.jsx("h1",{className:"text-[clamp(3rem,6vw,7.5rem)] leading-none font-extrabold",children:r.title})}),e.jsx("div",{children:r.extrasReadme.compiled.status==="success"&&r.extrasReadme.compiled.code?e.jsx(m,{epicVideoInfosPromise:r.epicVideoInfosPromise,children:e.jsx("div",{className:"prose dark:prose-invert sm:prose-lg",children:e.jsx(p,{code:r.extrasReadme.compiled.code,components:v})})}):r.extrasReadme.compiled.status==="error"?e.jsxs("div",{className:"text-foreground-destructive",children:["There was an error:",e.jsx("pre",{children:r.extrasReadme.compiled.error})]}):"No extras overview yet..."}),e.jsxs("div",{className:"pt-6",children:[e.jsx("h2",{className:"pb-4 font-mono text-xs font-semibold uppercase",children:"Extras"}),r.extras.length?e.jsx("ul",{className:"divide-border dark:divide-border/50 flex flex-col divide-y",children:r.extras.map(t=>e.jsx(j,{extra:t},t.dirName))}):e.jsx("p",{className:"text-muted-foreground",children:"No extras yet. Add one to get started."})]})]}),e.jsx(n,{elementQuery:`#${r.articleId}`}),e.jsx("div",{className:"@container flex h-16 justify-center border-t",children:e.jsx(x,{file:r.extrasReadme.file,relativePath:r.extrasReadme.relativePath})})]})}),z=a(function(){return e.jsx(d,{})});export{z as ErrorBoundary,W as default,Q as meta};
|
|
2
|
-
//# sourceMappingURL=index-IgBUhsxX.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{w as l,a as m,L as n}from"./chunk-EPOLDU6W-BCLmut3y.js";import{j as e}from"./jsx-runtime-C5WNSv3b.js";import{E as a}from"./index-CEVyDj51.js";import{E as c}from"./epic-video-DnXXh6qE.js";import{G as p}from"./error-boundary-DxHqAEHX.js";import{E as d}from"./launch-editor-D2exGfVu.js";import{M as x}from"./mdx-Dun3ONG_.js";import{c as f}from"./misc-W4055b-0.js";import{P as h,u}from"./progress-BcA4i0iU.js";import"./index-CqIc3cxq.js";import"./use-event-source-BuD4_2SF.js";import"./index-DzdDahau.js";import"./index-vDCSPjrM.js";import"./index-CdzVFL-Z.js";import"./tooltip-Tlsyx2YO.js";import"./root-loader-BOzEMapJ.js";import"./pe-CIZUOJMr.js";import"./schemas-Uj5SZtvt.js";import"./online-DiNLkgTC.js";import"./loading-CDNzW5oO.js";import"./user-BsPobzjB.js";import"./workshop-config-Zfc8zU0x.js";import"./preload-helper-BXl3LOEh.js";import"./progress-bar-DpWhcyhC.js";function b({index:o,exercise:r}){const s=u(r.exerciseNumber);return e.jsx("li",{children:e.jsxs(n,{className:f("hover:bg-muted/60 relative flex items-center gap-4 px-4 py-3 text-lg font-semibold transition after:absolute after:right-10 after:-translate-x-2 after:opacity-0 after:transition after:content-['→'] hover:after:translate-x-0 hover:after:opacity-100",s),to:`${r.exerciseNumber.toString().padStart(2,"0")}`,"data-keyboard-action":o===0?"g+n":void 0,children:[e.jsx("span",{className:"text-xs font-normal tabular-nums opacity-50",children:r.exerciseNumber}),e.jsx("span",{children:r.title})]})},r.exerciseNumber)}const j={h1:()=>null},q=l(function({loaderData:r}){const s=e.jsxs("ul",{className:"divide-border dark:divide-border/50 flex flex-col divide-y",children:[e.jsx("strong",{className:"px-10 pb-3 font-mono text-xs uppercase",children:"Exercises"}),r.exercises.map((t,i)=>e.jsx(b,{index:i,exercise:t},t.exerciseNumber))]});return e.jsxs("main",{className:"relative flex h-full w-full max-w-5xl flex-col justify-between border-r md:w-3/4 xl:w-2/3",children:[e.jsxs("article",{id:r.articleId,className:"shadow-on-scrollbox scrollbar-thin scrollbar-thumb-scrollbar flex w-full flex-1 flex-col gap-12 overflow-y-scroll px-3 py-4 pt-6 md:px-10 md:py-12 md:pt-16",children:[e.jsx("div",{children:e.jsx("h1",{className:"px-10 text-[clamp(3rem,6vw,7.5rem)] leading-none font-extrabold",children:r.title})}),e.jsxs("div",{className:"w-full max-w-none scroll-pt-6 border-t px-3 pt-3 md:px-10 md:pt-8",children:[e.jsx("h2",{className:"pb-5 font-mono text-xs font-semibold uppercase",children:"Intro"}),r.workshopReadme.compiled.status==="success"&&r.workshopReadme.compiled.code?e.jsx(c,{epicVideoInfosPromise:r.epicVideoInfosPromise,children:e.jsx("div",{className:"prose dark:prose-invert sm:prose-lg",children:e.jsx(x,{code:r.workshopReadme.compiled.code,components:j})})}):r.workshopReadme.compiled.status==="error"?e.jsxs("div",{className:"text-foreground-destructive",children:["There was an error:",e.jsx("pre",{children:r.workshopReadme.compiled.error})]}):"No instructions yet..."]}),e.jsx("div",{className:"pt-10 pb-5",children:r.workshopReadme.compiled.status==="success"&&r.workshopReadme.compiled.code&&r.workshopReadme.compiled.code.length>500?s:null})]}),e.jsx(a,{elementQuery:`#${r.articleId}`}),e.jsx(h,{type:"workshop-instructions",className:"h-14 border-t px-6"}),e.jsx("div",{className:"@container flex h-16 justify-center border-t",children:e.jsx(d,{file:r.workshopReadme.file,relativePath:r.workshopReadme.relativePath})})]})}),z=m(function(){return e.jsx(p,{})});export{z as ErrorBoundary,q as default};
|
|
2
|
-
//# sourceMappingURL=index-PKjGT1Rp.js.map
|
|
@@ -1 +0,0 @@
|
|
|
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-CKcj2hDc.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-C4sVkuEq.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/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-BW_4ow3n.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/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-9e0c0428.js","version":"9e0c0428"};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"offline-videos-BP7_xJkO.js","sources":["../../../app/routes/admin+/offline-videos.tsx"],"sourcesContent":["import {\n\tdeleteAllOfflineVideos,\n\tdeleteOfflineVideo,\n\tdeleteOfflineVideosForWorkshopId,\n\tgetOfflineVideoAdminSummary,\n} from '@epic-web/workshop-utils/offline-videos.server'\nimport { Form, data, redirect } from 'react-router'\nimport { cn, ensureUndeployed, useDoubleCheck } from '#app/utils/misc.tsx'\nimport { type Route } from './+types/offline-videos.tsx'\n\nexport async function loader({ request: _request }: Route.LoaderArgs) {\n\tensureUndeployed()\n\tconst summary = await getOfflineVideoAdminSummary()\n\treturn data({ summary })\n}\n\nexport async function action({ request }: Route.ActionArgs) {\n\tensureUndeployed()\n\tconst formData = await request.formData()\n\tconst intent = formData.get('intent')\n\n\tif (intent === 'delete-video') {\n\t\tconst playbackId = formData.get('playbackId')\n\t\tif (typeof playbackId !== 'string' || playbackId.length === 0) {\n\t\t\treturn data(\n\t\t\t\t{ status: 'error', message: 'Missing playbackId' },\n\t\t\t\t{ status: 400 },\n\t\t\t)\n\t\t}\n\t\tawait deleteOfflineVideo(playbackId)\n\t\treturn redirect('/admin/offline-videos')\n\t}\n\n\tif (intent === 'delete-workshop') {\n\t\tconst workshopId = formData.get('workshopId')\n\t\tif (typeof workshopId !== 'string' || workshopId.length === 0) {\n\t\t\treturn data(\n\t\t\t\t{ status: 'error', message: 'Missing workshopId' },\n\t\t\t\t{ status: 400 },\n\t\t\t)\n\t\t}\n\t\tawait deleteOfflineVideosForWorkshopId(workshopId)\n\t\treturn redirect('/admin/offline-videos')\n\t}\n\n\tif (intent === 'delete-all') {\n\t\tawait deleteAllOfflineVideos()\n\t\treturn redirect('/admin/offline-videos')\n\t}\n\n\treturn data({ status: 'error', message: 'Unknown intent' }, { status: 400 })\n}\n\nfunction formatBytes(bytes: number) {\n\tif (bytes < 1024) return `${bytes} B`\n\tconst kb = bytes / 1024\n\tif (kb < 1024) return `${kb.toFixed(1)} KB`\n\tconst mb = kb / 1024\n\tif (mb < 1024) return `${mb.toFixed(1)} MB`\n\treturn `${(mb / 1024).toFixed(1)} GB`\n}\n\nfunction DoubleCheckButton({\n\tchildren,\n\tconfirmLabel = 'Confirm',\n\tclassName,\n\t...props\n}: React.ComponentPropsWithoutRef<'button'> & {\n\tconfirmLabel?: string\n}) {\n\tconst { doubleCheck, getButtonProps } = useDoubleCheck()\n\n\treturn (\n\t\t<button\n\t\t\t{...getButtonProps(props)}\n\t\t\tclassName={cn(\n\t\t\t\t'border-border bg-background text-foreground focus:ring-ring inline-flex min-w-[120px] items-center justify-center gap-2 rounded-md border px-3 py-1 text-sm font-medium transition-colors focus:ring-2 focus:ring-offset-2 focus:outline-none disabled:pointer-events-none disabled:opacity-50',\n\t\t\t\tdoubleCheck\n\t\t\t\t\t? 'border-destructive bg-destructive text-destructive-foreground hover:bg-destructive/90 hover:text-destructive-foreground'\n\t\t\t\t\t: 'hover:bg-muted hover:text-foreground',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t<span className=\"grid items-center justify-center\">\n\t\t\t\t<span aria-hidden className=\"col-start-1 row-start-1 opacity-0\">\n\t\t\t\t\t{children}\n\t\t\t\t</span>\n\t\t\t\t<span aria-hidden className=\"col-start-1 row-start-1 opacity-0\">\n\t\t\t\t\t{confirmLabel}\n\t\t\t\t</span>\n\t\t\t\t<span className=\"col-start-1 row-start-1\">\n\t\t\t\t\t{doubleCheck ? confirmLabel : children}\n\t\t\t\t</span>\n\t\t\t</span>\n\t\t</button>\n\t)\n}\n\nexport default function OfflineVideosAdmin({\n\tloaderData,\n}: Route.ComponentProps) {\n\tconst { summary } = loaderData\n\n\tif (summary.workshops.length === 0) {\n\t\treturn (\n\t\t\t<p className=\"text-muted-foreground text-sm\">\n\t\t\t\tNo offline videos are downloaded yet.\n\t\t\t</p>\n\t\t)\n\t}\n\n\treturn (\n\t\t<div className=\"flex flex-col gap-6\">\n\t\t\t<div className=\"flex flex-wrap items-center justify-between gap-3\">\n\t\t\t\t<h2 className=\"text-lg font-semibold\">Downloads</h2>\n\t\t\t\t<Form method=\"post\">\n\t\t\t\t\t<DoubleCheckButton type=\"submit\" name=\"intent\" value=\"delete-all\">\n\t\t\t\t\t\tDelete all downloads\n\t\t\t\t\t</DoubleCheckButton>\n\t\t\t\t</Form>\n\t\t\t</div>\n\t\t\t{summary.workshops.map((workshop) => (\n\t\t\t\t<section key={workshop.id} className=\"border-border rounded border p-4\">\n\t\t\t\t\t<div className=\"flex flex-wrap items-baseline justify-between gap-2\">\n\t\t\t\t\t\t<h2 className=\"text-lg font-semibold\">{workshop.title}</h2>\n\t\t\t\t\t\t<div className=\"flex flex-wrap items-center gap-3\">\n\t\t\t\t\t\t\t<span className=\"text-muted-foreground text-sm\">\n\t\t\t\t\t\t\t\t{workshop.videos.length} video\n\t\t\t\t\t\t\t\t{workshop.videos.length === 1 ? '' : 's'} ·{' '}\n\t\t\t\t\t\t\t\t{formatBytes(workshop.totalBytes)}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t<Form method=\"post\">\n\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"workshopId\" value={workshop.id} />\n\t\t\t\t\t\t\t\t<DoubleCheckButton\n\t\t\t\t\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\t\t\t\t\tname=\"intent\"\n\t\t\t\t\t\t\t\t\tvalue=\"delete-workshop\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\tDelete workshop downloads\n\t\t\t\t\t\t\t\t</DoubleCheckButton>\n\t\t\t\t\t\t\t</Form>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div className=\"mt-3 overflow-x-auto\">\n\t\t\t\t\t\t<table className=\"border-border w-full border text-sm\">\n\t\t\t\t\t\t\t<thead className=\"bg-muted text-foreground\">\n\t\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t\t<th className=\"border-border border px-3 py-2 text-left\">\n\t\t\t\t\t\t\t\t\t\tTitle\n\t\t\t\t\t\t\t\t\t</th>\n\t\t\t\t\t\t\t\t\t<th className=\"border-border border px-3 py-2 text-left\">\n\t\t\t\t\t\t\t\t\t\tStatus\n\t\t\t\t\t\t\t\t\t</th>\n\t\t\t\t\t\t\t\t\t<th className=\"border-border border px-3 py-2 text-left\">\n\t\t\t\t\t\t\t\t\t\tSize\n\t\t\t\t\t\t\t\t\t</th>\n\t\t\t\t\t\t\t\t\t<th className=\"border-border border px-3 py-2 text-left\">\n\t\t\t\t\t\t\t\t\t\tUpdated\n\t\t\t\t\t\t\t\t\t</th>\n\t\t\t\t\t\t\t\t\t<th className=\"border-border w-[140px] border px-3 py-2 text-left\">\n\t\t\t\t\t\t\t\t\t\tActions\n\t\t\t\t\t\t\t\t\t</th>\n\t\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t</thead>\n\t\t\t\t\t\t\t<tbody>\n\t\t\t\t\t\t\t\t{workshop.videos.map((video) => (\n\t\t\t\t\t\t\t\t\t<tr key={`${workshop.id}-${video.playbackId}`}>\n\t\t\t\t\t\t\t\t\t\t<td className=\"border-border max-w-[360px] border px-3 py-2\">\n\t\t\t\t\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\t\t\t\t\thref={video.url}\n\t\t\t\t\t\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\t\t\t\t\t\trel=\"noreferrer\"\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"block truncate underline-offset-4 hover:underline\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{video.title}\n\t\t\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t\t\t<td className=\"border-border border px-3 py-2\">\n\t\t\t\t\t\t\t\t\t\t\t{video.status}\n\t\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t\t\t<td className=\"border-border border px-3 py-2\">\n\t\t\t\t\t\t\t\t\t\t\t{video.size ? formatBytes(video.size) : '—'}\n\t\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t\t\t<td className=\"border-border border px-3 py-2\">\n\t\t\t\t\t\t\t\t\t\t\t{new Date(video.updatedAt).toLocaleString()}\n\t\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t\t\t<td className=\"border-border w-[140px] border px-3 py-2\">\n\t\t\t\t\t\t\t\t\t\t\t<Form method=\"post\">\n\t\t\t\t\t\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"hidden\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tname=\"playbackId\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tvalue={video.playbackId}\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t<DoubleCheckButton\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tname=\"intent\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tvalue=\"delete-video\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"w-full\"\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\tDelete\n\t\t\t\t\t\t\t\t\t\t\t\t</DoubleCheckButton>\n\t\t\t\t\t\t\t\t\t\t\t</Form>\n\t\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t</tbody>\n\t\t\t\t\t\t</table>\n\t\t\t\t\t</div>\n\t\t\t\t</section>\n\t\t\t))}\n\t\t</div>\n\t)\n}\n"],"names":["formatBytes","bytes","kb","toFixed","mb","DoubleCheckButton","children","confirmLabel","className","props","doubleCheck","getButtonProps","useDoubleCheck","jsx","cn","jsxs","offlineVideos","_UNSAFE_withComponentProps","loaderData","summary","workshops","length","Form","method","type","name","value","map","workshop","title","videos","totalBytes","id","video","href","url","target","rel","status","size","Date","updatedAt","toLocaleString","playbackId"],"mappings":"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"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{w as g,b as v,k as y,f as w,F as d,L as N}from"./chunk-EPOLDU6W-BCLmut3y.js";import{j as e}from"./jsx-runtime-C5WNSv3b.js";import{B as x}from"./button-Cd-ekki5.js";import{b as P,I as l}from"./misc-W4055b-0.js";import{S as o}from"./tooltip-Tlsyx2YO.js";import{u as R}from"./root-loader-BOzEMapJ.js";import"./index-CqIc3cxq.js";import"./index-vDCSPjrM.js";const V=[{value:"best",label:"Best available"},{value:"high",label:"High"},{value:"medium",label:"Medium"},{value:"low",label:"Low"}],C=g(function(){const m=v(),n=R(),c=n.preferences?.player,u=n.preferences?.offlineVideo,h=n.preferences?.fontSize,p=n.preferences?.presence,f=n.preferences?.playground,b=n.preferences?.exerciseWarning,j=y(),i=w(),s=i.data?.offlineVideos??m.offlineVideos,t=s.downloadState.status==="running",a=j.state==="submitting";return P(()=>{i.state==="idle"&&i.load("/resources/offline-videos")},t?2e3:null),e.jsx("div",{className:"h-full w-full overflow-y-auto",children:e.jsxs("main",{className:"container mt-12 flex w-full max-w-3xl grow flex-col gap-4 pb-24",children:[e.jsx("h1",{className:"text-h1 mb-4",children:"Preferences"}),e.jsxs(d,{method:"post",className:"flex w-full max-w-sm flex-col gap-4",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-body-xl mb-2",children:"Video Player Preferences"}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("label",{htmlFor:"minResolution",children:"Minimum Resolution:"}),e.jsxs("select",{id:"minResolution",name:"minResolution",defaultValue:c?.minResolution,className:"border-border bg-background text-foreground rounded-md border px-2 py-1",children:[e.jsx("option",{value:"",children:"Auto"}),e.jsx("option",{value:"480",children:"480p"}),e.jsx("option",{value:"720",children:"720p"}),e.jsx("option",{value:"1080",children:"1080p"}),e.jsx("option",{value:"1440",children:"1440p"}),e.jsx("option",{value:"2160",children:"2160p (4K)"})]})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("label",{htmlFor:"maxResolution",children:"Maximum Resolution:"}),e.jsxs("select",{id:"maxResolution",name:"maxResolution",defaultValue:c?.maxResolution,className:"border-border bg-background text-foreground rounded-md border px-2 py-1",children:[e.jsx("option",{value:"",children:"Auto"}),e.jsx("option",{value:"720",children:"720p"}),e.jsx("option",{value:"1080",children:"1080p"}),e.jsx("option",{value:"1440",children:"1440p"}),e.jsx("option",{value:"2160",children:"2160p (4K)"})]})]})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-body-xl mb-2",children:"Offline Video Downloads"}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("label",{htmlFor:"downloadResolution",children:"Download Resolution:"}),e.jsx("select",{id:"downloadResolution",name:"downloadResolution",defaultValue:u?.downloadResolution??"best",className:"border-border bg-background text-foreground rounded-md border px-2 py-1",children:V.map(r=>e.jsx("option",{value:r.value,children:r.label},r.value))})]}),e.jsx("p",{className:"text-muted-foreground text-sm",children:"Defaults to the best available resolution."})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"mb-2 flex items-center gap-2",children:[e.jsx("h2",{className:"text-body-xl",children:"Font Size Preference"}),e.jsx(o,{content:"Defaults to 16px",children:e.jsx(l,{name:"Question",tabIndex:0})})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("label",{htmlFor:"fontSize",children:"Font Size"}),e.jsx("input",{type:"number",id:"fontSize",name:"fontSize",defaultValue:h??16,step:"1",min:"12",max:"26",className:"border-border bg-background text-foreground rounded-md border px-2 py-1"})]})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"mb-2 flex items-center gap-2",children:[e.jsx("h2",{className:"text-body-xl",children:"Presence Preference"}),e.jsx(o,{content:"This controls whether your name and avatar are displayed in the pile of faces in navigation",children:e.jsx(l,{name:"Question",tabIndex:0})})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("input",{type:"checkbox",id:"optOutPresence",name:"optOutPresence",defaultChecked:p?.optOut}),e.jsx("label",{htmlFor:"optOutPresence",children:"Opt out of presence features"})]})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"mb-2 flex items-center gap-2",children:[e.jsx("h2",{className:"text-body-xl",children:"Persist Playground"}),e.jsx(o,{content:'When enabled, clicking "Set to Playground" will save the current playground in the "saved-playgrounds" directory.',children:e.jsx(l,{name:"Question",tabIndex:0})})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("input",{type:"checkbox",id:"persistPlayground",name:"persistPlayground",defaultChecked:f?.persist}),e.jsx("label",{htmlFor:"persistPlayground",children:"Enable saving playground"})]})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"mb-2 flex items-center gap-2",children:[e.jsx("h2",{className:"text-body-xl",children:"Exercise Directory Warning"}),e.jsx(o,{content:"When enabled, you'll see a warning banner when you have changes in the exercises directory. This helps remind you to work in the playground directory instead.",children:e.jsx(l,{name:"Question",tabIndex:0})})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("input",{type:"checkbox",id:"dismissExerciseWarning",name:"dismissExerciseWarning",defaultChecked:b?.dismissed}),e.jsx("label",{htmlFor:"dismissExerciseWarning",children:"Dismiss exercise directory warnings"})]})]}),e.jsx("div",{className:"h-4"}),e.jsx(x,{varient:"primary",type:"submit",name:"intent",value:"update-preferences",disabled:a,children:a?"Updating...":"Update Preferences"})]}),e.jsxs("section",{className:"border-border mt-6 flex w-full max-w-xl flex-col gap-3 border-t pt-6",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("h2",{className:"text-body-xl",children:"Offline videos"}),e.jsx(o,{content:"Keep videos ready to watch when you're offline.",children:e.jsx(l,{name:"Question",tabIndex:0})})]}),e.jsx("p",{className:"text-muted-foreground text-sm",children:"Download all workshop videos so you can watch them when offline."}),e.jsxs("p",{className:"text-muted-foreground text-sm",children:["Admins can manage all downloaded videos on the"," ",e.jsx(N,{className:"text-foreground underline",to:"/admin/offline-videos",children:"Offline videos admin page"}),"."]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-3",children:[e.jsx(d,{method:"post",children:e.jsx(x,{varient:"primary",type:"submit",name:"intent",value:"download-offline-videos",disabled:t||a||s.totalVideos===0,children:t?"Downloading...":"Download all videos"})}),e.jsx(d,{method:"post",children:e.jsx("button",{type:"submit",name:"intent",value:"delete-offline-videos",disabled:a||s.downloadedVideos===0,className:"border-border text-foreground hover:bg-muted inline-flex items-center gap-2 rounded border px-3 py-2 text-sm disabled:cursor-not-allowed disabled:opacity-50",children:"Delete offline videos"})}),e.jsxs("span",{className:"text-muted-foreground text-sm",children:[s.downloadedVideos," of ",s.totalVideos," ","downloaded",s.unavailableVideos>0?` (${s.unavailableVideos} unavailable)`:null]})]}),t?e.jsxs("div",{className:"text-muted-foreground text-sm",children:[e.jsxs("p",{children:["Downloading ",s.downloadState.completed," of"," ",s.downloadState.total," videos"]}),s.downloadState.current?e.jsxs("p",{className:"truncate",children:["Current: ",s.downloadState.current.title]}):null]}):null]})]})})});export{C as default};
|
|
2
|
-
//# sourceMappingURL=preferences-D6HQ5bK1.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"preferences-D6HQ5bK1.js","sources":["../../../app/routes/_app+/preferences.tsx"],"sourcesContent":["import {\n\tgetPreferences,\n\tsetPreferences,\n} from '@epic-web/workshop-utils/db.server'\nimport {\n\tgetOfflineVideoSummary,\n\tstartOfflineVideoDownload,\n\tdeleteOfflineVideosForWorkshop,\n} from '@epic-web/workshop-utils/offline-videos.server'\nimport {\n\tForm,\n\tLink,\n\tuseFetcher,\n\tuseLoaderData,\n\tuseNavigation,\n} from 'react-router'\nimport { Button } from '#app/components/button.tsx'\nimport { Icon } from '#app/components/icons.tsx'\nimport { SimpleTooltip } from '#app/components/ui/tooltip.tsx'\nimport { ensureUndeployed, useInterval } from '#app/utils/misc.tsx'\nimport { useRootLoaderData } from '#app/utils/root-loader.ts'\nimport { redirectWithToast } from '#app/utils/toast.server.ts'\nimport { type Route } from './+types/preferences.tsx'\n\nconst downloadResolutionOptions = [\n\t{ value: 'best', label: 'Best available' },\n\t{ value: 'high', label: 'High' },\n\t{ value: 'medium', label: 'Medium' },\n\t{ value: 'low', label: 'Low' },\n] as const\ntype DownloadResolutionOption =\n\t(typeof downloadResolutionOptions)[number]['value']\n\nfunction isDownloadResolutionOption(\n\tvalue: FormDataEntryValue | null,\n): value is DownloadResolutionOption {\n\treturn (\n\t\ttypeof value === 'string' &&\n\t\tdownloadResolutionOptions.some((option) => option.value === value)\n\t)\n}\n\nexport async function loader({ request }: Route.LoaderArgs) {\n\tensureUndeployed()\n\tconst [preferences, offlineVideos] = await Promise.all([\n\t\tgetPreferences(),\n\t\tgetOfflineVideoSummary({ request }),\n\t])\n\treturn { preferences, offlineVideos }\n}\n\nexport async function action({ request }: Route.ActionArgs) {\n\tensureUndeployed()\n\tconst formData = await request.formData()\n\tconst intent = formData.get('intent')\n\n\tif (intent === 'download-offline-videos') {\n\t\tconst result = await startOfflineVideoDownload({ request })\n\t\tif (result.queued === 0) {\n\t\t\tconst description =\n\t\t\t\tresult.available === 0\n\t\t\t\t\t? 'No downloadable videos were found for this workshop.'\n\t\t\t\t\t: result.unavailable > 0\n\t\t\t\t\t\t? 'All available videos are already downloaded. Some videos require access to download.'\n\t\t\t\t\t\t: 'All available videos are already downloaded.'\n\t\t\treturn redirectWithToast('/preferences', {\n\t\t\t\ttitle: 'Offline videos are ready',\n\t\t\t\tdescription,\n\t\t\t\ttype: 'success',\n\t\t\t})\n\t\t}\n\n\t\treturn redirectWithToast('/preferences', {\n\t\t\ttitle: 'Offline downloads started',\n\t\t\tdescription: `Queued ${result.queued} video${result.queued === 1 ? '' : 's'} for download.`,\n\t\t\ttype: 'success',\n\t\t})\n\t}\n\n\tif (intent === 'delete-offline-videos') {\n\t\tconst result = await deleteOfflineVideosForWorkshop()\n\t\tconst description =\n\t\t\tresult.deletedFiles === 0\n\t\t\t\t? 'No offline videos were removed.'\n\t\t\t\t: `Removed ${result.deletedFiles} offline video${\n\t\t\t\t\t\tresult.deletedFiles === 1 ? '' : 's'\n\t\t\t\t\t}.`\n\t\treturn redirectWithToast('/preferences', {\n\t\t\ttitle: 'Offline videos cleared',\n\t\t\tdescription,\n\t\t\ttype: 'success',\n\t\t})\n\t}\n\n\tconst minResolution = formData.get('minResolution')\n\tconst maxResolution = formData.get('maxResolution')\n\tconst downloadResolution = formData.get('downloadResolution')\n\tconst fontSize = formData.get('fontSize')\n\tconst optOutPresence = formData.get('optOutPresence') === 'on'\n\tconst persistPlayground = formData.get('persistPlayground') === 'on'\n\tconst dismissExerciseWarning = formData.get('dismissExerciseWarning') === 'on'\n\tconst downloadResolutionValue = isDownloadResolutionOption(downloadResolution)\n\t\t? downloadResolution\n\t\t: undefined\n\n\tawait setPreferences({\n\t\tplayer: {\n\t\t\tminResolution: minResolution ? Number(minResolution) : undefined,\n\t\t\tmaxResolution: maxResolution ? Number(maxResolution) : undefined,\n\t\t},\n\t\tofflineVideo: {\n\t\t\tdownloadResolution: downloadResolutionValue,\n\t\t},\n\t\tfontSize: fontSize ? Number(fontSize) : undefined,\n\t\tpresence: { optOut: optOutPresence },\n\t\tplayground: { persist: persistPlayground },\n\t\texerciseWarning: { dismissed: dismissExerciseWarning },\n\t})\n\n\treturn redirectWithToast('/preferences', {\n\t\ttitle: 'Preferences updated',\n\t\tdescription: 'Your preferences have been updated.',\n\t\ttype: 'success',\n\t})\n}\n\nexport default function AccountSettings() {\n\tconst loaderData = useLoaderData<typeof loader>()\n\tconst rootData = useRootLoaderData()\n\tconst playerPreferences = rootData.preferences?.player\n\tconst offlineVideoPreferences = rootData.preferences?.offlineVideo\n\tconst fontSizePreference = rootData.preferences?.fontSize\n\tconst presencePreferences = rootData.preferences?.presence\n\tconst playgroundPreferences = rootData.preferences?.playground\n\tconst exerciseWarningPreferences = rootData.preferences?.exerciseWarning\n\tconst navigation = useNavigation()\n\tconst offlineVideosFetcher = useFetcher<typeof loader>()\n\tconst offlineVideos =\n\t\tofflineVideosFetcher.data?.offlineVideos ?? loaderData.offlineVideos\n\tconst isDownloading = offlineVideos.downloadState.status === 'running'\n\n\tconst isSubmitting = navigation.state === 'submitting'\n\n\tuseInterval(\n\t\t() => {\n\t\t\tif (offlineVideosFetcher.state === 'idle') {\n\t\t\t\tvoid offlineVideosFetcher.load('/resources/offline-videos')\n\t\t\t}\n\t\t},\n\t\tisDownloading ? 2000 : null,\n\t)\n\n\treturn (\n\t\t<div className=\"h-full w-full overflow-y-auto\">\n\t\t\t<main className=\"container mt-12 flex w-full max-w-3xl grow flex-col gap-4 pb-24\">\n\t\t\t\t<h1 className=\"text-h1 mb-4\">Preferences</h1>\n\t\t\t\t<Form method=\"post\" className=\"flex w-full max-w-sm flex-col gap-4\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<h2 className=\"text-body-xl mb-2\">Video Player Preferences</h2>\n\t\t\t\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t\t\t\t<label htmlFor=\"minResolution\">Minimum Resolution:</label>\n\t\t\t\t\t\t\t<select\n\t\t\t\t\t\t\t\tid=\"minResolution\"\n\t\t\t\t\t\t\t\tname=\"minResolution\"\n\t\t\t\t\t\t\t\tdefaultValue={playerPreferences?.minResolution}\n\t\t\t\t\t\t\t\tclassName=\"border-border bg-background text-foreground rounded-md border px-2 py-1\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<option value=\"\">Auto</option>\n\t\t\t\t\t\t\t\t<option value=\"480\">480p</option>\n\t\t\t\t\t\t\t\t<option value=\"720\">720p</option>\n\t\t\t\t\t\t\t\t<option value=\"1080\">1080p</option>\n\t\t\t\t\t\t\t\t<option value=\"1440\">1440p</option>\n\t\t\t\t\t\t\t\t<option value=\"2160\">2160p (4K)</option>\n\t\t\t\t\t\t\t</select>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t\t\t\t<label htmlFor=\"maxResolution\">Maximum Resolution:</label>\n\t\t\t\t\t\t\t<select\n\t\t\t\t\t\t\t\tid=\"maxResolution\"\n\t\t\t\t\t\t\t\tname=\"maxResolution\"\n\t\t\t\t\t\t\t\tdefaultValue={playerPreferences?.maxResolution}\n\t\t\t\t\t\t\t\tclassName=\"border-border bg-background text-foreground rounded-md border px-2 py-1\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<option value=\"\">Auto</option>\n\t\t\t\t\t\t\t\t<option value=\"720\">720p</option>\n\t\t\t\t\t\t\t\t<option value=\"1080\">1080p</option>\n\t\t\t\t\t\t\t\t<option value=\"1440\">1440p</option>\n\t\t\t\t\t\t\t\t<option value=\"2160\">2160p (4K)</option>\n\t\t\t\t\t\t\t</select>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<h2 className=\"text-body-xl mb-2\">Offline Video Downloads</h2>\n\t\t\t\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t\t\t\t<label htmlFor=\"downloadResolution\">Download Resolution:</label>\n\t\t\t\t\t\t\t<select\n\t\t\t\t\t\t\t\tid=\"downloadResolution\"\n\t\t\t\t\t\t\t\tname=\"downloadResolution\"\n\t\t\t\t\t\t\t\tdefaultValue={\n\t\t\t\t\t\t\t\t\tofflineVideoPreferences?.downloadResolution ?? 'best'\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tclassName=\"border-border bg-background text-foreground rounded-md border px-2 py-1\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{downloadResolutionOptions.map((option) => (\n\t\t\t\t\t\t\t\t\t<option key={option.value} value={option.value}>\n\t\t\t\t\t\t\t\t\t\t{option.label}\n\t\t\t\t\t\t\t\t\t</option>\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t</select>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<p className=\"text-muted-foreground text-sm\">\n\t\t\t\t\t\t\tDefaults to the best available resolution.\n\t\t\t\t\t\t</p>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<div className=\"mb-2 flex items-center gap-2\">\n\t\t\t\t\t\t\t<h2 className=\"text-body-xl\">Font Size Preference</h2>\n\t\t\t\t\t\t\t<SimpleTooltip content=\"Defaults to 16px\">\n\t\t\t\t\t\t\t\t<Icon name=\"Question\" tabIndex={0} />\n\t\t\t\t\t\t\t</SimpleTooltip>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t\t\t\t<label htmlFor=\"fontSize\">Font Size</label>\n\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\ttype=\"number\"\n\t\t\t\t\t\t\t\tid=\"fontSize\"\n\t\t\t\t\t\t\t\tname=\"fontSize\"\n\t\t\t\t\t\t\t\tdefaultValue={fontSizePreference ?? 16}\n\t\t\t\t\t\t\t\tstep=\"1\"\n\t\t\t\t\t\t\t\tmin=\"12\"\n\t\t\t\t\t\t\t\tmax=\"26\"\n\t\t\t\t\t\t\t\tclassName=\"border-border bg-background text-foreground rounded-md border px-2 py-1\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<div className=\"mb-2 flex items-center gap-2\">\n\t\t\t\t\t\t\t<h2 className=\"text-body-xl\">Presence Preference</h2>\n\n\t\t\t\t\t\t\t<SimpleTooltip content=\"This controls whether your name and avatar are displayed in the pile of faces in navigation\">\n\t\t\t\t\t\t\t\t<Icon name=\"Question\" tabIndex={0} />\n\t\t\t\t\t\t\t</SimpleTooltip>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\t\tid=\"optOutPresence\"\n\t\t\t\t\t\t\t\tname=\"optOutPresence\"\n\t\t\t\t\t\t\t\tdefaultChecked={presencePreferences?.optOut}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<label htmlFor=\"optOutPresence\">\n\t\t\t\t\t\t\t\tOpt out of presence features\n\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<div className=\"mb-2 flex items-center gap-2\">\n\t\t\t\t\t\t\t<h2 className=\"text-body-xl\">Persist Playground</h2>\n\n\t\t\t\t\t\t\t<SimpleTooltip\n\t\t\t\t\t\t\t\tcontent={`When enabled, clicking \"Set to Playground\" will save the current playground in the \"saved-playgrounds\" directory.`}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Icon name=\"Question\" tabIndex={0} />\n\t\t\t\t\t\t\t</SimpleTooltip>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\t\tid=\"persistPlayground\"\n\t\t\t\t\t\t\t\tname=\"persistPlayground\"\n\t\t\t\t\t\t\t\tdefaultChecked={playgroundPreferences?.persist}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<label htmlFor=\"persistPlayground\">\n\t\t\t\t\t\t\t\tEnable saving playground\n\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<div className=\"mb-2 flex items-center gap-2\">\n\t\t\t\t\t\t\t<h2 className=\"text-body-xl\">Exercise Directory Warning</h2>\n\n\t\t\t\t\t\t\t<SimpleTooltip\n\t\t\t\t\t\t\t\tcontent={`When enabled, you'll see a warning banner when you have changes in the exercises directory. This helps remind you to work in the playground directory instead.`}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Icon name=\"Question\" tabIndex={0} />\n\t\t\t\t\t\t\t</SimpleTooltip>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\t\tid=\"dismissExerciseWarning\"\n\t\t\t\t\t\t\t\tname=\"dismissExerciseWarning\"\n\t\t\t\t\t\t\t\tdefaultChecked={exerciseWarningPreferences?.dismissed}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<label htmlFor=\"dismissExerciseWarning\">\n\t\t\t\t\t\t\t\tDismiss exercise directory warnings\n\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div className=\"h-4\" />\n\n\t\t\t\t\t<Button\n\t\t\t\t\t\tvarient=\"primary\"\n\t\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\t\tname=\"intent\"\n\t\t\t\t\t\tvalue=\"update-preferences\"\n\t\t\t\t\t\tdisabled={isSubmitting}\n\t\t\t\t\t>\n\t\t\t\t\t\t{isSubmitting ? 'Updating...' : 'Update Preferences'}\n\t\t\t\t\t</Button>\n\t\t\t\t</Form>\n\n\t\t\t\t<section className=\"border-border mt-6 flex w-full max-w-xl flex-col gap-3 border-t pt-6\">\n\t\t\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t\t\t<h2 className=\"text-body-xl\">Offline videos</h2>\n\t\t\t\t\t\t<SimpleTooltip content=\"Keep videos ready to watch when you're offline.\">\n\t\t\t\t\t\t\t<Icon name=\"Question\" tabIndex={0} />\n\t\t\t\t\t\t</SimpleTooltip>\n\t\t\t\t\t</div>\n\t\t\t\t\t<p className=\"text-muted-foreground text-sm\">\n\t\t\t\t\t\tDownload all workshop videos so you can watch them when offline.\n\t\t\t\t\t</p>\n\t\t\t\t\t<p className=\"text-muted-foreground text-sm\">\n\t\t\t\t\t\tAdmins can manage all downloaded videos on the{' '}\n\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\tclassName=\"text-foreground underline\"\n\t\t\t\t\t\t\tto=\"/admin/offline-videos\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tOffline videos admin page\n\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t.\n\t\t\t\t\t</p>\n\t\t\t\t\t<div className=\"flex flex-wrap items-center gap-3\">\n\t\t\t\t\t\t<Form method=\"post\">\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tvarient=\"primary\"\n\t\t\t\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\t\t\t\tname=\"intent\"\n\t\t\t\t\t\t\t\tvalue=\"download-offline-videos\"\n\t\t\t\t\t\t\t\tdisabled={\n\t\t\t\t\t\t\t\t\tisDownloading ||\n\t\t\t\t\t\t\t\t\tisSubmitting ||\n\t\t\t\t\t\t\t\t\tofflineVideos.totalVideos === 0\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{isDownloading ? 'Downloading...' : 'Download all videos'}\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t</Form>\n\t\t\t\t\t\t<Form method=\"post\">\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\t\t\t\tname=\"intent\"\n\t\t\t\t\t\t\t\tvalue=\"delete-offline-videos\"\n\t\t\t\t\t\t\t\tdisabled={isSubmitting || offlineVideos.downloadedVideos === 0}\n\t\t\t\t\t\t\t\tclassName=\"border-border text-foreground hover:bg-muted inline-flex items-center gap-2 rounded border px-3 py-2 text-sm disabled:cursor-not-allowed disabled:opacity-50\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tDelete offline videos\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</Form>\n\t\t\t\t\t\t<span className=\"text-muted-foreground text-sm\">\n\t\t\t\t\t\t\t{offlineVideos.downloadedVideos} of {offlineVideos.totalVideos}{' '}\n\t\t\t\t\t\t\tdownloaded\n\t\t\t\t\t\t\t{offlineVideos.unavailableVideos > 0\n\t\t\t\t\t\t\t\t? ` (${offlineVideos.unavailableVideos} unavailable)`\n\t\t\t\t\t\t\t\t: null}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</div>\n\t\t\t\t\t{isDownloading ? (\n\t\t\t\t\t\t<div className=\"text-muted-foreground text-sm\">\n\t\t\t\t\t\t\t<p>\n\t\t\t\t\t\t\t\tDownloading {offlineVideos.downloadState.completed} of{' '}\n\t\t\t\t\t\t\t\t{offlineVideos.downloadState.total} videos\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t{offlineVideos.downloadState.current ? (\n\t\t\t\t\t\t\t\t<p className=\"truncate\">\n\t\t\t\t\t\t\t\t\tCurrent: {offlineVideos.downloadState.current.title}\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t) : null}\n\t\t\t\t</section>\n\t\t\t</main>\n\t\t</div>\n\t)\n}\n"],"names":["downloadResolutionOptions","value","label","preferences","_UNSAFE_withComponentProps","loaderData","useLoaderData","rootData","useRootLoaderData","playerPreferences","player","offlineVideoPreferences","offlineVideo","fontSizePreference","fontSize","presencePreferences","presence","playgroundPreferences","playground","exerciseWarningPreferences","exerciseWarning","navigation","useNavigation","offlineVideosFetcher","useFetcher","offlineVideos","data","isDownloading","downloadState","status","isSubmitting","state","useInterval","load","className","children","jsxs","jsx","Form","method","htmlFor","id","name","defaultValue","minResolution","maxResolution","downloadResolution","map","option","SimpleTooltip","content","Icon","tabIndex","type","step","min","max","defaultChecked","optOut","persist","dismissed","Button","varient","disabled","Link","to","totalVideos","downloadedVideos","unavailableVideos","completed","total","current","title"],"mappings":"yWAwBA,MAAMA,EAA4B,CACjC,CAAEC,MAAO,OAAQC,MAAO,gBAAiB,EACzC,CAAED,MAAO,OAAQC,MAAO,MAAO,EAC/B,CAAED,MAAO,SAAUC,MAAO,QAAS,EACnC,CAAED,MAAO,MAAOC,MAAO,KAAM,CAAA,EAkG9BC,EAAAC,EAAA,UAA0C,CACzC,MAAMC,EAAaC,EAAA,EACbC,EAAWC,EAAA,EACXC,EAAoBF,EAASJ,aAAaO,OAC1CC,EAA0BJ,EAASJ,aAAaS,aAChDC,EAAqBN,EAASJ,aAAaW,SAC3CC,EAAsBR,EAASJ,aAAaa,SAC5CC,EAAwBV,EAASJ,aAAae,WAC9CC,EAA6BZ,EAASJ,aAAaiB,gBACnDC,EAAaC,EAAA,EACbC,EAAuBC,EAAA,EACvBC,EACLF,EAAqBG,MAAMD,eAAiBpB,EAAWoB,cAClDE,EAAgBF,EAAcG,cAAcC,SAAW,UAEvDC,EAAeT,EAAWU,QAAU,aAE1CC,OAAAA,EACC,IAAM,CACDT,EAAqBQ,QAAU,QAC7BR,EAAqBU,KAAK,2BAA2B,CAE5D,EACAN,EAAgB,IAAO,IACxB,QAGE,MAAA,CAAIO,UAAU,gCACdC,SAAAC,EAAAA,KAAC,OAAA,CAAKF,UAAU,kEACfC,SAAA,CAAAE,EAAAA,IAAC,KAAA,CAAGH,UAAU,eAAeC,SAAA,aAAA,CAAW,EACxCC,EAAAA,KAACE,EAAA,CAAKC,OAAO,OAAOL,UAAU,sCAC7BC,SAAA,CAAAC,EAAAA,KAAC,MAAA,CACAD,SAAA,CAAAE,EAAAA,IAAC,KAAA,CAAGH,UAAU,oBAAoBC,SAAA,0BAAA,CAAwB,EAC1DC,EAAAA,KAAC,MAAA,CAAIF,UAAU,0BACdC,SAAA,CAAAE,EAAAA,IAAC,QAAA,CAAMG,QAAQ,gBAAgBL,SAAA,qBAAA,CAAmB,EAClDC,EAAAA,KAAC,SAAA,CACAK,GAAG,gBACHC,KAAK,gBACLC,aAAclC,GAAmBmC,cACjCV,UAAU,0EAEVC,SAAA,CAAAE,EAAAA,IAAC,SAAA,CAAOpC,MAAM,GAAGkC,SAAA,MAAA,CAAI,EACrBE,EAAAA,IAAC,SAAA,CAAOpC,MAAM,MAAMkC,SAAA,MAAA,CAAI,EACxBE,EAAAA,IAAC,SAAA,CAAOpC,MAAM,MAAMkC,SAAA,MAAA,CAAI,EACxBE,EAAAA,IAAC,SAAA,CAAOpC,MAAM,OAAOkC,SAAA,OAAA,CAAK,EAC1BE,EAAAA,IAAC,SAAA,CAAOpC,MAAM,OAAOkC,SAAA,OAAA,CAAK,EAC1BE,EAAAA,IAAC,SAAA,CAAOpC,MAAM,OAAOkC,SAAA,YAAA,CAAU,CAAA,CAAA,CAChC,CAAA,CAAA,CACD,EACAC,EAAAA,KAAC,MAAA,CAAIF,UAAU,0BACdC,SAAA,CAAAE,EAAAA,IAAC,QAAA,CAAMG,QAAQ,gBAAgBL,SAAA,qBAAA,CAAmB,EAClDC,EAAAA,KAAC,SAAA,CACAK,GAAG,gBACHC,KAAK,gBACLC,aAAclC,GAAmBoC,cACjCX,UAAU,0EAEVC,SAAA,CAAAE,EAAAA,IAAC,SAAA,CAAOpC,MAAM,GAAGkC,SAAA,MAAA,CAAI,EACrBE,EAAAA,IAAC,SAAA,CAAOpC,MAAM,MAAMkC,SAAA,MAAA,CAAI,EACxBE,EAAAA,IAAC,SAAA,CAAOpC,MAAM,OAAOkC,SAAA,OAAA,CAAK,EAC1BE,EAAAA,IAAC,SAAA,CAAOpC,MAAM,OAAOkC,SAAA,OAAA,CAAK,EAC1BE,EAAAA,IAAC,SAAA,CAAOpC,MAAM,OAAOkC,SAAA,YAAA,CAAU,CAAA,CAAA,CAChC,CAAA,CAAA,CACD,CAAA,CAAA,CACD,SACC,MAAA,CACAA,SAAA,CAAAE,EAAAA,IAAC,KAAA,CAAGH,UAAU,oBAAoBC,SAAA,yBAAA,CAAuB,EACzDC,EAAAA,KAAC,MAAA,CAAIF,UAAU,0BACdC,SAAA,CAAAE,EAAAA,IAAC,QAAA,CAAMG,QAAQ,qBAAqBL,SAAA,sBAAA,CAAoB,EACxDE,EAAAA,IAAC,SAAA,CACAI,GAAG,qBACHC,KAAK,qBACLC,aACChC,GAAyBmC,oBAAsB,OAEhDZ,UAAU,0EAETC,SAAAnC,EAA0B+C,IAAKC,GAC/BX,EAAAA,IAAC,SAAA,CAA0BpC,MAAO+C,EAAO/C,MACvCkC,SAAAa,EAAO9C,KAAA,EADI8C,EAAO/C,KAEpB,CACA,CAAA,CACF,CAAA,CAAA,CACD,EACAoC,EAAAA,IAAC,IAAA,CAAEH,UAAU,gCAAgCC,SAAA,4CAAA,CAE7C,CAAA,CAAA,CACD,SACC,MAAA,CACAA,SAAA,CAAAC,EAAAA,KAAC,MAAA,CAAIF,UAAU,+BACdC,SAAA,CAAAE,EAAAA,IAAC,KAAA,CAAGH,UAAU,eAAeC,SAAA,sBAAA,CAAoB,EACjDE,EAAAA,IAACY,EAAA,CAAcC,QAAQ,mBACtBf,SAAAE,EAAAA,IAACc,GAAKT,KAAK,WAAWU,SAAU,EAAG,CAAA,CACpC,CAAA,CAAA,CACD,EACAhB,EAAAA,KAAC,MAAA,CAAIF,UAAU,0BACdC,SAAA,CAAAE,EAAAA,IAAC,QAAA,CAAMG,QAAQ,WAAWL,SAAA,WAAA,CAAS,EACnCE,EAAAA,IAAC,QAAA,CACAgB,KAAK,SACLZ,GAAG,WACHC,KAAK,WACLC,aAAc9B,GAAsB,GACpCyC,KAAK,IACLC,IAAI,KACJC,IAAI,KACJtB,UAAU,yEAAA,CACX,CAAA,CAAA,CACD,CAAA,CAAA,CACD,SAEC,MAAA,CACAC,SAAA,CAAAC,EAAAA,KAAC,MAAA,CAAIF,UAAU,+BACdC,SAAA,CAAAE,EAAAA,IAAC,KAAA,CAAGH,UAAU,eAAeC,SAAA,qBAAA,CAAmB,EAEhDE,EAAAA,IAACY,EAAA,CAAcC,QAAQ,8FACtBf,SAAAE,EAAAA,IAACc,GAAKT,KAAK,WAAWU,SAAU,EAAG,CAAA,CACpC,CAAA,CAAA,CACD,EACAhB,EAAAA,KAAC,MAAA,CAAIF,UAAU,0BACdC,SAAA,CAAAE,EAAAA,IAAC,QAAA,CACAgB,KAAK,WACLZ,GAAG,iBACHC,KAAK,iBACLe,eAAgB1C,GAAqB2C,MAAA,CACtC,EACArB,EAAAA,IAAC,QAAA,CAAMG,QAAQ,iBAAiBL,SAAA,8BAAA,CAEhC,CAAA,CAAA,CACD,CAAA,CAAA,CACD,SAEC,MAAA,CACAA,SAAA,CAAAC,EAAAA,KAAC,MAAA,CAAIF,UAAU,+BACdC,SAAA,CAAAE,EAAAA,IAAC,KAAA,CAAGH,UAAU,eAAeC,SAAA,oBAAA,CAAkB,EAE/CE,EAAAA,IAACY,EAAA,CACAC,QAAS,oHAETf,SAAAE,EAAAA,IAACc,EAAA,CAAKT,KAAK,WAAWU,SAAU,EAAG,CAAA,CACpC,CAAA,CAAA,CACD,EACAhB,EAAAA,KAAC,MAAA,CAAIF,UAAU,0BACdC,SAAA,CAAAE,EAAAA,IAAC,QAAA,CACAgB,KAAK,WACLZ,GAAG,oBACHC,KAAK,oBACLe,eAAgBxC,GAAuB0C,OAAA,CACxC,EACAtB,EAAAA,IAAC,QAAA,CAAMG,QAAQ,oBAAoBL,SAAA,0BAAA,CAEnC,CAAA,CAAA,CACD,CAAA,CAAA,CACD,SAEC,MAAA,CACAA,SAAA,CAAAC,EAAAA,KAAC,MAAA,CAAIF,UAAU,+BACdC,SAAA,CAAAE,EAAAA,IAAC,KAAA,CAAGH,UAAU,eAAeC,SAAA,4BAAA,CAA0B,EAEvDE,EAAAA,IAACY,EAAA,CACAC,QAAS,iKAETf,SAAAE,EAAAA,IAACc,EAAA,CAAKT,KAAK,WAAWU,SAAU,EAAG,CAAA,CACpC,CAAA,CAAA,CACD,EACAhB,EAAAA,KAAC,MAAA,CAAIF,UAAU,0BACdC,SAAA,CAAAE,EAAAA,IAAC,QAAA,CACAgB,KAAK,WACLZ,GAAG,yBACHC,KAAK,yBACLe,eAAgBtC,GAA4ByC,SAAA,CAC7C,EACAvB,EAAAA,IAAC,QAAA,CAAMG,QAAQ,yBAAyBL,SAAA,qCAAA,CAExC,CAAA,CAAA,CACD,CAAA,CAAA,CACD,EAEAE,EAAAA,IAAC,MAAA,CAAIH,UAAU,KAAA,CAAM,EAErBG,EAAAA,IAACwB,EAAA,CACAC,QAAQ,UACRT,KAAK,SACLX,KAAK,SACLzC,MAAM,qBACN8D,SAAUjC,EAETK,WAAe,cAAgB,oBAAA,CACjC,CAAA,CAAA,CACD,EAEAC,EAAAA,KAAC,UAAA,CAAQF,UAAU,uEAClBC,SAAA,CAAAC,EAAAA,KAAC,MAAA,CAAIF,UAAU,0BACdC,SAAA,CAAAE,EAAAA,IAAC,KAAA,CAAGH,UAAU,eAAeC,SAAA,gBAAA,CAAc,EAC3CE,EAAAA,IAACY,EAAA,CAAcC,QAAQ,kDACtBf,SAAAE,EAAAA,IAACc,GAAKT,KAAK,WAAWU,SAAU,EAAG,CAAA,CACpC,CAAA,CAAA,CACD,EACAf,EAAAA,IAAC,IAAA,CAAEH,UAAU,gCAAgCC,SAAA,kEAAA,CAE7C,EACAC,EAAAA,KAAC,IAAA,CAAEF,UAAU,gCAAgCC,SAAA,CAAA,iDACG,IAC/CE,EAAAA,IAAC2B,EAAA,CACA9B,UAAU,4BACV+B,GAAG,wBACH9B,SAAA,4BAED,EAAO,GAAA,CAAA,CAER,EACAC,EAAAA,KAAC,MAAA,CAAIF,UAAU,oCACdC,SAAA,CAAAE,EAAAA,IAACC,EAAA,CAAKC,OAAO,OACZJ,SAAAE,EAAAA,IAACwB,EAAA,CACAC,QAAQ,UACRT,KAAK,SACLX,KAAK,SACLzC,MAAM,0BACN8D,SACCpC,GACAG,GACAL,EAAcyC,cAAgB,EAG9B/B,WAAgB,iBAAmB,sBACrC,CAAA,CACD,EACAE,EAAAA,IAACC,EAAA,CAAKC,OAAO,OACZJ,SAAAE,EAAAA,IAAC,SAAA,CACAgB,KAAK,SACLX,KAAK,SACLzC,MAAM,wBACN8D,SAAUjC,GAAgBL,EAAc0C,mBAAqB,EAC7DjC,UAAU,+JACVC,SAAA,wBAED,CAAA,CACD,EACAC,EAAAA,KAAC,OAAA,CAAKF,UAAU,gCACdC,SAAA,CAAAV,EAAc0C,iBAAiB,OAAK1C,EAAcyC,YAAa,IAAI,aAEnEzC,EAAc2C,kBAAoB,EAChC,KAAK3C,EAAc2C,iBAAiB,gBACpC,IAAA,CAAA,CACJ,CAAA,EACD,EACCzC,EACAS,EAAAA,KAAC,MAAA,CAAIF,UAAU,gCACdC,SAAA,CAAAC,EAAAA,KAAC,IAAA,CAAED,SAAA,CAAA,eACWV,EAAcG,cAAcyC,UAAU,MAAI,IACtD5C,EAAcG,cAAc0C,MAAM,SAAA,CAAA,CACpC,EACC7C,EAAcG,cAAc2C,QAC5BnC,EAAAA,KAAC,IAAA,CAAEF,UAAU,WAAWC,SAAA,CAAA,YACbV,EAAcG,cAAc2C,QAAQC,KAAA,EAC/C,EACG,IAAA,EACL,EACG,IAAA,CAAA,CACL,CAAA,EACD,CAAA,CACD,CAEF,CAAA"}
|