@epic-web/workshop-app 6.69.1 → 6.71.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 (225) hide show
  1. package/build/client/assets/{_-BnmXymJG.js → _-dWSrc4Ox.js} +2 -2
  2. package/build/client/assets/{_-BnmXymJG.js.map → _-dWSrc4Ox.js.map} +1 -1
  3. package/build/client/assets/{_basePickBy-D6pFkWVF.js → _basePickBy-D77BeQbR.js} +2 -2
  4. package/build/client/assets/{_basePickBy-D6pFkWVF.js.map → _basePickBy-D77BeQbR.js.map} +1 -1
  5. package/build/client/assets/{_baseUniq-BbljtzXr.js → _baseUniq-DTO-tFvD.js} +2 -2
  6. package/build/client/assets/{_baseUniq-BbljtzXr.js.map → _baseUniq-DTO-tFvD.js.map} +1 -1
  7. package/build/client/assets/{_exerciseNumber-77g7-L-x.js → _exerciseNumber-DgMb13KP.js} +2 -2
  8. package/build/client/assets/{_exerciseNumber-77g7-L-x.js.map → _exerciseNumber-DgMb13KP.js.map} +1 -1
  9. package/build/client/assets/{_exerciseNumber_._stepNumber.index-DYb7kg06.js → _exerciseNumber_._stepNumber.index-WLW-sVZ0.js} +2 -2
  10. package/build/client/assets/{_exerciseNumber_._stepNumber.index-DYb7kg06.js.map → _exerciseNumber_._stepNumber.index-WLW-sVZ0.js.map} +1 -1
  11. package/build/client/assets/{_exerciseNumber_.finished-CGoPhVVF.js → _exerciseNumber_.finished-DkAs61X_.js} +2 -2
  12. package/build/client/assets/_exerciseNumber_.finished-DkAs61X_.js.map +1 -0
  13. package/build/client/assets/_extra-fwsy2qkP.js +2 -0
  14. package/build/client/assets/_extra-fwsy2qkP.js.map +1 -0
  15. package/build/client/assets/_layout-BQ8VYaze.js +2 -0
  16. package/build/client/assets/_layout-BQ8VYaze.js.map +1 -0
  17. package/build/client/assets/_layout-DR0LQ06M.js +2 -0
  18. package/build/client/assets/_layout-DR0LQ06M.js.map +1 -0
  19. package/build/client/assets/{accordion-CzXT3k43.js → accordion-CQ7oujC6.js} +2 -2
  20. package/build/client/assets/{accordion-CzXT3k43.js.map → accordion-CQ7oujC6.js.map} +1 -1
  21. package/build/client/assets/{account-Cs3Te0is.js → account-C96cpeZR.js} +2 -2
  22. package/build/client/assets/{account-Cs3Te0is.js.map → account-C96cpeZR.js.map} +1 -1
  23. package/build/client/assets/app-CJniokic.js +2 -0
  24. package/build/client/assets/{app-TcFAQB2o.js.map → app-CJniokic.js.map} +1 -1
  25. package/build/client/assets/{arc-BHxP6xxO.js → arc-ChVm3d4e.js} +2 -2
  26. package/build/client/assets/{arc-BHxP6xxO.js.map → arc-ChVm3d4e.js.map} +1 -1
  27. package/build/client/assets/{architectureDiagram-VXUJARFQ-oEJHJt7x.js → architectureDiagram-VXUJARFQ-DkqyKZ50.js} +2 -2
  28. package/build/client/assets/{architectureDiagram-VXUJARFQ-oEJHJt7x.js.map → architectureDiagram-VXUJARFQ-DkqyKZ50.js.map} +1 -1
  29. package/build/client/assets/{blockDiagram-VD42YOAC-7xzSJqoM.js → blockDiagram-VD42YOAC-Cqa8Z0qT.js} +2 -2
  30. package/build/client/assets/{blockDiagram-VD42YOAC-7xzSJqoM.js.map → blockDiagram-VD42YOAC-Cqa8Z0qT.js.map} +1 -1
  31. package/build/client/assets/{button-CIlVtsau.js → button-Cd-ekki5.js} +2 -2
  32. package/build/client/assets/{button-CIlVtsau.js.map → button-Cd-ekki5.js.map} +1 -1
  33. package/build/client/assets/{c4Diagram-YG6GDRKO-BUdT9rCJ.js → c4Diagram-YG6GDRKO-BHQRSJ1P.js} +2 -2
  34. package/build/client/assets/{c4Diagram-YG6GDRKO-BUdT9rCJ.js.map → c4Diagram-YG6GDRKO-BHQRSJ1P.js.map} +1 -1
  35. package/build/client/assets/{cache-MJu_dqFS.js → cache-CAr50MIB.js} +2 -2
  36. package/build/client/assets/{cache-MJu_dqFS.js.map → cache-CAr50MIB.js.map} +1 -1
  37. package/build/client/assets/channel-B7uExpgv.js +2 -0
  38. package/build/client/assets/{channel-BLJkdd1O.js.map → channel-B7uExpgv.js.map} +1 -1
  39. package/build/client/assets/{chunk-4BX2VUAB-qrzenNNi.js → chunk-4BX2VUAB-BOJM4J9w.js} +2 -2
  40. package/build/client/assets/{chunk-4BX2VUAB-qrzenNNi.js.map → chunk-4BX2VUAB-BOJM4J9w.js.map} +1 -1
  41. package/build/client/assets/{chunk-55IACEB6-BOr0rES3.js → chunk-55IACEB6-CO_GT_87.js} +2 -2
  42. package/build/client/assets/{chunk-55IACEB6-BOr0rES3.js.map → chunk-55IACEB6-CO_GT_87.js.map} +1 -1
  43. package/build/client/assets/{chunk-B4BG7PRW-C2qQTBXm.js → chunk-B4BG7PRW-CqfZTumF.js} +2 -2
  44. package/build/client/assets/{chunk-B4BG7PRW-C2qQTBXm.js.map → chunk-B4BG7PRW-CqfZTumF.js.map} +1 -1
  45. package/build/client/assets/{chunk-DI55MBZ5-CSfEUcAq.js → chunk-DI55MBZ5-CxSXOmoK.js} +2 -2
  46. package/build/client/assets/{chunk-DI55MBZ5-CSfEUcAq.js.map → chunk-DI55MBZ5-CxSXOmoK.js.map} +1 -1
  47. package/build/client/assets/{chunk-FMBD7UC4-CyJoWksV.js → chunk-FMBD7UC4-ChHVMdVq.js} +2 -2
  48. package/build/client/assets/{chunk-FMBD7UC4-CyJoWksV.js.map → chunk-FMBD7UC4-ChHVMdVq.js.map} +1 -1
  49. package/build/client/assets/{chunk-QN33PNHL-BpbvTQdp.js → chunk-QN33PNHL-DKEBwj3f.js} +2 -2
  50. package/build/client/assets/{chunk-QN33PNHL-BpbvTQdp.js.map → chunk-QN33PNHL-DKEBwj3f.js.map} +1 -1
  51. package/build/client/assets/{chunk-QZHKN3VN-C2RN0CtQ.js → chunk-QZHKN3VN-Cu5tuE5n.js} +2 -2
  52. package/build/client/assets/{chunk-QZHKN3VN-C2RN0CtQ.js.map → chunk-QZHKN3VN-Cu5tuE5n.js.map} +1 -1
  53. package/build/client/assets/{chunk-TZMSLE5B-0z8lxtDn.js → chunk-TZMSLE5B-BpvH1fVS.js} +2 -2
  54. package/build/client/assets/{chunk-TZMSLE5B-0z8lxtDn.js.map → chunk-TZMSLE5B-BpvH1fVS.js.map} +1 -1
  55. package/build/client/assets/classDiagram-2ON5EDUG-BjjlpwdW.js +2 -0
  56. package/build/client/assets/{classDiagram-2ON5EDUG-_kfNpv_f.js.map → classDiagram-2ON5EDUG-BjjlpwdW.js.map} +1 -1
  57. package/build/client/assets/classDiagram-v2-WZHVMYZB-BjjlpwdW.js +2 -0
  58. package/build/client/assets/{classDiagram-v2-WZHVMYZB-_kfNpv_f.js.map → classDiagram-v2-WZHVMYZB-BjjlpwdW.js.map} +1 -1
  59. package/build/client/assets/clone-DRkw5ylZ.js +2 -0
  60. package/build/client/assets/{clone-CztDUJhf.js.map → clone-DRkw5ylZ.js.map} +1 -1
  61. package/build/client/assets/{cose-bilkent-S5V4N54A-DQM-J4RL.js → cose-bilkent-S5V4N54A-9tAqXXXx.js} +2 -2
  62. package/build/client/assets/{cose-bilkent-S5V4N54A-DQM-J4RL.js.map → cose-bilkent-S5V4N54A-9tAqXXXx.js.map} +1 -1
  63. package/build/client/assets/{dagre-6UL2VRFP-BdfvKPZ9.js → dagre-6UL2VRFP-DdQahM76.js} +2 -2
  64. package/build/client/assets/{dagre-6UL2VRFP-BdfvKPZ9.js.map → dagre-6UL2VRFP-DdQahM76.js.map} +1 -1
  65. package/build/client/assets/{db-x6v-Uxrh.js → db-DAnX-T3_.js} +2 -2
  66. package/build/client/assets/{db-x6v-Uxrh.js.map → db-DAnX-T3_.js.map} +1 -1
  67. package/build/client/assets/{diagram-PSM6KHXK-CgwBEb3G.js → diagram-PSM6KHXK-D2ghOCFR.js} +2 -2
  68. package/build/client/assets/{diagram-PSM6KHXK-CgwBEb3G.js.map → diagram-PSM6KHXK-D2ghOCFR.js.map} +1 -1
  69. package/build/client/assets/{diagram-QEK2KX5R-DEaXdLXz.js → diagram-QEK2KX5R-CVdPnwKa.js} +2 -2
  70. package/build/client/assets/{diagram-QEK2KX5R-DEaXdLXz.js.map → diagram-QEK2KX5R-CVdPnwKa.js.map} +1 -1
  71. package/build/client/assets/{diagram-S2PKOQOG-Dq5QQWqq.js → diagram-S2PKOQOG-ByHcRNai.js} +2 -2
  72. package/build/client/assets/{diagram-S2PKOQOG-Dq5QQWqq.js.map → diagram-S2PKOQOG-ByHcRNai.js.map} +1 -1
  73. package/build/client/assets/{dialog-DnpUg3VT.js → dialog-CzO65Z5w.js} +3 -3
  74. package/build/client/assets/{dialog-DnpUg3VT.js.map → dialog-CzO65Z5w.js.map} +1 -1
  75. package/build/client/assets/{diff-CxEbhF8Q.js → diff-BhWzqoVN.js} +2 -2
  76. package/build/client/assets/{diff-CxEbhF8Q.js.map → diff-BhWzqoVN.js.map} +1 -1
  77. package/build/client/assets/{diff-eAvgXb3f.js → diff-DC-wn6-x.js} +2 -2
  78. package/build/client/assets/{diff-eAvgXb3f.js.map → diff-DC-wn6-x.js.map} +1 -1
  79. package/build/client/assets/{discord-DlU9y5Iz.js → discord-BJkw0IrB.js} +2 -2
  80. package/build/client/assets/{discord-DlU9y5Iz.js.map → discord-BJkw0IrB.js.map} +1 -1
  81. package/build/client/assets/{discord-CuxZiU8E.js → discord-r3m19sUM.js} +2 -2
  82. package/build/client/assets/discord-r3m19sUM.js.map +1 -0
  83. package/build/client/assets/{epic-video-Bx8Ctiez.js → epic-video-8Hv_HMMr.js} +2 -2
  84. package/build/client/assets/{epic-video-Bx8Ctiez.js.map → epic-video-8Hv_HMMr.js.map} +1 -1
  85. package/build/client/assets/{epic-video-BVcJzJzi.js → epic-video-D0drHmgC.js} +2 -2
  86. package/build/client/assets/{epic-video-BVcJzJzi.js.map → epic-video-D0drHmgC.js.map} +1 -1
  87. package/build/client/assets/{erDiagram-Q2GNP2WA-CW73Zw0q.js → erDiagram-Q2GNP2WA-CBRWzQzK.js} +2 -2
  88. package/build/client/assets/{erDiagram-Q2GNP2WA-CW73Zw0q.js.map → erDiagram-Q2GNP2WA-CBRWzQzK.js.map} +1 -1
  89. package/build/client/assets/{error-boundary-DFBd6s0g.js → error-boundary-DVp6wKiz.js} +2 -2
  90. package/build/client/assets/{error-boundary-DFBd6s0g.js.map → error-boundary-DVp6wKiz.js.map} +1 -1
  91. package/build/client/assets/{finished-CmV4aFjA.js → finished-CiVHAeSV.js} +2 -2
  92. package/build/client/assets/{finished-CmV4aFjA.js.map → finished-CiVHAeSV.js.map} +1 -1
  93. package/build/client/assets/{flowDiagram-NV44I4VS-BbxV9VQf.js → flowDiagram-NV44I4VS-L32__tfK.js} +2 -2
  94. package/build/client/assets/{flowDiagram-NV44I4VS-BbxV9VQf.js.map → flowDiagram-NV44I4VS-L32__tfK.js.map} +1 -1
  95. package/build/client/assets/{ganttDiagram-JELNMOA3-CRBJBlE5.js → ganttDiagram-JELNMOA3-Dpp5PKJc.js} +2 -2
  96. package/build/client/assets/{ganttDiagram-JELNMOA3-CRBJBlE5.js.map → ganttDiagram-JELNMOA3-Dpp5PKJc.js.map} +1 -1
  97. package/build/client/assets/{gitGraphDiagram-NY62KEGX-CU0X3hfs.js → gitGraphDiagram-NY62KEGX-zn4IXANG.js} +2 -2
  98. package/build/client/assets/{gitGraphDiagram-NY62KEGX-CU0X3hfs.js.map → gitGraphDiagram-NY62KEGX-zn4IXANG.js.map} +1 -1
  99. package/build/client/assets/{graph-CEUh1UxC.js → graph-Da5nhwRG.js} +2 -2
  100. package/build/client/assets/{graph-CEUh1UxC.js.map → graph-Da5nhwRG.js.map} +1 -1
  101. package/build/client/assets/guide-Cinib8Ji.js +9 -0
  102. package/build/client/assets/guide-Cinib8Ji.js.map +1 -0
  103. package/build/client/assets/{index-D3zOGeBE.js → index-BKAVQvm5.js} +2 -2
  104. package/build/client/assets/{index-D3zOGeBE.js.map → index-BKAVQvm5.js.map} +1 -1
  105. package/build/client/assets/{index-BOhw3wcM.js → index-CJDOQ1bl.js} +2 -2
  106. package/build/client/assets/{index-BOhw3wcM.js.map → index-CJDOQ1bl.js.map} +1 -1
  107. package/build/client/assets/{index-B-9GR1C2.js → index-C_wcF1aP.js} +2 -2
  108. package/build/client/assets/{index-B-9GR1C2.js.map → index-C_wcF1aP.js.map} +1 -1
  109. package/build/client/assets/{index-BW8stNyh.js → index-CdzVFL-Z.js} +3 -3
  110. package/build/client/assets/{index-BW8stNyh.js.map → index-CdzVFL-Z.js.map} +1 -1
  111. package/build/client/assets/index-CmflCPTU.js +2 -0
  112. package/build/client/assets/index-CmflCPTU.js.map +1 -0
  113. package/build/client/assets/index-DuFMeXSm.js +2 -0
  114. package/build/client/assets/index-DuFMeXSm.js.map +1 -0
  115. package/build/client/assets/index-hhQHCvb9.js +2 -0
  116. package/build/client/assets/{index-EdNV8gTk.js.map → index-hhQHCvb9.js.map} +1 -1
  117. package/build/client/assets/{index-C_KjwKVt.js → index-ynYvVAOK.js} +2 -2
  118. package/build/client/assets/{index-C_KjwKVt.js.map → index-ynYvVAOK.js.map} +1 -1
  119. package/build/client/assets/{infoDiagram-WHAUD3N6-BplcSre1.js → infoDiagram-WHAUD3N6-CToPP1ur.js} +2 -2
  120. package/build/client/assets/{infoDiagram-WHAUD3N6-BplcSre1.js.map → infoDiagram-WHAUD3N6-CToPP1ur.js.map} +1 -1
  121. package/build/client/assets/{journeyDiagram-XKPGCS4Q-yxvCkf49.js → journeyDiagram-XKPGCS4Q-BBRpqEuF.js} +2 -2
  122. package/build/client/assets/{journeyDiagram-XKPGCS4Q-yxvCkf49.js.map → journeyDiagram-XKPGCS4Q-BBRpqEuF.js.map} +1 -1
  123. package/build/client/assets/{kanban-definition-3W4ZIXB7-DFEBMrRH.js → kanban-definition-3W4ZIXB7-CyGlZ-MK.js} +2 -2
  124. package/build/client/assets/{kanban-definition-3W4ZIXB7-DFEBMrRH.js.map → kanban-definition-3W4ZIXB7-CyGlZ-MK.js.map} +1 -1
  125. package/build/client/assets/{launch-editor-B2dmpkaO.js → launch-editor-D2exGfVu.js} +2 -2
  126. package/build/client/assets/{launch-editor-B2dmpkaO.js.map → launch-editor-D2exGfVu.js.map} +1 -1
  127. package/build/client/assets/{layout-CiHrgFnf.js → layout-CUEelucj.js} +2 -2
  128. package/build/client/assets/{layout-CiHrgFnf.js.map → layout-CUEelucj.js.map} +1 -1
  129. package/build/client/assets/{linear-C-81cvJP.js → linear-DzZ9bjHs.js} +2 -2
  130. package/build/client/assets/{linear-C-81cvJP.js.map → linear-DzZ9bjHs.js.map} +1 -1
  131. package/build/client/assets/{loading-CUydCGD3.js → loading-CDNzW5oO.js} +2 -2
  132. package/build/client/assets/{loading-CUydCGD3.js.map → loading-CDNzW5oO.js.map} +1 -1
  133. package/build/client/assets/{login-DvBmP_ce.js → login-mWjVXGbJ.js} +2 -2
  134. package/build/client/assets/{login-DvBmP_ce.js.map → login-mWjVXGbJ.js.map} +1 -1
  135. package/build/client/assets/manifest-970c9ad1.js +1 -0
  136. package/build/client/assets/{mdx-vrch0szL.js → mdx-BzyhMqFg.js} +3 -3
  137. package/build/client/assets/{mdx-vrch0szL.js.map → mdx-BzyhMqFg.js.map} +1 -1
  138. package/build/client/assets/{mermaid.core-D3y7PO8B.js → mermaid.core-BdxLLjl2.js} +5 -5
  139. package/build/client/assets/{mermaid.core-D3y7PO8B.js.map → mermaid.core-BdxLLjl2.js.map} +1 -1
  140. package/build/client/assets/{mindmap-definition-VGOIOE7T-VMZ6ZZlW.js → mindmap-definition-VGOIOE7T-DeKD8ncg.js} +2 -2
  141. package/build/client/assets/{mindmap-definition-VGOIOE7T-VMZ6ZZlW.js.map → mindmap-definition-VGOIOE7T-DeKD8ncg.js.map} +1 -1
  142. package/build/client/assets/{misc-DVYuZMjW.js → misc-W4055b-0.js} +2 -2
  143. package/build/client/assets/{misc-DVYuZMjW.js.map → misc-W4055b-0.js.map} +1 -1
  144. package/build/client/assets/{nav-chevrons-DlNUibJV.js → nav-chevrons-Dk4GtZwQ.js} +2 -2
  145. package/build/client/assets/{nav-chevrons-DlNUibJV.js.map → nav-chevrons-Dk4GtZwQ.js.map} +1 -1
  146. package/build/client/assets/{offline-videos-Do9PBh87.js → offline-videos-BP7_xJkO.js} +2 -2
  147. package/build/client/assets/{offline-videos-Do9PBh87.js.map → offline-videos-BP7_xJkO.js.map} +1 -1
  148. package/build/client/assets/{onboarding-indicator-CVwXz3Cn.js → onboarding-indicator-B-XR90_G.js} +2 -2
  149. package/build/client/assets/{onboarding-indicator-CVwXz3Cn.js.map → onboarding-indicator-B-XR90_G.js.map} +1 -1
  150. package/build/client/assets/{pieDiagram-ADFJNKIX-CKbrBdQs.js → pieDiagram-ADFJNKIX-BQ4sFDrB.js} +2 -2
  151. package/build/client/assets/{pieDiagram-ADFJNKIX-CKbrBdQs.js.map → pieDiagram-ADFJNKIX-BQ4sFDrB.js.map} +1 -1
  152. package/build/client/assets/playground-DmEAkxG1.js +2 -0
  153. package/build/client/assets/playground-DmEAkxG1.js.map +1 -0
  154. package/build/client/assets/{playground-window-D9a7P7rH.js → playground-window-x2mQ5o1O.js} +2 -2
  155. package/build/client/assets/{playground-window-D9a7P7rH.js.map → playground-window-x2mQ5o1O.js.map} +1 -1
  156. package/build/client/assets/{preferences-BCvK10k2.js → preferences-D6HQ5bK1.js} +2 -2
  157. package/build/client/assets/{preferences-BCvK10k2.js.map → preferences-D6HQ5bK1.js.map} +1 -1
  158. package/build/client/assets/{preview-CiDtuQCc.js → preview-fhmjENlm.js} +2 -2
  159. package/build/client/assets/{preview-CiDtuQCc.js.map → preview-fhmjENlm.js.map} +1 -1
  160. package/build/client/assets/{product-GLsnY1u3.js → product-CvyMpYD_.js} +2 -2
  161. package/build/client/assets/{product-GLsnY1u3.js.map → product-CvyMpYD_.js.map} +1 -1
  162. package/build/client/assets/{progress-fKsNxmmt.js → progress-ILaVQtOO.js} +2 -2
  163. package/build/client/assets/{progress-fKsNxmmt.js.map → progress-ILaVQtOO.js.map} +1 -1
  164. package/build/client/assets/{progress-bar-B27isaGl.js → progress-bar-DpWhcyhC.js} +2 -2
  165. package/build/client/assets/{progress-bar-B27isaGl.js.map → progress-bar-DpWhcyhC.js.map} +1 -1
  166. package/build/client/assets/{quadrantDiagram-AYHSOK5B-Bb5EtkPw.js → quadrantDiagram-AYHSOK5B-QnjodHfi.js} +2 -2
  167. package/build/client/assets/{quadrantDiagram-AYHSOK5B-Bb5EtkPw.js.map → quadrantDiagram-AYHSOK5B-QnjodHfi.js.map} +1 -1
  168. package/build/client/assets/{requirementDiagram-UZGBJVZJ-BNsXiFG2.js → requirementDiagram-UZGBJVZJ-mL9Oeda0.js} +2 -2
  169. package/build/client/assets/{requirementDiagram-UZGBJVZJ-BNsXiFG2.js.map → requirementDiagram-UZGBJVZJ-mL9Oeda0.js.map} +1 -1
  170. package/build/client/assets/{root-Ch373D3a.js → root-Bktp3RtN.js} +2 -2
  171. package/build/client/assets/{root-Ch373D3a.js.map → root-Bktp3RtN.js.map} +1 -1
  172. package/build/client/assets/{sankeyDiagram-TZEHDZUN-qlPqhk7P.js → sankeyDiagram-TZEHDZUN-B8_zpQVR.js} +2 -2
  173. package/build/client/assets/{sankeyDiagram-TZEHDZUN-qlPqhk7P.js.map → sankeyDiagram-TZEHDZUN-B8_zpQVR.js.map} +1 -1
  174. package/build/client/assets/{sequenceDiagram-WL72ISMW-C3d31B7K.js → sequenceDiagram-WL72ISMW-BDd5tjuk.js} +2 -2
  175. package/build/client/assets/{sequenceDiagram-WL72ISMW-C3d31B7K.js.map → sequenceDiagram-WL72ISMW-BDd5tjuk.js.map} +1 -1
  176. package/build/client/assets/{set-playground-DeMY9i7p.js → set-playground-BSGwH9dH.js} +2 -2
  177. package/build/client/assets/{set-playground-DeMY9i7p.js.map → set-playground-BSGwH9dH.js.map} +1 -1
  178. package/build/client/assets/{stateDiagram-FKZM4ZOC-C1eIQm_7.js → stateDiagram-FKZM4ZOC-DGPNpRbW.js} +2 -2
  179. package/build/client/assets/{stateDiagram-FKZM4ZOC-C1eIQm_7.js.map → stateDiagram-FKZM4ZOC-DGPNpRbW.js.map} +1 -1
  180. package/build/client/assets/stateDiagram-v2-4FDKWEC3-DxaFuKxL.js +2 -0
  181. package/build/client/assets/{stateDiagram-v2-4FDKWEC3-CAmcrDIS.js.map → stateDiagram-v2-4FDKWEC3-DxaFuKxL.js.map} +1 -1
  182. package/build/client/assets/status-indicator-C6DiLYL5.js +2 -0
  183. package/build/client/assets/status-indicator-C6DiLYL5.js.map +1 -0
  184. package/build/client/assets/tailwind-B97VvnKU.css +1 -0
  185. package/build/client/assets/test-DtQCjBBX.js +2 -0
  186. package/build/client/assets/{test-CdEKoDoS.js.map → test-DtQCjBBX.js.map} +1 -1
  187. package/build/client/assets/{tests-xD9PppmM.js → tests-fDISNsE-.js} +2 -2
  188. package/build/client/assets/{tests-xD9PppmM.js.map → tests-fDISNsE-.js.map} +1 -1
  189. package/build/client/assets/{timeline-definition-IT6M3QCI-Di_ZGPjO.js → timeline-definition-IT6M3QCI-BnMOh0dz.js} +2 -2
  190. package/build/client/assets/{timeline-definition-IT6M3QCI-Di_ZGPjO.js.map → timeline-definition-IT6M3QCI-BnMOh0dz.js.map} +1 -1
  191. package/build/client/assets/{tooltip-Chzzs4KB.js → tooltip-Tlsyx2YO.js} +2 -2
  192. package/build/client/assets/{tooltip-Chzzs4KB.js.map → tooltip-Tlsyx2YO.js.map} +1 -1
  193. package/build/client/assets/{treemap-KMMF4GRG-DZrMUxqR.js → treemap-KMMF4GRG-Ds3XkDP-.js} +2 -2
  194. package/build/client/assets/{treemap-KMMF4GRG-DZrMUxqR.js.map → treemap-KMMF4GRG-Ds3XkDP-.js.map} +1 -1
  195. package/build/client/assets/{workspace-structure-i_5Tiikk.js → workspace-structure-B6Rpl-B2.js} +2 -2
  196. package/build/client/assets/{workspace-structure-i_5Tiikk.js.map → workspace-structure-B6Rpl-B2.js.map} +1 -1
  197. package/build/client/assets/{xychartDiagram-PRI3JC2R-BxuKJVc7.js → xychartDiagram-PRI3JC2R-DH_JPNZp.js} +2 -2
  198. package/build/client/assets/{xychartDiagram-PRI3JC2R-BxuKJVc7.js.map → xychartDiagram-PRI3JC2R-DH_JPNZp.js.map} +1 -1
  199. package/build/server/index.js +690 -114
  200. package/build/server/index.js.map +1 -1
  201. package/package.json +3 -3
  202. package/build/client/assets/_exerciseNumber_.finished-CGoPhVVF.js.map +0 -1
  203. package/build/client/assets/_extra-BZPB_nWQ.js +0 -2
  204. package/build/client/assets/_extra-BZPB_nWQ.js.map +0 -1
  205. package/build/client/assets/_layout-BxQPZuW6.js +0 -2
  206. package/build/client/assets/_layout-BxQPZuW6.js.map +0 -1
  207. package/build/client/assets/_layout-yxOoJ6Yg.js +0 -2
  208. package/build/client/assets/_layout-yxOoJ6Yg.js.map +0 -1
  209. package/build/client/assets/app-TcFAQB2o.js +0 -2
  210. package/build/client/assets/channel-BLJkdd1O.js +0 -2
  211. package/build/client/assets/classDiagram-2ON5EDUG-_kfNpv_f.js +0 -2
  212. package/build/client/assets/classDiagram-v2-WZHVMYZB-_kfNpv_f.js +0 -2
  213. package/build/client/assets/clone-CztDUJhf.js +0 -2
  214. package/build/client/assets/discord-CuxZiU8E.js.map +0 -1
  215. package/build/client/assets/guide-B4wAqzq_.js +0 -9
  216. package/build/client/assets/guide-B4wAqzq_.js.map +0 -1
  217. package/build/client/assets/index-C6vQqVxz.js +0 -2
  218. package/build/client/assets/index-C6vQqVxz.js.map +0 -1
  219. package/build/client/assets/index-EdNV8gTk.js +0 -2
  220. package/build/client/assets/manifest-34df6718.js +0 -1
  221. package/build/client/assets/playground-C_aP_pE8.js +0 -2
  222. package/build/client/assets/playground-C_aP_pE8.js.map +0 -1
  223. package/build/client/assets/stateDiagram-v2-4FDKWEC3-CAmcrDIS.js +0 -2
  224. package/build/client/assets/tailwind-D_K12wB7.css +0 -1
  225. package/build/client/assets/test-CdEKoDoS.js +0 -2
