@epic-web/workshop-app 5.7.1 → 5.8.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 (113) hide show
  1. package/build/client/assets/{_-CjjFMNGC.js → _-Dn1a0zwA.js} +2 -2
  2. package/build/client/assets/{_-CjjFMNGC.js.map → _-Dn1a0zwA.js.map} +1 -1
  3. package/build/client/assets/_exerciseNumber-BVCFK83o.js +2 -0
  4. package/build/client/assets/{_exerciseNumber-CqkGzsgV.js.map → _exerciseNumber-BVCFK83o.js.map} +1 -1
  5. package/build/client/assets/{_exerciseNumber_._stepNumber-BNWGPi9m.js → _exerciseNumber_._stepNumber-CAxJdIJe.js} +2 -2
  6. package/build/client/assets/{_exerciseNumber_._stepNumber-BNWGPi9m.js.map → _exerciseNumber_._stepNumber-CAxJdIJe.js.map} +1 -1
  7. package/build/client/assets/_exerciseNumber_.finished-DYebDhaK.js +2 -0
  8. package/build/client/assets/_exerciseNumber_.finished-DYebDhaK.js.map +1 -0
  9. package/build/client/assets/_layout-CyDc9BN3.js +6 -0
  10. package/build/client/assets/_layout-CyDc9BN3.js.map +1 -0
  11. package/build/client/assets/_layout-cu1Of_4G.js +2 -0
  12. package/build/client/assets/_layout-cu1Of_4G.js.map +1 -0
  13. package/build/client/assets/{accordion-C-sW--in.js → accordion-e-d1HozW.js} +2 -2
  14. package/build/client/assets/{accordion-C-sW--in.js.map → accordion-e-d1HozW.js.map} +1 -1
  15. package/build/client/assets/{account-Cc968svU.js → account-HU5gUm5Q.js} +2 -2
  16. package/build/client/assets/{account-Cc968svU.js.map → account-HU5gUm5Q.js.map} +1 -1
  17. package/build/client/assets/app-CWEUg7hY.js +2 -0
  18. package/build/client/assets/{app-BOqXK9hi.js.map → app-CWEUg7hY.js.map} +1 -1
  19. package/build/client/assets/{button-BS845Tjo.js → button-Hft_V1bH.js} +2 -2
  20. package/build/client/assets/{button-BS845Tjo.js.map → button-Hft_V1bH.js.map} +1 -1
  21. package/build/client/assets/diff-B_FrL8Cl.js +2 -0
  22. package/build/client/assets/diff-B_FrL8Cl.js.map +1 -0
  23. package/build/client/assets/diff-DmVm_N6W.js +2 -0
  24. package/build/client/assets/{diff-D0e_PrB7.js.map → diff-DmVm_N6W.js.map} +1 -1
  25. package/build/client/assets/{discord-BfP_Rny5.js → discord-C0ZkL9cR.js} +2 -2
  26. package/build/client/assets/{discord-BfP_Rny5.js.map → discord-C0ZkL9cR.js.map} +1 -1
  27. package/build/client/assets/discord-D6ZwxiZG.js +2 -0
  28. package/build/client/assets/discord-D6ZwxiZG.js.map +1 -0
  29. package/build/client/assets/{epic-video-qHKPWPt1.js → epic-video-75U1kyqf.js} +121 -121
  30. package/build/client/assets/{epic-video-qHKPWPt1.js.map → epic-video-75U1kyqf.js.map} +1 -1
  31. package/build/client/assets/{error-boundary-Beul7lrT.js → error-boundary-IvG0vuiP.js} +2 -2
  32. package/build/client/assets/{error-boundary-Beul7lrT.js.map → error-boundary-IvG0vuiP.js.map} +1 -1
  33. package/build/client/assets/finished-DDnBGcs8.js +2 -0
  34. package/build/client/assets/finished-DDnBGcs8.js.map +1 -0
  35. package/build/client/assets/{index-BOQWfIQC.js → index-9OWT3nC-.js} +3 -3
  36. package/build/client/assets/{index-BOQWfIQC.js.map → index-9OWT3nC-.js.map} +1 -1
  37. package/build/client/assets/{index-cZQeGrqL.js → index-BzN2y10J.js} +2 -2
  38. package/build/client/assets/{index-cZQeGrqL.js.map → index-BzN2y10J.js.map} +1 -1
  39. package/build/client/assets/index-CQEwwWTS.js +2 -0
  40. package/build/client/assets/{index-oED4uZLa.js.map → index-CQEwwWTS.js.map} +1 -1
  41. package/build/client/assets/index-DJhl_Q5J.js +2 -0
  42. package/build/client/assets/index-DJhl_Q5J.js.map +1 -0
  43. package/build/client/assets/{index-BHwOR8R1.js → index-c1IJ5ZX5.js} +2 -2
  44. package/build/client/assets/{index-BHwOR8R1.js.map → index-c1IJ5ZX5.js.map} +1 -1
  45. package/build/client/assets/{index-BPegC-d3.js → index-t6AA12_S.js} +2 -2
  46. package/build/client/assets/{index-BPegC-d3.js.map → index-t6AA12_S.js.map} +1 -1
  47. package/build/client/assets/{loading-C2wPVvQw.js → loading-DsHhjqzj.js} +2 -2
  48. package/build/client/assets/{loading-C2wPVvQw.js.map → loading-DsHhjqzj.js.map} +1 -1
  49. package/build/client/assets/{login-DoU7gifi.js → login-DJlKIofe.js} +2 -2
  50. package/build/client/assets/{login-DoU7gifi.js.map → login-DJlKIofe.js.map} +1 -1
  51. package/build/client/assets/manifest-3da21166.js +1 -0
  52. package/build/client/assets/{mdx-CsS30JUo.js → mdx-CsRMuEw9.js} +2 -2
  53. package/build/client/assets/{mdx-CsS30JUo.js.map → mdx-CsRMuEw9.js.map} +1 -1
  54. package/build/client/assets/{misc-BtjCSy-T.js → misc-DoGPlBur.js} +2 -2
  55. package/build/client/assets/{misc-BtjCSy-T.js.map → misc-DoGPlBur.js.map} +1 -1
  56. package/build/client/assets/{nav-chevrons-2hLTwAZb.js → nav-chevrons-CxWSSbTo.js} +2 -2
  57. package/build/client/assets/{nav-chevrons-2hLTwAZb.js.map → nav-chevrons-CxWSSbTo.js.map} +1 -1
  58. package/build/client/assets/onboarding-DssP5iXB.js +2 -0
  59. package/build/client/assets/{onboarding-Cu6eD7KS.js.map → onboarding-DssP5iXB.js.map} +1 -1
  60. package/build/client/assets/online-D33oijLr.js +2 -0
  61. package/build/client/assets/online-D33oijLr.js.map +1 -0
  62. package/build/client/assets/{preferences-br0VSK51.js → preferences-BIt5-Lgy.js} +2 -2
  63. package/build/client/assets/{preferences-br0VSK51.js.map → preferences-BIt5-Lgy.js.map} +1 -1
  64. package/build/client/assets/{presence-CrYBA3ta.js → presence-BsqTpSt4.js} +5 -5
  65. package/build/client/assets/{presence-CrYBA3ta.js.map → presence-BsqTpSt4.js.map} +1 -1
  66. package/build/client/assets/{preview-C2y4Z0qO.js → preview-CZwnFQrx.js} +2 -2
  67. package/build/client/assets/{preview-C2y4Z0qO.js.map → preview-CZwnFQrx.js.map} +1 -1
  68. package/build/client/assets/{product-gqq_YQBW.js → product-CVL4Z9c0.js} +2 -2
  69. package/build/client/assets/{product-gqq_YQBW.js.map → product-CVL4Z9c0.js.map} +1 -1
  70. package/build/client/assets/{progress-D-HsH4j3.js → progress-Dj5cyA_v.js} +2 -2
  71. package/build/client/assets/{progress-D-HsH4j3.js.map → progress-Dj5cyA_v.js.map} +1 -1
  72. package/build/client/assets/{progress-bar-CTPCfvDi.js → progress-bar-Dln7epYZ.js} +2 -2
  73. package/build/client/assets/{progress-bar-CTPCfvDi.js.map → progress-bar-Dln7epYZ.js.map} +1 -1
  74. package/build/client/assets/{revalidation-ws-DYaJNyw1.js → revalidation-ws-Bes2l3ma.js} +2 -2
  75. package/build/client/assets/{revalidation-ws-DYaJNyw1.js.map → revalidation-ws-Bes2l3ma.js.map} +1 -1
  76. package/build/client/assets/{root-C1pLsthM.js → root-Bb8fIt2z.js} +3 -3
  77. package/build/client/assets/{root-C1pLsthM.js.map → root-Bb8fIt2z.js.map} +1 -1
  78. package/build/client/assets/{set-playground-DQzAhC0t.js → set-playground-DOFTHWzE.js} +2 -2
  79. package/build/client/assets/{set-playground-DQzAhC0t.js.map → set-playground-DOFTHWzE.js.map} +1 -1
  80. package/build/client/assets/tailwind-4klXLdJc.css +1 -0
  81. package/build/client/assets/test-BwM0E8Mk.js +2 -0
  82. package/build/client/assets/{test-CDWRwwO-.js.map → test-BwM0E8Mk.js.map} +1 -1
  83. package/build/client/assets/{tests-LWW8wCYZ.js → tests-CDgBzBBo.js} +3 -3
  84. package/build/client/assets/tests-CDgBzBBo.js.map +1 -0
  85. package/build/client/assets/{tooltip-Bp9KHnLy.js → tooltip-DT9kZxPw.js} +2 -2
  86. package/build/client/assets/{tooltip-Bp9KHnLy.js.map → tooltip-DT9kZxPw.js.map} +1 -1
  87. package/build/server/index.js +161 -54
  88. package/build/server/index.js.map +1 -1
  89. package/dist/server/index.js +2 -0
  90. package/package.json +3 -3
  91. package/build/client/assets/_exerciseNumber-CqkGzsgV.js +0 -2
  92. package/build/client/assets/_exerciseNumber_.finished-CdNhLhKg.js +0 -2
  93. package/build/client/assets/_exerciseNumber_.finished-CdNhLhKg.js.map +0 -1
  94. package/build/client/assets/_layout-BMa5nZcJ.js +0 -2
  95. package/build/client/assets/_layout-BMa5nZcJ.js.map +0 -1
  96. package/build/client/assets/_layout-Muw3ERYT.js +0 -6
  97. package/build/client/assets/_layout-Muw3ERYT.js.map +0 -1
  98. package/build/client/assets/app-BOqXK9hi.js +0 -2
  99. package/build/client/assets/diff-D0e_PrB7.js +0 -2
  100. package/build/client/assets/diff-DtvfyjPI.js +0 -2
  101. package/build/client/assets/diff-DtvfyjPI.js.map +0 -1
  102. package/build/client/assets/discord-DILzAZN8.js +0 -2
  103. package/build/client/assets/discord-DILzAZN8.js.map +0 -1
  104. package/build/client/assets/finished-DUKfL220.js +0 -2
  105. package/build/client/assets/finished-DUKfL220.js.map +0 -1
  106. package/build/client/assets/index-DbCT6N5p.js +0 -2
  107. package/build/client/assets/index-DbCT6N5p.js.map +0 -1
  108. package/build/client/assets/index-oED4uZLa.js +0 -2
  109. package/build/client/assets/manifest-3096dc61.js +0 -1
  110. package/build/client/assets/onboarding-Cu6eD7KS.js +0 -2
  111. package/build/client/assets/tailwind-CRGTilRc.css +0 -1
  112. package/build/client/assets/test-CDWRwwO-.js +0 -2
  113. package/build/client/assets/tests-LWW8wCYZ.js.map +0 -1
