@epic-web/workshop-app 5.7.1 → 5.8.1

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 (114) hide show
  1. package/build/client/assets/{_-CjjFMNGC.js → _-BbjJ9R-5.js} +2 -2
  2. package/build/client/assets/{_-CjjFMNGC.js.map → _-BbjJ9R-5.js.map} +1 -1
  3. package/build/client/assets/_exerciseNumber-BdRxxVY9.js +2 -0
  4. package/build/client/assets/{_exerciseNumber-CqkGzsgV.js.map → _exerciseNumber-BdRxxVY9.js.map} +1 -1
  5. package/build/client/assets/{_exerciseNumber_._stepNumber-BNWGPi9m.js → _exerciseNumber_._stepNumber-CZKDy98j.js} +2 -2
  6. package/build/client/assets/{_exerciseNumber_._stepNumber-BNWGPi9m.js.map → _exerciseNumber_._stepNumber-CZKDy98j.js.map} +1 -1
  7. package/build/client/assets/_exerciseNumber_.finished-zD7Rb_Qp.js +2 -0
  8. package/build/client/assets/_exerciseNumber_.finished-zD7Rb_Qp.js.map +1 -0
  9. package/build/client/assets/_layout-BN0qitsj.js +2 -0
  10. package/build/client/assets/_layout-BN0qitsj.js.map +1 -0
  11. package/build/client/assets/_layout-DMejPY7I.js +6 -0
  12. package/build/client/assets/_layout-DMejPY7I.js.map +1 -0
  13. package/build/client/assets/{accordion-C-sW--in.js → accordion-BL_cX9y6.js} +2 -2
  14. package/build/client/assets/{accordion-C-sW--in.js.map → accordion-BL_cX9y6.js.map} +1 -1
  15. package/build/client/assets/{account-Cc968svU.js → account-C4MWGVQU.js} +2 -2
  16. package/build/client/assets/{account-Cc968svU.js.map → account-C4MWGVQU.js.map} +1 -1
  17. package/build/client/assets/app-srTG3_Hm.js +2 -0
  18. package/build/client/assets/{app-BOqXK9hi.js.map → app-srTG3_Hm.js.map} +1 -1
  19. package/build/client/assets/{button-BS845Tjo.js → button-DhtjxLl5.js} +2 -2
  20. package/build/client/assets/{button-BS845Tjo.js.map → button-DhtjxLl5.js.map} +1 -1
  21. package/build/client/assets/diff-CMHaCmku.js +2 -0
  22. package/build/client/assets/diff-CMHaCmku.js.map +1 -0
  23. package/build/client/assets/diff-CcVqQ39D.js +2 -0
  24. package/build/client/assets/{diff-D0e_PrB7.js.map → diff-CcVqQ39D.js.map} +1 -1
  25. package/build/client/assets/{discord-BfP_Rny5.js → discord-DsGCI_e6.js} +2 -2
  26. package/build/client/assets/{discord-BfP_Rny5.js.map → discord-DsGCI_e6.js.map} +1 -1
  27. package/build/client/assets/discord-tUa_uzeh.js +2 -0
  28. package/build/client/assets/discord-tUa_uzeh.js.map +1 -0
  29. package/build/client/assets/{epic-video-qHKPWPt1.js → epic-video-DbfbYOk7.js} +121 -121
  30. package/build/client/assets/{epic-video-qHKPWPt1.js.map → epic-video-DbfbYOk7.js.map} +1 -1
  31. package/build/client/assets/{error-boundary-Beul7lrT.js → error-boundary-DBVB3BBH.js} +2 -2
  32. package/build/client/assets/{error-boundary-Beul7lrT.js.map → error-boundary-DBVB3BBH.js.map} +1 -1
  33. package/build/client/assets/finished-EOAd0vS7.js +2 -0
  34. package/build/client/assets/finished-EOAd0vS7.js.map +1 -0
  35. package/build/client/assets/{icons-BtWYk6Ws.svg → icons-BM6r7NHK.svg} +9 -0
  36. package/build/client/assets/{index-cZQeGrqL.js → index-BH_SsYHe.js} +2 -2
  37. package/build/client/assets/{index-cZQeGrqL.js.map → index-BH_SsYHe.js.map} +1 -1
  38. package/build/client/assets/{index-BOQWfIQC.js → index-Ba7zHVvt.js} +3 -3
  39. package/build/client/assets/{index-BOQWfIQC.js.map → index-Ba7zHVvt.js.map} +1 -1
  40. package/build/client/assets/index-BoOt6peO.js +2 -0
  41. package/build/client/assets/index-BoOt6peO.js.map +1 -0
  42. package/build/client/assets/index-Bqxmi8_-.js +2 -0
  43. package/build/client/assets/{index-oED4uZLa.js.map → index-Bqxmi8_-.js.map} +1 -1
  44. package/build/client/assets/{index-BHwOR8R1.js → index-CWadM2q_.js} +2 -2
  45. package/build/client/assets/{index-BHwOR8R1.js.map → index-CWadM2q_.js.map} +1 -1
  46. package/build/client/assets/{index-BPegC-d3.js → index-D7-ne3iG.js} +2 -2
  47. package/build/client/assets/{index-BPegC-d3.js.map → index-D7-ne3iG.js.map} +1 -1
  48. package/build/client/assets/{loading-C2wPVvQw.js → loading-ZSC9wgHC.js} +2 -2
  49. package/build/client/assets/{loading-C2wPVvQw.js.map → loading-ZSC9wgHC.js.map} +1 -1
  50. package/build/client/assets/{login-DoU7gifi.js → login-CJfcLXAB.js} +2 -2
  51. package/build/client/assets/{login-DoU7gifi.js.map → login-CJfcLXAB.js.map} +1 -1
  52. package/build/client/assets/manifest-710bbc0c.js +1 -0
  53. package/build/client/assets/{mdx-CsS30JUo.js → mdx-Nz3dsEsr.js} +2 -2
  54. package/build/client/assets/{mdx-CsS30JUo.js.map → mdx-Nz3dsEsr.js.map} +1 -1
  55. package/build/client/assets/{misc-BtjCSy-T.js → misc-D9k1wGip.js} +2 -2
  56. package/build/client/assets/{misc-BtjCSy-T.js.map → misc-D9k1wGip.js.map} +1 -1
  57. package/build/client/assets/{nav-chevrons-2hLTwAZb.js → nav-chevrons-CM-frhig.js} +2 -2
  58. package/build/client/assets/{nav-chevrons-2hLTwAZb.js.map → nav-chevrons-CM-frhig.js.map} +1 -1
  59. package/build/client/assets/onboarding-DhIDoTnn.js +2 -0
  60. package/build/client/assets/{onboarding-Cu6eD7KS.js.map → onboarding-DhIDoTnn.js.map} +1 -1
  61. package/build/client/assets/online-CN5sXlwN.js +2 -0
  62. package/build/client/assets/online-CN5sXlwN.js.map +1 -0
  63. package/build/client/assets/{preferences-br0VSK51.js → preferences-DhTuJwew.js} +2 -2
  64. package/build/client/assets/{preferences-br0VSK51.js.map → preferences-DhTuJwew.js.map} +1 -1
  65. package/build/client/assets/{presence-CrYBA3ta.js → presence-DcXyg7el.js} +5 -5
  66. package/build/client/assets/{presence-CrYBA3ta.js.map → presence-DcXyg7el.js.map} +1 -1
  67. package/build/client/assets/{preview-C2y4Z0qO.js → preview-BhbdVgz0.js} +2 -2
  68. package/build/client/assets/{preview-C2y4Z0qO.js.map → preview-BhbdVgz0.js.map} +1 -1
  69. package/build/client/assets/{product-gqq_YQBW.js → product-DD8nUALO.js} +2 -2
  70. package/build/client/assets/{product-gqq_YQBW.js.map → product-DD8nUALO.js.map} +1 -1
  71. package/build/client/assets/{progress-D-HsH4j3.js → progress-CpALgZbi.js} +2 -2
  72. package/build/client/assets/{progress-D-HsH4j3.js.map → progress-CpALgZbi.js.map} +1 -1
  73. package/build/client/assets/{progress-bar-CTPCfvDi.js → progress-bar-IswLOt8e.js} +2 -2
  74. package/build/client/assets/{progress-bar-CTPCfvDi.js.map → progress-bar-IswLOt8e.js.map} +1 -1
  75. package/build/client/assets/{revalidation-ws-DYaJNyw1.js → revalidation-ws-BIizeOeQ.js} +2 -2
  76. package/build/client/assets/{revalidation-ws-DYaJNyw1.js.map → revalidation-ws-BIizeOeQ.js.map} +1 -1
  77. package/build/client/assets/{root-C1pLsthM.js → root-B3Ez4TJh.js} +3 -3
  78. package/build/client/assets/{root-C1pLsthM.js.map → root-B3Ez4TJh.js.map} +1 -1
  79. package/build/client/assets/{set-playground-DQzAhC0t.js → set-playground-BoPKA2de.js} +2 -2
  80. package/build/client/assets/{set-playground-DQzAhC0t.js.map → set-playground-BoPKA2de.js.map} +1 -1
  81. package/build/client/assets/tailwind-4klXLdJc.css +1 -0
  82. package/build/client/assets/test-B1MpH-AU.js +2 -0
  83. package/build/client/assets/{test-CDWRwwO-.js.map → test-B1MpH-AU.js.map} +1 -1
  84. package/build/client/assets/{tests-LWW8wCYZ.js → tests-oMtvdjmo.js} +3 -3
  85. package/build/client/assets/tests-oMtvdjmo.js.map +1 -0
  86. package/build/client/assets/{tooltip-Bp9KHnLy.js → tooltip-CzrLrLJU.js} +2 -2
  87. package/build/client/assets/{tooltip-Bp9KHnLy.js.map → tooltip-CzrLrLJU.js.map} +1 -1
  88. package/build/server/index.js +178 -55
  89. package/build/server/index.js.map +1 -1
  90. package/dist/server/index.js +2 -0
  91. package/package.json +3 -3
  92. package/build/client/assets/_exerciseNumber-CqkGzsgV.js +0 -2
  93. package/build/client/assets/_exerciseNumber_.finished-CdNhLhKg.js +0 -2
  94. package/build/client/assets/_exerciseNumber_.finished-CdNhLhKg.js.map +0 -1
  95. package/build/client/assets/_layout-BMa5nZcJ.js +0 -2
  96. package/build/client/assets/_layout-BMa5nZcJ.js.map +0 -1
  97. package/build/client/assets/_layout-Muw3ERYT.js +0 -6
  98. package/build/client/assets/_layout-Muw3ERYT.js.map +0 -1
  99. package/build/client/assets/app-BOqXK9hi.js +0 -2
  100. package/build/client/assets/diff-D0e_PrB7.js +0 -2
  101. package/build/client/assets/diff-DtvfyjPI.js +0 -2
  102. package/build/client/assets/diff-DtvfyjPI.js.map +0 -1
  103. package/build/client/assets/discord-DILzAZN8.js +0 -2
  104. package/build/client/assets/discord-DILzAZN8.js.map +0 -1
  105. package/build/client/assets/finished-DUKfL220.js +0 -2
  106. package/build/client/assets/finished-DUKfL220.js.map +0 -1
  107. package/build/client/assets/index-DbCT6N5p.js +0 -2
  108. package/build/client/assets/index-DbCT6N5p.js.map +0 -1
  109. package/build/client/assets/index-oED4uZLa.js +0 -2
  110. package/build/client/assets/manifest-3096dc61.js +0 -1
  111. package/build/client/assets/onboarding-Cu6eD7KS.js +0 -2
  112. package/build/client/assets/tailwind-CRGTilRc.css +0 -1
  113. package/build/client/assets/test-CDWRwwO-.js +0 -2
  114. 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 {
@@ -251,7 +253,7 @@ function Confetti({ id }) {
251
253
  id
252
254
  ) });