@@ -44,8 +44,10 @@ import { ServerOnly } from "remix-utils/server-only";
44
44
  import * as cookie from "cookie";
45
45
  import { usePartySocket } from "partysocket/react";
46
46
  import { randomUUID } from "crypto";
47
+ import { getProcesses, clearTestProcessEntry, stopPort, closeProcess, runAppDev, waitOnApp, isAppRunning, isPortAvailable, getTestProcessEntry, isTestRunning, runAppTests, getSidecarLogs, restartSidecarProcess } from "@epic-web/workshop-utils/process-manager.server";
47
48
  import { motion, useAnimationControls } from "framer-motion";
48
49
  import { useHydrated } from "remix-utils/use-hydrated";
50
+ import * as PopoverPrimitive from "@radix-ui/react-popover";
49
51
  import path$1 from "path";
50
52
  import etag from "etag";
51
53
  import fsExtra from "fs-extra";
@@ -61,9 +63,7 @@ import { launchEditor } from "@epic-web/workshop-utils/launch-editor.server";
61
63
  import { LRUCache } from "lru-cache";
62
64
  import * as mdxBundler from "mdx-bundler/client/index.js";
63
65
  import { getDiffCode, getDiffFiles } from "@epic-web/workshop-utils/diff.server";
64
- import { clearTestProcessEntry, stopPort, closeProcess, runAppDev, waitOnApp, isAppRunning, isPortAvailable, getTestProcessEntry, isTestRunning, runAppTests, getProcesses } from "@epic-web/workshop-utils/process-manager.server";
65
66
  import * as Select from "@radix-ui/react-select";
66
- import * as Popover from "@radix-ui/react-popover";
67
67
  import * as Tabs from "@radix-ui/react-tabs";
68
68
  import * as Accordion from "@radix-ui/react-accordion";
69
69
  import { ErrorBoundary as ErrorBoundary$9 } from "react-error-boundary";
@@ -1507,7 +1507,9 @@ async function action$j({
1507
1507
  };
1508
1508
  return dataWithPE(request, formData, submission.reply(), responseInit);
1509
1509
  }
1510
- function ThemeSwitch() {
1510
+ function ThemeSwitch({
1511
+ disableTooltip
1512
+ } = {}) {
1511
1513
  const requestInfo = useRequestInfo();
1512
1514
  const peRedirectInput = usePERedirectInput();
1513
1515
  const fetcher = useFetcher();
@@ -1540,6 +1542,13 @@ function ThemeSwitch() {
1540
1542
  title: "System mode"
1541
1543
  })
1542
1544
  };
1545
+ const button = /* @__PURE__ */ jsx("button", {
1546
+ type: "submit",
1547
+ name: "intent",
1548
+ value: "update-theme",
1549
+ className: "flex h-8 w-8 cursor-pointer items-center justify-center",
1550
+ children: modeLabel[mode]
1551
+ });
1543
1552
  return /* @__PURE__ */ jsxs(fetcher.Form, {
1544
1553
  method: "POST",
1545
1554
  action: ROUTE_PATH,
@@ -1550,15 +1559,9 @@ function ThemeSwitch() {
1550
1559
  type: "hidden",
1551
1560
  name: "theme",
1552
1561
  value: nextMode
1553
- }), /* @__PURE__ */ jsx(SimpleTooltip, {
1562
+ }), disableTooltip ? button : /* @__PURE__ */ jsx(SimpleTooltip, {
1554
1563
  content: `Change theme from ${mode} mode`,
1555
- children: /* @__PURE__ */ jsx("button", {
1556
- type: "submit",
1557
- name: "intent",
1558
- value: "update-theme",
1559
- className: "flex h-8 w-8 cursor-pointer items-center justify-center",
1560
- children: modeLabel[mode]
1561
- })
1564
+ children: button
1562
1565
  })]
1563
1566
  }), /* @__PURE__ */ jsx(ErrorList, {
1564
1567
  errors: form.errors,
@@ -1586,7 +1589,7 @@ const route64 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
1586
1589
  useTheme
1587
1590
  }, Symbol.toStringTag, { value: "Module" }));
1588
1591
  const appStylesheetUrl = "/assets/app-BUxWY8xC.css";
1589
- const tailwindStylesheetUrl = "/assets/tailwind-D_K12wB7.css";
1592
+ const tailwindStylesheetUrl = "/assets/tailwind-B97VvnKU.css";
1590
1593
  const cookieName = "EpicShop_confetti";
1591
1594
  function getConfetti(request) {
1592
1595
  const cookieHeader = request.headers.get("cookie");
@@ -2488,6 +2491,68 @@ function useRevalidationWSImpl({ watchPaths }) {
2488
2491
  }, [socketQuery, socketPath]);
2489
2492
  }
2490
2493
  const useRevalidationWS = ENV.EPICSHOP_DEPLOYED ? () => null : useRevalidationWSImpl;
2494
+ function StatusIndicator({
2495
+ status
2496
+ }) {
2497
+ const colors = {
2498
+ running: {
2499
+ pinger: "bg-yellow-500/60",
2500
+ circle: "bg-yellow-500"
2501
+ },
2502
+ passed: {
2503
+ circle: "bg-success"
2504
+ },
2505
+ failed: {
2506
+ circle: "bg-destructive"
2507
+ },
2508
+ stopped: {
2509
+ circle: "bg-muted-foreground"
2510
+ }
2511
+ }[status];
2512
+ return /* @__PURE__ */ jsxs("span", { className: "relative flex h-3 w-3", children: [
2513
+ colors.pinger ? /* @__PURE__ */ jsx(
2514
+ "span",
2515
+ {
2516
+ className: `absolute inline-flex h-full w-full animate-ping rounded-full ${colors.pinger} opacity-75`
2517
+ }
2518
+ ) : null,
2519
+ /* @__PURE__ */ jsx(
2520
+ "span",
2521
+ {
2522
+ className: `relative inline-flex h-3 w-3 rounded-full ${colors.circle}`
2523
+ }
2524
+ )
2525
+ ] });
2526
+ }
2527
+ function Popover({
2528
+ ...props
2529
+ }) {
2530
+ return /* @__PURE__ */ jsx(PopoverPrimitive.Root, { ...props });
2531
+ }
2532
+ function PopoverTrigger({
2533
+ ...props
2534
+ }) {
2535
+ return /* @__PURE__ */ jsx(PopoverPrimitive.Trigger, { ...props });
2536
+ }
2537
+ function PopoverContent({
2538
+ className,
2539
+ align = "center",
2540
+ sideOffset = 4,
2541
+ ...props
2542
+ }) {
2543
+ return /* @__PURE__ */ jsx(PopoverPrimitive.Portal, { children: /* @__PURE__ */ jsx(
2544
+ PopoverPrimitive.Content,
2545
+ {
2546
+ align,
2547
+ sideOffset,
2548
+ className: cn(
2549
+ "bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 rounded-md border p-2 shadow-md outline-none",
2550
+ className
2551
+ ),
2552
+ ...props
2553
+ }
2554
+ ) });
2555
+ }
2491
2556
  function useOptionalUser() {
2492
2557
  const data2 = useRootLoaderData();
2493
2558
  return data2.user;
@@ -2570,6 +2635,44 @@ function useNextExerciseRoute() {
2570
2635
  }
2571
2636
  return null;
2572
2637
  }
2638
+ function useRandomCompletedExerciseRoute() {
2639
+ const location = useLocation();
2640
+ const progress = useEpicProgress();
2641
+ const [randomRoute, setRandomRoute] = React.useState(null);
2642
+ React.useEffect(() => {
2643
+ if (!progress) {
2644
+ setRandomRoute(null);
2645
+ return;
2646
+ }
2647
+ const completedSteps = progress.filter((p) => p.type === "step" && p.epicCompletedAt);
2648
+ if (completedSteps.length < 2) {
2649
+ setRandomRoute(null);
2650
+ return;
2651
+ }
2652
+ const currentPath = location.pathname;
2653
+ const availableSteps = completedSteps.filter((step) => {
2654
+ if (step.type !== "step") return false;
2655
+ const ex2 = step.exerciseNumber.toString().padStart(2, "0");
2656
+ const st2 = step.stepNumber.toString().padStart(2, "0");
2657
+ const problemRoute = `/exercise/${ex2}/${st2}/problem`;
2658
+ const solutionRoute = `/exercise/${ex2}/${st2}/solution`;
2659
+ return currentPath !== problemRoute && currentPath !== solutionRoute;
2660
+ });
2661
+ if (availableSteps.length === 0) {
2662
+ setRandomRoute(null);
2663
+ return;
2664
+ }
2665
+ const randomStep = availableSteps[Math.floor(Math.random() * availableSteps.length)];
2666
+ if (!randomStep || randomStep.type !== "step") {
2667
+ setRandomRoute(null);
2668
+ return;
2669
+ }
2670
+ const ex = randomStep.exerciseNumber.toString().padStart(2, "0");
2671
+ const st = randomStep.stepNumber.toString().padStart(2, "0");
2672
+ setRandomRoute(`/exercise/${ex}/${st}/problem`);
2673
+ }, [progress, location.pathname]);
2674
+ return randomRoute;
2675
+ }
2573
2676
  const percentageClassNames = {
2574
2677
  0: "",
2575
2678
  1: "before:h-[10%]",
@@ -2762,8 +2865,29 @@ const route52 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
2762
2865
  useNextExerciseRoute,
2763
2866
  useProgressItem,
2764
2867
  useProgressItemClassName,
2868
+ useRandomCompletedExerciseRoute,
2765
2869
  useRequireEpicProgress
2766
2870
  }, Symbol.toStringTag, { value: "Module" }));
