@epic-web/workshop-app 5.5.0 → 5.7.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 (137) hide show
  1. package/build/client/assets/{_-BrkpfnBb.js → _-CjjFMNGC.js} +2 -2
  2. package/build/client/assets/{_-BrkpfnBb.js.map → _-CjjFMNGC.js.map} +1 -1
  3. package/build/client/assets/_exerciseNumber-CqkGzsgV.js +2 -0
  4. package/build/client/assets/{_exerciseNumber-DCSM0NCG.js.map → _exerciseNumber-CqkGzsgV.js.map} +1 -1
  5. package/build/client/assets/{_exerciseNumber_._stepNumber-BIMJh_sg.js → _exerciseNumber_._stepNumber-BNWGPi9m.js} +2 -2
  6. package/build/client/assets/{_exerciseNumber_._stepNumber-BIMJh_sg.js.map → _exerciseNumber_._stepNumber-BNWGPi9m.js.map} +1 -1
  7. package/build/client/assets/_exerciseNumber_.finished-CdNhLhKg.js +2 -0
  8. package/build/client/assets/{_exerciseNumber_.finished-nbpk1ToO.js.map → _exerciseNumber_.finished-CdNhLhKg.js.map} +1 -1
  9. package/build/client/assets/_layout-BMa5nZcJ.js +2 -0
  10. package/build/client/assets/{_layout-DTAM9xh5.js.map → _layout-BMa5nZcJ.js.map} +1 -1
  11. package/build/client/assets/{_layout-88n0To1b.js → _layout-CwTidn3v.js} +2 -2
  12. package/build/client/assets/{_layout-88n0To1b.js.map → _layout-CwTidn3v.js.map} +1 -1
  13. package/build/client/assets/{_layout-Dfmv2zcn.js → _layout-DV29dlKr.js} +2 -2
  14. package/build/client/assets/{_layout-Dfmv2zcn.js.map → _layout-DV29dlKr.js.map} +1 -1
  15. package/build/client/assets/{_layout-B8j0pWoF.js → _layout-Muw3ERYT.js} +3 -3
  16. package/build/client/assets/{_layout-B8j0pWoF.js.map → _layout-Muw3ERYT.js.map} +1 -1
  17. package/build/client/assets/{accordion-D9-D-n9p.js → accordion-C-sW--in.js} +2 -2
  18. package/build/client/assets/{accordion-D9-D-n9p.js.map → accordion-C-sW--in.js.map} +1 -1
  19. package/build/client/assets/account-Cc968svU.js +2 -0
  20. package/build/client/assets/account-Cc968svU.js.map +1 -0
  21. package/build/client/assets/app-BOqXK9hi.js +2 -0
  22. package/build/client/assets/{app-DgTXXO8s.js.map → app-BOqXK9hi.js.map} +1 -1
  23. package/build/client/assets/{button-_qPvcoqR.js → button-BS845Tjo.js} +2 -2
  24. package/build/client/assets/{button-_qPvcoqR.js.map → button-BS845Tjo.js.map} +1 -1
  25. package/build/client/assets/{components-Be92gVxW.js → components-DrvY4pal.js} +4 -4
  26. package/build/client/assets/{components-Be92gVxW.js.map → components-DrvY4pal.js.map} +1 -1
  27. package/build/client/assets/diff-D0e_PrB7.js +2 -0
  28. package/build/client/assets/{diff-BhRAIPKc.js.map → diff-D0e_PrB7.js.map} +1 -1
  29. package/build/client/assets/{diff-8nlDkmpc.js → diff-DtvfyjPI.js} +2 -2
  30. package/build/client/assets/{diff-8nlDkmpc.js.map → diff-DtvfyjPI.js.map} +1 -1
  31. package/build/client/assets/{discord-BUWZUTEC.js → discord-BfP_Rny5.js} +2 -2
  32. package/build/client/assets/{discord-BUWZUTEC.js.map → discord-BfP_Rny5.js.map} +1 -1
  33. package/build/client/assets/discord-DILzAZN8.js +2 -0
  34. package/build/client/assets/discord-DILzAZN8.js.map +1 -0
  35. package/build/client/assets/{entry.client-DqIWuxf8.js → entry.client-CQusg5Iz.js} +2 -2
  36. package/build/client/assets/{entry.client-DqIWuxf8.js.map → entry.client-CQusg5Iz.js.map} +1 -1
  37. package/build/client/assets/{epic-video-Bp4BOD2R.js → epic-video-qHKPWPt1.js} +130 -130
  38. package/build/client/assets/{epic-video-Bp4BOD2R.js.map → epic-video-qHKPWPt1.js.map} +1 -1
  39. package/build/client/assets/{error-boundary-BZA-ffa8.js → error-boundary-Beul7lrT.js} +2 -2
  40. package/build/client/assets/{error-boundary-BZA-ffa8.js.map → error-boundary-Beul7lrT.js.map} +1 -1
  41. package/build/client/assets/finished-DUKfL220.js +2 -0
  42. package/build/client/assets/{finished-C0cpfAFL.js.map → finished-DUKfL220.js.map} +1 -1
  43. package/build/client/assets/{index-BCTr8uu6.js → index-BHwOR8R1.js} +2 -2
  44. package/build/client/assets/{index-BCTr8uu6.js.map → index-BHwOR8R1.js.map} +1 -1
  45. package/build/client/assets/index-BOQWfIQC.js +36 -0
  46. package/build/client/assets/index-BOQWfIQC.js.map +1 -0
  47. package/build/client/assets/{index-DZDhtMuq.js → index-BPegC-d3.js} +2 -2
  48. package/build/client/assets/{index-DZDhtMuq.js.map → index-BPegC-d3.js.map} +1 -1
  49. package/build/client/assets/{index-C9Hx0Dey.js → index-CB8bjE90.js} +2 -2
  50. package/build/client/assets/{index-C9Hx0Dey.js.map → index-CB8bjE90.js.map} +1 -1
  51. package/build/client/assets/{index-BFGhCX_U.js → index-CGzylDPY.js} +2 -2
  52. package/build/client/assets/{index-BFGhCX_U.js.map → index-CGzylDPY.js.map} +1 -1
  53. package/build/client/assets/index-DbCT6N5p.js +2 -0
  54. package/build/client/assets/{index-Bi1TbRTj.js.map → index-DbCT6N5p.js.map} +1 -1
  55. package/build/client/assets/{index-pkiQppkK.js → index-cZQeGrqL.js} +2 -2
  56. package/build/client/assets/{index-pkiQppkK.js.map → index-cZQeGrqL.js.map} +1 -1
  57. package/build/client/assets/{index-BCxBKsqT.js → index-egcHQOpF.js} +2 -2
  58. package/build/client/assets/{index-BCxBKsqT.js.map → index-egcHQOpF.js.map} +1 -1
  59. package/build/client/assets/index-oED4uZLa.js +2 -0
  60. package/build/client/assets/{index-Ca4vBON4.js.map → index-oED4uZLa.js.map} +1 -1
  61. package/build/client/assets/{loading-XhMtj4mp.js → loading-C2wPVvQw.js} +2 -2
  62. package/build/client/assets/{loading-XhMtj4mp.js.map → loading-C2wPVvQw.js.map} +1 -1
  63. package/build/client/assets/login-DoU7gifi.js +2 -0
  64. package/build/client/assets/{login-C1oOgi98.js.map → login-DoU7gifi.js.map} +1 -1
  65. package/build/client/assets/manifest-93f34003.js +1 -0
  66. package/build/client/assets/mdx-CsS30JUo.js +2 -0
  67. package/build/client/assets/{mdx-CEjzXoEx.js.map → mdx-CsS30JUo.js.map} +1 -1
  68. package/build/client/assets/{misc-DUy_whwE.js → misc-BtjCSy-T.js} +2 -2
  69. package/build/client/assets/{misc-DUy_whwE.js.map → misc-BtjCSy-T.js.map} +1 -1
  70. package/build/client/assets/{nav-chevrons-DnR25VLp.js → nav-chevrons-2hLTwAZb.js} +2 -2
  71. package/build/client/assets/{nav-chevrons-DnR25VLp.js.map → nav-chevrons-2hLTwAZb.js.map} +1 -1
  72. package/build/client/assets/onboarding-Cu6eD7KS.js +2 -0
  73. package/build/client/assets/{onboarding-C2YNq60k.js.map → onboarding-Cu6eD7KS.js.map} +1 -1
  74. package/build/client/assets/{pe-ChIwTk8v.js → pe-DXT2FOp1.js} +2 -2
  75. package/build/client/assets/{pe-ChIwTk8v.js.map → pe-DXT2FOp1.js.map} +1 -1
  76. package/build/client/assets/preferences-br0VSK51.js +2 -0
  77. package/build/client/assets/preferences-br0VSK51.js.map +1 -0
  78. package/build/client/assets/{presence-8FPJKg_8.js → presence-CrYBA3ta.js} +3 -3
  79. package/build/client/assets/{presence-8FPJKg_8.js.map → presence-CrYBA3ta.js.map} +1 -1
  80. package/build/client/assets/preview-C2y4Z0qO.js +2 -0
  81. package/build/client/assets/{preview-DaZd0wMb.js.map → preview-C2y4Z0qO.js.map} +1 -1
  82. package/build/client/assets/{product-DIAmCwmZ.js → product-gqq_YQBW.js} +2 -2
  83. package/build/client/assets/{product-DIAmCwmZ.js.map → product-gqq_YQBW.js.map} +1 -1
  84. package/build/client/assets/{progress-DQt_Bn9o.js → progress-D-HsH4j3.js} +2 -2
  85. package/build/client/assets/{progress-DQt_Bn9o.js.map → progress-D-HsH4j3.js.map} +1 -1
  86. package/build/client/assets/{progress-bar-BaTU3Yx_.js → progress-bar-CTPCfvDi.js} +2 -2
  87. package/build/client/assets/{progress-bar-BaTU3Yx_.js.map → progress-bar-CTPCfvDi.js.map} +1 -1
  88. package/build/client/assets/revalidation-ws-DYaJNyw1.js +2 -0
  89. package/build/client/assets/{revalidation-ws-dUa9CAqr.js.map → revalidation-ws-DYaJNyw1.js.map} +1 -1
  90. package/build/client/assets/{root-D12XnE1S.js → root-DGY0y7_0.js} +3 -3
  91. package/build/client/assets/{root-D12XnE1S.js.map → root-DGY0y7_0.js.map} +1 -1
  92. package/build/client/assets/{set-playground-CBHBA46B.js → set-playground-DQzAhC0t.js} +2 -2
  93. package/build/client/assets/{set-playground-CBHBA46B.js.map → set-playground-DQzAhC0t.js.map} +1 -1
  94. package/build/client/assets/{support-CIz02V_r.js → support-lgEG2piy.js} +2 -2
  95. package/build/client/assets/{support-CIz02V_r.js.map → support-lgEG2piy.js.map} +1 -1
  96. package/build/client/assets/tailwind-CRGTilRc.css +1 -0
  97. package/build/client/assets/test-CDWRwwO-.js +2 -0
  98. package/build/client/assets/{test-DoKJvNug.js.map → test-CDWRwwO-.js.map} +1 -1
  99. package/build/client/assets/{tests-DbuyD2cI.js → tests-LWW8wCYZ.js} +3 -3
  100. package/build/client/assets/{tests-DbuyD2cI.js.map → tests-LWW8wCYZ.js.map} +1 -1
  101. package/build/client/assets/{tooltip-DO9uwurQ.js → tooltip-Bp9KHnLy.js} +2 -2
  102. package/build/client/assets/{tooltip-DO9uwurQ.js.map → tooltip-Bp9KHnLy.js.map} +1 -1
  103. package/build/client/assets/{use-event-source-x59d4R2Z.js → use-event-source-AZJtQsFX.js} +2 -2
  104. package/build/client/assets/{use-event-source-x59d4R2Z.js.map → use-event-source-AZJtQsFX.js.map} +1 -1
  105. package/build/client/assets/{user-Bv6wYhQP.js → user-C0j04V55.js} +2 -2
  106. package/build/client/assets/{user-Bv6wYhQP.js.map → user-C0j04V55.js.map} +1 -1
  107. package/build/client/assets/{version-lxUUxt3s.js → version-D61Qvt0X.js} +2 -2
  108. package/build/client/assets/{version-lxUUxt3s.js.map → version-D61Qvt0X.js.map} +1 -1
  109. package/build/client/assets/{workshop-config-WVltG_BV.js → workshop-config-oL_FWDKq.js} +2 -2
  110. package/build/client/assets/{workshop-config-WVltG_BV.js.map → workshop-config-oL_FWDKq.js.map} +1 -1
  111. package/build/server/index.js +308 -148
  112. package/build/server/index.js.map +1 -1
  113. package/package.json +8 -8
  114. package/build/client/assets/_exerciseNumber-DCSM0NCG.js +0 -2
  115. package/build/client/assets/_exerciseNumber_.finished-nbpk1ToO.js +0 -2
  116. package/build/client/assets/_layout-DTAM9xh5.js +0 -2
  117. package/build/client/assets/account-DPP4rKOb.js +0 -2
  118. package/build/client/assets/account-DPP4rKOb.js.map +0 -1
  119. package/build/client/assets/app-DgTXXO8s.js +0 -2
  120. package/build/client/assets/diff-BhRAIPKc.js +0 -2
  121. package/build/client/assets/discord-Bdnx7fu-.js +0 -2
  122. package/build/client/assets/discord-Bdnx7fu-.js.map +0 -1
  123. package/build/client/assets/finished-C0cpfAFL.js +0 -2
  124. package/build/client/assets/index-Bdg3v8tC.js +0 -36
  125. package/build/client/assets/index-Bdg3v8tC.js.map +0 -1
  126. package/build/client/assets/index-Bi1TbRTj.js +0 -2
  127. package/build/client/assets/index-Ca4vBON4.js +0 -2
  128. package/build/client/assets/login-C1oOgi98.js +0 -2
  129. package/build/client/assets/manifest-a8336fab.js +0 -1
  130. package/build/client/assets/mdx-CEjzXoEx.js +0 -2
  131. package/build/client/assets/onboarding-C2YNq60k.js +0 -2
  132. package/build/client/assets/preview-DaZd0wMb.js +0 -2
  133. package/build/client/assets/request-info-ByUEfOil.js +0 -2
  134. package/build/client/assets/request-info-ByUEfOil.js.map +0 -1
  135. package/build/client/assets/revalidation-ws-dUa9CAqr.js +0 -2
  136. package/build/client/assets/tailwind-B5AAMtGC.css +0 -1
  137. package/build/client/assets/test-DoKJvNug.js +0 -2
