@epic-web/workshop-app 6.14.2 → 6.14.4

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 (332) hide show
  1. package/build/client/assets/{_-DV4Ha66L.js → _-9LaapxAI.js} +2 -2
  2. package/build/client/assets/{_-DV4Ha66L.js.map → _-9LaapxAI.js.map} +1 -1
  3. package/build/client/assets/_-BlUNM4zq.js +2 -0
  4. package/build/client/assets/_-BlUNM4zq.js.map +1 -0
  5. package/build/client/assets/{_basePickBy-BXbL7qon.js → _basePickBy-CbAJC3M4.js} +2 -2
  6. package/build/client/assets/{_basePickBy-BXbL7qon.js.map → _basePickBy-CbAJC3M4.js.map} +1 -1
  7. package/build/client/assets/{_baseUniq-CtZFfRif.js → _baseUniq-DTVooXyu.js} +2 -2
  8. package/build/client/assets/{_baseUniq-CtZFfRif.js.map → _baseUniq-DTVooXyu.js.map} +1 -1
  9. package/build/client/assets/{_exerciseNumber-BcHM923A.js → _exerciseNumber-BjFJaUkO.js} +2 -2
  10. package/build/client/assets/{_exerciseNumber-BcHM923A.js.map → _exerciseNumber-BjFJaUkO.js.map} +1 -1
  11. package/build/client/assets/{_exerciseNumber_._stepNumber-DkoV9tCf.js → _exerciseNumber_._stepNumber-CF1R08wi.js} +2 -2
  12. package/build/client/assets/{_exerciseNumber_._stepNumber-DkoV9tCf.js.map → _exerciseNumber_._stepNumber-CF1R08wi.js.map} +1 -1
  13. package/build/client/assets/_exerciseNumber_._stepNumber.index-C_6vCTaR.js +2 -0
  14. package/build/client/assets/_exerciseNumber_._stepNumber.index-C_6vCTaR.js.map +1 -0
  15. package/build/client/assets/{_exerciseNumber_.finished-BzyI4yot.js → _exerciseNumber_.finished-CYjuSr3V.js} +2 -2
  16. package/build/client/assets/{_exerciseNumber_.finished-BzyI4yot.js.map → _exerciseNumber_.finished-CYjuSr3V.js.map} +1 -1
  17. package/build/client/assets/{_layout-EWv-HN0t.js → _layout-4_y1jBpR.js} +2 -2
  18. package/build/client/assets/{_layout-EWv-HN0t.js.map → _layout-4_y1jBpR.js.map} +1 -1
  19. package/build/client/assets/{_layout-DHLUa4_9.js → _layout-BENlQ_xx.js} +2 -2
  20. package/build/client/assets/{_layout-DHLUa4_9.js.map → _layout-BENlQ_xx.js.map} +1 -1
  21. package/build/client/assets/{_layout-C2qBYSs9.js → _layout-CTcFGMiI.js} +2 -2
  22. package/build/client/assets/{_layout-C2qBYSs9.js.map → _layout-CTcFGMiI.js.map} +1 -1
  23. package/build/client/assets/_layout-jvQa-VjB.js +2 -0
  24. package/build/client/assets/{_layout-DQs7hBSg.js.map → _layout-jvQa-VjB.js.map} +1 -1
  25. package/build/client/assets/{accordion-BNwue7tP.js → accordion-BpWAQcUa.js} +2 -2
  26. package/build/client/assets/{accordion-BNwue7tP.js.map → accordion-BpWAQcUa.js.map} +1 -1
  27. package/build/client/assets/{account-DpWyl5D8.js → account-BLfcW032.js} +2 -2
  28. package/build/client/assets/{account-DpWyl5D8.js.map → account-BLfcW032.js.map} +1 -1
  29. package/build/client/assets/api._-C_6vCTaR.js +2 -0
  30. package/build/client/assets/api._-C_6vCTaR.js.map +1 -0
  31. package/build/client/assets/app-6dAYCqBT.js +2 -0
  32. package/build/client/assets/{app-B6Asqz0_.js.map → app-6dAYCqBT.js.map} +1 -1
  33. package/build/client/assets/app.epic_ws_.js_-C_6vCTaR.js +2 -0
  34. package/build/client/assets/app.epic_ws_.js_-C_6vCTaR.js.map +1 -0
  35. package/build/client/assets/apps-C_6vCTaR.js +2 -0
  36. package/build/client/assets/apps-C_6vCTaR.js.map +1 -0
  37. package/build/client/assets/apps-TWHOUoXd.js +2 -0
  38. package/build/client/assets/apps-TWHOUoXd.js.map +1 -0
  39. package/build/client/assets/{arc-BMVfhJT3.js → arc-BskUIF5k.js} +2 -2
  40. package/build/client/assets/{arc-BMVfhJT3.js.map → arc-BskUIF5k.js.map} +1 -1
  41. package/build/client/assets/{architectureDiagram-NQ2NVSRB-BIdrgV0s.js → architectureDiagram-NQ2NVSRB-D1HJz8yO.js} +2 -2
  42. package/build/client/assets/{architectureDiagram-NQ2NVSRB-BIdrgV0s.js.map → architectureDiagram-NQ2NVSRB-D1HJz8yO.js.map} +1 -1
  43. package/build/client/assets/{blockDiagram-PHRCVELO-BbpPuqMV.js → blockDiagram-PHRCVELO-DCrhcwkq.js} +2 -2
  44. package/build/client/assets/{blockDiagram-PHRCVELO-BbpPuqMV.js.map → blockDiagram-PHRCVELO-DCrhcwkq.js.map} +1 -1
  45. package/build/client/assets/{button-D02M3k_A.js → button-BNGMuAvW.js} +2 -2
  46. package/build/client/assets/{button-D02M3k_A.js.map → button-BNGMuAvW.js.map} +1 -1
  47. package/build/client/assets/{c4Diagram-6F6E4RAY-fp3r0ui0.js → c4Diagram-6F6E4RAY-ab4B6ycV.js} +2 -2
  48. package/build/client/assets/{c4Diagram-6F6E4RAY-fp3r0ui0.js.map → c4Diagram-6F6E4RAY-ab4B6ycV.js.map} +1 -1
  49. package/build/client/assets/cache-C_6vCTaR.js +2 -0
  50. package/build/client/assets/cache-C_6vCTaR.js.map +1 -0
  51. package/build/client/assets/channel-DWOje55X.js +2 -0
  52. package/build/client/assets/{channel-BWGVHDK-.js.map → channel-DWOje55X.js.map} +1 -1
  53. package/build/client/assets/{chunk-353BL4L5-C8aHupyU.js → chunk-353BL4L5-Bz7wi5XS.js} +2 -2
  54. package/build/client/assets/{chunk-353BL4L5-C8aHupyU.js.map → chunk-353BL4L5-Bz7wi5XS.js.map} +1 -1
  55. package/build/client/assets/{chunk-67H74DCK-BOeVunjk.js → chunk-67H74DCK-D5BP4wQy.js} +2 -2
  56. package/build/client/assets/{chunk-67H74DCK-BOeVunjk.js.map → chunk-67H74DCK-D5BP4wQy.js.map} +1 -1
  57. package/build/client/assets/{chunk-6OLS64BW-CFvuQ04p.js → chunk-6OLS64BW-DJ3kJWo9.js} +2 -2
  58. package/build/client/assets/{chunk-6OLS64BW-CFvuQ04p.js.map → chunk-6OLS64BW-DJ3kJWo9.js.map} +1 -1
  59. package/build/client/assets/{chunk-AACKK3MU-BetTIqd0.js → chunk-AACKK3MU-CaKDxoFt.js} +2 -2
  60. package/build/client/assets/{chunk-AACKK3MU-BetTIqd0.js.map → chunk-AACKK3MU-CaKDxoFt.js.map} +1 -1
  61. package/build/client/assets/{chunk-BFAMUDN2-C2PbRhzm.js → chunk-BFAMUDN2-FXeA9ocP.js} +2 -2
  62. package/build/client/assets/{chunk-BFAMUDN2-C2PbRhzm.js.map → chunk-BFAMUDN2-FXeA9ocP.js.map} +1 -1
  63. package/build/client/assets/{chunk-E2GYISFI-Bl4n1xdN.js → chunk-E2GYISFI-BQkQlNBL.js} +2 -2
  64. package/build/client/assets/{chunk-E2GYISFI-Bl4n1xdN.js.map → chunk-E2GYISFI-BQkQlNBL.js.map} +1 -1
  65. package/build/client/assets/{chunk-QEP2MXWD-mvodIAlz.js → chunk-QEP2MXWD-Cck1IPNo.js} +2 -2
  66. package/build/client/assets/{chunk-QEP2MXWD-mvodIAlz.js.map → chunk-QEP2MXWD-Cck1IPNo.js.map} +1 -1
  67. package/build/client/assets/{chunk-QMGIS6GS-Du-_uMOD.js → chunk-QMGIS6GS-X4HtlbLW.js} +2 -2
  68. package/build/client/assets/{chunk-QMGIS6GS-Du-_uMOD.js.map → chunk-QMGIS6GS-X4HtlbLW.js.map} +1 -1
  69. package/build/client/assets/{chunk-SKB7J2MH-Bbw5Ks_7.js → chunk-SKB7J2MH-BRNfjEbC.js} +2 -2
  70. package/build/client/assets/{chunk-SKB7J2MH-Bbw5Ks_7.js.map → chunk-SKB7J2MH-BRNfjEbC.js.map} +1 -1
  71. package/build/client/assets/classDiagram-BGRH5UQR-C9gEbhZD.js +2 -0
  72. package/build/client/assets/{classDiagram-BGRH5UQR-B43E4NNs.js.map → classDiagram-BGRH5UQR-C9gEbhZD.js.map} +1 -1
  73. package/build/client/assets/classDiagram-v2-O24JOBDK-C9gEbhZD.js +2 -0
  74. package/build/client/assets/{classDiagram-v2-O24JOBDK-B43E4NNs.js.map → classDiagram-v2-O24JOBDK-C9gEbhZD.js.map} +1 -1
  75. package/build/client/assets/clone-Dw92nCw9.js +2 -0
  76. package/build/client/assets/{clone-BniOf7Yb.js.map → clone-Dw92nCw9.js.map} +1 -1
  77. package/build/client/assets/{dagre-FFZHY6LT-vKH6qeW_.js → dagre-FFZHY6LT-B3IZ9n5v.js} +2 -2
  78. package/build/client/assets/{dagre-FFZHY6LT-vKH6qeW_.js.map → dagre-FFZHY6LT-B3IZ9n5v.js.map} +1 -1
  79. package/build/client/assets/{diagram-3EMPZRKU-D3BTQE0v.js → diagram-3EMPZRKU-C94TV-tA.js} +2 -2
  80. package/build/client/assets/{diagram-3EMPZRKU-D3BTQE0v.js.map → diagram-3EMPZRKU-C94TV-tA.js.map} +1 -1
  81. package/build/client/assets/{diagram-5UYTHUR4-BadShsGf.js → diagram-5UYTHUR4-BToN03QA.js} +2 -2
  82. package/build/client/assets/{diagram-5UYTHUR4-BadShsGf.js.map → diagram-5UYTHUR4-BToN03QA.js.map} +1 -1
  83. package/build/client/assets/{diagram-ZTM2IBQH-D9jJN3bl.js → diagram-ZTM2IBQH-0Lnh9m5j.js} +2 -2
  84. package/build/client/assets/{diagram-ZTM2IBQH-D9jJN3bl.js.map → diagram-ZTM2IBQH-0Lnh9m5j.js.map} +1 -1
  85. package/build/client/assets/diff-CN-quaHO.js +2 -0
  86. package/build/client/assets/{diff-CQVU7E-h.js.map → diff-CN-quaHO.js.map} +1 -1
  87. package/build/client/assets/{diff-B376IevU.js → diff-CiQricTa.js} +2 -2
  88. package/build/client/assets/{diff-B376IevU.js.map → diff-CiQricTa.js.map} +1 -1
  89. package/build/client/assets/{discord-Cx03Cky4.js → discord-BIqeUp96.js} +2 -2
  90. package/build/client/assets/{discord-Cx03Cky4.js.map → discord-BIqeUp96.js.map} +1 -1
  91. package/build/client/assets/discord-BWD2Bv5N.js +2 -0
  92. package/build/client/assets/discord-BWD2Bv5N.js.map +1 -0
  93. package/build/client/assets/{entry.client-C-f7Acxq.js → entry.client-CZqsV16s.js} +2 -2
  94. package/build/client/assets/{entry.client-C-f7Acxq.js.map → entry.client-CZqsV16s.js.map} +1 -1
  95. package/build/client/assets/{epic-video-CYB9v08Z.js → epic-video-7tluZCfa.js} +2 -2
  96. package/build/client/assets/{epic-video-CYB9v08Z.js.map → epic-video-7tluZCfa.js.map} +1 -1
  97. package/build/client/assets/epic_ws_.js_-C_6vCTaR.js +2 -0
  98. package/build/client/assets/epic_ws_.js_-C_6vCTaR.js.map +1 -0
  99. package/build/client/assets/{erDiagram-R3QVA2FD-DA8ObfcQ.js → erDiagram-R3QVA2FD-afF_yaYi.js} +2 -2
  100. package/build/client/assets/{erDiagram-R3QVA2FD-DA8ObfcQ.js.map → erDiagram-R3QVA2FD-afF_yaYi.js.map} +1 -1
  101. package/build/client/assets/{error-boundary-BVQLpMgs.js → error-boundary-oSG-ExEd.js} +2 -2
  102. package/build/client/assets/{error-boundary-BVQLpMgs.js.map → error-boundary-oSG-ExEd.js.map} +1 -1
  103. package/build/client/assets/exercises-C_6vCTaR.js +2 -0
  104. package/build/client/assets/exercises-C_6vCTaR.js.map +1 -0
  105. package/build/client/assets/{finished-CdbbjXVl.js → finished-DiGjrltK.js} +2 -2
  106. package/build/client/assets/{finished-CdbbjXVl.js.map → finished-DiGjrltK.js.map} +1 -1
  107. package/build/client/assets/{flowDiagram-PKI6S5ZS-Cl53QYkW.js → flowDiagram-PKI6S5ZS-DywOldvN.js} +2 -2
  108. package/build/client/assets/{flowDiagram-PKI6S5ZS-Cl53QYkW.js.map → flowDiagram-PKI6S5ZS-DywOldvN.js.map} +1 -1
  109. package/build/client/assets/{ganttDiagram-EK5VF46D-BvSMSlCf.js → ganttDiagram-EK5VF46D-CZ-7epBO.js} +2 -2
  110. package/build/client/assets/{ganttDiagram-EK5VF46D-BvSMSlCf.js.map → ganttDiagram-EK5VF46D-CZ-7epBO.js.map} +1 -1
  111. package/build/client/assets/{gitGraphDiagram-GW3U2K7C-BC4jDCQG.js → gitGraphDiagram-GW3U2K7C-Btut14eC.js} +2 -2
  112. package/build/client/assets/{gitGraphDiagram-GW3U2K7C-BC4jDCQG.js.map → gitGraphDiagram-GW3U2K7C-Btut14eC.js.map} +1 -1
  113. package/build/client/assets/{graph-DmoNxkW1.js → graph-CiKthlUH.js} +2 -2
  114. package/build/client/assets/{graph-DmoNxkW1.js.map → graph-CiKthlUH.js.map} +1 -1
  115. package/build/client/assets/healthcheck-C_6vCTaR.js +2 -0
  116. package/build/client/assets/healthcheck-C_6vCTaR.js.map +1 -0
  117. package/build/client/assets/{index-CBUrmkWa.js → index-B8ExQ-5A.js} +2 -2
  118. package/build/client/assets/{index-CBUrmkWa.js.map → index-B8ExQ-5A.js.map} +1 -1
  119. package/build/client/assets/{index-DxebmNVe.js → index-BOxmeO6h.js} +2 -2
  120. package/build/client/assets/{index-DxebmNVe.js.map → index-BOxmeO6h.js.map} +1 -1
  121. package/build/client/assets/{index-DhyRhm-a.js → index-BrSaFy9r.js} +2 -2
  122. package/build/client/assets/{index-DhyRhm-a.js.map → index-BrSaFy9r.js.map} +1 -1
  123. package/build/client/assets/{index-B8smZwSG.js → index-CGfgwl2o.js} +2 -2
  124. package/build/client/assets/{index-B8smZwSG.js.map → index-CGfgwl2o.js.map} +1 -1
  125. package/build/client/assets/{index-wYr49Min.js → index-CICRWfwA.js} +2 -2
  126. package/build/client/assets/{index-wYr49Min.js.map → index-CICRWfwA.js.map} +1 -1
  127. package/build/client/assets/{index-CsJM7KSY.js → index-CQ9ND9HU.js} +2 -2
  128. package/build/client/assets/{index-CsJM7KSY.js.map → index-CQ9ND9HU.js.map} +1 -1
  129. package/build/client/assets/index-C_6vCTaR.js +2 -0
  130. package/build/client/assets/index-C_6vCTaR.js.map +1 -0
  131. package/build/client/assets/index-Clt4RPat.js +2 -0
  132. package/build/client/assets/index-Clt4RPat.js.map +1 -0
  133. package/build/client/assets/{index-C245u_6M.js → index-CxkovwXQ.js} +2 -2
  134. package/build/client/assets/{index-C245u_6M.js.map → index-CxkovwXQ.js.map} +1 -1
  135. package/build/client/assets/{index-2LBjIZsR.js → index-DHMekvRa.js} +2 -2
  136. package/build/client/assets/{index-2LBjIZsR.js.map → index-DHMekvRa.js.map} +1 -1
  137. package/build/client/assets/{index-CQpafIsR.js → index-Dn1v9SdB.js} +2 -2
  138. package/build/client/assets/{index-CQpafIsR.js.map → index-Dn1v9SdB.js.map} +1 -1
  139. package/build/client/assets/index-TWHOUoXd.js +2 -0
  140. package/build/client/assets/index-TWHOUoXd.js.map +1 -0
  141. package/build/client/assets/infoDiagram-XT3IWWJI-D1T7Cq6a.js +3 -0
  142. package/build/client/assets/{infoDiagram-XT3IWWJI-_8npXlsz.js.map → infoDiagram-XT3IWWJI-D1T7Cq6a.js.map} +1 -1
  143. package/build/client/assets/{journeyDiagram-EWQZEKCU-CLMB5SLF.js → journeyDiagram-EWQZEKCU-B9UIsr9b.js} +2 -2
  144. package/build/client/assets/{journeyDiagram-EWQZEKCU-CLMB5SLF.js.map → journeyDiagram-EWQZEKCU-B9UIsr9b.js.map} +1 -1
  145. package/build/client/assets/{jsx-runtime-DKBD_fLS.js → jsx-runtime-DsURZTcu.js} +2 -2
  146. package/build/client/assets/{jsx-runtime-DKBD_fLS.js.map → jsx-runtime-DsURZTcu.js.map} +1 -1
  147. package/build/client/assets/{kanban-definition-ILFWEQ3N-5PudnDcU.js → kanban-definition-ILFWEQ3N-CyKyZ6Wh.js} +2 -2
  148. package/build/client/assets/{kanban-definition-ILFWEQ3N-5PudnDcU.js.map → kanban-definition-ILFWEQ3N-CyKyZ6Wh.js.map} +1 -1
  149. package/build/client/assets/l-8o5tPY9F.js +2 -0
  150. package/build/client/assets/{l-CjuVWd7j.js.map → l-8o5tPY9F.js.map} +1 -1
  151. package/build/client/assets/launch-editor-C_6vCTaR.js +2 -0
  152. package/build/client/assets/launch-editor-C_6vCTaR.js.map +1 -0
  153. package/build/client/assets/{layout-BXfvL1vj.js → layout-BA1bIau_.js} +2 -2
  154. package/build/client/assets/{layout-BXfvL1vj.js.map → layout-BA1bIau_.js.map} +1 -1
  155. package/build/client/assets/{linear-DhCwCW7Y.js → linear-Bug06cVg.js} +2 -2
  156. package/build/client/assets/{linear-DhCwCW7Y.js.map → linear-Bug06cVg.js.map} +1 -1
  157. package/build/client/assets/{loading-BuvISkeY.js → loading-DzDAEykN.js} +2 -2
  158. package/build/client/assets/{loading-BuvISkeY.js.map → loading-DzDAEykN.js.map} +1 -1
  159. package/build/client/assets/{login-BH4ljGt7.js → login-CL5KBzmc.js} +2 -2
  160. package/build/client/assets/{login-BH4ljGt7.js.map → login-CL5KBzmc.js.map} +1 -1
  161. package/build/client/assets/login-sse-C_6vCTaR.js +2 -0
  162. package/build/client/assets/login-sse-C_6vCTaR.js.map +1 -0
  163. package/build/client/assets/lookout-C_6vCTaR.js +2 -0
  164. package/build/client/assets/lookout-C_6vCTaR.js.map +1 -0
  165. package/build/client/assets/manifest-b5b0413b.js +1 -0
  166. package/build/client/assets/{mdx-DdK1AGxI.js → mdx-Dvg0ifxF.js} +3 -3
  167. package/build/client/assets/{mdx-DdK1AGxI.js.map → mdx-Dvg0ifxF.js.map} +1 -1
  168. package/build/client/assets/{mermaid.core-tdjgKLol.js → mermaid.core-CRanZ2_x.js} +5 -5
  169. package/build/client/assets/{mermaid.core-tdjgKLol.js.map → mermaid.core-CRanZ2_x.js.map} +1 -1
  170. package/build/client/assets/{mindmap-definition-CZNETY7S-DocEjJYU.js → mindmap-definition-CZNETY7S-DtPMn4z7.js} +2 -2
  171. package/build/client/assets/{mindmap-definition-CZNETY7S-DocEjJYU.js.map → mindmap-definition-CZNETY7S-DtPMn4z7.js.map} +1 -1
  172. package/build/client/assets/{misc-D7yrZhQB.js → misc-C_Wy6Ozi.js} +2 -2
  173. package/build/client/assets/{misc-D7yrZhQB.js.map → misc-C_Wy6Ozi.js.map} +1 -1
  174. package/build/client/assets/{nav-chevrons-DWkM88G0.js → nav-chevrons-CkjJbQ8J.js} +2 -2
  175. package/build/client/assets/{nav-chevrons-DWkM88G0.js.map → nav-chevrons-CkjJbQ8J.js.map} +1 -1
  176. package/build/client/assets/notifications-C_6vCTaR.js +2 -0
  177. package/build/client/assets/notifications-C_6vCTaR.js.map +1 -0
  178. package/build/client/assets/og-C_6vCTaR.js +2 -0
  179. package/build/client/assets/og-C_6vCTaR.js.map +1 -0
  180. package/build/client/assets/{onboarding-C59GmR50.js → onboarding-BNOIjq0D.js} +2 -2
  181. package/build/client/assets/{onboarding-C59GmR50.js.map → onboarding-BNOIjq0D.js.map} +1 -1
  182. package/build/client/assets/{online-D4vODkth.js → online-TZVMTbWw.js} +2 -2
  183. package/build/client/assets/{online-D4vODkth.js.map → online-TZVMTbWw.js.map} +1 -1
  184. package/build/client/assets/{pe-CdmQkMqU.js → pe-Cte41gbF.js} +2 -2
  185. package/build/client/assets/{pe-CdmQkMqU.js.map → pe-Cte41gbF.js.map} +1 -1
  186. package/build/client/assets/{pieDiagram-NIOCPIFQ-DVmMnK74.js → pieDiagram-NIOCPIFQ-i9_oP5Hn.js} +2 -2
  187. package/build/client/assets/{pieDiagram-NIOCPIFQ-DVmMnK74.js.map → pieDiagram-NIOCPIFQ-i9_oP5Hn.js.map} +1 -1
  188. package/build/client/assets/{preferences-DfB9rP8a.js → preferences-C7fRT1yj.js} +2 -2
  189. package/build/client/assets/{preferences-DfB9rP8a.js.map → preferences-C7fRT1yj.js.map} +1 -1
  190. package/build/client/assets/{presence-DWQewy5j.js → presence-BgXbhCXw.js} +2 -2
  191. package/build/client/assets/{presence-DWQewy5j.js.map → presence-BgXbhCXw.js.map} +1 -1
  192. package/build/client/assets/{preview-CwjqbpcS.js → preview-BhbWtM_7.js} +2 -2
  193. package/build/client/assets/{preview-CwjqbpcS.js.map → preview-BhbWtM_7.js.map} +1 -1
  194. package/build/client/assets/processes-C_6vCTaR.js +2 -0
  195. package/build/client/assets/processes-C_6vCTaR.js.map +1 -0
  196. package/build/client/assets/{product-KkdaVQou.js → product-CYLzCZoj.js} +2 -2
  197. package/build/client/assets/{product-KkdaVQou.js.map → product-CYLzCZoj.js.map} +1 -1
  198. package/build/client/assets/{progress-CdZ-Vcyn.js → progress-BV2BTh46.js} +2 -2
  199. package/build/client/assets/{progress-CdZ-Vcyn.js.map → progress-BV2BTh46.js.map} +1 -1
  200. package/build/client/assets/progress-C_6vCTaR.js +2 -0
  201. package/build/client/assets/progress-C_6vCTaR.js.map +1 -0
  202. package/build/client/assets/{progress-bar-B3_pKtoN.js → progress-bar-D6ygvlaD.js} +2 -2
  203. package/build/client/assets/{progress-bar-B3_pKtoN.js.map → progress-bar-D6ygvlaD.js.map} +1 -1
  204. package/build/client/assets/{quadrantDiagram-2OG54O6I-BpG5BmQ3.js → quadrantDiagram-2OG54O6I-18jYaX1U.js} +2 -2
  205. package/build/client/assets/{quadrantDiagram-2OG54O6I-BpG5BmQ3.js.map → quadrantDiagram-2OG54O6I-18jYaX1U.js.map} +1 -1
  206. package/build/client/assets/{requirementDiagram-SO3GGRV7-CeVkImIX.js → requirementDiagram-SO3GGRV7-Xw6z7_yk.js} +2 -2
  207. package/build/client/assets/{requirementDiagram-SO3GGRV7-CeVkImIX.js.map → requirementDiagram-SO3GGRV7-Xw6z7_yk.js.map} +1 -1
  208. package/build/client/assets/{revalidation-ws-Do4fE9JQ.js → revalidation-ws-kMaOT4Vi.js} +2 -2
  209. package/build/client/assets/{revalidation-ws-Do4fE9JQ.js.map → revalidation-ws-kMaOT4Vi.js.map} +1 -1
  210. package/build/client/assets/robots_._txt-C_6vCTaR.js +2 -0
  211. package/build/client/assets/robots_._txt-C_6vCTaR.js.map +1 -0
  212. package/build/client/assets/{root-C0Bm0Ely.js → root-CeBcwH5A.js} +2 -2
  213. package/build/client/assets/{root-C0Bm0Ely.js.map → root-CeBcwH5A.js.map} +1 -1
  214. package/build/client/assets/{sankeyDiagram-4UZDY2LN-CMy-UAmy.js → sankeyDiagram-4UZDY2LN-BqXSiD2M.js} +2 -2
  215. package/build/client/assets/{sankeyDiagram-4UZDY2LN-CMy-UAmy.js.map → sankeyDiagram-4UZDY2LN-BqXSiD2M.js.map} +1 -1
  216. package/build/client/assets/{seo-P_yhbn7-.js → seo-CQ4WV-0-.js} +2 -2
  217. package/build/client/assets/{seo-P_yhbn7-.js.map → seo-CQ4WV-0-.js.map} +1 -1
  218. package/build/client/assets/{sequenceDiagram-ZIKVLSP4-BvE7ME5W.js → sequenceDiagram-ZIKVLSP4-vUDUv2_D.js} +2 -2
  219. package/build/client/assets/{sequenceDiagram-ZIKVLSP4-BvE7ME5W.js.map → sequenceDiagram-ZIKVLSP4-vUDUv2_D.js.map} +1 -1
  220. package/build/client/assets/set-playground-C_6vCTaR.js +2 -0
  221. package/build/client/assets/set-playground-C_6vCTaR.js.map +1 -0
  222. package/build/client/assets/{set-playground-1BzordBz.js → set-playground-UCfTdubZ.js} +2 -2
  223. package/build/client/assets/{set-playground-1BzordBz.js.map → set-playground-UCfTdubZ.js.map} +1 -1
  224. package/build/client/assets/sitemap_._xml-C_6vCTaR.js +2 -0
  225. package/build/client/assets/sitemap_._xml-C_6vCTaR.js.map +1 -0
  226. package/build/client/assets/start-C_6vCTaR.js +2 -0
  227. package/build/client/assets/start-C_6vCTaR.js.map +1 -0
  228. package/build/client/assets/{stateDiagram-XX37X6EN-DZlrR-hS.js → stateDiagram-XX37X6EN-CS5kjJa3.js} +2 -2
  229. package/build/client/assets/{stateDiagram-XX37X6EN-DZlrR-hS.js.map → stateDiagram-XX37X6EN-CS5kjJa3.js.map} +1 -1
  230. package/build/client/assets/stateDiagram-v2-GD6S3NHB-Bc7inWs3.js +2 -0
  231. package/build/client/assets/{stateDiagram-v2-GD6S3NHB-D6K_ePXI.js.map → stateDiagram-v2-GD6S3NHB-Bc7inWs3.js.map} +1 -1
  232. package/build/client/assets/{support-D2ZulF0D.js → support-cdfZuAYQ.js} +2 -2
  233. package/build/client/assets/{support-D2ZulF0D.js.map → support-cdfZuAYQ.js.map} +1 -1
  234. package/build/client/assets/test-C_6vCTaR.js +2 -0
  235. package/build/client/assets/test-C_6vCTaR.js.map +1 -0
  236. package/build/client/assets/test-G3KOcfVS.js +2 -0
  237. package/build/client/assets/{test-D7r_HsN4.js.map → test-G3KOcfVS.js.map} +1 -1
  238. package/build/client/assets/test._testName-C_6vCTaR.js +2 -0
  239. package/build/client/assets/test._testName-C_6vCTaR.js.map +1 -0
  240. package/build/client/assets/test.epic_ws_.js_-C_6vCTaR.js +2 -0
  241. package/build/client/assets/test.epic_ws_.js_-C_6vCTaR.js.map +1 -0
  242. package/build/client/assets/{tests-DaEG5aZr.js → tests-Gj3hJRKB.js} +2 -2
  243. package/build/client/assets/{tests-DaEG5aZr.js.map → tests-Gj3hJRKB.js.map} +1 -1
  244. package/build/client/assets/{timeline-definition-RI47OAVP-1EQPBN04.js → timeline-definition-RI47OAVP-D__Fk2gz.js} +2 -2
  245. package/build/client/assets/{timeline-definition-RI47OAVP-1EQPBN04.js.map → timeline-definition-RI47OAVP-D__Fk2gz.js.map} +1 -1
  246. package/build/client/assets/{tooltip-CUdKgIRf.js → tooltip-JOPrmP6Z.js} +2 -2
  247. package/build/client/assets/{tooltip-CUdKgIRf.js.map → tooltip-JOPrmP6Z.js.map} +1 -1
  248. package/build/client/assets/{treemap-6Y5VK53G-CCaJF09R.js → treemap-6Y5VK53G-BgPKoFn0.js} +2 -2
  249. package/build/client/assets/{treemap-6Y5VK53G-CCaJF09R.js.map → treemap-6Y5VK53G-BgPKoFn0.js.map} +1 -1
  250. package/build/client/assets/{use-event-source-BOTYusqH.js → use-event-source-B37FxEl1.js} +2 -2
  251. package/build/client/assets/{use-event-source-BOTYusqH.js.map → use-event-source-B37FxEl1.js.map} +1 -1
  252. package/build/client/assets/{user-BUyyWGpK.js → user-CW_hpuGs.js} +2 -2
  253. package/build/client/assets/{user-BUyyWGpK.js.map → user-CW_hpuGs.js.map} +1 -1
  254. package/build/client/assets/{version-VDBggzrB.js → version-DxzF7eZh.js} +2 -2
  255. package/build/client/assets/{version-VDBggzrB.js.map → version-DxzF7eZh.js.map} +1 -1
  256. package/build/client/assets/workshop-config-gL_m3l7d.js +2 -0
  257. package/build/client/assets/{workshop-config-eejws2-k.js.map → workshop-config-gL_m3l7d.js.map} +1 -1
  258. package/build/client/assets/{workspace-structure-DwQUtU0r.js → workspace-structure-DrXtkCLM.js} +2 -2
  259. package/build/client/assets/{workspace-structure-DwQUtU0r.js.map → workspace-structure-DrXtkCLM.js.map} +1 -1
  260. package/build/client/assets/{xychartDiagram-H2YORKM3-ZB2741wi.js → xychartDiagram-H2YORKM3-CGqU7y0V.js} +2 -2
  261. package/build/client/assets/{xychartDiagram-H2YORKM3-ZB2741wi.js.map → xychartDiagram-H2YORKM3-CGqU7y0V.js.map} +1 -1
  262. package/build/server/index.js +2 -2
  263. package/package.json +1 -1
  264. package/build/client/assets/_-BEfdnu_S.js +0 -2
  265. package/build/client/assets/_-BEfdnu_S.js.map +0 -1
  266. package/build/client/assets/_exerciseNumber_._stepNumber.index-D9zwSM-a.js +0 -2
  267. package/build/client/assets/_exerciseNumber_._stepNumber.index-D9zwSM-a.js.map +0 -1
  268. package/build/client/assets/_layout-DQs7hBSg.js +0 -2
  269. package/build/client/assets/api._-D9zwSM-a.js +0 -2
  270. package/build/client/assets/api._-D9zwSM-a.js.map +0 -1
  271. package/build/client/assets/app-B6Asqz0_.js +0 -2
  272. package/build/client/assets/app.epic_ws_.js_-D9zwSM-a.js +0 -2
  273. package/build/client/assets/app.epic_ws_.js_-D9zwSM-a.js.map +0 -1
  274. package/build/client/assets/apps-D9zwSM-a.js +0 -2
  275. package/build/client/assets/apps-D9zwSM-a.js.map +0 -1
  276. package/build/client/assets/apps-DxgBeJoD.js +0 -2
  277. package/build/client/assets/apps-DxgBeJoD.js.map +0 -1
  278. package/build/client/assets/cache-D9zwSM-a.js +0 -2
  279. package/build/client/assets/cache-D9zwSM-a.js.map +0 -1
  280. package/build/client/assets/channel-BWGVHDK-.js +0 -2
  281. package/build/client/assets/classDiagram-BGRH5UQR-B43E4NNs.js +0 -2
  282. package/build/client/assets/classDiagram-v2-O24JOBDK-B43E4NNs.js +0 -2
  283. package/build/client/assets/clone-BniOf7Yb.js +0 -2
  284. package/build/client/assets/diff-CQVU7E-h.js +0 -2
  285. package/build/client/assets/discord-B39XeN10.js +0 -2
  286. package/build/client/assets/discord-B39XeN10.js.map +0 -1
  287. package/build/client/assets/epic_ws_.js_-D9zwSM-a.js +0 -2
  288. package/build/client/assets/epic_ws_.js_-D9zwSM-a.js.map +0 -1
  289. package/build/client/assets/exercises-D9zwSM-a.js +0 -2
  290. package/build/client/assets/exercises-D9zwSM-a.js.map +0 -1
  291. package/build/client/assets/healthcheck-D9zwSM-a.js +0 -2
  292. package/build/client/assets/healthcheck-D9zwSM-a.js.map +0 -1
  293. package/build/client/assets/index-BcumkKvQ.js +0 -2
  294. package/build/client/assets/index-BcumkKvQ.js.map +0 -1
  295. package/build/client/assets/index-D9zwSM-a.js +0 -2
  296. package/build/client/assets/index-D9zwSM-a.js.map +0 -1
  297. package/build/client/assets/index-DxgBeJoD.js +0 -2
  298. package/build/client/assets/index-DxgBeJoD.js.map +0 -1
  299. package/build/client/assets/infoDiagram-XT3IWWJI-_8npXlsz.js +0 -3
  300. package/build/client/assets/l-CjuVWd7j.js +0 -2
  301. package/build/client/assets/launch-editor-D9zwSM-a.js +0 -2
  302. package/build/client/assets/launch-editor-D9zwSM-a.js.map +0 -1
  303. package/build/client/assets/login-sse-D9zwSM-a.js +0 -2
  304. package/build/client/assets/login-sse-D9zwSM-a.js.map +0 -1
  305. package/build/client/assets/lookout-D9zwSM-a.js +0 -2
  306. package/build/client/assets/lookout-D9zwSM-a.js.map +0 -1
  307. package/build/client/assets/manifest-f4a6d68a.js +0 -1
  308. package/build/client/assets/notifications-D9zwSM-a.js +0 -2
  309. package/build/client/assets/notifications-D9zwSM-a.js.map +0 -1
  310. package/build/client/assets/og-D9zwSM-a.js +0 -2
  311. package/build/client/assets/og-D9zwSM-a.js.map +0 -1
  312. package/build/client/assets/processes-D9zwSM-a.js +0 -2
  313. package/build/client/assets/processes-D9zwSM-a.js.map +0 -1
  314. package/build/client/assets/progress-D9zwSM-a.js +0 -2
  315. package/build/client/assets/progress-D9zwSM-a.js.map +0 -1
  316. package/build/client/assets/robots_._txt-D9zwSM-a.js +0 -2
  317. package/build/client/assets/robots_._txt-D9zwSM-a.js.map +0 -1
  318. package/build/client/assets/set-playground-D9zwSM-a.js +0 -2
  319. package/build/client/assets/set-playground-D9zwSM-a.js.map +0 -1
  320. package/build/client/assets/sitemap_._xml-D9zwSM-a.js +0 -2
  321. package/build/client/assets/sitemap_._xml-D9zwSM-a.js.map +0 -1
  322. package/build/client/assets/start-D9zwSM-a.js +0 -2
  323. package/build/client/assets/start-D9zwSM-a.js.map +0 -1
  324. package/build/client/assets/stateDiagram-v2-GD6S3NHB-D6K_ePXI.js +0 -2
  325. package/build/client/assets/test-D7r_HsN4.js +0 -2
  326. package/build/client/assets/test-D9zwSM-a.js +0 -2
  327. package/build/client/assets/test-D9zwSM-a.js.map +0 -1
  328. package/build/client/assets/test._testName-D9zwSM-a.js +0 -2
  329. package/build/client/assets/test._testName-D9zwSM-a.js.map +0 -1
  330. package/build/client/assets/test.epic_ws_.js_-D9zwSM-a.js +0 -2
  331. package/build/client/assets/test.epic_ws_.js_-D9zwSM-a.js.map +0 -1
  332. package/build/client/assets/workshop-config-eejws2-k.js +0 -2