@@ -14,6 +14,7 @@ import { z } from "zod";
14
14
  import { getApps, getExercises, getPlaygroundAppName, extractNumbersAndTypeFromAppNameOrPath, getAppFromFile, getAppByName, isProblemApp, isPlaygroundApp, isExerciseStepApp, getExercise, isSolutionApp, isExampleApp, getRelativePath as getRelativePath$1, workshopRoot, modifiedTimes, getForceFreshForDir, setPlayground, requireExerciseApp, requireExercise, getExerciseApp, getAppDisplayName, getNextExerciseApp, getPrevExerciseApp, getAppPageRoute, getWorkshopFinished, getWorkshopInstructions } from "@epic-web/workshop-utils/apps.server";
15
15
  import { getEnv } from "@epic-web/workshop-utils/env.server";
16
16
  import { makeTimings, getServerTimeHeader, combineServerTimings, time } from "@epic-web/workshop-utils/timing.server";
17
+ import { checkConnectionCached } from "@epic-web/workshop-utils/utils.server";
17
18
  import { cssBundleHref } from "@remix-run/css-bundle";
18
19
  import { promiseHash } from "remix-utils/promise";
19
20
  import { useSpinDelay } from "spin-delay";
@@ -22,7 +23,7 @@ import { ClientOnly } from "remix-utils/client-only";
22
23
  import slugify from "@sindresorhus/slugify";
23
24
  import clsx$1, { clsx } from "clsx";
24
25
  import * as React from "react";
25
- import React__default, { useRef, useEffect, useMemo, useState, createContext, useContext, useCallback, useSyncExternalStore, forwardRef, useImperativeHandle, Suspense, useReducer } from "react";
26
+ import React__default, { useRef, useEffect, useMemo, useState, useSyncExternalStore, createContext, useContext, useCallback, forwardRef, useImperativeHandle, Suspense, useReducer } from "react";
26
27
  import { extendTailwindMerge } from "tailwind-merge";
27
28
  import { Toaster, toast } from "sonner";
28
29
  import * as TooltipPrimitive from "@radix-ui/react-tooltip";