253
255
  }
254
- const iconsSvg = "/assets/icons-BtWYk6Ws.svg";
256
+ const iconsSvg = "/assets/icons-BM6r7NHK.svg";
255
257
  function AnimatedBars({
256
258
  title,
257
259
  size = 16,
@@ -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,21 @@ function createConfettiHeaders(value = String(Date.now())) {
946
948
  })
947
949
  });
948
950
  }
951
+ function getSnapshot() {
952
+ return false;
953
+ }
954
+ function subscribe(callback) {
955
+ window.addEventListener("online", callback);
956
+ window.addEventListener("offline", callback);
957
+ return () => {
958
+ window.removeEventListener("online", callback);
959
+ window.removeEventListener("offline", callback);
960
+ };
961
+ }
962
+ function useIsOnline() {
963
+ const requestInfo = useRequestInfo();
964
+ return useSyncExternalStore(subscribe, getSnapshot, () => requestInfo.online);
965
+ }
949
966
  const PresenceContext = createContext(null);
950
967
  function usePresencePreferences() {
951
968
  var _a;
@@ -987,14 +1004,33 @@ function useFirstCallDelayedCallback(cb, delay) {
987
1004
  );
988
1005
  return delayedCb;
989
1006
  }
990
- function usePresenceSocket(user) {
1007
+ function useUsersLocation() {
991
1008
  const workshopTitle = useOptionalWorkshopTitle();
992
- const { userHasAccess = false, userId } = useRouteLoaderData("root") ?? {};
993
1009
  const requestInfo = useRequestInfo();
994
1010
  const rawParams = useParams();
1011
+ const paramsResult = ExerciseAppParamsSchema.safeParse(rawParams);
1012
+ const params = paramsResult.success ? paramsResult.data : null;
1013
+ return {
1014
+ workshopTitle,
1015
+ origin: requestInfo.origin,
1016
+ ...params ? {
1017
+ exercise: {
1018
+ type: params.type,
1019
+ exerciseNumber: params.exerciseNumber,
1020
+ stepNumber: params.stepNumber
1021
+ }
1022
+ } : null
1023
+ };
1024
+ }
1025
+ function usePresenceSocket(user) {
995
1026
  const prefs = usePresencePreferences();
996
- const data = useRouteLoaderData("root");
997
- const [users, setUsers] = useState((data == null ? void 0 : data.presence.users) ?? []);
1027
+ const {
1028
+ userHasAccess = false,
1029
+ userId,
1030
+ presence
1031
+ } = useRouteLoaderData("root") ?? {};
1032
+ const [users, setUsers] = useState((presence == null ? void 0 : presence.users) ?? []);
1033
+ const usersLocation = useUsersLocation();
998
1034
  const handleMessage = useFirstCallDelayedCallback((evt) => {
999
1035
  const messageResult = MessageSchema.safeParse(JSON.parse(String(evt.data)));
1000
1036
  if (!messageResult.success) return;
@@ -1007,19 +1043,6 @@ function usePresenceSocket(user) {
1007
1043
  room: partykitRoom,
1008
1044
  onMessage: handleMessage
1009
1045
  });
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
1046
  let message = null;
1024
1047
  if (user) {
1025
1048
  if (prefs == null ? void 0 : prefs.optOut) {
@@ -1033,18 +1056,24 @@ function usePresenceSocket(user) {
1033
1056
  hasAccess: userHasAccess,
1034
1057
  imageUrlSmall: user.imageUrlSmall,
1035
1058
  imageUrlLarge: user.imageUrlLarge,
1036
- location
1059
+ location: usersLocation
1037
1060
  }
1038
1061
  };
1039
1062
  }
1040
1063
  } else if (userId == null ? void 0 : userId.id) {
1041
- message = { type: "add-user", payload: { id: userId.id, location } };
1064
+ message = {
1065
+ type: "add-user",
1066
+ payload: { id: userId.id, location: usersLocation }
1067
+ };
1042
1068
  }
1043
1069
  const messageJson = message ? JSON.stringify(message) : null;
1044
1070
  useEffect(() => {
1045
1071
  if (messageJson) socket.send(messageJson);
1046
1072
  }, [messageJson, socket]);
1047
- const scoredUsers = scoreUsers({ id: userId == null ? void 0 : userId.id, location }, users);
1073
+ const scoredUsers = scoreUsers(
1074
+ { id: userId == null ? void 0 : userId.id, location: usersLocation },
1075
+ users
1076
+ );
1048
1077
  return { users: scoredUsers };
1049
1078
  }
1050
1079
  function scoreUsers(user, users) {
@@ -1077,12 +1106,42 @@ function scoreUsers(user, users) {
1077
1106
  return a.score > b.score ? -1 : 1;
1078
1107
  });
1079
1108
  }
