@epic-web/workshop-app 5.3.8 → 5.4.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.
Files changed (116) hide show
  1. package/build/client/assets/{_-CWSCXcBv.js → _-BrkpfnBb.js} +2 -2
  2. package/build/client/assets/{_-CWSCXcBv.js.map → _-BrkpfnBb.js.map} +1 -1
  3. package/build/client/assets/{_exerciseNumber-DvMYZgqk.js → _exerciseNumber-DCSM0NCG.js} +2 -2
  4. package/build/client/assets/{_exerciseNumber-DvMYZgqk.js.map → _exerciseNumber-DCSM0NCG.js.map} +1 -1
  5. package/build/client/assets/{_exerciseNumber_._stepNumber-BA2Xhzqs.js → _exerciseNumber_._stepNumber-BIMJh_sg.js} +2 -2
  6. package/build/client/assets/{_exerciseNumber_._stepNumber-BA2Xhzqs.js.map → _exerciseNumber_._stepNumber-BIMJh_sg.js.map} +1 -1
  7. package/build/client/assets/{_exerciseNumber_.finished-DYN2QHN6.js → _exerciseNumber_.finished-nbpk1ToO.js} +2 -2
  8. package/build/client/assets/{_exerciseNumber_.finished-DYN2QHN6.js.map → _exerciseNumber_.finished-nbpk1ToO.js.map} +1 -1
  9. package/build/client/assets/{_layout-BK7mLImi.js → _layout-Cbz7Qt-S.js} +2 -2
  10. package/build/client/assets/{_layout-BK7mLImi.js.map → _layout-Cbz7Qt-S.js.map} +1 -1
  11. package/build/client/assets/{_layout-BH5PQW0M.js → _layout-DTAM9xh5.js} +2 -2
  12. package/build/client/assets/{_layout-BH5PQW0M.js.map → _layout-DTAM9xh5.js.map} +1 -1
  13. package/build/client/assets/_layout-Dfmv2zcn.js +2 -0
  14. package/build/client/assets/_layout-Dfmv2zcn.js.map +1 -0
  15. package/build/client/assets/{accordion-DC885Li1.js → accordion-D9-D-n9p.js} +2 -2
  16. package/build/client/assets/{accordion-DC885Li1.js.map → accordion-D9-D-n9p.js.map} +1 -1
  17. package/build/client/assets/account-C4Piztoz.js +2 -0
  18. package/build/client/assets/account-C4Piztoz.js.map +1 -0
  19. package/build/client/assets/app-DgTXXO8s.js +2 -0
  20. package/build/client/assets/{app-CM8yuYni.js.map → app-DgTXXO8s.js.map} +1 -1
  21. package/build/client/assets/{button-DQ001ob0.js → button-_qPvcoqR.js} +2 -2
  22. package/build/client/assets/{button-DQ001ob0.js.map → button-_qPvcoqR.js.map} +1 -1
  23. package/build/client/assets/{components-9EGYHTc_.js → components-Be92gVxW.js} +2 -2
  24. package/build/client/assets/{components-9EGYHTc_.js.map → components-Be92gVxW.js.map} +1 -1
  25. package/build/client/assets/{diff-C2Hm_DHX.js → diff-8nlDkmpc.js} +2 -2
  26. package/build/client/assets/{diff-C2Hm_DHX.js.map → diff-8nlDkmpc.js.map} +1 -1
  27. package/build/client/assets/diff-BhRAIPKc.js +2 -0
  28. package/build/client/assets/{diff-CbIF8Oq1.js.map → diff-BhRAIPKc.js.map} +1 -1
  29. package/build/client/assets/discord-BUWZUTEC.js +2 -0
  30. package/build/client/assets/discord-BUWZUTEC.js.map +1 -0
  31. package/build/client/assets/discord-Bdnx7fu-.js +2 -0
  32. package/build/client/assets/discord-Bdnx7fu-.js.map +1 -0
  33. package/build/client/assets/{entry.client-BTYTUpFV.js → entry.client-DqIWuxf8.js} +2 -2
  34. package/build/client/assets/{entry.client-BTYTUpFV.js.map → entry.client-DqIWuxf8.js.map} +1 -1
  35. package/build/client/assets/{epic-video-Bxtz3elt.js → epic-video-Bp4BOD2R.js} +2 -2
  36. package/build/client/assets/{epic-video-Bxtz3elt.js.map → epic-video-Bp4BOD2R.js.map} +1 -1
  37. package/build/client/assets/{error-boundary-1-dmC941.js → error-boundary-BZA-ffa8.js} +2 -2
  38. package/build/client/assets/{error-boundary-1-dmC941.js.map → error-boundary-BZA-ffa8.js.map} +1 -1
  39. package/build/client/assets/{finished--PGQDzya.js → finished-C0cpfAFL.js} +2 -2
  40. package/build/client/assets/{finished--PGQDzya.js.map → finished-C0cpfAFL.js.map} +1 -1
  41. package/build/client/assets/{index-BuoaxPEj.js → index-BCTr8uu6.js} +2 -2
  42. package/build/client/assets/{index-BuoaxPEj.js.map → index-BCTr8uu6.js.map} +1 -1
  43. package/build/client/assets/{index-_J-F_Dnc.js → index-Bdg3v8tC.js} +2 -2
  44. package/build/client/assets/{index-_J-F_Dnc.js.map → index-Bdg3v8tC.js.map} +1 -1
  45. package/build/client/assets/{index-C2MH9l6b.js → index-Bi1TbRTj.js} +2 -2
  46. package/build/client/assets/{index-C2MH9l6b.js.map → index-Bi1TbRTj.js.map} +1 -1
  47. package/build/client/assets/{index-DRH72MzK.js → index-C9Hx0Dey.js} +2 -2
  48. package/build/client/assets/{index-DRH72MzK.js.map → index-C9Hx0Dey.js.map} +1 -1
  49. package/build/client/assets/{index-oZkQrXic.js → index-Ca4vBON4.js} +2 -2
  50. package/build/client/assets/{index-oZkQrXic.js.map → index-Ca4vBON4.js.map} +1 -1
  51. package/build/client/assets/{index-BuA_RWlU.js → index-DZDhtMuq.js} +2 -2
  52. package/build/client/assets/{index-BuA_RWlU.js.map → index-DZDhtMuq.js.map} +1 -1
  53. package/build/client/assets/index-pkiQppkK.js +2 -0
  54. package/build/client/assets/index-pkiQppkK.js.map +1 -0
  55. package/build/client/assets/{loading-Dk0n07O3.js → loading-XhMtj4mp.js} +2 -2
  56. package/build/client/assets/{loading-Dk0n07O3.js.map → loading-XhMtj4mp.js.map} +1 -1
  57. package/build/client/assets/{login-pZYDEC_l.js → login-C1oOgi98.js} +2 -2
  58. package/build/client/assets/{login-pZYDEC_l.js.map → login-C1oOgi98.js.map} +1 -1
  59. package/build/client/assets/manifest-bc809ee6.js +1 -0
  60. package/build/client/assets/{mdx-DIAWAXtT.js → mdx-CEjzXoEx.js} +2 -2
  61. package/build/client/assets/{mdx-DIAWAXtT.js.map → mdx-CEjzXoEx.js.map} +1 -1
  62. package/build/client/assets/{misc-BJtHv_Jh.js → misc-DUy_whwE.js} +2 -2
  63. package/build/client/assets/{misc-BJtHv_Jh.js.map → misc-DUy_whwE.js.map} +1 -1
  64. package/build/client/assets/{nav-chevrons-CgbSMLeb.js → nav-chevrons-DnR25VLp.js} +2 -2
  65. package/build/client/assets/{nav-chevrons-CgbSMLeb.js.map → nav-chevrons-DnR25VLp.js.map} +1 -1
  66. package/build/client/assets/{onboarding-BAVmCIKn.js → onboarding-C2YNq60k.js} +2 -2
  67. package/build/client/assets/{onboarding-BAVmCIKn.js.map → onboarding-C2YNq60k.js.map} +1 -1
  68. package/build/client/assets/{presence-DyppfK2V.js → presence-DJGFvdDh.js} +2 -2
  69. package/build/client/assets/{presence-DyppfK2V.js.map → presence-DJGFvdDh.js.map} +1 -1
  70. package/build/client/assets/{preview-CW_12I0i.js → preview-DaZd0wMb.js} +2 -2
  71. package/build/client/assets/{preview-CW_12I0i.js.map → preview-DaZd0wMb.js.map} +1 -1
  72. package/build/client/assets/{product-C1ynnrN_.js → product-DIAmCwmZ.js} +2 -2
  73. package/build/client/assets/{product-C1ynnrN_.js.map → product-DIAmCwmZ.js.map} +1 -1
  74. package/build/client/assets/{progress-DAB3nDa2.js → progress-DQt_Bn9o.js} +2 -2
  75. package/build/client/assets/{progress-DAB3nDa2.js.map → progress-DQt_Bn9o.js.map} +1 -1
  76. package/build/client/assets/{progress-bar-Cj5R4Zk7.js → progress-bar-BaTU3Yx_.js} +2 -2
  77. package/build/client/assets/{progress-bar-Cj5R4Zk7.js.map → progress-bar-BaTU3Yx_.js.map} +1 -1
  78. package/build/client/assets/{request-info-DCIQLE6H.js → request-info-ByUEfOil.js} +2 -2
  79. package/build/client/assets/{request-info-DCIQLE6H.js.map → request-info-ByUEfOil.js.map} +1 -1
  80. package/build/client/assets/{revalidation-ws-DU-PzW-_.js → revalidation-ws-dUa9CAqr.js} +2 -2
  81. package/build/client/assets/{revalidation-ws-DU-PzW-_.js.map → revalidation-ws-dUa9CAqr.js.map} +1 -1
  82. package/build/client/assets/{root-DCfiv1cO.js → root-a3d3Qwip.js} +2 -2
  83. package/build/client/assets/{root-DCfiv1cO.js.map → root-a3d3Qwip.js.map} +1 -1
  84. package/build/client/assets/{set-playground-S_rIwJAa.js → set-playground-CBHBA46B.js} +2 -2
  85. package/build/client/assets/{set-playground-S_rIwJAa.js.map → set-playground-CBHBA46B.js.map} +1 -1
  86. package/build/client/assets/{support-BNS-kEhc.js → support-CIz02V_r.js} +2 -2
  87. package/build/client/assets/{support-BNS-kEhc.js.map → support-CIz02V_r.js.map} +1 -1
  88. package/build/client/assets/test-DoKJvNug.js +2 -0
  89. package/build/client/assets/{test-3x2HHA0t.js.map → test-DoKJvNug.js.map} +1 -1
  90. package/build/client/assets/{tests-GmyhBOwD.js → tests-DbuyD2cI.js} +2 -2
  91. package/build/client/assets/{tests-GmyhBOwD.js.map → tests-DbuyD2cI.js.map} +1 -1
  92. package/build/client/assets/{tooltip-BgynKV2c.js → tooltip-DO9uwurQ.js} +2 -2
  93. package/build/client/assets/{tooltip-BgynKV2c.js.map → tooltip-DO9uwurQ.js.map} +1 -1
  94. package/build/client/assets/user-Bv6wYhQP.js +2 -0
  95. package/build/client/assets/{user-CFunCRfr.js.map → user-Bv6wYhQP.js.map} +1 -1
  96. package/build/client/assets/version-CaywAlNQ.js +2 -0
  97. package/build/client/assets/version-CaywAlNQ.js.map +1 -0
  98. package/build/client/assets/{workshop-config-DJY2cXU_.js → workshop-config-WVltG_BV.js} +2 -2
  99. package/build/client/assets/{workshop-config-DJY2cXU_.js.map → workshop-config-WVltG_BV.js.map} +1 -1
  100. package/build/server/index.js +368 -218
  101. package/build/server/index.js.map +1 -1
  102. package/package.json +3 -3
  103. package/start.js +6 -0
  104. package/build/client/assets/_layout-gyrNluke.js +0 -2
  105. package/build/client/assets/_layout-gyrNluke.js.map +0 -1
  106. package/build/client/assets/account-B5baO5pg.js +0 -2
  107. package/build/client/assets/account-B5baO5pg.js.map +0 -1
  108. package/build/client/assets/app-CM8yuYni.js +0 -2
  109. package/build/client/assets/diff-CbIF8Oq1.js +0 -2
  110. package/build/client/assets/discord-BnQDHWJj.js +0 -2
  111. package/build/client/assets/discord-BnQDHWJj.js.map +0 -1
  112. package/build/client/assets/discord-DcHxc30v.js +0 -2
  113. package/build/client/assets/discord-DcHxc30v.js.map +0 -1
  114. package/build/client/assets/manifest-7f4f8707.js +0 -1
  115. package/build/client/assets/test-3x2HHA0t.js +0 -2
  116. package/build/client/assets/user-CFunCRfr.js +0 -2
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@epic-web/workshop-app",
3
- "version": "5.3.8",
3
+ "version": "5.4.0",
4
4
  "sideEffects": false,
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -44,8 +44,8 @@
44
44
  "@epic-web/invariant": "^1.0.0",