@@ -1 +1 @@
1
- {"version":3,"file":"_exerciseNumber-BcHM923A.js","sources":["../../../app/routes/_app+/exercise+/$exerciseNumber.tsx"],"sourcesContent":["import path from 'path'\nimport { invariantResponse } from '@epic-web/invariant'\nimport { ElementScrollRestoration } from '@epic-web/restore-scroll'\nimport {\n\tgetExercises,\n\tgetWorkshopRoot,\n} from '@epic-web/workshop-utils/apps.server'\nimport { getWorkshopConfig } from '@epic-web/workshop-utils/config.server'\nimport { getEpicVideoInfos } from '@epic-web/workshop-utils/epic-api.server'\nimport {\n\tcombineServerTimings,\n\tgetServerTimeHeader,\n\tmakeTimings,\n\ttime,\n} from '@epic-web/workshop-utils/timing.server'\nimport slugify from '@sindresorhus/slugify'\nimport {\n\tdata,\n\ttype HeadersFunction,\n\tLink,\n\tisRouteErrorResponse,\n\tuseRouteError,\n} from 'react-router'\nimport { EpicVideoInfoProvider } from '#app/components/epic-video.tsx'\nimport { useRevalidationWS } from '#app/components/revalidation-ws.js'\nimport { type RootLoaderData } from '#app/root.tsx'\nimport { EditFileOnGitHub } from '#app/routes/launch-editor.tsx'\nimport { ProgressToggle } from '#app/routes/progress.tsx'\nimport { Mdx } from '#app/utils/mdx.tsx'\nimport { getErrorMessage } from '#app/utils/misc.tsx'\nimport { getSeoMetaTags } from '#app/utils/seo.js'\nimport { type Route } from './+types/$exerciseNumber.tsx'\n\nexport const meta: Route.MetaFunction = ({ data, matches }) => {\n\tconst number = data?.exercise.exerciseNumber.toString().padStart(2, '0')\n\n\tconst rootData = matches.find((m) => m?.id === 'root')?.data as RootLoaderData\n\tif (!data || !rootData) return [{ title: '🦉 | Error' }]\n\n\treturn getSeoMetaTags({\n\t\ttitle: `📝 | ${number}. ${data.exercise.title} | ${rootData?.workshopTitle}`,\n\t\tdescription: `Introduction for ${number}. ${data.exercise.title}`,\n\t\togTitle: data.exercise.title,\n\t\togDescription: `Introduction for exercise ${Number(number)}`,\n\t\tinstructor: rootData.instructor,\n\t\trequestInfo: rootData.requestInfo,\n\t})\n}\n\nexport async function loader({ request, params }: Route.LoaderArgs) {\n\tconst timings = makeTimings('exerciseNumberLoader')\n\tinvariantResponse(params.exerciseNumber, 'exerciseNumber is required')\n\tconst { title: workshopTitle } = getWorkshopConfig()\n\tconst exercises = await time(() => getExercises({ request, timings }), {\n\t\ttimings,\n\t\ttype: 'getExercises',\n\t\tdesc: 'getExercises in $exerciseNumber.tsx',\n\t})\n\tconst exercise = exercises.find(\n\t\t(e) => e.exerciseNumber === Number(params.exerciseNumber),\n\t)\n\tif (!exercise) {\n\t\tthrow new Response('Not found', { status: 404 })\n\t}\n\n\tconst readmeFilepath = path.join(\n\t\tgetWorkshopRoot(),\n\t\t'exercises',\n\t\texercise.dirName,\n\t\t'README.mdx',\n\t)\n\n\tconst firstStep = exercise.steps.find(Boolean)\n\n\tconst articleId = `workshop-${slugify(workshopTitle)}-${\n\t\texercise.exerciseNumber\n\t}-instructions`\n\n\treturn data(\n\t\t{\n\t\t\tarticleId,\n\t\t\texercise,\n\t\t\texerciseNumber: exercise.exerciseNumber,\n\t\t\texerciseReadme: {\n\t\t\t\tfile: readmeFilepath,\n\t\t\t\trelativePath: `exercises/${exercise.dirName}`,\n\t\t\t},\n\t\t\texerciseTitle: exercise.title,\n\t\t\tfirstStep,\n\t\t\tfirstType: firstStep?.problem ? 'problem' : 'solution',\n\t\t\ttitle: workshopTitle,\n\t\t\tepicVideoInfosPromise: getEpicVideoInfos(\n\t\t\t\texercise.instructionsEpicVideoEmbeds,\n\t\t\t\t{ request },\n\t\t\t),\n\t\t},\n\t\t{\n\t\t\theaders: {\n\t\t\t\t'Server-Timing': getServerTimeHeader(timings),\n\t\t\t},\n\t\t},\n\t)\n}\n\nexport const headers: HeadersFunction = ({ loaderHeaders, parentHeaders }) => {\n\tconst headers = {\n\t\t'Cache-Control': loaderHeaders.get('Cache-Control') ?? '',\n\t\t'Server-Timing': combineServerTimings(loaderHeaders, parentHeaders),\n\t}\n\treturn headers\n}\n\n// we'll render the title ourselves thank you\nconst mdxComponents = { h1: () => null }\n\nexport default function ExerciseNumberRoute({\n\tloaderData: data,\n}: Route.ComponentProps) {\n\tuseRevalidationWS({\n\t\twatchPaths: [data.exerciseReadme.file],\n\t})\n\n\tconst firstStepNumber = String(data.firstStep?.stepNumber ?? '01').padStart(\n\t\t2,\n\t\t'0',\n\t)\n\treturn (\n\t\t<main className=\"relative flex h-full w-full max-w-5xl flex-col justify-between border-r md:w-3/4 xl:w-2/3\">\n\t\t\t<article\n\t\t\t\tid={data.articleId}\n\t\t\t\tkey={data.articleId}\n\t\t\t\tclassName=\"shadow-on-scrollbox flex w-full flex-1 flex-col gap-12 overflow-y-scroll px-3 py-4 pt-6 scrollbar-thin scrollbar-thumb-scrollbar md:px-10 md:py-12 md:pt-16\"\n\t\t\t>\n\t\t\t\t<div>\n\t\t\t\t\t<h1 className=\"text-[clamp(3rem,6vw,7.5rem)] font-extrabold leading-none\">\n\t\t\t\t\t\t{data.exercise.title}\n\t\t\t\t\t</h1>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t{data.exercise.instructionsCode ? (\n\t\t\t\t\t\t<EpicVideoInfoProvider\n\t\t\t\t\t\t\tepicVideoInfosPromise={data.epicVideoInfosPromise}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div className=\"prose dark:prose-invert sm:prose-lg\">\n\t\t\t\t\t\t\t\t<Mdx\n\t\t\t\t\t\t\t\t\tcode={data.exercise.instructionsCode}\n\t\t\t\t\t\t\t\t\tcomponents={mdxComponents}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</EpicVideoInfoProvider>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t'No instructions yet...'\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</article>\n\t\t\t<ElementScrollRestoration\n\t\t\t\telementQuery={`#${data.articleId}`}\n\t\t\t\tkey={`scroll-${data.articleId}`}\n\t\t\t/>\n\t\t\t<ProgressToggle\n\t\t\t\ttype=\"instructions\"\n\t\t\t\texerciseNumber={data.exerciseNumber}\n\t\t\t\tclassName=\"h-14 border-t px-6\"\n\t\t\t/>\n\t\t\t<div className=\"flex h-16 justify-between border-b-4 border-t lg:border-b-0\">\n\t\t\t\t<div />\n\t\t\t\t<EditFileOnGitHub\n\t\t\t\t\tfile={data.exerciseReadme.file}\n\t\t\t\t\trelativePath={data.exerciseReadme.relativePath}\n\t\t\t\t/>\n\t\t\t\t<Link\n\t\t\t\t\tto={`${firstStepNumber}/${data.firstType}`}\n\t\t\t\t\tprefetch=\"intent\"\n\t\t\t\t\tclassName=\"flex h-full items-center justify-center bg-foreground px-7 text-background\"\n\t\t\t\t>\n\t\t\t\t\tStart Learning\n\t\t\t\t</Link>\n\t\t\t</div>\n\t\t</main>\n\t)\n}\n\nexport function ErrorBoundary() {\n\tconst error = useRouteError()\n\n\tif (typeof document !== 'undefined') {\n\t\tconsole.error(error)\n\t}\n\n\treturn isRouteErrorResponse(error) ? (\n\t\terror.status === 404 ? (\n\t\t\t<p>Sorry, we couldn't find that step.</p>\n\t\t) : (\n\t\t\t<p>\n\t\t\t\t{error.status} {error.data}\n\t\t\t</p>\n\t\t)\n\t) : (\n\t\t<p>{getErrorMessage(error)}</p>\n\t)\n}\n"],"names":["meta","data","matches","number","exercise","exerciseNumber","toString","padStart","rootData","find","m","id","title","getSeoMetaTags","workshopTitle","description","ogTitle","ogDescription","Number","instructor","requestInfo","mdxComponents","h1","$exerciseNumber","_UNSAFE_withComponentProps","loaderData","useRevalidationWS","watchPaths","exerciseReadme","file","firstStepNumber","String","firstStep","stepNumber","jsxs","className","children","articleId","jsx","instructionsCode","EpicVideoInfoProvider","epicVideoInfosPromise","Mdx","code","components","ElementScrollRestoration","elementQuery","ProgressToggle","type","EditFileOnGitHub","relativePath","Link","to","firstType","prefetch","ErrorBoundary","_UNSAFE_withErrorBoundaryProps","error","useRouteError","document","console","isRouteErrorResponse","status","getErrorMessage"],"mappings":"owBAiCO,MAAMA,EAA2BA,CAAC,CAAEC,KAAAA,EAAMC,QAAAA,CAAQ,IAAM,CAC9D,MAAMC,EAASF,GAAMG,SAASC,eAAeC,WAAWC,SAAS,EAAG,GAAG,EAEjEC,EAAWN,EAAQO,KAAMC,GAAMA,GAAGC,KAAO,MAAM,GAAGV,KACxD,MAAI,CAACA,GAAQ,CAACO,EAAiB,CAAC,CAAEI,MAAO,YAAa,CAAC,EAEhDC,EAAe,CACrBD,MAAO,QAAQT,CAAM,KAAKF,EAAKG,SAASQ,KAAK,MAAMJ,GAAUM,aAAa,GAC1EC,YAAa,oBAAoBZ,CAAM,KAAKF,EAAKG,SAASQ,KAAK,GAC/DI,QAASf,EAAKG,SAASQ,MACvBK,cAAe,6BAA6BC,OAAOf,CAAM,CAAC,GAC1DgB,WAAYX,EAASW,WACrBC,YAAaZ,EAASY,WACvB,CAAC,CACF,EAkEMC,EAAgB,CAAEC,GAAIA,IAAM,IAAK,EAEvCC,EAAAC,EAAA,SAA4C,CAC3CC,WAAYxB,CACb,EAAyB,CACxByB,EAAkB,CACjBC,WAAY,CAAC1B,EAAK2B,eAAeC,IAAI,CACtC,CAAC,EAED,MAAMC,EAAkBC,OAAO9B,EAAK+B,WAAWC,YAAc,IAAI,EAAE1B,SAClE,EACA,GACD,EACA,OACC2B,EAAAA,KAAC,OAAA,CAAKC,UAAU,4FACfC,SAAA,CAAAF,EAAAA,KAAC,UAAA,CACAvB,GAAIV,EAAKoC,UAETF,UAAU,8JAEVC,SAAA,CAAAE,EAAAA,IAAC,MAAA,CACAF,eAAC,KAAA,CAAGD,UAAU,4DACZC,SAAAnC,EAAKG,SAASQ,MAChB,CAAA,CACD,EACA0B,EAAAA,IAAC,MAAA,CACCF,SAAAnC,EAAKG,SAASmC,iBACdD,EAAAA,IAACE,EAAA,CACAC,sBAAuBxC,EAAKwC,sBAE5BL,SAAAE,EAAAA,IAAC,MAAA,CAAIH,UAAU,sCACdC,SAAAE,EAAAA,IAACI,EAAA,CACAC,KAAM1C,EAAKG,SAASmC,iBACpBK,WAAYvB,EACb,EACD,CAAA,CACD,EAEA,wBAAA,CAEF,CAAA,GAvBKpB,EAAKoC,SAwBX,EACAC,EAAAA,IAACO,EAAA,CACAC,aAAc,IAAI7C,EAAKoC,SAAS,EAAA,EAC3B,UAAUpC,EAAKoC,SAAS,EAC9B,EACAC,EAAAA,IAACS,EAAA,CACAC,KAAK,eACL3C,eAAgBJ,EAAKI,eACrB8B,UAAU,oBAAA,CACX,EACAD,EAAAA,KAAC,MAAA,CAAIC,UAAU,8DACdC,SAAA,CAAAE,EAAAA,IAAC,MAAA,CAAA,CAAI,EACLA,EAAAA,IAACW,EAAA,CACApB,KAAM5B,EAAK2B,eAAeC,KAC1BqB,aAAcjD,EAAK2B,eAAesB,YAAA,CACnC,EACAZ,EAAAA,IAACa,EAAA,CACAC,GAAI,GAAGtB,CAAe,IAAI7B,EAAKoD,SAAS,GACxCC,SAAS,SACTnB,UAAU,6EACVC,SAAA,gBAAA,CAED,CAAA,CAAA,CACD,CAAA,CAAA,CACD,CAEF,CAAA,EAEOmB,EAAAC,EAAA,UAAyB,CAC/B,MAAMC,EAAQC,EAAA,EAEd,OAAI,OAAOC,SAAa,KACvBC,QAAQH,MAAMA,CAAK,EAGbI,EAAqBJ,CAAK,EAChCA,EAAMK,SAAW,IAChBxB,EAAAA,IAAC,IAAA,CAAEF,SAAA,oCAAA,CAAkC,EAErCF,EAAAA,KAAC,IAAA,CACCE,SAAA,CAAAqB,EAAMK,OAAO,IAAEL,EAAMxD,IAAA,CAAA,CACvB,EAGDqC,EAAAA,IAAC,IAAA,CAAGF,SAAA2B,EAAgBN,CAAK,CAAA,CAAE,CAE7B,CAAA"}
1
+ {"version":3,"file":"_exerciseNumber-BjFJaUkO.js","sources":["../../../app/routes/_app+/exercise+/$exerciseNumber.tsx"],"sourcesContent":["import path from 'path'\nimport { invariantResponse } from '@epic-web/invariant'\nimport { ElementScrollRestoration } from '@epic-web/restore-scroll'\nimport {\n\tgetExercises,\n\tgetWorkshopRoot,\n} from '@epic-web/workshop-utils/apps.server'\nimport { getWorkshopConfig } from '@epic-web/workshop-utils/config.server'\nimport { getEpicVideoInfos } from '@epic-web/workshop-utils/epic-api.server'\nimport {\n\tcombineServerTimings,\n\tgetServerTimeHeader,\n\tmakeTimings,\n\ttime,\n} from '@epic-web/workshop-utils/timing.server'\nimport slugify from '@sindresorhus/slugify'\nimport {\n\tdata,\n\ttype HeadersFunction,\n\tLink,\n\tisRouteErrorResponse,\n\tuseRouteError,\n} from 'react-router'\nimport { EpicVideoInfoProvider } from '#app/components/epic-video.tsx'\nimport { useRevalidationWS } from '#app/components/revalidation-ws.js'\nimport { type RootLoaderData } from '#app/root.tsx'\nimport { EditFileOnGitHub } from '#app/routes/launch-editor.tsx'\nimport { ProgressToggle } from '#app/routes/progress.tsx'\nimport { Mdx } from '#app/utils/mdx.tsx'\nimport { getErrorMessage } from '#app/utils/misc.tsx'\nimport { getSeoMetaTags } from '#app/utils/seo.js'\nimport { type Route } from './+types/$exerciseNumber.tsx'\n\nexport const meta: Route.MetaFunction = ({ data, matches }) => {\n\tconst number = data?.exercise.exerciseNumber.toString().padStart(2, '0')\n\n\tconst rootData = matches.find((m) => m?.id === 'root')?.data as RootLoaderData\n\tif (!data || !rootData) return [{ title: '🦉 | Error' }]\n\n\treturn getSeoMetaTags({\n\t\ttitle: `📝 | ${number}. ${data.exercise.title} | ${rootData?.workshopTitle}`,\n\t\tdescription: `Introduction for ${number}. ${data.exercise.title}`,\n\t\togTitle: data.exercise.title,\n\t\togDescription: `Introduction for exercise ${Number(number)}`,\n\t\tinstructor: rootData.instructor,\n\t\trequestInfo: rootData.requestInfo,\n\t})\n}\n\nexport async function loader({ request, params }: Route.LoaderArgs) {\n\tconst timings = makeTimings('exerciseNumberLoader')\n\tinvariantResponse(params.exerciseNumber, 'exerciseNumber is required')\n\tconst { title: workshopTitle } = getWorkshopConfig()\n\tconst exercises = await time(() => getExercises({ request, timings }), {\n\t\ttimings,\n\t\ttype: 'getExercises',\n\t\tdesc: 'getExercises in $exerciseNumber.tsx',\n\t})\n\tconst exercise = exercises.find(\n\t\t(e) => e.exerciseNumber === Number(params.exerciseNumber),\n\t)\n\tif (!exercise) {\n\t\tthrow new Response('Not found', { status: 404 })\n\t}\n\n\tconst readmeFilepath = path.join(\n\t\tgetWorkshopRoot(),\n\t\t'exercises',\n\t\texercise.dirName,\n\t\t'README.mdx',\n\t)\n\n\tconst firstStep = exercise.steps.find(Boolean)\n\n\tconst articleId = `workshop-${slugify(workshopTitle)}-${\n\t\texercise.exerciseNumber\n\t}-instructions`\n\n\treturn data(\n\t\t{\n\t\t\tarticleId,\n\t\t\texercise,\n\t\t\texerciseNumber: exercise.exerciseNumber,\n\t\t\texerciseReadme: {\n\t\t\t\tfile: readmeFilepath,\n\t\t\t\trelativePath: `exercises/${exercise.dirName}`,\n\t\t\t},\n\t\t\texerciseTitle: exercise.title,\n\t\t\tfirstStep,\n\t\t\tfirstType: firstStep?.problem ? 'problem' : 'solution',\n\t\t\ttitle: workshopTitle,\n\t\t\tepicVideoInfosPromise: getEpicVideoInfos(\n\t\t\t\texercise.instructionsEpicVideoEmbeds,\n\t\t\t\t{ request },\n\t\t\t),\n\t\t},\n\t\t{\n\t\t\theaders: {\n\t\t\t\t'Server-Timing': getServerTimeHeader(timings),\n\t\t\t},\n\t\t},\n\t)\n}\n\nexport const headers: HeadersFunction = ({ loaderHeaders, parentHeaders }) => {\n\tconst headers = {\n\t\t'Cache-Control': loaderHeaders.get('Cache-Control') ?? '',\n\t\t'Server-Timing': combineServerTimings(loaderHeaders, parentHeaders),\n\t}\n\treturn headers\n}\n\n// we'll render the title ourselves thank you\nconst mdxComponents = { h1: () => null }\n\nexport default function ExerciseNumberRoute({\n\tloaderData: data,\n}: Route.ComponentProps) {\n\tuseRevalidationWS({\n\t\twatchPaths: [data.exerciseReadme.file],\n\t})\n\n\tconst firstStepNumber = String(data.firstStep?.stepNumber ?? '01').padStart(\n\t\t2,\n\t\t'0',\n\t)\n\treturn (\n\t\t<main className=\"relative flex h-full w-full max-w-5xl flex-col justify-between border-r md:w-3/4 xl:w-2/3\">\n\t\t\t<article\n\t\t\t\tid={data.articleId}\n\t\t\t\tkey={data.articleId}\n\t\t\t\tclassName=\"shadow-on-scrollbox flex w-full flex-1 flex-col gap-12 overflow-y-scroll px-3 py-4 pt-6 scrollbar-thin scrollbar-thumb-scrollbar md:px-10 md:py-12 md:pt-16\"\n\t\t\t>\n\t\t\t\t<div>\n\t\t\t\t\t<h1 className=\"text-[clamp(3rem,6vw,7.5rem)] font-extrabold leading-none\">\n\t\t\t\t\t\t{data.exercise.title}\n\t\t\t\t\t</h1>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t{data.exercise.instructionsCode ? (\n\t\t\t\t\t\t<EpicVideoInfoProvider\n\t\t\t\t\t\t\tepicVideoInfosPromise={data.epicVideoInfosPromise}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div className=\"prose dark:prose-invert sm:prose-lg\">\n\t\t\t\t\t\t\t\t<Mdx\n\t\t\t\t\t\t\t\t\tcode={data.exercise.instructionsCode}\n\t\t\t\t\t\t\t\t\tcomponents={mdxComponents}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</EpicVideoInfoProvider>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t'No instructions yet...'\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</article>\n\t\t\t<ElementScrollRestoration\n\t\t\t\telementQuery={`#${data.articleId}`}\n\t\t\t\tkey={`scroll-${data.articleId}`}\n\t\t\t/>\n\t\t\t<ProgressToggle\n\t\t\t\ttype=\"instructions\"\n\t\t\t\texerciseNumber={data.exerciseNumber}\n\t\t\t\tclassName=\"h-14 border-t px-6\"\n\t\t\t/>\n\t\t\t<div className=\"flex h-16 justify-between border-b-4 border-t lg:border-b-0\">\n\t\t\t\t<div />\n\t\t\t\t<EditFileOnGitHub\n\t\t\t\t\tfile={data.exerciseReadme.file}\n\t\t\t\t\trelativePath={data.exerciseReadme.relativePath}\n\t\t\t\t/>\n\t\t\t\t<Link\n\t\t\t\t\tto={`${firstStepNumber}/${data.firstType}`}\n\t\t\t\t\tprefetch=\"intent\"\n\t\t\t\t\tclassName=\"flex h-full items-center justify-center bg-foreground px-7 text-background\"\n\t\t\t\t>\n\t\t\t\t\tStart Learning\n\t\t\t\t</Link>\n\t\t\t</div>\n\t\t</main>\n\t)\n}\n\nexport function ErrorBoundary() {\n\tconst error = useRouteError()\n\n\tif (typeof document !== 'undefined') {\n\t\tconsole.error(error)\n\t}\n\n\treturn isRouteErrorResponse(error) ? (\n\t\terror.status === 404 ? (\n\t\t\t<p>Sorry, we couldn't find that step.</p>\n\t\t) : (\n\t\t\t<p>\n\t\t\t\t{error.status} {error.data}\n\t\t\t</p>\n\t\t)\n\t) : (\n\t\t<p>{getErrorMessage(error)}</p>\n\t)\n}\n"],"names":["meta","data","matches","number","exercise","exerciseNumber","toString","padStart","rootData","find","m","id","title","getSeoMetaTags","workshopTitle","description","ogTitle","ogDescription","Number","instructor","requestInfo","mdxComponents","h1","$exerciseNumber","_UNSAFE_withComponentProps","loaderData","useRevalidationWS","watchPaths","exerciseReadme","file","firstStepNumber","String","firstStep","stepNumber","jsxs","className","children","articleId","jsx","instructionsCode","EpicVideoInfoProvider","epicVideoInfosPromise","Mdx","code","components","ElementScrollRestoration","elementQuery","ProgressToggle","type","EditFileOnGitHub","relativePath","Link","to","firstType","prefetch","ErrorBoundary","_UNSAFE_withErrorBoundaryProps","error","useRouteError","document","console","isRouteErrorResponse","status","getErrorMessage"],"mappings":"owBAiCO,MAAMA,EAA2BA,CAAC,CAAEC,KAAAA,EAAMC,QAAAA,CAAQ,IAAM,CAC9D,MAAMC,EAASF,GAAMG,SAASC,eAAeC,WAAWC,SAAS,EAAG,GAAG,EAEjEC,EAAWN,EAAQO,KAAMC,GAAMA,GAAGC,KAAO,MAAM,GAAGV,KACxD,MAAI,CAACA,GAAQ,CAACO,EAAiB,CAAC,CAAEI,MAAO,YAAa,CAAC,EAEhDC,EAAe,CACrBD,MAAO,QAAQT,CAAM,KAAKF,EAAKG,SAASQ,KAAK,MAAMJ,GAAUM,aAAa,GAC1EC,YAAa,oBAAoBZ,CAAM,KAAKF,EAAKG,SAASQ,KAAK,GAC/DI,QAASf,EAAKG,SAASQ,MACvBK,cAAe,6BAA6BC,OAAOf,CAAM,CAAC,GAC1DgB,WAAYX,EAASW,WACrBC,YAAaZ,EAASY,WACvB,CAAC,CACF,EAkEMC,EAAgB,CAAEC,GAAIA,IAAM,IAAK,EAEvCC,EAAAC,EAAA,SAA4C,CAC3CC,WAAYxB,CACb,EAAyB,CACxByB,EAAkB,CACjBC,WAAY,CAAC1B,EAAK2B,eAAeC,IAAI,CACtC,CAAC,EAED,MAAMC,EAAkBC,OAAO9B,EAAK+B,WAAWC,YAAc,IAAI,EAAE1B,SAClE,EACA,GACD,EACA,OACC2B,EAAAA,KAAC,OAAA,CAAKC,UAAU,4FACfC,SAAA,CAAAF,EAAAA,KAAC,UAAA,CACAvB,GAAIV,EAAKoC,UAETF,UAAU,8JAEVC,SAAA,CAAAE,EAAAA,IAAC,MAAA,CACAF,eAAC,KAAA,CAAGD,UAAU,4DACZC,SAAAnC,EAAKG,SAASQ,MAChB,CAAA,CACD,EACA0B,EAAAA,IAAC,MAAA,CACCF,SAAAnC,EAAKG,SAASmC,iBACdD,EAAAA,IAACE,EAAA,CACAC,sBAAuBxC,EAAKwC,sBAE5BL,SAAAE,EAAAA,IAAC,MAAA,CAAIH,UAAU,sCACdC,SAAAE,EAAAA,IAACI,EAAA,CACAC,KAAM1C,EAAKG,SAASmC,iBACpBK,WAAYvB,EACb,EACD,CAAA,CACD,EAEA,wBAAA,CAEF,CAAA,GAvBKpB,EAAKoC,SAwBX,EACAC,EAAAA,IAACO,EAAA,CACAC,aAAc,IAAI7C,EAAKoC,SAAS,EAAA,EAC3B,UAAUpC,EAAKoC,SAAS,EAC9B,EACAC,EAAAA,IAACS,EAAA,CACAC,KAAK,eACL3C,eAAgBJ,EAAKI,eACrB8B,UAAU,oBAAA,CACX,EACAD,EAAAA,KAAC,MAAA,CAAIC,UAAU,8DACdC,SAAA,CAAAE,EAAAA,IAAC,MAAA,CAAA,CAAI,EACLA,EAAAA,IAACW,EAAA,CACApB,KAAM5B,EAAK2B,eAAeC,KAC1BqB,aAAcjD,EAAK2B,eAAesB,YAAA,CACnC,EACAZ,EAAAA,IAACa,EAAA,CACAC,GAAI,GAAGtB,CAAe,IAAI7B,EAAKoD,SAAS,GACxCC,SAAS,SACTnB,UAAU,6EACVC,SAAA,gBAAA,CAED,CAAA,CAAA,CACD,CAAA,CAAA,CACD,CAEF,CAAA,EAEOmB,EAAAC,EAAA,UAAyB,CAC/B,MAAMC,EAAQC,EAAA,EAEd,OAAI,OAAOC,SAAa,KACvBC,QAAQH,MAAMA,CAAK,EAGbI,EAAqBJ,CAAK,EAChCA,EAAMK,SAAW,IAChBxB,EAAAA,IAAC,IAAA,CAAEF,SAAA,oCAAA,CAAkC,EAErCF,EAAAA,KAAC,IAAA,CACCE,SAAA,CAAAqB,EAAMK,OAAO,IAAEL,EAAMxD,IAAA,CAAA,CACvB,EAGDqC,EAAAA,IAAC,IAAA,CAAGF,SAAA2B,EAAgBN,CAAK,CAAA,CAAE,CAE7B,CAAA"}
@@ -1,2 +1,2 @@
1
- import{w as e,a as s,O as n,b as u,i as a}from"./chunk-QMGIS6GS-Du-_uMOD.js";import{j as o}from"./jsx-runtime-DKBD_fLS.js";import{g as i}from"./misc-D7yrZhQB.js";import"./_-BEfdnu_S.js";import"./clsx-B-dksMZM.js";const x=e(function(){return o.jsx(n,{})}),l=s(function(){const r=u();return typeof document<"u"&&console.error(r),a(r)?r.status===404?o.jsx("p",{children:"Sorry, we couldn't find that step."}):o.jsxs("p",{children:[r.status," ",r.data]}):o.jsx("p",{children:i(r)})});export{l as ErrorBoundary,x as default};
2
- //# sourceMappingURL=_exerciseNumber_._stepNumber-DkoV9tCf.js.map
1
+ import{w as e,a as s,O as n,b as u,i as a}from"./chunk-QMGIS6GS-X4HtlbLW.js";import{j as o}from"./jsx-runtime-DsURZTcu.js";import{g as i}from"./misc-C_Wy6Ozi.js";import"./_-BlUNM4zq.js";import"./clsx-B-dksMZM.js";const x=e(function(){return o.jsx(n,{})}),l=s(function(){const r=u();return typeof document<"u"&&console.error(r),a(r)?r.status===404?o.jsx("p",{children:"Sorry, we couldn't find that step."}):o.jsxs("p",{children:[r.status," ",r.data]}):o.jsx("p",{children:i(r)})});export{l as ErrorBoundary,x as default};
2
+ //# sourceMappingURL=_exerciseNumber_._stepNumber-CF1R08wi.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"_exerciseNumber_._stepNumber-DkoV9tCf.js","sources":["../../../app/routes/_app+/exercise+/$exerciseNumber_.$stepNumber.tsx"],"sourcesContent":["import { invariantResponse } from '@epic-web/invariant'\nimport { getExercises } from '@epic-web/workshop-utils/apps.server'\nimport { getWorkshopConfig } from '@epic-web/workshop-utils/config.server'\nimport {\n\tcombineServerTimings,\n\tgetServerTimeHeader,\n\tmakeTimings,\n} from '@epic-web/workshop-utils/timing.server'\nimport {\n\tdata,\n\ttype HeadersFunction,\n\ttype LoaderFunctionArgs,\n\tOutlet,\n\tisRouteErrorResponse,\n\tuseRouteError,\n} from 'react-router'\nimport { getErrorMessage } from '#app/utils/misc.tsx'\n\nexport async function loader({ request, params }: LoaderFunctionArgs) {\n\tconst timings = makeTimings('stepLoader')\n\tinvariantResponse(params.exerciseNumber, 'exerciseNumber is required')\n\tconst exercises = await getExercises({ request, timings })\n\tconst { title: workshopTitle } = getWorkshopConfig()\n\tconst exercise = exercises.find(\n\t\t(e) => e.exerciseNumber === Number(params.exerciseNumber),\n\t)\n\tif (!exercise) {\n\t\tthrow new Response('Not found', { status: 404 })\n\t}\n\n\tconst result = data(\n\t\t{\n\t\t\texerciseNumber: exercise.exerciseNumber,\n\t\t\texerciseTitle: exercise.title,\n\t\t\ttitle: workshopTitle,\n\t\t\texercises: exercises.map((e) => ({\n\t\t\t\texerciseNumber: e.exerciseNumber,\n\t\t\t\ttitle: e.title,\n\t\t\t})),\n\t\t},\n\t\t{\n\t\t\theaders: {\n\t\t\t\t'Server-Timing': getServerTimeHeader(timings),\n\t\t\t},\n\t\t},\n\t)\n\treturn result\n}\n\nexport const headers: HeadersFunction = ({ loaderHeaders, parentHeaders }) => {\n\tconst headers = {\n\t\t'Cache-Control': loaderHeaders.get('Cache-Control') ?? '',\n\t\t'Server-Timing': combineServerTimings(loaderHeaders, parentHeaders),\n\t}\n\treturn headers\n}\n\nexport default function StepRoute() {\n\treturn <Outlet />\n}\n\nexport function ErrorBoundary() {\n\tconst error = useRouteError()\n\n\tif (typeof document !== 'undefined') {\n\t\tconsole.error(error)\n\t}\n\n\treturn isRouteErrorResponse(error) ? (\n\t\terror.status === 404 ? (\n\t\t\t<p>Sorry, we couldn't find that step.</p>\n\t\t) : (\n\t\t\t<p>\n\t\t\t\t{error.status} {error.data}\n\t\t\t</p>\n\t\t)\n\t) : (\n\t\t<p>{getErrorMessage(error)}</p>\n\t)\n}\n"],"names":["$exerciseNumber__$stepNumber","_UNSAFE_withComponentProps","Outlet","ErrorBoundary","_UNSAFE_withErrorBoundaryProps","error","useRouteError","document","console","isRouteErrorResponse","status","jsx","children","jsxs","data","getErrorMessage"],"mappings":"qNAyDA,MAAAA,EAAAC,EAAA,UAAoC,CACnC,aAAQC,EAAA,EAAO,CAChB,CAAA,EAEOC,EAAAC,EAAA,UAAyB,CAC/B,MAAMC,EAAQC,EAAA,EAEd,OAAI,OAAOC,SAAa,KACvBC,QAAQH,MAAMA,CAAK,EAGbI,EAAqBJ,CAAK,EAChCA,EAAMK,SAAW,IAChBC,EAAAA,IAAC,IAAA,CAAEC,SAAA,oCAAA,CAAkC,EAErCC,EAAAA,KAAC,IAAA,CACCD,SAAA,CAAAP,EAAMK,OAAO,IAAEL,EAAMS,IAAA,CAAA,CACvB,EAGDH,EAAAA,IAAC,IAAA,CAAGC,SAAAG,EAAgBV,CAAK,CAAA,CAAE,CAE7B,CAAA"}
1
+ {"version":3,"file":"_exerciseNumber_._stepNumber-CF1R08wi.js","sources":["../../../app/routes/_app+/exercise+/$exerciseNumber_.$stepNumber.tsx"],"sourcesContent":["import { invariantResponse } from '@epic-web/invariant'\nimport { getExercises } from '@epic-web/workshop-utils/apps.server'\nimport { getWorkshopConfig } from '@epic-web/workshop-utils/config.server'\nimport {\n\tcombineServerTimings,\n\tgetServerTimeHeader,\n\tmakeTimings,\n} from '@epic-web/workshop-utils/timing.server'\nimport {\n\tdata,\n\ttype HeadersFunction,\n\ttype LoaderFunctionArgs,\n\tOutlet,\n\tisRouteErrorResponse,\n\tuseRouteError,\n} from 'react-router'\nimport { getErrorMessage } from '#app/utils/misc.tsx'\n\nexport async function loader({ request, params }: LoaderFunctionArgs) {\n\tconst timings = makeTimings('stepLoader')\n\tinvariantResponse(params.exerciseNumber, 'exerciseNumber is required')\n\tconst exercises = await getExercises({ request, timings })\n\tconst { title: workshopTitle } = getWorkshopConfig()\n\tconst exercise = exercises.find(\n\t\t(e) => e.exerciseNumber === Number(params.exerciseNumber),\n\t)\n\tif (!exercise) {\n\t\tthrow new Response('Not found', { status: 404 })\n\t}\n\n\tconst result = data(\n\t\t{\n\t\t\texerciseNumber: exercise.exerciseNumber,\n\t\t\texerciseTitle: exercise.title,\n\t\t\ttitle: workshopTitle,\n\t\t\texercises: exercises.map((e) => ({\n\t\t\t\texerciseNumber: e.exerciseNumber,\n\t\t\t\ttitle: e.title,\n\t\t\t})),\n\t\t},\n\t\t{\n\t\t\theaders: {\n\t\t\t\t'Server-Timing': getServerTimeHeader(timings),\n\t\t\t},\n\t\t},\n\t)\n\treturn result\n}\n\nexport const headers: HeadersFunction = ({ loaderHeaders, parentHeaders }) => {\n\tconst headers = {\n\t\t'Cache-Control': loaderHeaders.get('Cache-Control') ?? '',\n\t\t'Server-Timing': combineServerTimings(loaderHeaders, parentHeaders),\n\t}\n\treturn headers\n}\n\nexport default function StepRoute() {\n\treturn <Outlet />\n}\n\nexport function ErrorBoundary() {\n\tconst error = useRouteError()\n\n\tif (typeof document !== 'undefined') {\n\t\tconsole.error(error)\n\t}\n\n\treturn isRouteErrorResponse(error) ? (\n\t\terror.status === 404 ? (\n\t\t\t<p>Sorry, we couldn't find that step.</p>\n\t\t) : (\n\t\t\t<p>\n\t\t\t\t{error.status} {error.data}\n\t\t\t</p>\n\t\t)\n\t) : (\n\t\t<p>{getErrorMessage(error)}</p>\n\t)\n}\n"],"names":["$exerciseNumber__$stepNumber","_UNSAFE_withComponentProps","Outlet","ErrorBoundary","_UNSAFE_withErrorBoundaryProps","error","useRouteError","document","console","isRouteErrorResponse","status","jsx","children","jsxs","data","getErrorMessage"],"mappings":"qNAyDA,MAAAA,EAAAC,EAAA,UAAoC,CACnC,aAAQC,EAAA,EAAO,CAChB,CAAA,EAEOC,EAAAC,EAAA,UAAyB,CAC/B,MAAMC,EAAQC,EAAA,EAEd,OAAI,OAAOC,SAAa,KACvBC,QAAQH,MAAMA,CAAK,EAGbI,EAAqBJ,CAAK,EAChCA,EAAMK,SAAW,IAChBC,EAAAA,IAAC,IAAA,CAAEC,SAAA,oCAAA,CAAkC,EAErCC,EAAAA,KAAC,IAAA,CACCD,SAAA,CAAAP,EAAMK,OAAO,IAAEL,EAAMS,IAAA,CAAA,CACvB,EAGDH,EAAAA,IAAC,IAAA,CAAGC,SAAAG,EAAgBV,CAAK,CAAA,CAAE,CAE7B,CAAA"}
@@ -0,0 +1,2 @@
1
+ import"./_-BlUNM4zq.js";
2
+ //# sourceMappingURL=_exerciseNumber_._stepNumber.index-C_6vCTaR.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_exerciseNumber_._stepNumber.index-C_6vCTaR.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1,2 +1,2 @@
1
- import{w as l,L as n,r as c}from"./chunk-QMGIS6GS-Du-_uMOD.js";import{j as e}from"./jsx-runtime-DKBD_fLS.js";import{E as m}from"./index-2LBjIZsR.js";import{E as a}from"./epic-video-CYB9v08Z.js";import{I as x,c as d}from"./misc-D7yrZhQB.js";import{L as f}from"./loading-BuvISkeY.js";import{N as p}from"./nav-chevrons-DWkM88G0.js";import{u as h}from"./revalidation-ws-Do4fE9JQ.js";import{M as u,E as b}from"./mdx-DdK1AGxI.js";import{P as j}from"./progress-CdZ-Vcyn.js";import{u as g}from"./index-wYr49Min.js";import{u as N}from"./online-D4vODkth.js";import{g as v}from"./seo-P_yhbn7-.js";import"./_-BEfdnu_S.js";import"./user-BUyyWGpK.js";import"./workshop-config-eejws2-k.js";import"./clsx-B-dksMZM.js";import"./index-B8smZwSG.js";import"./index-C245u_6M.js";import"./progress-bar-B3_pKtoN.js";import"./pe-CdmQkMqU.js";import"./tooltip-CUdKgIRf.js";const A=({data:r,matches:s})=>{const i=r?.exercise.exerciseNumber.toString().padStart(2,"0"),o=s.find(t=>t?.id==="root")?.data;return!r||!o?[{title:"🦉 | Error"}]:v({title:`🦉 | ${i}. ${r.exercise.title} | ${o?.workshopTitle}`,description:`Elaboration for ${i}. ${r.exercise.title}`,ogTitle:`Finished: ${r.exercise.title}`,ogDescription:`Elaboration for exercise ${Number(i)}`,instructor:o.instructor,requestInfo:o.requestInfo})},w={h1:()=>null},B=l(function({loaderData:s}){const i=s.exercise.exerciseNumber.toString().padStart(2,"0");return h({watchPaths:[`./exercises/${i}/FINISHED.mdx`]}),e.jsx("div",{className:"flex max-w-full flex-grow flex-col",children:e.jsxs("main",{className:"flex flex-grow flex-col sm:grid sm:h-full sm:min-h-[800px] sm:grid-cols-1 sm:grid-rows-2 md:min-h-[unset] lg:grid-cols-2 lg:grid-rows-1",children:[e.jsxs("div",{className:"relative flex flex-col sm:col-span-1 sm:row-span-1 sm:h-full lg:border-r",children:[e.jsx("h1",{className:"h-14 border-b pl-10 pr-5 text-sm font-medium leading-tight",children:e.jsx("div",{className:"flex h-14 flex-wrap items-center justify-between gap-x-2 py-2",children:e.jsxs("div",{className:"flex items-center justify-start gap-x-2",children:[e.jsx(n,{to:`/${i}`,className:"hover:underline",children:`${i}. ${s.exercise.title}`}),e.jsx("span",{children:"/"}),e.jsx("span",{children:"Elaboration"})]})})}),e.jsx("article",{className:"shadow-on-scrollbox h-full w-full max-w-none flex-1 scroll-pt-6 space-y-6 overflow-y-auto p-2 scrollbar-thin scrollbar-thumb-scrollbar sm:p-10 sm:pt-8",id:s.articleId,children:s.exercise.finishedCode?e.jsx(a,{epicVideoInfosPromise:s.epicVideoInfosPromise,children:e.jsx("div",{className:"prose dark:prose-invert sm:prose-lg",children:e.jsx(u,{code:s.exercise.finishedCode,components:w})})}):"No finished instructions yet..."}),e.jsx(m,{elementQuery:`#${s.articleId}`}),e.jsx(j,{type:"finished",exerciseNumber:s.exercise.exerciseNumber,className:"h-14 border-t px-6"}),e.jsxs("div",{className:"flex h-16 justify-between border-b-4 border-t lg:border-b-0",children:[e.jsx("div",{}),e.jsx(b,{file:s.exerciseFinished.file,relativePath:s.exerciseFinished.relativePath}),e.jsx(p,{prev:s.prevStepLink,next:s.nextStepLink})]})]}),e.jsx(E,{exerciseFormEmbedUrl:s.exerciseFormEmbedUrl,exerciseTitle:s.exercise.title})]})})});function E({exerciseFormEmbedUrl:r,exerciseTitle:s}){const i=g(),[o,t]=c.useState(!1);return N()?e.jsxs("div",{className:"relative min-h-full sm:min-h-[unset] sm:flex-shrink-0",children:[o?null:e.jsx("div",{className:"absolute inset-0 z-10 flex items-center justify-center",children:e.jsx(f,{children:e.jsxs("span",{children:["Loading ",s," Elaboration form"]})})}),e.jsx("iframe",{onLoad:()=>t(!0),onError:()=>t(!0),title:"Elaboration",src:r,className:d("absolute inset-0 flex h-full w-full transition-opacity duration-300",o?"opacity-100":"opacity-0"),style:{colorScheme:i}})]}):e.jsx("div",{className:"relative flex-shrink-0",children:e.jsx("div",{className:"absolute inset-0 z-10 flex items-center justify-center text-body-md text-foreground-destructive",children:e.jsx(x,{name:"WifiNoConnection",size:"xl",children:e.jsxs("span",{children:["Unable to load the ",e.jsx("a",{href:r,className:"underline",children:`${s} feedback form`})," when offline"]})})})})}export{B as default,A as meta};
2
- //# sourceMappingURL=_exerciseNumber_.finished-BzyI4yot.js.map
1
+ import{w as l,L as n,r as c}from"./chunk-QMGIS6GS-X4HtlbLW.js";import{j as e}from"./jsx-runtime-DsURZTcu.js";import{E as m}from"./index-DHMekvRa.js";import{E as a}from"./epic-video-7tluZCfa.js";import{I as x,c as d}from"./misc-C_Wy6Ozi.js";import{L as f}from"./loading-DzDAEykN.js";import{N as p}from"./nav-chevrons-CkjJbQ8J.js";import{u as h}from"./revalidation-ws-kMaOT4Vi.js";import{M as u,E as b}from"./mdx-Dvg0ifxF.js";import{P as j}from"./progress-BV2BTh46.js";import{u as g}from"./index-CICRWfwA.js";import{u as N}from"./online-TZVMTbWw.js";import{g as v}from"./seo-CQ4WV-0-.js";import"./_-BlUNM4zq.js";import"./user-CW_hpuGs.js";import"./workshop-config-gL_m3l7d.js";import"./clsx-B-dksMZM.js";import"./index-CGfgwl2o.js";import"./index-CxkovwXQ.js";import"./progress-bar-D6ygvlaD.js";import"./pe-Cte41gbF.js";import"./tooltip-JOPrmP6Z.js";const A=({data:r,matches:s})=>{const i=r?.exercise.exerciseNumber.toString().padStart(2,"0"),o=s.find(t=>t?.id==="root")?.data;return!r||!o?[{title:"🦉 | Error"}]:v({title:`🦉 | ${i}. ${r.exercise.title} | ${o?.workshopTitle}`,description:`Elaboration for ${i}. ${r.exercise.title}`,ogTitle:`Finished: ${r.exercise.title}`,ogDescription:`Elaboration for exercise ${Number(i)}`,instructor:o.instructor,requestInfo:o.requestInfo})},w={h1:()=>null},B=l(function({loaderData:s}){const i=s.exercise.exerciseNumber.toString().padStart(2,"0");return h({watchPaths:[`./exercises/${i}/FINISHED.mdx`]}),e.jsx("div",{className:"flex max-w-full flex-grow flex-col",children:e.jsxs("main",{className:"flex flex-grow flex-col sm:grid sm:h-full sm:min-h-[800px] sm:grid-cols-1 sm:grid-rows-2 md:min-h-[unset] lg:grid-cols-2 lg:grid-rows-1",children:[e.jsxs("div",{className:"relative flex flex-col sm:col-span-1 sm:row-span-1 sm:h-full lg:border-r",children:[e.jsx("h1",{className:"h-14 border-b pl-10 pr-5 text-sm font-medium leading-tight",children:e.jsx("div",{className:"flex h-14 flex-wrap items-center justify-between gap-x-2 py-2",children:e.jsxs("div",{className:"flex items-center justify-start gap-x-2",children:[e.jsx(n,{to:`/${i}`,className:"hover:underline",children:`${i}. ${s.exercise.title}`}),e.jsx("span",{children:"/"}),e.jsx("span",{children:"Elaboration"})]})})}),e.jsx("article",{className:"shadow-on-scrollbox h-full w-full max-w-none flex-1 scroll-pt-6 space-y-6 overflow-y-auto p-2 scrollbar-thin scrollbar-thumb-scrollbar sm:p-10 sm:pt-8",id:s.articleId,children:s.exercise.finishedCode?e.jsx(a,{epicVideoInfosPromise:s.epicVideoInfosPromise,children:e.jsx("div",{className:"prose dark:prose-invert sm:prose-lg",children:e.jsx(u,{code:s.exercise.finishedCode,components:w})})}):"No finished instructions yet..."}),e.jsx(m,{elementQuery:`#${s.articleId}`}),e.jsx(j,{type:"finished",exerciseNumber:s.exercise.exerciseNumber,className:"h-14 border-t px-6"}),e.jsxs("div",{className:"flex h-16 justify-between border-b-4 border-t lg:border-b-0",children:[e.jsx("div",{}),e.jsx(b,{file:s.exerciseFinished.file,relativePath:s.exerciseFinished.relativePath}),e.jsx(p,{prev:s.prevStepLink,next:s.nextStepLink})]})]}),e.jsx(E,{exerciseFormEmbedUrl:s.exerciseFormEmbedUrl,exerciseTitle:s.exercise.title})]})})});function E({exerciseFormEmbedUrl:r,exerciseTitle:s}){const i=g(),[o,t]=c.useState(!1);return N()?e.jsxs("div",{className:"relative min-h-full sm:min-h-[unset] sm:flex-shrink-0",children:[o?null:e.jsx("div",{className:"absolute inset-0 z-10 flex items-center justify-center",children:e.jsx(f,{children:e.jsxs("span",{children:["Loading ",s," Elaboration form"]})})}),e.jsx("iframe",{onLoad:()=>t(!0),onError:()=>t(!0),title:"Elaboration",src:r,className:d("absolute inset-0 flex h-full w-full transition-opacity duration-300",o?"opacity-100":"opacity-0"),style:{colorScheme:i}})]}):e.jsx("div",{className:"relative flex-shrink-0",children:e.jsx("div",{className:"absolute inset-0 z-10 flex items-center justify-center text-body-md text-foreground-destructive",children:e.jsx(x,{name:"WifiNoConnection",size:"xl",children:e.jsxs("span",{children:["Unable to load the ",e.jsx("a",{href:r,className:"underline",children:`${s} feedback form`})," when offline"]})})})})}export{B as default,A as meta};
2
+ //# sourceMappingURL=_exerciseNumber_.finished-CYjuSr3V.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"_exerciseNumber_.finished-BzyI4yot.js","sources":["../../../app/routes/_app+/exercise+/$exerciseNumber_.finished.tsx"],"sourcesContent":["import path from 'path'\nimport { invariantResponse } from '@epic-web/invariant'\nimport { ElementScrollRestoration } from '@epic-web/restore-scroll'\nimport {\n\tgetAppPageRoute,\n\tgetApps,\n\tgetExercise,\n\tgetWorkshopRoot,\n\tisExerciseStepApp,\n} from '@epic-web/workshop-utils/apps.server'\nimport { getWorkshopConfig } from '@epic-web/workshop-utils/config.server'\nimport { getEpicVideoInfos } from '@epic-web/workshop-utils/epic-api.server'\nimport {\n\tcombineServerTimings,\n\tgetServerTimeHeader,\n\tmakeTimings,\n} from '@epic-web/workshop-utils/timing.server'\nimport slugify from '@sindresorhus/slugify'\nimport * as React from 'react'\nimport { data, type HeadersFunction, Link } from 'react-router'\nimport { EpicVideoInfoProvider } from '#app/components/epic-video.tsx'\nimport { Icon } from '#app/components/icons.tsx'\nimport { Loading } from '#app/components/loading.tsx'\nimport { NavChevrons } from '#app/components/nav-chevrons.tsx'\nimport { useRevalidationWS } from '#app/components/revalidation-ws.js'\nimport { type RootLoaderData } from '#app/root.tsx'\nimport { EditFileOnGitHub } from '#app/routes/launch-editor.tsx'\nimport { ProgressToggle } from '#app/routes/progress.tsx'\nimport { useTheme } from '#app/routes/theme/index.tsx'\nimport { Mdx } from '#app/utils/mdx.tsx'\nimport { cn } from '#app/utils/misc.tsx'\nimport { useIsOnline } from '#app/utils/online.ts'\nimport { getSeoMetaTags } from '#app/utils/seo.js'\nimport { type Route } from './+types/$exerciseNumber_.finished.tsx'\n\nexport const meta: Route.MetaFunction = ({ data, matches }) => {\n\tconst number = data?.exercise.exerciseNumber.toString().padStart(2, '0')\n\n\tconst rootData = matches.find((m) => m?.id === 'root')?.data as RootLoaderData\n\tif (!data || !rootData) return [{ title: '🦉 | Error' }]\n\n\treturn getSeoMetaTags({\n\t\ttitle: `🦉 | ${number}. ${data.exercise.title} | ${rootData?.workshopTitle}`,\n\t\tdescription: `Elaboration for ${number}. ${data.exercise.title}`,\n\t\togTitle: `Finished: ${data.exercise.title}`,\n\t\togDescription: `Elaboration for exercise ${Number(number)}`,\n\t\tinstructor: rootData.instructor,\n\t\trequestInfo: rootData.requestInfo,\n\t})\n}\n\nexport async function loader({ request, params }: Route.LoaderArgs) {\n\tconst timings = makeTimings('exerciseFinishedLoader')\n\tinvariantResponse(params.exerciseNumber, 'exerciseNumber is required')\n\tconst exercise = await getExercise(params.exerciseNumber, {\n\t\ttimings,\n\t\trequest,\n\t})\n\tif (!exercise) {\n\t\tthrow new Response('Not found', { status: 404 })\n\t}\n\tconst workshopConfig = getWorkshopConfig()\n\tconst exerciseFormTemplate = workshopConfig.forms.exercise\n\tconst exerciseFormEmbedUrl = exerciseFormTemplate\n\t\t.replace('{workshopTitle}', encodeURIComponent(workshopConfig.title))\n\t\t.replace('{exerciseTitle}', encodeURIComponent(exercise.title))\n\tconst nextExercise = await getExercise(exercise.exerciseNumber + 1, {\n\t\ttimings,\n\t\trequest,\n\t})\n\n\tconst finishedFilepath = path.join(\n\t\tgetWorkshopRoot(),\n\t\t'exercises',\n\t\texercise.dirName,\n\t\t'FINISHED.mdx',\n\t)\n\n\tconst apps = await getApps({ request, timings })\n\tconst exerciseApps = apps\n\t\t.filter(isExerciseStepApp)\n\t\t.filter((app) => app.exerciseNumber === exercise.exerciseNumber)\n\tconst prevApp = exerciseApps[exerciseApps.length - 1]\n\n\tconst articleId = `workshop-${slugify(workshopConfig.title)}-${\n\t\texercise.exerciseNumber\n\t}-finished`\n\n\treturn data(\n\t\t{\n\t\t\tarticleId,\n\t\t\tworkshopTitle: workshopConfig.title,\n\t\t\texercise,\n\t\t\texerciseFormEmbedUrl,\n\t\t\tepicVideoInfosPromise: getEpicVideoInfos(\n\t\t\t\texercise.finishedEpicVideoEmbeds,\n\t\t\t\t{ request },\n\t\t\t),\n\t\t\texerciseFinished: {\n\t\t\t\tfile: finishedFilepath,\n\t\t\t\trelativePath: `exercises/${exercise.dirName}/FINISHED.mdx`,\n\t\t\t},\n\t\t\tprevStepLink: prevApp\n\t\t\t\t? {\n\t\t\t\t\t\tto: getAppPageRoute(prevApp),\n\t\t\t\t\t\t'aria-label': `${prevApp.title} (${prevApp.type})`,\n\t\t\t\t\t}\n\t\t\t\t: null,\n\t\t\tnextStepLink: nextExercise\n\t\t\t\t? {\n\t\t\t\t\t\tto: `/exercise/${nextExercise.exerciseNumber.toString().padStart(2, '0')}`,\n\t\t\t\t\t\t'aria-label': `${nextExercise.title}`,\n\t\t\t\t\t}\n\t\t\t\t: {\n\t\t\t\t\t\tto: '/finished',\n\t\t\t\t\t\t'aria-label': 'Finished! 🎉',\n\t\t\t\t\t},\n\t\t},\n\t\t{\n\t\t\theaders: {\n\t\t\t\t'Server-Timing': getServerTimeHeader(timings),\n\t\t\t},\n\t\t},\n\t)\n}\n\nexport const headers: HeadersFunction = ({ loaderHeaders, parentHeaders }) => {\n\tconst headers = {\n\t\t'Cache-Control': loaderHeaders.get('Cache-Control') ?? '',\n\t\t'Server-Timing': combineServerTimings(loaderHeaders, parentHeaders),\n\t}\n\treturn headers\n}\n\nconst mdxComponents = { h1: () => null }\nexport default function ExerciseFinished({\n\tloaderData: data,\n}: Route.ComponentProps) {\n\tconst exerciseNumber = data.exercise.exerciseNumber\n\t\t.toString()\n\t\t.padStart(2, '0')\n\n\tuseRevalidationWS({\n\t\twatchPaths: [`./exercises/${exerciseNumber}/FINISHED.mdx`],\n\t})\n\n\treturn (\n\t\t<div className=\"flex max-w-full flex-grow flex-col\">\n\t\t\t<main className=\"flex flex-grow flex-col sm:grid sm:h-full sm:min-h-[800px] sm:grid-cols-1 sm:grid-rows-2 md:min-h-[unset] lg:grid-cols-2 lg:grid-rows-1\">\n\t\t\t\t<div className=\"relative flex flex-col sm:col-span-1 sm:row-span-1 sm:h-full lg:border-r\">\n\t\t\t\t\t<h1 className=\"h-14 border-b pl-10 pr-5 text-sm font-medium leading-tight\">\n\t\t\t\t\t\t<div className=\"flex h-14 flex-wrap items-center justify-between gap-x-2 py-2\">\n\t\t\t\t\t\t\t<div className=\"flex items-center justify-start gap-x-2\">\n\t\t\t\t\t\t\t\t<Link to={`/${exerciseNumber}`} className=\"hover:underline\">\n\t\t\t\t\t\t\t\t\t{`${exerciseNumber}. ${data.exercise.title}`}\n\t\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t\t\t<span>/</span>\n\t\t\t\t\t\t\t\t<span>Elaboration</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</h1>\n\n\t\t\t\t\t<article\n\t\t\t\t\t\tclassName=\"shadow-on-scrollbox h-full w-full max-w-none flex-1 scroll-pt-6 space-y-6 overflow-y-auto p-2 scrollbar-thin scrollbar-thumb-scrollbar sm:p-10 sm:pt-8\"\n\t\t\t\t\t\tid={data.articleId}\n\t\t\t\t\t>\n\t\t\t\t\t\t{data.exercise.finishedCode ? (\n\t\t\t\t\t\t\t<EpicVideoInfoProvider\n\t\t\t\t\t\t\t\tepicVideoInfosPromise={data.epicVideoInfosPromise}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<div className=\"prose dark:prose-invert sm:prose-lg\">\n\t\t\t\t\t\t\t\t\t<Mdx\n\t\t\t\t\t\t\t\t\t\tcode={data.exercise.finishedCode}\n\t\t\t\t\t\t\t\t\t\tcomponents={mdxComponents}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</EpicVideoInfoProvider>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t// TODO: render a random dad joke...\n\t\t\t\t\t\t\t'No finished instructions yet...'\n\t\t\t\t\t\t)}\n\t\t\t\t\t</article>\n\t\t\t\t\t<ElementScrollRestoration elementQuery={`#${data.articleId}`} />\n\t\t\t\t\t<ProgressToggle\n\t\t\t\t\t\ttype=\"finished\"\n\t\t\t\t\t\texerciseNumber={data.exercise.exerciseNumber}\n\t\t\t\t\t\tclassName=\"h-14 border-t px-6\"\n\t\t\t\t\t/>\n\t\t\t\t\t<div className=\"flex h-16 justify-between border-b-4 border-t lg:border-b-0\">\n\t\t\t\t\t\t<div />\n\t\t\t\t\t\t<EditFileOnGitHub\n\t\t\t\t\t\t\tfile={data.exerciseFinished.file}\n\t\t\t\t\t\t\trelativePath={data.exerciseFinished.relativePath}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<NavChevrons prev={data.prevStepLink} next={data.nextStepLink} />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<Survey\n\t\t\t\t\texerciseFormEmbedUrl={data.exerciseFormEmbedUrl}\n\t\t\t\t\texerciseTitle={data.exercise.title}\n\t\t\t\t/>\n\t\t\t</main>\n\t\t</div>\n\t)\n}\n\nfunction Survey({\n\texerciseFormEmbedUrl,\n\texerciseTitle,\n}: {\n\texerciseFormEmbedUrl: string\n\texerciseTitle: string\n}) {\n\tconst theme = useTheme()\n\tconst [iframeLoaded, setIframeLoaded] = React.useState(false)\n\tconst isOnline = useIsOnline()\n\tif (!isOnline) {\n\t\treturn (\n\t\t\t<div className=\"relative flex-shrink-0\">\n\t\t\t\t<div className=\"absolute inset-0 z-10 flex items-center justify-center text-body-md text-foreground-destructive\">\n\t\t\t\t\t<Icon name=\"WifiNoConnection\" size=\"xl\">\n\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t{'Unable to load the '}\n\t\t\t\t\t\t\t<a href={exerciseFormEmbedUrl} className=\"underline\">\n\t\t\t\t\t\t\t\t{`${exerciseTitle} feedback form`}\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t{' when offline'}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</Icon>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t)\n\t}\n\treturn (\n\t\t<div className=\"relative min-h-full sm:min-h-[unset] sm:flex-shrink-0\">\n\t\t\t{!iframeLoaded ? (\n\t\t\t\t<div className=\"absolute inset-0 z-10 flex items-center justify-center\">\n\t\t\t\t\t<Loading>\n\t\t\t\t\t\t<span>Loading {exerciseTitle} Elaboration form</span>\n\t\t\t\t\t</Loading>\n\t\t\t\t</div>\n\t\t\t) : null}\n\t\t\t<iframe\n\t\t\t\tonLoad={() => setIframeLoaded(true)}\n\t\t\t\t// show what would have shown if there is an error\n\t\t\t\tonError={() => setIframeLoaded(true)}\n\t\t\t\ttitle=\"Elaboration\"\n\t\t\t\tsrc={exerciseFormEmbedUrl}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'absolute inset-0 flex h-full w-full transition-opacity duration-300',\n\t\t\t\t\tiframeLoaded ? 'opacity-100' : 'opacity-0',\n\t\t\t\t)}\n\t\t\t\tstyle={{ colorScheme: theme }}\n\t\t\t/>\n\t\t</div>\n\t)\n}\n"],"names":["meta","data","matches","number","exercise","exerciseNumber","toString","padStart","rootData","find","m","id","title","getSeoMetaTags","workshopTitle","description","ogTitle","ogDescription","Number","instructor","requestInfo","mdxComponents","h1","$exerciseNumber__finished","_UNSAFE_withComponentProps","loaderData","useRevalidationWS","watchPaths","className","children","jsxs","jsx","Link","to","articleId","finishedCode","EpicVideoInfoProvider","epicVideoInfosPromise","Mdx","code","components","ElementScrollRestoration","elementQuery","ProgressToggle","type","EditFileOnGitHub","file","exerciseFinished","relativePath","NavChevrons","prev","prevStepLink","next","nextStepLink","Survey","exerciseFormEmbedUrl","exerciseTitle","theme","useTheme","iframeLoaded","setIframeLoaded","React","useIsOnline","Loading","onLoad","onError","src","cn","style","colorScheme","Icon","name","size","href"],"mappings":"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"}
1
+ {"version":3,"file":"_exerciseNumber_.finished-CYjuSr3V.js","sources":["../../../app/routes/_app+/exercise+/$exerciseNumber_.finished.tsx"],"sourcesContent":["import path from 'path'\nimport { invariantResponse } from '@epic-web/invariant'\nimport { ElementScrollRestoration } from '@epic-web/restore-scroll'\nimport {\n\tgetAppPageRoute,\n\tgetApps,\n\tgetExercise,\n\tgetWorkshopRoot,\n\tisExerciseStepApp,\n} from '@epic-web/workshop-utils/apps.server'\nimport { getWorkshopConfig } from '@epic-web/workshop-utils/config.server'\nimport { getEpicVideoInfos } from '@epic-web/workshop-utils/epic-api.server'\nimport {\n\tcombineServerTimings,\n\tgetServerTimeHeader,\n\tmakeTimings,\n} from '@epic-web/workshop-utils/timing.server'\nimport slugify from '@sindresorhus/slugify'\nimport * as React from 'react'\nimport { data, type HeadersFunction, Link } from 'react-router'\nimport { EpicVideoInfoProvider } from '#app/components/epic-video.tsx'\nimport { Icon } from '#app/components/icons.tsx'\nimport { Loading } from '#app/components/loading.tsx'\nimport { NavChevrons } from '#app/components/nav-chevrons.tsx'\nimport { useRevalidationWS } from '#app/components/revalidation-ws.js'\nimport { type RootLoaderData } from '#app/root.tsx'\nimport { EditFileOnGitHub } from '#app/routes/launch-editor.tsx'\nimport { ProgressToggle } from '#app/routes/progress.tsx'\nimport { useTheme } from '#app/routes/theme/index.tsx'\nimport { Mdx } from '#app/utils/mdx.tsx'\nimport { cn } from '#app/utils/misc.tsx'\nimport { useIsOnline } from '#app/utils/online.ts'\nimport { getSeoMetaTags } from '#app/utils/seo.js'\nimport { type Route } from './+types/$exerciseNumber_.finished.tsx'\n\nexport const meta: Route.MetaFunction = ({ data, matches }) => {\n\tconst number = data?.exercise.exerciseNumber.toString().padStart(2, '0')\n\n\tconst rootData = matches.find((m) => m?.id === 'root')?.data as RootLoaderData\n\tif (!data || !rootData) return [{ title: '🦉 | Error' }]\n\n\treturn getSeoMetaTags({\n\t\ttitle: `🦉 | ${number}. ${data.exercise.title} | ${rootData?.workshopTitle}`,\n\t\tdescription: `Elaboration for ${number}. ${data.exercise.title}`,\n\t\togTitle: `Finished: ${data.exercise.title}`,\n\t\togDescription: `Elaboration for exercise ${Number(number)}`,\n\t\tinstructor: rootData.instructor,\n\t\trequestInfo: rootData.requestInfo,\n\t})\n}\n\nexport async function loader({ request, params }: Route.LoaderArgs) {\n\tconst timings = makeTimings('exerciseFinishedLoader')\n\tinvariantResponse(params.exerciseNumber, 'exerciseNumber is required')\n\tconst exercise = await getExercise(params.exerciseNumber, {\n\t\ttimings,\n\t\trequest,\n\t})\n\tif (!exercise) {\n\t\tthrow new Response('Not found', { status: 404 })\n\t}\n\tconst workshopConfig = getWorkshopConfig()\n\tconst exerciseFormTemplate = workshopConfig.forms.exercise\n\tconst exerciseFormEmbedUrl = exerciseFormTemplate\n\t\t.replace('{workshopTitle}', encodeURIComponent(workshopConfig.title))\n\t\t.replace('{exerciseTitle}', encodeURIComponent(exercise.title))\n\tconst nextExercise = await getExercise(exercise.exerciseNumber + 1, {\n\t\ttimings,\n\t\trequest,\n\t})\n\n\tconst finishedFilepath = path.join(\n\t\tgetWorkshopRoot(),\n\t\t'exercises',\n\t\texercise.dirName,\n\t\t'FINISHED.mdx',\n\t)\n\n\tconst apps = await getApps({ request, timings })\n\tconst exerciseApps = apps\n\t\t.filter(isExerciseStepApp)\n\t\t.filter((app) => app.exerciseNumber === exercise.exerciseNumber)\n\tconst prevApp = exerciseApps[exerciseApps.length - 1]\n\n\tconst articleId = `workshop-${slugify(workshopConfig.title)}-${\n\t\texercise.exerciseNumber\n\t}-finished`\n\n\treturn data(\n\t\t{\n\t\t\tarticleId,\n\t\t\tworkshopTitle: workshopConfig.title,\n\t\t\texercise,\n\t\t\texerciseFormEmbedUrl,\n\t\t\tepicVideoInfosPromise: getEpicVideoInfos(\n\t\t\t\texercise.finishedEpicVideoEmbeds,\n\t\t\t\t{ request },\n\t\t\t),\n\t\t\texerciseFinished: {\n\t\t\t\tfile: finishedFilepath,\n\t\t\t\trelativePath: `exercises/${exercise.dirName}/FINISHED.mdx`,\n\t\t\t},\n\t\t\tprevStepLink: prevApp\n\t\t\t\t? {\n\t\t\t\t\t\tto: getAppPageRoute(prevApp),\n\t\t\t\t\t\t'aria-label': `${prevApp.title} (${prevApp.type})`,\n\t\t\t\t\t}\n\t\t\t\t: null,\n\t\t\tnextStepLink: nextExercise\n\t\t\t\t? {\n\t\t\t\t\t\tto: `/exercise/${nextExercise.exerciseNumber.toString().padStart(2, '0')}`,\n\t\t\t\t\t\t'aria-label': `${nextExercise.title}`,\n\t\t\t\t\t}\n\t\t\t\t: {\n\t\t\t\t\t\tto: '/finished',\n\t\t\t\t\t\t'aria-label': 'Finished! 🎉',\n\t\t\t\t\t},\n\t\t},\n\t\t{\n\t\t\theaders: {\n\t\t\t\t'Server-Timing': getServerTimeHeader(timings),\n\t\t\t},\n\t\t},\n\t)\n}\n\nexport const headers: HeadersFunction = ({ loaderHeaders, parentHeaders }) => {\n\tconst headers = {\n\t\t'Cache-Control': loaderHeaders.get('Cache-Control') ?? '',\n\t\t'Server-Timing': combineServerTimings(loaderHeaders, parentHeaders),\n\t}\n\treturn headers\n}\n\nconst mdxComponents = { h1: () => null }\nexport default function ExerciseFinished({\n\tloaderData: data,\n}: Route.ComponentProps) {\n\tconst exerciseNumber = data.exercise.exerciseNumber\n\t\t.toString()\n\t\t.padStart(2, '0')\n\n\tuseRevalidationWS({\n\t\twatchPaths: [`./exercises/${exerciseNumber}/FINISHED.mdx`],\n\t})\n\n\treturn (\n\t\t<div className=\"flex max-w-full flex-grow flex-col\">\n\t\t\t<main className=\"flex flex-grow flex-col sm:grid sm:h-full sm:min-h-[800px] sm:grid-cols-1 sm:grid-rows-2 md:min-h-[unset] lg:grid-cols-2 lg:grid-rows-1\">\n\t\t\t\t<div className=\"relative flex flex-col sm:col-span-1 sm:row-span-1 sm:h-full lg:border-r\">\n\t\t\t\t\t<h1 className=\"h-14 border-b pl-10 pr-5 text-sm font-medium leading-tight\">\n\t\t\t\t\t\t<div className=\"flex h-14 flex-wrap items-center justify-between gap-x-2 py-2\">\n\t\t\t\t\t\t\t<div className=\"flex items-center justify-start gap-x-2\">\n\t\t\t\t\t\t\t\t<Link to={`/${exerciseNumber}`} className=\"hover:underline\">\n\t\t\t\t\t\t\t\t\t{`${exerciseNumber}. ${data.exercise.title}`}\n\t\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t\t\t<span>/</span>\n\t\t\t\t\t\t\t\t<span>Elaboration</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</h1>\n\n\t\t\t\t\t<article\n\t\t\t\t\t\tclassName=\"shadow-on-scrollbox h-full w-full max-w-none flex-1 scroll-pt-6 space-y-6 overflow-y-auto p-2 scrollbar-thin scrollbar-thumb-scrollbar sm:p-10 sm:pt-8\"\n\t\t\t\t\t\tid={data.articleId}\n\t\t\t\t\t>\n\t\t\t\t\t\t{data.exercise.finishedCode ? (\n\t\t\t\t\t\t\t<EpicVideoInfoProvider\n\t\t\t\t\t\t\t\tepicVideoInfosPromise={data.epicVideoInfosPromise}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<div className=\"prose dark:prose-invert sm:prose-lg\">\n\t\t\t\t\t\t\t\t\t<Mdx\n\t\t\t\t\t\t\t\t\t\tcode={data.exercise.finishedCode}\n\t\t\t\t\t\t\t\t\t\tcomponents={mdxComponents}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</EpicVideoInfoProvider>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t// TODO: render a random dad joke...\n\t\t\t\t\t\t\t'No finished instructions yet...'\n\t\t\t\t\t\t)}\n\t\t\t\t\t</article>\n\t\t\t\t\t<ElementScrollRestoration elementQuery={`#${data.articleId}`} />\n\t\t\t\t\t<ProgressToggle\n\t\t\t\t\t\ttype=\"finished\"\n\t\t\t\t\t\texerciseNumber={data.exercise.exerciseNumber}\n\t\t\t\t\t\tclassName=\"h-14 border-t px-6\"\n\t\t\t\t\t/>\n\t\t\t\t\t<div className=\"flex h-16 justify-between border-b-4 border-t lg:border-b-0\">\n\t\t\t\t\t\t<div />\n\t\t\t\t\t\t<EditFileOnGitHub\n\t\t\t\t\t\t\tfile={data.exerciseFinished.file}\n\t\t\t\t\t\t\trelativePath={data.exerciseFinished.relativePath}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<NavChevrons prev={data.prevStepLink} next={data.nextStepLink} />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<Survey\n\t\t\t\t\texerciseFormEmbedUrl={data.exerciseFormEmbedUrl}\n\t\t\t\t\texerciseTitle={data.exercise.title}\n\t\t\t\t/>\n\t\t\t</main>\n\t\t</div>\n\t)\n}\n\nfunction Survey({\n\texerciseFormEmbedUrl,\n\texerciseTitle,\n}: {\n\texerciseFormEmbedUrl: string\n\texerciseTitle: string\n}) {\n\tconst theme = useTheme()\n\tconst [iframeLoaded, setIframeLoaded] = React.useState(false)\n\tconst isOnline = useIsOnline()\n\tif (!isOnline) {\n\t\treturn (\n\t\t\t<div className=\"relative flex-shrink-0\">\n\t\t\t\t<div className=\"absolute inset-0 z-10 flex items-center justify-center text-body-md text-foreground-destructive\">\n\t\t\t\t\t<Icon name=\"WifiNoConnection\" size=\"xl\">\n\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t{'Unable to load the '}\n\t\t\t\t\t\t\t<a href={exerciseFormEmbedUrl} className=\"underline\">\n\t\t\t\t\t\t\t\t{`${exerciseTitle} feedback form`}\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t{' when offline'}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</Icon>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t)\n\t}\n\treturn (\n\t\t<div className=\"relative min-h-full sm:min-h-[unset] sm:flex-shrink-0\">\n\t\t\t{!iframeLoaded ? (\n\t\t\t\t<div className=\"absolute inset-0 z-10 flex items-center justify-center\">\n\t\t\t\t\t<Loading>\n\t\t\t\t\t\t<span>Loading {exerciseTitle} Elaboration form</span>\n\t\t\t\t\t</Loading>\n\t\t\t\t</div>\n\t\t\t) : null}\n\t\t\t<iframe\n\t\t\t\tonLoad={() => setIframeLoaded(true)}\n\t\t\t\t// show what would have shown if there is an error\n\t\t\t\tonError={() => setIframeLoaded(true)}\n\t\t\t\ttitle=\"Elaboration\"\n\t\t\t\tsrc={exerciseFormEmbedUrl}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'absolute inset-0 flex h-full w-full transition-opacity duration-300',\n\t\t\t\t\tiframeLoaded ? 'opacity-100' : 'opacity-0',\n\t\t\t\t)}\n\t\t\t\tstyle={{ colorScheme: theme }}\n\t\t\t/>\n\t\t</div>\n\t)\n}\n"],"names":["meta","data","matches","number","exercise","exerciseNumber","toString","padStart","rootData","find","m","id","title","getSeoMetaTags","workshopTitle","description","ogTitle","ogDescription","Number","instructor","requestInfo","mdxComponents","h1","$exerciseNumber__finished","_UNSAFE_withComponentProps","loaderData","useRevalidationWS","watchPaths","className","children","jsxs","jsx","Link","to","articleId","finishedCode","EpicVideoInfoProvider","epicVideoInfosPromise","Mdx","code","components","ElementScrollRestoration","elementQuery","ProgressToggle","type","EditFileOnGitHub","file","exerciseFinished","relativePath","NavChevrons","prev","prevStepLink","next","nextStepLink","Survey","exerciseFormEmbedUrl","exerciseTitle","theme","useTheme","iframeLoaded","setIframeLoaded","React","useIsOnline","Loading","onLoad","onError","src","cn","style","colorScheme","Icon","name","size","href"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{w as l,L as s,O as t}from"./chunk-QMGIS6GS-Du-_uMOD.js";import{j as e}from"./jsx-runtime-DKBD_fLS.js";import"./_-BEfdnu_S.js";const c={getSitemapEntries:()=>null},m=({matches:n})=>[{title:`👷 | ${n.find(i=>i?.id==="root")?.data?.workshopTitle}`}],x=l(function(){return e.jsxs("main",{className:"container mx-auto mt-8",children:[e.jsx("h1",{className:"text-4xl font-bold",children:"Admin"}),e.jsxs("div",{className:"flex flex-col gap-4",children:[e.jsx("nav",{children:e.jsxs("ul",{className:"flex gap-3",children:[e.jsx("li",{children:e.jsx(s,{className:"underline",to:"/",children:"Home"})}),e.jsx("li",{children:e.jsx(s,{className:"underline",to:"/admin",children:"Admin"})}),e.jsx("li",{children:e.jsx(s,{className:"underline",to:"/diff",children:"Diff Viewer"})}),e.jsx("li",{children:e.jsx(s,{className:"underline",to:"version",children:"Version"})})]})}),e.jsx(t,{})]})]})});export{x as default,c as handle,m as meta};
2
- //# sourceMappingURL=_layout-EWv-HN0t.js.map
1
+ import{w as l,L as s,O as t}from"./chunk-QMGIS6GS-X4HtlbLW.js";import{j as e}from"./jsx-runtime-DsURZTcu.js";import"./_-BlUNM4zq.js";const c={getSitemapEntries:()=>null},m=({matches:n})=>[{title:`👷 | ${n.find(i=>i?.id==="root")?.data?.workshopTitle}`}],x=l(function(){return e.jsxs("main",{className:"container mx-auto mt-8",children:[e.jsx("h1",{className:"text-4xl font-bold",children:"Admin"}),e.jsxs("div",{className:"flex flex-col gap-4",children:[e.jsx("nav",{children:e.jsxs("ul",{className:"flex gap-3",children:[e.jsx("li",{children:e.jsx(s,{className:"underline",to:"/",children:"Home"})}),e.jsx("li",{children:e.jsx(s,{className:"underline",to:"/admin",children:"Admin"})}),e.jsx("li",{children:e.jsx(s,{className:"underline",to:"/diff",children:"Diff Viewer"})}),e.jsx("li",{children:e.jsx(s,{className:"underline",to:"version",children:"Version"})})]})}),e.jsx(t,{})]})]})});export{x as default,c as handle,m as meta};
2
+ //# sourceMappingURL=_layout-4_y1jBpR.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"_layout-EWv-HN0t.js","sources":["../../../app/routes/admin+/_layout.tsx"],"sourcesContent":["import { type SEOHandle } from '@nasa-gcn/remix-seo'\nimport { Link, Outlet } from 'react-router'\nimport { type RootLoaderData } from '#app/root.tsx'\nimport { type Route } from './+types/_layout.tsx'\n\nexport const handle: SEOHandle = {\n\tgetSitemapEntries: () => null,\n}\n\nexport const meta: Route.MetaFunction = ({ matches }) => {\n\tconst rootData = matches.find((m) => m?.id === 'root')?.data as RootLoaderData\n\treturn [{ title: `👷 | ${rootData?.workshopTitle}` }]\n}\n\nexport default function AdminLayout() {\n\treturn (\n\t\t<main className=\"container mx-auto mt-8\">\n\t\t\t<h1 className=\"text-4xl font-bold\">Admin</h1>\n\t\t\t<div className=\"flex flex-col gap-4\">\n\t\t\t\t<nav>\n\t\t\t\t\t<ul className=\"flex gap-3\">\n\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t<Link className=\"underline\" to=\"/\">\n\t\t\t\t\t\t\t\tHome\n\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t<Link className=\"underline\" to=\"/admin\">\n\t\t\t\t\t\t\t\tAdmin\n\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t<Link className=\"underline\" to=\"/diff\">\n\t\t\t\t\t\t\t\tDiff Viewer\n\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t<Link className=\"underline\" to=\"version\">\n\t\t\t\t\t\t\t\tVersion\n\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t</ul>\n\t\t\t\t</nav>\n\t\t\t\t<Outlet />\n\t\t\t</div>\n\t\t</main>\n\t)\n}\n"],"names":["handle","getSitemapEntries","meta","matches","title","find","m","id","data","workshopTitle","_layout","_UNSAFE_withComponentProps","jsxs","className","children","jsx","Link","to","Outlet"],"mappings":"qIAKO,MAAMA,EAAoB,CAChCC,kBAAmBA,IAAM,IAC1B,EAEaC,EAA2BA,CAAC,CAAEC,QAAAA,CAAQ,IAE3C,CAAC,CAAEC,MAAO,QADAD,EAAQE,KAAMC,GAAMA,GAAGC,KAAO,MAAM,GAAGC,MACrBC,aAAa,EAAG,CAAC,EAGrDC,EAAAC,EAAA,UAAsC,CACrC,OACCC,EAAAA,KAAC,OAAA,CAAKC,UAAU,yBACfC,SAAA,CAAAC,EAAAA,IAAC,KAAA,CAAGF,UAAU,qBAAqBC,SAAA,OAAA,CAAK,EACxCF,EAAAA,KAAC,MAAA,CAAIC,UAAU,sBACdC,SAAA,CAAAC,EAAAA,IAAC,MAAA,CACAD,SAAAF,EAAAA,KAAC,KAAA,CAAGC,UAAU,aACbC,SAAA,CAAAC,EAAAA,IAAC,KAAA,CACAD,eAACE,EAAA,CAAKH,UAAU,YAAYI,GAAG,IAAIH,gBAEnC,CAAA,CACD,EACAC,EAAAA,IAAC,MACAD,SAAAC,EAAAA,IAACC,EAAA,CAAKH,UAAU,YAAYI,GAAG,SAASH,SAAA,QAExC,CAAA,CACD,EACAC,EAAAA,IAAC,MACAD,SAAAC,EAAAA,IAACC,EAAA,CAAKH,UAAU,YAAYI,GAAG,QAAQH,SAAA,cAEvC,CAAA,CACD,EACAC,EAAAA,IAAC,MACAD,SAAAC,EAAAA,IAACC,EAAA,CAAKH,UAAU,YAAYI,GAAG,UAAUH,SAAA,UAEzC,CAAA,CACD,CAAA,EACD,EACD,QACCI,EAAA,EAAO,CAAA,CAAA,CACT,CAAA,CAAA,CACD,CAEF,CAAA"}
1
+ {"version":3,"file":"_layout-4_y1jBpR.js","sources":["../../../app/routes/admin+/_layout.tsx"],"sourcesContent":["import { type SEOHandle } from '@nasa-gcn/remix-seo'\nimport { Link, Outlet } from 'react-router'\nimport { type RootLoaderData } from '#app/root.tsx'\nimport { type Route } from './+types/_layout.tsx'\n\nexport const handle: SEOHandle = {\n\tgetSitemapEntries: () => null,\n}\n\nexport const meta: Route.MetaFunction = ({ matches }) => {\n\tconst rootData = matches.find((m) => m?.id === 'root')?.data as RootLoaderData\n\treturn [{ title: `👷 | ${rootData?.workshopTitle}` }]\n}\n\nexport default function AdminLayout() {\n\treturn (\n\t\t<main className=\"container mx-auto mt-8\">\n\t\t\t<h1 className=\"text-4xl font-bold\">Admin</h1>\n\t\t\t<div className=\"flex flex-col gap-4\">\n\t\t\t\t<nav>\n\t\t\t\t\t<ul className=\"flex gap-3\">\n\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t<Link className=\"underline\" to=\"/\">\n\t\t\t\t\t\t\t\tHome\n\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t<Link className=\"underline\" to=\"/admin\">\n\t\t\t\t\t\t\t\tAdmin\n\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t<Link className=\"underline\" to=\"/diff\">\n\t\t\t\t\t\t\t\tDiff Viewer\n\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t<Link className=\"underline\" to=\"version\">\n\t\t\t\t\t\t\t\tVersion\n\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t</ul>\n\t\t\t\t</nav>\n\t\t\t\t<Outlet />\n\t\t\t</div>\n\t\t</main>\n\t)\n}\n"],"names":["handle","getSitemapEntries","meta","matches","title","find","m","id","data","workshopTitle","_layout","_UNSAFE_withComponentProps","jsxs","className","children","jsx","Link","to","Outlet"],"mappings":"qIAKO,MAAMA,EAAoB,CAChCC,kBAAmBA,IAAM,IAC1B,EAEaC,EAA2BA,CAAC,CAAEC,QAAAA,CAAQ,IAE3C,CAAC,CAAEC,MAAO,QADAD,EAAQE,KAAMC,GAAMA,GAAGC,KAAO,MAAM,GAAGC,MACrBC,aAAa,EAAG,CAAC,EAGrDC,EAAAC,EAAA,UAAsC,CACrC,OACCC,EAAAA,KAAC,OAAA,CAAKC,UAAU,yBACfC,SAAA,CAAAC,EAAAA,IAAC,KAAA,CAAGF,UAAU,qBAAqBC,SAAA,OAAA,CAAK,EACxCF,EAAAA,KAAC,MAAA,CAAIC,UAAU,sBACdC,SAAA,CAAAC,EAAAA,IAAC,MAAA,CACAD,SAAAF,EAAAA,KAAC,KAAA,CAAGC,UAAU,aACbC,SAAA,CAAAC,EAAAA,IAAC,KAAA,CACAD,eAACE,EAAA,CAAKH,UAAU,YAAYI,GAAG,IAAIH,gBAEnC,CAAA,CACD,EACAC,EAAAA,IAAC,MACAD,SAAAC,EAAAA,IAACC,EAAA,CAAKH,UAAU,YAAYI,GAAG,SAASH,SAAA,QAExC,CAAA,CACD,EACAC,EAAAA,IAAC,MACAD,SAAAC,EAAAA,IAACC,EAAA,CAAKH,UAAU,YAAYI,GAAG,QAAQH,SAAA,cAEvC,CAAA,CACD,EACAC,EAAAA,IAAC,MACAD,SAAAC,EAAAA,IAACC,EAAA,CAAKH,UAAU,YAAYI,GAAG,UAAUH,SAAA,UAEzC,CAAA,CACD,CAAA,EACD,EACD,QACCI,EAAA,EAAO,CAAA,CAAA,CACT,CAAA,CAAA,CACD,CAEF,CAAA"}
@@ -1,6 +1,6 @@
1
- import{r as d,w as He,c as z,O as Ue,L as h,e as se,N as D}from"./chunk-QMGIS6GS-Du-_uMOD.js";import{j as e}from"./jsx-runtime-DKBD_fLS.js";import{c as m}from"./clsx-B-dksMZM.js";import{a as Ve}from"./pe-CdmQkMqU.js";import{c as p,I as y,b as k,e as E}from"./misc-D7yrZhQB.js";import"./_-BEfdnu_S.js";import{L as O}from"./product-KkdaVQou.js";import{u as Ye}from"./revalidation-ws-Do4fE9JQ.js";import{u as ze,d as Be,e as H,h as B,P as L,f as I,g as G,k as Ge,D as Qe,n as Je,S,T as Ke,a as X,b as ee,c as te}from"./tooltip-CUdKgIRf.js";import{P as Me,h as qe,R as Ze,u as Xe,F as et}from"./index-DhyRhm-a.js";import{c as $,b as tt}from"./user-BUyyWGpK.js";import{u as oe}from"./workshop-config-eejws2-k.js";import{u as le}from"./online-D4vODkth.js";import{u as Q}from"./presence-DWQewy5j.js";import{b as nt,s as ie,c as at,d as rt,e as ce,m as x,u as st,f as ot}from"./progress-CdZ-Vcyn.js";import{T as de}from"./index-wYr49Min.js";import"./index-B8smZwSG.js";function lt(t){t.values.forEach(n=>n.stop())}function V(t,n){[...n].reverse().forEach(r=>{const o=t.getVariant(r);o&&ie(t,o),t.variantChildren&&t.variantChildren.forEach(s=>{V(s,n)})})}function it(t,n){if(Array.isArray(n))return V(t,n);if(typeof n=="string")return V(t,[n]);ie(t,n)}function ct(){const t=new Set,n={subscribe(a){return t.add(a),()=>void t.delete(a)},start(a,r){const o=[];return t.forEach(s=>{o.push(nt(s,a,{transitionOverride:r}))}),Promise.all(o)},set(a){return t.forEach(r=>{it(r,a)})},stop(){t.forEach(a=>{lt(a)})},mount(){return()=>{n.stop()}}};return n}function Y(){const t=at(ct);return rt(t.mount,[]),t}function dt(t,n){function a(){return window.matchMedia(t).matches}function r(o){const s=window.matchMedia(t);return s.addEventListener("change",o),()=>{s.removeEventListener("change",o)}}return function(){return d.useSyncExternalStore(r,a,()=>n)}}var F="Dialog",[fe,Kt]=Be(F),[ft,N]=fe(F),ue=t=>{const{__scopeDialog:n,children:a,open:r,defaultOpen:o,onOpenChange:s,modal:f=!0}=t,c=d.useRef(null),u=d.useRef(null),[l,b]=ze({prop:r,defaultProp:o??!1,onChange:s,caller:F});return e.jsx(ft,{scope:n,triggerRef:c,contentRef:u,contentId:H(),titleId:H(),descriptionId:H(),open:l,onOpenChange:b,onOpenToggle:d.useCallback(()=>b(w=>!w),[b]),modal:f,children:a})};ue.displayName=F;var he="DialogTrigger",pe=d.forwardRef((t,n)=>{const{__scopeDialog:a,...r}=t,o=N(he,a),s=B(n,o.triggerRef);return e.jsx(L.button,{type:"button","aria-haspopup":"dialog","aria-expanded":o.open,"aria-controls":o.contentId,"data-state":M(o.open),...r,ref:s,onClick:I(t.onClick,o.onOpenToggle)})});pe.displayName=he;var J="DialogPortal",[ut,me]=fe(J,{forceMount:void 0}),xe=t=>{const{__scopeDialog:n,forceMount:a,children:r,container:o}=t,s=N(J,n);return e.jsx(ut,{scope:n,forceMount:a,children:d.Children.map(r,f=>e.jsx(G,{present:a||s.open,children:e.jsx(Me,{asChild:!0,container:o,children:f})}))})};xe.displayName=J;var T="DialogOverlay",ge=d.forwardRef((t,n)=>{const a=me(T,t.__scopeDialog),{forceMount:r=a.forceMount,...o}=t,s=N(T,t.__scopeDialog);return s.modal?e.jsx(G,{present:r||s.open,children:e.jsx(pt,{...o,ref:n})}):null});ge.displayName=T;var ht=Ge("DialogOverlay.RemoveScroll"),pt=d.forwardRef((t,n)=>{const{__scopeDialog:a,...r}=t,o=N(T,a);return e.jsx(Ze,{as:ht,allowPinchZoom:!0,shards:[o.contentRef],children:e.jsx(L.div,{"data-state":M(o.open),...r,ref:n,style:{pointerEvents:"auto",...r.style}})})}),P="DialogContent",be=d.forwardRef((t,n)=>{const a=me(P,t.__scopeDialog),{forceMount:r=a.forceMount,...o}=t,s=N(P,t.__scopeDialog);return e.jsx(G,{present:r||s.open,children:s.modal?e.jsx(mt,{...o,ref:n}):e.jsx(xt,{...o,ref:n})})});be.displayName=P;var mt=d.forwardRef((t,n)=>{const a=N(P,t.__scopeDialog),r=d.useRef(null),o=B(n,a.contentRef,r);return d.useEffect(()=>{const s=r.current;if(s)return qe(s)},[]),e.jsx(je,{...t,ref:o,trapFocus:a.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:I(t.onCloseAutoFocus,s=>{s.preventDefault(),a.triggerRef.current?.focus()}),onPointerDownOutside:I(t.onPointerDownOutside,s=>{const f=s.detail.originalEvent,c=f.button===0&&f.ctrlKey===!0;(f.button===2||c)&&s.preventDefault()}),onFocusOutside:I(t.onFocusOutside,s=>s.preventDefault())})}),xt=d.forwardRef((t,n)=>{const a=N(P,t.__scopeDialog),r=d.useRef(!1),o=d.useRef(!1);return e.jsx(je,{...t,ref:n,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:s=>{t.onCloseAutoFocus?.(s),s.defaultPrevented||(r.current||a.triggerRef.current?.focus(),s.preventDefault()),r.current=!1,o.current=!1},onInteractOutside:s=>{t.onInteractOutside?.(s),s.defaultPrevented||(r.current=!0,s.detail.originalEvent.type==="pointerdown"&&(o.current=!0));const f=s.target;a.triggerRef.current?.contains(f)&&s.preventDefault(),s.detail.originalEvent.type==="focusin"&&o.current&&s.preventDefault()}})}),je=d.forwardRef((t,n)=>{const{__scopeDialog:a,trapFocus:r,onOpenAutoFocus:o,onCloseAutoFocus:s,...f}=t,c=N(P,a),u=d.useRef(null),l=B(n,u);return Xe(),e.jsxs(e.Fragment,{children:[e.jsx(et,{asChild:!0,loop:!0,trapped:r,onMountAutoFocus:o,onUnmountAutoFocus:s,children:e.jsx(Qe,{role:"dialog",id:c.contentId,"aria-describedby":c.descriptionId,"aria-labelledby":c.titleId,"data-state":M(c.open),...f,ref:l,onDismiss:()=>c.onOpenChange(!1)})}),e.jsxs(e.Fragment,{children:[e.jsx(gt,{titleId:c.titleId}),e.jsx(jt,{contentRef:u,descriptionId:c.descriptionId})]})]})}),K="DialogTitle",ve=d.forwardRef((t,n)=>{const{__scopeDialog:a,...r}=t,o=N(K,a);return e.jsx(L.h2,{id:o.titleId,...r,ref:n})});ve.displayName=K;var we="DialogDescription",ye=d.forwardRef((t,n)=>{const{__scopeDialog:a,...r}=t,o=N(we,a);return e.jsx(L.p,{id:o.descriptionId,...r,ref:n})});ye.displayName=we;var Ne="DialogClose",Ce=d.forwardRef((t,n)=>{const{__scopeDialog:a,...r}=t,o=N(Ne,a);return e.jsx(L.button,{type:"button",...r,ref:n,onClick:I(t.onClick,()=>o.onOpenChange(!1))})});Ce.displayName=Ne;function M(t){return t?"open":"closed"}var De="DialogTitleWarning",[Mt,Ee]=Je(De,{contentName:P,titleName:K,docsSlug:"dialog"}),gt=({titleId:t})=>{const n=Ee(De),a=`\`${n.contentName}\` requires a \`${n.titleName}\` for the component to be accessible for screen reader users.
1
+ import{r as d,w as He,c as z,O as Ue,L as h,e as se,N as D}from"./chunk-QMGIS6GS-X4HtlbLW.js";import{j as e}from"./jsx-runtime-DsURZTcu.js";import{c as m}from"./clsx-B-dksMZM.js";import{a as Ve}from"./pe-Cte41gbF.js";import{c as p,I as y,b as k,e as E}from"./misc-C_Wy6Ozi.js";import"./_-BlUNM4zq.js";import{L as O}from"./product-CYLzCZoj.js";import{u as Ye}from"./revalidation-ws-kMaOT4Vi.js";import{u as ze,d as Be,e as H,h as B,P as L,f as I,g as G,k as Ge,D as Qe,n as Je,S,T as Ke,a as X,b as ee,c as te}from"./tooltip-JOPrmP6Z.js";import{P as Me,h as qe,R as Ze,u as Xe,F as et}from"./index-BrSaFy9r.js";import{c as $,b as tt}from"./user-CW_hpuGs.js";import{u as oe}from"./workshop-config-gL_m3l7d.js";import{u as le}from"./online-TZVMTbWw.js";import{u as Q}from"./presence-BgXbhCXw.js";import{b as nt,s as ie,c as at,d as rt,e as ce,m as x,u as st,f as ot}from"./progress-BV2BTh46.js";import{T as de}from"./index-CICRWfwA.js";import"./index-CGfgwl2o.js";function lt(t){t.values.forEach(n=>n.stop())}function V(t,n){[...n].reverse().forEach(r=>{const o=t.getVariant(r);o&&ie(t,o),t.variantChildren&&t.variantChildren.forEach(s=>{V(s,n)})})}function it(t,n){if(Array.isArray(n))return V(t,n);if(typeof n=="string")return V(t,[n]);ie(t,n)}function ct(){const t=new Set,n={subscribe(a){return t.add(a),()=>void t.delete(a)},start(a,r){const o=[];return t.forEach(s=>{o.push(nt(s,a,{transitionOverride:r}))}),Promise.all(o)},set(a){return t.forEach(r=>{it(r,a)})},stop(){t.forEach(a=>{lt(a)})},mount(){return()=>{n.stop()}}};return n}function Y(){const t=at(ct);return rt(t.mount,[]),t}function dt(t,n){function a(){return window.matchMedia(t).matches}function r(o){const s=window.matchMedia(t);return s.addEventListener("change",o),()=>{s.removeEventListener("change",o)}}return function(){return d.useSyncExternalStore(r,a,()=>n)}}var F="Dialog",[fe,Kt]=Be(F),[ft,N]=fe(F),ue=t=>{const{__scopeDialog:n,children:a,open:r,defaultOpen:o,onOpenChange:s,modal:f=!0}=t,c=d.useRef(null),u=d.useRef(null),[l,b]=ze({prop:r,defaultProp:o??!1,onChange:s,caller:F});return e.jsx(ft,{scope:n,triggerRef:c,contentRef:u,contentId:H(),titleId:H(),descriptionId:H(),open:l,onOpenChange:b,onOpenToggle:d.useCallback(()=>b(w=>!w),[b]),modal:f,children:a})};ue.displayName=F;var he="DialogTrigger",pe=d.forwardRef((t,n)=>{const{__scopeDialog:a,...r}=t,o=N(he,a),s=B(n,o.triggerRef);return e.jsx(L.button,{type:"button","aria-haspopup":"dialog","aria-expanded":o.open,"aria-controls":o.contentId,"data-state":M(o.open),...r,ref:s,onClick:I(t.onClick,o.onOpenToggle)})});pe.displayName=he;var J="DialogPortal",[ut,me]=fe(J,{forceMount:void 0}),xe=t=>{const{__scopeDialog:n,forceMount:a,children:r,container:o}=t,s=N(J,n);return e.jsx(ut,{scope:n,forceMount:a,children:d.Children.map(r,f=>e.jsx(G,{present:a||s.open,children:e.jsx(Me,{asChild:!0,container:o,children:f})}))})};xe.displayName=J;var T="DialogOverlay",ge=d.forwardRef((t,n)=>{const a=me(T,t.__scopeDialog),{forceMount:r=a.forceMount,...o}=t,s=N(T,t.__scopeDialog);return s.modal?e.jsx(G,{present:r||s.open,children:e.jsx(pt,{...o,ref:n})}):null});ge.displayName=T;var ht=Ge("DialogOverlay.RemoveScroll"),pt=d.forwardRef((t,n)=>{const{__scopeDialog:a,...r}=t,o=N(T,a);return e.jsx(Ze,{as:ht,allowPinchZoom:!0,shards:[o.contentRef],children:e.jsx(L.div,{"data-state":M(o.open),...r,ref:n,style:{pointerEvents:"auto",...r.style}})})}),P="DialogContent",be=d.forwardRef((t,n)=>{const a=me(P,t.__scopeDialog),{forceMount:r=a.forceMount,...o}=t,s=N(P,t.__scopeDialog);return e.jsx(G,{present:r||s.open,children:s.modal?e.jsx(mt,{...o,ref:n}):e.jsx(xt,{...o,ref:n})})});be.displayName=P;var mt=d.forwardRef((t,n)=>{const a=N(P,t.__scopeDialog),r=d.useRef(null),o=B(n,a.contentRef,r);return d.useEffect(()=>{const s=r.current;if(s)return qe(s)},[]),e.jsx(je,{...t,ref:o,trapFocus:a.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:I(t.onCloseAutoFocus,s=>{s.preventDefault(),a.triggerRef.current?.focus()}),onPointerDownOutside:I(t.onPointerDownOutside,s=>{const f=s.detail.originalEvent,c=f.button===0&&f.ctrlKey===!0;(f.button===2||c)&&s.preventDefault()}),onFocusOutside:I(t.onFocusOutside,s=>s.preventDefault())})}),xt=d.forwardRef((t,n)=>{const a=N(P,t.__scopeDialog),r=d.useRef(!1),o=d.useRef(!1);return e.jsx(je,{...t,ref:n,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:s=>{t.onCloseAutoFocus?.(s),s.defaultPrevented||(r.current||a.triggerRef.current?.focus(),s.preventDefault()),r.current=!1,o.current=!1},onInteractOutside:s=>{t.onInteractOutside?.(s),s.defaultPrevented||(r.current=!0,s.detail.originalEvent.type==="pointerdown"&&(o.current=!0));const f=s.target;a.triggerRef.current?.contains(f)&&s.preventDefault(),s.detail.originalEvent.type==="focusin"&&o.current&&s.preventDefault()}})}),je=d.forwardRef((t,n)=>{const{__scopeDialog:a,trapFocus:r,onOpenAutoFocus:o,onCloseAutoFocus:s,...f}=t,c=N(P,a),u=d.useRef(null),l=B(n,u);return Xe(),e.jsxs(e.Fragment,{children:[e.jsx(et,{asChild:!0,loop:!0,trapped:r,onMountAutoFocus:o,onUnmountAutoFocus:s,children:e.jsx(Qe,{role:"dialog",id:c.contentId,"aria-describedby":c.descriptionId,"aria-labelledby":c.titleId,"data-state":M(c.open),...f,ref:l,onDismiss:()=>c.onOpenChange(!1)})}),e.jsxs(e.Fragment,{children:[e.jsx(gt,{titleId:c.titleId}),e.jsx(jt,{contentRef:u,descriptionId:c.descriptionId})]})]})}),K="DialogTitle",ve=d.forwardRef((t,n)=>{const{__scopeDialog:a,...r}=t,o=N(K,a);return e.jsx(L.h2,{id:o.titleId,...r,ref:n})});ve.displayName=K;var we="DialogDescription",ye=d.forwardRef((t,n)=>{const{__scopeDialog:a,...r}=t,o=N(we,a);return e.jsx(L.p,{id:o.descriptionId,...r,ref:n})});ye.displayName=we;var Ne="DialogClose",Ce=d.forwardRef((t,n)=>{const{__scopeDialog:a,...r}=t,o=N(Ne,a);return e.jsx(L.button,{type:"button",...r,ref:n,onClick:I(t.onClick,()=>o.onOpenChange(!1))})});Ce.displayName=Ne;function M(t){return t?"open":"closed"}var De="DialogTitleWarning",[Mt,Ee]=Je(De,{contentName:P,titleName:K,docsSlug:"dialog"}),gt=({titleId:t})=>{const n=Ee(De),a=`\`${n.contentName}\` requires a \`${n.titleName}\` for the component to be accessible for screen reader users.
2
2
 
3
3
  If you want to hide the \`${n.titleName}\`, you can wrap it with our VisuallyHidden component.
4
4
 
5
5
  For more information, see https://radix-ui.com/primitives/docs/components/${n.docsSlug}`;return d.useEffect(()=>{t&&(document.getElementById(t)||console.error(a))},[a,t]),null},bt="DialogDescriptionWarning",jt=({contentRef:t,descriptionId:n})=>{const r=`Warning: Missing \`Description\` or \`aria-describedby={undefined}\` for {${Ee(bt).contentName}}.`;return d.useEffect(()=>{const o=t.current?.getAttribute("aria-describedby");n&&o&&(document.getElementById(n)||console.warn(r))},[r,t,n]),null},vt=ue,wt=pe,yt=xe,ke=ge,Pe=be,Nt=ve,_e=ye,Ct=Ce;const Dt=vt,Et=wt,kt=yt;function Se({className:t,ref:n,...a}){return e.jsx(ke,{ref:n,className:p("fixed inset-0 z-50 bg-background/80 backdrop-blur-sm data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",t),...a})}Se.displayName=ke.displayName;function Re({className:t,children:n,ref:a,...r}){return e.jsxs(kt,{children:[e.jsx(Se,{}),e.jsxs(Pe,{ref:a,className:p("fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 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-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg md:w-full",t),...r,children:[n,e.jsxs(Ct,{className:"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity data-[state=open]:bg-accent data-[state=open]:text-muted-foreground hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none",children:[e.jsx(y,{name:"Close"}),e.jsx("span",{className:"sr-only",children:"Close"})]})]})]})}Re.displayName=Pe.displayName;function Ie({className:t,...n}){return e.jsx("div",{className:p("flex flex-col space-y-1.5 text-center sm:text-left",t),...n})}Ie.displayName="DialogHeader";Nt.displayName;function Le({className:t,ref:n,...a}){return e.jsx(_e,{ref:n,className:p("text-sm text-muted-foreground",t),...a})}Le.displayName=_e.displayName;const ne=["opacity-70","opacity-80","opacity-90","opacity-100"],ae=["shadow-[0_0_2px_0_rgba(0,0,0,0.3)]","shadow-[0_0_4px_0_rgba(0,0,0,0.3)]","shadow-[0_0_7px_0_rgba(0,0,0,0.3)]","shadow-[0_0_10px_0_rgba(0,0,0,0.3)]"];function re(t){const n=Math.round(t*ne.length-1),a=Math.round(t*ae.length-1);return p("shadow-purple-700 hover:opacity-100 focus:opacity-100 dark:shadow-purple-200",ne[n]??"opacity-60",ae[a]??"shadow-none",t===1?"animate-pulse hover:animate-none focus:animate-none":null)}function Ae({isMenuOpened:t}){const n=$(),{users:a}=Q(),{product:{displayNameShort:r}}=oe(),o=t?17:0,s=a.length-o,f=s>(t?1:0);if(!a.length)return null;const c=t&&a.length===1?e.jsx(h,{target:"_blank",rel:"noopener noreferrer",to:"https://www.youtube.com/watch?v=w6Q3mHyzn78",children:e.jsx("img",{alt:"Tiffany Tunes",className:p("h-8 w-8 rounded-full border object-cover",re(1)),src:"/img/tiffany.png"})}):null,u=`${s}${t?" more ":" "}${r} Dev${s===1?"":"s"} working now`;return e.jsx("div",{className:"flex flex-wrap items-center gap-2",children:e.jsxs(Ke,{children:[(f?a.slice(0,o):a).map(({user:l,score:b})=>{const w=re(b),g=Pt(l.location),i=l.imageUrlSmall||l.avatarUrl,j=l.hasAccess,_=l.location?.origin?.includes("localhost");let C;return j?C=_?"working":"referencing":C=_?"previewing":"reviewing",e.jsxs(X,{children:[e.jsx(ee,{asChild:!0,children:i?e.jsx("img",{tabIndex:0,alt:l.name||r,className:p("h-8 w-8 rounded-full border object-cover",w),src:i}):e.jsx("div",{tabIndex:0,"aria-label":l.name||`${r} Dev`,className:p("flex h-8 w-8 items-center justify-center rounded-full border",w),children:e.jsx(y,{name:"User"})})}),e.jsx(te,{children:e.jsxs("span",{className:"flex flex-col items-center justify-center gap-1",children:[e.jsxs("span",{children:[l.name||`${r} Dev`," ",g?` is ${C} ${b===1&&n?.id!==l.id?"with you":""} on`:null]}),g?.line1?e.jsx("span",{children:g.line1}):null,g?.line2?e.jsx("span",{children:g.line2}):null]})})]},l.id)}),c,f?e.jsxs(X,{children:[e.jsx(ee,{asChild:!0,children:e.jsx("div",{tabIndex:0,"aria-label":u,className:p("flex items-center justify-center rounded-full border bg-accent text-xs text-accent-foreground",t?"h-8 w-8":"h-6 w-6"),children:e.jsx("span",{className:p("pointer-events-none overflow-hidden text-ellipsis whitespace-nowrap text-center",t?"w-8":"w-6"),children:t?`+${s}`:s})})}),e.jsx(te,{children:u})]}):null]})})}const Te=dt("(min-width: 640px)",!0),qt=He(function(){const n=z(),a=$(),r=Te(),o=Ve(),[s,f]=d.useState(n.isMenuOpened);Ye({watchPaths:["./exercises/README.mdx"]});function c(u){f(u),document.cookie=`es_menu_open=${u.toString()}; path=/; SameSite=Lax;`}return e.jsxs("div",{className:"flex flex-col",children:[a?null:e.jsx(_t,{}),o&&r?null:e.jsx(St,{isMenuOpened:s,onMenuOpenChange:c}),e.jsxs("div",{className:p("flex flex-grow flex-col sm:flex-row",{"h-[calc(100vh-128px-env(safe-area-inset-top)-env(safe-area-inset-bottom))] sm:h-[calc(100vh-64px-env(safe-area-inset-top)-env(safe-area-inset-bottom))]":!a,"h-[calc(100vh-64px-env(safe-area-inset-top)-env(safe-area-inset-bottom))] sm:h-[calc(100vh-env(safe-area-inset-top)-env(safe-area-inset-bottom))]":a,"h-[unset]":!r&&s}),children:[r?e.jsx(Rt,{isMenuOpened:s,onMenuOpenChange:c}):null,e.jsx("div",{className:p("h-full w-full max-w-full sm:max-w-[calc(100%-56px)]",s?"hidden md:block":""),children:e.jsx(Ue,{})})]})]})});function Pt(t){if(!t)return null;const{exercise:n}=t,a=[n?[n.exerciseNumber,n.stepNumber].filter(Boolean).map(r=>r.toString().padStart(2,"0")).join("/"):null,n?.type].filter(Boolean).join(" - ");return{line1:t.workshopTitle,line2:a}}function _t(){const t=Te(),{product:{host:n,displayName:a}}=oe(),r=tt(),o=e.jsx("div",{children:ENV.EPICSHOP_DEPLOYED?e.jsxs("div",{children:["This is the deployed version. ",e.jsxs(e.Fragment,{children:[e.jsx(h,{className:"underline",target:"_blank",rel:"noopener noreferrer",to:ENV.EPICSHOP_GITHUB_REPO,children:"Run locally"})," for full experience."]})," "]}):r?e.jsxs("div",{children:[e.jsx(h,{to:"/login",className:"underline",children:"Login"})," ","or"," ",e.jsx("a",{href:`https://${n}/login`,className:"underline",children:"join for free"})," ","for the full experience."]}):null});return e.jsx("div",{className:"z-10 flex h-16 items-center justify-between border-b bg-gradient-to-tr from-blue-500 to-indigo-500 pl-4 text-white",children:t?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"hidden flex-1 flex-wrap items-center gap-4 sm:flex",children:[e.jsx(O,{size:"lg",style:"monochrome"}),e.jsxs("div",{className:"flex flex-1 flex-wrap items-center",children:[e.jsxs("p",{className:"mr-2",children:["Welcome to the"," ",e.jsx(h,{to:`https://${n}`,className:"underline",target:"_blank",children:a})," ","Workshop app!"]}),o]})]}),r?null:e.jsxs("div",{className:"hidden h-full flex-col items-center sm:flex md:flex-row",children:[e.jsxs(h,{to:`https://${n}`,target:"_blank",className:"flex h-full items-center justify-center space-x-1.5 px-5 text-sm font-semibold",children:[e.jsxs("span",{className:"drop-shadow-sm",children:["Join ",a]}),e.jsx("span",{children:"↗︎"})]}),e.jsxs(h,{to:ENV.EPICSHOP_DEPLOYED?`https://${n}/login`:"/login",className:"flex h-full items-center justify-center space-x-1.5 bg-white/20 px-5 text-sm font-semibold shadow-md transition hover:bg-white/30",children:[e.jsx(y,{name:"User",size:"lg"}),e.jsx("span",{className:"drop-shadow-sm",children:"Login"})]})]})]}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"flex flex-1 flex-wrap items-center gap-4 sm:hidden",children:[e.jsx("a",{href:`https://${n}`,children:e.jsx(O,{size:"lg",style:"monochrome"})}),e.jsxs(Dt,{children:[e.jsx(Et,{children:e.jsx(y,{name:"Question",size:"lg",className:"animate-pulse"})}),e.jsxs(Re,{children:[e.jsxs(Ie,{children:[e.jsx(O,{size:"lg",style:"monochrome"}),e.jsx("span",{className:"text-lg font-semibold",children:a})]}),e.jsxs(Le,{children:["Welcome to the"," ",e.jsx(h,{to:`https://${n}`,className:"underline",children:a})," ","Workshop app!"]}),o]})]})]}),r?null:e.jsxs("div",{className:"flex h-full items-center",children:[e.jsxs(h,{to:`https://${n}`,target:"_blank",className:"flex h-full items-center justify-center space-x-1.5 px-5 text-sm font-semibold",children:[e.jsx("span",{className:"drop-shadow-sm",children:"Join"}),e.jsx("span",{children:"↗︎"})]}),e.jsxs(h,{to:ENV.EPICSHOP_DEPLOYED?`https://${n}/login`:"/login",className:"flex h-full items-center justify-center space-x-1.5 bg-white/20 px-5 text-sm font-semibold shadow-md transition hover:bg-white/30",children:[e.jsx(y,{name:"User",size:"lg"}),e.jsx("span",{className:"drop-shadow-sm",children:"Login"})]})]})]})})}const $e={hidden:{opacity:0,x:-20},visible:{opacity:1,x:0}};function Fe({exerciseNumber:t,children:n}){const a=st(t);return e.jsx(x.li,{variants:$e,className:p("py-[6px] first:pt-3 last:pb-3",a?`${a} before:border-t`:null),children:e.jsx("span",{className:"inline-block pl-2",children:n})})}function R({children:t,...n}){const a=ot(n);return e.jsx(x.li,{variants:$e,className:p("py-[6px] first:pt-3 last:pb-3",a?`${a} before:border-t`:null),children:e.jsx("span",{className:"inline-block pl-2",children:t})})}function St({isMenuOpened:t,onMenuOpenChange:n}){const a=z(),r=$(),o=ce(),s=se(),f=le(),{users:c}=Q(),u={visible:{opacity:1,transition:{duration:.05,when:"beforeChildren",staggerChildren:.03}},hidden:{opacity:0}};return e.jsx("nav",{className:"flex w-full border-b sm:hidden",children:e.jsx("div",{className:"w-full",children:e.jsxs("div",{className:p("flex items-center",{"flex-col":t,"h-14":!t}),children:[e.jsx(We,{title:a.workshopTitle,isMenuOpened:t,setMenuOpened:n}),t&&e.jsxs(x.div,{className:"flex w-full flex-grow flex-col justify-between overflow-x-auto p-6 scrollbar-thin scrollbar-thumb-scrollbar",initial:{opacity:0},animate:{opacity:1},children:[e.jsxs(x.ul,{variants:u,initial:"hidden",animate:"visible",className:"flex flex-col",children:[e.jsx("span",{children:e.jsx(D,{prefetch:"intent",to:"/",className:({isActive:l})=>m("relative whitespace-nowrap px-2 py-0.5 pr-3 text-2xl font-bold outline-none hover:underline focus:underline",'after:absolute after:-bottom-2.5 after:-right-2.5 after:h-5 after:w-5 after:rotate-45 after:scale-75 after:bg-background after:content-[""] hover:underline focus:underline',{"bg-foreground text-background":l}),children:"Home"})}),a.exercises.map(({exerciseNumber:l,title:b,steps:w})=>{const g=Number(s.exerciseNumber)===l,i=!g&&a.playground.exerciseNumber===l;return e.jsxs(Fe,{exerciseNumber:l,children:[e.jsxs("span",{className:"flex items-center gap-1 text-2xl font-bold",children:[e.jsx(h,{prefetch:"intent",to:k(l),className:m("relative whitespace-nowrap px-2 py-0.5 pr-3 outline-none hover:underline focus:underline",'after:absolute after:-bottom-2.5 after:-right-2.5 after:h-5 after:w-5 after:rotate-45 after:scale-75 after:bg-background after:content-[""] hover:underline focus:underline',{"bg-foreground text-background":g}),children:b}),i?e.jsx(h,{to:E(a.playground.exerciseNumber,a.playground.stepNumber,a.playground.type),prefetch:"intent",children:"🛝"}):null]}),g?e.jsxs(x.ul,{variants:u,initial:"hidden",animate:"visible",className:"ml-4 mt-2 flex flex-col",children:[e.jsx(R,{type:"instructions",exerciseNumber:l,children:e.jsx(h,{to:k(l),prefetch:"intent",className:m('relative whitespace-nowrap px-2 py-0.5 pr-3 text-xl font-medium outline-none after:absolute after:-bottom-2.5 after:-right-2.5 after:h-5 after:w-5 after:rotate-45 after:scale-75 after:bg-background after:content-[""] hover:underline focus:underline',{"bg-foreground text-background":!s.stepNumber}),children:"Intro"})},l),w.filter(Boolean).map(({stepNumber:j,title:_,problem:C,solution:A})=>e.jsx(R,{type:"step",stepNumber:j,exerciseNumber:l,children:e.jsxs("div",{className:"flex flex-col gap-0.5",children:[e.jsxs(h,{to:E(l,j),prefetch:"intent",className:"font-semibold leading-tight",children:[j.toString().padStart(2,"0"),"."," ",_]}),e.jsxs("div",{className:"ml-3 mt-0.5 flex gap-1",children:[C&&e.jsxs(D,{to:E(l,j,"problem"),prefetch:"intent",className:({isActive:v})=>m("relative whitespace-nowrap px-2 py-0.5 pr-3 outline-none hover:underline focus:underline",'after:absolute after:-bottom-2.5 after:-right-2.5 after:h-5 after:w-5 after:rotate-45 after:scale-75 after:bg-background after:content-[""] hover:underline focus:underline',{"bg-foreground text-background":v}),children:["Problem",C.name===a.playground.appName?" 🛝":""]}),A&&e.jsxs(D,{to:E(l,j,"solution"),prefetch:"intent",className:({isActive:v})=>m("relative whitespace-nowrap px-2 py-0.5 pr-3 outline-none hover:underline focus:underline",'after:absolute after:-bottom-2.5 after:-right-2.5 after:h-5 after:w-5 after:rotate-45 after:scale-75 after:bg-background after:content-[""] hover:underline focus:underline',{"bg-foreground text-background":v}),children:["Solution",A.name===a.playground.appName?" 🛝":""]})]})]})},j)),e.jsx(R,{type:"finished",exerciseNumber:l,children:e.jsx(D,{to:k(l,"finished"),prefetch:"intent",className:({isActive:j})=>m('relative whitespace-nowrap px-2 py-0.5 pr-3 text-base font-medium outline-none after:absolute after:-bottom-2.5 after:-right-2.5 after:h-5 after:w-5 after:rotate-45 after:scale-75 after:bg-background after:content-[""] hover:underline focus:underline',{"bg-foreground text-background":j}),children:"📝 Elaboration"})})]}):null]},l)})]}),e.jsx("div",{className:"mt-6",children:e.jsx(D,{to:"/finished",className:({isActive:l})=>m("relative whitespace-nowrap text-lg font-bold outline-none hover:underline focus:underline",{'bg-black text-white after:absolute after:-bottom-2.5 after:-right-2.5 after:h-5 after:w-5 after:rotate-45 after:scale-75 after:bg-background after:content-[""]':l}),children:"📝 Workshop Feedback"})})]}),e.jsx("div",{className:"flex-grow"}),f?null:e.jsx(S,{content:t?null:"You are offline",children:e.jsx("div",{className:p("flex h-14 animate-pulse items-center justify-start p-4",t?"w-full border-t":"border-l"),children:e.jsx(y,{name:"WifiNoConnection",className:"text-foreground-destructive",children:t?"You are offline":null})})}),e.jsx("div",{className:p("flex items-center justify-start p-4",t&&c.length>4?"min-h-14":"h-14",t?"w-full border-t":"border-l"),children:e.jsx(Ae,{isMenuOpened:t})}),ENV.EPICSHOP_DEPLOYED?null:r?e.jsx(S,{content:t?null:"Your account",children:e.jsxs(h,{className:p("flex h-14 flex-shrink-0 items-center justify-start space-x-3 px-4 py-4 text-center no-underline hover:underline",{"border-l":!t,"w-full border-t":t}),to:"/account",children:[r.imageUrlSmall?e.jsx("img",{alt:r.name??r.email,src:r.imageUrlSmall,className:"h-full rounded-full"}):e.jsx(y,{name:"User",className:"flex-shrink-0",size:"lg"}),t?e.jsx(x.div,{className:"flex items-center whitespace-nowrap",initial:{opacity:0},animate:{opacity:1},children:"Your Account"}):e.jsx("span",{className:"sr-only",children:"Your account"})]})}):null,ENV.EPICSHOP_DEPLOYED?null:r&&o?e.jsx(S,{content:t?null:"Continue to next lesson",children:e.jsxs(h,{to:o,prefetch:"intent",className:m("flex h-14 w-full items-center space-x-3 border-l px-4 py-4 pl-[18px] no-underline hover:underline"),state:{from:"continue next lesson button"},children:[e.jsx(y,{name:"FastForward",className:"flex-shrink-0",size:"md"}),t?e.jsx(x.div,{className:"flex items-center whitespace-nowrap",initial:{opacity:0},animate:{opacity:1},children:"Continue to next lesson"}):e.jsx("span",{className:"sr-only",children:"Continue to next lesson"})]})}):null,e.jsx("div",{className:p("flex h-14 w-14 items-center justify-center self-start p-4 sm:mb-4 sm:w-full",{"w-full border-t":t,"border-l":!t}),children:e.jsx(de,{})})]})})})}const U=400;function Rt({isMenuOpened:t,onMenuOpenChange:n}){const a=z(),r=$(),o=ce(),s=se(),f=le(),{users:c}=Q(),u=a.exercises.find(i=>i.exerciseNumber===Number(s.exerciseNumber)),l=s.type==="solution"?u?.solutions.find(i=>i.stepNumber===Number(s.stepNumber)):s.type==="problem"?u?.problems.find(i=>i.stepNumber===Number(s.stepNumber)):null,b=Y(),w={close:{width:56},open:{width:U}},g={visible:{opacity:1,transition:{duration:.05,when:"beforeChildren",staggerChildren:.03}},hidden:{opacity:0}};return e.jsx("nav",{className:"hidden border-r sm:flex",children:e.jsx(x.div,{initial:t?"open":"close",variants:w,animate:b,children:e.jsxs("div",{className:"flex h-full flex-col items-center justify-between",children:[e.jsx(We,{title:a.workshopTitle,menuControls:b,isMenuOpened:t,setMenuOpened:n}),t&&e.jsxs(x.div,{style:{width:U},className:"flex flex-grow flex-col justify-between overflow-y-auto p-6 scrollbar-thin scrollbar-thumb-scrollbar",initial:{opacity:0},animate:{opacity:1},children:[e.jsxs(x.ul,{variants:g,initial:"hidden",animate:"visible",className:"flex flex-col",children:[e.jsx("span",{children:e.jsx(D,{prefetch:"intent",to:"/",className:({isActive:i})=>m("relative whitespace-nowrap px-2 py-0.5 pr-3 text-2xl font-bold outline-none hover:underline focus:underline",'after:absolute after:-bottom-2.5 after:-right-2.5 after:h-5 after:w-5 after:rotate-45 after:scale-75 after:bg-background after:content-[""] hover:underline focus:underline',{"bg-foreground text-background":i}),children:"Home"})}),a.exercises.map(({exerciseNumber:i,title:j,steps:_})=>{const C=Number(s.exerciseNumber)===i,A=!C&&a.playground.exerciseNumber===i;return e.jsxs(Fe,{exerciseNumber:i,children:[e.jsxs("span",{className:"flex items-center gap-1 text-2xl font-bold",children:[e.jsx(h,{prefetch:"intent",to:k(i),className:m("relative whitespace-nowrap px-2 py-0.5 pr-3 outline-none hover:underline focus:underline",'after:absolute after:-bottom-2.5 after:-right-2.5 after:h-5 after:w-5 after:rotate-45 after:scale-75 after:bg-background after:content-[""] hover:underline focus:underline',{"bg-foreground text-background":C}),children:j}),A?e.jsx(h,{to:E(a.playground.exerciseNumber,a.playground.stepNumber,a.playground.type),prefetch:"intent",children:"🛝"}):null]}),C?e.jsxs(x.ul,{variants:g,initial:"hidden",animate:"visible",className:"ml-4 mt-2 flex flex-col",children:[e.jsx(R,{type:"instructions",exerciseNumber:i,children:e.jsx(h,{to:k(i),prefetch:"intent",className:m('relative whitespace-nowrap px-2 py-0.5 pr-3 text-xl font-medium outline-none after:absolute after:-bottom-2.5 after:-right-2.5 after:h-5 after:w-5 after:rotate-45 after:scale-75 after:bg-background after:content-[""] hover:underline focus:underline',{"bg-foreground text-background":!s.stepNumber}),children:"Intro"})},i),_.filter(Boolean).map(({stepNumber:v,title:Oe,problem:q,solution:Z})=>e.jsx(R,{type:"step",stepNumber:v,exerciseNumber:i,children:e.jsxs("div",{className:"flex flex-col gap-0.5",children:[e.jsxs(h,{to:E(i,v),prefetch:"intent",className:"font-semibold leading-tight",children:[v.toString().padStart(2,"0"),"."," ",Oe]}),e.jsxs("div",{className:"ml-3 mt-0.5 flex gap-1",children:[q&&e.jsxs(D,{to:E(i,v,"problem"),prefetch:"intent",className:({isActive:W})=>m("relative whitespace-nowrap px-2 py-0.5 pr-3 outline-none hover:underline focus:underline",'after:absolute after:-bottom-2.5 after:-right-2.5 after:h-5 after:w-5 after:rotate-45 after:scale-75 after:bg-background after:content-[""] hover:underline focus:underline',{"bg-foreground text-background":W}),children:["Problem",q.name===a.playground.appName?" 🛝":""]}),Z&&e.jsxs(D,{to:E(i,v,"solution"),prefetch:"intent",className:({isActive:W})=>m("relative whitespace-nowrap px-2 py-0.5 pr-3 outline-none hover:underline focus:underline",'after:absolute after:-bottom-2.5 after:-right-2.5 after:h-5 after:w-5 after:rotate-45 after:scale-75 after:bg-background after:content-[""] hover:underline focus:underline',{"bg-foreground text-background":W}),children:["Solution",Z.name===a.playground.appName?" 🛝":""]})]})]})},v)),e.jsx(R,{type:"finished",exerciseNumber:i,children:e.jsx(D,{to:k(i,"finished"),prefetch:"intent",className:({isActive:v})=>m('relative whitespace-nowrap px-2 py-0.5 pr-3 text-base font-medium outline-none after:absolute after:-bottom-2.5 after:-right-2.5 after:h-5 after:w-5 after:rotate-45 after:scale-75 after:bg-background after:content-[""] hover:underline focus:underline',{"bg-foreground text-background":v}),children:"📝 Elaboration"})})]}):null]},i)})]}),e.jsx("div",{className:"mt-6",children:e.jsx(D,{to:"/finished",className:({isActive:i})=>m("relative whitespace-nowrap text-lg font-bold outline-none hover:underline focus:underline",{'bg-black text-white after:absolute after:-bottom-2.5 after:-right-2.5 after:h-5 after:w-5 after:rotate-45 after:scale-75 after:bg-background after:content-[""]':i}),children:"📝 Workshop Feedback"})})]}),!t&&e.jsx("div",{className:"flex flex-grow flex-col justify-center",children:e.jsxs("div",{className:"orientation-sideways w-full font-mono text-sm font-medium uppercase leading-none",children:[u?.title?e.jsx(h,{to:k(Number(s.exerciseNumber)),children:u.title}):null,u?.title&&l?.title?" — ":null,l?.title?e.jsx(h,{to:E(Number(s.exerciseNumber),l.stepNumber),children:l.title}):null]})}),f?null:e.jsx(S,{content:t?null:"You are offline",children:e.jsx("div",{className:p("flex w-full animate-pulse items-center border-t p-4",t?"justify-start":"justify-center"),children:e.jsx(y,{name:"WifiNoConnection",className:"text-foreground-destructive",children:t?e.jsx("span",{className:"whitespace-nowrap",children:"You are offline"}):null})})}),e.jsx("div",{className:p("flex w-full items-center justify-start border-t p-4 transition-[height]",t&&c.length>4?"h-28":"h-14"),style:t?{width:U}:{},children:e.jsx(Ae,{isMenuOpened:t})}),ENV.EPICSHOP_DEPLOYED?null:r?e.jsx(S,{content:t?null:"Your account",children:e.jsxs(h,{className:"flex h-14 w-full flex-shrink-0 items-center justify-start space-x-3 border-t px-4 py-4 text-center no-underline hover:underline",to:"/account",children:[r.imageUrlSmall?e.jsx("img",{alt:r.name??r.email,src:r.imageUrlSmall,className:"h-full rounded-full"}):e.jsx(y,{name:"User",className:"flex-shrink-0",size:"lg"}),t?e.jsx(x.div,{className:"flex items-center whitespace-nowrap",initial:{opacity:0},animate:{opacity:1},children:"Your Account"}):e.jsx("span",{className:"sr-only",children:"Your account"})]})}):null,ENV.EPICSHOP_DEPLOYED?null:r&&o?e.jsx(S,{content:t?null:"Continue to next lesson",children:e.jsxs(h,{to:o,prefetch:"intent",className:m("flex h-14 w-full items-center space-x-3 border-t px-4 py-4 pl-[18px] no-underline hover:underline"),state:{from:"continue next lesson button"},children:[e.jsx(y,{name:"FastForward",className:"flex-shrink-0",size:"md"}),t?e.jsx(x.div,{className:"flex items-center whitespace-nowrap",initial:{opacity:0},animate:{opacity:1},children:"Continue to next lesson"}):e.jsx("span",{className:"sr-only",children:"Continue to next lesson"})]})}):null,e.jsx("div",{className:"mb-4 w-full self-start border-t pl-3 pt-[15px]",children:e.jsx(de,{})})]})})})}function We({title:t,isMenuOpened:n,setMenuOpened:a,menuControls:r}){const o=d.useRef(n),s=d.useRef(null),f={open:{d:"M3.06061 2.99999L21.0606 21"},closed:{d:"M0 9.5L24 9.5"}},c={open:{d:"M3.00006 21.0607L21 3.06064"},moving:{d:"M0 14.5L24 14.5"},closed:{d:"M0 14.5L15 14.5"}},u=Y(),l=Y();async function b(){r?.start(n?"close":"open"),a(!n),n?(u.start(f.closed),await l.start(c.moving),l.start(c.closed)):(await l.start(c.moving),u.start(f.open),l.start(c.open))}return d.useEffect(()=>{if(!n)return;function w(g){g.key==="Escape"&&s.current?.click()}return document.addEventListener("keyup",w),()=>document.removeEventListener("keyup",w)},[n]),e.jsxs("div",{className:p("relative inline-flex h-14 flex-shrink-0 items-center justify-between overflow-hidden border-r sm:w-full sm:border-b sm:border-r-0",{"w-full":n}),children:[e.jsx("button",{ref:s,className:"flex h-14 w-14 items-center justify-center","aria-label":"Open Navigation menu",onClick:b,children:e.jsxs("svg",{width:"24",height:"24",viewBox:"0 0 24 24",children:[e.jsx(x.path,{...f[o.current?"open":"closed"],animate:u,transition:{duration:.2},stroke:"currentColor",strokeWidth:1.5}),e.jsx(x.path,{...c[o.current?"open":"closed"],animate:l,transition:{duration:.2},stroke:"currentColor",strokeWidth:1.5})]})}),n&&e.jsx(x.p,{transition:{delay:.2},initial:{opacity:0,y:5},animate:{opacity:1,y:0},className:"absolute right-5 whitespace-nowrap font-mono text-sm uppercase",children:e.jsx(h,{to:"/",children:t})})]})}export{qt as default};
6
- //# sourceMappingURL=_layout-DHLUa4_9.js.map
6
+ //# sourceMappingURL=_layout-BENlQ_xx.js.map