@epic-web/workshop-app 6.4.0 → 6.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/client/assets/{_-DbsI2yZ3.js → _-DOI2gHX3.js} +2 -2
- package/build/client/assets/{_-DbsI2yZ3.js.map → _-DOI2gHX3.js.map} +1 -1
- package/build/client/assets/{_-C9pypk8E.js → _-v6PvHZ90.js} +2 -2
- package/build/client/assets/_-v6PvHZ90.js.map +1 -0
- package/build/client/assets/{_basePickBy-BaGiSohD.js → _basePickBy-DK6It6WA.js} +2 -2
- package/build/client/assets/{_basePickBy-BaGiSohD.js.map → _basePickBy-DK6It6WA.js.map} +1 -1
- package/build/client/assets/{_baseUniq-BxpIs2Oy.js → _baseUniq-B14mMiqO.js} +2 -2
- package/build/client/assets/{_baseUniq-BxpIs2Oy.js.map → _baseUniq-B14mMiqO.js.map} +1 -1
- package/build/client/assets/{_exerciseNumber-uGponlfN.js → _exerciseNumber-BhK_Xufd.js} +2 -2
- package/build/client/assets/{_exerciseNumber-uGponlfN.js.map → _exerciseNumber-BhK_Xufd.js.map} +1 -1
- package/build/client/assets/{_exerciseNumber_._stepNumber-Ce6_sCcU.js → _exerciseNumber_._stepNumber-DBbWnlEd.js} +2 -2
- package/build/client/assets/{_exerciseNumber_._stepNumber-Ce6_sCcU.js.map → _exerciseNumber_._stepNumber-DBbWnlEd.js.map} +1 -1
- package/build/client/assets/_exerciseNumber_._stepNumber.index-Br7x8lR0.js +2 -0
- package/build/client/assets/_exerciseNumber_._stepNumber.index-Br7x8lR0.js.map +1 -0
- package/build/client/assets/{_exerciseNumber_.finished-BE2v5_rB.js → _exerciseNumber_.finished-B0iUZ4Jp.js} +2 -2
- package/build/client/assets/{_exerciseNumber_.finished-BE2v5_rB.js.map → _exerciseNumber_.finished-B0iUZ4Jp.js.map} +1 -1
- package/build/client/assets/_layout-BP3Hz4UU.js +2 -0
- package/build/client/assets/{_layout-Co6ujuzn.js.map → _layout-BP3Hz4UU.js.map} +1 -1
- package/build/client/assets/{_layout-Bzzu5Cz1.js → _layout-DKmpru-v.js} +2 -2
- package/build/client/assets/{_layout-Bzzu5Cz1.js.map → _layout-DKmpru-v.js.map} +1 -1
- package/build/client/assets/{_layout-vRDHFYoQ.js → _layout-DRBfGSzn.js} +2 -2
- package/build/client/assets/{_layout-vRDHFYoQ.js.map → _layout-DRBfGSzn.js.map} +1 -1
- package/build/client/assets/{_layout-BVzBSE-n.js → _layout-DxOG9P39.js} +2 -2
- package/build/client/assets/{_layout-BVzBSE-n.js.map → _layout-DxOG9P39.js.map} +1 -1
- package/build/client/assets/{accordion-BDR86Xcb.js → accordion-CQRBxCdM.js} +2 -2
- package/build/client/assets/{accordion-BDR86Xcb.js.map → accordion-CQRBxCdM.js.map} +1 -1
- package/build/client/assets/{account-Cldpf0d2.js → account-BwxqSFjk.js} +2 -2
- package/build/client/assets/{account-Cldpf0d2.js.map → account-BwxqSFjk.js.map} +1 -1
- package/build/client/assets/api._-Br7x8lR0.js +2 -0
- package/build/client/assets/api._-Br7x8lR0.js.map +1 -0
- package/build/client/assets/app-CJ-4VoDp.js +2 -0
- package/build/client/assets/{app-DmNyqOoy.js.map → app-CJ-4VoDp.js.map} +1 -1
- package/build/client/assets/app.epic_ws_.js_-Br7x8lR0.js +2 -0
- package/build/client/assets/app.epic_ws_.js_-Br7x8lR0.js.map +1 -0
- package/build/client/assets/apps-4hFOncm9.js +2 -0
- package/build/client/assets/apps-4hFOncm9.js.map +1 -0
- package/build/client/assets/apps-Br7x8lR0.js +2 -0
- package/build/client/assets/apps-Br7x8lR0.js.map +1 -0
- package/build/client/assets/{arc-DRlf7jq7.js → arc-BVQduULV.js} +2 -2
- package/build/client/assets/{arc-DRlf7jq7.js.map → arc-BVQduULV.js.map} +1 -1
- package/build/client/assets/{architectureDiagram-NQ2NVSRB-CrmRQ9SO.js → architectureDiagram-NQ2NVSRB-CR4gCI8X.js} +2 -2
- package/build/client/assets/{architectureDiagram-NQ2NVSRB-CrmRQ9SO.js.map → architectureDiagram-NQ2NVSRB-CR4gCI8X.js.map} +1 -1
- package/build/client/assets/{blockDiagram-PHRCVELO-xwBltM5R.js → blockDiagram-PHRCVELO-DuxnuM93.js} +2 -2
- package/build/client/assets/{blockDiagram-PHRCVELO-xwBltM5R.js.map → blockDiagram-PHRCVELO-DuxnuM93.js.map} +1 -1
- package/build/client/assets/{button-BlPb-37-.js → button-DGnwQ6KN.js} +2 -2
- package/build/client/assets/{button-BlPb-37-.js.map → button-DGnwQ6KN.js.map} +1 -1
- package/build/client/assets/{c4Diagram-6F6E4RAY-JkoDHTPF.js → c4Diagram-6F6E4RAY-Dqlm7faJ.js} +2 -2
- package/build/client/assets/{c4Diagram-6F6E4RAY-JkoDHTPF.js.map → c4Diagram-6F6E4RAY-Dqlm7faJ.js.map} +1 -1
- package/build/client/assets/cache-Br7x8lR0.js +2 -0
- package/build/client/assets/cache-Br7x8lR0.js.map +1 -0
- package/build/client/assets/channel-Ccfwel2m.js +2 -0
- package/build/client/assets/{channel-Cks3Ea6t.js.map → channel-Ccfwel2m.js.map} +1 -1
- package/build/client/assets/{chunk-353BL4L5-CHKdRF8O.js → chunk-353BL4L5-CY0biqke.js} +2 -2
- package/build/client/assets/{chunk-353BL4L5-CHKdRF8O.js.map → chunk-353BL4L5-CY0biqke.js.map} +1 -1
- package/build/client/assets/{chunk-67H74DCK-BMun8kdQ.js → chunk-67H74DCK-CZpFcSK7.js} +2 -2
- package/build/client/assets/{chunk-67H74DCK-BMun8kdQ.js.map → chunk-67H74DCK-CZpFcSK7.js.map} +1 -1
- package/build/client/assets/{chunk-6OLS64BW-D0k_ZwIC.js → chunk-6OLS64BW-CV0M_3sG.js} +2 -2
- package/build/client/assets/{chunk-6OLS64BW-D0k_ZwIC.js.map → chunk-6OLS64BW-CV0M_3sG.js.map} +1 -1
- package/build/client/assets/{chunk-AACKK3MU-Cj8nrtEq.js → chunk-AACKK3MU-B4Z3pj6y.js} +2 -2
- package/build/client/assets/{chunk-AACKK3MU-Cj8nrtEq.js.map → chunk-AACKK3MU-B4Z3pj6y.js.map} +1 -1
- package/build/client/assets/{chunk-BFAMUDN2-CIt8WAbe.js → chunk-BFAMUDN2-xSXsSdRc.js} +2 -2
- package/build/client/assets/{chunk-BFAMUDN2-CIt8WAbe.js.map → chunk-BFAMUDN2-xSXsSdRc.js.map} +1 -1
- package/build/client/assets/{chunk-E2GYISFI-lfUxhUba.js → chunk-E2GYISFI-XxwOHDH_.js} +2 -2
- package/build/client/assets/{chunk-E2GYISFI-lfUxhUba.js.map → chunk-E2GYISFI-XxwOHDH_.js.map} +1 -1
- package/build/client/assets/{chunk-QEP2MXWD-By0BtF5w.js → chunk-QEP2MXWD-ChxN-fyh.js} +2 -2
- package/build/client/assets/{chunk-QEP2MXWD-By0BtF5w.js.map → chunk-QEP2MXWD-ChxN-fyh.js.map} +1 -1
- package/build/client/assets/{chunk-QMGIS6GS-D3fke51R.js → chunk-QMGIS6GS-Cnm5uIBY.js} +2 -2
- package/build/client/assets/{chunk-QMGIS6GS-D3fke51R.js.map → chunk-QMGIS6GS-Cnm5uIBY.js.map} +1 -1
- package/build/client/assets/{chunk-SKB7J2MH-B4y7fFww.js → chunk-SKB7J2MH-Iq1sBnJg.js} +2 -2
- package/build/client/assets/{chunk-SKB7J2MH-B4y7fFww.js.map → chunk-SKB7J2MH-Iq1sBnJg.js.map} +1 -1
- package/build/client/assets/classDiagram-BGRH5UQR-C3baNHIn.js +2 -0
- package/build/client/assets/{classDiagram-BGRH5UQR-Ddac1FX8.js.map → classDiagram-BGRH5UQR-C3baNHIn.js.map} +1 -1
- package/build/client/assets/classDiagram-v2-O24JOBDK-C3baNHIn.js +2 -0
- package/build/client/assets/{classDiagram-v2-O24JOBDK-Ddac1FX8.js.map → classDiagram-v2-O24JOBDK-C3baNHIn.js.map} +1 -1
- package/build/client/assets/clone-CBh9K_C0.js +2 -0
- package/build/client/assets/{clone-BzOlX5uP.js.map → clone-CBh9K_C0.js.map} +1 -1
- package/build/client/assets/{dagre-FFZHY6LT-BF_ENDvI.js → dagre-FFZHY6LT-DRX4CPoT.js} +2 -2
- package/build/client/assets/{dagre-FFZHY6LT-BF_ENDvI.js.map → dagre-FFZHY6LT-DRX4CPoT.js.map} +1 -1
- package/build/client/assets/{diagram-3EMPZRKU-Co8BNYOp.js → diagram-3EMPZRKU-DnyeZVpZ.js} +2 -2
- package/build/client/assets/{diagram-3EMPZRKU-Co8BNYOp.js.map → diagram-3EMPZRKU-DnyeZVpZ.js.map} +1 -1
- package/build/client/assets/{diagram-5UYTHUR4-CTF96wbH.js → diagram-5UYTHUR4-CGNqEi7_.js} +2 -2
- package/build/client/assets/{diagram-5UYTHUR4-CTF96wbH.js.map → diagram-5UYTHUR4-CGNqEi7_.js.map} +1 -1
- package/build/client/assets/{diagram-ZTM2IBQH-BPjsVcII.js → diagram-ZTM2IBQH-TQuk-ulz.js} +2 -2
- package/build/client/assets/{diagram-ZTM2IBQH-BPjsVcII.js.map → diagram-ZTM2IBQH-TQuk-ulz.js.map} +1 -1
- package/build/client/assets/diff-C4a0B6T4.js +2 -0
- package/build/client/assets/{diff-C4mTCnzp.js.map → diff-C4a0B6T4.js.map} +1 -1
- package/build/client/assets/{diff-BHlDvw_d.js → diff-CvXO10rY.js} +2 -2
- package/build/client/assets/{diff-BHlDvw_d.js.map → diff-CvXO10rY.js.map} +1 -1
- package/build/client/assets/discord-BoNGnjEv.js +2 -0
- package/build/client/assets/discord-BoNGnjEv.js.map +1 -0
- package/build/client/assets/{discord-DajcCBfS.js → discord-CpOQOwKa.js} +2 -2
- package/build/client/assets/{discord-DajcCBfS.js.map → discord-CpOQOwKa.js.map} +1 -1
- package/build/client/assets/{entry.client-CkiXyAWa.js → entry.client-JXPtXVLj.js} +2 -2
- package/build/client/assets/{entry.client-CkiXyAWa.js.map → entry.client-JXPtXVLj.js.map} +1 -1
- package/build/client/assets/{epic-video-7egGi8C6.js → epic-video-VKhk-6Mv.js} +2 -2
- package/build/client/assets/{epic-video-7egGi8C6.js.map → epic-video-VKhk-6Mv.js.map} +1 -1
- package/build/client/assets/epic_ws_.js_-Br7x8lR0.js +2 -0
- package/build/client/assets/epic_ws_.js_-Br7x8lR0.js.map +1 -0
- package/build/client/assets/{erDiagram-R3QVA2FD-CoI7VxY8.js → erDiagram-R3QVA2FD-DcVPSaZ1.js} +2 -2
- package/build/client/assets/{erDiagram-R3QVA2FD-CoI7VxY8.js.map → erDiagram-R3QVA2FD-DcVPSaZ1.js.map} +1 -1
- package/build/client/assets/{error-boundary-DxZMubY-.js → error-boundary-BDRYzb6K.js} +2 -2
- package/build/client/assets/{error-boundary-DxZMubY-.js.map → error-boundary-BDRYzb6K.js.map} +1 -1
- package/build/client/assets/exercises-Br7x8lR0.js +2 -0
- package/build/client/assets/exercises-Br7x8lR0.js.map +1 -0
- package/build/client/assets/{finished-DqZ90XsZ.js → finished-BkL8cvWw.js} +2 -2
- package/build/client/assets/{finished-DqZ90XsZ.js.map → finished-BkL8cvWw.js.map} +1 -1
- package/build/client/assets/{flowDiagram-PKI6S5ZS-FVR0aJCb.js → flowDiagram-PKI6S5ZS-BjGswWQI.js} +2 -2
- package/build/client/assets/{flowDiagram-PKI6S5ZS-FVR0aJCb.js.map → flowDiagram-PKI6S5ZS-BjGswWQI.js.map} +1 -1
- package/build/client/assets/{ganttDiagram-EK5VF46D-Cgd-KnRJ.js → ganttDiagram-EK5VF46D-CigmRAu8.js} +2 -2
- package/build/client/assets/{ganttDiagram-EK5VF46D-Cgd-KnRJ.js.map → ganttDiagram-EK5VF46D-CigmRAu8.js.map} +1 -1
- package/build/client/assets/{gitGraphDiagram-GW3U2K7C-C5-T89ck.js → gitGraphDiagram-GW3U2K7C-BZRSDtTk.js} +2 -2
- package/build/client/assets/{gitGraphDiagram-GW3U2K7C-C5-T89ck.js.map → gitGraphDiagram-GW3U2K7C-BZRSDtTk.js.map} +1 -1
- package/build/client/assets/{graph-2blmPy0J.js → graph-ssQ5a7An.js} +2 -2
- package/build/client/assets/{graph-2blmPy0J.js.map → graph-ssQ5a7An.js.map} +1 -1
- package/build/client/assets/index-4hFOncm9.js +2 -0
- package/build/client/assets/index-4hFOncm9.js.map +1 -0
- package/build/client/assets/index-BEOsF4gu.js +2 -0
- package/build/client/assets/index-BEOsF4gu.js.map +1 -0
- package/build/client/assets/{index-DXWoNbMw.js → index-BSUgjf5i.js} +2 -2
- package/build/client/assets/{index-DXWoNbMw.js.map → index-BSUgjf5i.js.map} +1 -1
- package/build/client/assets/index-Br7x8lR0.js +2 -0
- package/build/client/assets/index-Br7x8lR0.js.map +1 -0
- package/build/client/assets/{index-DMYU8Adz.js → index-BvSgrEwH.js} +2 -2
- package/build/client/assets/{index-DMYU8Adz.js.map → index-BvSgrEwH.js.map} +1 -1
- package/build/client/assets/{index-ENEzd29c.js → index-ByKe5Bbc.js} +2 -2
- package/build/client/assets/{index-ENEzd29c.js.map → index-ByKe5Bbc.js.map} +1 -1
- package/build/client/assets/{index-BF30kxMM.js → index-CSKRws-d.js} +2 -2
- package/build/client/assets/{index-BF30kxMM.js.map → index-CSKRws-d.js.map} +1 -1
- package/build/client/assets/{index-N0rVhLdR.js → index-Ce8G4fcS.js} +2 -2
- package/build/client/assets/{index-N0rVhLdR.js.map → index-Ce8G4fcS.js.map} +1 -1
- package/build/client/assets/{index-CY2XuFSg.js → index-CfuMsJpq.js} +2 -2
- package/build/client/assets/{index-CY2XuFSg.js.map → index-CfuMsJpq.js.map} +1 -1
- package/build/client/assets/{index-BpiFo4Bs.js → index-DQHP10an.js} +2 -2
- package/build/client/assets/{index-BpiFo4Bs.js.map → index-DQHP10an.js.map} +1 -1
- package/build/client/assets/{index-BJy9GGix.js → index-DVtOZE_w.js} +2 -2
- package/build/client/assets/{index-BJy9GGix.js.map → index-DVtOZE_w.js.map} +1 -1
- package/build/client/assets/{index-C4WpsDjj.js → index-kpJjamgW.js} +2 -2
- package/build/client/assets/{index-C4WpsDjj.js.map → index-kpJjamgW.js.map} +1 -1
- package/build/client/assets/infoDiagram-RLU2ROGC-oEx_S6Vy.js +3 -0
- package/build/client/assets/{infoDiagram-RLU2ROGC-D9Xc3j8L.js.map → infoDiagram-RLU2ROGC-oEx_S6Vy.js.map} +1 -1
- package/build/client/assets/{journeyDiagram-EWQZEKCU-CYjHBCKP.js → journeyDiagram-EWQZEKCU-BX8-xfo9.js} +2 -2
- package/build/client/assets/{journeyDiagram-EWQZEKCU-CYjHBCKP.js.map → journeyDiagram-EWQZEKCU-BX8-xfo9.js.map} +1 -1
- package/build/client/assets/{jsx-runtime-B2LUJHWf.js → jsx-runtime-BcujL2Aj.js} +2 -2
- package/build/client/assets/{jsx-runtime-B2LUJHWf.js.map → jsx-runtime-BcujL2Aj.js.map} +1 -1
- package/build/client/assets/{kanban-definition-ILFWEQ3N-CzQXJAxD.js → kanban-definition-ILFWEQ3N-DSuN0acj.js} +2 -2
- package/build/client/assets/{kanban-definition-ILFWEQ3N-CzQXJAxD.js.map → kanban-definition-ILFWEQ3N-DSuN0acj.js.map} +1 -1
- package/build/client/assets/l-COkiy20v.js +2 -0
- package/build/client/assets/{l-F4A7XDEa.js.map → l-COkiy20v.js.map} +1 -1
- package/build/client/assets/launch-editor-Br7x8lR0.js +2 -0
- package/build/client/assets/launch-editor-Br7x8lR0.js.map +1 -0
- package/build/client/assets/{layout-CV-Afn_q.js → layout-CRUJr5tM.js} +2 -2
- package/build/client/assets/{layout-CV-Afn_q.js.map → layout-CRUJr5tM.js.map} +1 -1
- package/build/client/assets/{linear-jxQrrEcI.js → linear-4YOhyf6z.js} +2 -2
- package/build/client/assets/{linear-jxQrrEcI.js.map → linear-4YOhyf6z.js.map} +1 -1
- package/build/client/assets/{loading-j2MezYUg.js → loading-BQiZCXl-.js} +2 -2
- package/build/client/assets/{loading-j2MezYUg.js.map → loading-BQiZCXl-.js.map} +1 -1
- package/build/client/assets/{login-BcFnxSmx.js → login-C3y9sPuf.js} +2 -2
- package/build/client/assets/{login-BcFnxSmx.js.map → login-C3y9sPuf.js.map} +1 -1
- package/build/client/assets/login-sse-Br7x8lR0.js +2 -0
- package/build/client/assets/login-sse-Br7x8lR0.js.map +1 -0
- package/build/client/assets/manifest-93bf5827.js +1 -0
- package/build/client/assets/{mdx-qcm_nkgI.js → mdx-Bx84e4TR.js} +3 -3
- package/build/client/assets/{mdx-qcm_nkgI.js.map → mdx-Bx84e4TR.js.map} +1 -1
- package/build/client/assets/{mermaid.core-D3pfbveR.js → mermaid.core-DUlGGmFz.js} +5 -5
- package/build/client/assets/{mermaid.core-D3pfbveR.js.map → mermaid.core-DUlGGmFz.js.map} +1 -1
- package/build/client/assets/{mindmap-definition-CZNETY7S-C3usFkdR.js → mindmap-definition-CZNETY7S-BQAkEQ50.js} +2 -2
- package/build/client/assets/{mindmap-definition-CZNETY7S-C3usFkdR.js.map → mindmap-definition-CZNETY7S-BQAkEQ50.js.map} +1 -1
- package/build/client/assets/{misc-D-dDb89H.js → misc-CJXb1d0J.js} +2 -2
- package/build/client/assets/{misc-D-dDb89H.js.map → misc-CJXb1d0J.js.map} +1 -1
- package/build/client/assets/{nav-chevrons-BF-_ecnj.js → nav-chevrons-D9XKa1mH.js} +2 -2
- package/build/client/assets/{nav-chevrons-BF-_ecnj.js.map → nav-chevrons-D9XKa1mH.js.map} +1 -1
- package/build/client/assets/notifications-Br7x8lR0.js +2 -0
- package/build/client/assets/notifications-Br7x8lR0.js.map +1 -0
- package/build/client/assets/og-Br7x8lR0.js +2 -0
- package/build/client/assets/og-Br7x8lR0.js.map +1 -0
- package/build/client/assets/{onboarding-BM4wTFL9.js → onboarding-BaZDYUh7.js} +2 -2
- package/build/client/assets/{onboarding-BM4wTFL9.js.map → onboarding-BaZDYUh7.js.map} +1 -1
- package/build/client/assets/{online-DRbKQRzx.js → online-CgtIvFKH.js} +2 -2
- package/build/client/assets/{online-DRbKQRzx.js.map → online-CgtIvFKH.js.map} +1 -1
- package/build/client/assets/{pe-Dd-3Vdrv.js → pe-DBKBCHmz.js} +2 -2
- package/build/client/assets/{pe-Dd-3Vdrv.js.map → pe-DBKBCHmz.js.map} +1 -1
- package/build/client/assets/{pieDiagram-NIOCPIFQ-CNwdtlXk.js → pieDiagram-NIOCPIFQ-BoeOpfcZ.js} +2 -2
- package/build/client/assets/{pieDiagram-NIOCPIFQ-CNwdtlXk.js.map → pieDiagram-NIOCPIFQ-BoeOpfcZ.js.map} +1 -1
- package/build/client/assets/{preferences-CcTn1CYh.js → preferences-DgiQZThQ.js} +2 -2
- package/build/client/assets/{preferences-CcTn1CYh.js.map → preferences-DgiQZThQ.js.map} +1 -1
- package/build/client/assets/{presence-h4yTLoon.js → presence-CusrArdA.js} +2 -2
- package/build/client/assets/{presence-h4yTLoon.js.map → presence-CusrArdA.js.map} +1 -1
- package/build/client/assets/{preview-gHmuDJK-.js → preview-9FeYSEDk.js} +2 -2
- package/build/client/assets/{preview-gHmuDJK-.js.map → preview-9FeYSEDk.js.map} +1 -1
- package/build/client/assets/processes-Br7x8lR0.js +2 -0
- package/build/client/assets/processes-Br7x8lR0.js.map +1 -0
- package/build/client/assets/{product-Jj1IV1k9.js → product-CrOzBC_k.js} +2 -2
- package/build/client/assets/{product-Jj1IV1k9.js.map → product-CrOzBC_k.js.map} +1 -1
- package/build/client/assets/{progress-wyxFr9qs.js → progress-B01tSSb6.js} +2 -2
- package/build/client/assets/{progress-wyxFr9qs.js.map → progress-B01tSSb6.js.map} +1 -1
- package/build/client/assets/progress-Br7x8lR0.js +2 -0
- package/build/client/assets/progress-Br7x8lR0.js.map +1 -0
- package/build/client/assets/{progress-bar-BA_tln9A.js → progress-bar-DlBnagEk.js} +2 -2
- package/build/client/assets/{progress-bar-BA_tln9A.js.map → progress-bar-DlBnagEk.js.map} +1 -1
- package/build/client/assets/{quadrantDiagram-2OG54O6I-DJSr7VVP.js → quadrantDiagram-2OG54O6I-CGBRKetG.js} +2 -2
- package/build/client/assets/{quadrantDiagram-2OG54O6I-DJSr7VVP.js.map → quadrantDiagram-2OG54O6I-CGBRKetG.js.map} +1 -1
- package/build/client/assets/{requirementDiagram-SO3GGRV7-Dm9X6gYp.js → requirementDiagram-SO3GGRV7-DchVPiOQ.js} +2 -2
- package/build/client/assets/{requirementDiagram-SO3GGRV7-Dm9X6gYp.js.map → requirementDiagram-SO3GGRV7-DchVPiOQ.js.map} +1 -1
- package/build/client/assets/{revalidation-ws-D6cizZ34.js → revalidation-ws-SaBpRC7c.js} +2 -2
- package/build/client/assets/{revalidation-ws-D6cizZ34.js.map → revalidation-ws-SaBpRC7c.js.map} +1 -1
- package/build/client/assets/robots_._txt-Br7x8lR0.js +2 -0
- package/build/client/assets/robots_._txt-Br7x8lR0.js.map +1 -0
- package/build/client/assets/{root-LFhpEp1U.js → root-7toTLRGZ.js} +2 -2
- package/build/client/assets/{root-LFhpEp1U.js.map → root-7toTLRGZ.js.map} +1 -1
- package/build/client/assets/{sankeyDiagram-4UZDY2LN-afK9nbXy.js → sankeyDiagram-4UZDY2LN-IiFJHkzY.js} +2 -2
- package/build/client/assets/{sankeyDiagram-4UZDY2LN-afK9nbXy.js.map → sankeyDiagram-4UZDY2LN-IiFJHkzY.js.map} +1 -1
- package/build/client/assets/{seo-BRfbzXHZ.js → seo-F3atQazV.js} +2 -2
- package/build/client/assets/{seo-BRfbzXHZ.js.map → seo-F3atQazV.js.map} +1 -1
- package/build/client/assets/{sequenceDiagram-ZIKVLSP4-DU42bc3a.js → sequenceDiagram-ZIKVLSP4-Bp2zg0YM.js} +2 -2
- package/build/client/assets/{sequenceDiagram-ZIKVLSP4-DU42bc3a.js.map → sequenceDiagram-ZIKVLSP4-Bp2zg0YM.js.map} +1 -1
- package/build/client/assets/{set-playground-BGT1RjX_.js → set-playground-BA0z3_BN.js} +2 -2
- package/build/client/assets/{set-playground-BGT1RjX_.js.map → set-playground-BA0z3_BN.js.map} +1 -1
- package/build/client/assets/set-playground-Br7x8lR0.js +2 -0
- package/build/client/assets/set-playground-Br7x8lR0.js.map +1 -0
- package/build/client/assets/sitemap_._xml-Br7x8lR0.js +2 -0
- package/build/client/assets/sitemap_._xml-Br7x8lR0.js.map +1 -0
- package/build/client/assets/start-Br7x8lR0.js +2 -0
- package/build/client/assets/start-Br7x8lR0.js.map +1 -0
- package/build/client/assets/{stateDiagram-XX37X6EN-B8EwlakM.js → stateDiagram-XX37X6EN-CuKZSA6z.js} +2 -2
- package/build/client/assets/{stateDiagram-XX37X6EN-B8EwlakM.js.map → stateDiagram-XX37X6EN-CuKZSA6z.js.map} +1 -1
- package/build/client/assets/stateDiagram-v2-GD6S3NHB-bjx76_OI.js +2 -0
- package/build/client/assets/{stateDiagram-v2-GD6S3NHB-35ZXM1_g.js.map → stateDiagram-v2-GD6S3NHB-bjx76_OI.js.map} +1 -1
- package/build/client/assets/{support-sQOGILfK.js → support-DUh3BiQf.js} +2 -2
- package/build/client/assets/{support-sQOGILfK.js.map → support-DUh3BiQf.js.map} +1 -1
- package/build/client/assets/test-Br7x8lR0.js +2 -0
- package/build/client/assets/test-Br7x8lR0.js.map +1 -0
- package/build/client/assets/test-Ctr_7QVp.js +2 -0
- package/build/client/assets/{test-B50ljUg2.js.map → test-Ctr_7QVp.js.map} +1 -1
- package/build/client/assets/test._testName-Br7x8lR0.js +2 -0
- package/build/client/assets/test._testName-Br7x8lR0.js.map +1 -0
- package/build/client/assets/test.epic_ws_.js_-Br7x8lR0.js +2 -0
- package/build/client/assets/test.epic_ws_.js_-Br7x8lR0.js.map +1 -0
- package/build/client/assets/{tests-CNS1bm1R.js → tests-CZAI0vqW.js} +2 -2
- package/build/client/assets/{tests-CNS1bm1R.js.map → tests-CZAI0vqW.js.map} +1 -1
- package/build/client/assets/{timeline-definition-RI47OAVP-BfpaCaB_.js → timeline-definition-RI47OAVP-COW1irsJ.js} +2 -2
- package/build/client/assets/{timeline-definition-RI47OAVP-BfpaCaB_.js.map → timeline-definition-RI47OAVP-COW1irsJ.js.map} +1 -1
- package/build/client/assets/{tooltip-DaEk9smk.js → tooltip-Dm5SBVY5.js} +2 -2
- package/build/client/assets/{tooltip-DaEk9smk.js.map → tooltip-Dm5SBVY5.js.map} +1 -1
- package/build/client/assets/{treemap-FKARHQ26-BYAT_cTQ.js → treemap-FKARHQ26-OIm2RKyV.js} +2 -2
- package/build/client/assets/{treemap-FKARHQ26-BYAT_cTQ.js.map → treemap-FKARHQ26-OIm2RKyV.js.map} +1 -1
- package/build/client/assets/{use-event-source-D7BmAfNV.js → use-event-source-0sFFzZkm.js} +2 -2
- package/build/client/assets/{use-event-source-D7BmAfNV.js.map → use-event-source-0sFFzZkm.js.map} +1 -1
- package/build/client/assets/{user-CQfYiwjz.js → user-C6NChLGC.js} +2 -2
- package/build/client/assets/{user-CQfYiwjz.js.map → user-C6NChLGC.js.map} +1 -1
- package/build/client/assets/{version-DZ56dlh_.js → version-trzp9pgE.js} +2 -2
- package/build/client/assets/{version-DZ56dlh_.js.map → version-trzp9pgE.js.map} +1 -1
- package/build/client/assets/workshop-config-Cx9qZQEC.js +2 -0
- package/build/client/assets/{workshop-config-BOTAWJa-.js.map → workshop-config-Cx9qZQEC.js.map} +1 -1
- package/build/client/assets/{workspace-structure-DRKC9vIr.js → workspace-structure-CskVhupe.js} +2 -2
- package/build/client/assets/{workspace-structure-DRKC9vIr.js.map → workspace-structure-CskVhupe.js.map} +1 -1
- package/build/client/assets/{xychartDiagram-H2YORKM3-8frmuuIZ.js → xychartDiagram-H2YORKM3-BF6VLUdC.js} +2 -2
- package/build/client/assets/{xychartDiagram-H2YORKM3-8frmuuIZ.js.map → xychartDiagram-H2YORKM3-BF6VLUdC.js.map} +1 -1
- package/build/server/index.js +2 -2
- package/package.json +1 -1
- package/build/client/assets/_-C9pypk8E.js.map +0 -1
- package/build/client/assets/_exerciseNumber_._stepNumber.index-Bltw4W_f.js +0 -2
- package/build/client/assets/_exerciseNumber_._stepNumber.index-Bltw4W_f.js.map +0 -1
- package/build/client/assets/_layout-Co6ujuzn.js +0 -2
- package/build/client/assets/api._-Bltw4W_f.js +0 -2
- package/build/client/assets/api._-Bltw4W_f.js.map +0 -1
- package/build/client/assets/app-DmNyqOoy.js +0 -2
- package/build/client/assets/app.epic_ws_.js_-Bltw4W_f.js +0 -2
- package/build/client/assets/app.epic_ws_.js_-Bltw4W_f.js.map +0 -1
- package/build/client/assets/apps-Bltw4W_f.js +0 -2
- package/build/client/assets/apps-Bltw4W_f.js.map +0 -1
- package/build/client/assets/apps-D27kw0fL.js +0 -2
- package/build/client/assets/apps-D27kw0fL.js.map +0 -1
- package/build/client/assets/cache-Bltw4W_f.js +0 -2
- package/build/client/assets/cache-Bltw4W_f.js.map +0 -1
- package/build/client/assets/channel-Cks3Ea6t.js +0 -2
- package/build/client/assets/classDiagram-BGRH5UQR-Ddac1FX8.js +0 -2
- package/build/client/assets/classDiagram-v2-O24JOBDK-Ddac1FX8.js +0 -2
- package/build/client/assets/clone-BzOlX5uP.js +0 -2
- package/build/client/assets/diff-C4mTCnzp.js +0 -2
- package/build/client/assets/discord-CTud2-P1.js +0 -2
- package/build/client/assets/discord-CTud2-P1.js.map +0 -1
- package/build/client/assets/epic_ws_.js_-Bltw4W_f.js +0 -2
- package/build/client/assets/epic_ws_.js_-Bltw4W_f.js.map +0 -1
- package/build/client/assets/exercises-Bltw4W_f.js +0 -2
- package/build/client/assets/exercises-Bltw4W_f.js.map +0 -1
- package/build/client/assets/index-Bltw4W_f.js +0 -2
- package/build/client/assets/index-Bltw4W_f.js.map +0 -1
- package/build/client/assets/index-D27kw0fL.js +0 -2
- package/build/client/assets/index-D27kw0fL.js.map +0 -1
- package/build/client/assets/index-Drom-uLQ.js +0 -2
- package/build/client/assets/index-Drom-uLQ.js.map +0 -1
- package/build/client/assets/infoDiagram-RLU2ROGC-D9Xc3j8L.js +0 -3
- package/build/client/assets/l-F4A7XDEa.js +0 -2
- package/build/client/assets/launch-editor-Bltw4W_f.js +0 -2
- package/build/client/assets/launch-editor-Bltw4W_f.js.map +0 -1
- package/build/client/assets/login-sse-Bltw4W_f.js +0 -2
- package/build/client/assets/login-sse-Bltw4W_f.js.map +0 -1
- package/build/client/assets/manifest-a77f969d.js +0 -1
- package/build/client/assets/notifications-Bltw4W_f.js +0 -2
- package/build/client/assets/notifications-Bltw4W_f.js.map +0 -1
- package/build/client/assets/og-Bltw4W_f.js +0 -2
- package/build/client/assets/og-Bltw4W_f.js.map +0 -1
- package/build/client/assets/processes-Bltw4W_f.js +0 -2
- package/build/client/assets/processes-Bltw4W_f.js.map +0 -1
- package/build/client/assets/progress-Bltw4W_f.js +0 -2
- package/build/client/assets/progress-Bltw4W_f.js.map +0 -1
- package/build/client/assets/robots_._txt-Bltw4W_f.js +0 -2
- package/build/client/assets/robots_._txt-Bltw4W_f.js.map +0 -1
- package/build/client/assets/set-playground-Bltw4W_f.js +0 -2
- package/build/client/assets/set-playground-Bltw4W_f.js.map +0 -1
- package/build/client/assets/sitemap_._xml-Bltw4W_f.js +0 -2
- package/build/client/assets/sitemap_._xml-Bltw4W_f.js.map +0 -1
- package/build/client/assets/start-Bltw4W_f.js +0 -2
- package/build/client/assets/start-Bltw4W_f.js.map +0 -1
- package/build/client/assets/stateDiagram-v2-GD6S3NHB-35ZXM1_g.js +0 -2
- package/build/client/assets/test-B50ljUg2.js +0 -2
- package/build/client/assets/test-Bltw4W_f.js +0 -2
- package/build/client/assets/test-Bltw4W_f.js.map +0 -1
- package/build/client/assets/test._testName-Bltw4W_f.js +0 -2
- package/build/client/assets/test._testName-Bltw4W_f.js.map +0 -1
- package/build/client/assets/test.epic_ws_.js_-Bltw4W_f.js +0 -2
- package/build/client/assets/test.epic_ws_.js_-Bltw4W_f.js.map +0 -1
- package/build/client/assets/workshop-config-BOTAWJa-.js +0 -2
package/build/client/assets/{_exerciseNumber-uGponlfN.js.map → _exerciseNumber-BhK_Xufd.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_exerciseNumber-
|
|
1
|
+
{"version":3,"file":"_exerciseNumber-BhK_Xufd.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":"wuBAiCO,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-
|
|
2
|
-
//# sourceMappingURL=_exerciseNumber_._stepNumber-
|
|
1
|
+
import{w as e,a as s,O as n,b as u,i as a}from"./chunk-QMGIS6GS-Cnm5uIBY.js";import{j as o}from"./jsx-runtime-BcujL2Aj.js";import{g as i}from"./misc-CJXb1d0J.js";import"./_-v6PvHZ90.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-DBbWnlEd.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_exerciseNumber_._stepNumber-
|
|
1
|
+
{"version":3,"file":"_exerciseNumber_._stepNumber-DBbWnlEd.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 @@
|
|
|
1
|
+
{"version":3,"file":"_exerciseNumber_._stepNumber.index-Br7x8lR0.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{w as l,L as n,r as c}from"./chunk-QMGIS6GS-
|
|
2
|
-
//# sourceMappingURL=_exerciseNumber_.finished-
|
|
1
|
+
import{w as l,L as n,r as c}from"./chunk-QMGIS6GS-Cnm5uIBY.js";import{j as e}from"./jsx-runtime-BcujL2Aj.js";import{E as m}from"./index-BvSgrEwH.js";import{E as a}from"./epic-video-VKhk-6Mv.js";import{I as x,c as d}from"./misc-CJXb1d0J.js";import{L as f}from"./loading-BQiZCXl-.js";import{N as p}from"./nav-chevrons-D9XKa1mH.js";import{u as h}from"./revalidation-ws-SaBpRC7c.js";import{M as u,E as b}from"./mdx-Bx84e4TR.js";import{P as j}from"./progress-B01tSSb6.js";import{u as g}from"./index-BSUgjf5i.js";import{u as N}from"./online-CgtIvFKH.js";import{g as v}from"./seo-F3atQazV.js";import"./_-v6PvHZ90.js";import"./user-C6NChLGC.js";import"./workshop-config-Cx9qZQEC.js";import"./clsx-B-dksMZM.js";import"./index-kpJjamgW.js";import"./progress-bar-DlBnagEk.js";import"./pe-DBKBCHmz.js";import"./tooltip-Dm5SBVY5.js";const Q=({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},A=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{A as default,Q as meta};
|
|
2
|
+
//# sourceMappingURL=_exerciseNumber_.finished-B0iUZ4Jp.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_exerciseNumber_.finished-BE2v5_rB.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-B0iUZ4Jp.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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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{w as e,O as o}from"./chunk-QMGIS6GS-Cnm5uIBY.js";import{j as t}from"./jsx-runtime-BcujL2Aj.js";import"./_-v6PvHZ90.js";const a={getSitemapEntries:void 0},l=e(function(){return t.jsx("div",{className:"flex h-full flex-grow",children:t.jsx(o,{})})});export{l as default,a as handle};
|
|
2
|
+
//# sourceMappingURL=_layout-BP3Hz4UU.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_layout-
|
|
1
|
+
{"version":3,"file":"_layout-BP3Hz4UU.js","sources":["../../../app/routes/_app+/exercise+/_layout.tsx"],"sourcesContent":["import { getExercises } from '@epic-web/workshop-utils/apps.server'\nimport { type SEOHandle } from '@nasa-gcn/remix-seo'\nimport { Outlet } from 'react-router'\nimport { serverOnly$ } from 'vite-env-only/macros'\n\nexport const handle: SEOHandle = {\n\tgetSitemapEntries: serverOnly$(async (request) => {\n\t\tconst exercises = await getExercises({ request })\n\t\treturn exercises.flatMap((e) => [\n\t\t\t{ route: `/exercise/${e.exerciseNumber.toString().padStart(2, '0')}` },\n\t\t\t...e.steps.flatMap((s) =>\n\t\t\t\t['problem', 'solution'].map((type) => ({\n\t\t\t\t\troute: `/exercise/${e.exerciseNumber.toString().padStart(2, '0')}/${s.stepNumber.toString().padStart(2, '0')}/${type}`,\n\t\t\t\t})),\n\t\t\t),\n\t\t\t{\n\t\t\t\troute: `/exercise/${e.exerciseNumber.toString().padStart(2, '0')}/finished`,\n\t\t\t},\n\t\t])\n\t}),\n}\n\nexport default function ExercisesLayout() {\n\treturn (\n\t\t<div className=\"flex h-full flex-grow\">\n\t\t\t<Outlet />\n\t\t</div>\n\t)\n}\n"],"names":["handle","getSitemapEntries","undefined","_layout","_UNSAFE_withComponentProps","className","children","jsx","Outlet"],"mappings":"8HAKO,MAAMA,EAAoB,CAChCC,kBAAAC,MAcD,EAEAC,EAAAC,EAAA,UAA0C,CACzC,aACE,MAAA,CAAIC,UAAU,wBACdC,SAAAC,EAAAA,IAACC,IAAO,CAAA,CACT,CAEF,CAAA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{c as P,r as c,l as W,L as h,A as z,w as Q,a as Z,O as J}from"./chunk-QMGIS6GS-D3fke51R.js";import{j as e}from"./jsx-runtime-B2LUJHWf.js";import{E as X}from"./index-DMYU8Adz.js";import{G as ee}from"./error-boundary-DxZMubY-.js";import{N as re}from"./nav-chevrons-BF-_ecnj.js";import{u as te}from"./revalidation-ws-D6cizZ34.js";import{M as oe,L as N,E as ne}from"./mdx-qcm_nkgI.js";import{P as se}from"./progress-wyxFr9qs.js";import{S as R}from"./set-playground-BGT1RjX_.js";import{a as ie,c as O,I as C,i as ae,b as le}from"./misc-D-dDb89H.js";import{g as ce}from"./seo-BRfbzXHZ.js";import{E as pe}from"./epic-video-7egGi8C6.js";import{S as E,j as A,u as ue,R as de,d as me,e as fe,h as D,P as k,f as g,A as _,g as I,k as xe,D as he,C as ve,l as ge}from"./tooltip-DaEk9smk.js";import{a as Pe}from"./index-DXWoNbMw.js";import"./_-C9pypk8E.js";import{P as je,h as Ne,R as be,u as Se,F as Ce}from"./index-BpiFo4Bs.js";import"./debug-build-Dr14ShW9.js";import"./clsx-B-dksMZM.js";import"./index-C4WpsDjj.js";import"./progress-bar-BA_tln9A.js";import"./pe-Dd-3Vdrv.js";import"./index-N0rVhLdR.js";import"./online-DRbKQRzx.js";import"./loading-j2MezYUg.js";import"./user-CQfYiwjz.js";import"./workshop-config-BOTAWJa-.js";const L=c.createContext(null);function Ee(){const t=c.useContext(L);if(!t)throw new Error("useStepContext must be used within a StepContext.Provider");return t}function we({children:t,inBrowserBrowserRef:r}){return e.jsx(L.Provider,{value:{inBrowserBrowserRef:r},children:t})}const ye={DiffLink:w,PrevDiffLink:Ae,NextDiffLink:Re,InlineFile:De,LinkToApp:_e};function Oe({inBrowserBrowserRef:t}){const r=P();return r.exerciseStepApp.instructionsCode?e.jsx(we,{inBrowserBrowserRef:t,children:e.jsx(pe,{epicVideoInfosPromise:r.epicVideoInfosPromise,children:e.jsx("div",{className:"prose dark:prose-invert sm:prose-lg",children:e.jsx(oe,{code:r.exerciseStepApp.instructionsCode,components:ye})})})}):null}function F(t,r,n){const o=new URLSearchParams(t);return n===null?o.delete(r):o.set(r,n),o}function Re({app:t=0,fullPage:r=!1,children:n}){return e.jsx(w,{app1:t,app2:t+1,fullPage:r,children:n})}function Ae({app:t=-1,fullPage:r=!1,children:n}){return e.jsx(w,{app1:t,app2:t+1,fullPage:r,children:n})}function w({app1:t=0,app2:r=1,children:n,fullPage:o=!1,to:i}){const s=P();if(!i&&!t&&!r)return e.jsx("callout-danger",{className:"notification",children:e.jsx("div",{className:"title",children:"DiffLink Error: invalid input"})});function a(d){if(typeof d=="number"){const f=s.exerciseIndex+d;return s.allApps[f]?.name}if(!d)return null;for(const{name:f,stepName:m}of s.allApps)if(d===f||d===m)return f;return null}if(i){const d=new URLSearchParams(i);t=d.get("app1"),r=d.get("app2")}const l=a(t),u=a(r);if(!l||!u)return e.jsxs("callout-danger",{className:"notification",children:[e.jsx("div",{className:"title",children:"DiffLink Error: invalid input"}),!l&&e.jsxs("div",{children:['app1: "',t,'" is not a valid app name']}),!u&&e.jsxs("div",{children:['app2: "',r,'" is not a valid app name']})]});i||(i=`app1=${l}&app2=${u}`);const p=o?`/diff?${i}`:`?${decodeURIComponent(F(new URLSearchParams,"preview",`diff&${i}`).toString())}`;return n||(n=e.jsxs("span",{children:["Go to Diff ",o?"":"Preview"," from: ",e.jsx("code",{children:l})," to:"," ",e.jsx("code",{children:u})]})),e.jsx(h,{to:p,children:n})}function De({file:t,type:r="playground",children:n=e.jsx("code",{children:t}),...o}){const i=P(),s=i[r]||i[i.type],a=e.jsxs("div",{className:"launch-editor-button-wrapper flex underline underline-offset-4",children:[n," ",e.jsx("svg",{height:24,width:24,children:e.jsx("use",{href:`${ae}#Keyboard`})})]});return ENV.EPICSHOP_DEPLOYED&&s?e.jsx("div",{className:"inline-block grow",children:e.jsx(N,{appFile:t,appName:s.name,...o,children:a})}):s?e.jsx("div",{className:"inline-block grow",children:e.jsx(N,{appFile:t,appName:s.name,...o,children:a})}):r==="playground"?e.jsx(E,{content:"You must 'Set to Playground' before opening a file",children:e.jsx("div",{className:"inline-block grow cursor-not-allowed",children:a})}):e.jsx(e.Fragment,{children:"children"})}function ke(t){return t==="problem"?"problem":t==="solution"?"solution":"playground"}function _e({to:t,children:r=e.jsx("code",{children:t.toString()}),...n}){const[o]=W(),i=`?${F(o,"pathname",t.toString()).toString()}`,s=P(),a=ke(o.get("preview")),l=Pe(),u=s[a],p=u?.dev.type==="script"?ie({domain:l.domain,port:u.dev.portNumber}):s.playground?.dev.type==="browser"?s.playground.dev.pathname:null,{inBrowserBrowserRef:d}=Ee(),f=p?p.slice(0,-1)+t.toString():null;return e.jsxs("div",{className:"inline-flex items-center justify-between gap-1",children:[e.jsx(h,{to:i,...n,className:O(n.className,{"cursor-not-allowed":ENV.EPICSHOP_DEPLOYED}),title:ENV.EPICSHOP_DEPLOYED?"Cannot link to app in deployed version":void 0,onClick:m=>{ENV.EPICSHOP_DEPLOYED&&m.preventDefault(),n.onClick?.(m),d.current?.handleExtrnalNavigation(t.toString())},children:r}),f?e.jsx(E,{content:"Open in new tab",children:e.jsx("a",{href:f,target:"_blank",rel:"noreferrer",className:O("flex aspect-square items-center justify-center",{"cursor-not-allowed":ENV.EPICSHOP_DEPLOYED}),title:ENV.EPICSHOP_DEPLOYED?"Cannot link to app in deployed version":"Open in new tab",onClick:m=>{ENV.EPICSHOP_DEPLOYED&&m.preventDefault()},children:e.jsx(C,{name:"ExternalLink"})})}):null]})}var b="Popover",[$,Nr]=me(b,[A]),j=A(),[Ie,x]=$(b),T=t=>{const{__scopePopover:r,children:n,open:o,defaultOpen:i,onOpenChange:s,modal:a=!1}=t,l=j(r),u=c.useRef(null),[p,d]=c.useState(!1),[f,m]=ue({prop:o,defaultProp:i??!1,onChange:s,caller:b});return e.jsx(de,{...l,children:e.jsx(Ie,{scope:r,contentId:fe(),triggerRef:u,open:f,onOpenChange:m,onOpenToggle:c.useCallback(()=>m(S=>!S),[m]),hasCustomAnchor:p,onCustomAnchorAdd:c.useCallback(()=>d(!0),[]),onCustomAnchorRemove:c.useCallback(()=>d(!1),[]),modal:a,children:n})})};T.displayName=b;var M="PopoverAnchor",Le=c.forwardRef((t,r)=>{const{__scopePopover:n,...o}=t,i=x(M,n),s=j(n),{onCustomAnchorAdd:a,onCustomAnchorRemove:l}=i;return c.useEffect(()=>(a(),()=>l()),[a,l]),e.jsx(_,{...s,...o,ref:r})});Le.displayName=M;var H="PopoverTrigger",U=c.forwardRef((t,r)=>{const{__scopePopover:n,...o}=t,i=x(H,n),s=j(n),a=D(r,i.triggerRef),l=e.jsx(k.button,{type:"button","aria-haspopup":"dialog","aria-expanded":i.open,"aria-controls":i.contentId,"data-state":q(i.open),...o,ref:a,onClick:g(t.onClick,i.onOpenToggle)});return i.hasCustomAnchor?l:e.jsx(_,{asChild:!0,...s,children:l})});U.displayName=H;var y="PopoverPortal",[Fe,$e]=$(y,{forceMount:void 0}),V=t=>{const{__scopePopover:r,forceMount:n,children:o,container:i}=t,s=x(y,r);return e.jsx(Fe,{scope:r,forceMount:n,children:e.jsx(I,{present:n||s.open,children:e.jsx(je,{asChild:!0,container:i,children:o})})})};V.displayName=y;var v="PopoverContent",B=c.forwardRef((t,r)=>{const n=$e(v,t.__scopePopover),{forceMount:o=n.forceMount,...i}=t,s=x(v,t.__scopePopover);return e.jsx(I,{present:o||s.open,children:s.modal?e.jsx(Me,{...i,ref:r}):e.jsx(He,{...i,ref:r})})});B.displayName=v;var Te=xe("PopoverContent.RemoveScroll"),Me=c.forwardRef((t,r)=>{const n=x(v,t.__scopePopover),o=c.useRef(null),i=D(r,o),s=c.useRef(!1);return c.useEffect(()=>{const a=o.current;if(a)return Ne(a)},[]),e.jsx(be,{as:Te,allowPinchZoom:!0,children:e.jsx(Y,{...t,ref:i,trapFocus:n.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:g(t.onCloseAutoFocus,a=>{a.preventDefault(),s.current||n.triggerRef.current?.focus()}),onPointerDownOutside:g(t.onPointerDownOutside,a=>{const l=a.detail.originalEvent,u=l.button===0&&l.ctrlKey===!0,p=l.button===2||u;s.current=p},{checkForDefaultPrevented:!1}),onFocusOutside:g(t.onFocusOutside,a=>a.preventDefault(),{checkForDefaultPrevented:!1})})})}),He=c.forwardRef((t,r)=>{const n=x(v,t.__scopePopover),o=c.useRef(!1),i=c.useRef(!1);return e.jsx(Y,{...t,ref:r,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:s=>{t.onCloseAutoFocus?.(s),s.defaultPrevented||(o.current||n.triggerRef.current?.focus(),s.preventDefault()),o.current=!1,i.current=!1},onInteractOutside:s=>{t.onInteractOutside?.(s),s.defaultPrevented||(o.current=!0,s.detail.originalEvent.type==="pointerdown"&&(i.current=!0));const a=s.target;n.triggerRef.current?.contains(a)&&s.preventDefault(),s.detail.originalEvent.type==="focusin"&&i.current&&s.preventDefault()}})}),Y=c.forwardRef((t,r)=>{const{__scopePopover:n,trapFocus:o,onOpenAutoFocus:i,onCloseAutoFocus:s,disableOutsidePointerEvents:a,onEscapeKeyDown:l,onPointerDownOutside:u,onFocusOutside:p,onInteractOutside:d,...f}=t,m=x(v,n),S=j(n);return Se(),e.jsx(Ce,{asChild:!0,loop:!0,trapped:o,onMountAutoFocus:i,onUnmountAutoFocus:s,children:e.jsx(he,{asChild:!0,disableOutsidePointerEvents:a,onInteractOutside:d,onEscapeKeyDown:l,onPointerDownOutside:u,onFocusOutside:p,onDismiss:()=>m.onOpenChange(!1),children:e.jsx(ve,{"data-state":q(m.open),role:"dialog",id:m.contentId,...S,...f,ref:r,style:{...f.style,"--radix-popover-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-popover-content-available-width":"var(--radix-popper-available-width)","--radix-popover-content-available-height":"var(--radix-popper-available-height)","--radix-popover-trigger-width":"var(--radix-popper-anchor-width)","--radix-popover-trigger-height":"var(--radix-popper-anchor-height)"}})})})}),G="PopoverClose",Ue=c.forwardRef((t,r)=>{const{__scopePopover:n,...o}=t,i=x(G,n);return e.jsx(k.button,{type:"button",...o,ref:r,onClick:g(t.onClick,()=>i.onOpenChange(!1))})});Ue.displayName=G;var Ve="PopoverArrow",Be=c.forwardRef((t,r)=>{const{__scopePopover:n,...o}=t,i=j(n);return e.jsx(ge,{...i,...o,ref:r})});Be.displayName=Ve;function q(t){return t?"open":"closed"}var Ye=T,Ge=U,qe=V,Ke=B;function We({diffFilesPromise:t}){const r=P(),[n,o]=c.useState(!1),i=c.useRef(null);function s(){o(!1)}const a=r.playground?.appName;return e.jsx(e.Fragment,{children:e.jsxs(Ye,{open:n,onOpenChange:o,children:[e.jsx(Ge,{asChild:!0,children:e.jsxs("button",{className:"flex h-full items-center gap-1 border-r px-6 py-3 font-mono text-sm uppercase","aria-label":"Relevant Files",children:[e.jsx(C,{name:"Files"}),"Files"]})}),e.jsx(qe,{children:e.jsx(Ke,{ref:i,className:"slideRightContent lg:slideUpContent invert-theme z-10 select-none rounded bg-background px-9 py-8 text-foreground",align:"start",sideOffset:5,children:e.jsxs("div",{className:"launch-editor-wrapper",children:[e.jsx("strong",{className:"inline-block px-2 pb-4 font-semibold uppercase",children:"Relevant Files"}),r.problem&&r.playground?.appName!==r.problem.name?e.jsx("div",{className:"mb-2 rounded p-1 font-mono font-medium",children:e.jsx(R,{appName:r.problem.name})}):null,e.jsx("div",{id:"files",children:e.jsx(c.Suspense,{fallback:e.jsx(E,{content:"Loading diff",children:e.jsx("div",{className:"flex justify-center",children:e.jsx(C,{name:"Refresh",className:"h-8 w-8 animate-spin"})})}),children:e.jsx(z,{resolve:t,errorElement:e.jsx("div",{className:"text-foreground-destructive",children:"Something went wrong."}),children:l=>{if(!l)return e.jsx("p",{className:"text-foreground-destructive",children:"Unable to determine diff"});if(typeof l=="string")return e.jsx("p",{className:"text-foreground-destructive",children:l});if(!l.length)return e.jsx("p",{children:"No files changed"});const u=a||ENV.EPICSHOP_GITHUB_ROOT?{}:{title:"You must 'Set to Playground' before opening a file",className:"not-allowed"};return e.jsxs("ul",{...u,children:[l.length>1&&!ENV.EPICSHOP_DEPLOYED?e.jsx("div",{className:"mb-2 border-b border-b-gray-50 border-opacity-50 pb-2 font-sans",children:e.jsx(N,{appFile:l.map(p=>`${p.path},${p.line},1`),appName:"playground",onUpdate:s,children:e.jsx("p",{children:"Open All Files"})})}):null,l.map(p=>e.jsx("li",{"data-state":p.status,children:e.jsx(N,{appFile:`${p.path},${p.line},1`,appName:ENV.EPICSHOP_DEPLOYED?r.problem?.name??"playground":"playground",onUpdate:s,children:e.jsx("code",{children:p.path})})},p.path))]})}})})})]})})})]})})}function K(t,r){const n=t?.exerciseStepApp.exerciseNumber.toString().padStart(2,"0")??"00",o=t?.exerciseStepApp.stepNumber.toString().padStart(2,"0")??"00",i={problem:"💪",solution:"🏁"}[t?.type??"problem"],s=t?.[t.type]?.title??"N/A";return{emoji:i,stepNumber:o,title:s,exerciseNumber:n,exerciseTitle:t?.exerciseTitle??"Unknown exercise",workshopTitle:r,type:t?.type??"problem"}}const br=({data:t,matches:r,params:n})=>{const o=r.find(p=>p?.id==="root")?.data;if(!t||!o)return[{title:"🦉 | Error"}];const{emoji:i,stepNumber:s,title:a,exerciseNumber:l,exerciseTitle:u}=K(t);return ce({title:`${i} | ${s}. ${a} | ${l}. ${u} | ${o.workshopTitle}`,description:`${n.type} step for exercise ${l}. ${u}`,ogTitle:a,ogDescription:`${u} step ${Number(s)} ${n.type}`,instructor:o.instructor,requestInfo:o.requestInfo})},Sr=Q(function({loaderData:r}){const n=c.useRef(null),o=K(r);return te({watchPaths:[`${r.exerciseStepApp.relativePath}/README.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.jsxs("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 uppercase",children:[e.jsxs(h,{to:le(r.exerciseStepApp.exerciseNumber),className:"hover:underline",children:[o.exerciseNumber,". ",o.exerciseTitle]}),"/",e.jsxs(h,{to:".",className:"hover:underline",children:[o.stepNumber,". ",o.title," (",o.emoji," ",o.type,")"]})]}),r.problem&&r.playground?.appName!==r.problem.name?e.jsx("div",{className:"hidden md:block",children:e.jsx(R,{appName:r.problem.name})}):null]})}),e.jsxs("article",{id:r.articleId,className:"shadow-on-scrollbox flex h-full w-full max-w-none flex-1 scroll-pt-6 flex-col justify-between space-y-6 overflow-y-auto p-2 scrollbar-thin scrollbar-thumb-scrollbar sm:p-10 sm:pt-8",children:[r.exerciseStepApp.instructionsCode?e.jsx(Oe,{inBrowserBrowserRef:n}):e.jsx("div",{className:"flex h-full items-center justify-center text-lg",children:e.jsx("p",{children:"No instructions yet..."})}),e.jsxs("div",{className:"mt-auto flex justify-between",children:[r.prevStepLink?e.jsx(h,{to:r.prevStepLink.to,"aria-label":"Previous Step",prefetch:"intent",children:"← Previous"}):e.jsx("span",{}),r.nextStepLink?e.jsx(h,{to:r.nextStepLink.to,"aria-label":"Next Step",prefetch:"intent",children:"Next →"}):e.jsx("span",{})]})]},r.articleId),e.jsx(X,{elementQuery:`#${r.articleId}`},`scroll-${r.articleId}`),r.type==="solution"?e.jsx(se,{type:"step",exerciseNumber:r.exerciseStepApp.exerciseNumber,stepNumber:r.exerciseStepApp.stepNumber,className:"h-14 border-t px-6"}):null,e.jsxs("div",{className:"flex h-16 justify-between border-b-4 border-t lg:border-b-0",children:[e.jsx("div",{children:e.jsx("div",{className:"h-full",children:e.jsx(We,{diffFilesPromise:r.diffFiles})})}),e.jsx(ne,{appName:r.exerciseStepApp.name,relativePath:r.exerciseStepApp.relativePath}),e.jsx(re,{prev:r.prevStepLink?{to:r.prevStepLink.to,"aria-label":"Previous Step"}:null,next:r.nextStepLink?{to:r.nextStepLink.to,"aria-label":"Next Step"}:null})]})]}),e.jsx(J,{})]})})}),Cr=Z(function(){return e.jsx(ee,{statusHandlers:{404:()=>e.jsx("p",{children:"Sorry, we couldn't find an app here."})}})});export{Cr as ErrorBoundary,Sr as default,br as meta};
|
|
2
|
-
//# sourceMappingURL=_layout-
|
|
1
|
+
import{c as P,r as c,l as W,L as h,A as z,w as Q,a as Z,O as J}from"./chunk-QMGIS6GS-Cnm5uIBY.js";import{j as e}from"./jsx-runtime-BcujL2Aj.js";import{E as X}from"./index-BvSgrEwH.js";import{G as ee}from"./error-boundary-BDRYzb6K.js";import{N as re}from"./nav-chevrons-D9XKa1mH.js";import{u as te}from"./revalidation-ws-SaBpRC7c.js";import{M as oe,L as N,E as ne}from"./mdx-Bx84e4TR.js";import{P as se}from"./progress-B01tSSb6.js";import{S as R}from"./set-playground-BA0z3_BN.js";import{a as ie,c as O,I as C,i as ae,b as le}from"./misc-CJXb1d0J.js";import{g as ce}from"./seo-F3atQazV.js";import{E as pe}from"./epic-video-VKhk-6Mv.js";import{S as E,j as A,u as ue,R as de,d as me,e as fe,h as D,P as k,f as g,A as _,g as I,k as xe,D as he,C as ve,l as ge}from"./tooltip-Dm5SBVY5.js";import{a as Pe}from"./index-BSUgjf5i.js";import"./_-v6PvHZ90.js";import{P as je,h as Ne,R as be,u as Se,F as Ce}from"./index-DQHP10an.js";import"./debug-build-Dr14ShW9.js";import"./clsx-B-dksMZM.js";import"./index-kpJjamgW.js";import"./progress-bar-DlBnagEk.js";import"./pe-DBKBCHmz.js";import"./index-Ce8G4fcS.js";import"./online-CgtIvFKH.js";import"./loading-BQiZCXl-.js";import"./user-C6NChLGC.js";import"./workshop-config-Cx9qZQEC.js";const L=c.createContext(null);function Ee(){const t=c.useContext(L);if(!t)throw new Error("useStepContext must be used within a StepContext.Provider");return t}function we({children:t,inBrowserBrowserRef:r}){return e.jsx(L.Provider,{value:{inBrowserBrowserRef:r},children:t})}const ye={DiffLink:w,PrevDiffLink:Ae,NextDiffLink:Re,InlineFile:De,LinkToApp:_e};function Oe({inBrowserBrowserRef:t}){const r=P();return r.exerciseStepApp.instructionsCode?e.jsx(we,{inBrowserBrowserRef:t,children:e.jsx(pe,{epicVideoInfosPromise:r.epicVideoInfosPromise,children:e.jsx("div",{className:"prose dark:prose-invert sm:prose-lg",children:e.jsx(oe,{code:r.exerciseStepApp.instructionsCode,components:ye})})})}):null}function F(t,r,n){const o=new URLSearchParams(t);return n===null?o.delete(r):o.set(r,n),o}function Re({app:t=0,fullPage:r=!1,children:n}){return e.jsx(w,{app1:t,app2:t+1,fullPage:r,children:n})}function Ae({app:t=-1,fullPage:r=!1,children:n}){return e.jsx(w,{app1:t,app2:t+1,fullPage:r,children:n})}function w({app1:t=0,app2:r=1,children:n,fullPage:o=!1,to:i}){const s=P();if(!i&&!t&&!r)return e.jsx("callout-danger",{className:"notification",children:e.jsx("div",{className:"title",children:"DiffLink Error: invalid input"})});function a(d){if(typeof d=="number"){const f=s.exerciseIndex+d;return s.allApps[f]?.name}if(!d)return null;for(const{name:f,stepName:m}of s.allApps)if(d===f||d===m)return f;return null}if(i){const d=new URLSearchParams(i);t=d.get("app1"),r=d.get("app2")}const l=a(t),u=a(r);if(!l||!u)return e.jsxs("callout-danger",{className:"notification",children:[e.jsx("div",{className:"title",children:"DiffLink Error: invalid input"}),!l&&e.jsxs("div",{children:['app1: "',t,'" is not a valid app name']}),!u&&e.jsxs("div",{children:['app2: "',r,'" is not a valid app name']})]});i||(i=`app1=${l}&app2=${u}`);const p=o?`/diff?${i}`:`?${decodeURIComponent(F(new URLSearchParams,"preview",`diff&${i}`).toString())}`;return n||(n=e.jsxs("span",{children:["Go to Diff ",o?"":"Preview"," from: ",e.jsx("code",{children:l})," to:"," ",e.jsx("code",{children:u})]})),e.jsx(h,{to:p,children:n})}function De({file:t,type:r="playground",children:n=e.jsx("code",{children:t}),...o}){const i=P(),s=i[r]||i[i.type],a=e.jsxs("div",{className:"launch-editor-button-wrapper flex underline underline-offset-4",children:[n," ",e.jsx("svg",{height:24,width:24,children:e.jsx("use",{href:`${ae}#Keyboard`})})]});return ENV.EPICSHOP_DEPLOYED&&s?e.jsx("div",{className:"inline-block grow",children:e.jsx(N,{appFile:t,appName:s.name,...o,children:a})}):s?e.jsx("div",{className:"inline-block grow",children:e.jsx(N,{appFile:t,appName:s.name,...o,children:a})}):r==="playground"?e.jsx(E,{content:"You must 'Set to Playground' before opening a file",children:e.jsx("div",{className:"inline-block grow cursor-not-allowed",children:a})}):e.jsx(e.Fragment,{children:"children"})}function ke(t){return t==="problem"?"problem":t==="solution"?"solution":"playground"}function _e({to:t,children:r=e.jsx("code",{children:t.toString()}),...n}){const[o]=W(),i=`?${F(o,"pathname",t.toString()).toString()}`,s=P(),a=ke(o.get("preview")),l=Pe(),u=s[a],p=u?.dev.type==="script"?ie({domain:l.domain,port:u.dev.portNumber}):s.playground?.dev.type==="browser"?s.playground.dev.pathname:null,{inBrowserBrowserRef:d}=Ee(),f=p?p.slice(0,-1)+t.toString():null;return e.jsxs("div",{className:"inline-flex items-center justify-between gap-1",children:[e.jsx(h,{to:i,...n,className:O(n.className,{"cursor-not-allowed":ENV.EPICSHOP_DEPLOYED}),title:ENV.EPICSHOP_DEPLOYED?"Cannot link to app in deployed version":void 0,onClick:m=>{ENV.EPICSHOP_DEPLOYED&&m.preventDefault(),n.onClick?.(m),d.current?.handleExtrnalNavigation(t.toString())},children:r}),f?e.jsx(E,{content:"Open in new tab",children:e.jsx("a",{href:f,target:"_blank",rel:"noreferrer",className:O("flex aspect-square items-center justify-center",{"cursor-not-allowed":ENV.EPICSHOP_DEPLOYED}),title:ENV.EPICSHOP_DEPLOYED?"Cannot link to app in deployed version":"Open in new tab",onClick:m=>{ENV.EPICSHOP_DEPLOYED&&m.preventDefault()},children:e.jsx(C,{name:"ExternalLink"})})}):null]})}var b="Popover",[$,Nr]=me(b,[A]),j=A(),[Ie,x]=$(b),T=t=>{const{__scopePopover:r,children:n,open:o,defaultOpen:i,onOpenChange:s,modal:a=!1}=t,l=j(r),u=c.useRef(null),[p,d]=c.useState(!1),[f,m]=ue({prop:o,defaultProp:i??!1,onChange:s,caller:b});return e.jsx(de,{...l,children:e.jsx(Ie,{scope:r,contentId:fe(),triggerRef:u,open:f,onOpenChange:m,onOpenToggle:c.useCallback(()=>m(S=>!S),[m]),hasCustomAnchor:p,onCustomAnchorAdd:c.useCallback(()=>d(!0),[]),onCustomAnchorRemove:c.useCallback(()=>d(!1),[]),modal:a,children:n})})};T.displayName=b;var M="PopoverAnchor",Le=c.forwardRef((t,r)=>{const{__scopePopover:n,...o}=t,i=x(M,n),s=j(n),{onCustomAnchorAdd:a,onCustomAnchorRemove:l}=i;return c.useEffect(()=>(a(),()=>l()),[a,l]),e.jsx(_,{...s,...o,ref:r})});Le.displayName=M;var H="PopoverTrigger",U=c.forwardRef((t,r)=>{const{__scopePopover:n,...o}=t,i=x(H,n),s=j(n),a=D(r,i.triggerRef),l=e.jsx(k.button,{type:"button","aria-haspopup":"dialog","aria-expanded":i.open,"aria-controls":i.contentId,"data-state":q(i.open),...o,ref:a,onClick:g(t.onClick,i.onOpenToggle)});return i.hasCustomAnchor?l:e.jsx(_,{asChild:!0,...s,children:l})});U.displayName=H;var y="PopoverPortal",[Fe,$e]=$(y,{forceMount:void 0}),V=t=>{const{__scopePopover:r,forceMount:n,children:o,container:i}=t,s=x(y,r);return e.jsx(Fe,{scope:r,forceMount:n,children:e.jsx(I,{present:n||s.open,children:e.jsx(je,{asChild:!0,container:i,children:o})})})};V.displayName=y;var v="PopoverContent",B=c.forwardRef((t,r)=>{const n=$e(v,t.__scopePopover),{forceMount:o=n.forceMount,...i}=t,s=x(v,t.__scopePopover);return e.jsx(I,{present:o||s.open,children:s.modal?e.jsx(Me,{...i,ref:r}):e.jsx(He,{...i,ref:r})})});B.displayName=v;var Te=xe("PopoverContent.RemoveScroll"),Me=c.forwardRef((t,r)=>{const n=x(v,t.__scopePopover),o=c.useRef(null),i=D(r,o),s=c.useRef(!1);return c.useEffect(()=>{const a=o.current;if(a)return Ne(a)},[]),e.jsx(be,{as:Te,allowPinchZoom:!0,children:e.jsx(Y,{...t,ref:i,trapFocus:n.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:g(t.onCloseAutoFocus,a=>{a.preventDefault(),s.current||n.triggerRef.current?.focus()}),onPointerDownOutside:g(t.onPointerDownOutside,a=>{const l=a.detail.originalEvent,u=l.button===0&&l.ctrlKey===!0,p=l.button===2||u;s.current=p},{checkForDefaultPrevented:!1}),onFocusOutside:g(t.onFocusOutside,a=>a.preventDefault(),{checkForDefaultPrevented:!1})})})}),He=c.forwardRef((t,r)=>{const n=x(v,t.__scopePopover),o=c.useRef(!1),i=c.useRef(!1);return e.jsx(Y,{...t,ref:r,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:s=>{t.onCloseAutoFocus?.(s),s.defaultPrevented||(o.current||n.triggerRef.current?.focus(),s.preventDefault()),o.current=!1,i.current=!1},onInteractOutside:s=>{t.onInteractOutside?.(s),s.defaultPrevented||(o.current=!0,s.detail.originalEvent.type==="pointerdown"&&(i.current=!0));const a=s.target;n.triggerRef.current?.contains(a)&&s.preventDefault(),s.detail.originalEvent.type==="focusin"&&i.current&&s.preventDefault()}})}),Y=c.forwardRef((t,r)=>{const{__scopePopover:n,trapFocus:o,onOpenAutoFocus:i,onCloseAutoFocus:s,disableOutsidePointerEvents:a,onEscapeKeyDown:l,onPointerDownOutside:u,onFocusOutside:p,onInteractOutside:d,...f}=t,m=x(v,n),S=j(n);return Se(),e.jsx(Ce,{asChild:!0,loop:!0,trapped:o,onMountAutoFocus:i,onUnmountAutoFocus:s,children:e.jsx(he,{asChild:!0,disableOutsidePointerEvents:a,onInteractOutside:d,onEscapeKeyDown:l,onPointerDownOutside:u,onFocusOutside:p,onDismiss:()=>m.onOpenChange(!1),children:e.jsx(ve,{"data-state":q(m.open),role:"dialog",id:m.contentId,...S,...f,ref:r,style:{...f.style,"--radix-popover-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-popover-content-available-width":"var(--radix-popper-available-width)","--radix-popover-content-available-height":"var(--radix-popper-available-height)","--radix-popover-trigger-width":"var(--radix-popper-anchor-width)","--radix-popover-trigger-height":"var(--radix-popper-anchor-height)"}})})})}),G="PopoverClose",Ue=c.forwardRef((t,r)=>{const{__scopePopover:n,...o}=t,i=x(G,n);return e.jsx(k.button,{type:"button",...o,ref:r,onClick:g(t.onClick,()=>i.onOpenChange(!1))})});Ue.displayName=G;var Ve="PopoverArrow",Be=c.forwardRef((t,r)=>{const{__scopePopover:n,...o}=t,i=j(n);return e.jsx(ge,{...i,...o,ref:r})});Be.displayName=Ve;function q(t){return t?"open":"closed"}var Ye=T,Ge=U,qe=V,Ke=B;function We({diffFilesPromise:t}){const r=P(),[n,o]=c.useState(!1),i=c.useRef(null);function s(){o(!1)}const a=r.playground?.appName;return e.jsx(e.Fragment,{children:e.jsxs(Ye,{open:n,onOpenChange:o,children:[e.jsx(Ge,{asChild:!0,children:e.jsxs("button",{className:"flex h-full items-center gap-1 border-r px-6 py-3 font-mono text-sm uppercase","aria-label":"Relevant Files",children:[e.jsx(C,{name:"Files"}),"Files"]})}),e.jsx(qe,{children:e.jsx(Ke,{ref:i,className:"slideRightContent lg:slideUpContent invert-theme z-10 select-none rounded bg-background px-9 py-8 text-foreground",align:"start",sideOffset:5,children:e.jsxs("div",{className:"launch-editor-wrapper",children:[e.jsx("strong",{className:"inline-block px-2 pb-4 font-semibold uppercase",children:"Relevant Files"}),r.problem&&r.playground?.appName!==r.problem.name?e.jsx("div",{className:"mb-2 rounded p-1 font-mono font-medium",children:e.jsx(R,{appName:r.problem.name})}):null,e.jsx("div",{id:"files",children:e.jsx(c.Suspense,{fallback:e.jsx(E,{content:"Loading diff",children:e.jsx("div",{className:"flex justify-center",children:e.jsx(C,{name:"Refresh",className:"h-8 w-8 animate-spin"})})}),children:e.jsx(z,{resolve:t,errorElement:e.jsx("div",{className:"text-foreground-destructive",children:"Something went wrong."}),children:l=>{if(!l)return e.jsx("p",{className:"text-foreground-destructive",children:"Unable to determine diff"});if(typeof l=="string")return e.jsx("p",{className:"text-foreground-destructive",children:l});if(!l.length)return e.jsx("p",{children:"No files changed"});const u=a||ENV.EPICSHOP_GITHUB_ROOT?{}:{title:"You must 'Set to Playground' before opening a file",className:"not-allowed"};return e.jsxs("ul",{...u,children:[l.length>1&&!ENV.EPICSHOP_DEPLOYED?e.jsx("div",{className:"mb-2 border-b border-b-gray-50 border-opacity-50 pb-2 font-sans",children:e.jsx(N,{appFile:l.map(p=>`${p.path},${p.line},1`),appName:"playground",onUpdate:s,children:e.jsx("p",{children:"Open All Files"})})}):null,l.map(p=>e.jsx("li",{"data-state":p.status,children:e.jsx(N,{appFile:`${p.path},${p.line},1`,appName:ENV.EPICSHOP_DEPLOYED?r.problem?.name??"playground":"playground",onUpdate:s,children:e.jsx("code",{children:p.path})})},p.path))]})}})})})]})})})]})})}function K(t,r){const n=t?.exerciseStepApp.exerciseNumber.toString().padStart(2,"0")??"00",o=t?.exerciseStepApp.stepNumber.toString().padStart(2,"0")??"00",i={problem:"💪",solution:"🏁"}[t?.type??"problem"],s=t?.[t.type]?.title??"N/A";return{emoji:i,stepNumber:o,title:s,exerciseNumber:n,exerciseTitle:t?.exerciseTitle??"Unknown exercise",workshopTitle:r,type:t?.type??"problem"}}const br=({data:t,matches:r,params:n})=>{const o=r.find(p=>p?.id==="root")?.data;if(!t||!o)return[{title:"🦉 | Error"}];const{emoji:i,stepNumber:s,title:a,exerciseNumber:l,exerciseTitle:u}=K(t);return ce({title:`${i} | ${s}. ${a} | ${l}. ${u} | ${o.workshopTitle}`,description:`${n.type} step for exercise ${l}. ${u}`,ogTitle:a,ogDescription:`${u} step ${Number(s)} ${n.type}`,instructor:o.instructor,requestInfo:o.requestInfo})},Sr=Q(function({loaderData:r}){const n=c.useRef(null),o=K(r);return te({watchPaths:[`${r.exerciseStepApp.relativePath}/README.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.jsxs("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 uppercase",children:[e.jsxs(h,{to:le(r.exerciseStepApp.exerciseNumber),className:"hover:underline",children:[o.exerciseNumber,". ",o.exerciseTitle]}),"/",e.jsxs(h,{to:".",className:"hover:underline",children:[o.stepNumber,". ",o.title," (",o.emoji," ",o.type,")"]})]}),r.problem&&r.playground?.appName!==r.problem.name?e.jsx("div",{className:"hidden md:block",children:e.jsx(R,{appName:r.problem.name})}):null]})}),e.jsxs("article",{id:r.articleId,className:"shadow-on-scrollbox flex h-full w-full max-w-none flex-1 scroll-pt-6 flex-col justify-between space-y-6 overflow-y-auto p-2 scrollbar-thin scrollbar-thumb-scrollbar sm:p-10 sm:pt-8",children:[r.exerciseStepApp.instructionsCode?e.jsx(Oe,{inBrowserBrowserRef:n}):e.jsx("div",{className:"flex h-full items-center justify-center text-lg",children:e.jsx("p",{children:"No instructions yet..."})}),e.jsxs("div",{className:"mt-auto flex justify-between",children:[r.prevStepLink?e.jsx(h,{to:r.prevStepLink.to,"aria-label":"Previous Step",prefetch:"intent",children:"← Previous"}):e.jsx("span",{}),r.nextStepLink?e.jsx(h,{to:r.nextStepLink.to,"aria-label":"Next Step",prefetch:"intent",children:"Next →"}):e.jsx("span",{})]})]},r.articleId),e.jsx(X,{elementQuery:`#${r.articleId}`},`scroll-${r.articleId}`),r.type==="solution"?e.jsx(se,{type:"step",exerciseNumber:r.exerciseStepApp.exerciseNumber,stepNumber:r.exerciseStepApp.stepNumber,className:"h-14 border-t px-6"}):null,e.jsxs("div",{className:"flex h-16 justify-between border-b-4 border-t lg:border-b-0",children:[e.jsx("div",{children:e.jsx("div",{className:"h-full",children:e.jsx(We,{diffFilesPromise:r.diffFiles})})}),e.jsx(ne,{appName:r.exerciseStepApp.name,relativePath:r.exerciseStepApp.relativePath}),e.jsx(re,{prev:r.prevStepLink?{to:r.prevStepLink.to,"aria-label":"Previous Step"}:null,next:r.nextStepLink?{to:r.nextStepLink.to,"aria-label":"Next Step"}:null})]})]}),e.jsx(J,{})]})})}),Cr=Z(function(){return e.jsx(ee,{statusHandlers:{404:()=>e.jsx("p",{children:"Sorry, we couldn't find an app here."})}})});export{Cr as ErrorBoundary,Sr as default,br as meta};
|
|
2
|
+
//# sourceMappingURL=_layout-DKmpru-v.js.map
|