2871
+ function getSidecarStatus() {
2872
+ const {
2873
+ sidecarProcesses
2874
+ } = getProcesses();
2875
+ if (sidecarProcesses.size === 0) return null;
2876
+ const processes = Array.from(sidecarProcesses.entries()).map(([name, {
2877
+ process: process2
2878
+ }]) => ({
2879
+ name,
2880
+ running: process2.exitCode === null
2881
+ }));
2882
+ const hasFailure = processes.some((p) => !p.running);
2883
+ const failureCount = processes.filter((p) => !p.running).length;
2884
+ return {
2885
+ processes,
2886
+ hasFailure,
2887
+ count: processes.length,
2888
+ failureCount
2889
+ };
2890
+ }
2767
2891
  async function loader$I({
2768
2892
  request
2769
2893
  }) {
@@ -2785,6 +2909,7 @@ async function loader$I({
2785
2909
  stepNumber: Number(playgroundNumbersAndType?.stepNumber),
2786
2910
  type: playgroundNumbersAndType?.type
2787
2911
  };
2912
+ const sidecarStatus = getSidecarStatus();
2788
2913
  const result = data({
2789
2914
  workshopTitle,
2790
2915
  exercises: exercises.map((e) => ({
@@ -2835,7 +2960,8 @@ async function loader$I({
2835
2960
  name: extra.name
2836
2961
  })),
2837
2962
  playground,
2838
- isMenuOpened: request.headers.get("cookie")?.includes("es_menu_open=true") ?? false
2963
+ isMenuOpened: request.headers.get("cookie")?.includes("es_menu_open=true") ?? false,
2964
+ sidecarStatus
2839
2965
  }, {
2840
2966
  headers: {
2841
2967
  Vary: "Cookie",
@@ -3297,6 +3423,7 @@ function MobileNavigation({
3297
3423
  const apps = useApps();
3298
3424
  const user = useOptionalUser();
3299
3425
  const nextExerciseRoute = useNextExerciseRoute();
3426
+ const randomExerciseRoute = useRandomCompletedExerciseRoute();
3300
3427
  const params = useParams();
3301
3428
  const location = useLocation();
3302
3429
  const isOnline = useIsOnline();
@@ -3321,6 +3448,18 @@ function MobileNavigation({
3321
3448
  opacity: 0
3322
3449
  }
3323
3450
  };
3451
+ React.useCallback(() => {
3452
+ if (typeof window === "undefined") return;
3453
+ window.dispatchEvent(new CustomEvent("toggle-keyboard-shortcuts"));
3454
+ }, []);
3455
+ const requestInfo = useRequestInfo();
3456
+ const currentTheme = requestInfo.session.theme ?? "system";
3457
+ const themeLabel = {
3458
+ light: "Light",
3459
+ dark: "Dark",
3460
+ system: "System"
3461
+ }[currentTheme];
3462
+ const [isMobilePopoverOpen, setIsMobilePopoverOpen] = React.useState(false);
3324
3463
  return /* @__PURE__ */ jsx("nav", {
3325
3464
  className: "flex w-full border-b sm:hidden",
3326
3465
  children: /* @__PURE__ */ jsx("div", {
@@ -3574,18 +3713,127 @@ function MobileNavigation({
3574
3713
  children: "Continue to next lesson"
3575
3714
  })]
3576
3715
  })
3716
+ }) : null, ENV.EPICSHOP_DEPLOYED ? null : user && randomExerciseRoute ? /* @__PURE__ */ jsx(SimpleTooltip, {
3717
+ content: isMenuOpened ? null : "Practice a past lesson",
3718
+ children: /* @__PURE__ */ jsxs(Link, {
3719
+ to: randomExerciseRoute,
3720
+ prefetch: "intent",
3721
+ className: clsx("flex h-14 w-full items-center space-x-3 border-l px-4 py-4 pl-[18px] no-underline hover:underline"),
3722
+ children: [/* @__PURE__ */ jsx(Icon, {
3723
+ name: "Refresh",
3724
+ className: "shrink-0",
3725
+ size: "md"
3726
+ }), isMenuOpened ? /* @__PURE__ */ jsx(motion.div, {
3727
+ className: "flex items-center whitespace-nowrap",
3728
+ initial: {
3729
+ opacity: 0
3730
+ },
3731
+ animate: {
3732
+ opacity: 1
3733
+ },
3734
+ children: "Practice a past lesson"
3735
+ }) : /* @__PURE__ */ jsx("span", {
3736
+ className: "sr-only",
3737
+ children: "Practice a past lesson"
3738
+ })]
3739
+ })
3577
3740
  }) : null, /* @__PURE__ */ jsx("div", {
3578
- className: cn("flex h-14 w-14 items-center justify-center self-start p-4 sm:mb-4 sm:w-full", {
3741
+ className: cn("flex h-14 items-center justify-center gap-2 self-start p-4 sm:mb-4", {
3579
3742
  "w-full border-t": isMenuOpened,
3580
- "border-l": !isMenuOpened
3743
+ "w-14 border-l": !isMenuOpened
3581
3744
  }),
3582
- children: /* @__PURE__ */ jsx(ThemeSwitch, {})
3745
+ children: isMenuOpened ? /* @__PURE__ */ jsxs(Fragment, {
3746
+ children: [/* @__PURE__ */ jsx(ThemeSwitch, {}), /* @__PURE__ */ jsx(SidecarStatusIndicator, {
3747
+ status: data2.sidecarStatus
3748
+ })]
3749
+ }) : /* @__PURE__ */ jsxs(Popover, {
3750
+ open: isMobilePopoverOpen,
3751
+ onOpenChange: setIsMobilePopoverOpen,
3752
+ children: [data2.sidecarStatus?.hasFailure ? /* @__PURE__ */ jsx(PopoverTrigger, {
3753
+ asChild: true,
3754
+ children: /* @__PURE__ */ jsx("button", {
3755
+ type: "button",
3756
+ "aria-label": "Process error - click to see details",
3757
+ title: isMobilePopoverOpen ? void 0 : "Process error - click to see details",
3758
+ className: "text-muted-foreground hover:text-foreground hover:bg-muted flex h-8 w-8 items-center justify-center rounded-md transition-colors",
3759
+ children: /* @__PURE__ */ jsx(StatusIndicator, {
3760
+ status: "failed"
3761
+ })
3762
+ })
3763
+ }) : /* @__PURE__ */ jsx(PopoverTrigger, {
3764
+ asChild: true,
3765
+ children: /* @__PURE__ */ jsx("button", {
3766
+ type: "button",
3767
+ "aria-label": "More options",
3768
+ title: isMobilePopoverOpen ? void 0 : "More options",
3769
+ className: "text-muted-foreground hover:text-foreground hover:bg-muted flex h-8 w-8 items-center justify-center rounded-md transition-colors",
3770
+ children: /* @__PURE__ */ jsxs("svg", {
3771
+ width: "20",
3772
+ height: "20",
3773
+ viewBox: "0 0 20 20",
3774
+ fill: "none",
3775
+ xmlns: "http://www.w3.org/2000/svg",
3776
+ children: [/* @__PURE__ */ jsx("circle", {
3777
+ cx: "5",
3778
+ cy: "10",
3779
+ r: "1.5",
3780
+ fill: "currentColor"
3781
+ }), /* @__PURE__ */ jsx("circle", {
3782
+ cx: "10",
3783
+ cy: "10",
3784
+ r: "1.5",
3785
+ fill: "currentColor"
3786
+ }), /* @__PURE__ */ jsx("circle", {
3787
+ cx: "15",
3788
+ cy: "10",
3789
+ r: "1.5",
3790
+ fill: "currentColor"
3791
+ })]
3792
+ })
3793
+ })
3794
+ }), /* @__PURE__ */ jsxs(PopoverContent, {
3795
+ side: "top",
3796
+ align: "start",
3797
+ className: "flex flex-col gap-1 p-2",
3798
+ children: [/* @__PURE__ */ jsx(ThemeSwitchRow, {
3799
+ themeLabel,
3800
+ disableTooltip: isMobilePopoverOpen
3801
+ }), data2.sidecarStatus ? /* @__PURE__ */ jsxs(Link, {
3802
+ to: "/admin",
3803
+ className: "hover:bg-muted flex items-center gap-3 rounded-md px-2 py-1.5 text-sm transition-colors",
3804
+ children: [/* @__PURE__ */ jsx("div", {
3805
+ className: "flex h-5 w-5 items-center justify-center",
3806
+ children: /* @__PURE__ */ jsx(StatusIndicator, {
3807
+ status: data2.sidecarStatus.hasFailure ? "failed" : "running"
3808
+ })
3809
+ }), /* @__PURE__ */ jsxs("span", {
3810
+ className: "flex-1 text-left",
3811
+ children: ["Sidecar process", " ", data2.sidecarStatus.hasFailure ? "error" : "running"]
3812
+ })]
3813
+ }) : null]
3814
+ })]
3815
+ })
3583
3816
  })]
3584
3817
  })
3585
3818
  })
3586
3819
  });
3587
3820
  }
3588
3821
  const OPENED_MENU_WIDTH = 400;
3822
+ function SidecarStatusIndicator({
3823
+ status
3824
+ }) {
3825
+ if (!status) return null;
3826
+ return /* @__PURE__ */ jsx(SimpleTooltip, {
3827
+ content: status.hasFailure ? `${status.failureCount} sidecar${status.failureCount === 1 ? "" : "s"} failed` : "All sidecars running",
3828
+ children: /* @__PURE__ */ jsx(Link, {
3829
+ to: "/admin",
3830
+ className: "text-muted-foreground hover:text-foreground hover:bg-muted flex h-8 w-8 items-center justify-center rounded-md transition-colors",
3831
+ children: /* @__PURE__ */ jsx(StatusIndicator, {
3832
+ status: status.hasFailure ? "failed" : "running"
3833
+ })
3834
+ })
3835
+ });
3836
+ }
3589
3837
  function Navigation({
3590
3838
  isMenuOpened,
3591
3839
  onMenuOpenChange: setMenuOpened
@@ -3594,6 +3842,7 @@ function Navigation({
3594
3842
  const apps = useApps();
3595
3843
  const user = useOptionalUser();
3596
3844
  const nextExerciseRoute = useNextExerciseRoute();
3845
+ const randomExerciseRoute = useRandomCompletedExerciseRoute();
3597
3846
  const params = useParams();
3598
3847
  const location = useLocation();
3599
3848
  const isOnline = useIsOnline();
@@ -3633,6 +3882,14 @@ function Navigation({
3633
3882
  if (typeof window === "undefined") return;
3634
3883
  window.dispatchEvent(new CustomEvent("toggle-keyboard-shortcuts"));
3635
3884
  }, []);
3885
+ const requestInfo = useRequestInfo();
3886
+ const currentTheme = requestInfo.session.theme ?? "system";
3887
+ const themeLabel = {
3888
+ light: "Light",
3889
+ dark: "Dark",
3890
+ system: "System"
3891
+ }[currentTheme];
3892
+ const [isPopoverOpen, setIsPopoverOpen] = React.useState(false);
3636
3893
  return /* @__PURE__ */ jsx("nav", {
3637
3894
  className: "hidden border-r sm:flex",
3638
3895
  children: /* @__PURE__ */ jsx(motion.div, {
@@ -3902,11 +4159,35 @@ function Navigation({
3902
4159
  children: "Continue to next lesson"
3903
4160
  })]
3904
4161
  })
4162
+ }) : null, ENV.EPICSHOP_DEPLOYED ? null : user && randomExerciseRoute ? /* @__PURE__ */ jsx(SimpleTooltip, {
4163
+ content: isMenuOpened ? null : "Practice a past lesson",
4164
+ children: /* @__PURE__ */ jsxs(Link, {
4165
+ to: randomExerciseRoute,
4166
+ prefetch: "intent",
4167
+ className: clsx("flex h-14 w-full items-center space-x-3 border-t px-4 py-4 pl-[18px] no-underline hover:underline"),
4168
+ children: [/* @__PURE__ */ jsx(Icon, {
4169
+ name: "Refresh",
4170
+ className: "shrink-0",
4171
+ size: "md"
4172
+ }), isMenuOpened ? /* @__PURE__ */ jsx(motion.div, {
4173
+ className: "flex items-center whitespace-nowrap",
4174
+ initial: {
4175
+ opacity: 0
4176
+ },
4177
+ animate: {
4178
+ opacity: 1
4179
+ },
4180
+ children: "Practice a past lesson"
4181
+ }) : /* @__PURE__ */ jsx("span", {
4182
+ className: "sr-only",
4183
+ children: "Practice a past lesson"
4184
+ })]
4185
+ })
3905
4186
  }) : null, /* @__PURE__ */ jsx("div", {
3906
4187
  className: "mb-4 w-full self-start border-t pt-[15px] pl-3",
3907
- children: /* @__PURE__ */ jsxs("div", {
4188
+ children: isMenuOpened ? /* @__PURE__ */ jsxs("div", {
3908
4189
  className: "flex items-center gap-2",
3909
- children: [/* @__PURE__ */ jsx(ThemeSwitch, {}), isMenuOpened ? /* @__PURE__ */ jsx(SimpleTooltip, {
4190
+ children: [/* @__PURE__ */ jsx(ThemeSwitch, {}), /* @__PURE__ */ jsx(SimpleTooltip, {
3910
4191
  content: "Keyboard shortcuts (press ?)",
3911
4192
  children: /* @__PURE__ */ jsx("button", {
3912
4193
  type: "button",
@@ -3918,13 +4199,125 @@ function Navigation({
3918
4199
  size: "md"
3919
4200
  })
3920
4201
  })
3921
- }) : null]
4202
+ }), /* @__PURE__ */ jsx(SidecarStatusIndicator, {
4203
+ status: data2.sidecarStatus
4204
+ })]
4205
+ }) : /* @__PURE__ */ jsxs(Popover, {
4206
+ open: isPopoverOpen,
4207
+ onOpenChange: setIsPopoverOpen,
4208
+ children: [data2.sidecarStatus?.hasFailure ? /* @__PURE__ */ jsx(PopoverTrigger, {
4209
+ asChild: true,
4210
+ children: /* @__PURE__ */ jsx("button", {
4211
+ type: "button",
4212
+ "aria-label": "Process error - click to see details",
4213
+ title: isPopoverOpen ? void 0 : "Process error - click to see details",
4214
+ className: "text-muted-foreground hover:text-foreground hover:bg-muted flex h-8 w-8 items-center justify-center rounded-md transition-colors",
4215
+ children: /* @__PURE__ */ jsx(StatusIndicator, {
4216
+ status: "failed"
4217
+ })
4218
+ })
4219
+ }) : /* @__PURE__ */ jsx(PopoverTrigger, {
4220
+ asChild: true,
4221
+ children: /* @__PURE__ */ jsx("button", {
4222
+ type: "button",
4223
+ "aria-label": "More options",
4224
+ title: isPopoverOpen ? void 0 : "More options",
4225
+ className: "text-muted-foreground hover:text-foreground hover:bg-muted flex h-8 w-8 items-center justify-center rounded-md transition-colors",
4226
+ children: /* @__PURE__ */ jsxs("svg", {
4227
+ width: "20",
4228
+ height: "20",
4229
+ viewBox: "0 0 20 20",
4230
+ fill: "none",
4231
+ xmlns: "http://www.w3.org/2000/svg",
4232
+ children: [/* @__PURE__ */ jsx("circle", {
4233
+ cx: "5",
4234
+ cy: "10",
4235
+ r: "1.5",
4236
+ fill: "currentColor"
4237
+ }), /* @__PURE__ */ jsx("circle", {
4238
+ cx: "10",
4239
+ cy: "10",
4240
+ r: "1.5",
4241
+ fill: "currentColor"
4242
+ }), /* @__PURE__ */ jsx("circle", {
4243
+ cx: "15",
4244
+ cy: "10",
4245
+ r: "1.5",
4246
+ fill: "currentColor"
4247
+ })]
4248
+ })
4249
+ })
4250
+ }), /* @__PURE__ */ jsxs(PopoverContent, {
4251
+ side: "top",
4252
+ align: "start",
4253
+ className: "flex flex-col gap-1 p-2",
4254
+ children: [/* @__PURE__ */ jsx(ThemeSwitchRow, {
4255
+ themeLabel,
4256
+ disableTooltip: isPopoverOpen
4257
+ }), /* @__PURE__ */ jsxs("button", {
4258
+ type: "button",
4259
+ "aria-label": "Keyboard shortcuts",
4260
+ onClick: handleOpenShortcuts,
4261
+ className: "hover:bg-muted flex items-center gap-3 rounded-md px-2 py-1.5 text-sm transition-colors",
4262
+ children: [/* @__PURE__ */ jsx("div", {
4263
+ className: "flex h-5 w-5 items-center justify-center",
4264
+ children: /* @__PURE__ */ jsx(Icon, {
4265
+ name: "Question",
4266
+ size: "md"
4267
+ })
4268
+ }), /* @__PURE__ */ jsx("span", {
4269
+ className: "flex-1 text-left",
4270
+ children: "Keyboard shortcuts"
4271
+ })]
4272
+ }), data2.sidecarStatus ? /* @__PURE__ */ jsxs(Link, {
4273
+ to: "/admin",
4274
+ className: "hover:bg-muted flex items-center gap-3 rounded-md px-2 py-1.5 text-sm transition-colors",
4275
+ children: [/* @__PURE__ */ jsx("div", {
4276
+ className: "flex h-5 w-5 items-center justify-center",
4277
+ children: /* @__PURE__ */ jsx(StatusIndicator, {
4278
+ status: data2.sidecarStatus.hasFailure ? "failed" : "running"
4279
+ })
4280
+ }), /* @__PURE__ */ jsxs("span", {
4281
+ className: "flex-1 text-left",
4282
+ children: ["Sidecar process", " ", data2.sidecarStatus.hasFailure ? "error" : "running"]
4283
+ })]
4284
+ }) : null]
4285
+ })]
3922
4286
  })
3923
4287
  })]
3924
4288
  })
3925
4289
  })
3926
4290
  });
3927
4291
  }