@@ -160,6 +161,7 @@ async function getPresentUsers({
160
161
  request,
161
162
  ttl: 1e3 * 2,
162
163
  swr: 1e3 * 60 * 60 * 24,
164
+ offlineFallbackValue: { users: [] },
163
165
  checkValue: PresenceSchema,
164
166
  async getFreshValue(context) {
165
167
  try {
@@ -385,7 +387,7 @@ const extendedTheme = {
385
387
  background: "hsl(var(--background))",
386
388
  highlight: "hsl(var(--highlight))",
387
389
  foreground: "hsl(var(--foreground))",
388
- "foreground-danger": "hsl(var(--foreground-danger))",
390
+ "foreground-destructive": "hsl(var(--foreground-destructive))",
389
391
  scrollbar: "var(--scrollbar)",
390
392
  primary: {
391
393
  DEFAULT: "hsl(var(--primary))",
@@ -807,7 +809,7 @@ function ErrorList({
807
809
  }) {
808
810
  const errorsToRender = errors == null ? void 0 : errors.filter(Boolean);
809
811
  if (!(errorsToRender == null ? void 0 : errorsToRender.length)) return null;
810
- return /* @__PURE__ */ jsx("ul", { id, className: "space-y-1", children: errorsToRender.map((e) => /* @__PURE__ */ jsx("li", { className: "text-danger text-[10px]", children: e }, e)) });
812
+ return /* @__PURE__ */ jsx("ul", { id, className: "space-y-1", children: errorsToRender.map((e) => /* @__PURE__ */ jsx("li", { className: "text-foreground-destructive text-[10px]", children: e }, e)) });
811
813
  }
812
814
  const PE_REDIRECT_INPUT_NAME = "__PE_redirectTo";
813
815
  function usePERedirectInput() {
@@ -928,7 +930,7 @@ const route45 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
928
930
  useTheme
929
931
  }, Symbol.toStringTag, { value: "Module" }));
930
932
  const appStylesheetUrl = "/assets/app-C3e6tFRf.css";
931
- const tailwindStylesheetUrl = "/assets/tailwind-CRGTilRc.css";
933
+ const tailwindStylesheetUrl = "/assets/tailwind-4klXLdJc.css";
932
934
  const cookieName = "EpicShop_confetti";
933
935
  function getConfetti(request) {
934
936
  const cookieHeader = request.headers.get("cookie");
@@ -946,6 +948,19 @@ function createConfettiHeaders(value = String(Date.now())) {
946
948
  })
947
949
  });
948
950
  }
951
+ function getSnapshot() {
952
+ return window.navigator.onLine;
953
+ }
954
+ function subscribe(callback) {
955
+ window.addEventListener("online", callback);
956
+ return () => {
957
+ window.removeEventListener("online", callback);
958
+ };
959
+ }
960
+ function useIsOnline() {
961
+ const requestInfo = useRequestInfo();
962
+ return useSyncExternalStore(subscribe, getSnapshot, () => requestInfo.online);
963
+ }
949
964
  const PresenceContext = createContext(null);
950
965
  function usePresencePreferences() {
951
966
  var _a;
@@ -987,14 +1002,33 @@ function useFirstCallDelayedCallback(cb, delay) {
987
1002
  );
988
1003
  return delayedCb;
989
1004
  }
990
- function usePresenceSocket(user) {
1005
+ function useUsersLocation() {
991
1006
  const workshopTitle = useOptionalWorkshopTitle();
992
- const { userHasAccess = false, userId } = useRouteLoaderData("root") ?? {};
993
1007
  const requestInfo = useRequestInfo();
994
1008
  const rawParams = useParams();
1009
+ const paramsResult = ExerciseAppParamsSchema.safeParse(rawParams);
1010
+ const params = paramsResult.success ? paramsResult.data : null;
1011
+ return {
1012
+ workshopTitle,
1013
+ origin: requestInfo.origin,
1014
+ ...params ? {
1015
+ exercise: {
1016
+ type: params.type,
1017
+ exerciseNumber: params.exerciseNumber,
1018
+ stepNumber: params.stepNumber
1019
+ }
1020
+ } : null
1021
+ };
1022
+ }
1023
+ function usePresenceSocket(user) {
995
1024
  const prefs = usePresencePreferences();
996
- const data = useRouteLoaderData("root");
997
- const [users, setUsers] = useState((data == null ? void 0 : data.presence.users) ?? []);
1025
+ const {
1026
+ userHasAccess = false,
1027
+ userId,
1028
+ presence
1029
+ } = useRouteLoaderData("root") ?? {};
1030
+ const [users, setUsers] = useState((presence == null ? void 0 : presence.users) ?? []);
1031
+ const usersLocation = useUsersLocation();
998
1032
  const handleMessage = useFirstCallDelayedCallback((evt) => {
999
1033
  const messageResult = MessageSchema.safeParse(JSON.parse(String(evt.data)));
1000
1034
  if (!messageResult.success) return;
@@ -1007,19 +1041,6 @@ function usePresenceSocket(user) {
1007
1041
  room: partykitRoom,
1008
1042
  onMessage: handleMessage
1009
1043
  });
1010
- const paramsResult = ExerciseAppParamsSchema.safeParse(rawParams);
1011
- const params = paramsResult.success ? paramsResult.data : null;
1012
- const location = {
1013
- workshopTitle,
1014
- origin: requestInfo.origin,
1015
- ...params ? {
1016
- exercise: {
1017
- type: params.type,
1018
- exerciseNumber: params.exerciseNumber,
1019
- stepNumber: params.stepNumber
1020
- }
1021
- } : null
1022
- };
1023
1044
  let message = null;
1024
1045
  if (user) {
1025
1046
  if (prefs == null ? void 0 : prefs.optOut) {
@@ -1033,18 +1054,24 @@ function usePresenceSocket(user) {
1033
1054
  hasAccess: userHasAccess,
1034
1055
  imageUrlSmall: user.imageUrlSmall,
1035
1056
  imageUrlLarge: user.imageUrlLarge,
1036
- location
1057
+ location: usersLocation
1037
1058
  }
1038
1059
  };
1039
1060
  }
1040
1061
  } else if (userId == null ? void 0 : userId.id) {
1041
- message = { type: "add-user", payload: { id: userId.id, location } };
1062
+ message = {
1063
+ type: "add-user",
1064
+ payload: { id: userId.id, location: usersLocation }
1065
+ };
1042
1066
  }
1043
1067
  const messageJson = message ? JSON.stringify(message) : null;
1044
1068
  useEffect(() => {
1045
1069
  if (messageJson) socket.send(messageJson);
1046
1070
  }, [messageJson, socket]);
1047
- const scoredUsers = scoreUsers({ id: userId == null ? void 0 : userId.id, location }, users);
1071
+ const scoredUsers = scoreUsers(
1072
+ { id: userId == null ? void 0 : userId.id, location: usersLocation },
1073
+ users
1074
+ );
1048
1075
  return { users: scoredUsers };
1049
1076
  }
1050
1077
  function scoreUsers(user, users) {
@@ -1077,12 +1104,42 @@ function scoreUsers(user, users) {
1077
1104
  return a.score > b.score ? -1 : 1;
1078
1105
  });
1079
1106
  }
1080
- function Presence({
1107
+ function PresenceOnline({
1081
1108
  user,
1082
1109
  children
1083
1110
  }) {
1084
1111
  return /* @__PURE__ */ jsx(PresenceContext.Provider, { value: usePresenceSocket(user), children });
1085
1112
  }
1113
+ function PresenceOffline({
1114
+ user,
1115
+ children
1116
+ }) {
1117
+ const usersLocation = useUsersLocation();
1118
+ const { presence } = useRouteLoaderData("root") ?? {};
1119
+ return /* @__PURE__ */ jsx(
1120
+ PresenceContext.Provider,
1121
+ {
1122
+ value: {
1123
+ users: scoreUsers(
1124
+ { id: user == null ? void 0 : user.id, location: usersLocation },
1125
+ (presence == null ? void 0 : presence.users) ?? []
1126
+ )
1127
+ },
1128
+ children
1129
+ }
1130
+ );
1131
+ }
1132
+ function Presence({
1133
+ user,
1134
+ children
1135
+ }) {
1136
+ const isOnline = useIsOnline();
1137
+ if (isOnline) {
1138
+ return /* @__PURE__ */ jsx(PresenceOnline, { user, children });
1139
+ } else {
1140
+ return /* @__PURE__ */ jsx(PresenceOffline, { user, children });
1141
+ }
1142
+ }
1086
1143
  function usePresence() {
1087
1144
  const presence = useContext(PresenceContext);
1088
1145
  if (!presence) {
@@ -1214,6 +1271,7 @@ async function loader$y({ request }) {
1214
1271
  const theme = getTheme(request);
1215
1272
  const { confettiId, headers: confettiHeaders } = getConfetti(request);
1216
1273
  const { toast: toast2, headers: toastHeaders } = await getToast(request);
1274
+ const isOnlinePromise = checkConnectionCached({ request, timings });
1217
1275
  const asyncStuff = await promiseHash({
1218
1276
  userId: getUserId({ request }),
1219
1277
  preferences: getPreferences(),
@@ -1252,7 +1310,8 @@ async function loader$y({ request }) {
1252
1310
  hints: getHints(request),
1253
1311
  path: new URL(request.url).pathname,
1254
1312
  session: { theme },
1255
- separator: path.sep
1313
+ separator: path.sep,
1314
+ online: await isOnlinePromise
1256
1315
  },
1257
1316
  toast: toast2,
1258
1317
  confettiId,
@@ -1385,10 +1444,10 @@ const route1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProper
1385
1444
  loader: loader$x
1386
1445
  }, Symbol.toStringTag, { value: "Module" }));
1387
1446
  function makeMediaQueryStore(mediaQuery, serverSnapshot) {
1388
- function getSnapshot() {
1447
+ function getSnapshot2() {
1389
1448
  return window.matchMedia(mediaQuery).matches;
1390
1449
  }
1391
- function subscribe(callback) {
1450
+ function subscribe2(callback) {
1392
1451
  const mediaQueryList = window.matchMedia(mediaQuery);
1393
1452
  mediaQueryList.addEventListener("change", callback);
1394
1453
  return () => {
@@ -1396,7 +1455,7 @@ function makeMediaQueryStore(mediaQuery, serverSnapshot) {
1396
1455
  };
1397
1456
  }
1398
1457
  return function useMediaQuery() {
1399
- return useSyncExternalStore(subscribe, getSnapshot, () => serverSnapshot);
1458
+ return useSyncExternalStore(subscribe2, getSnapshot2, () => serverSnapshot);
1400
1459
  };
1401
1460
  }
1402
1461
  function useWorkshopConfig() {
@@ -2196,7 +2255,7 @@ function NoUserBanner() {
2196
2255
  ` for full experience.`
2197
2256
  ] }),
2198
2257
  " "
2199
- ] }) : /* @__PURE__ */ jsxs("div", { children: [
2258
+ ] }) : userHasAccess ? /* @__PURE__ */ jsxs("div", { children: [
2200
2259
  /* @__PURE__ */ jsx(Link, { to: "/login", className: "underline", children: "Login" }),
2201
2260
  " ",
2202
2261
  "or",
@@ -2204,7 +2263,7 @@ function NoUserBanner() {
2204
2263
  /* @__PURE__ */ jsx("a", { href: `https://${host}/login`, className: "underline", children: "join for free" }),
2205
2264
  " ",
2206
2265
  "for the full experience."
2207
- ] }) });
2266
+ ] }) : null });
2208
2267
  return /* @__PURE__ */ jsx("div", { className: "z-10 flex h-16 items-center justify-between border-b bg-gradient-to-tr from-blue-500 to-indigo-500 pl-4 text-white", children: isWide ? /* @__PURE__ */ jsxs(Fragment, { children: [
2209
2268
  /* @__PURE__ */ jsxs("div", { className: "hidden flex-1 flex-wrap items-center gap-4 sm:flex", children: [
2210
2269
  /* @__PURE__ */ jsx(Logo, { size: "lg", style: "monochrome" }),
@@ -2276,7 +2335,7 @@ function NoUserBanner() {
2276
2335
  ] })
2277
2336
  ] })
2278
2337
  ] }),