@@ -7,7 +7,7 @@ import { renderToPipeableStream, renderToStaticMarkup } from "react-dom/server";
7
7
  import path from "node:path";
8
8
  import { makeSingletonCache, cachified, deleteCache, compiledCodeCache, diffFilesCache, diffCodeCache, shouldForceFresh, fsCache, getAllFileCacheEntries, ogCache } from "@epic-web/workshop-utils/cache.server";
9
9
  import { getWorkshopConfig } from "@epic-web/workshop-utils/config.server";
10
- import { getAuthInfo, getPreferences, readOnboardingData, requireAuthInfo, deleteDb, setPresencePreferences, PlayerPreferencesSchema, setPlayerPreferences, setAuthInfo, markOnboardingVideoWatched } from "@epic-web/workshop-utils/db.server";
10
+ import { getAuthInfo, getPreferences, readOnboardingData, requireAuthInfo, deleteDb, setPreferences, PlayerPreferencesSchema, setAuthInfo, markOnboardingVideoWatched } from "@epic-web/workshop-utils/db.server";
11
11
  import { getUserInfo, userHasAccessToWorkshop, getProgress, updateProgress, getEpicVideoInfos } from "@epic-web/workshop-utils/epic-api.server";
12
12
  import { getUserId, getSetClientIdCookieHeader } from "@epic-web/workshop-utils/user.server";
13
13
  import { z } from "zod";
@@ -49,7 +49,7 @@ import fs from "fs";
49
49
  import { getDirModifiedTime, modifiedMoreRecentlyThan } from "@epic-web/workshop-utils/modified-time.server";
50
50
  import * as esbuild from "esbuild";
51
51
  import { ElementScrollRestoration } from "@epic-web/restore-scroll";
52
- import RealMuxPlayer from "@mux/mux-player-react";
52
+ import RealMuxPlayer, { MinResolution, MaxResolution } from "@mux/mux-player-react";
53
53
  import child_process from "child_process";
54
54
  import os from "os";
55
55
  import shellQuote from "shell-quote";
@@ -437,6 +437,12 @@ const extendedTheme = {
437
437
  h5: ["1.5rem", { lineHeight: "2rem", fontWeight: "700" }],
438
438
  /** 16px size / 20px high / bold */
439
439
  h6: ["1rem", { lineHeight: "1.25rem", fontWeight: "700" }],
440
+ /** 48px size / 52px high / normal */
441
+ "body-5xl": ["3rem", { lineHeight: "3.25rem" }],
442
+ /** 40px size / 44px high / normal */
443
+ "body-4xl": ["2.5rem", { lineHeight: "2.75rem" }],
444
+ /** 36px size / 40px high / normal */
445
+ "body-3xl": ["2.25rem", { lineHeight: "2.5rem" }],
440
446
  /** 32px size / 36px high / normal */
441
447
  "body-2xl": ["2rem", { lineHeight: "2.25rem" }],
442
448
  /** 28px size / 36px high / normal */
@@ -845,7 +851,7 @@ const ROUTE_PATH = "/theme";
845
851
  const ThemeFormSchema = z.object({
846
852
  theme: z.enum(["system", "light", "dark"])
847
853
  });
848
- async function action$b({ request }) {
854
+ async function action$c({ request }) {
849
855
  const formData = await request.formData();
850
856
  const submission = parseWithZod(formData, {
851
857
  schema: ThemeFormSchema
@@ -915,14 +921,14 @@ function useTheme() {
915
921
  }
916
922
  return requestInfo.session.theme ?? hints.theme;
917
923
  }
918
- const route44 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
924
+ const route45 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
919
925
  __proto__: null,
920
926
  ThemeSwitch,
921
- action: action$b,
927
+ action: action$c,
922
928
  useTheme
923
929
  }, Symbol.toStringTag, { value: "Module" }));
924
930
  const appStylesheetUrl = "/assets/app-b7uXHF5m.css";
925
- const tailwindStylesheetUrl = "/assets/tailwind-B5AAMtGC.css";
931
+ const tailwindStylesheetUrl = "/assets/tailwind-CRGTilRc.css";
926
932
  const cookieName = "EpicShop_confetti";
927
933
  function getConfetti(request) {
928
934
  const cookieHeader = request.headers.get("cookie");
@@ -1189,7 +1195,7 @@ const meta$6 = ({ data: data2 }) => {
1189
1195
  requestInfo: data2.requestInfo
1190
1196
  });
1191
1197
  };