4292
+ function ThemeSwitchRow({
4293
+ themeLabel,
4294
+ disableTooltip
4295
+ }) {
4296
+ const wrapperRef = React.useRef(null);
4297
+ const handleClick = (event) => {
4298
+ const form = wrapperRef.current?.querySelector("form");
4299
+ if (!form) return;
4300
+ const submitButton = form.querySelector('button[type="submit"]');
4301
+ if (submitButton?.contains(event.target)) {
4302
+ return;
4303
+ }
4304
+ submitButton?.click();
4305
+ };
4306
+ return /* @__PURE__ */ jsxs("div", {
4307
+ ref: wrapperRef,
4308
+ onClick: handleClick,
4309
+ className: "hover:bg-muted flex cursor-pointer items-center gap-3 rounded-md px-2 py-1.5 text-sm transition-colors",
4310
+ children: [/* @__PURE__ */ jsx("div", {
4311
+ className: "flex h-5 w-5 items-center justify-center",
4312
+ children: /* @__PURE__ */ jsx(ThemeSwitch, {
4313
+ disableTooltip
4314
+ })
4315
+ }), /* @__PURE__ */ jsxs("span", {
4316
+ className: "flex-1 text-left",
4317
+ children: [themeLabel, " theme"]
4318
+ })]
4319
+ });
4320
+ }
3928
4321
  function NavToggle({
3929
4322
  title,
3930
4323
  isMenuOpened,
@@ -8700,8 +9093,8 @@ function TouchedFiles({
8700
9093
  setOpen(false);
8701
9094
  }
8702
9095
  const appName = data2.playground?.appName;
8703
- return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsxs(Popover.Root, { open, onOpenChange: handleOpenChange, children: [
8704
- /* @__PURE__ */ jsx(Popover.Trigger, { asChild: true, children: /* @__PURE__ */ jsxs(
9096
+ return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsxs(PopoverPrimitive.Root, { open, onOpenChange: handleOpenChange, children: [
9097
+ /* @__PURE__ */ jsx(PopoverPrimitive.Trigger, { asChild: true, children: /* @__PURE__ */ jsxs(
8705
9098
  "button",
8706
9099
  {
8707
9100
  className: "relative flex h-full items-center gap-1 border-r px-6 py-3 font-mono text-sm uppercase",
@@ -8713,8 +9106,8 @@ function TouchedFiles({
8713
9106
  ]
8714
9107
  }
8715
9108
  ) }),
8716
- /* @__PURE__ */ jsx(Popover.Portal, { children: /* @__PURE__ */ jsx(
8717
- Popover.Content,
9109
+ /* @__PURE__ */ jsx(PopoverPrimitive.Portal, { children: /* @__PURE__ */ jsx(
9110
+ PopoverPrimitive.Content,
8718
9111
  {
8719
9112
  ref: contentRef,
8720
9113
  className: "slideRightContent lg:slideUpContent invert-theme bg-background text-foreground z-10 rounded px-9 py-8 select-none",
@@ -10135,39 +10528,6 @@ function DiscordPost({ thread }) {
10135
10528
  function Emoji({ name, url }) {
10136
10529
  return url ? /* @__PURE__ */ jsx("img", { src: url, alt: name, className: "h-full w-full" }) : name ? name : null;
10137
10530
  }
10138
- function StatusIndicator({
10139
- status
10140
- }) {
10141
- const colors = {
10142
- running: {
10143
- pinger: "bg-yellow-500/60",
10144
- circle: "bg-yellow-500"
10145
- },
10146
- passed: {
10147
- circle: "bg-success"
10148
- },
10149
- failed: {
10150
- circle: "bg-destructive"
10151
- },
10152
- stopped: {
10153
- circle: "bg-muted-foreground"
10154
- }
10155
- }[status];
10156
- return /* @__PURE__ */ jsxs("span", { className: "relative flex h-3 w-3", children: [
10157
- colors.pinger ? /* @__PURE__ */ jsx(
10158
- "span",
10159
- {
10160
- className: `absolute inline-flex h-full w-full animate-ping rounded-full ${colors.pinger} opacity-75`
10161
- }
10162
- ) : null,
10163
- /* @__PURE__ */ jsx(
10164
- "span",
10165
- {
10166
- className: `relative inline-flex h-3 w-3 rounded-full ${colors.circle}`
10167
- }
10168
- )
10169
- ] });
10170
- }
10171
10531
  function getPreviewSearchParams(searchParams, previewValue, defaultValue) {
10172
10532
  const next = new URLSearchParams(searchParams);
10173
10533
  if (previewValue === defaultValue) {
@@ -11543,6 +11903,7 @@ async function loader$u({
11543
11903
  request,
11544
11904
  timings
11545
11905
  });
11906
+ const hasExtras2 = apps.some(isExtraApp);
11546
11907
  const exerciseApps = apps.filter(isExerciseStepApp).filter((app2) => app2.exerciseNumber === exercise.exerciseNumber);
11547
11908
  const prevApp = exerciseApps[exerciseApps.length - 1];
11548
11909
  const articleId = `workshop-${slugify(workshopConfig.title)}-${exercise.exerciseNumber}-finished`;
@@ -11565,6 +11926,9 @@ async function loader$u({
11565
11926
  nextStepLink: nextExercise ? {
11566
11927
  to: `/exercise/${nextExercise.exerciseNumber.toString().padStart(2, "0")}`,
11567
11928
  "aria-label": `${nextExercise.title}`
11929
+ } : hasExtras2 ? {
11930
+ to: "/extra",
11931
+ "aria-label": "Extras"
11568
11932
  } : {
11569
11933
  to: "/finished",
11570
11934
  "aria-label": "Finished! 🎉"
@@ -11907,6 +12271,20 @@ const $extra = UNSAFE_withComponentProps(function ExtraRoute() {
11907
12271
  const shouldShowSetPlayground = showPlaygroundIndicator || data2.playground?.isUpToDate === false;
11908
12272
  const tabs2 = ["playground", "extra", "diff", "chat"];
11909
12273
  const preview = searchParams.get("preview");
12274
+ const previousExtraLink = data2.previousExtra ? {
12275
+ to: `/extra/${data2.previousExtra.dirName}`,
12276
+ "aria-label": "Previous Extra"
12277
+ } : {
12278
+ to: "/extra",
12279
+ "aria-label": "Extras"
12280
+ };
12281
+ const nextExtraLink = data2.nextExtra ? {
12282
+ to: `/extra/${data2.nextExtra.dirName}`,
12283
+ "aria-label": "Next Extra"
12284
+ } : {
12285
+ to: "/finished",
12286
+ "aria-label": "Workshop finished"
12287
+ };
11910
12288
  function isValidPreview2(value) {
11911
12289
  return Boolean(value && tabs2.includes(value));
11912
12290
  }
@@ -12007,9 +12385,9 @@ const $extra = UNSAFE_withComponentProps(function ExtraRoute() {
12007
12385
  })
12008
12386
  }), /* @__PURE__ */ jsxs("div", {
12009
12387
  className: "mt-auto flex justify-between",
12010
- children: [data2.previousExtra ? /* @__PURE__ */ jsxs(Link, {
12011
- to: `/extra/${data2.previousExtra.dirName}`,
12012
- "aria-label": "Previous Extra",
12388
+ children: [/* @__PURE__ */ jsxs(Link, {
12389
+ to: previousExtraLink.to,
12390
+ "aria-label": previousExtraLink["aria-label"],
12013
12391
  prefetch: "intent",
12014
12392
  children: [/* @__PURE__ */ jsx("span", {
12015
12393
  "aria-hidden": true,
@@ -12018,9 +12396,9 @@ const $extra = UNSAFE_withComponentProps(function ExtraRoute() {
12018
12396
  className: "hidden xl:inline",
12019
12397
  children: " Previous"
12020
12398
  })]
12021
- }) : /* @__PURE__ */ jsx("span", {}), data2.nextExtra ? /* @__PURE__ */ jsxs(Link, {
12022
- to: `/extra/${data2.nextExtra.dirName}`,
12023
- "aria-label": "Next Extra",
12399
+ }), /* @__PURE__ */ jsxs(Link, {
12400
+ to: nextExtraLink.to,
12401
+ "aria-label": nextExtraLink["aria-label"],
12024
12402
  prefetch: "intent",
12025
12403
  children: [/* @__PURE__ */ jsx("span", {
12026
12404
  className: "hidden xl:inline",
@@ -12029,7 +12407,7 @@ const $extra = UNSAFE_withComponentProps(function ExtraRoute() {
12029
12407
  "aria-hidden": true,
12030
12408
  children: "→"
12031
12409
  })]
12032
- }) : /* @__PURE__ */ jsx("span", {})]
12410
+ })]
12033
12411
  })]
12034
12412
  }, data2.articleId), /* @__PURE__ */ jsx(ElementScrollRestoration, {
12035
12413
  elementQuery: `#${data2.articleId}`
@@ -12039,14 +12417,8 @@ const $extra = UNSAFE_withComponentProps(function ExtraRoute() {
12039
12417
  appName: data2.extra.name,
12040
12418
  relativePath: data2.extraReadme.relativePath
12041
12419
  }), /* @__PURE__ */ jsx(NavChevrons, {
12042
- prev: data2.previousExtra ? {
12043
- to: `/extra/${data2.previousExtra.dirName}`,
12044
- "aria-label": "Previous Extra"
12045
- } : null,
12046
- next: data2.nextExtra ? {
12047
- to: `/extra/${data2.nextExtra.dirName}`,
12048
- "aria-label": "Next Extra"
12049
- } : null
12420
+ prev: previousExtraLink,
12421
+ next: nextExtraLink
12050
12422
  })]
12051
12423
  })]
12052
12424
  }), /* @__PURE__ */ jsx("div", {
@@ -12494,6 +12866,9 @@ const sections = [{
12494
12866
  }, {
12495
12867
  id: "logging-in",
12496
12868
  label: "Logging In"
12869
+ }, {
12870
+ id: "interleaved-practice",
12871
+ label: "Interleaved Practice"
12497
12872
  }, {
12498
12873
  id: "workshop-structure",
12499
12874
  label: "Workshop Structure"
@@ -12639,6 +13014,30 @@ const guide = UNSAFE_withComponentProps(function Guide() {
12639
13014
  className: "text-muted-foreground text-sm",
12640
13015
  children: "Tip: Log in early to start tracking your progress from the beginning!"
12641
13016
  })]
13017
+ }), /* @__PURE__ */ jsxs("section", {
13018
+ id: "interleaved-practice",
13019
+ className: "scroll-mt-8",
13020
+ children: [/* @__PURE__ */ jsx("h2", {
13021
+ className: "text-h3 mb-4",
13022
+ children: "Interleaved Practice"
13023
+ }), /* @__PURE__ */ jsx("p", {
13024
+ className: "mb-4",
13025
+ children: "Interleaved practice mixes previously learned material with new content so your brain has to recall concepts instead of relying on short-term memory. This spacing effect improves long-term retention and makes it easier to apply skills in new contexts."
13026
+ }), /* @__PURE__ */ jsxs("p", {
13027
+ className: "mb-4",
13028
+ children: ["Once you're logged in and have completed at least two exercise steps, you'll see a ", /* @__PURE__ */ jsx("strong", {
13029
+ children: "Practice a past lesson"
13030
+ }), " button next to ", /* @__PURE__ */ jsx("strong", {
13031
+ children: "Continue to next lesson"
13032
+ }), " in the navigation. Click it any time to jump to a random completed step and refresh what you've learned."]
13033
+ }), /* @__PURE__ */ jsxs("ul", {
13034
+ className: "list-disc space-y-2 pl-6",
13035
+ children: [/* @__PURE__ */ jsx("li", {
13036
+ children: "You must be logged in."
13037
+ }), /* @__PURE__ */ jsx("li", {
13038
+ children: "You need two or more completed steps."
13039
+ })]
13040
+ })]
12642
13041
  }), /* @__PURE__ */ jsxs("section", {
12643
13042
  id: "workshop-structure",
12644
13043
  className: "scroll-mt-8",
@@ -15021,6 +15420,14 @@ function isInspectorRunning() {
15021
15420
  return false;
15022
15421
  }
15023
15422
  }
15423
+ async function restartSidecar(name) {
15424
+ if (ENV.EPICSHOP_DEPLOYED) return false;
15425
+ return restartSidecarProcess(name);
15426
+ }
15427
+ function getSidecarLogLines(name, lineCount = 50) {
15428
+ if (ENV.EPICSHOP_DEPLOYED) return "";
15429
+ return getSidecarLogs(name, lineCount);
15430
+ }
15024
15431
  async function clearData() {
15025
15432
  if (ENV.EPICSHOP_DEPLOYED) return;
15026
15433
  await clearCaches();
@@ -15089,10 +15496,20 @@ async function loader$g({
15089
15496
  exitCode
15090
15497
  };
15091
15498
  }
15499
+ const sidecarProcesses = {};
15500
+ for (const [name, {
15501
+ process: process2
15502
+ }] of getProcesses().sidecarProcesses.entries()) {
15503
+ sidecarProcesses[name] = {
15504
+ pid: process2.pid,
15505
+ running: process2.exitCode === null
15506
+ };
15507
+ }
15092
15508
  return data({
15093
15509
  apps,
15094
15510
  processes,
15095
15511
  testProcesses,
15512
+ sidecarProcesses,
15096
15513
  inspectorRunning: isInspectorRunning()
15097
15514
  }, {
15098
15515
  headers: {
@@ -15131,6 +15548,27 @@ async function action$6({
15131
15548
  success: true
15132
15549
  };
15133
15550
  }
15551
+ case "restart-sidecar": {
15552
+ const name = formData.get("name");
15553
+ if (typeof name !== "string") {
15554
+ throw new Error("Sidecar name is required");
15555
+ }
15556
+ const success = await restartSidecar(name);
15557
+ return {
15558
+ success
15559
+ };
15560
+ }
15561
+ case "get-sidecar-logs": {
15562
+ const name = formData.get("name");
15563
+ if (typeof name !== "string") {
15564
+ throw new Error("Sidecar name is required");
15565
+ }
15566
+ const logs = getSidecarLogLines(name, 1e3);
15567
+ return {
15568
+ success: true,
15569
+ logs
15570
+ };
15571
+ }
15134
15572
  default: {
15135
15573
  throw new Error(`Unknown intent: ${intent}`);
15136
15574
  }
@@ -15179,53 +15617,21 @@ const index = UNSAFE_withComponentProps(function AdminLayout2({
15179
15617
  })]
15180
15618
  }), /* @__PURE__ */ jsxs("div", {
15181
15619
  className: "grid gap-6 md:grid-cols-2",
15182
- children: [/* @__PURE__ */ jsxs(Card, {
15620
+ children: [Object.entries(data2.sidecarProcesses).length > 0 && /* @__PURE__ */ jsxs(Card, {
15183
15621
  children: [/* @__PURE__ */ jsxs(CardHeader, {
15184
15622
  children: [/* @__PURE__ */ jsx(CardTitle, {
15185
- children: "Progress"
15623
+ children: "Sidecar Processes"
15186
15624
  }), /* @__PURE__ */ jsx(CardDescription, {
15187
- children: "EpicWeb.dev lesson progress"
15625
+ children: "Background sidecar processes"
15188
15626
  })]
15189
15627
  }), /* @__PURE__ */ jsx(CardContent, {
15190
- children: epicProgress ? /* @__PURE__ */ jsx("ul", {
15191
- className: "scrollbar-thin scrollbar-thumb-scrollbar flex max-h-72 flex-col gap-2 overflow-y-auto",
15192
- children: epicProgress.sort(sortProgress).map((progress) => {
15193
- const status = progress.epicCompletedAt ? "completed" : "incomplete";
15194
- const label = [progress.epicLessonSlug, progress.epicCompletedAt ? `(${progress.epicCompletedAt})` : null].filter(Boolean).join(" ");
15195
- return /* @__PURE__ */ jsxs("li", {
15196
- className: "hover:bg-muted/50 flex items-center gap-3 rounded-md p-2",
15197
- children: [/* @__PURE__ */ jsx("span", {
15198
- className: clsx("h-3 w-3 shrink-0 rounded-full", progressStatus[status]),
15199
- title: status
15200
- }), progress.type === "unknown" ? /* @__PURE__ */ jsxs("span", {
15201
- className: "flex flex-1 items-center gap-2 truncate text-sm",
15202
- children: [/* @__PURE__ */ jsx("span", {
15203
- className: "truncate",
15204
- children: label
15205
- }), /* @__PURE__ */ jsx(SimpleTooltip, {
15206
- content: "This video is in the workshop on EpicWeb.dev, but not in the local workshop.",
15207
- children: /* @__PURE__ */ jsx(Icon, {
15208
- name: "Close",
15209
- className: "text-destructive h-4 w-4 shrink-0"
15210
- })
15211
- })]
15212
- }) : /* @__PURE__ */ jsx(Link, {
15213
- to: linkProgress(progress),
15214
- className: "text-foreground flex-1 truncate text-sm hover:underline",
15215
- children: label
15216
- }), /* @__PURE__ */ jsx(Link, {
15217
- to: progress.epicLessonUrl,
15218
- className: "text-muted-foreground hover:text-foreground shrink-0",
15219
- children: /* @__PURE__ */ jsx(Icon, {
15220
- name: "ExternalLink",
15221
- className: "h-4 w-4"
15222
- })
15223
- })]
15224
- }, progress.epicLessonSlug);
15225
- })
15226
- }) : /* @__PURE__ */ jsx("p", {
15227
- className: "text-muted-foreground text-sm",
15228
- children: "No progress data"
15628
+ children: /* @__PURE__ */ jsx("ul", {
15629
+ className: "flex flex-col gap-2",
15630
+ children: Object.entries(data2.sidecarProcesses).map(([key, process2]) => /* @__PURE__ */ jsx(SidecarProcessItem, {
15631
+ name: key,
15632
+ pid: process2.pid,
15633
+ running: process2.running
15634
+ }, key))
15229
15635
  })
15230
15636
  })]
15231
15637
  }), /* @__PURE__ */ jsxs(Card, {
@@ -15398,10 +15804,180 @@ const index = UNSAFE_withComponentProps(function AdminLayout2({
15398
15804
  }, key))
15399
15805
  })
15400
15806
  })]
15807
+ }), /* @__PURE__ */ jsxs(Card, {
15808
+ children: [/* @__PURE__ */ jsxs(CardHeader, {
15809
+ children: [/* @__PURE__ */ jsx(CardTitle, {
15810
+ children: "Progress"
15811
+ }), /* @__PURE__ */ jsx(CardDescription, {
15812
+ children: "EpicWeb.dev lesson progress"
15813
+ })]
15814
+ }), /* @__PURE__ */ jsx(CardContent, {
15815
+ children: epicProgress ? /* @__PURE__ */ jsx("ul", {
15816
+ className: "scrollbar-thin scrollbar-thumb-scrollbar flex max-h-72 flex-col gap-2 overflow-y-auto",
15817
+ children: epicProgress.sort(sortProgress).map((progress) => {
15818
+ const status = progress.epicCompletedAt ? "completed" : "incomplete";
15819
+ const label = [progress.epicLessonSlug, progress.epicCompletedAt ? `(${progress.epicCompletedAt})` : null].filter(Boolean).join(" ");
15820
+ return /* @__PURE__ */ jsxs("li", {
15821
+ className: "hover:bg-muted/50 flex items-center gap-3 rounded-md p-2",
15822
+ children: [/* @__PURE__ */ jsx("span", {
15823
+ className: clsx("h-3 w-3 shrink-0 rounded-full", progressStatus[status]),
15824
+ title: status
15825
+ }), progress.type === "unknown" ? /* @__PURE__ */ jsxs("span", {
15826
+ className: "flex flex-1 items-center gap-2 truncate text-sm",
15827
+ children: [/* @__PURE__ */ jsx("span", {
15828
+ className: "truncate",
15829
+ children: label
15830
+ }), /* @__PURE__ */ jsx(SimpleTooltip, {
15831
+ content: "This video is in the workshop on EpicWeb.dev, but not in the local workshop.",
15832
+ children: /* @__PURE__ */ jsx(Icon, {
15833
+ name: "Close",
15834
+ className: "text-destructive h-4 w-4 shrink-0"
15835
+ })
15836
+ })]
15837
+ }) : /* @__PURE__ */ jsx(Link, {
15838
+ to: linkProgress(progress),
15839
+ className: "text-foreground flex-1 truncate text-sm hover:underline",
15840
+ children: label
15841
+ }), /* @__PURE__ */ jsx(Link, {
15842
+ to: progress.epicLessonUrl,
15843
+ className: "text-muted-foreground hover:text-foreground shrink-0",
15844
+ children: /* @__PURE__ */ jsx(Icon, {
15845
+ name: "ExternalLink",
15846
+ className: "h-4 w-4"
15847
+ })
15848
+ })]
15849
+ }, progress.epicLessonSlug);
15850
+ })
15851
+ }) : /* @__PURE__ */ jsx("p", {
15852
+ className: "text-muted-foreground text-sm",
15853
+ children: "No progress data"
15854
+ })
15855
+ })]
15401
15856
  })]
15402
15857
  })]
15403
15858
  });
15404
15859
  });
15860
+ function SidecarProcessItem({
15861
+ name,
15862
+ pid,
15863
+ running
15864
+ }) {
15865
+ const restartFetcher = useFetcher();
15866
+ const logsFetcher = useFetcher();
15867
+ const [copyStatus, setCopyStatus] = React.useState("idle");
15868
+ const [logsOpen, setLogsOpen] = React.useState(false);
15869
+ const [displayLogs, setDisplayLogs] = React.useState(null);
15870
+ const isRestarting = restartFetcher.state !== "idle";
15871
+ const isLoadingLogs = logsFetcher.state !== "idle";
15872
+ React.useEffect(() => {
15873
+ if (logsFetcher.data) {
15874
+ setDisplayLogs(logsFetcher.data.logs ?? "");
15875
+ }
15876
+ }, [logsFetcher.data]);
15877
+ const handleCopyLogs = () => {
15878
+ if (!displayLogs) return;
15879
+ navigator.clipboard.writeText(displayLogs).then(() => {
15880
+ setCopyStatus("copied");
15881
+ setTimeout(() => setCopyStatus("idle"), 2e3);
15882
+ }).catch(() => {
15883
+ });
15884
+ };
15885
+ const handleToggleLogs = (open) => {
15886
+ setLogsOpen(open);
15887
+ if (open) {
15888
+ void logsFetcher.submit({
15889
+ intent: "get-sidecar-logs",
15890
+ name
15891
+ }, {
15892
+ method: "POST"
15893
+ });
15894
+ }
15895
+ };
15896
+ return /* @__PURE__ */ jsxs("li", {
15897
+ className: "border-border bg-muted/30 rounded-md border p-3",
15898
+ children: [/* @__PURE__ */ jsxs("div", {
15899
+ className: "flex items-center justify-between gap-2",
15900
+ children: [/* @__PURE__ */ jsxs("div", {
15901
+ className: "flex items-center gap-2",
15902
+ children: [running ? /* @__PURE__ */ jsx(Pinger, {
15903
+ status: "running"
15904
+ }) : /* @__PURE__ */ jsx(Pinger, {
15905
+ status: "taken"
15906
+ }), /* @__PURE__ */ jsx("span", {
15907
+ className: "font-mono text-sm font-semibold",
15908
+ children: name
15909
+ })]
15910
+ }), /* @__PURE__ */ jsx("div", {
15911
+ className: "flex items-center gap-1",
15912
+ children: /* @__PURE__ */ jsxs(restartFetcher.Form, {
15913
+ method: "POST",
15914
+ children: [/* @__PURE__ */ jsx("input", {
15915
+ type: "hidden",
15916
+ name: "intent",
15917
+ value: "restart-sidecar"
15918
+ }), /* @__PURE__ */ jsx("input", {
15919
+ type: "hidden",
15920
+ name: "name",
15921
+ value: name
15922
+ }), /* @__PURE__ */ jsx(SimpleTooltip, {
15923
+ content: "Restart process",
15924
+ children: /* @__PURE__ */ jsx("button", {
15925
+ type: "submit",
15926
+ disabled: isRestarting,
15927
+ className: "text-muted-foreground hover:text-foreground hover:bg-muted rounded p-1.5 transition-colors disabled:cursor-not-allowed disabled:opacity-50",
15928
+ children: /* @__PURE__ */ jsx(Icon, {
15929
+ name: "Refresh",
15930
+ className: cn("h-4 w-4", isRestarting && "animate-spin")
15931
+ })
15932
+ })
15933
+ })]
15934
+ })
15935
+ })]
15936
+ }), /* @__PURE__ */ jsxs("div", {
15937
+ className: "text-muted-foreground mt-2 flex flex-wrap gap-x-4 gap-y-1 text-xs",
15938
+ children: [pid && /* @__PURE__ */ jsxs("span", {
15939
+ children: [/* @__PURE__ */ jsx("span", {
15940
+ className: "font-medium",
15941
+ children: "PID:"
15942
+ }), " ", pid]
15943
+ }), /* @__PURE__ */ jsxs("span", {
15944
+ children: [/* @__PURE__ */ jsx("span", {
15945
+ className: "font-medium",
15946
+ children: "Status:"
15947
+ }), " ", isRestarting ? "Restarting..." : running ? "Running" : "Failed"]
15948
+ })]
15949
+ }), /* @__PURE__ */ jsxs("details", {
15950
+ className: "mt-3",
15951
+ open: logsOpen,
15952
+ onToggle: (e) => handleToggleLogs(e.currentTarget.open),
15953
+ children: [/* @__PURE__ */ jsx("summary", {
15954
+ className: "text-muted-foreground hover:text-foreground cursor-pointer text-xs font-medium",
15955
+ children: isLoadingLogs ? "Loading logs..." : "View logs"
15956
+ }), /* @__PURE__ */ jsxs("div", {
15957
+ className: "mt-2",
15958
+ children: [/* @__PURE__ */ jsx("div", {
15959
+ className: "mb-1 flex justify-end",
15960
+ children: /* @__PURE__ */ jsx(SimpleTooltip, {
15961
+ content: copyStatus === "copied" ? "Copied!" : "Copy logs",
15962
+ children: /* @__PURE__ */ jsx("button", {
15963
+ type: "button",
15964
+ onClick: handleCopyLogs,
15965
+ disabled: !displayLogs,
15966
+ className: cn("text-muted-foreground hover:text-foreground hover:bg-muted rounded p-1 transition-colors disabled:cursor-not-allowed disabled:opacity-50", copyStatus === "copied" && "text-success"),
15967
+ children: /* @__PURE__ */ jsx(Icon, {
15968
+ name: copyStatus === "copied" ? "CheckSmall" : "Copy",
15969
+ className: "h-3.5 w-3.5"
15970
+ })
15971
+ })
15972
+ })
15973
+ }), /* @__PURE__ */ jsx("pre", {
15974
+ className: "scrollbar-thin scrollbar-thumb-scrollbar bg-background max-h-96 overflow-auto rounded border p-2 text-xs",
15975
+ children: displayLogs || (isLoadingLogs ? "Loading..." : "No logs available")
15976
+ })]
15977
+ })]
15978
+ })]
15979
+ });
15980
+ }
15405
15981
  function Card({
15406
15982
  children,
15407
15983
  className
@@ -16910,7 +17486,7 @@ const route61 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePrope
16910
17486
  __proto__: null,
16911
17487
  loader
16912
17488
  }, Symbol.toStringTag, { value: "Module" }));
16913
- const serverManifest = { "entry": { "module": "/assets/entry.client-Dbw2ihVI.js", "imports": ["/assets/jsx-runtime-C5WNSv3b.js", "/assets/index-CqIc3cxq.js", "/assets/index-vDCSPjrM.js", "/assets/chunk-FNSCYPCZ-BHgC5cdx.js", "/assets/chunk-EPOLDU6W-BCLmut3y.js", "/assets/preload-helper-BXl3LOEh.js"], "css": [] }, "routes": { "root": { "id": "root", "parentId": void 0, "path": "", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasErrorBoundary": true, "module": "/assets/root-Ch373D3a.js", "imports": ["/assets/jsx-runtime-C5WNSv3b.js", "/assets/index-CqIc3cxq.js", "/assets/index-vDCSPjrM.js", "/assets/chunk-FNSCYPCZ-BHgC5cdx.js", "/assets/chunk-EPOLDU6W-BCLmut3y.js", "/assets/preload-helper-BXl3LOEh.js", "/assets/misc-DVYuZMjW.js", "/assets/client-only-BeMV-Wuv.js", "/assets/error-boundary-DFBd6s0g.js", "/assets/dialog-DnpUg3VT.js", "/assets/progress-bar-B27isaGl.js", "/assets/index-DzdDahau.js", "/assets/tooltip-Chzzs4KB.js", "/assets/schemas-Uj5SZtvt.js", "/assets/index-BW8stNyh.js", "/assets/presence-VCvV2mg7.js", "/assets/seo-t5J-DRxw.js", "/assets/pe-CIZUOJMr.js", "/assets/index-C_KjwKVt.js", "/assets/root-loader-BOzEMapJ.js", "/assets/online-DiNLkgTC.js", "/assets/coerce-CkHW0SMv.js"], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/$": { "id": "routes/$", "parentId": "root", "path": "*", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasErrorBoundary": true, "module": "/assets/_-BnmXymJG.js", "imports": ["/assets/chunk-EPOLDU6W-BCLmut3y.js", "/assets/jsx-runtime-C5WNSv3b.js", "/assets/error-boundary-DFBd6s0g.js", "/assets/misc-DVYuZMjW.js", "/assets/index-CqIc3cxq.js", "/assets/preload-helper-BXl3LOEh.js"], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "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, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/_layout-BxQPZuW6.js", "imports": ["/assets/chunk-EPOLDU6W-BCLmut3y.js", "/assets/jsx-runtime-C5WNSv3b.js", "/assets/misc-DVYuZMjW.js", "/assets/index-CqIc3cxq.js", "/assets/pe-CIZUOJMr.js", "/assets/onboarding-indicator-CVwXz3Cn.js", "/assets/product-GLsnY1u3.js", "/assets/revalidation-ws-BJWJviUX.js", "/assets/dialog-DnpUg3VT.js", "/assets/tooltip-Chzzs4KB.js", "/assets/user-BsPobzjB.js", "/assets/workshop-config-Zfc8zU0x.js", "/assets/online-DiNLkgTC.js", "/assets/presence-VCvV2mg7.js", "/assets/root-loader-BOzEMapJ.js", "/assets/progress-fKsNxmmt.js", "/assets/index-BW8stNyh.js", "/assets/schemas-Uj5SZtvt.js", "/assets/index-C_KjwKVt.js", "/assets/index-vDCSPjrM.js", "/assets/coerce-CkHW0SMv.js"], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "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, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/account-Cs3Te0is.js", "imports": ["/assets/chunk-EPOLDU6W-BCLmut3y.js", "/assets/jsx-runtime-C5WNSv3b.js", "/assets/button-CIlVtsau.js", "/assets/misc-DVYuZMjW.js", "/assets/onboarding-indicator-CVwXz3Cn.js", "/assets/tooltip-Chzzs4KB.js", "/assets/user-BsPobzjB.js", "/assets/workshop-config-Zfc8zU0x.js", "/assets/index-CqIc3cxq.js", "/assets/root-loader-BOzEMapJ.js", "/assets/index-vDCSPjrM.js"], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "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, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/_-l0sNRNKZ.js", "imports": [], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "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, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/api._-l0sNRNKZ.js", "imports": [], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "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, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/epic_ws_.js_-l0sNRNKZ.js", "imports": [], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "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, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/index-l0sNRNKZ.js", "imports": [], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "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, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/test._testName-l0sNRNKZ.js", "imports": [], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "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, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/test.epic_ws_.js_-l0sNRNKZ.js", "imports": [], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "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, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/app.epic_ws_.js_-l0sNRNKZ.js", "imports": [], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "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, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/discord-CuxZiU8E.js", "imports": ["/assets/discord-DlU9y5Iz.js", "/assets/chunk-EPOLDU6W-BCLmut3y.js", "/assets/index-CqIc3cxq.js", "/assets/jsx-runtime-C5WNSv3b.js", "/assets/misc-DVYuZMjW.js", "/assets/user-BsPobzjB.js", "/assets/root-loader-BOzEMapJ.js", "/assets/workshop-config-Zfc8zU0x.js"], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "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, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/_layout-BvtJxESE.js", "imports": ["/assets/chunk-EPOLDU6W-BCLmut3y.js", "/assets/jsx-runtime-C5WNSv3b.js", "/assets/index-CqIc3cxq.js"], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "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, "hasClientMiddleware": false, "hasErrorBoundary": true, "module": "/assets/_exerciseNumber-77g7-L-x.js", "imports": ["/assets/chunk-EPOLDU6W-BCLmut3y.js", "/assets/jsx-runtime-C5WNSv3b.js", "/assets/index-CEVyDj51.js", "/assets/epic-video-BVcJzJzi.js", "/assets/error-boundary-DFBd6s0g.js", "/assets/revalidation-ws-BJWJviUX.js", "/assets/launch-editor-B2dmpkaO.js", "/assets/progress-fKsNxmmt.js", "/assets/mdx-vrch0szL.js", "/assets/root-loader-BOzEMapJ.js", "/assets/seo-t5J-DRxw.js", "/assets/error-boundary-BDqWjIFP.js", "/assets/index-CqIc3cxq.js", "/assets/use-event-source-BuD4_2SF.js", "/assets/index-DzdDahau.js", "/assets/index-vDCSPjrM.js", "/assets/index-BW8stNyh.js", "/assets/misc-DVYuZMjW.js", "/assets/tooltip-Chzzs4KB.js", "/assets/pe-CIZUOJMr.js", "/assets/schemas-Uj5SZtvt.js", "/assets/online-DiNLkgTC.js", "/assets/loading-CUydCGD3.js", "/assets/user-BsPobzjB.js", "/assets/workshop-config-Zfc8zU0x.js", "/assets/preload-helper-BXl3LOEh.js", "/assets/progress-bar-B27isaGl.js", "/assets/chunk-FNSCYPCZ-BHgC5cdx.js", "/assets/coerce-CkHW0SMv.js"], "css": ["/assets/epic-video-irT-uesJ.css"], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout": { "id": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout", "parentId": "routes/_app+/exercise+/_layout", "path": ":exerciseNumber/:stepNumber/:type", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasErrorBoundary": true, "module": "/assets/_layout-yxOoJ6Yg.js", "imports": ["/assets/chunk-EPOLDU6W-BCLmut3y.js", "/assets/jsx-runtime-C5WNSv3b.js", "/assets/index-CEVyDj51.js", "/assets/index-CqIc3cxq.js", "/assets/error-boundary-DFBd6s0g.js", "/assets/nav-chevrons-DlNUibJV.js", "/assets/revalidation-ws-BJWJviUX.js", "/assets/launch-editor-B2dmpkaO.js", "/assets/progress-fKsNxmmt.js", "/assets/set-playground-DeMY9i7p.js", "/assets/misc-DVYuZMjW.js", "/assets/root-loader-BOzEMapJ.js", "/assets/seo-t5J-DRxw.js", "/assets/split-layout-DnRER1bP.js", "/assets/error-boundary-BDqWjIFP.js", "/assets/epic-video-BVcJzJzi.js", "/assets/tooltip-Chzzs4KB.js", "/assets/mdx-vrch0szL.js", "/assets/index-C_KjwKVt.js", "/assets/onboarding-indicator-CVwXz3Cn.js", "/assets/preload-helper-BXl3LOEh.js", "/assets/schemas-Uj5SZtvt.js", "/assets/progress-bar-B27isaGl.js", "/assets/pe-CIZUOJMr.js", "/assets/index-BOhw3wcM.js", "/assets/index-vDCSPjrM.js", "/assets/button-CIlVtsau.js", "/assets/dialog-DnpUg3VT.js", "/assets/chunk-FNSCYPCZ-BHgC5cdx.js", "/assets/coerce-CkHW0SMv.js", "/assets/use-event-source-BuD4_2SF.js", "/assets/index-DzdDahau.js", "/assets/index-BW8stNyh.js", "/assets/online-DiNLkgTC.js", "/assets/loading-CUydCGD3.js", "/assets/user-BsPobzjB.js", "/assets/workshop-config-Zfc8zU0x.js"], "css": ["/assets/epic-video-irT-uesJ.css"], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "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, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/app-TcFAQB2o.js", "imports": ["/assets/chunk-EPOLDU6W-BCLmut3y.js", "/assets/jsx-runtime-C5WNSv3b.js", "/assets/index-CqIc3cxq.js", "/assets/preview-CiDtuQCc.js", "/assets/misc-DVYuZMjW.js", "/assets/button-CIlVtsau.js", "/assets/loading-CUydCGD3.js", "/assets/index-BW8stNyh.js", "/assets/tooltip-Chzzs4KB.js", "/assets/index-vDCSPjrM.js", "/assets/root-loader-BOzEMapJ.js", "/assets/pe-CIZUOJMr.js", "/assets/schemas-Uj5SZtvt.js", "/assets/progress-bar-B27isaGl.js"], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "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, "hasClientMiddleware": false, "hasErrorBoundary": true, "module": "/assets/index-EdNV8gTk.js", "imports": ["/assets/chunk-EPOLDU6W-BCLmut3y.js", "/assets/jsx-runtime-C5WNSv3b.js", "/assets/playground-C_aP_pE8.js", "/assets/diff-CxEbhF8Q.js", "/assets/error-boundary-DFBd6s0g.js", "/assets/workshop-config-Zfc8zU0x.js", "/assets/misc-DVYuZMjW.js", "/assets/preview-CiDtuQCc.js", "/assets/tests-xD9PppmM.js", "/assets/index-CqIc3cxq.js", "/assets/loading-CUydCGD3.js", "/assets/index-BW8stNyh.js", "/assets/tooltip-Chzzs4KB.js", "/assets/index-vDCSPjrM.js", "/assets/root-loader-BOzEMapJ.js", "/assets/pe-CIZUOJMr.js", "/assets/schemas-Uj5SZtvt.js", "/assets/discord-DlU9y5Iz.js", "/assets/user-BsPobzjB.js", "/assets/online-DiNLkgTC.js", "/assets/index-BOhw3wcM.js", "/assets/index-C_KjwKVt.js", "/assets/index-DzdDahau.js", "/assets/set-playground-DeMY9i7p.js", "/assets/button-CIlVtsau.js", "/assets/onboarding-indicator-CVwXz3Cn.js", "/assets/progress-bar-B27isaGl.js", "/assets/dialog-DnpUg3VT.js", "/assets/playground-window-D9a7P7rH.js", "/assets/accordion-CzXT3k43.js", "/assets/mdx-vrch0szL.js", "/assets/epic-video-BVcJzJzi.js", "/assets/use-event-source-BuD4_2SF.js", "/assets/preload-helper-BXl3LOEh.js", "/assets/launch-editor-B2dmpkaO.js", "/assets/revalidation-ws-BJWJviUX.js"], "css": ["/assets/epic-video-irT-uesJ.css"], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "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, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/test-CdEKoDoS.js", "imports": ["/assets/chunk-EPOLDU6W-BCLmut3y.js", "/assets/jsx-runtime-C5WNSv3b.js", "/assets/tests-xD9PppmM.js", "/assets/index-CqIc3cxq.js", "/assets/accordion-CzXT3k43.js", "/assets/tooltip-Chzzs4KB.js", "/assets/index-vDCSPjrM.js", "/assets/misc-DVYuZMjW.js", "/assets/index-BOhw3wcM.js", "/assets/index-C_KjwKVt.js", "/assets/epic-video-BVcJzJzi.js", "/assets/use-event-source-BuD4_2SF.js", "/assets/index-DzdDahau.js", "/assets/index-BW8stNyh.js", "/assets/root-loader-BOzEMapJ.js", "/assets/pe-CIZUOJMr.js", "/assets/schemas-Uj5SZtvt.js", "/assets/online-DiNLkgTC.js", "/assets/loading-CUydCGD3.js", "/assets/user-BsPobzjB.js", "/assets/workshop-config-Zfc8zU0x.js", "/assets/playground-window-D9a7P7rH.js", "/assets/set-playground-DeMY9i7p.js", "/assets/button-CIlVtsau.js", "/assets/onboarding-indicator-CVwXz3Cn.js", "/assets/progress-bar-B27isaGl.js", "/assets/dialog-DnpUg3VT.js"], "css": ["/assets/epic-video-irT-uesJ.css"], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.index": { "id": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.index", "parentId": "routes/_app+/exercise+/_layout", "path": ":exerciseNumber/:stepNumber", "index": true, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasErrorBoundary": true, "module": "/assets/_exerciseNumber_._stepNumber.index-DYb7kg06.js", "imports": ["/assets/chunk-EPOLDU6W-BCLmut3y.js", "/assets/jsx-runtime-C5WNSv3b.js", "/assets/error-boundary-DFBd6s0g.js", "/assets/error-boundary-BDqWjIFP.js", "/assets/index-CqIc3cxq.js", "/assets/preload-helper-BXl3LOEh.js", "/assets/misc-DVYuZMjW.js", "/assets/chunk-FNSCYPCZ-BHgC5cdx.js", "/assets/schemas-Uj5SZtvt.js", "/assets/coerce-CkHW0SMv.js"], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "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, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/_exerciseNumber_.finished-CGoPhVVF.js", "imports": ["/assets/chunk-EPOLDU6W-BCLmut3y.js", "/assets/jsx-runtime-C5WNSv3b.js", "/assets/index-CEVyDj51.js", "/assets/index-CqIc3cxq.js", "/assets/epic-video-BVcJzJzi.js", "/assets/misc-DVYuZMjW.js", "/assets/loading-CUydCGD3.js", "/assets/nav-chevrons-DlNUibJV.js", "/assets/revalidation-ws-BJWJviUX.js", "/assets/launch-editor-B2dmpkaO.js", "/assets/progress-fKsNxmmt.js", "/assets/index-BW8stNyh.js", "/assets/mdx-vrch0szL.js", "/assets/online-DiNLkgTC.js", "/assets/root-loader-BOzEMapJ.js", "/assets/seo-t5J-DRxw.js", "/assets/use-event-source-BuD4_2SF.js", "/assets/index-DzdDahau.js", "/assets/index-vDCSPjrM.js", "/assets/schemas-Uj5SZtvt.js", "/assets/tooltip-Chzzs4KB.js", "/assets/user-BsPobzjB.js", "/assets/workshop-config-Zfc8zU0x.js", "/assets/progress-bar-B27isaGl.js", "/assets/pe-CIZUOJMr.js", "/assets/preload-helper-BXl3LOEh.js"], "css": ["/assets/epic-video-irT-uesJ.css"], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/_app+/extra+/_layout": { "id": "routes/_app+/extra+/_layout", "parentId": "routes/_app+/_layout", "path": "extra", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/_layout-jJ6TnDJF.js", "imports": ["/assets/chunk-EPOLDU6W-BCLmut3y.js", "/assets/jsx-runtime-C5WNSv3b.js", "/assets/index-CqIc3cxq.js"], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/_app+/extra+/$extra": { "id": "routes/_app+/extra+/$extra", "parentId": "routes/_app+/extra+/_layout", "path": ":extra", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasErrorBoundary": true, "module": "/assets/_extra-BZPB_nWQ.js", "imports": ["/assets/chunk-EPOLDU6W-BCLmut3y.js", "/assets/jsx-runtime-C5WNSv3b.js", "/assets/index-CEVyDj51.js", "/assets/playground-C_aP_pE8.js", "/assets/index-CqIc3cxq.js", "/assets/diff-CxEbhF8Q.js", "/assets/epic-video-BVcJzJzi.js", "/assets/error-boundary-DFBd6s0g.js", "/assets/nav-chevrons-DlNUibJV.js", "/assets/revalidation-ws-BJWJviUX.js", "/assets/workshop-config-Zfc8zU0x.js", "/assets/preview-CiDtuQCc.js", "/assets/launch-editor-B2dmpkaO.js", "/assets/set-playground-DeMY9i7p.js", "/assets/mdx-vrch0szL.js", "/assets/root-loader-BOzEMapJ.js", "/assets/seo-t5J-DRxw.js", "/assets/split-layout-DnRER1bP.js", "/assets/misc-DVYuZMjW.js", "/assets/loading-CUydCGD3.js", "/assets/index-BW8stNyh.js", "/assets/tooltip-Chzzs4KB.js", "/assets/index-vDCSPjrM.js", "/assets/pe-CIZUOJMr.js", "/assets/schemas-Uj5SZtvt.js", "/assets/discord-DlU9y5Iz.js", "/assets/user-BsPobzjB.js", "/assets/online-DiNLkgTC.js", "/assets/index-BOhw3wcM.js", "/assets/index-C_KjwKVt.js", "/assets/index-DzdDahau.js", "/assets/playground-window-D9a7P7rH.js", "/assets/accordion-CzXT3k43.js", "/assets/use-event-source-BuD4_2SF.js", "/assets/preload-helper-BXl3LOEh.js", "/assets/button-CIlVtsau.js", "/assets/progress-bar-B27isaGl.js", "/assets/onboarding-indicator-CVwXz3Cn.js", "/assets/dialog-DnpUg3VT.js"], "css": ["/assets/epic-video-irT-uesJ.css"], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/_app+/extra+/index": { "id": "routes/_app+/extra+/index", "parentId": "routes/_app+/extra+/_layout", "path": void 0, "index": true, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasErrorBoundary": true, "module": "/assets/index-D3zOGeBE.js", "imports": ["/assets/chunk-EPOLDU6W-BCLmut3y.js", "/assets/jsx-runtime-C5WNSv3b.js", "/assets/index-CEVyDj51.js", "/assets/epic-video-BVcJzJzi.js", "/assets/error-boundary-DFBd6s0g.js", "/assets/revalidation-ws-BJWJviUX.js", "/assets/launch-editor-B2dmpkaO.js", "/assets/mdx-vrch0szL.js", "/assets/misc-DVYuZMjW.js", "/assets/root-loader-BOzEMapJ.js", "/assets/seo-t5J-DRxw.js", "/assets/index-CqIc3cxq.js", "/assets/use-event-source-BuD4_2SF.js", "/assets/index-DzdDahau.js", "/assets/index-vDCSPjrM.js", "/assets/index-BW8stNyh.js", "/assets/tooltip-Chzzs4KB.js", "/assets/pe-CIZUOJMr.js", "/assets/schemas-Uj5SZtvt.js", "/assets/online-DiNLkgTC.js", "/assets/loading-CUydCGD3.js", "/assets/user-BsPobzjB.js", "/assets/workshop-config-Zfc8zU0x.js", "/assets/preload-helper-BXl3LOEh.js", "/assets/progress-bar-B27isaGl.js"], "css": ["/assets/epic-video-irT-uesJ.css"], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "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, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/finished-CmV4aFjA.js", "imports": ["/assets/chunk-EPOLDU6W-BCLmut3y.js", "/assets/jsx-runtime-C5WNSv3b.js", "/assets/index-CEVyDj51.js", "/assets/index-CqIc3cxq.js", "/assets/epic-video-BVcJzJzi.js", "/assets/misc-DVYuZMjW.js", "/assets/loading-CUydCGD3.js", "/assets/nav-chevrons-DlNUibJV.js", "/assets/revalidation-ws-BJWJviUX.js", "/assets/mdx-vrch0szL.js", "/assets/online-DiNLkgTC.js", "/assets/root-loader-BOzEMapJ.js", "/assets/seo-t5J-DRxw.js", "/assets/launch-editor-B2dmpkaO.js", "/assets/progress-fKsNxmmt.js", "/assets/index-BW8stNyh.js", "/assets/use-event-source-BuD4_2SF.js", "/assets/index-DzdDahau.js", "/assets/index-vDCSPjrM.js", "/assets/schemas-Uj5SZtvt.js", "/assets/tooltip-Chzzs4KB.js", "/assets/user-BsPobzjB.js", "/assets/workshop-config-Zfc8zU0x.js", "/assets/preload-helper-BXl3LOEh.js", "/assets/progress-bar-B27isaGl.js", "/assets/pe-CIZUOJMr.js"], "css": ["/assets/epic-video-irT-uesJ.css"], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/_app+/guide": { "id": "routes/_app+/guide", "parentId": "routes/_app+/_layout", "path": "guide", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/guide-B4wAqzq_.js", "imports": ["/assets/chunk-EPOLDU6W-BCLmut3y.js", "/assets/jsx-runtime-C5WNSv3b.js", "/assets/index-CqIc3cxq.js"], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "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, "hasClientMiddleware": false, "hasErrorBoundary": true, "module": "/assets/index-B-9GR1C2.js", "imports": ["/assets/chunk-EPOLDU6W-BCLmut3y.js", "/assets/jsx-runtime-C5WNSv3b.js", "/assets/index-CEVyDj51.js", "/assets/epic-video-BVcJzJzi.js", "/assets/error-boundary-DFBd6s0g.js", "/assets/launch-editor-B2dmpkaO.js", "/assets/mdx-vrch0szL.js", "/assets/misc-DVYuZMjW.js", "/assets/progress-fKsNxmmt.js", "/assets/index-CqIc3cxq.js", "/assets/use-event-source-BuD4_2SF.js", "/assets/index-DzdDahau.js", "/assets/index-vDCSPjrM.js", "/assets/index-BW8stNyh.js", "/assets/tooltip-Chzzs4KB.js", "/assets/root-loader-BOzEMapJ.js", "/assets/pe-CIZUOJMr.js", "/assets/schemas-Uj5SZtvt.js", "/assets/online-DiNLkgTC.js", "/assets/loading-CUydCGD3.js", "/assets/user-BsPobzjB.js", "/assets/workshop-config-Zfc8zU0x.js", "/assets/preload-helper-BXl3LOEh.js", "/assets/progress-bar-B27isaGl.js"], "css": ["/assets/epic-video-irT-uesJ.css"], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/_app+/l": { "id": "routes/_app+/l", "parentId": "routes/_app+/_layout", "path": "l", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/l-BWU2-fsj.js", "imports": ["/assets/chunk-EPOLDU6W-BCLmut3y.js", "/assets/index-CqIc3cxq.js"], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "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, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/login-DvBmP_ce.js", "imports": ["/assets/chunk-EPOLDU6W-BCLmut3y.js", "/assets/jsx-runtime-C5WNSv3b.js", "/assets/index-CqIc3cxq.js", "/assets/use-event-source-BuD4_2SF.js", "/assets/button-CIlVtsau.js", "/assets/loading-CUydCGD3.js", "/assets/product-GLsnY1u3.js", "/assets/workshop-config-Zfc8zU0x.js", "/assets/schemas-Uj5SZtvt.js", "/assets/misc-DVYuZMjW.js", "/assets/index-BW8stNyh.js", "/assets/tooltip-Chzzs4KB.js", "/assets/index-vDCSPjrM.js", "/assets/root-loader-BOzEMapJ.js", "/assets/pe-CIZUOJMr.js"], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "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, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/preferences-BCvK10k2.js", "imports": ["/assets/chunk-EPOLDU6W-BCLmut3y.js", "/assets/jsx-runtime-C5WNSv3b.js", "/assets/button-CIlVtsau.js", "/assets/misc-DVYuZMjW.js", "/assets/tooltip-Chzzs4KB.js", "/assets/root-loader-BOzEMapJ.js", "/assets/index-CqIc3cxq.js", "/assets/index-vDCSPjrM.js"], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "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, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/support-D5mDQ-c-.js", "imports": ["/assets/chunk-EPOLDU6W-BCLmut3y.js", "/assets/jsx-runtime-C5WNSv3b.js", "/assets/index-CqIc3cxq.js"], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/_app+/workspace-structure": { "id": "routes/_app+/workspace-structure", "parentId": "routes/_app+/_layout", "path": "workspace-structure", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/workspace-structure-i_5Tiikk.js", "imports": ["/assets/chunk-EPOLDU6W-BCLmut3y.js", "/assets/jsx-runtime-C5WNSv3b.js", "/assets/button-CIlVtsau.js", "/assets/index-CqIc3cxq.js", "/assets/misc-DVYuZMjW.js"], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "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, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/_layout-CunOyAg4.js", "imports": ["/assets/chunk-EPOLDU6W-BCLmut3y.js", "/assets/jsx-runtime-C5WNSv3b.js", "/assets/root-loader-BOzEMapJ.js", "/assets/index-CqIc3cxq.js"], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "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, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/apps-l0sNRNKZ.js", "imports": [], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/admin+/cache": { "id": "routes/admin+/cache", "parentId": "routes/admin+/_layout", "path": "cache", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/cache-MJu_dqFS.js", "imports": ["/assets/chunk-FNSCYPCZ-BHgC5cdx.js", "/assets/chunk-EPOLDU6W-BCLmut3y.js", "/assets/jsx-runtime-C5WNSv3b.js", "/assets/index-CqIc3cxq.js", "/assets/client-only-BeMV-Wuv.js", "/assets/button-CIlVtsau.js", "/assets/misc-DVYuZMjW.js", "/assets/launch-editor-B2dmpkaO.js", "/assets/pe-CIZUOJMr.js", "/assets/progress-bar-B27isaGl.js", "/assets/root-loader-BOzEMapJ.js"], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/admin+/cache.$": { "id": "routes/admin+/cache.$", "parentId": "routes/admin+/cache", "path": "*", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/cache._-l0sNRNKZ.js", "imports": [], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/admin+/db": { "id": "routes/admin+/db", "parentId": "routes/admin+/_layout", "path": "db", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/db-x6v-Uxrh.js", "imports": ["/assets/chunk-EPOLDU6W-BCLmut3y.js", "/assets/jsx-runtime-C5WNSv3b.js", "/assets/misc-DVYuZMjW.js", "/assets/tooltip-Chzzs4KB.js", "/assets/launch-editor-B2dmpkaO.js", "/assets/index-CqIc3cxq.js", "/assets/index-vDCSPjrM.js", "/assets/progress-bar-B27isaGl.js", "/assets/pe-CIZUOJMr.js", "/assets/root-loader-BOzEMapJ.js"], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "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, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/index-C6vQqVxz.js", "imports": ["/assets/chunk-EPOLDU6W-BCLmut3y.js", "/assets/jsx-runtime-C5WNSv3b.js", "/assets/misc-DVYuZMjW.js", "/assets/tooltip-Chzzs4KB.js", "/assets/progress-fKsNxmmt.js", "/assets/root-loader-BOzEMapJ.js", "/assets/index-CqIc3cxq.js", "/assets/index-vDCSPjrM.js", "/assets/pe-CIZUOJMr.js"], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/admin+/notifications": { "id": "routes/admin+/notifications", "parentId": "routes/admin+/_layout", "path": "notifications", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/notifications-l0sNRNKZ.js", "imports": [], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/admin+/offline-videos": { "id": "routes/admin+/offline-videos", "parentId": "routes/admin+/_layout", "path": "offline-videos", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/offline-videos-Do9PBh87.js", "imports": ["/assets/chunk-EPOLDU6W-BCLmut3y.js", "/assets/jsx-runtime-C5WNSv3b.js", "/assets/misc-DVYuZMjW.js", "/assets/index-CqIc3cxq.js"], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "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, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/version-f8qqYbyU.js", "imports": ["/assets/chunk-EPOLDU6W-BCLmut3y.js", "/assets/jsx-runtime-C5WNSv3b.js", "/assets/workshop-config-Zfc8zU0x.js", "/assets/index-CqIc3cxq.js", "/assets/root-loader-BOzEMapJ.js"], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/admin+/version[.json]": { "id": "routes/admin+/version[.json]", "parentId": "routes/admin+/_layout", "path": "version.json", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/version_.json_-l0sNRNKZ.js", "imports": [], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/apps": { "id": "routes/apps", "parentId": "root", "path": "apps", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/apps-DP2rzg_V.js", "imports": [], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/diff": { "id": "routes/diff", "parentId": "root", "path": "diff", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/diff-eAvgXb3f.js", "imports": ["/assets/chunk-EPOLDU6W-BCLmut3y.js", "/assets/jsx-runtime-C5WNSv3b.js", "/assets/misc-DVYuZMjW.js", "/assets/diff-CxEbhF8Q.js", "/assets/nav-chevrons-DlNUibJV.js", "/assets/index-CqIc3cxq.js", "/assets/accordion-CzXT3k43.js", "/assets/tooltip-Chzzs4KB.js", "/assets/index-vDCSPjrM.js", "/assets/index-BOhw3wcM.js", "/assets/index-C_KjwKVt.js", "/assets/mdx-vrch0szL.js", "/assets/index-DzdDahau.js", "/assets/epic-video-BVcJzJzi.js", "/assets/use-event-source-BuD4_2SF.js", "/assets/index-BW8stNyh.js", "/assets/root-loader-BOzEMapJ.js", "/assets/pe-CIZUOJMr.js", "/assets/schemas-Uj5SZtvt.js", "/assets/online-DiNLkgTC.js", "/assets/loading-CUydCGD3.js", "/assets/user-BsPobzjB.js", "/assets/workshop-config-Zfc8zU0x.js", "/assets/preload-helper-BXl3LOEh.js", "/assets/launch-editor-B2dmpkaO.js", "/assets/progress-bar-B27isaGl.js", "/assets/revalidation-ws-BJWJviUX.js"], "css": ["/assets/epic-video-irT-uesJ.css"], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/diff.$shortcut": { "id": "routes/diff.$shortcut", "parentId": "routes/diff", "path": ":shortcut", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/diff._shortcut-l0sNRNKZ.js", "imports": [], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/exercises": { "id": "routes/exercises", "parentId": "root", "path": "exercises", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/exercises-l0sNRNKZ.js", "imports": [], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "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, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/launch-editor-l0sNRNKZ.js", "imports": [], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "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, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/login-sse-l0sNRNKZ.js", "imports": [], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/mark-onboarding-complete": { "id": "routes/mark-onboarding-complete", "parentId": "root", "path": "mark-onboarding-complete", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/mark-onboarding-complete-l0sNRNKZ.js", "imports": [], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/mcp-ui+/epic-video": { "id": "routes/mcp-ui+/epic-video", "parentId": "root", "path": "mcp-ui/epic-video", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/epic-video-Bx8Ctiez.js", "imports": ["/assets/chunk-EPOLDU6W-BCLmut3y.js", "/assets/jsx-runtime-C5WNSv3b.js", "/assets/index-CqIc3cxq.js", "/assets/epic-video-BVcJzJzi.js", "/assets/use-event-source-BuD4_2SF.js", "/assets/index-DzdDahau.js", "/assets/index-vDCSPjrM.js", "/assets/index-BW8stNyh.js", "/assets/misc-DVYuZMjW.js", "/assets/tooltip-Chzzs4KB.js", "/assets/root-loader-BOzEMapJ.js", "/assets/pe-CIZUOJMr.js", "/assets/schemas-Uj5SZtvt.js", "/assets/online-DiNLkgTC.js", "/assets/loading-CUydCGD3.js", "/assets/user-BsPobzjB.js", "/assets/workshop-config-Zfc8zU0x.js"], "css": ["/assets/epic-video-irT-uesJ.css"], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/og": { "id": "routes/og", "parentId": "root", "path": "og", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/og-l0sNRNKZ.js", "imports": [], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/persist-playground": { "id": "routes/persist-playground", "parentId": "root", "path": "persist-playground", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/persist-playground-l0sNRNKZ.js", "imports": [], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/processes": { "id": "routes/processes", "parentId": "root", "path": "processes", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/processes-l0sNRNKZ.js", "imports": [], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/progress": { "id": "routes/progress", "parentId": "root", "path": "progress", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/progress-l0sNRNKZ.js", "imports": [], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/resources+/healthcheck": { "id": "routes/resources+/healthcheck", "parentId": "root", "path": "resources/healthcheck", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/healthcheck-l0sNRNKZ.js", "imports": [], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/resources+/lookout": { "id": "routes/resources+/lookout", "parentId": "root", "path": "resources/lookout", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/lookout-l0sNRNKZ.js", "imports": [], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/resources+/offline-video-progress.$playbackId": { "id": "routes/resources+/offline-video-progress.$playbackId", "parentId": "root", "path": "resources/offline-video-progress/:playbackId", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/offline-video-progress._playbackId-l0sNRNKZ.js", "imports": [], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/resources+/offline-videos": { "id": "routes/resources+/offline-videos", "parentId": "root", "path": "resources/offline-videos", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/offline-videos-l0sNRNKZ.js", "imports": [], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/resources+/offline-videos.$playbackId": { "id": "routes/resources+/offline-videos.$playbackId", "parentId": "routes/resources+/offline-videos", "path": ":playbackId", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/offline-videos._playbackId-l0sNRNKZ.js", "imports": [], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "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, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/robots_._txt-l0sNRNKZ.js", "imports": [], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/saved-playgrounds": { "id": "routes/saved-playgrounds", "parentId": "root", "path": "saved-playgrounds", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/saved-playgrounds-l0sNRNKZ.js", "imports": [], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "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, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/set-playground-l0sNRNKZ.js", "imports": [], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "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, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/sitemap_._xml-l0sNRNKZ.js", "imports": [], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/start": { "id": "routes/start", "parentId": "root", "path": "start", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/start-l0sNRNKZ.js", "imports": [], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/test": { "id": "routes/test", "parentId": "root", "path": "test", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/test-l0sNRNKZ.js", "imports": [], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/theme/index": { "id": "routes/theme/index", "parentId": "root", "path": "theme", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/index-DP2rzg_V.js", "imports": [], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "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, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/index-K6Dvbx-E.js", "imports": [], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 } }, "url": "/assets/manifest-34df6718.js", "version": "34df6718", "sri": void 0 };
17489
+ const serverManifest = { "entry": { "module": "/assets/entry.client-Dbw2ihVI.js", "imports": ["/assets/jsx-runtime-C5WNSv3b.js", "/assets/index-CqIc3cxq.js", "/assets/index-vDCSPjrM.js", "/assets/chunk-FNSCYPCZ-BHgC5cdx.js", "/assets/chunk-EPOLDU6W-BCLmut3y.js", "/assets/preload-helper-BXl3LOEh.js"], "css": [] }, "routes": { "root": { "id": "root", "parentId": void 0, "path": "", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasErrorBoundary": true, "module": "/assets/root-Bktp3RtN.js", "imports": ["/assets/jsx-runtime-C5WNSv3b.js", "/assets/index-CqIc3cxq.js", "/assets/index-vDCSPjrM.js", "/assets/chunk-FNSCYPCZ-BHgC5cdx.js", "/assets/chunk-EPOLDU6W-BCLmut3y.js", "/assets/preload-helper-BXl3LOEh.js", "/assets/misc-W4055b-0.js", "/assets/client-only-BeMV-Wuv.js", "/assets/error-boundary-DVp6wKiz.js", "/assets/dialog-CzO65Z5w.js", "/assets/progress-bar-DpWhcyhC.js", "/assets/index-DzdDahau.js", "/assets/tooltip-Tlsyx2YO.js", "/assets/schemas-Uj5SZtvt.js", "/assets/index-CdzVFL-Z.js", "/assets/presence-VCvV2mg7.js", "/assets/seo-t5J-DRxw.js", "/assets/pe-CIZUOJMr.js", "/assets/index-ynYvVAOK.js", "/assets/root-loader-BOzEMapJ.js", "/assets/online-DiNLkgTC.js", "/assets/coerce-CkHW0SMv.js"], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/$": { "id": "routes/$", "parentId": "root", "path": "*", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasErrorBoundary": true, "module": "/assets/_-dWSrc4Ox.js", "imports": ["/assets/chunk-EPOLDU6W-BCLmut3y.js", "/assets/jsx-runtime-C5WNSv3b.js", "/assets/error-boundary-DVp6wKiz.js", "/assets/misc-W4055b-0.js", "/assets/index-CqIc3cxq.js", "/assets/preload-helper-BXl3LOEh.js"], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "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, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/_layout-BQ8VYaze.js", "imports": ["/assets/chunk-EPOLDU6W-BCLmut3y.js", "/assets/jsx-runtime-C5WNSv3b.js", "/assets/misc-W4055b-0.js", "/assets/index-CqIc3cxq.js", "/assets/pe-CIZUOJMr.js", "/assets/onboarding-indicator-B-XR90_G.js", "/assets/product-CvyMpYD_.js", "/assets/revalidation-ws-BJWJviUX.js", "/assets/status-indicator-C6DiLYL5.js", "/assets/dialog-CzO65Z5w.js", "/assets/index-CmflCPTU.js", "/assets/tooltip-Tlsyx2YO.js", "/assets/user-BsPobzjB.js", "/assets/workshop-config-Zfc8zU0x.js", "/assets/online-DiNLkgTC.js", "/assets/presence-VCvV2mg7.js", "/assets/root-loader-BOzEMapJ.js", "/assets/progress-ILaVQtOO.js", "/assets/index-CdzVFL-Z.js", "/assets/schemas-Uj5SZtvt.js", "/assets/index-ynYvVAOK.js", "/assets/index-vDCSPjrM.js", "/assets/coerce-CkHW0SMv.js"], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "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, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/account-C96cpeZR.js", "imports": ["/assets/chunk-EPOLDU6W-BCLmut3y.js", "/assets/jsx-runtime-C5WNSv3b.js", "/assets/button-Cd-ekki5.js", "/assets/misc-W4055b-0.js", "/assets/onboarding-indicator-B-XR90_G.js", "/assets/tooltip-Tlsyx2YO.js", "/assets/user-BsPobzjB.js", "/assets/workshop-config-Zfc8zU0x.js", "/assets/index-CqIc3cxq.js", "/assets/root-loader-BOzEMapJ.js", "/assets/index-vDCSPjrM.js"], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "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, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/_-l0sNRNKZ.js", "imports": [], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "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, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/api._-l0sNRNKZ.js", "imports": [], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "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, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/epic_ws_.js_-l0sNRNKZ.js", "imports": [], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "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, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/index-l0sNRNKZ.js", "imports": [], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "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, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/test._testName-l0sNRNKZ.js", "imports": [], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "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, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/test.epic_ws_.js_-l0sNRNKZ.js", "imports": [], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "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, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/app.epic_ws_.js_-l0sNRNKZ.js", "imports": [], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "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, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/discord-r3m19sUM.js", "imports": ["/assets/discord-BJkw0IrB.js", "/assets/chunk-EPOLDU6W-BCLmut3y.js", "/assets/index-CqIc3cxq.js", "/assets/jsx-runtime-C5WNSv3b.js", "/assets/misc-W4055b-0.js", "/assets/user-BsPobzjB.js", "/assets/root-loader-BOzEMapJ.js", "/assets/workshop-config-Zfc8zU0x.js"], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "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, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/_layout-BvtJxESE.js", "imports": ["/assets/chunk-EPOLDU6W-BCLmut3y.js", "/assets/jsx-runtime-C5WNSv3b.js", "/assets/index-CqIc3cxq.js"], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "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, "hasClientMiddleware": false, "hasErrorBoundary": true, "module": "/assets/_exerciseNumber-DgMb13KP.js", "imports": ["/assets/chunk-EPOLDU6W-BCLmut3y.js", "/assets/jsx-runtime-C5WNSv3b.js", "/assets/index-CEVyDj51.js", "/assets/epic-video-D0drHmgC.js", "/assets/error-boundary-DVp6wKiz.js", "/assets/revalidation-ws-BJWJviUX.js", "/assets/launch-editor-D2exGfVu.js", "/assets/progress-ILaVQtOO.js", "/assets/mdx-BzyhMqFg.js", "/assets/root-loader-BOzEMapJ.js", "/assets/seo-t5J-DRxw.js", "/assets/error-boundary-BDqWjIFP.js", "/assets/index-CqIc3cxq.js", "/assets/use-event-source-BuD4_2SF.js", "/assets/index-DzdDahau.js", "/assets/index-vDCSPjrM.js", "/assets/index-CdzVFL-Z.js", "/assets/misc-W4055b-0.js", "/assets/tooltip-Tlsyx2YO.js", "/assets/pe-CIZUOJMr.js", "/assets/schemas-Uj5SZtvt.js", "/assets/online-DiNLkgTC.js", "/assets/loading-CDNzW5oO.js", "/assets/user-BsPobzjB.js", "/assets/workshop-config-Zfc8zU0x.js", "/assets/preload-helper-BXl3LOEh.js", "/assets/progress-bar-DpWhcyhC.js", "/assets/chunk-FNSCYPCZ-BHgC5cdx.js", "/assets/coerce-CkHW0SMv.js"], "css": ["/assets/epic-video-irT-uesJ.css"], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout": { "id": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout", "parentId": "routes/_app+/exercise+/_layout", "path": ":exerciseNumber/:stepNumber/:type", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasErrorBoundary": true, "module": "/assets/_layout-DR0LQ06M.js", "imports": ["/assets/chunk-EPOLDU6W-BCLmut3y.js", "/assets/jsx-runtime-C5WNSv3b.js", "/assets/index-CEVyDj51.js", "/assets/index-CqIc3cxq.js", "/assets/error-boundary-DVp6wKiz.js", "/assets/nav-chevrons-Dk4GtZwQ.js", "/assets/revalidation-ws-BJWJviUX.js", "/assets/launch-editor-D2exGfVu.js", "/assets/progress-ILaVQtOO.js", "/assets/set-playground-BSGwH9dH.js", "/assets/misc-W4055b-0.js", "/assets/root-loader-BOzEMapJ.js", "/assets/seo-t5J-DRxw.js", "/assets/split-layout-DnRER1bP.js", "/assets/error-boundary-BDqWjIFP.js", "/assets/epic-video-D0drHmgC.js", "/assets/tooltip-Tlsyx2YO.js", "/assets/mdx-BzyhMqFg.js", "/assets/index-CmflCPTU.js", "/assets/onboarding-indicator-B-XR90_G.js", "/assets/preload-helper-BXl3LOEh.js", "/assets/schemas-Uj5SZtvt.js", "/assets/progress-bar-DpWhcyhC.js", "/assets/pe-CIZUOJMr.js", "/assets/index-CJDOQ1bl.js", "/assets/index-vDCSPjrM.js", "/assets/index-ynYvVAOK.js", "/assets/button-Cd-ekki5.js", "/assets/dialog-CzO65Z5w.js", "/assets/chunk-FNSCYPCZ-BHgC5cdx.js", "/assets/coerce-CkHW0SMv.js", "/assets/use-event-source-BuD4_2SF.js", "/assets/index-DzdDahau.js", "/assets/index-CdzVFL-Z.js", "/assets/online-DiNLkgTC.js", "/assets/loading-CDNzW5oO.js", "/assets/user-BsPobzjB.js", "/assets/workshop-config-Zfc8zU0x.js"], "css": ["/assets/epic-video-irT-uesJ.css"], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "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, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/app-CJniokic.js", "imports": ["/assets/chunk-EPOLDU6W-BCLmut3y.js", "/assets/jsx-runtime-C5WNSv3b.js", "/assets/index-CqIc3cxq.js", "/assets/preview-fhmjENlm.js", "/assets/misc-W4055b-0.js", "/assets/button-Cd-ekki5.js", "/assets/loading-CDNzW5oO.js", "/assets/index-CdzVFL-Z.js", "/assets/tooltip-Tlsyx2YO.js", "/assets/index-vDCSPjrM.js", "/assets/root-loader-BOzEMapJ.js", "/assets/pe-CIZUOJMr.js", "/assets/schemas-Uj5SZtvt.js", "/assets/progress-bar-DpWhcyhC.js"], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "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, "hasClientMiddleware": false, "hasErrorBoundary": true, "module": "/assets/index-hhQHCvb9.js", "imports": ["/assets/chunk-EPOLDU6W-BCLmut3y.js", "/assets/jsx-runtime-C5WNSv3b.js", "/assets/playground-DmEAkxG1.js", "/assets/diff-BhWzqoVN.js", "/assets/error-boundary-DVp6wKiz.js", "/assets/workshop-config-Zfc8zU0x.js", "/assets/misc-W4055b-0.js", "/assets/preview-fhmjENlm.js", "/assets/tests-fDISNsE-.js", "/assets/index-CqIc3cxq.js", "/assets/loading-CDNzW5oO.js", "/assets/index-CdzVFL-Z.js", "/assets/tooltip-Tlsyx2YO.js", "/assets/index-vDCSPjrM.js", "/assets/root-loader-BOzEMapJ.js", "/assets/pe-CIZUOJMr.js", "/assets/schemas-Uj5SZtvt.js", "/assets/discord-BJkw0IrB.js", "/assets/user-BsPobzjB.js", "/assets/online-DiNLkgTC.js", "/assets/index-CJDOQ1bl.js", "/assets/index-ynYvVAOK.js", "/assets/status-indicator-C6DiLYL5.js", "/assets/index-DzdDahau.js", "/assets/set-playground-BSGwH9dH.js", "/assets/button-Cd-ekki5.js", "/assets/onboarding-indicator-B-XR90_G.js", "/assets/progress-bar-DpWhcyhC.js", "/assets/dialog-CzO65Z5w.js", "/assets/playground-window-x2mQ5o1O.js", "/assets/accordion-CQ7oujC6.js", "/assets/mdx-BzyhMqFg.js", "/assets/epic-video-D0drHmgC.js", "/assets/use-event-source-BuD4_2SF.js", "/assets/preload-helper-BXl3LOEh.js", "/assets/launch-editor-D2exGfVu.js", "/assets/revalidation-ws-BJWJviUX.js"], "css": ["/assets/epic-video-irT-uesJ.css"], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "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, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/test-DtQCjBBX.js", "imports": ["/assets/chunk-EPOLDU6W-BCLmut3y.js", "/assets/jsx-runtime-C5WNSv3b.js", "/assets/tests-fDISNsE-.js", "/assets/index-CqIc3cxq.js", "/assets/accordion-CQ7oujC6.js", "/assets/tooltip-Tlsyx2YO.js", "/assets/index-vDCSPjrM.js", "/assets/misc-W4055b-0.js", "/assets/index-CJDOQ1bl.js", "/assets/index-ynYvVAOK.js", "/assets/epic-video-D0drHmgC.js", "/assets/use-event-source-BuD4_2SF.js", "/assets/index-DzdDahau.js", "/assets/index-CdzVFL-Z.js", "/assets/root-loader-BOzEMapJ.js", "/assets/pe-CIZUOJMr.js", "/assets/schemas-Uj5SZtvt.js", "/assets/online-DiNLkgTC.js", "/assets/loading-CDNzW5oO.js", "/assets/user-BsPobzjB.js", "/assets/workshop-config-Zfc8zU0x.js", "/assets/playground-window-x2mQ5o1O.js", "/assets/set-playground-BSGwH9dH.js", "/assets/button-Cd-ekki5.js", "/assets/onboarding-indicator-B-XR90_G.js", "/assets/progress-bar-DpWhcyhC.js", "/assets/dialog-CzO65Z5w.js"], "css": ["/assets/epic-video-irT-uesJ.css"], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.index": { "id": "routes/_app+/exercise+/$exerciseNumber_.$stepNumber.index", "parentId": "routes/_app+/exercise+/_layout", "path": ":exerciseNumber/:stepNumber", "index": true, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasErrorBoundary": true, "module": "/assets/_exerciseNumber_._stepNumber.index-WLW-sVZ0.js", "imports": ["/assets/chunk-EPOLDU6W-BCLmut3y.js", "/assets/jsx-runtime-C5WNSv3b.js", "/assets/error-boundary-DVp6wKiz.js", "/assets/error-boundary-BDqWjIFP.js", "/assets/index-CqIc3cxq.js", "/assets/preload-helper-BXl3LOEh.js", "/assets/misc-W4055b-0.js", "/assets/chunk-FNSCYPCZ-BHgC5cdx.js", "/assets/schemas-Uj5SZtvt.js", "/assets/coerce-CkHW0SMv.js"], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "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, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/_exerciseNumber_.finished-DkAs61X_.js", "imports": ["/assets/chunk-EPOLDU6W-BCLmut3y.js", "/assets/jsx-runtime-C5WNSv3b.js", "/assets/index-CEVyDj51.js", "/assets/index-CqIc3cxq.js", "/assets/epic-video-D0drHmgC.js", "/assets/misc-W4055b-0.js", "/assets/loading-CDNzW5oO.js", "/assets/nav-chevrons-Dk4GtZwQ.js", "/assets/revalidation-ws-BJWJviUX.js", "/assets/launch-editor-D2exGfVu.js", "/assets/progress-ILaVQtOO.js", "/assets/index-CdzVFL-Z.js", "/assets/mdx-BzyhMqFg.js", "/assets/online-DiNLkgTC.js", "/assets/root-loader-BOzEMapJ.js", "/assets/seo-t5J-DRxw.js", "/assets/use-event-source-BuD4_2SF.js", "/assets/index-DzdDahau.js", "/assets/index-vDCSPjrM.js", "/assets/schemas-Uj5SZtvt.js", "/assets/tooltip-Tlsyx2YO.js", "/assets/user-BsPobzjB.js", "/assets/workshop-config-Zfc8zU0x.js", "/assets/progress-bar-DpWhcyhC.js", "/assets/pe-CIZUOJMr.js", "/assets/preload-helper-BXl3LOEh.js"], "css": ["/assets/epic-video-irT-uesJ.css"], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/_app+/extra+/_layout": { "id": "routes/_app+/extra+/_layout", "parentId": "routes/_app+/_layout", "path": "extra", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/_layout-jJ6TnDJF.js", "imports": ["/assets/chunk-EPOLDU6W-BCLmut3y.js", "/assets/jsx-runtime-C5WNSv3b.js", "/assets/index-CqIc3cxq.js"], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/_app+/extra+/$extra": { "id": "routes/_app+/extra+/$extra", "parentId": "routes/_app+/extra+/_layout", "path": ":extra", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasErrorBoundary": true, "module": "/assets/_extra-fwsy2qkP.js", "imports": ["/assets/chunk-EPOLDU6W-BCLmut3y.js", "/assets/jsx-runtime-C5WNSv3b.js", "/assets/index-CEVyDj51.js", "/assets/playground-DmEAkxG1.js", "/assets/index-CqIc3cxq.js", "/assets/diff-BhWzqoVN.js", "/assets/epic-video-D0drHmgC.js", "/assets/error-boundary-DVp6wKiz.js", "/assets/nav-chevrons-Dk4GtZwQ.js", "/assets/revalidation-ws-BJWJviUX.js", "/assets/workshop-config-Zfc8zU0x.js", "/assets/preview-fhmjENlm.js", "/assets/launch-editor-D2exGfVu.js", "/assets/set-playground-BSGwH9dH.js", "/assets/mdx-BzyhMqFg.js", "/assets/root-loader-BOzEMapJ.js", "/assets/seo-t5J-DRxw.js", "/assets/split-layout-DnRER1bP.js", "/assets/misc-W4055b-0.js", "/assets/loading-CDNzW5oO.js", "/assets/index-CdzVFL-Z.js", "/assets/tooltip-Tlsyx2YO.js", "/assets/index-vDCSPjrM.js", "/assets/pe-CIZUOJMr.js", "/assets/schemas-Uj5SZtvt.js", "/assets/discord-BJkw0IrB.js", "/assets/user-BsPobzjB.js", "/assets/online-DiNLkgTC.js", "/assets/index-CJDOQ1bl.js", "/assets/index-ynYvVAOK.js", "/assets/status-indicator-C6DiLYL5.js", "/assets/index-DzdDahau.js", "/assets/playground-window-x2mQ5o1O.js", "/assets/accordion-CQ7oujC6.js", "/assets/use-event-source-BuD4_2SF.js", "/assets/preload-helper-BXl3LOEh.js", "/assets/button-Cd-ekki5.js", "/assets/progress-bar-DpWhcyhC.js", "/assets/onboarding-indicator-B-XR90_G.js", "/assets/dialog-CzO65Z5w.js"], "css": ["/assets/epic-video-irT-uesJ.css"], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/_app+/extra+/index": { "id": "routes/_app+/extra+/index", "parentId": "routes/_app+/extra+/_layout", "path": void 0, "index": true, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasErrorBoundary": true, "module": "/assets/index-BKAVQvm5.js", "imports": ["/assets/chunk-EPOLDU6W-BCLmut3y.js", "/assets/jsx-runtime-C5WNSv3b.js", "/assets/index-CEVyDj51.js", "/assets/epic-video-D0drHmgC.js", "/assets/error-boundary-DVp6wKiz.js", "/assets/revalidation-ws-BJWJviUX.js", "/assets/launch-editor-D2exGfVu.js", "/assets/mdx-BzyhMqFg.js", "/assets/misc-W4055b-0.js", "/assets/root-loader-BOzEMapJ.js", "/assets/seo-t5J-DRxw.js", "/assets/index-CqIc3cxq.js", "/assets/use-event-source-BuD4_2SF.js", "/assets/index-DzdDahau.js", "/assets/index-vDCSPjrM.js", "/assets/index-CdzVFL-Z.js", "/assets/tooltip-Tlsyx2YO.js", "/assets/pe-CIZUOJMr.js", "/assets/schemas-Uj5SZtvt.js", "/assets/online-DiNLkgTC.js", "/assets/loading-CDNzW5oO.js", "/assets/user-BsPobzjB.js", "/assets/workshop-config-Zfc8zU0x.js", "/assets/preload-helper-BXl3LOEh.js", "/assets/progress-bar-DpWhcyhC.js"], "css": ["/assets/epic-video-irT-uesJ.css"], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "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, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/finished-CiVHAeSV.js", "imports": ["/assets/chunk-EPOLDU6W-BCLmut3y.js", "/assets/jsx-runtime-C5WNSv3b.js", "/assets/index-CEVyDj51.js", "/assets/index-CqIc3cxq.js", "/assets/epic-video-D0drHmgC.js", "/assets/misc-W4055b-0.js", "/assets/loading-CDNzW5oO.js", "/assets/nav-chevrons-Dk4GtZwQ.js", "/assets/revalidation-ws-BJWJviUX.js", "/assets/mdx-BzyhMqFg.js", "/assets/online-DiNLkgTC.js", "/assets/root-loader-BOzEMapJ.js", "/assets/seo-t5J-DRxw.js", "/assets/launch-editor-D2exGfVu.js", "/assets/progress-ILaVQtOO.js", "/assets/index-CdzVFL-Z.js", "/assets/use-event-source-BuD4_2SF.js", "/assets/index-DzdDahau.js", "/assets/index-vDCSPjrM.js", "/assets/schemas-Uj5SZtvt.js", "/assets/tooltip-Tlsyx2YO.js", "/assets/user-BsPobzjB.js", "/assets/workshop-config-Zfc8zU0x.js", "/assets/preload-helper-BXl3LOEh.js", "/assets/progress-bar-DpWhcyhC.js", "/assets/pe-CIZUOJMr.js"], "css": ["/assets/epic-video-irT-uesJ.css"], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/_app+/guide": { "id": "routes/_app+/guide", "parentId": "routes/_app+/_layout", "path": "guide", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/guide-Cinib8Ji.js", "imports": ["/assets/chunk-EPOLDU6W-BCLmut3y.js", "/assets/jsx-runtime-C5WNSv3b.js", "/assets/index-CqIc3cxq.js"], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "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, "hasClientMiddleware": false, "hasErrorBoundary": true, "module": "/assets/index-C_wcF1aP.js", "imports": ["/assets/chunk-EPOLDU6W-BCLmut3y.js", "/assets/jsx-runtime-C5WNSv3b.js", "/assets/index-CEVyDj51.js", "/assets/epic-video-D0drHmgC.js", "/assets/error-boundary-DVp6wKiz.js", "/assets/launch-editor-D2exGfVu.js", "/assets/mdx-BzyhMqFg.js", "/assets/misc-W4055b-0.js", "/assets/progress-ILaVQtOO.js", "/assets/index-CqIc3cxq.js", "/assets/use-event-source-BuD4_2SF.js", "/assets/index-DzdDahau.js", "/assets/index-vDCSPjrM.js", "/assets/index-CdzVFL-Z.js", "/assets/tooltip-Tlsyx2YO.js", "/assets/root-loader-BOzEMapJ.js", "/assets/pe-CIZUOJMr.js", "/assets/schemas-Uj5SZtvt.js", "/assets/online-DiNLkgTC.js", "/assets/loading-CDNzW5oO.js", "/assets/user-BsPobzjB.js", "/assets/workshop-config-Zfc8zU0x.js", "/assets/preload-helper-BXl3LOEh.js", "/assets/progress-bar-DpWhcyhC.js"], "css": ["/assets/epic-video-irT-uesJ.css"], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/_app+/l": { "id": "routes/_app+/l", "parentId": "routes/_app+/_layout", "path": "l", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/l-BWU2-fsj.js", "imports": ["/assets/chunk-EPOLDU6W-BCLmut3y.js", "/assets/index-CqIc3cxq.js"], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "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, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/login-mWjVXGbJ.js", "imports": ["/assets/chunk-EPOLDU6W-BCLmut3y.js", "/assets/jsx-runtime-C5WNSv3b.js", "/assets/index-CqIc3cxq.js", "/assets/use-event-source-BuD4_2SF.js", "/assets/button-Cd-ekki5.js", "/assets/loading-CDNzW5oO.js", "/assets/product-CvyMpYD_.js", "/assets/workshop-config-Zfc8zU0x.js", "/assets/schemas-Uj5SZtvt.js", "/assets/misc-W4055b-0.js", "/assets/index-CdzVFL-Z.js", "/assets/tooltip-Tlsyx2YO.js", "/assets/index-vDCSPjrM.js", "/assets/root-loader-BOzEMapJ.js", "/assets/pe-CIZUOJMr.js"], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "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, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/preferences-D6HQ5bK1.js", "imports": ["/assets/chunk-EPOLDU6W-BCLmut3y.js", "/assets/jsx-runtime-C5WNSv3b.js", "/assets/button-Cd-ekki5.js", "/assets/misc-W4055b-0.js", "/assets/tooltip-Tlsyx2YO.js", "/assets/root-loader-BOzEMapJ.js", "/assets/index-CqIc3cxq.js", "/assets/index-vDCSPjrM.js"], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "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, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/support-D5mDQ-c-.js", "imports": ["/assets/chunk-EPOLDU6W-BCLmut3y.js", "/assets/jsx-runtime-C5WNSv3b.js", "/assets/index-CqIc3cxq.js"], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/_app+/workspace-structure": { "id": "routes/_app+/workspace-structure", "parentId": "routes/_app+/_layout", "path": "workspace-structure", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/workspace-structure-B6Rpl-B2.js", "imports": ["/assets/chunk-EPOLDU6W-BCLmut3y.js", "/assets/jsx-runtime-C5WNSv3b.js", "/assets/button-Cd-ekki5.js", "/assets/index-CqIc3cxq.js", "/assets/misc-W4055b-0.js"], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "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, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/_layout-CunOyAg4.js", "imports": ["/assets/chunk-EPOLDU6W-BCLmut3y.js", "/assets/jsx-runtime-C5WNSv3b.js", "/assets/root-loader-BOzEMapJ.js", "/assets/index-CqIc3cxq.js"], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "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, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/apps-l0sNRNKZ.js", "imports": [], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/admin+/cache": { "id": "routes/admin+/cache", "parentId": "routes/admin+/_layout", "path": "cache", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/cache-CAr50MIB.js", "imports": ["/assets/chunk-FNSCYPCZ-BHgC5cdx.js", "/assets/chunk-EPOLDU6W-BCLmut3y.js", "/assets/jsx-runtime-C5WNSv3b.js", "/assets/index-CqIc3cxq.js", "/assets/client-only-BeMV-Wuv.js", "/assets/button-Cd-ekki5.js", "/assets/misc-W4055b-0.js", "/assets/launch-editor-D2exGfVu.js", "/assets/pe-CIZUOJMr.js", "/assets/progress-bar-DpWhcyhC.js", "/assets/root-loader-BOzEMapJ.js"], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/admin+/cache.$": { "id": "routes/admin+/cache.$", "parentId": "routes/admin+/cache", "path": "*", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/cache._-l0sNRNKZ.js", "imports": [], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/admin+/db": { "id": "routes/admin+/db", "parentId": "routes/admin+/_layout", "path": "db", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/db-DAnX-T3_.js", "imports": ["/assets/chunk-EPOLDU6W-BCLmut3y.js", "/assets/jsx-runtime-C5WNSv3b.js", "/assets/misc-W4055b-0.js", "/assets/tooltip-Tlsyx2YO.js", "/assets/launch-editor-D2exGfVu.js", "/assets/index-CqIc3cxq.js", "/assets/index-vDCSPjrM.js", "/assets/progress-bar-DpWhcyhC.js", "/assets/pe-CIZUOJMr.js", "/assets/root-loader-BOzEMapJ.js"], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "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, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/index-DuFMeXSm.js", "imports": ["/assets/chunk-EPOLDU6W-BCLmut3y.js", "/assets/jsx-runtime-C5WNSv3b.js", "/assets/misc-W4055b-0.js", "/assets/index-CqIc3cxq.js", "/assets/tooltip-Tlsyx2YO.js", "/assets/progress-ILaVQtOO.js", "/assets/root-loader-BOzEMapJ.js", "/assets/index-vDCSPjrM.js", "/assets/pe-CIZUOJMr.js"], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/admin+/notifications": { "id": "routes/admin+/notifications", "parentId": "routes/admin+/_layout", "path": "notifications", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/notifications-l0sNRNKZ.js", "imports": [], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/admin+/offline-videos": { "id": "routes/admin+/offline-videos", "parentId": "routes/admin+/_layout", "path": "offline-videos", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/offline-videos-BP7_xJkO.js", "imports": ["/assets/chunk-EPOLDU6W-BCLmut3y.js", "/assets/jsx-runtime-C5WNSv3b.js", "/assets/misc-W4055b-0.js", "/assets/index-CqIc3cxq.js"], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "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, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/version-f8qqYbyU.js", "imports": ["/assets/chunk-EPOLDU6W-BCLmut3y.js", "/assets/jsx-runtime-C5WNSv3b.js", "/assets/workshop-config-Zfc8zU0x.js", "/assets/index-CqIc3cxq.js", "/assets/root-loader-BOzEMapJ.js"], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/admin+/version[.json]": { "id": "routes/admin+/version[.json]", "parentId": "routes/admin+/_layout", "path": "version.json", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/version_.json_-l0sNRNKZ.js", "imports": [], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/apps": { "id": "routes/apps", "parentId": "root", "path": "apps", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/apps-DP2rzg_V.js", "imports": [], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/diff": { "id": "routes/diff", "parentId": "root", "path": "diff", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/diff-DC-wn6-x.js", "imports": ["/assets/chunk-EPOLDU6W-BCLmut3y.js", "/assets/jsx-runtime-C5WNSv3b.js", "/assets/misc-W4055b-0.js", "/assets/diff-BhWzqoVN.js", "/assets/nav-chevrons-Dk4GtZwQ.js", "/assets/index-CqIc3cxq.js", "/assets/accordion-CQ7oujC6.js", "/assets/tooltip-Tlsyx2YO.js", "/assets/index-vDCSPjrM.js", "/assets/index-CJDOQ1bl.js", "/assets/index-ynYvVAOK.js", "/assets/mdx-BzyhMqFg.js", "/assets/index-DzdDahau.js", "/assets/epic-video-D0drHmgC.js", "/assets/use-event-source-BuD4_2SF.js", "/assets/index-CdzVFL-Z.js", "/assets/root-loader-BOzEMapJ.js", "/assets/pe-CIZUOJMr.js", "/assets/schemas-Uj5SZtvt.js", "/assets/online-DiNLkgTC.js", "/assets/loading-CDNzW5oO.js", "/assets/user-BsPobzjB.js", "/assets/workshop-config-Zfc8zU0x.js", "/assets/preload-helper-BXl3LOEh.js", "/assets/launch-editor-D2exGfVu.js", "/assets/progress-bar-DpWhcyhC.js", "/assets/revalidation-ws-BJWJviUX.js"], "css": ["/assets/epic-video-irT-uesJ.css"], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/diff.$shortcut": { "id": "routes/diff.$shortcut", "parentId": "routes/diff", "path": ":shortcut", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/diff._shortcut-l0sNRNKZ.js", "imports": [], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/exercises": { "id": "routes/exercises", "parentId": "root", "path": "exercises", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/exercises-l0sNRNKZ.js", "imports": [], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "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, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/launch-editor-l0sNRNKZ.js", "imports": [], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "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, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/login-sse-l0sNRNKZ.js", "imports": [], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/mark-onboarding-complete": { "id": "routes/mark-onboarding-complete", "parentId": "root", "path": "mark-onboarding-complete", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/mark-onboarding-complete-l0sNRNKZ.js", "imports": [], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/mcp-ui+/epic-video": { "id": "routes/mcp-ui+/epic-video", "parentId": "root", "path": "mcp-ui/epic-video", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/epic-video-8Hv_HMMr.js", "imports": ["/assets/chunk-EPOLDU6W-BCLmut3y.js", "/assets/jsx-runtime-C5WNSv3b.js", "/assets/index-CqIc3cxq.js", "/assets/epic-video-D0drHmgC.js", "/assets/use-event-source-BuD4_2SF.js", "/assets/index-DzdDahau.js", "/assets/index-vDCSPjrM.js", "/assets/index-CdzVFL-Z.js", "/assets/misc-W4055b-0.js", "/assets/tooltip-Tlsyx2YO.js", "/assets/root-loader-BOzEMapJ.js", "/assets/pe-CIZUOJMr.js", "/assets/schemas-Uj5SZtvt.js", "/assets/online-DiNLkgTC.js", "/assets/loading-CDNzW5oO.js", "/assets/user-BsPobzjB.js", "/assets/workshop-config-Zfc8zU0x.js"], "css": ["/assets/epic-video-irT-uesJ.css"], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/og": { "id": "routes/og", "parentId": "root", "path": "og", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/og-l0sNRNKZ.js", "imports": [], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/persist-playground": { "id": "routes/persist-playground", "parentId": "root", "path": "persist-playground", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/persist-playground-l0sNRNKZ.js", "imports": [], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/processes": { "id": "routes/processes", "parentId": "root", "path": "processes", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/processes-l0sNRNKZ.js", "imports": [], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/progress": { "id": "routes/progress", "parentId": "root", "path": "progress", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/progress-l0sNRNKZ.js", "imports": [], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/resources+/healthcheck": { "id": "routes/resources+/healthcheck", "parentId": "root", "path": "resources/healthcheck", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/healthcheck-l0sNRNKZ.js", "imports": [], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/resources+/lookout": { "id": "routes/resources+/lookout", "parentId": "root", "path": "resources/lookout", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/lookout-l0sNRNKZ.js", "imports": [], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/resources+/offline-video-progress.$playbackId": { "id": "routes/resources+/offline-video-progress.$playbackId", "parentId": "root", "path": "resources/offline-video-progress/:playbackId", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/offline-video-progress._playbackId-l0sNRNKZ.js", "imports": [], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/resources+/offline-videos": { "id": "routes/resources+/offline-videos", "parentId": "root", "path": "resources/offline-videos", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/offline-videos-l0sNRNKZ.js", "imports": [], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/resources+/offline-videos.$playbackId": { "id": "routes/resources+/offline-videos.$playbackId", "parentId": "routes/resources+/offline-videos", "path": ":playbackId", "index": void 0, "caseSensitive": void 0, "hasAction": false, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/offline-videos._playbackId-l0sNRNKZ.js", "imports": [], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "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, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/robots_._txt-l0sNRNKZ.js", "imports": [], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/saved-playgrounds": { "id": "routes/saved-playgrounds", "parentId": "root", "path": "saved-playgrounds", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/saved-playgrounds-l0sNRNKZ.js", "imports": [], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "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, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/set-playground-l0sNRNKZ.js", "imports": [], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "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, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/sitemap_._xml-l0sNRNKZ.js", "imports": [], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/start": { "id": "routes/start", "parentId": "root", "path": "start", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": false, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/start-l0sNRNKZ.js", "imports": [], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/test": { "id": "routes/test", "parentId": "root", "path": "test", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/test-l0sNRNKZ.js", "imports": [], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "routes/theme/index": { "id": "routes/theme/index", "parentId": "root", "path": "theme", "index": void 0, "caseSensitive": void 0, "hasAction": true, "hasLoader": true, "hasClientAction": false, "hasClientLoader": false, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/index-DP2rzg_V.js", "imports": [], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 }, "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, "hasClientMiddleware": false, "hasErrorBoundary": false, "module": "/assets/index-K6Dvbx-E.js", "imports": [], "css": [], "clientActionModule": void 0, "clientLoaderModule": void 0, "clientMiddlewareModule": void 0, "hydrateFallbackModule": void 0 } }, "url": "/assets/manifest-970c9ad1.js", "version": "970c9ad1", "sri": void 0 };
16914
17490
  const assetsBuildDirectory = "build/client";
16915
17491
  const basename = "/";
16916
17492
  const future = { "unstable_optimizeDeps": false, "unstable_subResourceIntegrity": false, "unstable_trailingSlashAwareDataRequests": false, "v8_middleware": false, "v8_splitRouteModules": false, "v8_viteEnvironmentApi": false };