2279
- /* @__PURE__ */ jsxs("div", { className: "flex h-full items-center", children: [
2338
+ userHasAccess ? null : /* @__PURE__ */ jsxs("div", { className: "flex h-full items-center", children: [
2280
2339
  /* @__PURE__ */ jsxs(
2281
2340
  Link,
2282
2341
  {
@@ -2351,6 +2410,7 @@ function MobileNavigation({
2351
2410
  const user = useOptionalUser();
2352
2411
  const nextExerciseRoute = useNextExerciseRoute();
2353
2412
  const params = useParams();
2413
+ const isOnline = useIsOnline();
2354
2414
  const { users } = usePresence();
2355
2415
  const listVariants = {
2356
2416
  visible: {
@@ -2541,16 +2601,23 @@ function MobileNavigation({
2541
2601
  }
2542
2602
  ),
2543
2603
  /* @__PURE__ */ jsx("div", { className: "flex-grow" }),
2604
+ isOnline ? null : /* @__PURE__ */ jsx(SimpleTooltip, { content: isMenuOpened ? null : "You are offline", children: /* @__PURE__ */ jsx(
2605
+ "div",
2606
+ {
2607
+ className: cn(
2608
+ "flex h-14 animate-pulse items-center justify-start p-4",
2609
+ isMenuOpened ? "w-full border-t" : "border-l"
2610
+ ),
2611
+ children: /* @__PURE__ */ jsx(Icon, { name: "Error", className: "text-foreground-destructive", children: isMenuOpened ? "You are offline" : null })
2612
+ }
2613
+ ) }),
2544
2614
  /* @__PURE__ */ jsx(
2545
2615
  "div",
2546
2616
  {
2547
2617
  className: cn(
2548
2618
  "flex items-center justify-start p-4",
2549
2619
  isMenuOpened && users.length > 4 ? "min-h-14" : "h-14",
2550
- {
2551
- "w-full border-t": isMenuOpened
2552
- // left border is covered by the menu
2553
- }
2620
+ isMenuOpened ? "w-full border-t" : "border-l"
2554
2621
  ),
2555
2622
  children: /* @__PURE__ */ jsx(FacePile, { isMenuOpened })
2556
2623
  }
@@ -2642,6 +2709,7 @@ function Navigation({
2642
2709
  const user = useOptionalUser();
2643
2710
  const nextExerciseRoute = useNextExerciseRoute();
2644
2711
  const params = useParams();
2712
+ const isOnline = useIsOnline();
2645
2713
  const { users } = usePresence();
2646
2714
  const exercise = data2.exercises.find(
2647
2715
  (e) => e.exerciseNumber === Number(params.exerciseNumber)
@@ -2857,6 +2925,16 @@ function Navigation({
2857
2925
  }
2858
2926
  ) : null
2859
2927
  ] }) }),
2928
+ isOnline ? null : /* @__PURE__ */ jsx(SimpleTooltip, { content: isMenuOpened ? null : "You are offline", children: /* @__PURE__ */ jsx(
2929
+ "div",
2930
+ {
2931
+ className: cn(
2932
+ "flex w-full animate-pulse items-center border-t p-4",
2933
+ isMenuOpened ? "justify-start" : "justify-center"
2934
+ ),
2935
+ children: /* @__PURE__ */ jsx(Icon, { name: "Error", className: "text-foreground-destructive", children: /* @__PURE__ */ jsx("span", { className: "whitespace-nowrap", children: isMenuOpened ? "You are offline" : null }) })
2936
+ }
2937
+ ) }),
2860
2938
  /* @__PURE__ */ jsx(
2861
2939
  "div",
2862
2940
  {
@@ -4343,8 +4421,16 @@ function VideoEmbed({
4343
4421
  ] }) })
4344
4422
  }) {
4345
4423
  const [iframeLoaded, setIframeLoaded] = React.useState(false);
4346
- return /* @__PURE__ */ jsxs("div", { className: "relative aspect-video w-full flex-shrink-0 shadow-lg dark:shadow-gray-800", children: [
4347
- iframeLoaded ? null : /* @__PURE__ */ jsx("div", { className: "absolute inset-0 z-10 flex items-center justify-center", children: loadingContent }),
4424
+ const isOnline = useIsOnline();
4425
+ if (!isOnline) {
4426
+ return /* @__PURE__ */ jsx("div", { className: "relative aspect-video w-full flex-shrink-0 shadow-lg", children: /* @__PURE__ */ jsx("div", { className: "not-prose text-foreground-destructive absolute inset-0 z-10 flex items-center justify-center p-8", children: /* @__PURE__ */ jsx(Icon, { name: "Error", size: "xl", children: /* @__PURE__ */ jsxs("span", { children: [
4427
+ "Unable to load the video ",
4428
+ /* @__PURE__ */ jsx("a", { href: url, className: "underline", children: `"${title ?? url}"` }),
4429
+ " when offline"
4430
+ ] }) }) }) });
4431
+ }
4432
+ return /* @__PURE__ */ jsxs("div", { className: "relative aspect-video w-full flex-shrink-0 shadow-lg", children: [
4433
+ iframeLoaded ? null : /* @__PURE__ */ jsx("div", { className: "absolute inset-0 z-10 flex items-center justify-center p-8", children: loadingContent }),
4348
4434
  /* @__PURE__ */ jsx(
4349
4435
  "iframe",
4350
4436
  {
@@ -4436,7 +4522,7 @@ function DeferredEpicVideo({
4436
4522
  } else if (info.type === "region-restricted") {
4437
4523
  return /* @__PURE__ */ jsxs("div", { children: [
4438
4524
  /* @__PURE__ */ jsxs("div", { className: "flex aspect-video min-h-full min-w-full flex-col items-center justify-start gap-2 overflow-y-scroll border-2 p-4 lg:justify-center lg:gap-4 lg:text-xl", children: [
4439
- /* @__PURE__ */ jsx("div", { className: "!text-foreground-danger", children: "Error: Region Restricted" }),
4525
+ /* @__PURE__ */ jsx("div", { className: "!text-foreground-destructive", children: "Error: Region Restricted" }),
4440
4526
  /* @__PURE__ */ jsxs("div", { children: [
4441
4527
  "We've detected you're connecting from",
4442
4528
  " ",
@@ -4518,7 +4604,7 @@ function DeferredEpicVideo({
4518
4604
  /* @__PURE__ */ jsx(EpicVideoEmbed, { url, title }),
4519
4605
  /* @__PURE__ */ jsxs("div", { className: "mt-4 flex flex-col gap-2", children: [
4520
4606
  linkUI,
4521
- /* @__PURE__ */ jsx("div", { className: "!text-foreground-danger", children: "Unknown error (check console)" })
4607
+ /* @__PURE__ */ jsx("div", { className: "!text-foreground-destructive", children: "Unknown error (check console)" })
4522
4608
  ] })
4523
4609
  ] });
4524
4610
  }
@@ -4579,7 +4665,7 @@ function EpicVideo({
4579
4665
  /* @__PURE__ */ jsx("span", { children: transcript.slice(prevIndex + 1, transcript.length) }, transcript.length)
4580
4666
  );
4581
4667
  return /* @__PURE__ */ jsxs("div", { children: [
4582
- /* @__PURE__ */ jsx("div", { className: "shadow-lg dark:shadow-gray-800", children: /* @__PURE__ */ jsx(
4668
+ /* @__PURE__ */ jsx("div", { className: "shadow-lg", children: /* @__PURE__ */ jsx(
4583
4669
  MuxPlayer,
4584
4670
  {
4585
4671
  playbackId: muxPlaybackId,
@@ -6251,7 +6337,7 @@ function SetAppToPlayground({ appName }) {
6251
6337
  {
6252
6338
  appName,
6253
6339
  tooltipText: "Playground is not set to the right app. Click to set Playground.",
6254
- children: /* @__PURE__ */ jsxs("span", { className: "flex items-center justify-center gap-1 text-foreground-danger hover:underline", children: [
6340
+ children: /* @__PURE__ */ jsxs("span", { className: "text-foreground-destructive flex items-center justify-center gap-1 hover:underline", children: [
6255
6341
  /* @__PURE__ */ jsx(Icon, { name: "Unlinked", className: "animate-ping" }),
6256
6342
  " ",
6257
6343
  /* @__PURE__ */ jsx("span", { className: "uppercase", children: "Set to Playground" })
@@ -6518,13 +6604,13 @@ function TouchedFiles({
6518
6604
  Await,
6519
6605
  {
6520
6606
  resolve: diffFilesPromise,
6521
- errorElement: /* @__PURE__ */ jsx("div", { className: "text-foreground-danger", children: "Something went wrong." }),
6607
+ errorElement: /* @__PURE__ */ jsx("div", { className: "text-foreground-destructive", children: "Something went wrong." }),
6522
6608
  children: (diffFiles) => {
6523
6609
  if (!diffFiles) {
6524
- return /* @__PURE__ */ jsx("p", { className: "text-foreground-danger", children: "Unable to determine diff" });
6610
+ return /* @__PURE__ */ jsx("p", { className: "text-foreground-destructive", children: "Unable to determine diff" });
6525
6611
  }
6526
6612
  if (typeof diffFiles === "string") {
6527
- return /* @__PURE__ */ jsx("p", { className: "text-foreground-danger", children: diffFiles });
6613
+ return /* @__PURE__ */ jsx("p", { className: "text-foreground-destructive", children: diffFiles });
6528
6614
  }
6529
6615
  if (!diffFiles.length) {
6530
6616
  return /* @__PURE__ */ jsx("p", { children: "No files changed" });
@@ -7687,7 +7773,7 @@ function Diff({
7687
7773
  Await,
7688
7774
  {
7689
7775
  resolve: diff,
7690
- errorElement: /* @__PURE__ */ jsx("p", { className: "p-6 text-foreground-danger", children: "There was an error calculating the diff. Sorry." }),
7776
+ errorElement: /* @__PURE__ */ jsx("p", { className: "text-foreground-destructive p-6", children: "There was an error calculating the diff. Sorry." }),
7691
7777
  children: (diff2) => /* @__PURE__ */ jsxs("div", { className: "flex h-full w-full flex-col", children: [
7692
7778
  /* @__PURE__ */ jsxs("div", { className: "flex h-14 min-h-14 w-full overflow-x-hidden border-b", children: [
7693
7779
  /* @__PURE__ */ jsx("div", { className: "border-r", children: /* @__PURE__ */ jsx(SimpleTooltip, { content: "Reload diff", children: /* @__PURE__ */ jsx(
@@ -7783,14 +7869,14 @@ function SelectFileToDiff({
7783
7869
  align: "start",
7784
7870
  className: "z-20 max-h-[50vh] bg-black text-white lg:max-h-[70vh]",
7785
7871
  children: [
7786
- /* @__PURE__ */ jsx(Select.ScrollUpButton, { className: "flex h-5 cursor-default items-center justify-center ", children: /* @__PURE__ */ jsx(Icon, { name: "ChevronUp" }) }),
7872
+ /* @__PURE__ */ jsx(Select.ScrollUpButton, { className: "flex h-5 cursor-default items-center justify-center", children: /* @__PURE__ */ jsx(Icon, { name: "ChevronUp" }) }),
7787
7873
  /* @__PURE__ */ jsx(Select.Viewport, { className: "p-3", children: /* @__PURE__ */ jsxs(Select.Group, { children: [
7788
7874
  /* @__PURE__ */ jsx(Select.Label, { className: "px-5 pb-3 font-mono uppercase", children: label }),
7789
7875
  allApps.map((app) => {
7790
7876
  return /* @__PURE__ */ jsx(SelectItem, { value: app.name, children: app.displayName }, app.name);
7791
7877
  })
7792
7878
  ] }) }),
7793
- /* @__PURE__ */ jsx(Select.ScrollDownButton, { className: "flex h-5 cursor-default items-center justify-center ", children: /* @__PURE__ */ jsx(Icon, { name: "ChevronDown" }) })
7879
+ /* @__PURE__ */ jsx(Select.ScrollDownButton, { className: "flex h-5 cursor-default items-center justify-center", children: /* @__PURE__ */ jsx(Icon, { name: "ChevronDown" }) })
7794
7880
  ]
7795
7881
  }
7796
7882
  ) })
@@ -7802,7 +7888,7 @@ const SelectItem = React__default.forwardRef(
7802
7888
  Select.Item,
7803
7889
  {
7804
7890
  className: clsx(
7805
- "relative flex cursor-pointer select-none items-center rounded px-10 py-2 leading-none opacity-80 radix-disabled:text-red-500 radix-highlighted:opacity-100 radix-highlighted:outline-none radix-state-checked:opacity-100",
7891
+ "relative flex cursor-pointer select-none items-center rounded px-10 py-2 leading-none opacity-80 radix-disabled:text-red-500 radix-highlighted:opacity-100 radix-highlighted:outline-none radix-state-checked:opacity-100",
7806
7892
  className
7807
7893
  ),
7808
7894
  ...props,
@@ -7896,6 +7982,7 @@ async function fetchDiscordPosts({ request }) {
7896
7982
  cache: fsCache,
7897
7983
  ttl: 1e3 * 60 * 2,
7898
7984
  swr: 1e3 * 60 * 60 * 24 * 365 * 100,
7985
+ offlineFallbackValue: [],
7899
7986
  checkValue: ThreadDataSchema,
7900
7987
  async getFreshValue() {
7901
7988
  const result = await fetch(url, {
@@ -7942,6 +8029,10 @@ function DiscordPosts() {
7942
8029
  const data = useLoaderData();
7943
8030
  const ctaLink = useDiscordCTALink();
7944
8031
  const altDown = useAltDown();
8032
+ const isOnline = useIsOnline();
8033
+ if (!isOnline) {
8034
+ return /* @__PURE__ */ jsx("div", { className: "flex h-full flex-col items-center justify-between", children: /* @__PURE__ */ jsx("div", { className: "text-foreground-destructive flex h-full w-full flex-col items-center justify-center", children: /* @__PURE__ */ jsx(Icon, { name: "Error", size: "xl", children: "Unable to load discord messages when offline" }) }) });
8035
+ }
7945
8036
  return /* @__PURE__ */ jsxs("div", { className: "flex h-full flex-col items-center justify-between", children: [
7946
8037
  /* @__PURE__ */ jsx(
7947
8038
  React.Suspense,
@@ -8086,7 +8177,7 @@ function PlaygroundWindow({
8086
8177
  {
8087
8178
  size: "xl",
8088
8179
  name: "Unlinked",
8089
- className: "animate-pulse text-foreground-danger"
8180
+ className: "text-foreground-destructive animate-pulse"
8090
8181
  }
8091
8182
  );
8092
8183
  let setPlaygroundTooltipText = "Click to reset Playground.";
@@ -8264,7 +8355,7 @@ function InBrowserTestRunner({
8264
8355
  {
8265
8356
  name: "Remove",
8266
8357
  "aria-label": "Failed",
8267
- className: "text-foreground-danger"
8358
+ className: "text-foreground-destructive"
8268
8359
  }
8269
8360
  ),
8270
8361
  unknown: /* @__PURE__ */ jsx(Icon, { name: "Question", "aria-label": "Unknown", className: "animate-pulse" })
@@ -8294,7 +8385,7 @@ function InBrowserTestRunner({
8294
8385
  /* @__PURE__ */ jsx("pre", { className: "max-h-48 overflow-y-auto p-4 scrollbar-thin scrollbar-thumb-scrollbar", children: testStep.title })
8295
8386
  ] }) }, testStep.timestamp + testStep.title)
8296
8387
  )) }),
8297
- (message == null ? void 0 : message.status) === "fail" ? /* @__PURE__ */ jsxs("div", { className: "flex items-baseline gap-2 text-foreground-danger", children: [
8388
+ (message == null ? void 0 : message.status) === "fail" ? /* @__PURE__ */ jsxs("div", { className: "text-foreground-destructive flex items-baseline gap-2", children: [
8298
8389
  /* @__PURE__ */ jsxs("span", { children: [
8299
8390
  sortedTestSteps.length + 1,
8300
8391
  "."
@@ -9157,7 +9248,7 @@ const headers$5 = ({ loaderHeaders, parentHeaders }) => {
9157
9248
  };
9158
9249
  function TestsList() {
9159
9250
  const { appInfo } = useLoaderData();
9160
- return /* @__PURE__ */ jsx(TestUI, { playgroundAppInfo: appInfo });
9251
+ return /* @__PURE__ */ jsx(TestUI, { playgroundAppInfo: appInfo }, appInfo.name);
9161
9252
  }
9162
9253
  const route18 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
9163
9254
  __proto__: null,
@@ -9345,6 +9436,14 @@ function Survey$1({
9345
9436
  exerciseTitle
9346
9437
  }) {
9347
9438
  const [iframeLoaded, setIframeLoaded] = React.useState(false);
9439
+ const isOnline = useIsOnline();
9440
+ if (!isOnline) {
9441
+ return /* @__PURE__ */ jsx("div", { className: "relative flex-shrink-0", children: /* @__PURE__ */ jsx("div", { className: "text-foreground-destructive absolute inset-0 z-10 flex items-center justify-center text-body-md", children: /* @__PURE__ */ jsx(Icon, { name: "Error", size: "xl", children: /* @__PURE__ */ jsxs("span", { children: [
9442
+ "Unable to load the ",
9443
+ /* @__PURE__ */ jsx("a", { href: exerciseFormEmbedUrl, className: "underline", children: `${exerciseTitle} feedback form` }),
9444
+ " when offline"
9445
+ ] }) }) }) });
9446
+ }
9348
9447
  return /* @__PURE__ */ jsxs("div", { className: "relative min-h-full sm:min-h-[unset] sm:flex-shrink-0", children: [
9349
9448
  !iframeLoaded ? /* @__PURE__ */ jsx("div", { className: "absolute inset-0 z-10 flex items-center justify-center", children: /* @__PURE__ */ jsx(Loading, { children: /* @__PURE__ */ jsxs("span", { children: [
9350
9449
  "Loading ",
@@ -9501,6 +9600,14 @@ function Survey({
9501
9600
  workshopFormEmbedUrl
9502
9601
  }) {
9503
9602
  const [iframeLoaded, setIframeLoaded] = React.useState(false);
9603
+ const isOnline = useIsOnline();
9604
+ if (!isOnline) {
9605
+ return /* @__PURE__ */ jsx("div", { className: "relative flex-shrink-0", children: /* @__PURE__ */ jsx("div", { className: "text-foreground-destructive absolute inset-0 z-10 flex items-center justify-center", children: /* @__PURE__ */ jsx(Icon, { name: "Error", size: "xl", children: /* @__PURE__ */ jsxs("span", { children: [
9606
+ "Unable to load the ",
9607
+ /* @__PURE__ */ jsx("a", { href: workshopFormEmbedUrl, className: "underline", children: `${workshopTitle} feedback form` }),
9608
+ " when offline"
9609
+ ] }) }) }) });
9610
+ }
9504
9611
  return /* @__PURE__ */ jsxs("div", { className: "relative flex-shrink-0", children: [
9505
9612
  !iframeLoaded ? /* @__PURE__ */ jsx("div", { className: "absolute inset-0 z-10 flex items-center justify-center", children: /* @__PURE__ */ jsx(Loading, { children: /* @__PURE__ */ jsxs("span", { children: [
9506
9613
  "Loading ",
@@ -11037,7 +11144,7 @@ const route42 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
11037
11144
  __proto__: null,
11038
11145
  loader
11039
11146
  }, Symbol.toStringTag, { value: "Module" }));
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-C1pLsthM.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-3096dc61.js", "version": "3096dc61" };
11147
+ 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-Bb8fIt2z.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/components-DrvY4pal.js", "/assets/misc-DoGPlBur.js", "/assets/pe-DXT2FOp1.js", "/assets/error-boundary-IvG0vuiP.js", "/assets/progress-bar-Dln7epYZ.js", "/assets/index-CB8bjE90.js", "/assets/tooltip-DT9kZxPw.js", "/assets/index-9OWT3nC-.js", "/assets/presence-BsqTpSt4.js", "/assets/seo-pBpFCWsy.js", "/assets/online-D33oijLr.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/_-Dn1a0zwA.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/error-boundary-IvG0vuiP.js", "/assets/misc-DoGPlBur.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-CyDc9BN3.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/misc-DoGPlBur.js", "/assets/pe-DXT2FOp1.js", "/assets/product-CVL4Z9c0.js", "/assets/revalidation-ws-Bes2l3ma.js", "/assets/tooltip-DT9kZxPw.js", "/assets/index-c1IJ5ZX5.js", "/assets/user-C0j04V55.js", "/assets/workshop-config-oL_FWDKq.js", "/assets/online-D33oijLr.js", "/assets/presence-BsqTpSt4.js", "/assets/progress-Dj5cyA_v.js", "/assets/index-9OWT3nC-.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-HU5gUm5Q.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/button-Hft_V1bH.js", "/assets/misc-DoGPlBur.js", "/assets/tooltip-DT9kZxPw.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-D6ZwxiZG.js", "imports": ["/assets/discord-C0ZkL9cR.js", "/assets/index-CGzylDPY.js", "/assets/misc-DoGPlBur.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-BVCFK83o.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/index-egcHQOpF.js", "/assets/epic-video-75U1kyqf.js", "/assets/revalidation-ws-Bes2l3ma.js", "/assets/mdx-CsRMuEw9.js", "/assets/progress-Dj5cyA_v.js", "/assets/misc-DoGPlBur.js", "/assets/seo-pBpFCWsy.js", "/assets/components-DrvY4pal.js", "/assets/index-9OWT3nC-.js", "/assets/tooltip-DT9kZxPw.js", "/assets/pe-DXT2FOp1.js", "/assets/online-D33oijLr.js", "/assets/loading-DsHhjqzj.js", "/assets/user-C0j04V55.js", "/assets/workshop-config-oL_FWDKq.js", "/assets/progress-bar-Dln7epYZ.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-CAxJdIJe.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/misc-DoGPlBur.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-cu1Of_4G.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/index-egcHQOpF.js", "/assets/error-boundary-IvG0vuiP.js", "/assets/nav-chevrons-CxWSSbTo.js", "/assets/revalidation-ws-Bes2l3ma.js", "/assets/mdx-CsRMuEw9.js", "/assets/progress-Dj5cyA_v.js", "/assets/set-playground-DOFTHWzE.js", "/assets/seo-pBpFCWsy.js", "/assets/misc-DoGPlBur.js", "/assets/epic-video-75U1kyqf.js", "/assets/tooltip-DT9kZxPw.js", "/assets/index-9OWT3nC-.js", "/assets/components-DrvY4pal.js", "/assets/index-c1IJ5ZX5.js", "/assets/progress-bar-Dln7epYZ.js", "/assets/pe-DXT2FOp1.js", "/assets/index-t6AA12_S.js", "/assets/online-D33oijLr.js", "/assets/loading-DsHhjqzj.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-CWEUg7hY.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/preview-CZwnFQrx.js", "/assets/components-DrvY4pal.js", "/assets/misc-DoGPlBur.js", "/assets/index-9OWT3nC-.js", "/assets/tooltip-DT9kZxPw.js", "/assets/pe-DXT2FOp1.js", "/assets/button-Hft_V1bH.js", "/assets/loading-DsHhjqzj.js", "/assets/progress-bar-Dln7epYZ.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-DJhl_Q5J.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/tooltip-DT9kZxPw.js", "/assets/index-t6AA12_S.js", "/assets/misc-DoGPlBur.js", "/assets/diff-B_FrL8Cl.js", "/assets/error-boundary-IvG0vuiP.js", "/assets/loading-DsHhjqzj.js", "/assets/discord-C0ZkL9cR.js", "/assets/online-D33oijLr.js", "/assets/components-DrvY4pal.js", "/assets/index-CB8bjE90.js", "/assets/set-playground-DOFTHWzE.js", "/assets/tests-CDgBzBBo.js", "/assets/preview-CZwnFQrx.js", "/assets/index-c1IJ5ZX5.js", "/assets/accordion-e-d1HozW.js", "/assets/mdx-CsRMuEw9.js", "/assets/epic-video-75U1kyqf.js", "/assets/index-9OWT3nC-.js", "/assets/pe-DXT2FOp1.js", "/assets/user-C0j04V55.js", "/assets/workshop-config-oL_FWDKq.js", "/assets/progress-bar-Dln7epYZ.js", "/assets/revalidation-ws-Bes2l3ma.js", "/assets/use-event-source-AZJtQsFX.js", "/assets/button-Hft_V1bH.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-BwM0E8Mk.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/tests-CDgBzBBo.js", "/assets/components-DrvY4pal.js", "/assets/epic-video-75U1kyqf.js", "/assets/index-9OWT3nC-.js", "/assets/misc-DoGPlBur.js", "/assets/tooltip-DT9kZxPw.js", "/assets/pe-DXT2FOp1.js", "/assets/online-D33oijLr.js", "/assets/loading-DsHhjqzj.js", "/assets/user-C0j04V55.js", "/assets/workshop-config-oL_FWDKq.js", "/assets/accordion-e-d1HozW.js", "/assets/index-t6AA12_S.js", "/assets/index-c1IJ5ZX5.js", "/assets/use-event-source-AZJtQsFX.js", "/assets/set-playground-DOFTHWzE.js", "/assets/progress-bar-Dln7epYZ.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-DYebDhaK.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/index-egcHQOpF.js", "/assets/epic-video-75U1kyqf.js", "/assets/misc-DoGPlBur.js", "/assets/loading-DsHhjqzj.js", "/assets/nav-chevrons-CxWSSbTo.js", "/assets/revalidation-ws-Bes2l3ma.js", "/assets/mdx-CsRMuEw9.js", "/assets/progress-Dj5cyA_v.js", "/assets/online-D33oijLr.js", "/assets/seo-pBpFCWsy.js", "/assets/components-DrvY4pal.js", "/assets/index-9OWT3nC-.js", "/assets/tooltip-DT9kZxPw.js", "/assets/pe-DXT2FOp1.js", "/assets/user-C0j04V55.js", "/assets/workshop-config-oL_FWDKq.js", "/assets/progress-bar-Dln7epYZ.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-DDnBGcs8.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/index-egcHQOpF.js", "/assets/epic-video-75U1kyqf.js", "/assets/misc-DoGPlBur.js", "/assets/loading-DsHhjqzj.js", "/assets/nav-chevrons-CxWSSbTo.js", "/assets/revalidation-ws-Bes2l3ma.js", "/assets/mdx-CsRMuEw9.js", "/assets/online-D33oijLr.js", "/assets/seo-pBpFCWsy.js", "/assets/progress-Dj5cyA_v.js", "/assets/components-DrvY4pal.js", "/assets/index-9OWT3nC-.js", "/assets/tooltip-DT9kZxPw.js", "/assets/pe-DXT2FOp1.js", "/assets/user-C0j04V55.js", "/assets/workshop-config-oL_FWDKq.js", "/assets/progress-bar-Dln7epYZ.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-CQEwwWTS.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/index-egcHQOpF.js", "/assets/epic-video-75U1kyqf.js", "/assets/error-boundary-IvG0vuiP.js", "/assets/mdx-CsRMuEw9.js", "/assets/misc-DoGPlBur.js", "/assets/progress-Dj5cyA_v.js", "/assets/components-DrvY4pal.js", "/assets/index-9OWT3nC-.js", "/assets/tooltip-DT9kZxPw.js", "/assets/pe-DXT2FOp1.js", "/assets/online-D33oijLr.js", "/assets/loading-DsHhjqzj.js", "/assets/user-C0j04V55.js", "/assets/workshop-config-oL_FWDKq.js", "/assets/progress-bar-Dln7epYZ.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-DJlKIofe.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/use-event-source-AZJtQsFX.js", "/assets/button-Hft_V1bH.js", "/assets/loading-DsHhjqzj.js", "/assets/product-CVL4Z9c0.js", "/assets/workshop-config-oL_FWDKq.js", "/assets/index-9OWT3nC-.js", "/assets/components-DrvY4pal.js", "/assets/misc-DoGPlBur.js", "/assets/tooltip-DT9kZxPw.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-BIt5-Lgy.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/button-Hft_V1bH.js", "/assets/misc-DoGPlBur.js", "/assets/tooltip-DT9kZxPw.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-BzN2y10J.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/misc-DoGPlBur.js", "/assets/tooltip-DT9kZxPw.js", "/assets/progress-Dj5cyA_v.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-DmVm_N6W.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/misc-DoGPlBur.js", "/assets/diff-B_FrL8Cl.js", "/assets/nav-chevrons-CxWSSbTo.js", "/assets/components-DrvY4pal.js", "/assets/accordion-e-d1HozW.js", "/assets/tooltip-DT9kZxPw.js", "/assets/index-t6AA12_S.js", "/assets/index-c1IJ5ZX5.js", "/assets/mdx-CsRMuEw9.js", "/assets/epic-video-75U1kyqf.js", "/assets/index-9OWT3nC-.js", "/assets/pe-DXT2FOp1.js", "/assets/online-D33oijLr.js", "/assets/loading-DsHhjqzj.js", "/assets/user-C0j04V55.js", "/assets/workshop-config-oL_FWDKq.js", "/assets/progress-bar-Dln7epYZ.js", "/assets/revalidation-ws-Bes2l3ma.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-DssP5iXB.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/button-Hft_V1bH.js", "/assets/epic-video-75U1kyqf.js", "/assets/components-DrvY4pal.js", "/assets/misc-DoGPlBur.js", "/assets/index-9OWT3nC-.js", "/assets/tooltip-DT9kZxPw.js", "/assets/pe-DXT2FOp1.js", "/assets/online-D33oijLr.js", "/assets/loading-DsHhjqzj.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-3da21166.js", "version": "3da21166" };
11041
11148
  const mode = "production";
11042
11149
  const assetsBuildDirectory = "build/client";
11043
11150
  const basename = "/";