1192
- async function loader$x({ request }) {
1198
+ async function loader$y({ request }) {
1193
1199
  var _a;
1194
1200
  const timings = makeTimings("rootLoader");
1195
1201
  const workshopConfig = getWorkshopConfig();
@@ -1267,9 +1273,10 @@ async function loader$x({ request }) {
1267
1273
  function Document({
1268
1274
  children,
1269
1275
  env = {},
1270
- className
1276
+ className,
1277
+ style
1271
1278
  }) {
1272
- return /* @__PURE__ */ jsxs("html", { lang: "en", className, children: [
1279
+ return /* @__PURE__ */ jsxs("html", { lang: "en", className, style, children: [
1273
1280
  /* @__PURE__ */ jsxs("head", { children: [
1274
1281
  /* @__PURE__ */ jsx(ClientHintCheck, {}),
1275
1282
  /* @__PURE__ */ jsx(Meta, {}),
@@ -1293,6 +1300,7 @@ function Document({
1293
1300
  ] });
1294
1301
  }
1295
1302
  function App$1() {
1303
+ var _a, _b;
1296
1304
  const data2 = useLoaderData();
1297
1305
  const navigation = useNavigation();
1298
1306
  const showSpinner = useSpinDelay(navigation.state !== "idle", {
@@ -1304,6 +1312,7 @@ function App$1() {
1304
1312
  return /* @__PURE__ */ jsxs(
1305
1313
  Document,
1306
1314
  {
1315
+ style: ((_a = data2.preferences) == null ? void 0 : _a.fontSize) ? { fontSize: `${(_b = data2.preferences) == null ? void 0 : _b.fontSize}px` } : {},
1307
1316
  className: cn(
1308
1317
  "antialiased h-screen-safe",
1309
1318
  theme,
@@ -1332,10 +1341,10 @@ const route0 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProper
1332
1341
  ErrorBoundary: ErrorBoundary$6,
1333
1342
  default: AppWithProviders,
1334
1343
  links,
1335
- loader: loader$x,
1344
+ loader: loader$y,
1336
1345
  meta: meta$6
1337
1346
  }, Symbol.toStringTag, { value: "Module" }));
1338
- async function loader$w({ params }) {
1347
+ async function loader$x({ params }) {
1339
1348
  const splat = params["*"];
1340
1349
  const segments = (splat == null ? void 0 : splat.split("/")) ?? [];
1341
1350
  if (segments.length > 0 && !isNaN(Number(segments[0]))) {
@@ -1373,7 +1382,7 @@ const route1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProper
1373
1382
  __proto__: null,
1374
1383
  ErrorBoundary: ErrorBoundary$5,
1375
1384
  default: NotFound,
1376
- loader: loader$w
1385
+ loader: loader$x
1377
1386
  }, Symbol.toStringTag, { value: "Module" }));
1378
1387
  function makeMediaQueryStore(mediaQuery, serverSnapshot) {
1379
1388
  function getSnapshot() {
@@ -1744,7 +1753,7 @@ function useProgressItem({
1744
1753
  }
1745
1754
  return null;
1746
1755
  }
1747
- async function action$a({ request }) {
1756
+ async function action$b({ request }) {
1748
1757
  ensureUndeployed();
1749
1758
  await requireAuthInfo({ request });
1750
1759
  const formData = await request.formData();
@@ -1912,10 +1921,10 @@ function ProgressToggle({
1912
1921
  )
1913
1922
  ] });
1914
1923
  }
1915
- const route38 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
1924
+ const route39 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
1916
1925
  __proto__: null,
1917
1926
  ProgressToggle,
1918
- action: action$a,
1927
+ action: action$b,
1919
1928
  useEpicProgress,
1920
1929
  useExerciseProgressClassName,
1921
1930
  useNextExerciseRoute,
@@ -1923,7 +1932,7 @@ const route38 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
1923
1932
  useProgressItemClassName,
1924
1933
  useRequireEpicProgress
1925
1934
  }, Symbol.toStringTag, { value: "Module" }));
1926
- async function loader$v({ request }) {
1935
+ async function loader$w({ request }) {
1927
1936
  var _a, _b;
1928
1937
  const timings = makeTimings("appLayoutLoader");
1929
1938
  const { title: workshopTitle } = getWorkshopConfig();
@@ -3021,7 +3030,7 @@ const route2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProper
3021
3030
  __proto__: null,
3022
3031
  default: App,
3023
3032
  headers: headers$b,
3024
- loader: loader$v
3033
+ loader: loader$w
3025
3034
  }, Symbol.toStringTag, { value: "Module" }));
3026
3035
  function PendingState() {
3027
3036
  return /* @__PURE__ */ jsx("span", { className: "inline-block animate-spin", children: "🌀" });
@@ -3090,12 +3099,12 @@ function ButtonLink({
3090
3099
  const handle$9 = {
3091
3100
  getSitemapEntries: () => null
3092
3101
  };
3093
- async function loader$u({ request }) {
3102
+ async function loader$v({ request }) {
3094
3103
  ensureUndeployed();
3095
3104
  await requireAuthInfo({ request });
3096
3105
  return {};
3097
3106
  }
3098
- async function action$9({ request }) {
3107
+ async function action$a({ request }) {
3099
3108
  ensureUndeployed();
3100
3109
  const formData = await request.formData();
3101
3110
  const intent = formData.get("intent");
@@ -3109,7 +3118,7 @@ async function action$9({ request }) {
3109
3118
  });
3110
3119
  } else if (intent === "presence-opt-out") {
3111
3120
  const optOut = formData.get("optOut") === "true";
3112
- await setPresencePreferences({ optOut });
3121
+ await setPreferences({ presence: { optOut } });
3113
3122
  return redirectWithToast("/account", {
3114
3123
  title: optOut ? "Opted out" : "Opted in",
3115
3124
  description: `You are now ${optOut ? "invisible" : "visible"}.`,
@@ -3126,8 +3135,8 @@ function useConnectDiscordURL$1() {
3126
3135
  }
3127
3136
  function Account() {
3128
3137
  const user = useUser();
3138
+ const config = useWorkshopConfig();
3129
3139
  const discordMember = useOptionalDiscordMember();
3130
- const presencePreferences = usePresencePreferences();
3131
3140
  const connectDiscordURL = useConnectDiscordURL$1();
3132
3141
  return /* @__PURE__ */ jsxs("main", { className: "container flex h-full w-full max-w-3xl flex-grow flex-col items-center justify-center gap-4", children: [
3133
3142
  user.imageUrlLarge ? /* @__PURE__ */ jsx(
@@ -3168,23 +3177,6 @@ function Account() {
3168
3177
  ),
3169
3178
  /* @__PURE__ */ jsx(SimpleTooltip, { content: "This will give you access to the exclusive Discord channels for Epic Web", children: /* @__PURE__ */ jsx(Icon, { name: "Question", tabIndex: 0 }) })
3170
3179
  ] }),
3171
- /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
3172
- /* @__PURE__ */ jsxs(Form, { method: "POST", children: [
3173
- /* @__PURE__ */ jsx(
3174
- "input",
3175
- {
3176
- name: "optOut",
3177
- type: "hidden",
3178
- value: (presencePreferences == null ? void 0 : presencePreferences.optOut) ? "false" : "true"
3179
- }
3180
- ),
3181
- /* @__PURE__ */ jsxs(Button, { varient: "mono", name: "intent", value: "presence-opt-out", children: [
3182
- (presencePreferences == null ? void 0 : presencePreferences.optOut) ? "Opt in to" : "Opt out of",
3183
- " presence"
3184
- ] })
3185
- ] }),
3186
- /* @__PURE__ */ jsx(SimpleTooltip, { content: "This controls whether your name and avatar are displayed in the pile of faces in navigation", children: /* @__PURE__ */ jsx(Icon, { name: "Question", tabIndex: 0 }) })
3187
- ] }),
3188
3180
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
3189
3181
  /* @__PURE__ */ jsx(Form, { method: "post", children: /* @__PURE__ */ jsx(Button, { varient: "mono", name: "intent", value: "logout", children: "Log device out" }) }),
3190
3182
  /* @__PURE__ */ jsx(
@@ -3201,28 +3193,31 @@ function Account() {
3201
3193
  }
3202
3194
  )
3203
3195
  ] }),
3204
- /* @__PURE__ */ jsxs("p", { children: [
3205
- "Check",
3206
- " ",
3207
- /* @__PURE__ */ jsx(Link, { to: "/onboarding", className: "underline", children: "/onboarding" }),
3208
- " ",
3209
- "if you'd like to review onboarding again."
3210
- ] }),
3211
- /* @__PURE__ */ jsxs("p", { children: [
3212
- "Check",
3213
- " ",
3214
- /* @__PURE__ */ jsx(Link, { to: "/support", className: "underline", children: "/support" }),
3215
- " ",
3216
- "if you need support."
3196
+ /* @__PURE__ */ jsx("hr", { className: "w-full" }),
3197
+ /* @__PURE__ */ jsxs("ul", { className: "flex list-inside list-disc flex-col gap-2 self-start", children: [
3198
+ /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsxs(
3199
+ Link,
3200
+ {
3201
+ to: `https://${config.product.host}/profile`,
3202
+ className: "inline-flex gap-1 underline",
3203
+ children: [
3204
+ /* @__PURE__ */ jsx("span", { children: "Manage your account" }),
3205
+ /* @__PURE__ */ jsx(Icon, { name: "ExternalLink" })
3206
+ ]
3207
+ }
3208
+ ) }),
3209
+ /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(Link, { to: "/preferences", className: "underline", children: "Manage your preferences" }) }),
3210
+ /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(Link, { to: "/onboarding", className: "underline", children: "Review onboarding" }) }),
3211
+ /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(Link, { to: "/support", className: "underline", children: "Get support" }) })
3217
3212
  ] })
3218
3213
  ] });
3219
3214
  }
3220
3215
  const route3 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
3221
3216
  __proto__: null,
3222
- action: action$9,
3217
+ action: action$a,
3223
3218
  default: Account,
3224
3219
  handle: handle$9,
3225
- loader: loader$u
3220
+ loader: loader$v
3226
3221
  }, Symbol.toStringTag, { value: "Module" }));
3227
3222
  async function getForceFresh(filePath, cacheEntry) {
3228
3223
  if (!cacheEntry) return true;
@@ -3312,7 +3307,7 @@ async function firstExisting(...files) {
3312
3307
  }
3313
3308
  return null;
3314
3309
  }
3315
- async function loader$t({ request, params }) {
3310
+ async function loader$u({ request, params }) {
3316
3311
  const timings = makeTimings("app-file");
3317
3312
  const { fileApp, app } = await resolveApps({ request, params, timings });
3318
3313
  if (!fileApp || !app) {
@@ -3370,9 +3365,9 @@ async function loader$t({ request, params }) {
3370
3365
  }
3371
3366
  const route4 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
3372
3367
  __proto__: null,
3373
- loader: loader$t
3368
+ loader: loader$u
3374
3369
  }, Symbol.toStringTag, { value: "Module" }));
3375
- async function loader$s(args) {
3370
+ async function loader$t(args) {
3376
3371
  const api = await getApiModule(args);
3377
3372
  invariantResponse(
3378
3373
  api.mod.loader,
@@ -3386,7 +3381,7 @@ async function loader$s(args) {
3386
3381
  api.cleanupError(error);
3387
3382
  }
3388
3383
  }
3389
- async function action$8(args) {
3384
+ async function action$9(args) {
3390
3385
  const api = await getApiModule(args);
3391
3386
  invariantResponse(
3392
3387
  api.mod.action,
@@ -3474,10 +3469,10 @@ async function getApiModule({ request, params }) {
3474
3469
  }
3475
3470
  const route5 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
3476
3471
  __proto__: null,
3477
- action: action$8,
3478
- loader: loader$s
3472
+ action: action$9,
3473
+ loader: loader$t
3479
3474
  }, Symbol.toStringTag, { value: "Module" }));
3480
- async function loader$r({ request, params }) {
3475
+ async function loader$s({ request, params }) {
3481
3476
  const timings = makeTimings("epic_ws script");
3482
3477
  const { fileApp, app } = await resolveApps({ request, params, timings });
3483
3478
  if (!fileApp || !app) {
@@ -3546,9 +3541,9 @@ async function loader$r({ request, params }) {
3546
3541
  }
3547
3542
  const route6 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
3548
3543
  __proto__: null,
3549
- loader: loader$r
3544
+ loader: loader$s
3550
3545
  }, Symbol.toStringTag, { value: "Module" }));
3551
- async function loader$q({ request, params }) {
3546
+ async function loader$r({ request, params }) {
3552
3547
  var _a;
3553
3548
  const timings = makeTimings("app");
3554
3549
  const { fileApp, app } = await resolveApps({ request, params, timings });
@@ -3634,9 +3629,9 @@ async function loader$q({ request, params }) {
3634
3629
  }
3635
3630
  const route7 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
3636
3631
  __proto__: null,
3637
- loader: loader$q
3632
+ loader: loader$r
3638
3633
  }, Symbol.toStringTag, { value: "Module" }));
3639
- async function loader$p({ request, params }) {
3634
+ async function loader$q({ request, params }) {
3640
3635
  var _a;
3641
3636
  const timings = makeTimings("app_test_loader");
3642
3637
  const userHasAccess = await userHasAccessToWorkshop({
@@ -3773,15 +3768,15 @@ ${testScriptTag}`;
3773
3768
  }
3774
3769
  const route8 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
3775
3770
  __proto__: null,
3776
- loader: loader$p
3771
+ loader: loader$q
3777
3772
  }, Symbol.toStringTag, { value: "Module" }));
3778
3773
  const route9 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
3779
3774
  __proto__: null,
3780
- loader: loader$r
3775
+ loader: loader$s
3781
3776
  }, Symbol.toStringTag, { value: "Module" }));
3782
3777
  const route10 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
3783
3778
  __proto__: null,
3784
- loader: loader$r
3779
+ loader: loader$s
3785
3780
  }, Symbol.toStringTag, { value: "Module" }));
3786
3781
  const handle$8 = {
3787
3782
  getSitemapEntries: () => null
@@ -3956,14 +3951,14 @@ function shouldIgnoreHotkey(el) {
3956
3951
  }
3957
3952
  return false;
3958
3953
  }
3959
- async function action$7({ request }) {
3954
+ async function action$8({ request }) {
3960
3955
  const result = PlayerPreferencesSchema.safeParse(await request.json());
3961
3956
  if (!result.success) {
3962
3957
  return unstable_data$1({ status: "error", error: result.error.flatten() }, {
3963
3958
  status: 400
3964
3959
  });
3965
3960
  }
3966
- await setPlayerPreferences(result.data);
3961
+ await setPreferences({ player: result.data });
3967
3962
  return { status: "success" };
3968
3963
  }
3969
3964
  function useLatest(value) {
@@ -4099,6 +4094,8 @@ function MuxPlayer({
4099
4094
  accentColor: "#427cf0",
4100
4095
  targetLiveWindow: NaN,
4101
4096
  onLoadedMetadata: () => setMetadataLoaded(true),
4097
+ minResolution: getMinResolutionValue(playerPreferences == null ? void 0 : playerPreferences.minResolution),
4098
+ maxResolution: getMaxResolutionValue(playerPreferences == null ? void 0 : playerPreferences.maxResolution),
4102
4099
  ...props
4103
4100
  }
4104
4101
  ) });
@@ -4124,10 +4121,26 @@ function isDeepEqual(obj1, obj2) {
4124
4121
  }
4125
4122
  return true;
4126
4123
  }
4127
- const route45 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
4124
+ function getMinResolutionValue(resolution) {
4125
+ if (!resolution) return void 0;
4126
+ if (resolution <= 480) return MinResolution.noLessThan480p;
4127
+ if (resolution <= 540) return MinResolution.noLessThan540p;
4128
+ if (resolution <= 720) return MinResolution.noLessThan720p;
4129
+ if (resolution <= 1080) return MinResolution.noLessThan1080p;
4130
+ if (resolution <= 1440) return MinResolution.noLessThan1440p;
4131
+ return MinResolution.noLessThan2160p;
4132
+ }
4133
+ function getMaxResolutionValue(resolution) {
4134
+ if (!resolution) return void 0;
4135
+ if (resolution <= 720) return MaxResolution.upTo720p;
4136
+ if (resolution <= 1080) return MaxResolution.upTo1080p;
4137
+ if (resolution <= 1440) return MaxResolution.upTo1440p;
4138
+ return MaxResolution.upTo2160p;
4139
+ }
4140
+ const route46 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
4128
4141
  __proto__: null,
4129
4142
  MuxPlayer,
4130
- action: action$7,
4143
+ action: action$8,
4131
4144
  usePlayerPreferences
4132
4145
  }, Symbol.toStringTag, { value: "Module" }));
4133
4146
  function Loading({
@@ -4971,7 +4984,7 @@ const LaunchSchema = z.intersection(
4971
4984
  }),
4972
4985
  getFileDescriptorSchema(z.array(z.string()))
4973
4986
  );
4974
- async function action$6({ request }) {
4987
+ async function action$7({ request }) {
4975
4988
  ensureUndeployed();
4976
4989
  const formData = await request.formData();
4977
4990
  const syncTo = {
@@ -5218,11 +5231,11 @@ function EditFileOnGitHub({
5218
5231
  );
5219
5232
  }
5220
5233
  const LaunchEditor = ENV.EPICSHOP_DEPLOYED ? LaunchGitHub : LaunchEditorImpl;
5221
- const route33 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
5234
+ const route34 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
5222
5235
  __proto__: null,
5223
5236
  EditFileOnGitHub,
5224
5237
  LaunchEditor,
5225
- action: action$6
5238
+ action: action$7
5226
5239
  }, Symbol.toStringTag, { value: "Module" }));
5227
5240
  const safePath = (s) => s.replace(/\\/g, "/");
5228
5241
  function getRelativePath(file, separator, type) {
@@ -5419,7 +5432,7 @@ const meta$5 = ({
5419
5432
  requestInfo: rootData.requestInfo
5420
5433
  });
5421
5434
  };
5422
- async function loader$o({ request, params }) {
5435
+ async function loader$p({ request, params }) {
5423
5436
  const timings = makeTimings("exerciseNumberLoader");
5424
5437
  invariantResponse(params.exerciseNumber, "exerciseNumber is required");
5425
5438
  const { title: workshopTitle } = getWorkshopConfig();
@@ -5562,10 +5575,10 @@ const route13 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
5562
5575
  ErrorBoundary: ErrorBoundary$4,
5563
5576
  default: ExerciseNumberRoute,
5564
5577
  headers: headers$a,
5565
- loader: loader$o,
5578
+ loader: loader$p,
5566
5579
  meta: meta$5
5567
5580
  }, Symbol.toStringTag, { value: "Module" }));
5568
- async function loader$n({ request, params }) {
5581
+ async function loader$o({ request, params }) {
5569
5582
  const timings = makeTimings("stepLoader");
5570
5583
  invariantResponse(params.exerciseNumber, "exerciseNumber is required");
5571
5584
  const exercises = await getExercises({ request, timings });
@@ -5620,7 +5633,7 @@ const route14 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
5620
5633
  ErrorBoundary: ErrorBoundary$3,
5621
5634
  default: StepRoute,
5622
5635
  headers: headers$9,
5623
- loader: loader$n
5636
+ loader: loader$o
5624
5637
  }, Symbol.toStringTag, { value: "Module" }));
5625
5638
  function NavChevrons({
5626
5639
  prev,
@@ -6071,7 +6084,7 @@ const SetPlaygroundSchema = z.object({
6071
6084
  appName: z.string(),
6072
6085
  reset: z.string().nullable().optional().transform((v) => v === "true")
6073
6086
  });
6074
- async function action$5({ request }) {
6087
+ async function action$6({ request }) {
6075
6088
  ensureUndeployed();
6076
6089
  const formData = await request.formData();
6077
6090
  const rawData = {
@@ -6246,12 +6259,12 @@ function SetAppToPlayground({ appName }) {
6246
6259
  }
6247
6260
  );
6248
6261
  }
6249
- const route40 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
6262
+ const route41 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
6250
6263
  __proto__: null,
6251
6264
  PlaygroundChooser,
6252
6265
  SetAppToPlayground,
6253
6266
  SetPlayground,
6254
- action: action$5
6267
+ action: action$6
6255
6268
  }, Symbol.toStringTag, { value: "Module" }));
6256
6269
  const StepContext = React.createContext(null);
6257
6270
  function useStepContext() {
@@ -6592,7 +6605,7 @@ const meta$4 = ({
6592
6605
  requestInfo: rootData.requestInfo
6593
6606
  });
6594
6607
  };
6595
- async function loader$m({ request, params }) {
6608
+ async function loader$n({ request, params }) {
6596
6609
  var _a, _b;
6597
6610
  const timings = makeTimings("exerciseStepTypeLayoutLoader");
6598
6611
  const url = new URL(request.url);
@@ -6854,10 +6867,10 @@ const route15 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
6854
6867
  ErrorBoundary: ErrorBoundary$2,
6855
6868
  default: ExercisePartRoute$1,
6856
6869
  headers: headers$8,
6857
- loader: loader$m,
6870
+ loader: loader$n,
6858
6871
  meta: meta$4
6859
6872
  }, Symbol.toStringTag, { value: "Module" }));
6860
- async function action$4({ request }) {
6873
+ async function action$5({ request }) {
6861
6874
  ensureUndeployed();
6862
6875
  const formData = await request.formData();
6863
6876
  const intent = formData.get("intent");
@@ -6994,12 +7007,12 @@ function AppStarter({ name }) {
6994
7007
  fetcher.state === "idle" ? /* @__PURE__ */ jsx(Button, { type: "submit", name: "intent", value: "start", varient: "mono", children: "Start App" }) : /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(Loading, { children: "Starting App" }) })
6995
7008
  ] });
6996
7009
  }
6997
- const route42 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
7010
+ const route43 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
6998
7011
  __proto__: null,
6999
7012
  AppStarter,
7000
7013
  AppStopper,
7001
7014
  PortStopper,
7002
- action: action$4
7015
+ action: action$5
7003
7016
  }, Symbol.toStringTag, { value: "Module" }));
7004
7017
  const historyCallDataSchema = z.intersection(
7005
7018
  z.object({
@@ -7457,7 +7470,7 @@ async function getAppRunningState(a) {
7457
7470
  const portIsAvailable = isRunning ? null : await isPortAvailable(a.dev.portNumber);
7458
7471
  return { isRunning, portIsAvailable };
7459
7472
  }
7460
- async function loader$l({ request, params }) {
7473
+ async function loader$m({ request, params }) {
7461
7474
  const timings = makeTimings("exercise-step-test");
7462
7475
  const exerciseStepApp = await requireExerciseApp(params, { request, timings });
7463
7476
  const { isRunning, portIsAvailable } = await getAppRunningState(exerciseStepApp);
@@ -7497,7 +7510,7 @@ const route16 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
7497
7510
  __proto__: null,
7498
7511
  default: TestsList$1,
7499
7512
  headers: headers$7,
7500
- loader: loader$l
7513
+ loader: loader$m
7501
7514
  }, Symbol.toStringTag, { value: "Module" }));
7502
7515
  const AccordionComponent = ({
7503
7516
  title,
@@ -8373,7 +8386,7 @@ const testEventSchema = z.union([
8373
8386
  })
8374
8387
  ]);
8375
8388
  const testEventQueueSchema = z.array(testEventSchema);
8376
- async function loader$k({ request }) {
8389
+ async function loader$l({ request }) {
8377
8390
  ensureUndeployed();
8378
8391
  const url = new URL(request.url);
8379
8392
  const name = url.searchParams.get("name");
@@ -8449,7 +8462,7 @@ async function loader$k({ request }) {
8449
8462
  };
8450
8463
  });
8451
8464
  }
8452
- async function action$3({ request }) {
8465
+ async function action$4({ request }) {
8453
8466
  var _a;
8454
8467
  ensureUndeployed();
8455
8468
  const formData = await request.formData();
@@ -8722,14 +8735,14 @@ function StopTest({
8722
8735
  )
8723
8736
  ] });
8724
8737
  }
8725
- const route43 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
8738
+ const route44 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
8726
8739
  __proto__: null,
8727
8740
  ClearTest,
8728
8741
  StopTest,
8729
8742
  TestOutput,
8730
8743
  TestRunner,
8731
- action: action$3,
8732
- loader: loader$k
8744
+ action: action$4,
8745
+ loader: loader$l
8733
8746
  }, Symbol.toStringTag, { value: "Module" }));
8734
8747
  function Tests({
8735
8748
  appInfo: playgroundAppInfo,
@@ -8796,7 +8809,7 @@ function TestUI({
8796
8809
  }
8797
8810
  return /* @__PURE__ */ jsx("div", { className: "flex h-full items-center justify-center text-lg", children: /* @__PURE__ */ jsx("p", { children: "No tests here 😢 Sorry." }) });
8798
8811
  }
8799
- async function loader$j({ request, params }) {
8812
+ async function loader$k({ request, params }) {
8800
8813
  const timings = makeTimings("exerciseStepTypeIndexLoader");
8801
8814
  const userHasAccess = await userHasAccessToWorkshop({
8802
8815
  request,
@@ -9116,9 +9129,9 @@ const route17 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
9116
9129
  ErrorBoundary: ErrorBoundary$1,
9117
9130
  default: ExercisePartRoute,
9118
9131
  headers: headers$6,
9119
- loader: loader$j
9132
+ loader: loader$k
9120
9133
  }, Symbol.toStringTag, { value: "Module" }));
9121
- async function loader$i({ request, params }) {
9134
+ async function loader$j({ request, params }) {
9122
9135
  const timings = makeTimings("exercise-step-test");
9123
9136
  const exerciseStepApp = await requireExerciseApp(params, { request, timings });
9124
9137
  return unstable_data$1(
@@ -9150,9 +9163,9 @@ const route18 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
9150
9163
  __proto__: null,
9151
9164
  default: TestsList,
9152
9165
  headers: headers$5,
9153
- loader: loader$i
9166
+ loader: loader$j
9154
9167
  }, Symbol.toStringTag, { value: "Module" }));
9155
- async function loader$h({ params }) {
9168
+ async function loader$i({ params }) {
9156
9169
  const problemApp = await getExerciseApp({ ...params, type: "problem" }).then(
9157
9170
  (a) => isProblemApp(a) ? a : null
9158
9171
  );
@@ -9174,7 +9187,7 @@ async function loader$h({ params }) {
9174
9187
  }
9175
9188
  const route19 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
9176
9189
  __proto__: null,
9177
- loader: loader$h
9190
+ loader: loader$i
9178
9191
  }, Symbol.toStringTag, { value: "Module" }));
9179
9192
  const meta$3 = ({
9180
9193
  data: data2,
@@ -9193,7 +9206,7 @@ const meta$3 = ({
9193
9206
  requestInfo: rootData.requestInfo
9194
9207
  });
9195
9208
  };
9196
- async function loader$g({ request, params }) {
9209
+ async function loader$h({ request, params }) {
9197
9210
  const timings = makeTimings("exerciseFinishedLoader");
9198
9211
  invariantResponse(params.exerciseNumber, "exerciseNumber is required");
9199
9212
  const exercise = await getExercise(params.exerciseNumber, {
@@ -9357,7 +9370,7 @@ const route20 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
9357
9370
  __proto__: null,
9358
9371
  default: ExerciseFinished$1,
9359
9372
  headers: headers$4,
9360
- loader: loader$g,
9373
+ loader: loader$h,
9361
9374
  meta: meta$3
9362
9375
  }, Symbol.toStringTag, { value: "Module" }));
9363
9376
  const handle$6 = {
@@ -9378,7 +9391,7 @@ const meta$2 = ({
9378
9391
  requestInfo: rootData.requestInfo
9379
9392
  });
9380
9393
  };
9381
- async function loader$f({ request }) {
9394
+ async function loader$g({ request }) {
9382
9395
  const timings = makeTimings("finishedLoader");
9383
9396
  const exercises = await getExercises({ request, timings });
9384
9397
  const compiledFinished = await time(() => getWorkshopFinished({ request }), {
@@ -9514,10 +9527,10 @@ const route21 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
9514
9527
  default: ExerciseFinished,
9515
9528
  handle: handle$6,
9516
9529
  headers: headers$3,
9517
- loader: loader$f,
9530
+ loader: loader$g,
9518
9531
  meta: meta$2
9519
9532
  }, Symbol.toStringTag, { value: "Module" }));
9520
- async function loader$e({ request }) {
9533
+ async function loader$f({ request }) {
9521
9534
  const timings = makeTimings("indexLoader");
9522
9535
  const { title } = getWorkshopConfig();
9523
9536
  const [exercises, workshopReadme] = await Promise.all([
@@ -9643,7 +9656,7 @@ const route22 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
9643
9656
  ErrorBoundary,
9644
9657
  default: Index,
9645
9658
  headers: headers$2,
9646
- loader: loader$e
9659
+ loader: loader$f
9647
9660
  }, Symbol.toStringTag, { value: "Module" }));
9648
9661
  const EVENTS = {
9649
9662
  USER_CODE_RECEIVED: "USER_CODE_RECEIVED",
@@ -9721,7 +9734,7 @@ const EventSchema = z.union([
9721
9734
  AuthResolvedEventSchema,
9722
9735
  AuthRejectedEventSchema
9723
9736
  ]);
9724
- async function loader$d({ request }) {
9737
+ async function loader$e({ request }) {
9725
9738
  ensureUndeployed();
9726
9739
  return eventStream(request.signal, function setup(send) {
9727
9740
  function handleCodeReceived(data) {
@@ -9755,21 +9768,21 @@ async function loader$d({ request }) {
9755
9768
  };
9756
9769
  });
9757
9770
  }
9758
- const route34 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
9771
+ const route35 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
9759
9772
  __proto__: null,
9760
9773
  EventSchema,
9761
- loader: loader$d
9774
+ loader: loader$e
9762
9775
  }, Symbol.toStringTag, { value: "Module" }));
9763
9776
  const handle$5 = {
9764
9777
  getSitemapEntries: () => null
9765
9778
  };
9766
- async function loader$c() {
9779
+ async function loader$d() {
9767
9780
  ensureUndeployed();
9768
9781
  const isAuthenticated = Boolean(await getAuthInfo());
9769
9782
  if (isAuthenticated) throw redirect$1("/account");
9770
9783
  return {};
9771
9784
  }
9772
- async function action$2() {
9785
+ async function action$3() {
9773
9786
  ensureUndeployed();
9774
9787
  void registerDevice();
9775
9788
  return { status: "pending" };
@@ -9880,9 +9893,148 @@ function Login() {
9880
9893
  }
9881
9894
  const route23 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
9882
9895
  __proto__: null,
9883
- action: action$2,
9896
+ action: action$3,
9884
9897
  default: Login,
9885
9898
  handle: handle$5,
9899
+ loader: loader$d
9900
+ }, Symbol.toStringTag, { value: "Module" }));
9901
+ async function loader$c() {
9902
+ ensureUndeployed();
9903
+ const preferences = await getPreferences();
9904
+ return { preferences };
9905
+ }
9906
+ async function action$2({ request }) {
9907
+ ensureUndeployed();
9908
+ const formData = await request.formData();
9909
+ const minResolution = formData.get("minResolution");
9910
+ const maxResolution = formData.get("maxResolution");
9911
+ const fontSize = formData.get("fontSize");
9912
+ const optOutPresence = formData.get("optOutPresence") === "on";
9913
+ await setPreferences({
9914
+ player: {
9915
+ minResolution: minResolution ? Number(minResolution) : void 0,
9916
+ maxResolution: maxResolution ? Number(maxResolution) : void 0
9917
+ },
9918
+ fontSize: fontSize ? Number(fontSize) : void 0,
9919
+ presence: {
9920
+ optOut: optOutPresence
9921
+ }
9922
+ });
9923
+ return redirectWithToast("/preferences", {
9924
+ title: "Preferences updated",
9925
+ description: "Your preferences have been updated.",
9926
+ type: "success"
9927
+ });
9928
+ }
9929
+ function AccountSettings() {
9930
+ var _a, _b, _c;
9931
+ const data = useRouteLoaderData("root");
9932
+ const playerPreferences = (_a = data == null ? void 0 : data.preferences) == null ? void 0 : _a.player;
9933
+ const fontSizePreference = (_b = data == null ? void 0 : data.preferences) == null ? void 0 : _b.fontSize;
9934
+ const presencePreferences = (_c = data == null ? void 0 : data.preferences) == null ? void 0 : _c.presence;
9935
+ const navigation = useNavigation();
9936
+ const isSubmitting = navigation.state === "submitting";
9937
+ return /* @__PURE__ */ jsxs("main", { className: "container mt-12 flex h-full w-full max-w-3xl flex-grow flex-col gap-4", children: [
9938
+ /* @__PURE__ */ jsx("h1", { className: "mb-4 text-h1", children: "Preferences" }),
9939
+ /* @__PURE__ */ jsxs(Form, { method: "post", className: "flex w-full max-w-sm flex-col gap-4", children: [
9940
+ /* @__PURE__ */ jsxs("div", { children: [
9941
+ /* @__PURE__ */ jsx("h2", { className: "mb-2 text-body-xl", children: "Video Player Preferences" }),
9942
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
9943
+ /* @__PURE__ */ jsx("label", { htmlFor: "minResolution", children: "Minimum Resolution:" }),
9944
+ /* @__PURE__ */ jsxs(
9945
+ "select",
9946
+ {
9947
+ id: "minResolution",
9948
+ name: "minResolution",
9949
+ defaultValue: playerPreferences == null ? void 0 : playerPreferences.minResolution,
9950
+ children: [
9951
+ /* @__PURE__ */ jsx("option", { value: "", children: "Auto" }),
9952
+ /* @__PURE__ */ jsx("option", { value: "480", children: "480p" }),
9953
+ /* @__PURE__ */ jsx("option", { value: "720", children: "720p" }),
9954
+ /* @__PURE__ */ jsx("option", { value: "1080", children: "1080p" }),
9955
+ /* @__PURE__ */ jsx("option", { value: "1440", children: "1440p" }),
9956
+ /* @__PURE__ */ jsx("option", { value: "2160", children: "2160p (4K)" })
9957
+ ]
9958
+ }
9959
+ )
9960
+ ] }),
9961
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
9962
+ /* @__PURE__ */ jsx("label", { htmlFor: "maxResolution", children: "Maximum Resolution:" }),
9963
+ /* @__PURE__ */ jsxs(
9964
+ "select",
9965
+ {
9966
+ id: "maxResolution",
9967
+ name: "maxResolution",
9968
+ defaultValue: playerPreferences == null ? void 0 : playerPreferences.maxResolution,
9969
+ children: [
9970
+ /* @__PURE__ */ jsx("option", { value: "", children: "Auto" }),
9971
+ /* @__PURE__ */ jsx("option", { value: "720", children: "720p" }),
9972
+ /* @__PURE__ */ jsx("option", { value: "1080", children: "1080p" }),
9973
+ /* @__PURE__ */ jsx("option", { value: "1440", children: "1440p" }),
9974
+ /* @__PURE__ */ jsx("option", { value: "2160", children: "2160p (4K)" })
9975
+ ]
9976
+ }
9977
+ )
9978
+ ] })
9979
+ ] }),
9980
+ /* @__PURE__ */ jsxs("div", { children: [
9981
+ /* @__PURE__ */ jsxs("div", { className: "mb-2 flex items-center gap-2", children: [
9982
+ /* @__PURE__ */ jsx("h2", { className: "text-body-xl", children: "Font Size Preference" }),
9983
+ /* @__PURE__ */ jsx(SimpleTooltip, { content: "Defaults to 16px", children: /* @__PURE__ */ jsx(Icon, { name: "Question", tabIndex: 0 }) })
9984
+ ] }),
9985
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
9986
+ /* @__PURE__ */ jsx("label", { htmlFor: "fontSize", children: "Font Size" }),
9987
+ /* @__PURE__ */ jsx(
9988
+ "input",
9989
+ {
9990
+ type: "number",
9991
+ id: "fontSize",
9992
+ name: "fontSize",
9993
+ defaultValue: fontSizePreference ?? 16,
9994
+ step: "1",
9995
+ min: "12",
9996
+ max: "26"
9997
+ }
9998
+ )
9999
+ ] })
10000
+ ] }),
10001
+ /* @__PURE__ */ jsxs("div", { children: [
10002
+ /* @__PURE__ */ jsxs("div", { className: "mb-2 flex items-center gap-2", children: [
10003
+ /* @__PURE__ */ jsx("h2", { className: "text-body-xl", children: "Presence Preference" }),
10004
+ /* @__PURE__ */ jsx(SimpleTooltip, { content: "This controls whether your name and avatar are displayed in the pile of faces in navigation", children: /* @__PURE__ */ jsx(Icon, { name: "Question", tabIndex: 0 }) })
10005
+ ] }),
10006
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
10007
+ /* @__PURE__ */ jsx(
10008
+ "input",
10009
+ {
10010
+ type: "checkbox",
10011
+ id: "optOutPresence",
10012
+ name: "optOutPresence",
10013
+ defaultChecked: presencePreferences == null ? void 0 : presencePreferences.optOut
10014
+ }
10015
+ ),
10016
+ /* @__PURE__ */ jsx("label", { htmlFor: "optOutPresence", children: "Opt out of presence features" })
10017
+ ] })
10018
+ ] }),
10019
+ /* @__PURE__ */ jsx("div", { className: "h-4" }),
10020
+ /* @__PURE__ */ jsx(
10021
+ Button,
10022
+ {
10023
+ varient: "primary",
10024
+ type: "submit",
10025
+ name: "intent",
10026
+ value: "update-preferences",
10027
+ disabled: isSubmitting,
10028
+ children: isSubmitting ? "Updating..." : "Update Preferences"
10029
+ }
10030
+ )
10031
+ ] })
10032
+ ] });
10033
+ }
10034
+ const route24 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
10035
+ __proto__: null,
10036
+ action: action$2,
10037
+ default: AccountSettings,
9886
10038
  loader: loader$c
9887
10039
  }, Symbol.toStringTag, { value: "Module" }));
9888
10040
  const handle$4 = {
@@ -9941,7 +10093,7 @@ function Support() {
9941
10093
  ] })
9942
10094
  ] });
9943
10095
  }
9944
- const route24 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
10096
+ const route25 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
9945
10097
  __proto__: null,
9946
10098
  default: Support,
9947
10099
  handle: handle$4
@@ -9968,7 +10120,7 @@ function AdminLayout$1() {
9968
10120
  ] })
9969
10121
  ] });
9970
10122
  }
9971
- const route25 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
10123
+ const route26 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
9972
10124
  __proto__: null,
9973
10125
  default: AdminLayout$1,
9974
10126
  handle: handle$3,
@@ -9979,7 +10131,7 @@ async function loader$b() {
9979
10131
  const apps = await getApps();
9980
10132
  return Response.json({ apps });
9981
10133
  }
9982
- const route26 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
10134
+ const route27 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
9983
10135
  __proto__: null,
9984
10136
  loader: loader$b
9985
10137
  }, Symbol.toStringTag, { value: "Module" }));
@@ -9988,7 +10140,7 @@ async function loader$a() {
9988
10140
  const entries = await getAllFileCacheEntries();
9989
10141
  return Response.json({ entries });
9990
10142
  }
9991
- const route27 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
10143
+ const route28 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
9992
10144
  __proto__: null,
9993
10145
  loader: loader$a
9994
10146
  }, Symbol.toStringTag, { value: "Module" }));
@@ -10227,7 +10379,7 @@ function Pinger({
10227
10379
  )
10228
10380
  ] });
10229
10381
  }
10230
- const route28 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
10382
+ const route29 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
10231
10383
  __proto__: null,
10232
10384
  action: action$1,
10233
10385
  default: AdminLayout,
@@ -10337,7 +10489,7 @@ function Version() {
10337
10489
  ] })
10338
10490
  ] });
10339
10491
  }
10340
- const route29 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
10492
+ const route30 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
10341
10493
  __proto__: null,
10342
10494
  default: Version,
10343
10495
  handle: handle$1,
@@ -10352,7 +10504,7 @@ async function loader$7({ request }) {
10352
10504
  { headers: { "Server-Timing": getServerTimeHeader(timings) } }
10353
10505
  );
10354
10506
  }
10355
- const route30 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
10507
+ const route31 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
10356
10508
  __proto__: null,
10357
10509
  loader: loader$7
10358
10510
  }, Symbol.toStringTag, { value: "Module" }));
@@ -10441,7 +10593,7 @@ function DiffViewer() {
10441
10593
  }
10442
10594
  );
10443
10595
  }
10444
- const route31 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
10596
+ const route32 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
10445
10597
  __proto__: null,
10446
10598
  default: DiffViewer,
10447
10599
  loader: loader$6
@@ -10454,7 +10606,7 @@ async function loader$5({ request }) {
10454
10606
  { headers: { "Server-Timing": getServerTimeHeader(timings) } }
10455
10607
  );
10456
10608
  }
10457
- const route32 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
10609
+ const route33 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
10458
10610
  __proto__: null,
10459
10611
  loader: loader$5
10460
10612
  }, Symbol.toStringTag, { value: "Module" }));
@@ -10785,7 +10937,7 @@ function OgLayout({
10785
10937
  }
10786
10938
  );
10787
10939
  }
10788
- const route35 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
10940
+ const route36 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
10789
10941
  __proto__: null,
10790
10942
  loader: loader$4
10791
10943
  }, Symbol.toStringTag, { value: "Module" }));
@@ -10833,7 +10985,7 @@ function Onboarding() {
10833
10985
  /* @__PURE__ */ jsx(Form, { method: "post", className: "pb-4", children: /* @__PURE__ */ jsx(Button, { name: "intent", value: "complete", varient: "primary", children: "I've watched it. Let's go!" }) })
10834
10986
  ] });
10835
10987
  }
10836
- const route36 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
10988
+ const route37 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
10837
10989
  __proto__: null,
10838
10990
  action,
10839
10991
  default: Onboarding,
@@ -10859,7 +11011,7 @@ async function loader$2() {
10859
11011
  }
10860
11012
  return Response.json({ processes, testProcesses });
10861
11013
  }
10862
- const route37 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
11014
+ const route38 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
10863
11015
  __proto__: null,
10864
11016
  loader: loader$2
10865
11017
  }, Symbol.toStringTag, { value: "Module" }));
@@ -10868,7 +11020,7 @@ function loader$1({ request }) {
10868
11020
  { type: "sitemap", value: `${getDomainUrl(request)}/sitemap.xml` }
10869
11021
  ]);
10870
11022
  }
10871
- const route39 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
11023
+ const route40 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
10872
11024
  __proto__: null,
10873
11025
  loader: loader$1
10874
11026
  }, Symbol.toStringTag, { value: "Module" }));
@@ -10881,11 +11033,11 @@ async function loader({ request, context }) {
10881
11033
  }
10882
11034
  });
10883
11035
  }
10884
- const route41 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
11036
+ const route42 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
10885
11037
  __proto__: null,
10886
11038
  loader
10887
11039
  }, Symbol.toStringTag, { value: "Module" }));
10888
- const serverManifest = { "entry": { "module": "/assets/entry.client-DqIWuxf8.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/components-Be92gVxW.js"], "css": [] }, "routes": { "root": { "id": "root", "parentId": void 0, "path": "", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/root-D12XnE1S.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/components-Be92gVxW.js", "/assets/misc-DUy_whwE.js", "/assets/pe-ChIwTk8v.js", "/assets/error-boundary-BZA-ffa8.js", "/assets/progress-bar-BaTU3Yx_.js", "/assets/index-C9Hx0Dey.js", "/assets/tooltip-DO9uwurQ.js", "/assets/index-Bdg3v8tC.js", "/assets/presence-8FPJKg_8.js", "/assets/seo-pBpFCWsy.js", "/assets/request-info-ByUEfOil.js"], "css": [] }, "routes/$": { "id": "routes/$", "parentId": "root", "path": "*", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/_-BrkpfnBb.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/error-boundary-BZA-ffa8.js", "/assets/misc-DUy_whwE.js", "/assets/components-Be92gVxW.js"], "css": [] }, "routes/_app+/_layout": { "id": "routes/_app+/_layout", "parentId": "root", "path": void 0, "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_layout-B8j0pWoF.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/misc-DUy_whwE.js", "/assets/pe-ChIwTk8v.js", "/assets/product-DIAmCwmZ.js", "/assets/revalidation-ws-dUa9CAqr.js", "/assets/tooltip-DO9uwurQ.js", "/assets/index-BCTr8uu6.js", "/assets/user-Bv6wYhQP.js", "/assets/workshop-config-WVltG_BV.js", "/assets/presence-8FPJKg_8.js", "/assets/progress-DQt_Bn9o.js", "/assets/index-Bdg3v8tC.js", "/assets/components-Be92gVxW.js", "/assets/request-info-ByUEfOil.js"], "css": [] }, "routes/_app+/account": { "id": "routes/_app+/account", "parentId": "routes/_app+/_layout", "path": "account", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/account-DPP4rKOb.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/button-_qPvcoqR.js", "/assets/misc-DUy_whwE.js", "/assets/tooltip-DO9uwurQ.js", "/assets/user-Bv6wYhQP.js", "/assets/workshop-config-WVltG_BV.js", "/assets/presence-8FPJKg_8.js", "/assets/components-Be92gVxW.js", "/assets/request-info-ByUEfOil.js"], "css": [] }, "routes/_app+/app.$appName+/$": { "id": "routes/_app+/app.$appName+/$", "parentId": "routes/_app+/_layout", "path": "app/:appName/*", "index": void 0, "caseSensitive": void 0, "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/*", "index": void 0, "caseSensitive": void 0, "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", "index": void 0, "caseSensitive": void 0, "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, "caseSensitive": void 0, "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", "index": void 0, "caseSensitive": void 0, "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", "index": void 0, "caseSensitive": void 0, "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", "index": void 0, "caseSensitive": void 0, "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", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/discord-Bdnx7fu-.js", "imports": ["/assets/discord-BUWZUTEC.js", "/assets/index-BFGhCX_U.js", "/assets/misc-DUy_whwE.js", "/assets/components-Be92gVxW.js", "/assets/user-Bv6wYhQP.js", "/assets/workshop-config-WVltG_BV.js"], "css": [] }, "routes/_app+/exercise+/_layout": { "id": "routes/_app+/exercise+/_layout", "parentId": "routes/_app+/_layout", "path": "exercise", "index": void 0, "caseSensitive": void 0, "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", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/_exerciseNumber-DCSM0NCG.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/index-BCxBKsqT.js", "/assets/epic-video-Bp4BOD2R.js", "/assets/revalidation-ws-dUa9CAqr.js", "/assets/mdx-CEjzXoEx.js", "/assets/progress-DQt_Bn9o.js", "/assets/misc-DUy_whwE.js", "/assets/seo-pBpFCWsy.js", "/assets/components-Be92gVxW.js", "/assets/index-Bdg3v8tC.js", "/assets/request-info-ByUEfOil.js", "/assets/tooltip-DO9uwurQ.js", "/assets/pe-ChIwTk8v.js", "/assets/loading-XhMtj4mp.js", "/assets/user-Bv6wYhQP.js", "/assets/workshop-config-WVltG_BV.js", "/assets/progress-bar-BaTU3Yx_.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", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/_exerciseNumber_._stepNumber-BIMJh_sg.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/misc-DUy_whwE.js", "/assets/components-Be92gVxW.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", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/_layout-DTAM9xh5.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/index-BCxBKsqT.js", "/assets/error-boundary-BZA-ffa8.js", "/assets/nav-chevrons-DnR25VLp.js", "/assets/revalidation-ws-dUa9CAqr.js", "/assets/mdx-CEjzXoEx.js", "/assets/progress-DQt_Bn9o.js", "/assets/set-playground-CBHBA46B.js", "/assets/seo-pBpFCWsy.js", "/assets/misc-DUy_whwE.js", "/assets/epic-video-Bp4BOD2R.js", "/assets/tooltip-DO9uwurQ.js", "/assets/request-info-ByUEfOil.js", "/assets/components-Be92gVxW.js", "/assets/index-BCTr8uu6.js", "/assets/progress-bar-BaTU3Yx_.js", "/assets/pe-ChIwTk8v.js", "/assets/index-DZDhtMuq.js", "/assets/index-Bdg3v8tC.js", "/assets/loading-XhMtj4mp.js", "/assets/user-Bv6wYhQP.js", "/assets/workshop-config-WVltG_BV.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", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/app-DgTXXO8s.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/preview-DaZd0wMb.js", "/assets/components-Be92gVxW.js", "/assets/misc-DUy_whwE.js", "/assets/request-info-ByUEfOil.js", "/assets/button-_qPvcoqR.js", "/assets/loading-XhMtj4mp.js", "/assets/index-Bdg3v8tC.js", "/assets/tooltip-DO9uwurQ.js", "/assets/pe-ChIwTk8v.js", "/assets/progress-bar-BaTU3Yx_.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", "path": void 0, "index": true, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/index-Bi1TbRTj.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/tooltip-DO9uwurQ.js", "/assets/index-DZDhtMuq.js", "/assets/misc-DUy_whwE.js", "/assets/diff-8nlDkmpc.js", "/assets/error-boundary-BZA-ffa8.js", "/assets/loading-XhMtj4mp.js", "/assets/discord-BUWZUTEC.js", "/assets/components-Be92gVxW.js", "/assets/index-C9Hx0Dey.js", "/assets/set-playground-CBHBA46B.js", "/assets/tests-DbuyD2cI.js", "/assets/preview-DaZd0wMb.js", "/assets/index-BCTr8uu6.js", "/assets/accordion-D9-D-n9p.js", "/assets/mdx-CEjzXoEx.js", "/assets/epic-video-Bp4BOD2R.js", "/assets/index-Bdg3v8tC.js", "/assets/request-info-ByUEfOil.js", "/assets/pe-ChIwTk8v.js", "/assets/user-Bv6wYhQP.js", "/assets/workshop-config-WVltG_BV.js", "/assets/progress-bar-BaTU3Yx_.js", "/assets/revalidation-ws-dUa9CAqr.js", "/assets/use-event-source-x59d4R2Z.js", "/assets/button-_qPvcoqR.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", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/test-DoKJvNug.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/tests-DbuyD2cI.js", "/assets/components-Be92gVxW.js", "/assets/epic-video-Bp4BOD2R.js", "/assets/index-Bdg3v8tC.js", "/assets/request-info-ByUEfOil.js", "/assets/misc-DUy_whwE.js", "/assets/tooltip-DO9uwurQ.js", "/assets/pe-ChIwTk8v.js", "/assets/loading-XhMtj4mp.js", "/assets/user-Bv6wYhQP.js", "/assets/workshop-config-WVltG_BV.js", "/assets/accordion-D9-D-n9p.js", "/assets/index-DZDhtMuq.js", "/assets/index-BCTr8uu6.js", "/assets/use-event-source-x59d4R2Z.js", "/assets/set-playground-CBHBA46B.js", "/assets/progress-bar-BaTU3Yx_.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", "path": void 0, "index": true, "caseSensitive": void 0, "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", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_exerciseNumber_.finished-nbpk1ToO.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/index-BCxBKsqT.js", "/assets/epic-video-Bp4BOD2R.js", "/assets/loading-XhMtj4mp.js", "/assets/nav-chevrons-DnR25VLp.js", "/assets/revalidation-ws-dUa9CAqr.js", "/assets/mdx-CEjzXoEx.js", "/assets/progress-DQt_Bn9o.js", "/assets/misc-DUy_whwE.js", "/assets/seo-pBpFCWsy.js", "/assets/components-Be92gVxW.js", "/assets/index-Bdg3v8tC.js", "/assets/request-info-ByUEfOil.js", "/assets/tooltip-DO9uwurQ.js", "/assets/pe-ChIwTk8v.js", "/assets/user-Bv6wYhQP.js", "/assets/workshop-config-WVltG_BV.js", "/assets/progress-bar-BaTU3Yx_.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/finished": { "id": "routes/_app+/finished", "parentId": "routes/_app+/_layout", "path": "finished", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/finished-C0cpfAFL.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/index-BCxBKsqT.js", "/assets/epic-video-Bp4BOD2R.js", "/assets/loading-XhMtj4mp.js", "/assets/nav-chevrons-DnR25VLp.js", "/assets/revalidation-ws-dUa9CAqr.js", "/assets/mdx-CEjzXoEx.js", "/assets/misc-DUy_whwE.js", "/assets/seo-pBpFCWsy.js", "/assets/progress-DQt_Bn9o.js", "/assets/components-Be92gVxW.js", "/assets/index-Bdg3v8tC.js", "/assets/request-info-ByUEfOil.js", "/assets/tooltip-DO9uwurQ.js", "/assets/pe-ChIwTk8v.js", "/assets/user-Bv6wYhQP.js", "/assets/workshop-config-WVltG_BV.js", "/assets/progress-bar-BaTU3Yx_.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/index": { "id": "routes/_app+/index", "parentId": "routes/_app+/_layout", "path": void 0, "index": true, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/index-Ca4vBON4.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/index-BCxBKsqT.js", "/assets/epic-video-Bp4BOD2R.js", "/assets/error-boundary-BZA-ffa8.js", "/assets/mdx-CEjzXoEx.js", "/assets/misc-DUy_whwE.js", "/assets/progress-DQt_Bn9o.js", "/assets/components-Be92gVxW.js", "/assets/index-Bdg3v8tC.js", "/assets/request-info-ByUEfOil.js", "/assets/tooltip-DO9uwurQ.js", "/assets/pe-ChIwTk8v.js", "/assets/loading-XhMtj4mp.js", "/assets/user-Bv6wYhQP.js", "/assets/workshop-config-WVltG_BV.js", "/assets/progress-bar-BaTU3Yx_.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/login": { "id": "routes/_app+/login", "parentId": "routes/_app+/_layout", "path": "login", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/login-C1oOgi98.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/use-event-source-x59d4R2Z.js", "/assets/button-_qPvcoqR.js", "/assets/loading-XhMtj4mp.js", "/assets/product-DIAmCwmZ.js", "/assets/workshop-config-WVltG_BV.js", "/assets/request-info-ByUEfOil.js", "/assets/components-Be92gVxW.js", "/assets/misc-DUy_whwE.js", "/assets/index-Bdg3v8tC.js", "/assets/tooltip-DO9uwurQ.js", "/assets/pe-ChIwTk8v.js"], "css": [] }, "routes/_app+/support": { "id": "routes/_app+/support", "parentId": "routes/_app+/_layout", "path": "support", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/support-CIz02V_r.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/components-Be92gVxW.js"], "css": [] }, "routes/admin+/_layout": { "id": "routes/admin+/_layout", "parentId": "root", "path": "admin", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_layout-Dfmv2zcn.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/components-Be92gVxW.js"], "css": [] }, "routes/admin+/apps": { "id": "routes/admin+/apps", "parentId": "routes/admin+/_layout", "path": "apps", "index": void 0, "caseSensitive": void 0, "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", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/cache-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/admin+/index": { "id": "routes/admin+/index", "parentId": "routes/admin+/_layout", "path": void 0, "index": true, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/index-pkiQppkK.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/misc-DUy_whwE.js", "/assets/tooltip-DO9uwurQ.js", "/assets/progress-DQt_Bn9o.js", "/assets/components-Be92gVxW.js", "/assets/pe-ChIwTk8v.js"], "css": [] }, "routes/admin+/version": { "id": "routes/admin+/version", "parentId": "routes/admin+/_layout", "path": "version", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/version-lxUUxt3s.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/workshop-config-WVltG_BV.js", "/assets/components-Be92gVxW.js"], "css": [] }, "routes/apps": { "id": "routes/apps", "parentId": "root", "path": "apps", "index": void 0, "caseSensitive": void 0, "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", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/diff-BhRAIPKc.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/misc-DUy_whwE.js", "/assets/diff-8nlDkmpc.js", "/assets/nav-chevrons-DnR25VLp.js", "/assets/components-Be92gVxW.js", "/assets/accordion-D9-D-n9p.js", "/assets/tooltip-DO9uwurQ.js", "/assets/index-DZDhtMuq.js", "/assets/index-BCTr8uu6.js", "/assets/mdx-CEjzXoEx.js", "/assets/epic-video-Bp4BOD2R.js", "/assets/index-Bdg3v8tC.js", "/assets/request-info-ByUEfOil.js", "/assets/pe-ChIwTk8v.js", "/assets/loading-XhMtj4mp.js", "/assets/user-Bv6wYhQP.js", "/assets/workshop-config-WVltG_BV.js", "/assets/progress-bar-BaTU3Yx_.js", "/assets/revalidation-ws-dUa9CAqr.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/exercises": { "id": "routes/exercises", "parentId": "root", "path": "exercises", "index": void 0, "caseSensitive": void 0, "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", "index": void 0, "caseSensitive": void 0, "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", "index": void 0, "caseSensitive": void 0, "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", "index": void 0, "caseSensitive": void 0, "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", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/onboarding-C2YNq60k.js", "imports": ["/assets/index-BFGhCX_U.js", "/assets/button-_qPvcoqR.js", "/assets/epic-video-Bp4BOD2R.js", "/assets/components-Be92gVxW.js", "/assets/misc-DUy_whwE.js", "/assets/index-Bdg3v8tC.js", "/assets/request-info-ByUEfOil.js", "/assets/tooltip-DO9uwurQ.js", "/assets/pe-ChIwTk8v.js", "/assets/loading-XhMtj4mp.js", "/assets/user-Bv6wYhQP.js", "/assets/workshop-config-WVltG_BV.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/processes": { "id": "routes/processes", "parentId": "root", "path": "processes", "index": void 0, "caseSensitive": void 0, "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", "index": void 0, "caseSensitive": void 0, "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", "index": void 0, "caseSensitive": void 0, "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", "index": void 0, "caseSensitive": void 0, "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", "index": void 0, "caseSensitive": void 0, "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", "index": void 0, "caseSensitive": void 0, "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", "index": void 0, "caseSensitive": void 0, "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", "index": void 0, "caseSensitive": void 0, "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", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/index-K6Dvbx-E.js", "imports": [], "css": [] } }, "url": "/assets/manifest-a8336fab.js", "version": "a8336fab" };
11040
+ const serverManifest = { "entry": { "module": "/assets/entry.client-CQusg5Iz.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/components-DrvY4pal.js"], "css": [] }, "routes": { "root": { "id": "root", "parentId": void 0, "path": "", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/root-DGY0y7_0.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/components-DrvY4pal.js", "/assets/misc-BtjCSy-T.js", "/assets/pe-DXT2FOp1.js", "/assets/error-boundary-Beul7lrT.js", "/assets/progress-bar-CTPCfvDi.js", "/assets/index-CB8bjE90.js", "/assets/tooltip-Bp9KHnLy.js", "/assets/index-BOQWfIQC.js", "/assets/presence-CrYBA3ta.js", "/assets/seo-pBpFCWsy.js"], "css": [] }, "routes/$": { "id": "routes/$", "parentId": "root", "path": "*", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/_-CjjFMNGC.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/error-boundary-Beul7lrT.js", "/assets/misc-BtjCSy-T.js", "/assets/components-DrvY4pal.js"], "css": [] }, "routes/_app+/_layout": { "id": "routes/_app+/_layout", "parentId": "root", "path": void 0, "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_layout-Muw3ERYT.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/misc-BtjCSy-T.js", "/assets/pe-DXT2FOp1.js", "/assets/product-gqq_YQBW.js", "/assets/revalidation-ws-DYaJNyw1.js", "/assets/tooltip-Bp9KHnLy.js", "/assets/index-BHwOR8R1.js", "/assets/user-C0j04V55.js", "/assets/workshop-config-oL_FWDKq.js", "/assets/presence-CrYBA3ta.js", "/assets/progress-D-HsH4j3.js", "/assets/index-BOQWfIQC.js", "/assets/components-DrvY4pal.js"], "css": [] }, "routes/_app+/account": { "id": "routes/_app+/account", "parentId": "routes/_app+/_layout", "path": "account", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/account-Cc968svU.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/button-BS845Tjo.js", "/assets/misc-BtjCSy-T.js", "/assets/tooltip-Bp9KHnLy.js", "/assets/user-C0j04V55.js", "/assets/workshop-config-oL_FWDKq.js", "/assets/components-DrvY4pal.js"], "css": [] }, "routes/_app+/app.$appName+/$": { "id": "routes/_app+/app.$appName+/$", "parentId": "routes/_app+/_layout", "path": "app/:appName/*", "index": void 0, "caseSensitive": void 0, "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/*", "index": void 0, "caseSensitive": void 0, "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", "index": void 0, "caseSensitive": void 0, "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, "caseSensitive": void 0, "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", "index": void 0, "caseSensitive": void 0, "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", "index": void 0, "caseSensitive": void 0, "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", "index": void 0, "caseSensitive": void 0, "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", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/discord-DILzAZN8.js", "imports": ["/assets/discord-BfP_Rny5.js", "/assets/index-CGzylDPY.js", "/assets/misc-BtjCSy-T.js", "/assets/components-DrvY4pal.js", "/assets/user-C0j04V55.js", "/assets/workshop-config-oL_FWDKq.js"], "css": [] }, "routes/_app+/exercise+/_layout": { "id": "routes/_app+/exercise+/_layout", "parentId": "routes/_app+/_layout", "path": "exercise", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_layout-CwTidn3v.js", "imports": ["/assets/index-CGzylDPY.js"], "css": [] }, "routes/_app+/exercise+/$exerciseNumber": { "id": "routes/_app+/exercise+/$exerciseNumber", "parentId": "routes/_app+/exercise+/_layout", "path": ":exerciseNumber", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/_exerciseNumber-CqkGzsgV.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/index-egcHQOpF.js", "/assets/epic-video-qHKPWPt1.js", "/assets/revalidation-ws-DYaJNyw1.js", "/assets/mdx-CsS30JUo.js", "/assets/progress-D-HsH4j3.js", "/assets/misc-BtjCSy-T.js", "/assets/seo-pBpFCWsy.js", "/assets/components-DrvY4pal.js", "/assets/index-BOQWfIQC.js", "/assets/tooltip-Bp9KHnLy.js", "/assets/pe-DXT2FOp1.js", "/assets/loading-C2wPVvQw.js", "/assets/user-C0j04V55.js", "/assets/workshop-config-oL_FWDKq.js", "/assets/progress-bar-CTPCfvDi.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", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/_exerciseNumber_._stepNumber-BNWGPi9m.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/misc-BtjCSy-T.js", "/assets/components-DrvY4pal.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", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/_layout-BMa5nZcJ.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/index-egcHQOpF.js", "/assets/error-boundary-Beul7lrT.js", "/assets/nav-chevrons-2hLTwAZb.js", "/assets/revalidation-ws-DYaJNyw1.js", "/assets/mdx-CsS30JUo.js", "/assets/progress-D-HsH4j3.js", "/assets/set-playground-DQzAhC0t.js", "/assets/seo-pBpFCWsy.js", "/assets/misc-BtjCSy-T.js", "/assets/epic-video-qHKPWPt1.js", "/assets/tooltip-Bp9KHnLy.js", "/assets/index-BOQWfIQC.js", "/assets/components-DrvY4pal.js", "/assets/index-BHwOR8R1.js", "/assets/progress-bar-CTPCfvDi.js", "/assets/pe-DXT2FOp1.js", "/assets/index-BPegC-d3.js", "/assets/loading-C2wPVvQw.js", "/assets/user-C0j04V55.js", "/assets/workshop-config-oL_FWDKq.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", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/app-BOqXK9hi.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/preview-C2y4Z0qO.js", "/assets/components-DrvY4pal.js", "/assets/misc-BtjCSy-T.js", "/assets/index-BOQWfIQC.js", "/assets/tooltip-Bp9KHnLy.js", "/assets/pe-DXT2FOp1.js", "/assets/button-BS845Tjo.js", "/assets/loading-C2wPVvQw.js", "/assets/progress-bar-CTPCfvDi.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", "path": void 0, "index": true, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/index-DbCT6N5p.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/tooltip-Bp9KHnLy.js", "/assets/index-BPegC-d3.js", "/assets/misc-BtjCSy-T.js", "/assets/diff-DtvfyjPI.js", "/assets/error-boundary-Beul7lrT.js", "/assets/loading-C2wPVvQw.js", "/assets/discord-BfP_Rny5.js", "/assets/components-DrvY4pal.js", "/assets/index-CB8bjE90.js", "/assets/set-playground-DQzAhC0t.js", "/assets/tests-LWW8wCYZ.js", "/assets/preview-C2y4Z0qO.js", "/assets/index-BHwOR8R1.js", "/assets/accordion-C-sW--in.js", "/assets/mdx-CsS30JUo.js", "/assets/epic-video-qHKPWPt1.js", "/assets/index-BOQWfIQC.js", "/assets/pe-DXT2FOp1.js", "/assets/user-C0j04V55.js", "/assets/workshop-config-oL_FWDKq.js", "/assets/progress-bar-CTPCfvDi.js", "/assets/revalidation-ws-DYaJNyw1.js", "/assets/use-event-source-AZJtQsFX.js", "/assets/button-BS845Tjo.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", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/test-CDWRwwO-.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/tests-LWW8wCYZ.js", "/assets/components-DrvY4pal.js", "/assets/epic-video-qHKPWPt1.js", "/assets/index-BOQWfIQC.js", "/assets/misc-BtjCSy-T.js", "/assets/tooltip-Bp9KHnLy.js", "/assets/pe-DXT2FOp1.js", "/assets/loading-C2wPVvQw.js", "/assets/user-C0j04V55.js", "/assets/workshop-config-oL_FWDKq.js", "/assets/accordion-C-sW--in.js", "/assets/index-BPegC-d3.js", "/assets/index-BHwOR8R1.js", "/assets/use-event-source-AZJtQsFX.js", "/assets/set-playground-DQzAhC0t.js", "/assets/progress-bar-CTPCfvDi.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", "path": void 0, "index": true, "caseSensitive": void 0, "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", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_exerciseNumber_.finished-CdNhLhKg.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/index-egcHQOpF.js", "/assets/epic-video-qHKPWPt1.js", "/assets/loading-C2wPVvQw.js", "/assets/nav-chevrons-2hLTwAZb.js", "/assets/revalidation-ws-DYaJNyw1.js", "/assets/mdx-CsS30JUo.js", "/assets/progress-D-HsH4j3.js", "/assets/misc-BtjCSy-T.js", "/assets/seo-pBpFCWsy.js", "/assets/components-DrvY4pal.js", "/assets/index-BOQWfIQC.js", "/assets/tooltip-Bp9KHnLy.js", "/assets/pe-DXT2FOp1.js", "/assets/user-C0j04V55.js", "/assets/workshop-config-oL_FWDKq.js", "/assets/progress-bar-CTPCfvDi.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/finished": { "id": "routes/_app+/finished", "parentId": "routes/_app+/_layout", "path": "finished", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/finished-DUKfL220.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/index-egcHQOpF.js", "/assets/epic-video-qHKPWPt1.js", "/assets/loading-C2wPVvQw.js", "/assets/nav-chevrons-2hLTwAZb.js", "/assets/revalidation-ws-DYaJNyw1.js", "/assets/mdx-CsS30JUo.js", "/assets/misc-BtjCSy-T.js", "/assets/seo-pBpFCWsy.js", "/assets/progress-D-HsH4j3.js", "/assets/components-DrvY4pal.js", "/assets/index-BOQWfIQC.js", "/assets/tooltip-Bp9KHnLy.js", "/assets/pe-DXT2FOp1.js", "/assets/user-C0j04V55.js", "/assets/workshop-config-oL_FWDKq.js", "/assets/progress-bar-CTPCfvDi.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/index": { "id": "routes/_app+/index", "parentId": "routes/_app+/_layout", "path": void 0, "index": true, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": true, "module": "/assets/index-oED4uZLa.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/index-egcHQOpF.js", "/assets/epic-video-qHKPWPt1.js", "/assets/error-boundary-Beul7lrT.js", "/assets/mdx-CsS30JUo.js", "/assets/misc-BtjCSy-T.js", "/assets/progress-D-HsH4j3.js", "/assets/components-DrvY4pal.js", "/assets/index-BOQWfIQC.js", "/assets/tooltip-Bp9KHnLy.js", "/assets/pe-DXT2FOp1.js", "/assets/loading-C2wPVvQw.js", "/assets/user-C0j04V55.js", "/assets/workshop-config-oL_FWDKq.js", "/assets/progress-bar-CTPCfvDi.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/_app+/login": { "id": "routes/_app+/login", "parentId": "routes/_app+/_layout", "path": "login", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/login-DoU7gifi.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/use-event-source-AZJtQsFX.js", "/assets/button-BS845Tjo.js", "/assets/loading-C2wPVvQw.js", "/assets/product-gqq_YQBW.js", "/assets/workshop-config-oL_FWDKq.js", "/assets/index-BOQWfIQC.js", "/assets/components-DrvY4pal.js", "/assets/misc-BtjCSy-T.js", "/assets/tooltip-Bp9KHnLy.js", "/assets/pe-DXT2FOp1.js"], "css": [] }, "routes/_app+/preferences": { "id": "routes/_app+/preferences", "parentId": "routes/_app+/_layout", "path": "preferences", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/preferences-br0VSK51.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/button-BS845Tjo.js", "/assets/misc-BtjCSy-T.js", "/assets/tooltip-Bp9KHnLy.js", "/assets/components-DrvY4pal.js"], "css": [] }, "routes/_app+/support": { "id": "routes/_app+/support", "parentId": "routes/_app+/_layout", "path": "support", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/support-lgEG2piy.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/components-DrvY4pal.js"], "css": [] }, "routes/admin+/_layout": { "id": "routes/admin+/_layout", "parentId": "root", "path": "admin", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/_layout-DV29dlKr.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/components-DrvY4pal.js"], "css": [] }, "routes/admin+/apps": { "id": "routes/admin+/apps", "parentId": "routes/admin+/_layout", "path": "apps", "index": void 0, "caseSensitive": void 0, "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", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/cache-l0sNRNKZ.js", "imports": [], "css": [] }, "routes/admin+/index": { "id": "routes/admin+/index", "parentId": "routes/admin+/_layout", "path": void 0, "index": true, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/index-cZQeGrqL.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/misc-BtjCSy-T.js", "/assets/tooltip-Bp9KHnLy.js", "/assets/progress-D-HsH4j3.js", "/assets/components-DrvY4pal.js", "/assets/pe-DXT2FOp1.js"], "css": [] }, "routes/admin+/version": { "id": "routes/admin+/version", "parentId": "routes/admin+/_layout", "path": "version", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/version-D61Qvt0X.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/workshop-config-oL_FWDKq.js", "/assets/components-DrvY4pal.js"], "css": [] }, "routes/apps": { "id": "routes/apps", "parentId": "root", "path": "apps", "index": void 0, "caseSensitive": void 0, "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", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/diff-D0e_PrB7.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/misc-BtjCSy-T.js", "/assets/diff-DtvfyjPI.js", "/assets/nav-chevrons-2hLTwAZb.js", "/assets/components-DrvY4pal.js", "/assets/accordion-C-sW--in.js", "/assets/tooltip-Bp9KHnLy.js", "/assets/index-BPegC-d3.js", "/assets/index-BHwOR8R1.js", "/assets/mdx-CsS30JUo.js", "/assets/epic-video-qHKPWPt1.js", "/assets/index-BOQWfIQC.js", "/assets/pe-DXT2FOp1.js", "/assets/loading-C2wPVvQw.js", "/assets/user-C0j04V55.js", "/assets/workshop-config-oL_FWDKq.js", "/assets/progress-bar-CTPCfvDi.js", "/assets/revalidation-ws-DYaJNyw1.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/exercises": { "id": "routes/exercises", "parentId": "root", "path": "exercises", "index": void 0, "caseSensitive": void 0, "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", "index": void 0, "caseSensitive": void 0, "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", "index": void 0, "caseSensitive": void 0, "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", "index": void 0, "caseSensitive": void 0, "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", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/onboarding-Cu6eD7KS.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/button-BS845Tjo.js", "/assets/epic-video-qHKPWPt1.js", "/assets/components-DrvY4pal.js", "/assets/misc-BtjCSy-T.js", "/assets/index-BOQWfIQC.js", "/assets/tooltip-Bp9KHnLy.js", "/assets/pe-DXT2FOp1.js", "/assets/loading-C2wPVvQw.js", "/assets/user-C0j04V55.js", "/assets/workshop-config-oL_FWDKq.js"], "css": ["/assets/epic-video-DUnRvy1A.css"] }, "routes/processes": { "id": "routes/processes", "parentId": "root", "path": "processes", "index": void 0, "caseSensitive": void 0, "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", "index": void 0, "caseSensitive": void 0, "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", "index": void 0, "caseSensitive": void 0, "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", "index": void 0, "caseSensitive": void 0, "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", "index": void 0, "caseSensitive": void 0, "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", "index": void 0, "caseSensitive": void 0, "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", "index": void 0, "caseSensitive": void 0, "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", "index": void 0, "caseSensitive": void 0, "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", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasErrorBoundary": false, "module": "/assets/index-K6Dvbx-E.js", "imports": [], "css": [] } }, "url": "/assets/manifest-93f34003.js", "version": "93f34003" };
10889
11041
  const mode = "production";
10890
11042
  const assetsBuildDirectory = "build/client";
10891
11043
  const basename = "/";
@@ -11086,13 +11238,21 @@ const routes = {
11086
11238
  caseSensitive: void 0,
11087
11239
  module: route23
11088
11240
  },
11241
+ "routes/_app+/preferences": {
11242
+ id: "routes/_app+/preferences",
11243
+ parentId: "routes/_app+/_layout",
11244
+ path: "preferences",
11245
+ index: void 0,
11246
+ caseSensitive: void 0,
11247
+ module: route24
11248
+ },
11089
11249
  "routes/_app+/support": {
11090
11250
  id: "routes/_app+/support",
11091
11251
  parentId: "routes/_app+/_layout",
11092
11252
  path: "support",
11093
11253
  index: void 0,
11094
11254
  caseSensitive: void 0,
11095
- module: route24
11255
+ module: route25
11096
11256
  },
11097
11257
  "routes/admin+/_layout": {
11098
11258
  id: "routes/admin+/_layout",
@@ -11100,7 +11260,7 @@ const routes = {
11100
11260
  path: "admin",
11101
11261
  index: void 0,
11102
11262
  caseSensitive: void 0,
11103
- module: route25
11263
+ module: route26
11104
11264
  },
11105
11265
  "routes/admin+/apps": {
11106
11266
  id: "routes/admin+/apps",
@@ -11108,7 +11268,7 @@ const routes = {
11108
11268
  path: "apps",
11109
11269
  index: void 0,
11110
11270
  caseSensitive: void 0,
11111
- module: route26
11271
+ module: route27
11112
11272
  },
11113
11273
  "routes/admin+/cache": {
11114
11274
  id: "routes/admin+/cache",
@@ -11116,7 +11276,7 @@ const routes = {
11116
11276
  path: "cache",
11117
11277
  index: void 0,
11118
11278
  caseSensitive: void 0,
11119
- module: route27
11279
+ module: route28
11120
11280
  },
11121
11281
  "routes/admin+/index": {
11122
11282
  id: "routes/admin+/index",
@@ -11124,7 +11284,7 @@ const routes = {
11124
11284
  path: void 0,
11125
11285
  index: true,
11126
11286
  caseSensitive: void 0,
11127
- module: route28
11287
+ module: route29
11128
11288
  },
11129
11289
  "routes/admin+/version": {
11130
11290
  id: "routes/admin+/version",
@@ -11132,7 +11292,7 @@ const routes = {
11132
11292
  path: "version",
11133
11293
  index: void 0,
11134
11294
  caseSensitive: void 0,
11135
- module: route29
11295
+ module: route30
11136
11296
  },
11137
11297
  "routes/apps": {
11138
11298
  id: "routes/apps",
@@ -11140,7 +11300,7 @@ const routes = {
11140
11300
  path: "apps",
11141
11301
  index: void 0,
11142
11302
  caseSensitive: void 0,
11143
- module: route30
11303
+ module: route31
11144
11304
  },
11145
11305
  "routes/diff": {
11146
11306
  id: "routes/diff",
@@ -11148,7 +11308,7 @@ const routes = {
11148
11308
  path: "diff",
11149
11309
  index: void 0,
11150
11310
  caseSensitive: void 0,
11151
- module: route31
11311
+ module: route32
11152
11312
  },
11153
11313
  "routes/exercises": {
11154
11314
  id: "routes/exercises",
@@ -11156,7 +11316,7 @@ const routes = {
11156
11316
  path: "exercises",
11157
11317
  index: void 0,
11158
11318
  caseSensitive: void 0,
11159
- module: route32
11319
+ module: route33
11160
11320
  },
11161
11321
  "routes/launch-editor": {
11162
11322
  id: "routes/launch-editor",
@@ -11164,7 +11324,7 @@ const routes = {
11164
11324
  path: "launch-editor",
11165
11325
  index: void 0,
11166
11326
  caseSensitive: void 0,
11167
- module: route33
11327
+ module: route34
11168
11328
  },
11169
11329
  "routes/login-sse": {
11170
11330
  id: "routes/login-sse",
@@ -11172,7 +11332,7 @@ const routes = {
11172
11332
  path: "login-sse",
11173
11333
  index: void 0,
11174
11334
  caseSensitive: void 0,
11175
- module: route34
11335
+ module: route35
11176
11336
  },
11177
11337
  "routes/og": {
11178
11338
  id: "routes/og",
@@ -11180,7 +11340,7 @@ const routes = {
11180
11340
  path: "og",
11181
11341
  index: void 0,
11182
11342
  caseSensitive: void 0,
11183
- module: route35
11343
+ module: route36
11184
11344
  },
11185
11345
  "routes/onboarding": {
11186
11346
  id: "routes/onboarding",
@@ -11188,7 +11348,7 @@ const routes = {
11188
11348
  path: "onboarding",
11189
11349
  index: void 0,
11190
11350
  caseSensitive: void 0,
11191
- module: route36
11351
+ module: route37
11192
11352
  },
11193
11353
  "routes/processes": {
11194
11354
  id: "routes/processes",
@@ -11196,7 +11356,7 @@ const routes = {
11196
11356
  path: "processes",
11197
11357
  index: void 0,
11198
11358
  caseSensitive: void 0,
11199
- module: route37
11359
+ module: route38
11200
11360
  },
11201
11361
  "routes/progress": {
11202
11362
  id: "routes/progress",
@@ -11204,7 +11364,7 @@ const routes = {
11204
11364
  path: "progress",
11205
11365
  index: void 0,
11206
11366
  caseSensitive: void 0,
11207
- module: route38
11367
+ module: route39
11208
11368
  },
11209
11369
  "routes/robots[.]txt": {
11210
11370
  id: "routes/robots[.]txt",
@@ -11212,7 +11372,7 @@ const routes = {
11212
11372
  path: "robots.txt",
11213
11373
  index: void 0,
11214
11374
  caseSensitive: void 0,
11215
- module: route39
11375
+ module: route40
11216
11376
  },
11217
11377
  "routes/set-playground": {
11218
11378
  id: "routes/set-playground",
@@ -11220,7 +11380,7 @@ const routes = {
11220
11380
  path: "set-playground",
11221
11381
  index: void 0,
11222
11382
  caseSensitive: void 0,
11223
- module: route40
11383
+ module: route41
11224
11384
  },
11225
11385
  "routes/sitemap[.]xml": {
11226
11386
  id: "routes/sitemap[.]xml",
@@ -11228,7 +11388,7 @@ const routes = {
11228
11388
  path: "sitemap.xml",
11229
11389
  index: void 0,
11230
11390
  caseSensitive: void 0,
11231
- module: route41
11391
+ module: route42
11232
11392
  },
11233
11393
  "routes/start": {
11234
11394
  id: "routes/start",
@@ -11236,7 +11396,7 @@ const routes = {
11236
11396
  path: "start",
11237
11397
  index: void 0,
11238
11398
  caseSensitive: void 0,
11239
- module: route42
11399
+ module: route43
11240
11400
  },
11241
11401
  "routes/test": {
11242
11402
  id: "routes/test",
@@ -11244,7 +11404,7 @@ const routes = {
11244
11404
  path: "test",
11245
11405
  index: void 0,
11246
11406
  caseSensitive: void 0,
11247
- module: route43
11407
+ module: route44
11248
11408
  },
11249
11409
  "routes/theme/index": {
11250
11410
  id: "routes/theme/index",
@@ -11252,7 +11412,7 @@ const routes = {
11252
11412
  path: "theme",
11253
11413
  index: void 0,
11254
11414
  caseSensitive: void 0,
11255
- module: route44
11415
+ module: route45
11256
11416
  },
11257
11417
  "routes/video-player/index": {
11258
11418
  id: "routes/video-player/index",
@@ -11260,7 +11420,7 @@ const routes = {
11260
11420
  path: "video-player",
11261
11421
  index: void 0,
11262
11422
  caseSensitive: void 0,
11263
- module: route45
11423
+ module: route46
11264
11424
  }
11265
11425
  };
11266
11426
  export {