45
45
  "@epic-web/remember": "^1.1.0",
46
46
  "@epic-web/restore-scroll": "^1.1.1",
47
- "@epic-web/workshop-presence": "5.3.8",
48
- "@epic-web/workshop-utils": "5.3.8",
47
+ "@epic-web/workshop-presence": "5.4.0",
48
+ "@epic-web/workshop-utils": "5.4.0",
49
49
  "@mdx-js/mdx": "^3.0.1",
50
50
  "@mux/mux-player-react": "^3.0.0",
51
51
  "@nasa-gcn/remix-seo": "^2.0.1",
package/start.js CHANGED
@@ -1,6 +1,12 @@
1
+ import fs from 'fs/promises'
1
2
  import path from 'path'
2
3
  import dotenv from 'dotenv'
3
4
 
5
+ const packageJson = JSON.parse(
6
+ await fs.readFile(path.resolve(process.cwd(), 'package.json'), 'utf-8'),
7
+ )
8
+
9
+ process.env.EPICSHOP_APP_VERSION ??= packageJson.version
4
10
  process.env.NODE_ENV ??= 'development'
5
11
  process.env.EPICSHOP_ENABLE_WATCHER ??= 'true'
6
12
  const EPICSHOP_CONTEXT_CWD = process.env.EPICSHOP_CONTEXT_CWD ?? process.cwd()