1080
- function Presence({
1109
+ function PresenceOnline({
1081
1110
  user,
1082
1111
  children
1083
1112
  }) {
1084
1113
  return /* @__PURE__ */ jsx(PresenceContext.Provider, { value: usePresenceSocket(user), children });
1085
1114
  }
1115
+ function PresenceOffline({
1116
+ user,
1117
+ children
1118
+ }) {
1119
+ const usersLocation = useUsersLocation();
1120
+ const { presence } = useRouteLoaderData("root") ?? {};
1121
+ return /* @__PURE__ */ jsx(
1122
+ PresenceContext.Provider,
1123
+ {
1124
+ value: {
1125
+ users: scoreUsers(
1126
+ { id: user == null ? void 0 : user.id, location: usersLocation },
1127
+ (presence == null ? void 0 : presence.users) ?? []
1128
+ )
1129
+ },
1130
+ children
1131
+ }
1132
+ );
1133
+ }
1134
+ function Presence({
1135
+ user,
1136
+ children
1137
+ }) {
1138
+ const isOnline = useIsOnline();
1139
+ if (isOnline) {
1140
+ return /* @__PURE__ */ jsx(PresenceOnline, { user, children });
1141
+ } else {
1142
+ return /* @__PURE__ */ jsx(PresenceOffline, { user, children });
1143
+ }
1144
+ }
1086
1145
  function usePresence() {
1087
1146
  const presence = useContext(PresenceContext);
1088
1147
  if (!presence) {
@@ -1214,6 +1273,7 @@ async function loader$y({ request }) {
1214
1273
  const theme = getTheme(request);
1215
1274
  const { confettiId, headers: confettiHeaders } = getConfetti(request);
1216
1275
  const { toast: toast2, headers: toastHeaders } = await getToast(request);
1276
+ const isOnlinePromise = checkConnectionCached({ request, timings });
1217
1277
  const asyncStuff = await promiseHash({
1218
1278
  userId: getUserId({ request }),
1219
1279
  preferences: getPreferences(),
@@ -1252,7 +1312,8 @@ async function loader$y({ request }) {
1252
1312
  hints: getHints(request),
1253
1313
  path: new URL(request.url).pathname,
1254
1314
  session: { theme },
1255
- separator: path.sep
1315
+ separator: path.sep,
1316
+ online: await isOnlinePromise
1256
1317
  },
1257
1318
  toast: toast2,
1258
1319
  confettiId,
@@ -1385,10 +1446,10 @@ const route1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProper
1385
1446
  loader: loader$x
1386
1447
  }, Symbol.toStringTag, { value: "Module" }));
1387
1448
  function makeMediaQueryStore(mediaQuery, serverSnapshot) {
1388
- function getSnapshot() {
1449
+ function getSnapshot2() {
1389
1450
  return window.matchMedia(mediaQuery).matches;
1390
1451
  }
1391
- function subscribe(callback) {
1452
+ function subscribe2(callback) {
1392
1453
  const mediaQueryList = window.matchMedia(mediaQuery);
1393
1454
  mediaQueryList.addEventListener("change", callback);
1394
1455
  return () => {
@@ -1396,7 +1457,7 @@ function makeMediaQueryStore(mediaQuery, serverSnapshot) {
1396
1457
  };
1397
1458
  }
1398
1459
  return function useMediaQuery() {
1399
- return useSyncExternalStore(subscribe, getSnapshot, () => serverSnapshot);
1460
+ return useSyncExternalStore(subscribe2, getSnapshot2, () => serverSnapshot);
1400
1461
  };
1401
1462
  }
1402
1463
  function useWorkshopConfig() {
@@ -2196,7 +2257,7 @@ function NoUserBanner() {
2196
2257
  ` for full experience.`
2197
2258
  ] }),
2198
2259
  " "
2199
- ] }) : /* @__PURE__ */ jsxs("div", { children: [
2260
+ ] }) : userHasAccess ? /* @__PURE__ */ jsxs("div", { children: [
2200
2261
  /* @__PURE__ */ jsx(Link, { to: "/login", className: "underline", children: "Login" }),
2201
2262
  " ",
2202
2263
  "or",
@@ -2204,7 +2265,7 @@ function NoUserBanner() {
2204
2265
  /* @__PURE__ */ jsx("a", { href: `https://${host}/login`, className: "underline", children: "join for free" }),
2205
2266
  " ",
2206
2267
  "for the full experience."
2207
- ] }) });
2268
+ ] }) : null });
2208
2269
  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