@@ -1,2 +0,0 @@
1
- import{c as j,j as e}from"./index-BFGhCX_U.js";import{I as p}from"./misc-BJtHv_Jh.js";import{S as b}from"./tooltip-BgynKV2c.js";import{a as f}from"./progress-DAB3nDa2.js";import{u as g,L as i,F as a}from"./components-9EGYHTc_.js";import"./pe-ChIwTk8v.js";const C={getSitemapEntries:()=>null},L=({matches:s})=>{var r;const l=(r=s.find(c=>c.id==="root"))==null?void 0:r.data;return[{title:`👷 | ${l==null?void 0:l.workshopTitle}`}]};function N(s,l){return s.type==="unknown"&&l.type==="unknown"?0:s.type==="unknown"?-1:l.type==="unknown"?1:0}function S(s){switch(s.type){case"workshop-instructions":return"/";case"workshop-finished":return"/finished";case"instructions":return`/${s.exerciseNumber.toString().padStart(2,"0")}`;case"step":return`/${s.exerciseNumber.toString().padStart(2,"0")}/${s.stepNumber.toString().padStart(2,"0")}`;case"finished":return`/${s.exerciseNumber.toString().padStart(2,"0")}/finished`;default:return""}}function T(){var o,d;const s=g(),l=j(),r=f(),c=((o=l.formData)==null?void 0:o.get("intent"))==="inspect",x=((d=l.formData)==null?void 0:d.get("intent"))==="stop-inspect",u={completed:"bg-blue-500",incomplete:"bg-yellow-500"};return e.jsxs("main",{className:"container mx-auto mt-8",children:[e.jsx("h1",{className:"text-4xl font-bold",children:"Admin"}),e.jsxs("div",{className:"flex flex-col gap-4",children:[e.jsx("nav",{children:e.jsxs("ul",{className:"flex gap-3",children:[e.jsx("li",{children:e.jsx(i,{className:"underline",to:"/",children:"Home"})}),e.jsx("li",{children:e.jsx(i,{className:"underline",to:"/diff",children:"Diff Viewer"})})]})}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-lg font-bold",children:"Progress"}),r?e.jsx("ul",{className:"flex max-h-72 flex-col gap-2 overflow-y-scroll border-2 p-8 scrollbar-thin scrollbar-thumb-scrollbar",children:r.sort(N).map(n=>{const t=n.epicCompletedAt?"completed":"incomplete",h=[n.epicLessonSlug,n.epicCompletedAt?`(${n.epicCompletedAt})`:null].filter(Boolean).join(" ");return e.jsxs("li",{className:"flex items-center gap-2",children:[e.jsx("span",{className:`h-3 w-3 rounded-full ${u[t]}`,title:t}),n.type==="unknown"?e.jsxs("span",{className:"flex items-center gap-1",children:[h,e.jsx("span",{className:"text-red-500",children:e.jsx(b,{content:"This video is in the workshop on EpicWeb.dev, but not in the local workshop.",children:e.jsx(p,{name:"Close"})})})]}):e.jsx(i,{to:S(n),children:h}),e.jsx(i,{to:n.epicLessonUrl,children:e.jsx(p,{name:"ExternalLink"})})]},n.epicLessonSlug)})}):e.jsx("p",{children:"No progress data"})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-lg font-bold",children:"Commands"}),e.jsxs("ul",{className:"max-h-48 overflow-y-scroll border-2 p-8 scrollbar-thin scrollbar-thumb-scrollbar",children:[e.jsx("li",{children:e.jsx(a,{method:"POST",children:e.jsx("button",{name:"intent",value:"clear-caches",children:"Clear local caches"})})}),e.jsx("li",{children:e.jsx(a,{method:"POST",children:e.jsx("button",{name:"intent",value:"clear-data",children:"Clear all local data (including auth data)"})})}),e.jsx("li",{children:s.inspectorRunning?e.jsx(a,{method:"POST",children:e.jsx("button",{name:"intent",value:"stop-inspect",children:c?"Stopping inspector...":"Stop inspector"})}):e.jsx(a,{method:"POST",children:e.jsx("button",{name:"intent",value:"inspect",children:x?"Starting inspector...":"Start inspector"})})})]})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-lg font-bold",children:"Apps"}),e.jsx("ul",{className:"max-h-48 list-none overflow-y-scroll border-2 p-8 scrollbar-thin scrollbar-thumb-scrollbar",children:s.apps.map(n=>e.jsxs("li",{className:"flex items-center gap-2 py-1",children:[s.processes[n.name]?e.jsx(m,{status:"running"}):e.jsx(m,{status:"stopped"}),n.name]},n.name))})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-lg font-bold",children:"Processes"}),e.jsx("ul",{className:"overflow-y-scroll border-2 p-8 scrollbar-thin scrollbar-thumb-scrollbar",children:Object.entries(s.processes).map(([n,t])=>e.jsx("li",{children:e.jsxs("span",{children:[n," - Port: ",t.port," - PID ",t.pid," -"," ",t.color]})},n))})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-lg font-bold",children:"Test Processes"}),e.jsx("ul",{className:"overflow-y-scroll border-2 p-8 scrollbar-thin scrollbar-thumb-scrollbar",children:Object.entries(s.testProcesses).map(([n,t])=>e.jsx("li",{children:e.jsxs("span",{children:[n," - PID ",t.pid," - Exit code: ",t.exitCode]})},n))})]})]})]})}function m({status:s}){const l={running:{pinger:"bg-green-400",circle:"bg-green-500"},starting:{pinger:"bg-sky-400",circle:"bg-sky-500"},stopped:{circle:"bg-gray-500"},taken:{pinger:"bg-red-400",circle:"bg-red-500"}}[s];return e.jsxs("span",{className:"relative flex h-3 w-3",children:[l.pinger?e.jsx("span",{className:`absolute inline-flex h-full w-full animate-ping rounded-full ${l.pinger} opacity-75`}):null,e.jsx("span",{className:`relative inline-flex h-3 w-3 rounded-full ${l.circle}`})]})}export{T as default,C as handle,L as meta};
2
- //# sourceMappingURL=_layout-gyrNluke.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"_layout-gyrNluke.js","sources":["../../../app/routes/admin+/_layout.tsx"],"sourcesContent":["import { getApps } from '@epic-web/workshop-utils/apps.server'\nimport { getProcesses } from '@epic-web/workshop-utils/process-manager.server'\nimport {\n\tgetServerTimeHeader,\n\tmakeTimings,\n} from '@epic-web/workshop-utils/timing.server'\nimport { type SEOHandle } from '@nasa-gcn/remix-seo'\nimport {\n\tunstable_data as data,\n\ttype ActionFunctionArgs,\n\ttype LoaderFunctionArgs,\n\ttype MetaFunction,\n} from '@remix-run/node'\nimport { Form, Link, useLoaderData, useNavigation } from '@remix-run/react'\nimport { Icon } from '#app/components/icons.tsx'\nimport { SimpleTooltip } from '#app/components/ui/tooltip.tsx'\nimport { type loader as rootLoader } from '#app/root.tsx'\nimport {\n\tuseEpicProgress,\n\ttype SerializedProgress,\n} from '#app/routes/progress.tsx'\nimport { ensureUndeployed } from '#app/utils/misc.tsx'\nimport {\n\tclearCaches,\n\tclearData,\n\tstartInspector,\n\tstopInspector,\n} from './admin-utils.server.tsx'\n\ndeclare global {\n\tvar __inspector_open__: boolean | undefined\n}\n\nexport const handle: SEOHandle = {\n\tgetSitemapEntries: () => null,\n}\n\nexport const meta: MetaFunction<typeof loader, { root: typeof rootLoader }> = ({\n\tmatches,\n}) => {\n\tconst rootData = matches.find((m) => m.id === 'root')?.data\n\treturn [{ title: `👷 | ${rootData?.workshopTitle}` }]\n}\n\nexport async function loader({ request }: LoaderFunctionArgs) {\n\tensureUndeployed()\n\tconst timings = makeTimings('adminLoader')\n\tconst apps = (await getApps({ request, timings })).filter(\n\t\t(a, i, ar) => ar.findIndex((b) => a.name === b.name) === i,\n\t)\n\tconst processes: Record<\n\t\tstring,\n\t\t{ port: number; pid?: number; color: string }\n\t> = {}\n\tconst testProcesses: Record<\n\t\tstring,\n\t\t{ pid?: number; exitCode?: number | null }\n\t> = {}\n\tfor (const [\n\t\tname,\n\t\t{ port, process, color },\n\t] of getProcesses().devProcesses.entries()) {\n\t\tprocesses[name] = { port, pid: process.pid, color }\n\t}\n\n\tfor (const [\n\t\tname,\n\t\t{ process, exitCode },\n\t] of getProcesses().testProcesses.entries()) {\n\t\ttestProcesses[name] = { pid: process?.pid, exitCode }\n\t}\n\treturn data(\n\t\t{\n\t\t\tapps,\n\t\t\tprocesses,\n\t\t\ttestProcesses,\n\t\t\tinspectorRunning: global.__inspector_open__,\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 async function action({ request }: ActionFunctionArgs) {\n\tensureUndeployed()\n\tconst formData = await request.formData()\n\tconst intent = formData.get('intent')\n\tswitch (intent) {\n\t\tcase 'clear-data': {\n\t\t\tawait clearData()\n\t\t\treturn { success: true }\n\t\t}\n\t\tcase 'clear-caches': {\n\t\t\tawait clearCaches()\n\t\t\treturn { success: true }\n\t\t}\n\t\tcase 'inspect': {\n\t\t\tawait startInspector()\n\t\t\treturn { success: true }\n\t\t}\n\t\tcase 'stop-inspect': {\n\t\t\tawait stopInspector()\n\t\t\treturn { success: true }\n\t\t}\n\t\tdefault: {\n\t\t\tthrow new Error(`Unknown intent: ${intent}`)\n\t\t}\n\t}\n}\n\nfunction sortProgress(a: SerializedProgress, b: SerializedProgress) {\n\treturn a.type === 'unknown' && b.type === 'unknown'\n\t\t? 0\n\t\t: a.type === 'unknown'\n\t\t\t? -1\n\t\t\t: b.type === 'unknown'\n\t\t\t\t? 1\n\t\t\t\t: 0\n}\n\nfunction linkProgress(progress: SerializedProgress) {\n\tswitch (progress.type) {\n\t\tcase 'workshop-instructions':\n\t\t\treturn '/'\n\t\tcase 'workshop-finished':\n\t\t\treturn '/finished'\n\t\tcase 'instructions':\n\t\t\treturn `/${progress.exerciseNumber.toString().padStart(2, '0')}`\n\t\tcase 'step':\n\t\t\treturn `/${progress.exerciseNumber\n\t\t\t\t.toString()\n\t\t\t\t.padStart(2, '0')}/${progress.stepNumber.toString().padStart(2, '0')}`\n\t\tcase 'finished':\n\t\t\treturn `/${progress.exerciseNumber.toString().padStart(2, '0')}/finished`\n\t\tdefault:\n\t\t\treturn ''\n\t}\n}\n\nexport default function AdminLayout() {\n\tconst data = useLoaderData<typeof loader>()\n\tconst navigation = useNavigation()\n\tconst epicProgress = useEpicProgress()\n\n\tconst isStartingInspector = navigation.formData?.get('intent') === 'inspect'\n\tconst isStoppingInspector =\n\t\tnavigation.formData?.get('intent') === 'stop-inspect'\n\n\tconst progressStatus = {\n\t\tcompleted: 'bg-blue-500',\n\t\tincomplete: 'bg-yellow-500',\n\t}\n\n\treturn (\n\t\t<main className=\"container mx-auto mt-8\">\n\t\t\t<h1 className=\"text-4xl font-bold\">Admin</h1>\n\t\t\t<div className=\"flex flex-col gap-4\">\n\t\t\t\t<nav>\n\t\t\t\t\t<ul className=\"flex gap-3\">\n\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t<Link className=\"underline\" to=\"/\">\n\t\t\t\t\t\t\t\tHome\n\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t<Link className=\"underline\" to=\"/diff\">\n\t\t\t\t\t\t\t\tDiff Viewer\n\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t</ul>\n\t\t\t\t</nav>\n\t\t\t\t<div>\n\t\t\t\t\t<h2 className=\"text-lg font-bold\">Progress</h2>\n\t\t\t\t\t{epicProgress ? (\n\t\t\t\t\t\t<ul className=\"flex max-h-72 flex-col gap-2 overflow-y-scroll border-2 p-8 scrollbar-thin scrollbar-thumb-scrollbar\">\n\t\t\t\t\t\t\t{epicProgress.sort(sortProgress).map((progress) => {\n\t\t\t\t\t\t\t\tconst status = progress.epicCompletedAt\n\t\t\t\t\t\t\t\t\t? 'completed'\n\t\t\t\t\t\t\t\t\t: 'incomplete'\n\t\t\t\t\t\t\t\tconst label = [\n\t\t\t\t\t\t\t\t\tprogress.epicLessonSlug,\n\t\t\t\t\t\t\t\t\tprogress.epicCompletedAt\n\t\t\t\t\t\t\t\t\t\t? `(${progress.epicCompletedAt})`\n\t\t\t\t\t\t\t\t\t\t: null,\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t\t\t\t\t.join(' ')\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<li\n\t\t\t\t\t\t\t\t\t\tkey={progress.epicLessonSlug}\n\t\t\t\t\t\t\t\t\t\tclassName=\"flex items-center gap-2\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\tclassName={`h-3 w-3 rounded-full ${progressStatus[status]}`}\n\t\t\t\t\t\t\t\t\t\t\ttitle={status}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t{progress.type === 'unknown' ? (\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"flex items-center gap-1\">\n\t\t\t\t\t\t\t\t\t\t\t\t{label}\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-red-500\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<SimpleTooltip content=\"This video is in the workshop on EpicWeb.dev, but not in the local workshop.\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Icon name=\"Close\" />\n\t\t\t\t\t\t\t\t\t\t\t\t\t</SimpleTooltip>\n\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t<Link to={linkProgress(progress)}>{label}</Link>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t<Link to={progress.epicLessonUrl}>\n\t\t\t\t\t\t\t\t\t\t\t<Icon name=\"ExternalLink\"></Icon>\n\t\t\t\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<p>No progress data</p>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<h2 className=\"text-lg font-bold\">Commands</h2>\n\t\t\t\t\t<ul className=\"max-h-48 overflow-y-scroll border-2 p-8 scrollbar-thin scrollbar-thumb-scrollbar\">\n\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t<Form method=\"POST\">\n\t\t\t\t\t\t\t\t<button name=\"intent\" value=\"clear-caches\">\n\t\t\t\t\t\t\t\t\tClear local caches\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t</Form>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t<Form method=\"POST\">\n\t\t\t\t\t\t\t\t<button name=\"intent\" value=\"clear-data\">\n\t\t\t\t\t\t\t\t\tClear all local data (including auth data)\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t</Form>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t{data.inspectorRunning ? (\n\t\t\t\t\t\t\t\t<Form method=\"POST\">\n\t\t\t\t\t\t\t\t\t<button name=\"intent\" value=\"stop-inspect\">\n\t\t\t\t\t\t\t\t\t\t{isStartingInspector\n\t\t\t\t\t\t\t\t\t\t\t? 'Stopping inspector...'\n\t\t\t\t\t\t\t\t\t\t\t: 'Stop inspector'}\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t</Form>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<Form method=\"POST\">\n\t\t\t\t\t\t\t\t\t<button name=\"intent\" value=\"inspect\">\n\t\t\t\t\t\t\t\t\t\t{isStoppingInspector\n\t\t\t\t\t\t\t\t\t\t\t? 'Starting inspector...'\n\t\t\t\t\t\t\t\t\t\t\t: 'Start inspector'}\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t</Form>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<h2 className=\"text-lg font-bold\">Apps</h2>\n\t\t\t\t\t<ul className=\"max-h-48 list-none overflow-y-scroll border-2 p-8 scrollbar-thin scrollbar-thumb-scrollbar\">\n\t\t\t\t\t\t{data.apps.map((app) => (\n\t\t\t\t\t\t\t<li key={app.name} className=\"flex items-center gap-2 py-1\">\n\t\t\t\t\t\t\t\t{data.processes[app.name] ? (\n\t\t\t\t\t\t\t\t\t<Pinger status=\"running\" />\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<Pinger status=\"stopped\" />\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{app.name}\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<h2 className=\"text-lg font-bold\">Processes</h2>\n\t\t\t\t\t<ul className=\"overflow-y-scroll border-2 p-8 scrollbar-thin scrollbar-thumb-scrollbar\">\n\t\t\t\t\t\t{Object.entries(data.processes).map(([key, process]) => (\n\t\t\t\t\t\t\t<li key={key}>\n\t\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t\t{key} - Port: {process.port} - PID {process.pid} -{' '}\n\t\t\t\t\t\t\t\t\t{process.color}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<h2 className=\"text-lg font-bold\">Test Processes</h2>\n\t\t\t\t\t<ul className=\"overflow-y-scroll border-2 p-8 scrollbar-thin scrollbar-thumb-scrollbar\">\n\t\t\t\t\t\t{Object.entries(data.testProcesses).map(([key, process]) => (\n\t\t\t\t\t\t\t<li key={key}>\n\t\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t\t{key} - PID {process.pid} - Exit code: {process.exitCode}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</main>\n\t)\n}\n\nfunction Pinger({\n\tstatus,\n}: {\n\tstatus: 'running' | 'starting' | 'stopped' | 'taken'\n}) {\n\tconst colors = {\n\t\trunning: {\n\t\t\tpinger: 'bg-green-400',\n\t\t\tcircle: 'bg-green-500',\n\t\t},\n\t\tstarting: {\n\t\t\tpinger: 'bg-sky-400',\n\t\t\tcircle: 'bg-sky-500',\n\t\t},\n\t\tstopped: {\n\t\t\tcircle: 'bg-gray-500',\n\t\t},\n\t\ttaken: {\n\t\t\tpinger: 'bg-red-400',\n\t\t\tcircle: 'bg-red-500',\n\t\t},\n\t}[status]\n\treturn (\n\t\t<span className=\"relative flex h-3 w-3\">\n\t\t\t{colors.pinger ? (\n\t\t\t\t<span\n\t\t\t\t\tclassName={`absolute inline-flex h-full w-full animate-ping rounded-full ${colors.pinger} opacity-75`}\n\t\t\t\t/>\n\t\t\t) : null}\n\t\t\t<span\n\t\t\t\tclassName={`relative inline-flex h-3 w-3 rounded-full ${colors.circle}`}\n\t\t\t/>\n\t\t</span>\n\t)\n}\n"],"names":["handle","getSitemapEntries","meta","matches","rootData","find","m","id","data","title","workshopTitle","sortProgress","a","b","type","linkProgress","progress","exerciseNumber","toString","padStart","stepNumber","AdminLayout","useLoaderData","navigation","useNavigation","epicProgress","useEpicProgress","isStartingInspector","formData","get","isStoppingInspector","progressStatus","completed","incomplete","jsxs","className","children","jsx","Link","to","sort","map","status","epicCompletedAt","label","epicLessonSlug","filter","Boolean","join","SimpleTooltip","content","Icon","name","epicLessonUrl","Form","method","value","inspectorRunning","apps","app","processes","Pinger","Object","entries","key","process","port","pid","color","testProcesses","exitCode","colors","running","pinger","circle","starting","stopped","taken"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import{j as e}from"./index-BFGhCX_U.js";import{B as r}from"./button-DQ001ob0.js";import{I as i}from"./misc-BJtHv_Jh.js";import{S as o}from"./tooltip-BgynKV2c.js";import{u as d,a as m}from"./user-CFunCRfr.js";import{u}from"./workshop-config-DJY2cXU_.js";import{u as x}from"./presence-DyppfK2V.js";import{L as a,F as l}from"./components-9EGYHTc_.js";import"./request-info-DCIQLE6H.js";const k={getSitemapEntries:()=>null};function h(){const{product:{host:s}}=u();return`${s}/discord`}function L(){const s=d(),n=m(),t=x(),c=h();return e.jsxs("main",{className:"container flex h-full w-full max-w-3xl flex-grow flex-col items-center justify-center gap-4",children:[s.imageUrlLarge?e.jsx("img",{className:"h-36 w-36 rounded-full",alt:(n==null?void 0:n.displayName)??s.name??s.email,src:s.imageUrlLarge}):e.jsx(i,{name:"User",className:"flex-shrink-0",size:"lg"}),e.jsx("h1",{className:"mb-1 text-2xl",children:"Your Account"}),e.jsx("p",{className:"text-center text-gray-700 dark:text-gray-300",children:s.name?`Hi ${(n==null?void 0:n.displayName)??s.name}, your device is logged in with ${s.email}.`:`Your device is logged in with ${s.email}.`}),n?e.jsx(e.Fragment,{children:e.jsxs("p",{className:"text-center text-gray-700 dark:text-gray-300",children:["And you are connected to discord as"," ",e.jsx("a",{href:`https://discord.com/users/${n.id}`,target:"_blank",rel:"noopener noreferrer",className:"underline",children:n.displayName}),"."]})}):e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs(a,{to:c,className:"inline-flex items-center gap-2 underline",children:[e.jsx(i,{name:"Discord",size:"lg"}),"Connect Discord"]}),e.jsx(o,{content:"This will give you access to the exclusive Discord channels for Epic Web",children:e.jsx(i,{name:"Question",tabIndex:0})})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs(l,{method:"POST",children:[e.jsx("input",{name:"optOut",type:"hidden",value:t!=null&&t.optOut?"false":"true"}),e.jsxs(r,{varient:"mono",name:"intent",value:"presence-opt-out",children:[t!=null&&t.optOut?"Opt in to":"Opt out of"," presence"]})]}),e.jsx(o,{content:"This controls whether your name and avatar are displayed in the pile of faces in navigation",children:e.jsx(i,{name:"Question",tabIndex:0})})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(l,{method:"post",children:e.jsx(r,{varient:"mono",name:"intent",value:"logout",children:"Log device out"})}),e.jsx(o,{content:e.jsxs("div",{children:["Note: it is your ",e.jsx("i",{className:"italic",children:"device"})," that's logged in, not your browser.",e.jsx("br",{}),"So all browsers on this device will be logged in with the same account on this device."]}),children:e.jsx(i,{name:"Question",tabIndex:0})})]}),e.jsxs("p",{children:["Check"," ",e.jsx(a,{to:"/onboarding",className:"underline",children:"/onboarding"})," ","if you'd like to review onboarding again."]}),e.jsxs("p",{children:["Check"," ",e.jsx(a,{to:"/support",className:"underline",children:"/support"})," ","if you need support."]})]})}export{L as default,k as handle};
2
- //# sourceMappingURL=account-B5baO5pg.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"account-B5baO5pg.js","sources":["../../../app/routes/_app+/account.tsx"],"sourcesContent":["import { deleteCache } from '@epic-web/workshop-utils/cache.server'\nimport {\n\tdeleteDb,\n\trequireAuthInfo,\n\tsetPresencePreferences,\n} from '@epic-web/workshop-utils/db.server'\nimport { type SEOHandle } from '@nasa-gcn/remix-seo'\nimport { redirect, type LoaderFunctionArgs } from '@remix-run/node'\nimport { Form, Link } from '@remix-run/react'\nimport { Button } from '#app/components/button.tsx'\nimport { Icon } from '#app/components/icons.tsx'\nimport { SimpleTooltip } from '#app/components/ui/tooltip.js'\nimport { useOptionalDiscordMember, useUser } from '#app/components/user.tsx'\nimport { useWorkshopConfig } from '#app/components/workshop-config.tsx'\nimport { ensureUndeployed } from '#app/utils/misc.tsx'\nimport { usePresencePreferences } from '#app/utils/presence.tsx'\nimport { redirectWithToast } from '#app/utils/toast.server.ts'\n\nexport const handle: SEOHandle = {\n\tgetSitemapEntries: () => null,\n}\n\nexport async function loader({ request }: LoaderFunctionArgs) {\n\tensureUndeployed()\n\tawait requireAuthInfo({ request })\n\treturn {}\n}\n\nexport async function action({ request }: { request: Request }) {\n\tensureUndeployed()\n\tconst formData = await request.formData()\n\tconst intent = formData.get('intent')\n\tif (intent === 'logout') {\n\t\tawait deleteDb()\n\t\tawait deleteCache()\n\t\treturn redirectWithToast('/login', {\n\t\t\ttype: 'success',\n\t\t\ttitle: 'Logged out',\n\t\t\tdescription: 'Goodbye! Come back soon!',\n\t\t})\n\t} else if (intent === 'presence-opt-out') {\n\t\tconst optOut = formData.get('optOut') === 'true'\n\t\tawait setPresencePreferences({ optOut })\n\t\treturn redirectWithToast('/account', {\n\t\t\ttitle: optOut ? 'Opted out' : 'Opted in',\n\t\t\tdescription: `You are now ${optOut ? 'invisible' : 'visible'}.`,\n\t\t\ttype: 'success',\n\t\t})\n\t}\n\n\treturn redirect('/account')\n}\n\nfunction useConnectDiscordURL() {\n\tconst {\n\t\tproduct: { host },\n\t} = useWorkshopConfig()\n\treturn `${host}/discord`\n}\n\nexport default function Account() {\n\tconst user = useUser()\n\tconst discordMember = useOptionalDiscordMember()\n\tconst presencePreferences = usePresencePreferences()\n\tconst connectDiscordURL = useConnectDiscordURL()\n\treturn (\n\t\t<main className=\"container flex h-full w-full max-w-3xl flex-grow flex-col items-center justify-center gap-4\">\n\t\t\t{user.imageUrlLarge ? (\n\t\t\t\t<img\n\t\t\t\t\tclassName=\"h-36 w-36 rounded-full\"\n\t\t\t\t\talt={discordMember?.displayName ?? user.name ?? user.email}\n\t\t\t\t\tsrc={user.imageUrlLarge}\n\t\t\t\t/>\n\t\t\t) : (\n\t\t\t\t<Icon name=\"User\" className=\"flex-shrink-0\" size=\"lg\" />\n\t\t\t)}\n\t\t\t<h1 className=\"mb-1 text-2xl\">Your Account</h1>\n\t\t\t<p className=\"text-center text-gray-700 dark:text-gray-300\">\n\t\t\t\t{user.name\n\t\t\t\t\t? `Hi ${\n\t\t\t\t\t\t\tdiscordMember?.displayName ?? user.name\n\t\t\t\t\t\t}, your device is logged in with ${user.email}.`\n\t\t\t\t\t: `Your device is logged in with ${user.email}.`}\n\t\t\t</p>\n\t\t\t{discordMember ? (\n\t\t\t\t<>\n\t\t\t\t\t<p className=\"text-center text-gray-700 dark:text-gray-300\">\n\t\t\t\t\t\tAnd you are connected to discord as{' '}\n\t\t\t\t\t\t<a\n\t\t\t\t\t\t\thref={`https://discord.com/users/${discordMember.id}`}\n\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\t\t\t\tclassName=\"underline\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{discordMember.displayName}\n\t\t\t\t\t\t</a>\n\t\t\t\t\t\t.\n\t\t\t\t\t</p>\n\t\t\t\t</>\n\t\t\t) : (\n\t\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t\t<Link\n\t\t\t\t\t\tto={connectDiscordURL}\n\t\t\t\t\t\tclassName=\"inline-flex items-center gap-2 underline\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<Icon name=\"Discord\" size=\"lg\" />\n\t\t\t\t\t\tConnect Discord\n\t\t\t\t\t</Link>\n\t\t\t\t\t<SimpleTooltip content=\"This will give you access to the exclusive Discord channels for Epic Web\">\n\t\t\t\t\t\t<Icon name=\"Question\" tabIndex={0} />\n\t\t\t\t\t</SimpleTooltip>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t<Form method=\"POST\">\n\t\t\t\t\t<input\n\t\t\t\t\t\tname=\"optOut\"\n\t\t\t\t\t\ttype=\"hidden\"\n\t\t\t\t\t\tvalue={presencePreferences?.optOut ? 'false' : 'true'}\n\t\t\t\t\t/>\n\t\t\t\t\t<Button varient=\"mono\" name=\"intent\" value=\"presence-opt-out\">\n\t\t\t\t\t\t{presencePreferences?.optOut ? 'Opt in to' : 'Opt out of'} presence\n\t\t\t\t\t</Button>\n\t\t\t\t</Form>\n\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<Icon name=\"Question\" tabIndex={0} />\n\t\t\t\t</SimpleTooltip>\n\t\t\t</div>\n\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t<Form method=\"post\">\n\t\t\t\t\t<Button varient=\"mono\" name=\"intent\" value=\"logout\">\n\t\t\t\t\t\tLog device out\n\t\t\t\t\t</Button>\n\t\t\t\t</Form>\n\t\t\t\t<SimpleTooltip\n\t\t\t\t\tcontent={\n\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\tNote: it is your <i className=\"italic\">device</i> that's logged\n\t\t\t\t\t\t\tin, not your browser.\n\t\t\t\t\t\t\t<br />\n\t\t\t\t\t\t\tSo all browsers on this device will be logged in with the same\n\t\t\t\t\t\t\taccount on this device.\n\t\t\t\t\t\t</div>\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t\t<Icon name=\"Question\" tabIndex={0} />\n\t\t\t\t</SimpleTooltip>\n\t\t\t</div>\n\t\t\t<p>\n\t\t\t\tCheck{' '}\n\t\t\t\t<Link to=\"/onboarding\" className=\"underline\">\n\t\t\t\t\t/onboarding\n\t\t\t\t</Link>{' '}\n\t\t\t\tif you'd like to review onboarding again.\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\tCheck{' '}\n\t\t\t\t<Link to=\"/support\" className=\"underline\">\n\t\t\t\t\t/support\n\t\t\t\t</Link>{' '}\n\t\t\t\tif you need support.\n\t\t\t</p>\n\t\t</main>\n\t)\n}\n"],"names":["handle","getSitemapEntries","useConnectDiscordURL","product","host","useWorkshopConfig","Account","user","useUser","discordMember","useOptionalDiscordMember","presencePreferences","usePresencePreferences","connectDiscordURL","jsxs","className","children","imageUrlLarge","jsx","alt","displayName","name","email","src","Icon","size","Fragment","href","id","target","rel","Link","to","SimpleTooltip","content","tabIndex","Form","method","type","value","optOut","Button","varient"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import{r as t,j as s}from"./index-BFGhCX_U.js";import{P as e}from"./preview-CW_12I0i.js";import{u as i}from"./components-9EGYHTc_.js";import"./misc-BJtHv_Jh.js";import"./request-info-DCIQLE6H.js";import"./button-DQ001ob0.js";import"./loading-Dk0n07O3.js";import"./index-_J-F_Dnc.js";import"./tooltip-BgynKV2c.js";import"./pe-ChIwTk8v.js";import"./progress-bar-Cj5R4Zk7.js";function R(){const{appInfo:r}=i(),o=t.useRef(null);return s.jsx(e,{appInfo:r,inBrowserBrowserRef:o})}export{R as default};
2
- //# sourceMappingURL=app-CM8yuYni.js.map
@@ -1,2 +0,0 @@
1
- import{c as o,j as r}from"./index-BFGhCX_U.js";import{d as e,a as m}from"./misc-BJtHv_Jh.js";import{D as p}from"./diff-C2Hm_DHX.js";import{N as n}from"./nav-chevrons-CgbSMLeb.js";import{u as f,b as c}from"./components-9EGYHTc_.js";import"./accordion-DC885Li1.js";import"./tooltip-BgynKV2c.js";import"./index-BuA_RWlU.js";import"./index-BuoaxPEj.js";import"./mdx-DIAWAXtT.js";import"./epic-video-Bxtz3elt.js";import"./index-_J-F_Dnc.js";import"./request-info-DCIQLE6H.js";import"./pe-ChIwTk8v.js";import"./loading-Dk0n07O3.js";import"./user-CFunCRfr.js";import"./workshop-config-DJY2cXU_.js";import"./progress-bar-Cj5R4Zk7.js";import"./revalidation-ws-DU-PzW-_.js";function P(){const i=f(),[t]=c();new URLSearchParams(t).set("forceFresh","diff");const s=o(),a=e.useSpinDelay(s.state!=="idle",{delay:200,minDuration:200});return r.jsxs("div",{className:m("grid h-full grid-rows-[1fr,auto]",{"cursor-wait opacity-30":a}),children:[r.jsx("div",{className:"overflow-y-auto",children:r.jsx(p,{diff:i.diff,allApps:i.allApps})}),r.jsx("div",{className:"flex h-16 items-center justify-end border-t",children:r.jsx(n,{prev:i.prevLink,next:i.nextLink})})]})}export{P as default};
2
- //# sourceMappingURL=diff-CbIF8Oq1.js.map
@@ -1,2 +0,0 @@
1
- import{a as e,h as d}from"./discord-DcHxc30v.js";import"./index-BFGhCX_U.js";import"./misc-BJtHv_Jh.js";import"./components-9EGYHTc_.js";import"./user-CFunCRfr.js";import"./workshop-config-DJY2cXU_.js";export{e as default,d as handle};
2
- //# sourceMappingURL=discord-BnQDHWJj.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"discord-BnQDHWJj.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- import{j as e}from"./index-BFGhCX_U.js";import{I as t}from"./misc-BJtHv_Jh.js";import{c as i,a as c}from"./user-CFunCRfr.js";import{u as d}from"./workshop-config-DJY2cXU_.js";import{L as s}from"./components-9EGYHTc_.js";const f={getSitemapEntries:()=>null};function l(){const{product:{host:r}}=d();return`${r}/discord`}function j(){const r=i(),n=c(),o=l();return r?n?"https://discord.com/channels/715220730605731931/1161045224907341972":o:"/login"}function a(){const r=i(),n=c(),o=l();return r?n?e.jsxs("div",{className:"flex items-center justify-center gap-2 text-xl underline",children:[e.jsx(s,{to:"discord://discord.com/channels/715220730605731931/1161045224907341972",children:e.jsx(t,{name:"Discord",size:"2xl"})}),e.jsx(s,{to:"https://discord.com/channels/715220730605731931/1161045224907341972",target:"_blank",rel:"noreferrer noopener",children:"Open Discord"})]}):e.jsxs("div",{className:"flex flex-wrap items-center justify-center gap-2 text-xl",children:[e.jsxs(s,{to:o,className:"flex items-center gap-2 underline",children:[e.jsx(t,{name:"Discord",size:"2xl"}),"Connect Discord"]})," ",e.jsxs("span",{children:["to get access to the exclusive"," ",e.jsx(s,{to:"/discord",className:"underline",children:"discord channel"}),"."]})]}):e.jsxs("div",{className:"flex flex-wrap items-center justify-center gap-2 text-xl",children:[e.jsxs(s,{to:"/login",className:"inline-flex items-center gap-2 underline",children:[e.jsx(t,{name:"Discord",size:"2xl"}),"Login"]})," ",e.jsxs("span",{children:["to get access to the exclusive"," ",e.jsx(s,{to:"/discord",className:"underline",children:"discord channel"}),"."]})]})}function g(){return e.jsxs("div",{className:"container flex h-full max-w-3xl flex-col items-center justify-center gap-4 p-12",children:[e.jsx(a,{}),e.jsxs("p",{children:["The"," ",e.jsx(s,{target:"_blank",rel:"noreferrer noopener",className:"underline",to:"https://kentcdodds.com/discord",children:"Epic Web Community on Discord"})," ","is a great place to hang out with other developers who are working through this workshop. You can ask questions, get help, and solidify what you're learning by helping others."]}),e.jsx("p",{children:e.jsxs("small",{className:"text-sm",children:["If you've not joined the Epic Web Community on Discord yet, you'll be required to go through a short onboarding process first. A friendly bot will explain the process when you"," ",e.jsx(s,{to:"https://kcd.im/discord",target:"_blank",rel:"noreferrer noopener",className:"underline",children:"join"}),"."]})})]})}export{a as D,g as a,f as h,j as u};
2
- //# sourceMappingURL=discord-DcHxc30v.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"discord-DcHxc30v.js","sources":["../../../app/routes/_app+/discord.tsx"],"sourcesContent":["import { type SEOHandle } from '@nasa-gcn/remix-seo'\nimport { Link } from '@remix-run/react'\nimport { Icon } from '#app/components/icons.tsx'\nimport {\n\tuseOptionalDiscordMember,\n\tuseOptionalUser,\n} from '#app/components/user.tsx'\nimport { useWorkshopConfig } from '#app/components/workshop-config.tsx'\n\nexport const handle: SEOHandle = {\n\tgetSitemapEntries: () => null,\n}\n\nfunction useConnectDiscordURL() {\n\tconst {\n\t\tproduct: { host },\n\t} = useWorkshopConfig()\n\treturn `${host}/discord`\n}\n\nexport function useDiscordCTALink() {\n\tconst user = useOptionalUser()\n\tconst discordMember = useOptionalDiscordMember()\n\tconst connectDiscordURL = useConnectDiscordURL()\n\n\tif (!user) {\n\t\treturn '/login'\n\t}\n\tif (!discordMember) {\n\t\treturn connectDiscordURL\n\t}\n\n\treturn 'https://discord.com/channels/715220730605731931/1161045224907341972'\n}\n\nexport function DiscordCTA() {\n\tconst user = useOptionalUser()\n\tconst discordMember = useOptionalDiscordMember()\n\tconst connectDiscordURL = useConnectDiscordURL()\n\tif (!user) {\n\t\treturn (\n\t\t\t<div className=\"flex flex-wrap items-center justify-center gap-2 text-xl\">\n\t\t\t\t<Link to=\"/login\" className=\"inline-flex items-center gap-2 underline\">\n\t\t\t\t\t<Icon name=\"Discord\" size=\"2xl\" />\n\t\t\t\t\tLogin\n\t\t\t\t</Link>{' '}\n\t\t\t\t<span>\n\t\t\t\t\tto get access to the exclusive{' '}\n\t\t\t\t\t<Link to=\"/discord\" className=\"underline\">\n\t\t\t\t\t\tdiscord channel\n\t\t\t\t\t</Link>\n\t\t\t\t\t.\n\t\t\t\t</span>\n\t\t\t</div>\n\t\t)\n\t}\n\tif (!discordMember) {\n\t\treturn (\n\t\t\t<div className=\"flex flex-wrap items-center justify-center gap-2 text-xl\">\n\t\t\t\t<Link\n\t\t\t\t\tto={connectDiscordURL}\n\t\t\t\t\tclassName=\"flex items-center gap-2 underline\"\n\t\t\t\t>\n\t\t\t\t\t<Icon name=\"Discord\" size=\"2xl\" />\n\t\t\t\t\tConnect Discord\n\t\t\t\t</Link>{' '}\n\t\t\t\t<span>\n\t\t\t\t\tto get access to the exclusive{' '}\n\t\t\t\t\t<Link to=\"/discord\" className=\"underline\">\n\t\t\t\t\t\tdiscord channel\n\t\t\t\t\t</Link>\n\t\t\t\t\t.\n\t\t\t\t</span>\n\t\t\t</div>\n\t\t)\n\t}\n\n\treturn (\n\t\t<div className=\"flex items-center justify-center gap-2 text-xl underline\">\n\t\t\t<Link to=\"discord://discord.com/channels/715220730605731931/1161045224907341972\">\n\t\t\t\t<Icon name=\"Discord\" size=\"2xl\" />\n\t\t\t</Link>\n\t\t\t<Link\n\t\t\t\tto=\"https://discord.com/channels/715220730605731931/1161045224907341972\"\n\t\t\t\ttarget=\"_blank\"\n\t\t\t\trel=\"noreferrer noopener\"\n\t\t\t>\n\t\t\t\tOpen Discord\n\t\t\t</Link>\n\t\t</div>\n\t)\n}\n\nexport default function DiscordRoute() {\n\treturn (\n\t\t<div className=\"container flex h-full max-w-3xl flex-col items-center justify-center gap-4 p-12\">\n\t\t\t<DiscordCTA />\n\t\t\t<p>\n\t\t\t\tThe{' '}\n\t\t\t\t<Link\n\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\trel=\"noreferrer noopener\"\n\t\t\t\t\tclassName=\"underline\"\n\t\t\t\t\tto=\"https://kentcdodds.com/discord\"\n\t\t\t\t>\n\t\t\t\t\tEpic Web Community on Discord\n\t\t\t\t</Link>{' '}\n\t\t\t\tis a great place to hang out with other developers who are working\n\t\t\t\tthrough this workshop. You can ask questions, get help, and solidify\n\t\t\t\twhat you're learning by helping others.\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\t<small className=\"text-sm\">\n\t\t\t\t\tIf you've not joined the Epic Web Community on Discord yet, you'll be\n\t\t\t\t\trequired to go through a short onboarding process first. A friendly\n\t\t\t\t\tbot will explain the process when you{' '}\n\t\t\t\t\t<Link\n\t\t\t\t\t\tto=\"https://kcd.im/discord\"\n\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\trel=\"noreferrer noopener\"\n\t\t\t\t\t\tclassName=\"underline\"\n\t\t\t\t\t>\n\t\t\t\t\t\tjoin\n\t\t\t\t\t</Link>\n\t\t\t\t\t.\n\t\t\t\t</small>\n\t\t\t</p>\n\t\t</div>\n\t)\n}\n"],"names":["handle","getSitemapEntries","useConnectDiscordURL","product","host","useWorkshopConfig","useDiscordCTALink","user","useOptionalUser","discordMember","useOptionalDiscordMember","connectDiscordURL","DiscordCTA","jsxs","className","children","jsx","Link","to","Icon","name","size","target","rel","DiscordRoute"],"mappings":"4NASO,MAAMA,EAAoB,CAChCC,kBAAmBA,IAAM,IAC1B,EAEA,SAASC,GAAuB,CACzB,KAAA,CACLC,QAAS,CAAEC,KAAAA,CAAK,GACbC,EAAkB,EACtB,MAAO,GAAGD,CAAI,UACf,CAEO,SAASE,GAAoB,CACnC,MAAMC,EAAOC,IACPC,EAAgBC,IAChBC,EAAoBT,IAE1B,OAAKK,EAGAE,EAIE,sEAHCE,EAHA,QAOT,CAEO,SAASC,GAAa,CAC5B,MAAML,EAAOC,IACPC,EAAgBC,IAChBC,EAAoBT,IAC1B,OAAKK,EAiBAE,EAsBJI,EAAAA,KAAC,MAAI,CAAAC,UAAU,2DACdC,SAAA,CAACC,EAAA,IAAAC,EAAA,CAAKC,GAAG,wEACRH,SAAAC,EAAA,IAACG,GAAKC,KAAK,UAAUC,KAAK,MAAM,CACjC,CAAA,EACAL,EAAA,IAACC,EAAA,CACAC,GAAG,sEACHI,OAAO,SACPC,IAAI,sBACJR,SAAA,cAAA,CAED,CAAA,CACD,CAAA,EA/BCF,EAAAA,KAAC,MAAI,CAAAC,UAAU,2DACdC,SAAA,CAAAF,EAAA,KAACI,EAAA,CACAC,GAAIP,EACJG,UAAU,oCAEVC,SAAA,CAAAC,EAAA,IAACG,EAAK,CAAAC,KAAK,UAAUC,KAAK,KAAM,CAAA,EAAE,iBAAA,EAEnC,EAAQ,WACP,OAAK,CAAAN,SAAA,CAAA,iCAC0B,UAC9BE,EAAK,CAAAC,GAAG,WAAWJ,UAAU,YAAYC,SAE1C,iBAAA,CAAA,EAAO,GAAA,CAER,CAAA,CAAA,CACD,CAAA,EAhCAF,EAAAA,KAAC,MAAI,CAAAC,UAAU,2DACdC,SAAA,CAAAF,EAAA,KAACI,EAAK,CAAAC,GAAG,SAASJ,UAAU,2CAC3BC,SAAA,CAAAC,EAAA,IAACG,EAAK,CAAAC,KAAK,UAAUC,KAAK,KAAM,CAAA,EAAE,OAAA,EAEnC,EAAQ,WACP,OAAK,CAAAN,SAAA,CAAA,iCAC0B,UAC9BE,EAAK,CAAAC,GAAG,WAAWJ,UAAU,YAAYC,SAE1C,iBAAA,CAAA,EAAO,GAAA,CAER,CAAA,CAAA,CACD,CAAA,CAsCH,CAEA,SAAwBS,GAAe,CAErC,OAAAX,EAAAA,KAAC,MAAI,CAAAC,UAAU,kFACdC,SAAA,CAAAC,EAAAA,IAACJ,EAAW,CAAA,CAAA,SACX,IAAE,CAAAG,SAAA,CAAA,MACE,IACJC,EAAAA,IAACC,EAAA,CACAK,OAAO,SACPC,IAAI,sBACJT,UAAU,YACVI,GAAG,iCACHH,SAAA,+BAAA,CAED,EAAQ,IAAI,iLAAA,CAIb,CAAA,EACCC,EAAA,IAAA,IAAA,CACAD,SAACF,EAAA,KAAA,QAAA,CAAMC,UAAU,UAAUC,SAAA,CAAA,kLAGY,IACtCC,EAAAA,IAACC,EAAA,CACAC,GAAG,yBACHI,OAAO,SACPC,IAAI,sBACJT,UAAU,YACVC,SAAA,MAED,CAAA,EAAO,GAAA,EAER,CACD,CAAA,CAAA,CACD,CAAA,CAEF"}
@@ -1 +0,0 @@
1
- window.__remixManifest={"entry":{"module":"/assets/entry.client-BTYTUpFV.js","imports":["/assets/index-BFGhCX_U.js","/assets/components-9EGYHTc_.js"],"css":[]},"routes":{"root":{"id":"root","path":"","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":true,"module":"/assets/root-DCfiv1cO.js","imports":["/assets/index-BFGhCX_U.js","/assets/components-9EGYHTc_.js","/assets/misc-BJtHv_Jh.js","/assets/pe-ChIwTk8v.js","/assets/error-boundary-1-dmC941.js","/assets/progress-bar-Cj5R4Zk7.js","/assets/index-DRH72MzK.js","/assets/tooltip-BgynKV2c.js","/assets/index-_J-F_Dnc.js","/assets/presence-DyppfK2V.js","/assets/seo-pBpFCWsy.js","/assets/request-info-DCIQLE6H.js"],"css":[]},"routes/$":{"id":"routes/$","parentId":"root","path":"*","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":true,"module":"/assets/_-CWSCXcBv.js","imports":["/assets/index-BFGhCX_U.js","/assets/error-boundary-1-dmC941.js","/assets/misc-BJtHv_Jh.js","/assets/components-9EGYHTc_.js"],"css":[]},"routes/_app+/_layout":{"id":"routes/_app+/_layout","parentId":"root","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/_layout-BK7mLImi.js","imports":["/assets/index-BFGhCX_U.js","/assets/misc-BJtHv_Jh.js","/assets/pe-ChIwTk8v.js","/assets/product-C1ynnrN_.js","/assets/revalidation-ws-DU-PzW-_.js","/assets/tooltip-BgynKV2c.js","/assets/index-BuoaxPEj.js","/assets/user-CFunCRfr.js","/assets/workshop-config-DJY2cXU_.js","/assets/presence-DyppfK2V.js","/assets/progress-DAB3nDa2.js","/assets/index-_J-F_Dnc.js","/assets/components-9EGYHTc_.js","/assets/request-info-DCIQLE6H.js"],"css":[]},"routes/_app+/account":{"id":"routes/_app+/account","parentId":"routes/_app+/_layout","path":"account","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/account-B5baO5pg.js","imports":["/assets/index-BFGhCX_U.js","/assets/button-DQ001ob0.js","/assets/misc-BJtHv_Jh.js","/assets/tooltip-BgynKV2c.js","/assets/user-CFunCRfr.js","/assets/workshop-config-DJY2cXU_.js","/assets/presence-DyppfK2V.js","/assets/components-9EGYHTc_.js","/assets/request-info-DCIQLE6H.js"],"css":[]},"routes/_app+/app.$appName+/$":{"id":"routes/_app+/app.$appName+/$","parentId":"routes/_app+/_layout","path":"app/:appName/*","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/_-l0sNRNKZ.js","imports":[],"css":[]},"routes/_app+/app.$appName+/api.$":{"id":"routes/_app+/app.$appName+/api.$","parentId":"routes/_app+/_layout","path":"app/:appName/api/*","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/api._-l0sNRNKZ.js","imports":[],"css":[]},"routes/_app+/app.$appName+/epic_ws[.js]":{"id":"routes/_app+/app.$appName+/epic_ws[.js]","parentId":"routes/_app+/_layout","path":"app/:appName/epic_ws.js","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/epic_ws_.js_-l0sNRNKZ.js","imports":[],"css":[]},"routes/_app+/app.$appName+/index":{"id":"routes/_app+/app.$appName+/index","parentId":"routes/_app+/_layout","path":"app/:appName/","index":true,"hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/index-l0sNRNKZ.js","imports":[],"css":[]},"routes/_app+/app.$appName+/test.$testName":{"id":"routes/_app+/app.$appName+/test.$testName","parentId":"routes/_app+/_layout","path":"app/:appName/test/:testName","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/test._testName-l0sNRNKZ.js","imports":[],"css":[]},"routes/_app+/app.$appName+/test.epic_ws[.js]":{"id":"routes/_app+/app.$appName+/test.epic_ws[.js]","parentId":"routes/_app+/_layout","path":"app/:appName/test/epic_ws.js","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/test.epic_ws_.js_-l0sNRNKZ.js","imports":[],"css":[]},"routes/_app+/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,"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,"hasErrorBoundary":false,"module":"/assets/discord-BnQDHWJj.js","imports":["/assets/discord-DcHxc30v.js","/assets/index-BFGhCX_U.js","/assets/misc-BJtHv_Jh.js","/assets/components-9EGYHTc_.js","/assets/user-CFunCRfr.js","/assets/workshop-config-DJY2cXU_.js"],"css":[]},"routes/_app+/exercise+/_layout":{"id":"routes/_app+/exercise+/_layout","parentId":"routes/_app+/_layout","path":"exercise","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/_layout-88n0To1b.js","imports":["/assets/index-BFGhCX_U.js"],"css":[]},"routes/_app+/exercise+/$exerciseNumber":{"id":"routes/_app+/exercise+/$exerciseNumber","parentId":"routes/_app+/exercise+/_layout","path":":exerciseNumber","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":true,"module":"/assets/_exerciseNumber-DvMYZgqk.js","imports":["/assets/index-BFGhCX_U.js","/assets/index-BCxBKsqT.js","/assets/epic-video-Bxtz3elt.js","/assets/revalidation-ws-DU-PzW-_.js","/assets/mdx-DIAWAXtT.js","/assets/progress-DAB3nDa2.js","/assets/misc-BJtHv_Jh.js","/assets/seo-pBpFCWsy.js","/assets/components-9EGYHTc_.js","/assets/index-_J-F_Dnc.js","/assets/request-info-DCIQLE6H.js","/assets/tooltip-BgynKV2c.js","/assets/pe-ChIwTk8v.js","/assets/loading-Dk0n07O3.js","/assets/user-CFunCRfr.js","/assets/workshop-config-DJY2cXU_.js","/assets/progress-bar-Cj5R4Zk7.js"],"css":["/assets/epic-video-DUnRvy1A.css"]},"routes/_app+/exercise+/$exerciseNumber_.$stepNumber":{"id":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber","parentId":"routes/_app+/exercise+/_layout","path":":exerciseNumber/:stepNumber","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":true,"module":"/assets/_exerciseNumber_._stepNumber-BA2Xhzqs.js","imports":["/assets/index-BFGhCX_U.js","/assets/misc-BJtHv_Jh.js","/assets/components-9EGYHTc_.js"],"css":[]},"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout":{"id":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout","parentId":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber","path":":type","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":true,"module":"/assets/_layout-BH5PQW0M.js","imports":["/assets/index-BFGhCX_U.js","/assets/index-BCxBKsqT.js","/assets/error-boundary-1-dmC941.js","/assets/nav-chevrons-CgbSMLeb.js","/assets/revalidation-ws-DU-PzW-_.js","/assets/mdx-DIAWAXtT.js","/assets/progress-DAB3nDa2.js","/assets/set-playground-S_rIwJAa.js","/assets/seo-pBpFCWsy.js","/assets/misc-BJtHv_Jh.js","/assets/epic-video-Bxtz3elt.js","/assets/tooltip-BgynKV2c.js","/assets/request-info-DCIQLE6H.js","/assets/components-9EGYHTc_.js","/assets/index-BuoaxPEj.js","/assets/progress-bar-Cj5R4Zk7.js","/assets/pe-ChIwTk8v.js","/assets/index-BuA_RWlU.js","/assets/index-_J-F_Dnc.js","/assets/loading-Dk0n07O3.js","/assets/user-CFunCRfr.js","/assets/workshop-config-DJY2cXU_.js"],"css":["/assets/epic-video-DUnRvy1A.css"]},"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/app":{"id":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/app","parentId":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout","path":"app","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/app-CM8yuYni.js","imports":["/assets/index-BFGhCX_U.js","/assets/preview-CW_12I0i.js","/assets/components-9EGYHTc_.js","/assets/misc-BJtHv_Jh.js","/assets/request-info-DCIQLE6H.js","/assets/button-DQ001ob0.js","/assets/loading-Dk0n07O3.js","/assets/index-_J-F_Dnc.js","/assets/tooltip-BgynKV2c.js","/assets/pe-ChIwTk8v.js","/assets/progress-bar-Cj5R4Zk7.js"],"css":[]},"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/index":{"id":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/index","parentId":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout","index":true,"hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":true,"module":"/assets/index-C2MH9l6b.js","imports":["/assets/index-BFGhCX_U.js","/assets/tooltip-BgynKV2c.js","/assets/index-BuA_RWlU.js","/assets/misc-BJtHv_Jh.js","/assets/diff-C2Hm_DHX.js","/assets/error-boundary-1-dmC941.js","/assets/loading-Dk0n07O3.js","/assets/discord-DcHxc30v.js","/assets/components-9EGYHTc_.js","/assets/index-DRH72MzK.js","/assets/set-playground-S_rIwJAa.js","/assets/tests-GmyhBOwD.js","/assets/preview-CW_12I0i.js","/assets/index-BuoaxPEj.js","/assets/accordion-DC885Li1.js","/assets/mdx-DIAWAXtT.js","/assets/epic-video-Bxtz3elt.js","/assets/index-_J-F_Dnc.js","/assets/request-info-DCIQLE6H.js","/assets/pe-ChIwTk8v.js","/assets/user-CFunCRfr.js","/assets/workshop-config-DJY2cXU_.js","/assets/progress-bar-Cj5R4Zk7.js","/assets/revalidation-ws-DU-PzW-_.js","/assets/use-event-source-x59d4R2Z.js","/assets/button-DQ001ob0.js"],"css":["/assets/epic-video-DUnRvy1A.css"]},"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/test":{"id":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/test","parentId":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout","path":"test","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/test-3x2HHA0t.js","imports":["/assets/index-BFGhCX_U.js","/assets/tests-GmyhBOwD.js","/assets/components-9EGYHTc_.js","/assets/epic-video-Bxtz3elt.js","/assets/index-_J-F_Dnc.js","/assets/request-info-DCIQLE6H.js","/assets/misc-BJtHv_Jh.js","/assets/tooltip-BgynKV2c.js","/assets/pe-ChIwTk8v.js","/assets/loading-Dk0n07O3.js","/assets/user-CFunCRfr.js","/assets/workshop-config-DJY2cXU_.js","/assets/accordion-DC885Li1.js","/assets/index-BuA_RWlU.js","/assets/index-BuoaxPEj.js","/assets/use-event-source-x59d4R2Z.js","/assets/set-playground-S_rIwJAa.js","/assets/progress-bar-Cj5R4Zk7.js"],"css":["/assets/epic-video-DUnRvy1A.css"]},"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.index":{"id":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.index","parentId":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber","index":true,"hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/_exerciseNumber_._stepNumber.index-l0sNRNKZ.js","imports":[],"css":[]},"routes/_app+/exercise+/$exerciseNumber_.finished":{"id":"routes/_app+/exercise+/$exerciseNumber_.finished","parentId":"routes/_app+/exercise+/_layout","path":":exerciseNumber/finished","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/_exerciseNumber_.finished-DYN2QHN6.js","imports":["/assets/index-BFGhCX_U.js","/assets/index-BCxBKsqT.js","/assets/epic-video-Bxtz3elt.js","/assets/loading-Dk0n07O3.js","/assets/nav-chevrons-CgbSMLeb.js","/assets/revalidation-ws-DU-PzW-_.js","/assets/mdx-DIAWAXtT.js","/assets/progress-DAB3nDa2.js","/assets/misc-BJtHv_Jh.js","/assets/seo-pBpFCWsy.js","/assets/components-9EGYHTc_.js","/assets/index-_J-F_Dnc.js","/assets/request-info-DCIQLE6H.js","/assets/tooltip-BgynKV2c.js","/assets/pe-ChIwTk8v.js","/assets/user-CFunCRfr.js","/assets/workshop-config-DJY2cXU_.js","/assets/progress-bar-Cj5R4Zk7.js"],"css":["/assets/epic-video-DUnRvy1A.css"]},"routes/_app+/finished":{"id":"routes/_app+/finished","parentId":"routes/_app+/_layout","path":"finished","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/finished--PGQDzya.js","imports":["/assets/index-BFGhCX_U.js","/assets/index-BCxBKsqT.js","/assets/epic-video-Bxtz3elt.js","/assets/loading-Dk0n07O3.js","/assets/nav-chevrons-CgbSMLeb.js","/assets/revalidation-ws-DU-PzW-_.js","/assets/mdx-DIAWAXtT.js","/assets/misc-BJtHv_Jh.js","/assets/seo-pBpFCWsy.js","/assets/progress-DAB3nDa2.js","/assets/components-9EGYHTc_.js","/assets/index-_J-F_Dnc.js","/assets/request-info-DCIQLE6H.js","/assets/tooltip-BgynKV2c.js","/assets/pe-ChIwTk8v.js","/assets/user-CFunCRfr.js","/assets/workshop-config-DJY2cXU_.js","/assets/progress-bar-Cj5R4Zk7.js"],"css":["/assets/epic-video-DUnRvy1A.css"]},"routes/_app+/index":{"id":"routes/_app+/index","parentId":"routes/_app+/_layout","index":true,"hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":true,"module":"/assets/index-oZkQrXic.js","imports":["/assets/index-BFGhCX_U.js","/assets/index-BCxBKsqT.js","/assets/epic-video-Bxtz3elt.js","/assets/error-boundary-1-dmC941.js","/assets/mdx-DIAWAXtT.js","/assets/misc-BJtHv_Jh.js","/assets/progress-DAB3nDa2.js","/assets/components-9EGYHTc_.js","/assets/index-_J-F_Dnc.js","/assets/request-info-DCIQLE6H.js","/assets/tooltip-BgynKV2c.js","/assets/pe-ChIwTk8v.js","/assets/loading-Dk0n07O3.js","/assets/user-CFunCRfr.js","/assets/workshop-config-DJY2cXU_.js","/assets/progress-bar-Cj5R4Zk7.js"],"css":["/assets/epic-video-DUnRvy1A.css"]},"routes/_app+/login":{"id":"routes/_app+/login","parentId":"routes/_app+/_layout","path":"login","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/login-pZYDEC_l.js","imports":["/assets/index-BFGhCX_U.js","/assets/use-event-source-x59d4R2Z.js","/assets/button-DQ001ob0.js","/assets/loading-Dk0n07O3.js","/assets/product-C1ynnrN_.js","/assets/workshop-config-DJY2cXU_.js","/assets/request-info-DCIQLE6H.js","/assets/components-9EGYHTc_.js","/assets/misc-BJtHv_Jh.js","/assets/index-_J-F_Dnc.js","/assets/tooltip-BgynKV2c.js","/assets/pe-ChIwTk8v.js"],"css":[]},"routes/_app+/support":{"id":"routes/_app+/support","parentId":"routes/_app+/_layout","path":"support","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/support-BNS-kEhc.js","imports":["/assets/index-BFGhCX_U.js","/assets/components-9EGYHTc_.js"],"css":[]},"routes/admin+/_layout":{"id":"routes/admin+/_layout","parentId":"root","path":"admin","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/_layout-gyrNluke.js","imports":["/assets/index-BFGhCX_U.js","/assets/misc-BJtHv_Jh.js","/assets/tooltip-BgynKV2c.js","/assets/progress-DAB3nDa2.js","/assets/components-9EGYHTc_.js","/assets/pe-ChIwTk8v.js"],"css":[]},"routes/admin+/apps":{"id":"routes/admin+/apps","parentId":"routes/admin+/_layout","path":"apps","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/apps-l0sNRNKZ.js","imports":[],"css":[]},"routes/admin+/cache":{"id":"routes/admin+/cache","parentId":"routes/admin+/_layout","path":"cache","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/cache-l0sNRNKZ.js","imports":[],"css":[]},"routes/apps":{"id":"routes/apps","parentId":"root","path":"apps","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/apps-DP2rzg_V.js","imports":[],"css":[]},"routes/diff":{"id":"routes/diff","parentId":"root","path":"diff","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/diff-CbIF8Oq1.js","imports":["/assets/index-BFGhCX_U.js","/assets/misc-BJtHv_Jh.js","/assets/diff-C2Hm_DHX.js","/assets/nav-chevrons-CgbSMLeb.js","/assets/components-9EGYHTc_.js","/assets/accordion-DC885Li1.js","/assets/tooltip-BgynKV2c.js","/assets/index-BuA_RWlU.js","/assets/index-BuoaxPEj.js","/assets/mdx-DIAWAXtT.js","/assets/epic-video-Bxtz3elt.js","/assets/index-_J-F_Dnc.js","/assets/request-info-DCIQLE6H.js","/assets/pe-ChIwTk8v.js","/assets/loading-Dk0n07O3.js","/assets/user-CFunCRfr.js","/assets/workshop-config-DJY2cXU_.js","/assets/progress-bar-Cj5R4Zk7.js","/assets/revalidation-ws-DU-PzW-_.js"],"css":["/assets/epic-video-DUnRvy1A.css"]},"routes/exercises":{"id":"routes/exercises","parentId":"root","path":"exercises","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/exercises-l0sNRNKZ.js","imports":[],"css":[]},"routes/launch-editor":{"id":"routes/launch-editor","parentId":"root","path":"launch-editor","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/launch-editor-l0sNRNKZ.js","imports":[],"css":[]},"routes/login-sse":{"id":"routes/login-sse","parentId":"root","path":"login-sse","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/login-sse-l0sNRNKZ.js","imports":[],"css":[]},"routes/og":{"id":"routes/og","parentId":"root","path":"og","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/og-l0sNRNKZ.js","imports":[],"css":[]},"routes/onboarding":{"id":"routes/onboarding","parentId":"root","path":"onboarding","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/onboarding-BAVmCIKn.js","imports":["/assets/index-BFGhCX_U.js","/assets/button-DQ001ob0.js","/assets/epic-video-Bxtz3elt.js","/assets/components-9EGYHTc_.js","/assets/misc-BJtHv_Jh.js","/assets/index-_J-F_Dnc.js","/assets/request-info-DCIQLE6H.js","/assets/tooltip-BgynKV2c.js","/assets/pe-ChIwTk8v.js","/assets/loading-Dk0n07O3.js","/assets/user-CFunCRfr.js","/assets/workshop-config-DJY2cXU_.js"],"css":["/assets/epic-video-DUnRvy1A.css"]},"routes/processes":{"id":"routes/processes","parentId":"root","path":"processes","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/processes-l0sNRNKZ.js","imports":[],"css":[]},"routes/progress":{"id":"routes/progress","parentId":"root","path":"progress","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/progress-l0sNRNKZ.js","imports":[],"css":[]},"routes/robots[.]txt":{"id":"routes/robots[.]txt","parentId":"root","path":"robots.txt","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/robots_._txt-l0sNRNKZ.js","imports":[],"css":[]},"routes/set-playground":{"id":"routes/set-playground","parentId":"root","path":"set-playground","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/set-playground-l0sNRNKZ.js","imports":[],"css":[]},"routes/sitemap[.]xml":{"id":"routes/sitemap[.]xml","parentId":"root","path":"sitemap.xml","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/sitemap_._xml-l0sNRNKZ.js","imports":[],"css":[]},"routes/start":{"id":"routes/start","parentId":"root","path":"start","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/start-l0sNRNKZ.js","imports":[],"css":[]},"routes/test":{"id":"routes/test","parentId":"root","path":"test","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/test-l0sNRNKZ.js","imports":[],"css":[]},"routes/theme/index":{"id":"routes/theme/index","parentId":"root","path":"theme","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/index-DP2rzg_V.js","imports":[],"css":[]},"routes/video-player/index":{"id":"routes/video-player/index","parentId":"root","path":"video-player","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/index-K6Dvbx-E.js","imports":[],"css":[]}},"url":"/assets/manifest-7f4f8707.js","version":"7f4f8707"};
@@ -1,2 +0,0 @@
1
- import{j as t}from"./index-BFGhCX_U.js";import{T as r}from"./tests-GmyhBOwD.js";import{u as p}from"./components-9EGYHTc_.js";import"./epic-video-Bxtz3elt.js";import"./index-_J-F_Dnc.js";import"./request-info-DCIQLE6H.js";import"./misc-BJtHv_Jh.js";import"./tooltip-BgynKV2c.js";import"./pe-ChIwTk8v.js";import"./loading-Dk0n07O3.js";import"./user-CFunCRfr.js";import"./workshop-config-DJY2cXU_.js";import"./accordion-DC885Li1.js";import"./index-BuA_RWlU.js";import"./index-BuoaxPEj.js";import"./use-event-source-x59d4R2Z.js";import"./set-playground-S_rIwJAa.js";import"./progress-bar-Cj5R4Zk7.js";function A(){const{appInfo:o}=p();return t.jsx(r,{playgroundAppInfo:o})}export{A as default};
2
- //# sourceMappingURL=test-3x2HHA0t.js.map
@@ -1,2 +0,0 @@
1
- import{e}from"./components-9EGYHTc_.js";function o(){const r=e("root");return r==null?void 0:r.user}function i(){const r=o();if(!r)throw new Error("useUser requires a user. If the user is optional, use useOptionalUser instead.");return r}function n(){var s;const r=e("root");return(s=r==null?void 0:r.user)!=null&&s.discordProfile?{id:r.user.discordProfile.user.id,displayName:r.user.discordProfile.nick??r.user.discordProfile.user.global_name,avatarUrl:r.user.imageUrlLarge}:null}function t(){const r=e("root");return(r==null?void 0:r.userHasAccess)??!1}export{n as a,t as b,o as c,i as u};
2
- //# sourceMappingURL=user-CFunCRfr.js.map