2270
  /* @__PURE__ */ jsxs("div", { className: "hidden flex-1 flex-wrap items-center gap-4 sm:flex", children: [
2210
2271
  /* @__PURE__ */ jsx(Logo, { size: "lg", style: "monochrome" }),
@@ -2276,7 +2337,7 @@ function NoUserBanner() {
2276
2337
  ] })
2277
2338
  ] })
2278
2339
  ] }),
2279
- /* @__PURE__ */ jsxs("div", { className: "flex h-full items-center", children: [
2340
+ userHasAccess ? null : /* @__PURE__ */ jsxs("div", { className: "flex h-full items-center", children: [
2280
2341
  /* @__PURE__ */ jsxs(
2281
2342
  Link,
2282
2343
  {
@@ -2351,6 +2412,7 @@ function MobileNavigation({
2351
2412
  const user = useOptionalUser();
2352
2413
  const nextExerciseRoute = useNextExerciseRoute();
2353
2414
  const params = useParams();
2415
+ const isOnline = useIsOnline();
2354
2416
  const { users } = usePresence();
2355
2417
  const listVariants = {
2356
2418
  visible: {
@@ -2541,16 +2603,30 @@ function MobileNavigation({
2541
2603
  }
2542
2604
  ),
2543
2605
  /* @__PURE__ */ jsx("div", { className: "flex-grow" }),
2606
+ isOnline ? null : /* @__PURE__ */ jsx(SimpleTooltip, { content: isMenuOpened ? null : "You are offline", children: /* @__PURE__ */ jsx(
2607
+ "div",
2608
+ {
2609
+ className: cn(
2610
+ "flex h-14 animate-pulse items-center justify-start p-4",
2611
+ isMenuOpened ? "w-full border-t" : "border-l"
2612
+ ),
2613
+ children: /* @__PURE__ */ jsx(
2614
+ Icon,
2615
+ {
2616
+ name: "WifiNoConnection",
2617
+ className: "text-foreground-destructive",
2618
+ children: isMenuOpened ? "You are offline" : null
2619
+ }
2620
+ )
2621
+ }
2622
+ ) }),
2544
2623
  /* @__PURE__ */ jsx(
2545
2624
  "div",
2546
2625
  {
2547
2626
  className: cn(
2548
2627
  "flex items-center justify-start p-4",
2549
2628
  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
- }
2629
+ isMenuOpened ? "w-full border-t" : "border-l"
2554
2630
  ),
2555
2631
  children: /* @__PURE__ */ jsx(FacePile, { isMenuOpened })
2556
2632
  }
@@ -2642,6 +2718,7 @@ function Navigation({
2642
2718
  const user = useOptionalUser();
2643
2719
  const nextExerciseRoute = useNextExerciseRoute();
2644
2720
  const params = useParams();
2721
+ const isOnline = useIsOnline();
2645
2722
  const { users } = usePresence();
2646
2723
  const exercise = data2.exercises.find(
2647
2724
  (e) => e.exerciseNumber === Number(params.exerciseNumber)
@@ -2857,6 +2934,23 @@ function Navigation({
2857
2934
  }
2858
2935
  ) : null
2859
2936
  ] }) }),
2937
+ isOnline ? null : /* @__PURE__ */ jsx(SimpleTooltip, { content: isMenuOpened ? null : "You are offline", children: /* @__PURE__ */ jsx(
2938
+ "div",
2939
+ {
2940
+ className: cn(
2941
+ "flex w-full animate-pulse items-center border-t p-4",
2942
+ isMenuOpened ? "justify-start" : "justify-center"
2943
+ ),
2944
+ children: /* @__PURE__ */ jsx(
2945
+ Icon,
2946
+ {
2947
+ name: "WifiNoConnection",
2948
+ className: "text-foreground-destructive",
2949
+ children: isMenuOpened ? /* @__PURE__ */ jsx("span", { className: "whitespace-nowrap", children: "You are offline" }) : null
2950
+ }
2951
+ )
2952
+ }
2953
+ ) }),
2860
2954
  /* @__PURE__ */ jsx(
2861
2955
  "div",
2862
2956
  {
@@ -4343,8 +4437,16 @@ function VideoEmbed({
4343
4437
  ] }) })
4344
4438
  }) {
4345
4439
  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 }),
4440
+ const isOnline = useIsOnline();
4441
+ if (!isOnline) {
4442
+ 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: "WifiNoConnection", size: "xl", children: /* @__PURE__ */ jsxs("span", { children: [
4443
+ "Unable to load the video ",
4444
+ /* @__PURE__ */ jsx("a", { href: url, className: "underline", children: `"${title ?? url}"` }),
4445
+ " when offline"
4446
+ ] }) }) }) });
4447
+ }
4448
+ return /* @__PURE__ */ jsxs("div", { className: "relative aspect-video w-full flex-shrink-0 shadow-lg", children: [
4449
+ iframeLoaded ? null : /* @__PURE__ */ jsx("div", { className: "absolute inset-0 z-10 flex items-center justify-center p-8", children: loadingContent }),
4348
4450
  /* @__PURE__ */ jsx(
4349
4451
  "iframe",
4350
4452
  {
@@ -4436,7 +4538,7 @@ function DeferredEpicVideo({
4436
4538
  } else if (info.type === "region-restricted") {
4437
4539
  return /* @__PURE__ */ jsxs("div", { children: [
4438
4540
  /* @__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" }),
4541
+ /* @__PURE__ */ jsx("div", { className: "!text-foreground-destructive", children: "Error: Region Restricted" }),
4440
4542
  /* @__PURE__ */ jsxs("div", { children: [
4441
4543
  "We've detected you're connecting from",
4442
4544
  " ",
@@ -4518,7 +4620,7 @@ function DeferredEpicVideo({
4518
4620
  /* @__PURE__ */ jsx(EpicVideoEmbed, { url, title }),
4519
4621
  /* @__PURE__ */ jsxs("div", { className: "mt-4 flex flex-col gap-2", children: [
4520
4622
  linkUI,
4521
- /* @__PURE__ */ jsx("div", { className: "!text-foreground-danger", children: "Unknown error (check console)" })
4623
+ /* @__PURE__ */ jsx("div", { className: "!text-foreground-destructive", children: "Unknown error (check console)" })
4522
4624
  ] })
4523
4625
  ] });
4524
4626
  }
@@ -4579,7 +4681,7 @@ function EpicVideo({
4579
4681
  /* @__PURE__ */ jsx("span", { children: transcript.slice(prevIndex + 1, transcript.length) }, transcript.length)
4580
4682
  );
4581
4683
  return /* @__PURE__ */ jsxs("div", { children: [
4582
- /* @__PURE__ */ jsx("div", { className: "shadow-lg dark:shadow-gray-800", children: /* @__PURE__ */ jsx(
4684
+ /* @__PURE__ */ jsx("div", { className: "shadow-lg", children: /* @__PURE__ */ jsx(
4583
4685
  MuxPlayer,
4584
4686
  {
4585
4687
  playbackId: muxPlaybackId,
@@ -6251,7 +6353,7 @@ function SetAppToPlayground({ appName }) {
6251
6353
  {
6252
6354
  appName,
6253
6355
  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: [
6356
+ children: /* @__PURE__ */ jsxs("span", { className: "text-foreground-destructive flex items-center justify-center gap-1 hover:underline", children: [
6255
6357
  /* @__PURE__ */ jsx(Icon, { name: "Unlinked", className: "animate-ping" }),
6256
6358
  " ",
6257
6359
  /* @__PURE__ */ jsx("span", { className: "uppercase", children: "Set to Playground" })
@@ -6518,13 +6620,13 @@ function TouchedFiles({
6518
6620
  Await,
6519
6621
  {
6520
6622
  resolve: diffFilesPromise,
6521
- errorElement: /* @__PURE__ */ jsx("div", { className: "text-foreground-danger", children: "Something went wrong." }),
6623
+ errorElement: /* @__PURE__ */ jsx("div", { className: "text-foreground-destructive", children: "Something went wrong." }),
6522
6624
  children: (diffFiles) => {
6523
6625
  if (!diffFiles) {
6524
- return /* @__PURE__ */ jsx("p", { className: "text-foreground-danger", children: "Unable to determine diff" });
6626
+ return /* @__PURE__ */ jsx("p", { className: "text-foreground-destructive", children: "Unable to determine diff" });
6525
6627
  }
6526
6628
  if (typeof diffFiles === "string") {
6527
- return /* @__PURE__ */ jsx("p", { className: "text-foreground-danger", children: diffFiles });
6629
+ return /* @__PURE__ */ jsx("p", { className: "text-foreground-destructive", children: diffFiles });
6528
6630
  }
6529
6631
  if (!diffFiles.length) {
6530
6632
  return /* @__PURE__ */ jsx("p", { children: "No files changed" });
@@ -7687,7 +7789,7 @@ function Diff({
7687
7789
  Await,
7688
7790
  {
7689
7791
  resolve: diff,
7690
- errorElement: /* @__PURE__ */ jsx("p", { className: "p-6 text-foreground-danger", children: "There was an error calculating the diff. Sorry." }),
7792
+ errorElement: /* @__PURE__ */ jsx("p", { className: "text-foreground-destructive p-6", children: "There was an error calculating the diff. Sorry." }),
7691
7793
  children: (diff2) => /* @__PURE__ */ jsxs("div", { className: "flex h-full w-full flex-col", children: [
7692
7794
  /* @__PURE__ */ jsxs("div", { className: "flex h-14 min-h-14 w-full overflow-x-hidden border-b", children: [
7693
7795
  /* @__PURE__ */ jsx("div", { className: "border-r", children: /* @__PURE__ */ jsx(SimpleTooltip, { content: "Reload diff", children: /* @__PURE__ */ jsx(
@@ -7783,14 +7885,14 @@ function SelectFileToDiff({
7783
7885
  align: "start",
7784
7886
  className: "z-20 max-h-[50vh] bg-black text-white lg:max-h-[70vh]",
7785
7887
  children: [
7786
- /* @__PURE__ */ jsx(Select.ScrollUpButton, { className: "flex h-5 cursor-default items-center justify-center ", children: /* @__PURE__ */ jsx(Icon, { name: "ChevronUp" }) }),
7888
+ /* @__PURE__ */ jsx(Select.ScrollUpButton, { className: "flex h-5 cursor-default items-center justify-center", children: /* @__PURE__ */ jsx(Icon, { name: "ChevronUp" }) }),
7787
7889
  /* @__PURE__ */ jsx(Select.Viewport, { className: "p-3", children: /* @__PURE__ */ jsxs(Select.Group, { children: [
7788
7890
  /* @__PURE__ */ jsx(Select.Label, { className: "px-5 pb-3 font-mono uppercase", children: label }),
7789
7891
  allApps.map((app) => {
7790
7892
  return /* @__PURE__ */ jsx(SelectItem, { value: app.name, children: app.displayName }, app.name);
7791
7893
  })
7792
7894
  ] }) }),
7793
- /* @__PURE__ */ jsx(Select.ScrollDownButton, { className: "flex h-5 cursor-default items-center justify-center ", children: /* @__PURE__ */ jsx(Icon, { name: "ChevronDown" }) })
7895
+ /* @__PURE__ */ jsx(Select.ScrollDownButton, { className: "flex h-5 cursor-default items-center justify-center", children: /* @__PURE__ */ jsx(Icon, { name: "ChevronDown" }) })
7794
7896
  ]
7795
7897
  }
7796
7898
  ) })
@@ -7802,7 +7904,7 @@ const SelectItem = React__default.forwardRef(
7802
7904
  Select.Item,
7803
7905
  {
7804
7906
  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",
7907
+ "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
7908
  className
7807
7909
  ),
7808
7910
  ...props,
@@ -7896,6 +7998,7 @@ async function fetchDiscordPosts({ request }) {
7896
7998
  cache: fsCache,
7897
7999
  ttl: 1e3 * 60 * 2,
7898
8000
  swr: 1e3 * 60 * 60 * 24 * 365 * 100,
8001
+ offlineFallbackValue: [],
7899
8002
  checkValue: ThreadDataSchema,
7900
8003
  async getFreshValue() {
7901
8004
  const result = await fetch(url, {
@@ -7942,6 +8045,10 @@ function DiscordPosts() {
7942
8045
  const data = useLoaderData();
7943
8046
  const ctaLink = useDiscordCTALink();
7944
8047
  const altDown = useAltDown();
8048
+ const isOnline = useIsOnline();
8049
+ if (!isOnline) {
8050
+ 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: "WifiNoConnection", size: "xl", children: "Unable to load discord messages when offline" }) }) });
8051
+ }
7945
8052
  return /* @__PURE__ */ jsxs("div", { className: "flex h-full flex-col items-center justify-between", children: [
7946
8053
  /* @__PURE__ */ jsx(
7947
8054
  React.Suspense,
@@ -8086,7 +8193,7 @@ function PlaygroundWindow({
8086
8193
  {
8087
8194
  size: "xl",
8088
8195
  name: "Unlinked",
8089
- className: "animate-pulse text-foreground-danger"
8196
+ className: "text-foreground-destructive animate-pulse"
8090
8197
  }
8091
8198
  );
8092
8199
  let setPlaygroundTooltipText = "Click to reset Playground.";
@@ -8264,7 +8371,7 @@ function InBrowserTestRunner({
8264
8371
  {
8265
8372
  name: "Remove",
8266
8373
  "aria-label": "Failed",
8267
- className: "text-foreground-danger"
8374
+ className: "text-foreground-destructive"
8268
8375
  }
8269
8376
  ),
8270
8377
  unknown: /* @__PURE__ */ jsx(Icon, { name: "Question", "aria-label": "Unknown", className: "animate-pulse" })
@@ -8294,7 +8401,7 @@ function InBrowserTestRunner({
8294
8401
  /* @__PURE__ */ jsx("pre", { className: "max-h-48 overflow-y-auto p-4 scrollbar-thin scrollbar-thumb-scrollbar", children: testStep.title })
8295
8402
  ] }) }, testStep.timestamp + testStep.title)
8296
8403
  )) }),
8297
- (message == null ? void 0 : message.status) === "fail" ? /* @__PURE__ */ jsxs("div", { className: "flex items-baseline gap-2 text-foreground-danger", children: [
8404
+ (message == null ? void 0 : message.status) === "fail" ? /* @__PURE__ */ jsxs("div", { className: "text-foreground-destructive flex items-baseline gap-2", children: [
8298
8405
  /* @__PURE__ */ jsxs("span", { children: [
8299
8406
  sortedTestSteps.length + 1,
8300
8407
  "."
@@ -9157,7 +9264,7 @@ const headers$5 = ({ loaderHeaders, parentHeaders }) => {
9157
9264
  };
9158
9265
  function TestsList() {
9159
9266
  const { appInfo } = useLoaderData();
9160
- return /* @__PURE__ */ jsx(TestUI, { playgroundAppInfo: appInfo });
9267
+ return /* @__PURE__ */ jsx(TestUI, { playgroundAppInfo: appInfo }, appInfo.name);
9161
9268
  }
9162
9269
  const route18 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
9163
9270
  __proto__: null,
@@ -9345,6 +9452,14 @@ function Survey$1({
9345
9452
  exerciseTitle
9346
9453
  }) {
9347
9454
  const [iframeLoaded, setIframeLoaded] = React.useState(false);
9455
+ const isOnline = useIsOnline();
9456
+ if (!isOnline) {
9457
+ 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: "WifiNoConnection", size: "xl", children: /* @__PURE__ */ jsxs("span", { children: [
9458
+ "Unable to load the ",
9459
+ /* @__PURE__ */ jsx("a", { href: exerciseFormEmbedUrl, className: "underline", children: `${exerciseTitle} feedback form` }),
9460
+ " when offline"
9461
+ ] }) }) }) });
9462
+ }
9348
9463
  return /* @__PURE__ */ jsxs("div", { className: "relative min-h-full sm:min-h-[unset] sm:flex-shrink-0", children: [
9349
9464
  !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
9465
  "Loading ",
@@ -9501,6 +9616,14 @@ function Survey({
9501
9616
  workshopFormEmbedUrl
9502
9617
  }) {
9503
9618
  const [iframeLoaded, setIframeLoaded] = React.useState(false);
9619
+ const isOnline = useIsOnline();
9620
+ if (!isOnline) {
9621
+ 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: "WifiNoConnection", size: "xl", children: /* @__PURE__ */ jsxs("span", { children: [
9622
+ "Unable to load the ",
9623
+ /* @__PURE__ */ jsx("a", { href: workshopFormEmbedUrl, className: "underline", children: `${workshopTitle} feedback form` }),
9624
+ " when offline"
9625
+ ] }) }) }) });
9626
+ }
9504
9627
  return /* @__PURE__ */ jsxs("div", { className: "relative flex-shrink-0", children: [
9505
9628
  !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
9629
  "Loading ",
@@ -11037,7 +11160,7 @@ const route42 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
11037
11160
  __proto__: null,
11038
11161
  loader
11039
11162
  }, 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" };
11163
+ 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-B3Ez4TJh.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/components-DrvY4pal.js", "/assets/misc-D9k1wGip.js", "/assets/pe-DXT2FOp1.js", "/assets/error-boundary-DBVB3BBH.js", "/assets/progress-bar-IswLOt8e.js", "/assets/index-CB8bjE90.js", "/assets/tooltip-CzrLrLJU.js", "/assets/index-Ba7zHVvt.js", "/assets/presence-DcXyg7el.js", "/assets/seo-pBpFCWsy.js", "/assets/online-CN5sXlwN.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/_-BbjJ9R-5.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/error-boundary-DBVB3BBH.js", "/assets/misc-D9k1wGip.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-DMejPY7I.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/misc-D9k1wGip.js", "/assets/pe-DXT2FOp1.js", "/assets/product-DD8nUALO.js", "/assets/revalidation-ws-BIizeOeQ.js", "/assets/tooltip-CzrLrLJU.js", "/assets/index-CWadM2q_.js", "/assets/user-C0j04V55.js", "/assets/workshop-config-oL_FWDKq.js", "/assets/online-CN5sXlwN.js", "/assets/presence-DcXyg7el.js", "/assets/progress-CpALgZbi.js", "/assets/index-Ba7zHVvt.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-C4MWGVQU.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/button-DhtjxLl5.js", "/assets/misc-D9k1wGip.js", "/assets/tooltip-CzrLrLJU.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-tUa_uzeh.js", "imports": ["/assets/discord-DsGCI_e6.js", "/assets/index-CGzylDPY.js", "/assets/misc-D9k1wGip.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-BdRxxVY9.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/index-egcHQOpF.js", "/assets/epic-video-DbfbYOk7.js", "/assets/revalidation-ws-BIizeOeQ.js", "/assets/mdx-Nz3dsEsr.js", "/assets/progress-CpALgZbi.js", "/assets/misc-D9k1wGip.js", "/assets/seo-pBpFCWsy.js", "/assets/components-DrvY4pal.js", "/assets/index-Ba7zHVvt.js", "/assets/tooltip-CzrLrLJU.js", "/assets/pe-DXT2FOp1.js", "/assets/online-CN5sXlwN.js", "/assets/loading-ZSC9wgHC.js", "/assets/user-C0j04V55.js", "/assets/workshop-config-oL_FWDKq.js", "/assets/progress-bar-IswLOt8e.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-CZKDy98j.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/misc-D9k1wGip.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-BN0qitsj.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/index-egcHQOpF.js", "/assets/error-boundary-DBVB3BBH.js", "/assets/nav-chevrons-CM-frhig.js", "/assets/revalidation-ws-BIizeOeQ.js", "/assets/mdx-Nz3dsEsr.js", "/assets/progress-CpALgZbi.js", "/assets/set-playground-BoPKA2de.js", "/assets/seo-pBpFCWsy.js", "/assets/misc-D9k1wGip.js", "/assets/epic-video-DbfbYOk7.js", "/assets/tooltip-CzrLrLJU.js", "/assets/index-Ba7zHVvt.js", "/assets/components-DrvY4pal.js", "/assets/index-CWadM2q_.js", "/assets/progress-bar-IswLOt8e.js", "/assets/pe-DXT2FOp1.js", "/assets/index-D7-ne3iG.js", "/assets/online-CN5sXlwN.js", "/assets/loading-ZSC9wgHC.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-srTG3_Hm.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/preview-BhbdVgz0.js", "/assets/components-DrvY4pal.js", "/assets/misc-D9k1wGip.js", "/assets/index-Ba7zHVvt.js", "/assets/tooltip-CzrLrLJU.js", "/assets/pe-DXT2FOp1.js", "/assets/button-DhtjxLl5.js", "/assets/loading-ZSC9wgHC.js", "/assets/progress-bar-IswLOt8e.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-BoOt6peO.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/tooltip-CzrLrLJU.js", "/assets/index-D7-ne3iG.js", "/assets/misc-D9k1wGip.js", "/assets/diff-CMHaCmku.js", "/assets/error-boundary-DBVB3BBH.js", "/assets/loading-ZSC9wgHC.js", "/assets/discord-DsGCI_e6.js", "/assets/online-CN5sXlwN.js", "/assets/components-DrvY4pal.js", "/assets/index-CB8bjE90.js", "/assets/set-playground-BoPKA2de.js", "/assets/tests-oMtvdjmo.js", "/assets/preview-BhbdVgz0.js", "/assets/index-CWadM2q_.js", "/assets/accordion-BL_cX9y6.js", "/assets/mdx-Nz3dsEsr.js", "/assets/epic-video-DbfbYOk7.js", "/assets/index-Ba7zHVvt.js", "/assets/pe-DXT2FOp1.js", "/assets/user-C0j04V55.js", "/assets/workshop-config-oL_FWDKq.js", "/assets/progress-bar-IswLOt8e.js", "/assets/revalidation-ws-BIizeOeQ.js", "/assets/use-event-source-AZJtQsFX.js", "/assets/button-DhtjxLl5.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-B1MpH-AU.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/tests-oMtvdjmo.js", "/assets/components-DrvY4pal.js", "/assets/epic-video-DbfbYOk7.js", "/assets/index-Ba7zHVvt.js", "/assets/misc-D9k1wGip.js", "/assets/tooltip-CzrLrLJU.js", "/assets/pe-DXT2FOp1.js", "/assets/online-CN5sXlwN.js", "/assets/loading-ZSC9wgHC.js", "/assets/user-C0j04V55.js", "/assets/workshop-config-oL_FWDKq.js", "/assets/accordion-BL_cX9y6.js", "/assets/index-D7-ne3iG.js", "/assets/index-CWadM2q_.js", "/assets/use-event-source-AZJtQsFX.js", "/assets/set-playground-BoPKA2de.js", "/assets/progress-bar-IswLOt8e.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-zD7Rb_Qp.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/index-egcHQOpF.js", "/assets/epic-video-DbfbYOk7.js", "/assets/misc-D9k1wGip.js", "/assets/loading-ZSC9wgHC.js", "/assets/nav-chevrons-CM-frhig.js", "/assets/revalidation-ws-BIizeOeQ.js", "/assets/mdx-Nz3dsEsr.js", "/assets/progress-CpALgZbi.js", "/assets/online-CN5sXlwN.js", "/assets/seo-pBpFCWsy.js", "/assets/components-DrvY4pal.js", "/assets/index-Ba7zHVvt.js", "/assets/tooltip-CzrLrLJU.js", "/assets/pe-DXT2FOp1.js", "/assets/user-C0j04V55.js", "/assets/workshop-config-oL_FWDKq.js", "/assets/progress-bar-IswLOt8e.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-EOAd0vS7.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/index-egcHQOpF.js", "/assets/epic-video-DbfbYOk7.js", "/assets/misc-D9k1wGip.js", "/assets/loading-ZSC9wgHC.js", "/assets/nav-chevrons-CM-frhig.js", "/assets/revalidation-ws-BIizeOeQ.js", "/assets/mdx-Nz3dsEsr.js", "/assets/online-CN5sXlwN.js", "/assets/seo-pBpFCWsy.js", "/assets/progress-CpALgZbi.js", "/assets/components-DrvY4pal.js", "/assets/index-Ba7zHVvt.js", "/assets/tooltip-CzrLrLJU.js", "/assets/pe-DXT2FOp1.js", "/assets/user-C0j04V55.js", "/assets/workshop-config-oL_FWDKq.js", "/assets/progress-bar-IswLOt8e.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-Bqxmi8_-.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/index-egcHQOpF.js", "/assets/epic-video-DbfbYOk7.js", "/assets/error-boundary-DBVB3BBH.js", "/assets/mdx-Nz3dsEsr.js", "/assets/misc-D9k1wGip.js", "/assets/progress-CpALgZbi.js", "/assets/components-DrvY4pal.js", "/assets/index-Ba7zHVvt.js", "/assets/tooltip-CzrLrLJU.js", "/assets/pe-DXT2FOp1.js", "/assets/online-CN5sXlwN.js", "/assets/loading-ZSC9wgHC.js", "/assets/user-C0j04V55.js", "/assets/workshop-config-oL_FWDKq.js", "/assets/progress-bar-IswLOt8e.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-CJfcLXAB.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/use-event-source-AZJtQsFX.js", "/assets/button-DhtjxLl5.js", "/assets/loading-ZSC9wgHC.js", "/assets/product-DD8nUALO.js", "/assets/workshop-config-oL_FWDKq.js", "/assets/index-Ba7zHVvt.js", "/assets/components-DrvY4pal.js", "/assets/misc-D9k1wGip.js", "/assets/tooltip-CzrLrLJU.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-DhTuJwew.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/button-DhtjxLl5.js", "/assets/misc-D9k1wGip.js", "/assets/tooltip-CzrLrLJU.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-BH_SsYHe.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/misc-D9k1wGip.js", "/assets/tooltip-CzrLrLJU.js", "/assets/progress-CpALgZbi.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-CcVqQ39D.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/misc-D9k1wGip.js", "/assets/diff-CMHaCmku.js", "/assets/nav-chevrons-CM-frhig.js", "/assets/components-DrvY4pal.js", "/assets/accordion-BL_cX9y6.js", "/assets/tooltip-CzrLrLJU.js", "/assets/index-D7-ne3iG.js", "/assets/index-CWadM2q_.js", "/assets/mdx-Nz3dsEsr.js", "/assets/epic-video-DbfbYOk7.js", "/assets/index-Ba7zHVvt.js", "/assets/pe-DXT2FOp1.js", "/assets/online-CN5sXlwN.js", "/assets/loading-ZSC9wgHC.js", "/assets/user-C0j04V55.js", "/assets/workshop-config-oL_FWDKq.js", "/assets/progress-bar-IswLOt8e.js", "/assets/revalidation-ws-BIizeOeQ.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-DhIDoTnn.js", "imports": ["/assets/index-CGzylDPY.js", "/assets/button-DhtjxLl5.js", "/assets/epic-video-DbfbYOk7.js", "/assets/components-DrvY4pal.js", "/assets/misc-D9k1wGip.js", "/assets/index-Ba7zHVvt.js", "/assets/tooltip-CzrLrLJU.js", "/assets/pe-DXT2FOp1.js", "/assets/online-CN5sXlwN.js", "/assets/loading-ZSC9wgHC.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-710bbc0c.js", "version": "710bbc0c" };
11041
11164
  const mode = "production";
11042
11165
  const assetsBuildDirectory = "build/client";
11043
11166
  const basename = "/";