@epic-web/workshop-app 5.28.0 → 5.29.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/client/assets/_-DTLUa7j2.js +2 -0
- package/build/client/assets/_-DTLUa7j2.js.map +1 -0
- package/build/client/assets/{_basePickBy-lB0X5x6U.js → _basePickBy-Bkju64MX.js} +2 -2
- package/build/client/assets/{_basePickBy-lB0X5x6U.js.map → _basePickBy-Bkju64MX.js.map} +1 -1
- package/build/client/assets/{_baseUniq-BOjGYEEK.js → _baseUniq-Cp1g4BpN.js} +2 -2
- package/build/client/assets/{_baseUniq-BOjGYEEK.js.map → _baseUniq-Cp1g4BpN.js.map} +1 -1
- package/build/client/assets/_exerciseNumber-Co7M7Ztw.js +2 -0
- package/build/client/assets/_exerciseNumber-Co7M7Ztw.js.map +1 -0
- package/build/client/assets/_exerciseNumber_._stepNumber-Don1A9mU.js +2 -0
- package/build/client/assets/_exerciseNumber_._stepNumber-Don1A9mU.js.map +1 -0
- package/build/client/assets/_exerciseNumber_.finished-BqsavTTe.js +2 -0
- package/build/client/assets/_exerciseNumber_.finished-BqsavTTe.js.map +1 -0
- package/build/client/assets/_layout-BFto7KzZ.js +2 -0
- package/build/client/assets/_layout-BFto7KzZ.js.map +1 -0
- package/build/client/assets/_layout-BvOre76Q.js +2 -0
- package/build/client/assets/_layout-BvOre76Q.js.map +1 -0
- package/build/client/assets/_layout-CSP6lWdg.js +2 -0
- package/build/client/assets/_layout-CSP6lWdg.js.map +1 -0
- package/build/client/assets/_layout-DDOZBbUH.js +6 -0
- package/build/client/assets/_layout-DDOZBbUH.js.map +1 -0
- package/build/client/assets/accordion-BNzI0wOK.js +2 -0
- package/build/client/assets/{accordion-CpiLc1m2.js.map → accordion-BNzI0wOK.js.map} +1 -1
- package/build/client/assets/account-2uOW4wHE.js +2 -0
- package/build/client/assets/account-2uOW4wHE.js.map +1 -0
- package/build/client/assets/app-DfAmumll.js +2 -0
- package/build/client/assets/app-DfAmumll.js.map +1 -0
- package/build/client/assets/{arc-DmQZ2TPB.js → arc-BgUWL_JM.js} +2 -2
- package/build/client/assets/{arc-DmQZ2TPB.js.map → arc-BgUWL_JM.js.map} +1 -1
- package/build/client/assets/architectureDiagram-IEHRJDOE-VEDL5YJR.js +37 -0
- package/build/client/assets/{architectureDiagram-IEHRJDOE-BqPvrjLh.js.map → architectureDiagram-IEHRJDOE-VEDL5YJR.js.map} +1 -1
- package/build/client/assets/{blockDiagram-JOT3LUYC-D8OFd78i.js → blockDiagram-JOT3LUYC-CJojWhFE.js} +3 -3
- package/build/client/assets/{blockDiagram-JOT3LUYC-D8OFd78i.js.map → blockDiagram-JOT3LUYC-CJojWhFE.js.map} +1 -1
- package/build/client/assets/button-DRpue1NG.js +2 -0
- package/build/client/assets/button-DRpue1NG.js.map +1 -0
- package/build/client/assets/{c4Diagram-VJAJSXHY-DjROjsr_.js → c4Diagram-VJAJSXHY-CDiBL4DZ.js} +3 -3
- package/build/client/assets/{c4Diagram-VJAJSXHY-DjROjsr_.js.map → c4Diagram-VJAJSXHY-CDiBL4DZ.js.map} +1 -1
- package/build/client/assets/channel-CAodiiwJ.js +2 -0
- package/build/client/assets/{channel-DnqeaSfB.js.map → channel-CAodiiwJ.js.map} +1 -1
- package/build/client/assets/{chunk-4BMEZGHF-CNL-bCj2.js → chunk-4BMEZGHF-Dn8dm6h4.js} +2 -2
- package/build/client/assets/{chunk-4BMEZGHF-CNL-bCj2.js.map → chunk-4BMEZGHF-Dn8dm6h4.js.map} +1 -1
- package/build/client/assets/{chunk-A2AXSNBT-PeSyIKDm.js → chunk-A2AXSNBT-4MnudWit.js} +2 -2
- package/build/client/assets/{chunk-A2AXSNBT-PeSyIKDm.js.map → chunk-A2AXSNBT-4MnudWit.js.map} +1 -1
- package/build/client/assets/{chunk-AEK57VVT-B1JqGB_s.js → chunk-AEK57VVT-CqDnkZ4u.js} +2 -2
- package/build/client/assets/{chunk-AEK57VVT-B1JqGB_s.js.map → chunk-AEK57VVT-CqDnkZ4u.js.map} +1 -1
- package/build/client/assets/{chunk-D6G4REZN-C1e0nCkL.js → chunk-D6G4REZN-Brt3as5d.js} +2 -2
- package/build/client/assets/{chunk-D6G4REZN-C1e0nCkL.js.map → chunk-D6G4REZN-Brt3as5d.js.map} +1 -1
- package/build/client/assets/chunk-QMGIS6GS-CTjj1G71.js +44 -0
- package/build/client/assets/chunk-QMGIS6GS-CTjj1G71.js.map +1 -0
- package/build/client/assets/{chunk-RZ5BOZE2-D5pIwNeA.js → chunk-RZ5BOZE2-DRDeFo9p.js} +2 -2
- package/build/client/assets/{chunk-RZ5BOZE2-D5pIwNeA.js.map → chunk-RZ5BOZE2-DRDeFo9p.js.map} +1 -1
- package/build/client/assets/{chunk-XZIHB7SX-FbrNggxP.js → chunk-XZIHB7SX-jEJwVQJf.js} +2 -2
- package/build/client/assets/{chunk-XZIHB7SX-FbrNggxP.js.map → chunk-XZIHB7SX-jEJwVQJf.js.map} +1 -1
- package/build/client/assets/classDiagram-GIVACNV2-H_7kh---.js +2 -0
- package/build/client/assets/{classDiagram-GIVACNV2-cXWx-aYi.js.map → classDiagram-GIVACNV2-H_7kh---.js.map} +1 -1
- package/build/client/assets/classDiagram-v2-COTLJTTW-H_7kh---.js +2 -0
- package/build/client/assets/{classDiagram-v2-COTLJTTW-cXWx-aYi.js.map → classDiagram-v2-COTLJTTW-H_7kh---.js.map} +1 -1
- package/build/client/assets/clone-DRQ0Dnbp.js +2 -0
- package/build/client/assets/{clone-Bj8ANPCv.js.map → clone-DRQ0Dnbp.js.map} +1 -1
- package/build/client/assets/dagre-OKDRZEBW-BPnUPPO5.js +5 -0
- package/build/client/assets/{dagre-OKDRZEBW-DT9ZQRxf.js.map → dagre-OKDRZEBW-BPnUPPO5.js.map} +1 -1
- package/build/client/assets/diagram-SSKATNLV-Bh_ZXdjr.js +44 -0
- package/build/client/assets/{diagram-SSKATNLV-CcKCni9R.js.map → diagram-SSKATNLV-Bh_ZXdjr.js.map} +1 -1
- package/build/client/assets/diagram-VNBRO52H-D5zqYvJa.js +25 -0
- package/build/client/assets/{diagram-VNBRO52H-DWoRAiqO.js.map → diagram-VNBRO52H-D5zqYvJa.js.map} +1 -1
- package/build/client/assets/diff-CQ7A0nZj.js +2 -0
- package/build/client/assets/diff-CQ7A0nZj.js.map +1 -0
- package/build/client/assets/{diff-D5_VwPLF.js → diff-CtGU9cxI.js} +2 -2
- package/build/client/assets/diff-CtGU9cxI.js.map +1 -0
- package/build/client/assets/discord-91JJKnJ5.js +2 -0
- package/build/client/assets/discord-91JJKnJ5.js.map +1 -0
- package/build/client/assets/discord-D4appJa-.js +2 -0
- package/build/client/assets/discord-D4appJa-.js.map +1 -0
- package/build/client/assets/entry.client-uKxtCCau.js +35 -0
- package/build/client/assets/entry.client-uKxtCCau.js.map +1 -0
- package/build/client/assets/{epic-video-CmlkW6Rw.js → epic-video-D_3otytp.js} +3 -3
- package/build/client/assets/{epic-video-CmlkW6Rw.js.map → epic-video-D_3otytp.js.map} +1 -1
- package/build/client/assets/{erDiagram-Q7BY3M3F-DXkEmvKk.js → erDiagram-Q7BY3M3F-BxueSNDf.js} +3 -3
- package/build/client/assets/{erDiagram-Q7BY3M3F-DXkEmvKk.js.map → erDiagram-Q7BY3M3F-BxueSNDf.js.map} +1 -1
- package/build/client/assets/error-boundary-BLyHIxcu.js +2 -0
- package/build/client/assets/error-boundary-BLyHIxcu.js.map +1 -0
- package/build/client/assets/finished-BiOz59BB.js +2 -0
- package/build/client/assets/finished-BiOz59BB.js.map +1 -0
- package/build/client/assets/{flowDiagram-4HSFHLVR-DCodZaNW.js → flowDiagram-4HSFHLVR-CfL3E-FD.js} +3 -3
- package/build/client/assets/{flowDiagram-4HSFHLVR-DCodZaNW.js.map → flowDiagram-4HSFHLVR-CfL3E-FD.js.map} +1 -1
- package/build/client/assets/ganttDiagram-APWFNJXF-DxEqrjXE.js +258 -0
- package/build/client/assets/{ganttDiagram-APWFNJXF-TfB6wYvN.js.map → ganttDiagram-APWFNJXF-DxEqrjXE.js.map} +1 -1
- package/build/client/assets/gitGraphDiagram-7IBYFJ6S-csni0XOM.js +66 -0
- package/build/client/assets/{gitGraphDiagram-7IBYFJ6S-D2NQnQv2.js.map → gitGraphDiagram-7IBYFJ6S-csni0XOM.js.map} +1 -1
- package/build/client/assets/{graph-eJUngNSH.js → graph-DiSezMy_.js} +2 -2
- package/build/client/assets/{graph-eJUngNSH.js.map → graph-DiSezMy_.js.map} +1 -1
- package/build/client/assets/index-AKpqKc27.js +2 -0
- package/build/client/assets/index-AKpqKc27.js.map +1 -0
- package/build/client/assets/index-BGtlU-cD.js +2 -0
- package/build/client/assets/index-BGtlU-cD.js.map +1 -0
- package/build/client/assets/index-BP1ceC2h.js +10 -0
- package/build/client/assets/index-BP1ceC2h.js.map +1 -0
- package/build/client/assets/index-BSJLLJJ3.js +2 -0
- package/build/client/assets/index-BSJLLJJ3.js.map +1 -0
- package/build/client/assets/index-C0Fh_zu0.js +36 -0
- package/build/client/assets/{index-DLC5u33j.js.map → index-C0Fh_zu0.js.map} +1 -1
- package/build/client/assets/index-Co8qgD4k.js +2 -0
- package/build/client/assets/{index-BmMpCvYx.js.map → index-Co8qgD4k.js.map} +1 -1
- package/build/client/assets/index-D0dQzJhy.js +2 -0
- package/build/client/assets/index-D0dQzJhy.js.map +1 -0
- package/build/client/assets/index-DJsDENYs.js +42 -0
- package/build/client/assets/{index-Do-KWT0a.js.map → index-DJsDENYs.js.map} +1 -1
- package/build/client/assets/index-DWV7tDz3.js +3 -0
- package/build/client/assets/{index-DvQyydjU.js.map → index-DWV7tDz3.js.map} +1 -1
- package/build/client/assets/infoDiagram-PH2N3AL5-Dr2v4fFk.js +3 -0
- package/build/client/assets/{infoDiagram-PH2N3AL5-D-nEozcT.js.map → infoDiagram-PH2N3AL5-Dr2v4fFk.js.map} +1 -1
- package/build/client/assets/{journeyDiagram-U35MCT3I-Dc8g8jIX.js → journeyDiagram-U35MCT3I-iX4x5HVK.js} +3 -3
- package/build/client/assets/{journeyDiagram-U35MCT3I-Dc8g8jIX.js.map → journeyDiagram-U35MCT3I-iX4x5HVK.js.map} +1 -1
- package/build/client/assets/jsx-runtime-BjG_zV1W.js +10 -0
- package/build/client/assets/jsx-runtime-BjG_zV1W.js.map +1 -0
- package/build/client/assets/{kanban-definition-NDS4AKOZ-BwwcaZU2.js → kanban-definition-NDS4AKOZ-BwP5uDj3.js} +3 -3
- package/build/client/assets/{kanban-definition-NDS4AKOZ-BwwcaZU2.js.map → kanban-definition-NDS4AKOZ-BwP5uDj3.js.map} +1 -1
- package/build/client/assets/l-CVlzRdDg.js +2 -0
- package/build/client/assets/l-CVlzRdDg.js.map +1 -0
- package/build/client/assets/{layout-BAeq0-Is.js → layout-X8Y3Cf_B.js} +2 -2
- package/build/client/assets/{layout-BAeq0-Is.js.map → layout-X8Y3Cf_B.js.map} +1 -1
- package/build/client/assets/{linear-LWRPSVMz.js → linear-1DrdUlCY.js} +2 -2
- package/build/client/assets/{linear-LWRPSVMz.js.map → linear-1DrdUlCY.js.map} +1 -1
- package/build/client/assets/loading-CXEQXwx8.js +2 -0
- package/build/client/assets/{loading-b1FV2pQh.js.map → loading-CXEQXwx8.js.map} +1 -1
- package/build/client/assets/login-CaIyI5Cd.js +2 -0
- package/build/client/assets/login-CaIyI5Cd.js.map +1 -0
- package/build/client/assets/manifest-953eedfa.js +1 -0
- package/build/client/assets/mdx-DD5XL3ew.js +3 -0
- package/build/client/assets/mdx-DD5XL3ew.js.map +1 -0
- package/build/client/assets/{mermaid.core-q9C-HfFu.js → mermaid.core-D4QVSd3D.js} +5 -5
- package/build/client/assets/{mermaid.core-q9C-HfFu.js.map → mermaid.core-D4QVSd3D.js.map} +1 -1
- package/build/client/assets/mindmap-definition-ALO5MXBD-tl5KlWaB.js +96 -0
- package/build/client/assets/{mindmap-definition-ALO5MXBD-BhzLy0Zl.js.map → mindmap-definition-ALO5MXBD-tl5KlWaB.js.map} +1 -1
- package/build/client/assets/misc-yfWFSwMN.js +2 -0
- package/build/client/assets/{misc-2sBiisF5.js.map → misc-yfWFSwMN.js.map} +1 -1
- package/build/client/assets/nav-chevrons-CokHxUSB.js +2 -0
- package/build/client/assets/nav-chevrons-CokHxUSB.js.map +1 -0
- package/build/client/assets/onboarding-DyrGJaVn.js +2 -0
- package/build/client/assets/onboarding-DyrGJaVn.js.map +1 -0
- package/build/client/assets/online-CFV79-RX.js +2 -0
- package/build/client/assets/{online-DZKJk3C2.js.map → online-CFV79-RX.js.map} +1 -1
- package/build/client/assets/pe-C53l4u-6.js +2 -0
- package/build/client/assets/{pe-BShc2dvc.js.map → pe-C53l4u-6.js.map} +1 -1
- package/build/client/assets/pieDiagram-IB7DONF6-y5DqPNpS.js +31 -0
- package/build/client/assets/{pieDiagram-IB7DONF6-CaTGj8RH.js.map → pieDiagram-IB7DONF6-y5DqPNpS.js.map} +1 -1
- package/build/client/assets/preferences-C2zlOkAS.js +2 -0
- package/build/client/assets/preferences-C2zlOkAS.js.map +1 -0
- package/build/client/assets/{presence-C9bUSihT.js → presence-BoFXYAd7.js} +3 -3
- package/build/client/assets/{presence-C9bUSihT.js.map → presence-BoFXYAd7.js.map} +1 -1
- package/build/client/assets/preview-CE_VqYU4.js +2 -0
- package/build/client/assets/preview-CE_VqYU4.js.map +1 -0
- package/build/client/assets/product-TKJyOyif.js +2 -0
- package/build/client/assets/{product-DJOWNuL-.js.map → product-TKJyOyif.js.map} +1 -1
- package/build/client/assets/progress-CtGAFS2P.js +2 -0
- package/build/client/assets/{progress-BJ4ADF-s.js.map → progress-CtGAFS2P.js.map} +1 -1
- package/build/client/assets/progress-bar-DTYORRrG.js +2 -0
- package/build/client/assets/progress-bar-DTYORRrG.js.map +1 -0
- package/build/client/assets/{quadrantDiagram-7GDLP6J5-B4Od6z6p.js → quadrantDiagram-7GDLP6J5-ymq7Ot51.js} +3 -3
- package/build/client/assets/{quadrantDiagram-7GDLP6J5-B4Od6z6p.js.map → quadrantDiagram-7GDLP6J5-ymq7Ot51.js.map} +1 -1
- package/build/client/assets/{radar-MK3ICKWK-CENXhI0E.js → radar-MK3ICKWK-B8xuvUo7.js} +2 -2
- package/build/client/assets/{radar-MK3ICKWK-CENXhI0E.js.map → radar-MK3ICKWK-B8xuvUo7.js.map} +1 -1
- package/build/client/assets/{requirementDiagram-KVF5MWMF-_w0WuUxy.js → requirementDiagram-KVF5MWMF-B4D4Pi12.js} +3 -3
- package/build/client/assets/{requirementDiagram-KVF5MWMF-_w0WuUxy.js.map → requirementDiagram-KVF5MWMF-B4D4Pi12.js.map} +1 -1
- package/build/client/assets/revalidation-ws-89FLt73b.js +2 -0
- package/build/client/assets/revalidation-ws-89FLt73b.js.map +1 -0
- package/build/client/assets/root-Dd9--OJ3.js +2 -0
- package/build/client/assets/root-Dd9--OJ3.js.map +1 -0
- package/build/client/assets/sankeyDiagram-QLVOVGJD-BAY-vMZj.js +11 -0
- package/build/client/assets/{sankeyDiagram-QLVOVGJD-Bt8556P1.js.map → sankeyDiagram-QLVOVGJD-BAY-vMZj.js.map} +1 -1
- package/build/client/assets/{sequenceDiagram-X6HHIX6F-y2-oW3Ob.js → sequenceDiagram-X6HHIX6F-CDjFTgBk.js} +3 -3
- package/build/client/assets/{sequenceDiagram-X6HHIX6F-y2-oW3Ob.js.map → sequenceDiagram-X6HHIX6F-CDjFTgBk.js.map} +1 -1
- package/build/client/assets/set-playground-DtZ5ki7i.js +2 -0
- package/build/client/assets/set-playground-DtZ5ki7i.js.map +1 -0
- package/build/client/assets/stateDiagram-DGXRK772-DFekjeUZ.js +2 -0
- package/build/client/assets/{stateDiagram-DGXRK772-B3BuD15b.js.map → stateDiagram-DGXRK772-DFekjeUZ.js.map} +1 -1
- package/build/client/assets/stateDiagram-v2-YXO3MK2T-CSkUdkOW.js +2 -0
- package/build/client/assets/{stateDiagram-v2-YXO3MK2T-BzFxWpqR.js.map → stateDiagram-v2-YXO3MK2T-CSkUdkOW.js.map} +1 -1
- package/build/client/assets/support-drzs9wuf.js +2 -0
- package/build/client/assets/support-drzs9wuf.js.map +1 -0
- package/build/client/assets/test-psaYrMGK.js +2 -0
- package/build/client/assets/test-psaYrMGK.js.map +1 -0
- package/build/client/assets/{tests-B1ak2CDI.js → tests-7juFXgcY.js} +3 -3
- package/build/client/assets/tests-7juFXgcY.js.map +1 -0
- package/build/client/assets/{timeline-definition-BDJGKUSR-DUa2yfAV.js → timeline-definition-BDJGKUSR-1WjIsnZH.js} +3 -3
- package/build/client/assets/{timeline-definition-BDJGKUSR-DUa2yfAV.js.map → timeline-definition-BDJGKUSR-1WjIsnZH.js.map} +1 -1
- package/build/client/assets/tooltip-C6xKzWST.js +2 -0
- package/build/client/assets/{tooltip-Bzd6O8vq.js.map → tooltip-C6xKzWST.js.map} +1 -1
- package/build/client/assets/use-event-source-B411g-uF.js +2 -0
- package/build/client/assets/{use-event-source-Dar8h_B8.js.map → use-event-source-B411g-uF.js.map} +1 -1
- package/build/client/assets/user-Dmcddqge.js +2 -0
- package/build/client/assets/user-Dmcddqge.js.map +1 -0
- package/build/client/assets/version-BAECczgY.js +2 -0
- package/build/client/assets/version-BAECczgY.js.map +1 -0
- package/build/client/assets/workshop-config-gFAnGhSV.js +2 -0
- package/build/client/assets/workshop-config-gFAnGhSV.js.map +1 -0
- package/build/client/assets/{xychartDiagram-VJFVF3MP-JztjcODi.js → xychartDiagram-VJFVF3MP-Cp8GqXc6.js} +3 -3
- package/build/client/assets/{xychartDiagram-VJFVF3MP-JztjcODi.js.map → xychartDiagram-VJFVF3MP-Cp8GqXc6.js.map} +1 -1
- package/build/server/index.js +4439 -4072
- package/build/server/index.js.map +1 -1
- package/dist/server/index.js +2 -2
- package/package.json +13 -13
- package/build/client/assets/_-BaHOmd8F.js +0 -2
- package/build/client/assets/_-BaHOmd8F.js.map +0 -1
- package/build/client/assets/_exerciseNumber-Dqi7TgL9.js +0 -2
- package/build/client/assets/_exerciseNumber-Dqi7TgL9.js.map +0 -1
- package/build/client/assets/_exerciseNumber_._stepNumber-DoOFEk-P.js +0 -2
- package/build/client/assets/_exerciseNumber_._stepNumber-DoOFEk-P.js.map +0 -1
- package/build/client/assets/_exerciseNumber_.finished-C5m6M0gM.js +0 -2
- package/build/client/assets/_exerciseNumber_.finished-C5m6M0gM.js.map +0 -1
- package/build/client/assets/_layout-B_BIIcpM.js +0 -2
- package/build/client/assets/_layout-B_BIIcpM.js.map +0 -1
- package/build/client/assets/_layout-B_NrRv0S.js +0 -6
- package/build/client/assets/_layout-B_NrRv0S.js.map +0 -1
- package/build/client/assets/_layout-D7_F6t3x.js +0 -2
- package/build/client/assets/_layout-D7_F6t3x.js.map +0 -1
- package/build/client/assets/_layout-QRe2q83m.js +0 -2
- package/build/client/assets/_layout-QRe2q83m.js.map +0 -1
- package/build/client/assets/accordion-CpiLc1m2.js +0 -2
- package/build/client/assets/account-CbFDiVNd.js +0 -2
- package/build/client/assets/account-CbFDiVNd.js.map +0 -1
- package/build/client/assets/app-BYSDu0vh.js +0 -2
- package/build/client/assets/app-BYSDu0vh.js.map +0 -1
- package/build/client/assets/architectureDiagram-IEHRJDOE-BqPvrjLh.js +0 -37
- package/build/client/assets/button-Dt4EcDfR.js +0 -2
- package/build/client/assets/button-Dt4EcDfR.js.map +0 -1
- package/build/client/assets/channel-DnqeaSfB.js +0 -2
- package/build/client/assets/classDiagram-GIVACNV2-cXWx-aYi.js +0 -2
- package/build/client/assets/classDiagram-v2-COTLJTTW-cXWx-aYi.js +0 -2
- package/build/client/assets/clone-Bj8ANPCv.js +0 -2
- package/build/client/assets/components-5arJTWsS.js +0 -158
- package/build/client/assets/components-5arJTWsS.js.map +0 -1
- package/build/client/assets/dagre-OKDRZEBW-DT9ZQRxf.js +0 -5
- package/build/client/assets/diagram-SSKATNLV-CcKCni9R.js +0 -44
- package/build/client/assets/diagram-VNBRO52H-DWoRAiqO.js +0 -25
- package/build/client/assets/diff-BKR4usVv.js +0 -2
- package/build/client/assets/diff-BKR4usVv.js.map +0 -1
- package/build/client/assets/diff-D5_VwPLF.js.map +0 -1
- package/build/client/assets/discord-BU7RzE6-.js +0 -2
- package/build/client/assets/discord-BU7RzE6-.js.map +0 -1
- package/build/client/assets/discord-ut4t-aMQ.js +0 -2
- package/build/client/assets/discord-ut4t-aMQ.js.map +0 -1
- package/build/client/assets/entry.client-BLUlgPHE.js +0 -44
- package/build/client/assets/entry.client-BLUlgPHE.js.map +0 -1
- package/build/client/assets/error-boundary-B07cWiEy.js +0 -2
- package/build/client/assets/error-boundary-B07cWiEy.js.map +0 -1
- package/build/client/assets/finished-MrsevkkK.js +0 -2
- package/build/client/assets/finished-MrsevkkK.js.map +0 -1
- package/build/client/assets/ganttDiagram-APWFNJXF-TfB6wYvN.js +0 -258
- package/build/client/assets/gitGraphDiagram-7IBYFJ6S-D2NQnQv2.js +0 -66
- package/build/client/assets/index-9euhNa27.js +0 -2
- package/build/client/assets/index-9euhNa27.js.map +0 -1
- package/build/client/assets/index-B8yUFowV.js +0 -2
- package/build/client/assets/index-B8yUFowV.js.map +0 -1
- package/build/client/assets/index-BmMpCvYx.js +0 -2
- package/build/client/assets/index-DLC5u33j.js +0 -36
- package/build/client/assets/index-DPHVg8Eh.js +0 -2
- package/build/client/assets/index-DPHVg8Eh.js.map +0 -1
- package/build/client/assets/index-Do-KWT0a.js +0 -42
- package/build/client/assets/index-Dsusf_Av.js +0 -38
- package/build/client/assets/index-Dsusf_Av.js.map +0 -1
- package/build/client/assets/index-DvQyydjU.js +0 -3
- package/build/client/assets/index-Fw2eA3AF.js +0 -2
- package/build/client/assets/index-Fw2eA3AF.js.map +0 -1
- package/build/client/assets/infoDiagram-PH2N3AL5-D-nEozcT.js +0 -3
- package/build/client/assets/l-ChG-6rmU.js +0 -2
- package/build/client/assets/l-ChG-6rmU.js.map +0 -1
- package/build/client/assets/loading-b1FV2pQh.js +0 -2
- package/build/client/assets/login-Ci7cdiuj.js +0 -2
- package/build/client/assets/login-Ci7cdiuj.js.map +0 -1
- package/build/client/assets/manifest-f9e2a790.js +0 -1
- package/build/client/assets/mdx-C7imFHZE.js +0 -3
- package/build/client/assets/mdx-C7imFHZE.js.map +0 -1
- package/build/client/assets/mindmap-definition-ALO5MXBD-BhzLy0Zl.js +0 -96
- package/build/client/assets/misc-2sBiisF5.js +0 -2
- package/build/client/assets/nav-chevrons-CV-dpXNR.js +0 -2
- package/build/client/assets/nav-chevrons-CV-dpXNR.js.map +0 -1
- package/build/client/assets/onboarding-c9ZuxLsm.js +0 -2
- package/build/client/assets/onboarding-c9ZuxLsm.js.map +0 -1
- package/build/client/assets/online-DZKJk3C2.js +0 -2
- package/build/client/assets/pe-BShc2dvc.js +0 -2
- package/build/client/assets/pieDiagram-IB7DONF6-CaTGj8RH.js +0 -31
- package/build/client/assets/preferences-BkWQyRCq.js +0 -2
- package/build/client/assets/preferences-BkWQyRCq.js.map +0 -1
- package/build/client/assets/preview-CqZGJtsE.js +0 -2
- package/build/client/assets/preview-CqZGJtsE.js.map +0 -1
- package/build/client/assets/product-DJOWNuL-.js +0 -2
- package/build/client/assets/progress-BJ4ADF-s.js +0 -2
- package/build/client/assets/progress-bar-DgnkQxQw.js +0 -2
- package/build/client/assets/progress-bar-DgnkQxQw.js.map +0 -1
- package/build/client/assets/revalidation-ws-B0skixgr.js +0 -2
- package/build/client/assets/revalidation-ws-B0skixgr.js.map +0 -1
- package/build/client/assets/root-C_WG23OF.js +0 -11
- package/build/client/assets/root-C_WG23OF.js.map +0 -1
- package/build/client/assets/sankeyDiagram-QLVOVGJD-Bt8556P1.js +0 -11
- package/build/client/assets/set-playground-DW2Ys-rV.js +0 -2
- package/build/client/assets/set-playground-DW2Ys-rV.js.map +0 -1
- package/build/client/assets/stateDiagram-DGXRK772-B3BuD15b.js +0 -2
- package/build/client/assets/stateDiagram-v2-YXO3MK2T-BzFxWpqR.js +0 -2
- package/build/client/assets/support-Bg0iSyle.js +0 -2
- package/build/client/assets/support-Bg0iSyle.js.map +0 -1
- package/build/client/assets/test-DdUNKtkF.js +0 -2
- package/build/client/assets/test-DdUNKtkF.js.map +0 -1
- package/build/client/assets/tests-B1ak2CDI.js.map +0 -1
- package/build/client/assets/tooltip-Bzd6O8vq.js +0 -2
- package/build/client/assets/use-event-source-Dar8h_B8.js +0 -2
- package/build/client/assets/user-DNSnhqGn.js +0 -2
- package/build/client/assets/user-DNSnhqGn.js.map +0 -1
- package/build/client/assets/version-DriSvNMy.js +0 -2
- package/build/client/assets/version-DriSvNMy.js.map +0 -1
- package/build/client/assets/workshop-config-DchzGYJM.js +0 -2
- package/build/client/assets/workshop-config-DchzGYJM.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph-eJUngNSH.js","sources":["../../../../../node_modules/lodash-es/union.js","../../../../../node_modules/dagre-d3-es/src/graphlib/graph.js"],"sourcesContent":["import baseFlatten from './_baseFlatten.js';\nimport baseRest from './_baseRest.js';\nimport baseUniq from './_baseUniq.js';\nimport isArrayLikeObject from './isArrayLikeObject.js';\n\n/**\n * Creates an array of unique values, in order, from all given arrays using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.union([2], [1, 2]);\n * // => [2, 1]\n */\nvar union = baseRest(function(arrays) {\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n});\n\nexport default union;\n","import * as _ from 'lodash-es';\n\nvar DEFAULT_EDGE_NAME = '\\x00';\nvar GRAPH_NODE = '\\x00';\nvar EDGE_KEY_DELIM = '\\x01';\n\n// Implementation notes:\n//\n// * Node id query functions should return string ids for the nodes\n// * Edge id query functions should return an \"edgeObj\", edge object, that is\n// composed of enough information to uniquely identify an edge: {v, w, name}.\n// * Internally we use an \"edgeId\", a stringified form of the edgeObj, to\n// reference edges. This is because we need a performant way to look these\n// edges up and, object properties, which have string keys, are the closest\n// we're going to get to a performant hashtable in JavaScript.\n\n// Implementation notes:\n//\n// * Node id query functions should return string ids for the nodes\n// * Edge id query functions should return an \"edgeObj\", edge object, that is\n// composed of enough information to uniquely identify an edge: {v, w, name}.\n// * Internally we use an \"edgeId\", a stringified form of the edgeObj, to\n// reference edges. This is because we need a performant way to look these\n// edges up and, object properties, which have string keys, are the closest\n// we're going to get to a performant hashtable in JavaScript.\nexport class Graph {\n constructor(opts = {}) {\n this._isDirected = Object.prototype.hasOwnProperty.call(opts, 'directed')\n ? opts.directed\n : true;\n this._isMultigraph = Object.prototype.hasOwnProperty.call(opts, 'multigraph')\n ? opts.multigraph\n : false;\n this._isCompound = Object.prototype.hasOwnProperty.call(opts, 'compound')\n ? opts.compound\n : false;\n\n // Label for the graph itself\n this._label = undefined;\n\n // Defaults to be set when creating a new node\n this._defaultNodeLabelFn = _.constant(undefined);\n\n // Defaults to be set when creating a new edge\n this._defaultEdgeLabelFn = _.constant(undefined);\n\n // v -> label\n this._nodes = {};\n\n if (this._isCompound) {\n // v -> parent\n this._parent = {};\n\n // v -> children\n this._children = {};\n this._children[GRAPH_NODE] = {};\n }\n\n // v -> edgeObj\n this._in = {};\n\n // u -> v -> Number\n this._preds = {};\n\n // v -> edgeObj\n this._out = {};\n\n // v -> w -> Number\n this._sucs = {};\n\n // e -> edgeObj\n this._edgeObjs = {};\n\n // e -> label\n this._edgeLabels = {};\n }\n /* === Graph functions ========= */\n isDirected() {\n return this._isDirected;\n }\n isMultigraph() {\n return this._isMultigraph;\n }\n isCompound() {\n return this._isCompound;\n }\n setGraph(label) {\n this._label = label;\n return this;\n }\n graph() {\n return this._label;\n }\n /* === Node functions ========== */\n setDefaultNodeLabel(newDefault) {\n if (!_.isFunction(newDefault)) {\n newDefault = _.constant(newDefault);\n }\n this._defaultNodeLabelFn = newDefault;\n return this;\n }\n nodeCount() {\n return this._nodeCount;\n }\n nodes() {\n return _.keys(this._nodes);\n }\n sources() {\n var self = this;\n return _.filter(this.nodes(), function (v) {\n return _.isEmpty(self._in[v]);\n });\n }\n sinks() {\n var self = this;\n return _.filter(this.nodes(), function (v) {\n return _.isEmpty(self._out[v]);\n });\n }\n setNodes(vs, value) {\n var args = arguments;\n var self = this;\n _.each(vs, function (v) {\n if (args.length > 1) {\n self.setNode(v, value);\n } else {\n self.setNode(v);\n }\n });\n return this;\n }\n setNode(v, value) {\n if (Object.prototype.hasOwnProperty.call(this._nodes, v)) {\n if (arguments.length > 1) {\n this._nodes[v] = value;\n }\n return this;\n }\n\n // @ts-expect-error\n this._nodes[v] = arguments.length > 1 ? value : this._defaultNodeLabelFn(v);\n if (this._isCompound) {\n this._parent[v] = GRAPH_NODE;\n this._children[v] = {};\n this._children[GRAPH_NODE][v] = true;\n }\n this._in[v] = {};\n this._preds[v] = {};\n this._out[v] = {};\n this._sucs[v] = {};\n ++this._nodeCount;\n return this;\n }\n node(v) {\n return this._nodes[v];\n }\n hasNode(v) {\n return Object.prototype.hasOwnProperty.call(this._nodes, v);\n }\n removeNode(v) {\n if (Object.prototype.hasOwnProperty.call(this._nodes, v)) {\n var removeEdge = (e) => this.removeEdge(this._edgeObjs[e]);\n delete this._nodes[v];\n if (this._isCompound) {\n this._removeFromParentsChildList(v);\n delete this._parent[v];\n _.each(this.children(v), (child) => {\n this.setParent(child);\n });\n delete this._children[v];\n }\n _.each(_.keys(this._in[v]), removeEdge);\n delete this._in[v];\n delete this._preds[v];\n _.each(_.keys(this._out[v]), removeEdge);\n delete this._out[v];\n delete this._sucs[v];\n --this._nodeCount;\n }\n return this;\n }\n setParent(v, parent) {\n if (!this._isCompound) {\n throw new Error('Cannot set parent in a non-compound graph');\n }\n\n if (_.isUndefined(parent)) {\n parent = GRAPH_NODE;\n } else {\n // Coerce parent to string\n parent += '';\n for (var ancestor = parent; !_.isUndefined(ancestor); ancestor = this.parent(ancestor)) {\n if (ancestor === v) {\n throw new Error('Setting ' + parent + ' as parent of ' + v + ' would create a cycle');\n }\n }\n\n this.setNode(parent);\n }\n\n this.setNode(v);\n this._removeFromParentsChildList(v);\n this._parent[v] = parent;\n this._children[parent][v] = true;\n return this;\n }\n _removeFromParentsChildList(v) {\n delete this._children[this._parent[v]][v];\n }\n parent(v) {\n if (this._isCompound) {\n var parent = this._parent[v];\n if (parent !== GRAPH_NODE) {\n return parent;\n }\n }\n }\n children(v) {\n if (_.isUndefined(v)) {\n v = GRAPH_NODE;\n }\n\n if (this._isCompound) {\n var children = this._children[v];\n if (children) {\n return _.keys(children);\n }\n } else if (v === GRAPH_NODE) {\n return this.nodes();\n } else if (this.hasNode(v)) {\n return [];\n }\n }\n predecessors(v) {\n var predsV = this._preds[v];\n if (predsV) {\n return _.keys(predsV);\n }\n }\n successors(v) {\n var sucsV = this._sucs[v];\n if (sucsV) {\n return _.keys(sucsV);\n }\n }\n neighbors(v) {\n var preds = this.predecessors(v);\n if (preds) {\n return _.union(preds, this.successors(v));\n }\n }\n isLeaf(v) {\n var neighbors;\n if (this.isDirected()) {\n neighbors = this.successors(v);\n } else {\n neighbors = this.neighbors(v);\n }\n return neighbors.length === 0;\n }\n filterNodes(filter) {\n // @ts-expect-error\n var copy = new this.constructor({\n directed: this._isDirected,\n multigraph: this._isMultigraph,\n compound: this._isCompound,\n });\n\n copy.setGraph(this.graph());\n\n var self = this;\n _.each(this._nodes, function (value, v) {\n if (filter(v)) {\n copy.setNode(v, value);\n }\n });\n\n _.each(this._edgeObjs, function (e) {\n // @ts-expect-error\n if (copy.hasNode(e.v) && copy.hasNode(e.w)) {\n copy.setEdge(e, self.edge(e));\n }\n });\n\n var parents = {};\n function findParent(v) {\n var parent = self.parent(v);\n if (parent === undefined || copy.hasNode(parent)) {\n parents[v] = parent;\n return parent;\n } else if (parent in parents) {\n return parents[parent];\n } else {\n return findParent(parent);\n }\n }\n\n if (this._isCompound) {\n _.each(copy.nodes(), function (v) {\n copy.setParent(v, findParent(v));\n });\n }\n\n return copy;\n }\n /* === Edge functions ========== */\n setDefaultEdgeLabel(newDefault) {\n if (!_.isFunction(newDefault)) {\n newDefault = _.constant(newDefault);\n }\n this._defaultEdgeLabelFn = newDefault;\n return this;\n }\n edgeCount() {\n return this._edgeCount;\n }\n edges() {\n return _.values(this._edgeObjs);\n }\n setPath(vs, value) {\n var self = this;\n var args = arguments;\n _.reduce(vs, function (v, w) {\n if (args.length > 1) {\n self.setEdge(v, w, value);\n } else {\n self.setEdge(v, w);\n }\n return w;\n });\n return this;\n }\n /*\n * setEdge(v, w, [value, [name]])\n * setEdge({ v, w, [name] }, [value])\n */\n setEdge() {\n var v, w, name, value;\n var valueSpecified = false;\n var arg0 = arguments[0];\n\n if (typeof arg0 === 'object' && arg0 !== null && 'v' in arg0) {\n v = arg0.v;\n w = arg0.w;\n name = arg0.name;\n if (arguments.length === 2) {\n value = arguments[1];\n valueSpecified = true;\n }\n } else {\n v = arg0;\n w = arguments[1];\n name = arguments[3];\n if (arguments.length > 2) {\n value = arguments[2];\n valueSpecified = true;\n }\n }\n\n v = '' + v;\n w = '' + w;\n if (!_.isUndefined(name)) {\n name = '' + name;\n }\n\n var e = edgeArgsToId(this._isDirected, v, w, name);\n if (Object.prototype.hasOwnProperty.call(this._edgeLabels, e)) {\n if (valueSpecified) {\n this._edgeLabels[e] = value;\n }\n return this;\n }\n\n if (!_.isUndefined(name) && !this._isMultigraph) {\n throw new Error('Cannot set a named edge when isMultigraph = false');\n }\n\n // It didn't exist, so we need to create it.\n // First ensure the nodes exist.\n this.setNode(v);\n this.setNode(w);\n\n // @ts-expect-error\n this._edgeLabels[e] = valueSpecified ? value : this._defaultEdgeLabelFn(v, w, name);\n\n var edgeObj = edgeArgsToObj(this._isDirected, v, w, name);\n // Ensure we add undirected edges in a consistent way.\n v = edgeObj.v;\n w = edgeObj.w;\n\n Object.freeze(edgeObj);\n this._edgeObjs[e] = edgeObj;\n incrementOrInitEntry(this._preds[w], v);\n incrementOrInitEntry(this._sucs[v], w);\n this._in[w][e] = edgeObj;\n this._out[v][e] = edgeObj;\n this._edgeCount++;\n return this;\n }\n edge(v, w, name) {\n var e =\n arguments.length === 1\n ? edgeObjToId(this._isDirected, arguments[0])\n : edgeArgsToId(this._isDirected, v, w, name);\n return this._edgeLabels[e];\n }\n hasEdge(v, w, name) {\n var e =\n arguments.length === 1\n ? edgeObjToId(this._isDirected, arguments[0])\n : edgeArgsToId(this._isDirected, v, w, name);\n return Object.prototype.hasOwnProperty.call(this._edgeLabels, e);\n }\n removeEdge(v, w, name) {\n var e =\n arguments.length === 1\n ? edgeObjToId(this._isDirected, arguments[0])\n : edgeArgsToId(this._isDirected, v, w, name);\n var edge = this._edgeObjs[e];\n if (edge) {\n v = edge.v;\n w = edge.w;\n delete this._edgeLabels[e];\n delete this._edgeObjs[e];\n decrementOrRemoveEntry(this._preds[w], v);\n decrementOrRemoveEntry(this._sucs[v], w);\n delete this._in[w][e];\n delete this._out[v][e];\n this._edgeCount--;\n }\n return this;\n }\n inEdges(v, u) {\n var inV = this._in[v];\n if (inV) {\n var edges = _.values(inV);\n if (!u) {\n return edges;\n }\n return _.filter(edges, function (edge) {\n return edge.v === u;\n });\n }\n }\n outEdges(v, w) {\n var outV = this._out[v];\n if (outV) {\n var edges = _.values(outV);\n if (!w) {\n return edges;\n }\n return _.filter(edges, function (edge) {\n return edge.w === w;\n });\n }\n }\n nodeEdges(v, w) {\n var inEdges = this.inEdges(v, w);\n if (inEdges) {\n return inEdges.concat(this.outEdges(v, w));\n }\n }\n}\n\n/* Number of nodes in the graph. Should only be changed by the implementation. */\nGraph.prototype._nodeCount = 0;\n\n/* Number of edges in the graph. Should only be changed by the implementation. */\nGraph.prototype._edgeCount = 0;\n\nfunction incrementOrInitEntry(map, k) {\n if (map[k]) {\n map[k]++;\n } else {\n map[k] = 1;\n }\n}\n\nfunction decrementOrRemoveEntry(map, k) {\n if (!--map[k]) {\n delete map[k];\n }\n}\n\nfunction edgeArgsToId(isDirected, v_, w_, name) {\n var v = '' + v_;\n var w = '' + w_;\n if (!isDirected && v > w) {\n var tmp = v;\n v = w;\n w = tmp;\n }\n return v + EDGE_KEY_DELIM + w + EDGE_KEY_DELIM + (_.isUndefined(name) ? DEFAULT_EDGE_NAME : name);\n}\n\nfunction edgeArgsToObj(isDirected, v_, w_, name) {\n var v = '' + v_;\n var w = '' + w_;\n if (!isDirected && v > w) {\n var tmp = v;\n v = w;\n w = tmp;\n }\n var edgeObj = { v: v, w: w };\n if (name) {\n edgeObj.name = name;\n }\n return edgeObj;\n}\n\nfunction edgeObjToId(isDirected, edgeObj) {\n return edgeArgsToId(isDirected, edgeObj.v, edgeObj.w, edgeObj.name);\n}\n"],"names":["union","baseRest","arrays","baseUniq","baseFlatten","isArrayLikeObject","DEFAULT_EDGE_NAME","GRAPH_NODE","EDGE_KEY_DELIM","Graph","opts","_.constant","label","newDefault","_.isFunction","_.keys","self","_.filter","v","_.isEmpty","vs","value","args","_.each","removeEdge","e","child","parent","_.isUndefined","ancestor","children","predsV","sucsV","preds","_.union","neighbors","filter","copy","parents","findParent","_.values","_.reduce","w","name","valueSpecified","arg0","edgeArgsToId","edgeObj","edgeArgsToObj","incrementOrInitEntry","edgeObjToId","edge","decrementOrRemoveEntry","u","inV","edges","outV","inEdges","map","k","isDirected","v_","w_","tmp"],"mappings":"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","x_google_ignoreList":[0,1]}
|
|
1
|
+
{"version":3,"file":"graph-DiSezMy_.js","sources":["../../../../../node_modules/lodash-es/union.js","../../../../../node_modules/dagre-d3-es/src/graphlib/graph.js"],"sourcesContent":["import baseFlatten from './_baseFlatten.js';\nimport baseRest from './_baseRest.js';\nimport baseUniq from './_baseUniq.js';\nimport isArrayLikeObject from './isArrayLikeObject.js';\n\n/**\n * Creates an array of unique values, in order, from all given arrays using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.union([2], [1, 2]);\n * // => [2, 1]\n */\nvar union = baseRest(function(arrays) {\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n});\n\nexport default union;\n","import * as _ from 'lodash-es';\n\nvar DEFAULT_EDGE_NAME = '\\x00';\nvar GRAPH_NODE = '\\x00';\nvar EDGE_KEY_DELIM = '\\x01';\n\n// Implementation notes:\n//\n// * Node id query functions should return string ids for the nodes\n// * Edge id query functions should return an \"edgeObj\", edge object, that is\n// composed of enough information to uniquely identify an edge: {v, w, name}.\n// * Internally we use an \"edgeId\", a stringified form of the edgeObj, to\n// reference edges. This is because we need a performant way to look these\n// edges up and, object properties, which have string keys, are the closest\n// we're going to get to a performant hashtable in JavaScript.\n\n// Implementation notes:\n//\n// * Node id query functions should return string ids for the nodes\n// * Edge id query functions should return an \"edgeObj\", edge object, that is\n// composed of enough information to uniquely identify an edge: {v, w, name}.\n// * Internally we use an \"edgeId\", a stringified form of the edgeObj, to\n// reference edges. This is because we need a performant way to look these\n// edges up and, object properties, which have string keys, are the closest\n// we're going to get to a performant hashtable in JavaScript.\nexport class Graph {\n constructor(opts = {}) {\n this._isDirected = Object.prototype.hasOwnProperty.call(opts, 'directed')\n ? opts.directed\n : true;\n this._isMultigraph = Object.prototype.hasOwnProperty.call(opts, 'multigraph')\n ? opts.multigraph\n : false;\n this._isCompound = Object.prototype.hasOwnProperty.call(opts, 'compound')\n ? opts.compound\n : false;\n\n // Label for the graph itself\n this._label = undefined;\n\n // Defaults to be set when creating a new node\n this._defaultNodeLabelFn = _.constant(undefined);\n\n // Defaults to be set when creating a new edge\n this._defaultEdgeLabelFn = _.constant(undefined);\n\n // v -> label\n this._nodes = {};\n\n if (this._isCompound) {\n // v -> parent\n this._parent = {};\n\n // v -> children\n this._children = {};\n this._children[GRAPH_NODE] = {};\n }\n\n // v -> edgeObj\n this._in = {};\n\n // u -> v -> Number\n this._preds = {};\n\n // v -> edgeObj\n this._out = {};\n\n // v -> w -> Number\n this._sucs = {};\n\n // e -> edgeObj\n this._edgeObjs = {};\n\n // e -> label\n this._edgeLabels = {};\n }\n /* === Graph functions ========= */\n isDirected() {\n return this._isDirected;\n }\n isMultigraph() {\n return this._isMultigraph;\n }\n isCompound() {\n return this._isCompound;\n }\n setGraph(label) {\n this._label = label;\n return this;\n }\n graph() {\n return this._label;\n }\n /* === Node functions ========== */\n setDefaultNodeLabel(newDefault) {\n if (!_.isFunction(newDefault)) {\n newDefault = _.constant(newDefault);\n }\n this._defaultNodeLabelFn = newDefault;\n return this;\n }\n nodeCount() {\n return this._nodeCount;\n }\n nodes() {\n return _.keys(this._nodes);\n }\n sources() {\n var self = this;\n return _.filter(this.nodes(), function (v) {\n return _.isEmpty(self._in[v]);\n });\n }\n sinks() {\n var self = this;\n return _.filter(this.nodes(), function (v) {\n return _.isEmpty(self._out[v]);\n });\n }\n setNodes(vs, value) {\n var args = arguments;\n var self = this;\n _.each(vs, function (v) {\n if (args.length > 1) {\n self.setNode(v, value);\n } else {\n self.setNode(v);\n }\n });\n return this;\n }\n setNode(v, value) {\n if (Object.prototype.hasOwnProperty.call(this._nodes, v)) {\n if (arguments.length > 1) {\n this._nodes[v] = value;\n }\n return this;\n }\n\n // @ts-expect-error\n this._nodes[v] = arguments.length > 1 ? value : this._defaultNodeLabelFn(v);\n if (this._isCompound) {\n this._parent[v] = GRAPH_NODE;\n this._children[v] = {};\n this._children[GRAPH_NODE][v] = true;\n }\n this._in[v] = {};\n this._preds[v] = {};\n this._out[v] = {};\n this._sucs[v] = {};\n ++this._nodeCount;\n return this;\n }\n node(v) {\n return this._nodes[v];\n }\n hasNode(v) {\n return Object.prototype.hasOwnProperty.call(this._nodes, v);\n }\n removeNode(v) {\n if (Object.prototype.hasOwnProperty.call(this._nodes, v)) {\n var removeEdge = (e) => this.removeEdge(this._edgeObjs[e]);\n delete this._nodes[v];\n if (this._isCompound) {\n this._removeFromParentsChildList(v);\n delete this._parent[v];\n _.each(this.children(v), (child) => {\n this.setParent(child);\n });\n delete this._children[v];\n }\n _.each(_.keys(this._in[v]), removeEdge);\n delete this._in[v];\n delete this._preds[v];\n _.each(_.keys(this._out[v]), removeEdge);\n delete this._out[v];\n delete this._sucs[v];\n --this._nodeCount;\n }\n return this;\n }\n setParent(v, parent) {\n if (!this._isCompound) {\n throw new Error('Cannot set parent in a non-compound graph');\n }\n\n if (_.isUndefined(parent)) {\n parent = GRAPH_NODE;\n } else {\n // Coerce parent to string\n parent += '';\n for (var ancestor = parent; !_.isUndefined(ancestor); ancestor = this.parent(ancestor)) {\n if (ancestor === v) {\n throw new Error('Setting ' + parent + ' as parent of ' + v + ' would create a cycle');\n }\n }\n\n this.setNode(parent);\n }\n\n this.setNode(v);\n this._removeFromParentsChildList(v);\n this._parent[v] = parent;\n this._children[parent][v] = true;\n return this;\n }\n _removeFromParentsChildList(v) {\n delete this._children[this._parent[v]][v];\n }\n parent(v) {\n if (this._isCompound) {\n var parent = this._parent[v];\n if (parent !== GRAPH_NODE) {\n return parent;\n }\n }\n }\n children(v) {\n if (_.isUndefined(v)) {\n v = GRAPH_NODE;\n }\n\n if (this._isCompound) {\n var children = this._children[v];\n if (children) {\n return _.keys(children);\n }\n } else if (v === GRAPH_NODE) {\n return this.nodes();\n } else if (this.hasNode(v)) {\n return [];\n }\n }\n predecessors(v) {\n var predsV = this._preds[v];\n if (predsV) {\n return _.keys(predsV);\n }\n }\n successors(v) {\n var sucsV = this._sucs[v];\n if (sucsV) {\n return _.keys(sucsV);\n }\n }\n neighbors(v) {\n var preds = this.predecessors(v);\n if (preds) {\n return _.union(preds, this.successors(v));\n }\n }\n isLeaf(v) {\n var neighbors;\n if (this.isDirected()) {\n neighbors = this.successors(v);\n } else {\n neighbors = this.neighbors(v);\n }\n return neighbors.length === 0;\n }\n filterNodes(filter) {\n // @ts-expect-error\n var copy = new this.constructor({\n directed: this._isDirected,\n multigraph: this._isMultigraph,\n compound: this._isCompound,\n });\n\n copy.setGraph(this.graph());\n\n var self = this;\n _.each(this._nodes, function (value, v) {\n if (filter(v)) {\n copy.setNode(v, value);\n }\n });\n\n _.each(this._edgeObjs, function (e) {\n // @ts-expect-error\n if (copy.hasNode(e.v) && copy.hasNode(e.w)) {\n copy.setEdge(e, self.edge(e));\n }\n });\n\n var parents = {};\n function findParent(v) {\n var parent = self.parent(v);\n if (parent === undefined || copy.hasNode(parent)) {\n parents[v] = parent;\n return parent;\n } else if (parent in parents) {\n return parents[parent];\n } else {\n return findParent(parent);\n }\n }\n\n if (this._isCompound) {\n _.each(copy.nodes(), function (v) {\n copy.setParent(v, findParent(v));\n });\n }\n\n return copy;\n }\n /* === Edge functions ========== */\n setDefaultEdgeLabel(newDefault) {\n if (!_.isFunction(newDefault)) {\n newDefault = _.constant(newDefault);\n }\n this._defaultEdgeLabelFn = newDefault;\n return this;\n }\n edgeCount() {\n return this._edgeCount;\n }\n edges() {\n return _.values(this._edgeObjs);\n }\n setPath(vs, value) {\n var self = this;\n var args = arguments;\n _.reduce(vs, function (v, w) {\n if (args.length > 1) {\n self.setEdge(v, w, value);\n } else {\n self.setEdge(v, w);\n }\n return w;\n });\n return this;\n }\n /*\n * setEdge(v, w, [value, [name]])\n * setEdge({ v, w, [name] }, [value])\n */\n setEdge() {\n var v, w, name, value;\n var valueSpecified = false;\n var arg0 = arguments[0];\n\n if (typeof arg0 === 'object' && arg0 !== null && 'v' in arg0) {\n v = arg0.v;\n w = arg0.w;\n name = arg0.name;\n if (arguments.length === 2) {\n value = arguments[1];\n valueSpecified = true;\n }\n } else {\n v = arg0;\n w = arguments[1];\n name = arguments[3];\n if (arguments.length > 2) {\n value = arguments[2];\n valueSpecified = true;\n }\n }\n\n v = '' + v;\n w = '' + w;\n if (!_.isUndefined(name)) {\n name = '' + name;\n }\n\n var e = edgeArgsToId(this._isDirected, v, w, name);\n if (Object.prototype.hasOwnProperty.call(this._edgeLabels, e)) {\n if (valueSpecified) {\n this._edgeLabels[e] = value;\n }\n return this;\n }\n\n if (!_.isUndefined(name) && !this._isMultigraph) {\n throw new Error('Cannot set a named edge when isMultigraph = false');\n }\n\n // It didn't exist, so we need to create it.\n // First ensure the nodes exist.\n this.setNode(v);\n this.setNode(w);\n\n // @ts-expect-error\n this._edgeLabels[e] = valueSpecified ? value : this._defaultEdgeLabelFn(v, w, name);\n\n var edgeObj = edgeArgsToObj(this._isDirected, v, w, name);\n // Ensure we add undirected edges in a consistent way.\n v = edgeObj.v;\n w = edgeObj.w;\n\n Object.freeze(edgeObj);\n this._edgeObjs[e] = edgeObj;\n incrementOrInitEntry(this._preds[w], v);\n incrementOrInitEntry(this._sucs[v], w);\n this._in[w][e] = edgeObj;\n this._out[v][e] = edgeObj;\n this._edgeCount++;\n return this;\n }\n edge(v, w, name) {\n var e =\n arguments.length === 1\n ? edgeObjToId(this._isDirected, arguments[0])\n : edgeArgsToId(this._isDirected, v, w, name);\n return this._edgeLabels[e];\n }\n hasEdge(v, w, name) {\n var e =\n arguments.length === 1\n ? edgeObjToId(this._isDirected, arguments[0])\n : edgeArgsToId(this._isDirected, v, w, name);\n return Object.prototype.hasOwnProperty.call(this._edgeLabels, e);\n }\n removeEdge(v, w, name) {\n var e =\n arguments.length === 1\n ? edgeObjToId(this._isDirected, arguments[0])\n : edgeArgsToId(this._isDirected, v, w, name);\n var edge = this._edgeObjs[e];\n if (edge) {\n v = edge.v;\n w = edge.w;\n delete this._edgeLabels[e];\n delete this._edgeObjs[e];\n decrementOrRemoveEntry(this._preds[w], v);\n decrementOrRemoveEntry(this._sucs[v], w);\n delete this._in[w][e];\n delete this._out[v][e];\n this._edgeCount--;\n }\n return this;\n }\n inEdges(v, u) {\n var inV = this._in[v];\n if (inV) {\n var edges = _.values(inV);\n if (!u) {\n return edges;\n }\n return _.filter(edges, function (edge) {\n return edge.v === u;\n });\n }\n }\n outEdges(v, w) {\n var outV = this._out[v];\n if (outV) {\n var edges = _.values(outV);\n if (!w) {\n return edges;\n }\n return _.filter(edges, function (edge) {\n return edge.w === w;\n });\n }\n }\n nodeEdges(v, w) {\n var inEdges = this.inEdges(v, w);\n if (inEdges) {\n return inEdges.concat(this.outEdges(v, w));\n }\n }\n}\n\n/* Number of nodes in the graph. Should only be changed by the implementation. */\nGraph.prototype._nodeCount = 0;\n\n/* Number of edges in the graph. Should only be changed by the implementation. */\nGraph.prototype._edgeCount = 0;\n\nfunction incrementOrInitEntry(map, k) {\n if (map[k]) {\n map[k]++;\n } else {\n map[k] = 1;\n }\n}\n\nfunction decrementOrRemoveEntry(map, k) {\n if (!--map[k]) {\n delete map[k];\n }\n}\n\nfunction edgeArgsToId(isDirected, v_, w_, name) {\n var v = '' + v_;\n var w = '' + w_;\n if (!isDirected && v > w) {\n var tmp = v;\n v = w;\n w = tmp;\n }\n return v + EDGE_KEY_DELIM + w + EDGE_KEY_DELIM + (_.isUndefined(name) ? DEFAULT_EDGE_NAME : name);\n}\n\nfunction edgeArgsToObj(isDirected, v_, w_, name) {\n var v = '' + v_;\n var w = '' + w_;\n if (!isDirected && v > w) {\n var tmp = v;\n v = w;\n w = tmp;\n }\n var edgeObj = { v: v, w: w };\n if (name) {\n edgeObj.name = name;\n }\n return edgeObj;\n}\n\nfunction edgeObjToId(isDirected, edgeObj) {\n return edgeArgsToId(isDirected, edgeObj.v, edgeObj.w, edgeObj.name);\n}\n"],"names":["union","baseRest","arrays","baseUniq","baseFlatten","isArrayLikeObject","DEFAULT_EDGE_NAME","GRAPH_NODE","EDGE_KEY_DELIM","Graph","opts","_.constant","label","newDefault","_.isFunction","_.keys","self","_.filter","v","_.isEmpty","vs","value","args","_.each","removeEdge","e","child","parent","_.isUndefined","ancestor","children","predsV","sucsV","preds","_.union","neighbors","filter","copy","parents","findParent","_.values","_.reduce","w","name","valueSpecified","arg0","edgeArgsToId","edgeObj","edgeArgsToObj","incrementOrInitEntry","edgeObjToId","edge","decrementOrRemoveEntry","u","inV","edges","outV","inEdges","map","k","isDirected","v_","w_","tmp"],"mappings":"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","x_google_ignoreList":[0,1]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{w as j,f,L as p,F as o}from"./chunk-QMGIS6GS-CTjj1G71.js";import{j as e}from"./jsx-runtime-BjG_zV1W.js";import{I as h}from"./misc-yfWFSwMN.js";import{S as g}from"./tooltip-C6xKzWST.js";import{a as N}from"./progress-CtGAFS2P.js";import"./index-BP1ceC2h.js";import"./pe-C53l4u-6.js";const L={getSitemapEntries:()=>null},E=({matches:t})=>{var i;const n=(i=t.find(r=>(r==null?void 0:r.id)==="root"))==null?void 0:i.data;return[{title:`👷 | ${n==null?void 0:n.workshopTitle}`}]};function S(t,n){return t.type==="unknown"&&n.type==="unknown"?0:t.type==="unknown"?-1:n.type==="unknown"?1:0}function w(t){switch(t.type){case"workshop-instructions":return"/";case"workshop-finished":return"/finished";case"instructions":return`/${t.exerciseNumber.toString().padStart(2,"0")}`;case"step":return`/${t.exerciseNumber.toString().padStart(2,"0")}/${t.stepNumber.toString().padStart(2,"0")}`;case"finished":return`/${t.exerciseNumber.toString().padStart(2,"0")}/finished`;default:return""}}const I=j(function({loaderData:n}){var c,a;const i=f(),r=N(),x=((c=i.formData)==null?void 0:c.get("intent"))==="inspect",u=((a=i.formData)==null?void 0:a.get("intent"))==="stop-inspect",b={completed:"bg-blue-500",incomplete:"bg-yellow-500"};return e.jsxs("div",{className:"flex flex-col gap-4",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-lg font-bold",children:"Progress"}),r?e.jsx("ul",{className:"flex max-h-72 flex-col gap-2 overflow-y-scroll border-2 p-8 scrollbar-thin scrollbar-thumb-scrollbar",children:r.sort(S).map(s=>{const l=s.epicCompletedAt?"completed":"incomplete",d=[s.epicLessonSlug,s.epicCompletedAt?`(${s.epicCompletedAt})`:null].filter(Boolean).join(" ");return e.jsxs("li",{className:"flex items-center gap-2",children:[e.jsx("span",{className:`h-3 w-3 rounded-full ${b[l]}`,title:l}),s.type==="unknown"?e.jsxs("span",{className:"flex items-center gap-1",children:[d,e.jsx("span",{className:"text-red-500",children:e.jsx(g,{content:"This video is in the workshop on EpicWeb.dev, but not in the local workshop.",children:e.jsx(h,{name:"Close"})})})]}):e.jsx(p,{to:w(s),children:d}),e.jsx(p,{to:s.epicLessonUrl,children:e.jsx(h,{name:"ExternalLink"})})]},s.epicLessonSlug)})}):e.jsx("p",{children:"No progress data"})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-lg font-bold",children:"Commands"}),e.jsxs("ul",{className:"max-h-48 overflow-y-scroll border-2 p-8 scrollbar-thin scrollbar-thumb-scrollbar",children:[e.jsx("li",{children:e.jsx(o,{method:"POST",children:e.jsx("button",{name:"intent",value:"clear-caches",children:"Clear local caches"})})}),e.jsx("li",{children:e.jsx(o,{method:"POST",children:e.jsx("button",{name:"intent",value:"clear-data",children:"Clear all local data (including auth data)"})})}),e.jsx("li",{children:n.inspectorRunning?e.jsx(o,{method:"POST",children:e.jsx("button",{name:"intent",value:"stop-inspect",children:x?"Stopping inspector...":"Stop inspector"})}):e.jsx(o,{method:"POST",children:e.jsx("button",{name:"intent",value:"inspect",children:u?"Starting inspector...":"Start inspector"})})})]})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-lg font-bold",children:"Apps"}),e.jsx("ul",{className:"max-h-48 list-none overflow-y-scroll border-2 p-8 scrollbar-thin scrollbar-thumb-scrollbar",children:n.apps.map(s=>e.jsxs("li",{className:"flex items-center gap-2 py-1",children:[n.processes[s.name]?e.jsx(m,{status:"running"}):e.jsx(m,{status:"stopped"}),s.name]},s.name))})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-lg font-bold",children:"Processes"}),e.jsx("ul",{className:"overflow-y-scroll border-2 p-8 scrollbar-thin scrollbar-thumb-scrollbar",children:Object.entries(n.processes).map(([s,l])=>e.jsx("li",{children:e.jsxs("span",{children:[s," - Port: ",l.port," - PID ",l.pid," -"," ",l.color]})},s))})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-lg font-bold",children:"Test Processes"}),e.jsx("ul",{className:"overflow-y-scroll border-2 p-8 scrollbar-thin scrollbar-thumb-scrollbar",children:Object.entries(n.testProcesses).map(([s,l])=>e.jsx("li",{children:e.jsxs("span",{children:[s," - PID ",l.pid," - Exit code: ",l.exitCode]})},s))})]})]})});function m({status:t}){const n={running:{pinger:"bg-green-400",circle:"bg-green-500"},starting:{pinger:"bg-sky-400",circle:"bg-sky-500"},stopped:{circle:"bg-gray-500"},taken:{pinger:"bg-red-400",circle:"bg-red-500"}}[t];return e.jsxs("span",{className:"relative flex h-3 w-3",children:[n.pinger?e.jsx("span",{className:`absolute inline-flex h-full w-full animate-ping rounded-full ${n.pinger} opacity-75`}):null,e.jsx("span",{className:`relative inline-flex h-3 w-3 rounded-full ${n.circle}`})]})}export{I as default,L as handle,E as meta};
|
|
2
|
+
//# sourceMappingURL=index-AKpqKc27.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-AKpqKc27.js","sources":["../../../app/routes/admin+/index.tsx"],"sourcesContent":["import { getApps } from '@epic-web/workshop-utils/apps.server'\nimport { getProcesses } from '@epic-web/workshop-utils/process-manager.server'\nimport {\n\tgetServerTimeHeader,\n\tmakeTimings,\n} from '@epic-web/workshop-utils/timing.server'\nimport { type SEOHandle } from '@nasa-gcn/remix-seo'\nimport { data, Form, Link, useNavigation } from 'react-router'\nimport { Icon } from '#app/components/icons.tsx'\nimport { SimpleTooltip } from '#app/components/ui/tooltip.tsx'\nimport { type RootLoaderData } from '#app/root.tsx'\nimport {\n\tuseEpicProgress,\n\ttype SerializedProgress,\n} from '#app/routes/progress.tsx'\nimport { ensureUndeployed } from '#app/utils/misc.tsx'\nimport { type Route } from './+types/index.tsx'\nimport {\n\tclearCaches,\n\tclearData,\n\tstartInspector,\n\tstopInspector,\n} from './admin-utils.server.tsx'\n\ndeclare global {\n\tvar __inspector_open__: boolean | undefined\n}\n\nexport const handle: SEOHandle = {\n\tgetSitemapEntries: () => null,\n}\n\nexport const meta: Route.MetaFunction = ({ matches }) => {\n\tconst rootData = matches.find((m) => m?.id === 'root')?.data as RootLoaderData\n\treturn [{ title: `👷 | ${rootData?.workshopTitle}` }]\n}\n\nexport async function loader({ request }: Route.LoaderArgs) {\n\tensureUndeployed()\n\tconst timings = makeTimings('adminLoader')\n\tconst apps = (await getApps({ request, timings })).filter(\n\t\t(a, i, ar) => ar.findIndex((b) => a.name === b.name) === i,\n\t)\n\tconst processes: Record<\n\t\tstring,\n\t\t{ port: number; pid?: number; color: string }\n\t> = {}\n\tconst testProcesses: Record<\n\t\tstring,\n\t\t{ pid?: number; exitCode?: number | null }\n\t> = {}\n\tfor (const [\n\t\tname,\n\t\t{ port, process, color },\n\t] of getProcesses().devProcesses.entries()) {\n\t\tprocesses[name] = { port, pid: process.pid, color }\n\t}\n\n\tfor (const [\n\t\tname,\n\t\t{ process, exitCode },\n\t] of getProcesses().testProcesses.entries()) {\n\t\ttestProcesses[name] = { pid: process?.pid, exitCode }\n\t}\n\treturn data(\n\t\t{\n\t\t\tapps,\n\t\t\tprocesses,\n\t\t\ttestProcesses,\n\t\t\tinspectorRunning: global.__inspector_open__,\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 async function action({ request }: Route.ActionArgs) {\n\tensureUndeployed()\n\tconst formData = await request.formData()\n\tconst intent = formData.get('intent')\n\tswitch (intent) {\n\t\tcase 'clear-data': {\n\t\t\tawait clearData()\n\t\t\treturn { success: true }\n\t\t}\n\t\tcase 'clear-caches': {\n\t\t\tawait clearCaches()\n\t\t\treturn { success: true }\n\t\t}\n\t\tcase 'inspect': {\n\t\t\tawait startInspector()\n\t\t\treturn { success: true }\n\t\t}\n\t\tcase 'stop-inspect': {\n\t\t\tawait stopInspector()\n\t\t\treturn { success: true }\n\t\t}\n\t\tdefault: {\n\t\t\tthrow new Error(`Unknown intent: ${intent}`)\n\t\t}\n\t}\n}\n\nfunction sortProgress(a: SerializedProgress, b: SerializedProgress) {\n\treturn a.type === 'unknown' && b.type === 'unknown'\n\t\t? 0\n\t\t: a.type === 'unknown'\n\t\t\t? -1\n\t\t\t: b.type === 'unknown'\n\t\t\t\t? 1\n\t\t\t\t: 0\n}\n\nfunction linkProgress(progress: SerializedProgress) {\n\tswitch (progress.type) {\n\t\tcase 'workshop-instructions':\n\t\t\treturn '/'\n\t\tcase 'workshop-finished':\n\t\t\treturn '/finished'\n\t\tcase 'instructions':\n\t\t\treturn `/${progress.exerciseNumber.toString().padStart(2, '0')}`\n\t\tcase 'step':\n\t\t\treturn `/${progress.exerciseNumber\n\t\t\t\t.toString()\n\t\t\t\t.padStart(2, '0')}/${progress.stepNumber.toString().padStart(2, '0')}`\n\t\tcase 'finished':\n\t\t\treturn `/${progress.exerciseNumber.toString().padStart(2, '0')}/finished`\n\t\tdefault:\n\t\t\treturn ''\n\t}\n}\n\nexport default function AdminLayout({\n\tloaderData: data,\n}: Route.ComponentProps) {\n\tconst navigation = useNavigation()\n\tconst epicProgress = useEpicProgress()\n\n\tconst isStartingInspector = navigation.formData?.get('intent') === 'inspect'\n\tconst isStoppingInspector =\n\t\tnavigation.formData?.get('intent') === 'stop-inspect'\n\n\tconst progressStatus = {\n\t\tcompleted: 'bg-blue-500',\n\t\tincomplete: 'bg-yellow-500',\n\t}\n\n\treturn (\n\t\t<div className=\"flex flex-col gap-4\">\n\t\t\t<div>\n\t\t\t\t<h2 className=\"text-lg font-bold\">Progress</h2>\n\t\t\t\t{epicProgress ? (\n\t\t\t\t\t<ul className=\"flex max-h-72 flex-col gap-2 overflow-y-scroll border-2 p-8 scrollbar-thin scrollbar-thumb-scrollbar\">\n\t\t\t\t\t\t{epicProgress.sort(sortProgress).map((progress) => {\n\t\t\t\t\t\t\tconst status = progress.epicCompletedAt\n\t\t\t\t\t\t\t\t? 'completed'\n\t\t\t\t\t\t\t\t: 'incomplete'\n\t\t\t\t\t\t\tconst label = [\n\t\t\t\t\t\t\t\tprogress.epicLessonSlug,\n\t\t\t\t\t\t\t\tprogress.epicCompletedAt\n\t\t\t\t\t\t\t\t\t? `(${progress.epicCompletedAt})`\n\t\t\t\t\t\t\t\t\t: null,\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t\t\t\t.join(' ')\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<li\n\t\t\t\t\t\t\t\t\tkey={progress.epicLessonSlug}\n\t\t\t\t\t\t\t\t\tclassName=\"flex items-center gap-2\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\tclassName={`h-3 w-3 rounded-full ${progressStatus[status]}`}\n\t\t\t\t\t\t\t\t\t\ttitle={status}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t{progress.type === 'unknown' ? (\n\t\t\t\t\t\t\t\t\t\t<span className=\"flex items-center gap-1\">\n\t\t\t\t\t\t\t\t\t\t\t{label}\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-red-500\">\n\t\t\t\t\t\t\t\t\t\t\t\t<SimpleTooltip content=\"This video is in the workshop on EpicWeb.dev, but not in the local workshop.\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Icon name=\"Close\" />\n\t\t\t\t\t\t\t\t\t\t\t\t</SimpleTooltip>\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t<Link to={linkProgress(progress)}>{label}</Link>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t<Link to={progress.epicLessonUrl}>\n\t\t\t\t\t\t\t\t\t\t<Icon name=\"ExternalLink\"></Icon>\n\t\t\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t})}\n\t\t\t\t\t</ul>\n\t\t\t\t) : (\n\t\t\t\t\t<p>No progress data</p>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\t<h2 className=\"text-lg font-bold\">Commands</h2>\n\t\t\t\t<ul className=\"max-h-48 overflow-y-scroll border-2 p-8 scrollbar-thin scrollbar-thumb-scrollbar\">\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<Form method=\"POST\">\n\t\t\t\t\t\t\t<button name=\"intent\" value=\"clear-caches\">\n\t\t\t\t\t\t\t\tClear local caches\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</Form>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<Form method=\"POST\">\n\t\t\t\t\t\t\t<button name=\"intent\" value=\"clear-data\">\n\t\t\t\t\t\t\t\tClear all local data (including auth data)\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</Form>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t{data.inspectorRunning ? (\n\t\t\t\t\t\t\t<Form method=\"POST\">\n\t\t\t\t\t\t\t\t<button name=\"intent\" value=\"stop-inspect\">\n\t\t\t\t\t\t\t\t\t{isStartingInspector\n\t\t\t\t\t\t\t\t\t\t? 'Stopping inspector...'\n\t\t\t\t\t\t\t\t\t\t: 'Stop inspector'}\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t</Form>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<Form method=\"POST\">\n\t\t\t\t\t\t\t\t<button name=\"intent\" value=\"inspect\">\n\t\t\t\t\t\t\t\t\t{isStoppingInspector\n\t\t\t\t\t\t\t\t\t\t? 'Starting inspector...'\n\t\t\t\t\t\t\t\t\t\t: 'Start inspector'}\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t</Form>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\t<h2 className=\"text-lg font-bold\">Apps</h2>\n\t\t\t\t<ul className=\"max-h-48 list-none overflow-y-scroll border-2 p-8 scrollbar-thin scrollbar-thumb-scrollbar\">\n\t\t\t\t\t{data.apps.map((app) => (\n\t\t\t\t\t\t<li key={app.name} className=\"flex items-center gap-2 py-1\">\n\t\t\t\t\t\t\t{data.processes[app.name] ? (\n\t\t\t\t\t\t\t\t<Pinger status=\"running\" />\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<Pinger status=\"stopped\" />\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{app.name}\n\t\t\t\t\t\t</li>\n\t\t\t\t\t))}\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\t<h2 className=\"text-lg font-bold\">Processes</h2>\n\t\t\t\t<ul className=\"overflow-y-scroll border-2 p-8 scrollbar-thin scrollbar-thumb-scrollbar\">\n\t\t\t\t\t{Object.entries(data.processes).map(([key, process]) => (\n\t\t\t\t\t\t<li key={key}>\n\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t{key} - Port: {process.port} - PID {process.pid} -{' '}\n\t\t\t\t\t\t\t\t{process.color}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t))}\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\t<h2 className=\"text-lg font-bold\">Test Processes</h2>\n\t\t\t\t<ul className=\"overflow-y-scroll border-2 p-8 scrollbar-thin scrollbar-thumb-scrollbar\">\n\t\t\t\t\t{Object.entries(data.testProcesses).map(([key, process]) => (\n\t\t\t\t\t\t<li key={key}>\n\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t{key} - PID {process.pid} - Exit code: {process.exitCode}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t))}\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n\nfunction Pinger({\n\tstatus,\n}: {\n\tstatus: 'running' | 'starting' | 'stopped' | 'taken'\n}) {\n\tconst colors = {\n\t\trunning: {\n\t\t\tpinger: 'bg-green-400',\n\t\t\tcircle: 'bg-green-500',\n\t\t},\n\t\tstarting: {\n\t\t\tpinger: 'bg-sky-400',\n\t\t\tcircle: 'bg-sky-500',\n\t\t},\n\t\tstopped: {\n\t\t\tcircle: 'bg-gray-500',\n\t\t},\n\t\ttaken: {\n\t\t\tpinger: 'bg-red-400',\n\t\t\tcircle: 'bg-red-500',\n\t\t},\n\t}[status]\n\treturn (\n\t\t<span className=\"relative flex h-3 w-3\">\n\t\t\t{colors.pinger ? (\n\t\t\t\t<span\n\t\t\t\t\tclassName={`absolute inline-flex h-full w-full animate-ping rounded-full ${colors.pinger} opacity-75`}\n\t\t\t\t/>\n\t\t\t) : null}\n\t\t\t<span\n\t\t\t\tclassName={`relative inline-flex h-3 w-3 rounded-full ${colors.circle}`}\n\t\t\t/>\n\t\t</span>\n\t)\n}\n"],"names":["handle","getSitemapEntries","meta","matches","rootData","find","m","id","data","title","workshopTitle","sortProgress","a","b","type","linkProgress","progress","exerciseNumber","toString","padStart","stepNumber","index","_UNSAFE_withComponentProps","AdminLayout","loaderData","navigation","useNavigation","epicProgress","useEpicProgress","isStartingInspector","formData","get","isStoppingInspector","progressStatus","completed","incomplete","jsxs","className","children","jsx","sort","map","status","epicCompletedAt","label","epicLessonSlug","filter","Boolean","join","SimpleTooltip","content","Icon","name","Link","to","epicLessonUrl","Form","method","value","inspectorRunning","apps","app","processes","Pinger","Object","entries","key","process","port","pid","color","testProcesses","exitCode","colors","running","pinger","circle","starting","stopped","taken"],"mappings":"gSA4BO,MAAMA,EAAoB,CAChCC,kBAAmBA,IAAM,IAC1B,EAEaC,EAA2BA,CAAC,CAAEC,QAAAA,CAAQ,IAAM,OAClD,MAAAC,GAAWD,EAAAA,EAAQE,KAAMC,IAAMA,GAAAA,YAAAA,EAAGC,MAAO,MAAM,IAApCJ,YAAAA,EAAuCK,KACxD,MAAO,CAAC,CAAEC,MAAO,QAAQL,GAAAA,YAAAA,EAAUM,aAAa,EAAG,CAAC,CACrD,EAuEA,SAASC,EAAaC,EAAuBC,EAAuB,CACnE,OAAOD,EAAEE,OAAS,WAAaD,EAAEC,OAAS,UACvC,EACAF,EAAEE,OAAS,UACV,GACAD,EAAEC,OAAS,UACV,EACA,CACN,CAEA,SAASC,EAAaC,EAA8B,CACnD,OAAQA,EAASF,KAAM,CACtB,IAAK,wBACG,MAAA,IACR,IAAK,oBACG,MAAA,YACR,IAAK,eACG,MAAA,IAAIE,EAASC,eAAeC,WAAWC,SAAS,EAAG,GAAG,CAAC,GAC/D,IAAK,OACJ,MAAO,IAAIH,EAASC,eAClBC,WACAC,SAAS,EAAG,GAAG,CAAC,IAAIH,EAASI,WAAWF,SAAA,EAAWC,SAAS,EAAG,GAAG,CAAC,GACtE,IAAK,WACG,MAAA,IAAIH,EAASC,eAAeC,WAAWC,SAAS,EAAG,GAAG,CAAC,YAC/D,QACQ,MAAA,EACT,CACD,CAEA,MAAAE,EAAAC,EAAwBC,SAAY,CACnCC,WAAYhB,CACb,EAAyB,SACxB,MAAMiB,EAAaC,EAAc,EAC3BC,EAAeC,EAAgB,EAE/BC,IAAsBJ,EAAAA,EAAWK,WAAXL,YAAAA,EAAqBM,IAAI,aAAc,UAC7DC,IACLP,EAAAA,EAAWK,WAAXL,YAAAA,EAAqBM,IAAI,aAAc,eAElCE,EAAiB,CACtBC,UAAW,cACXC,WAAY,eACb,EAGC,OAAAC,EAAAA,KAAC,MAAI,CAAAC,UAAU,sBACdC,SAAA,CAAAF,EAAA,KAAC,MACA,CAAAE,SAAA,CAACC,EAAA,IAAA,KAAA,CAAGF,UAAU,oBAAoBC,SAAQ,WAAA,EACzCX,EACCY,EAAA,IAAA,KAAA,CAAGF,UAAU,uGACZC,SAAaX,EAAAa,KAAK7B,CAAY,EAAE8B,IAAKzB,GAAa,CAC5C,MAAA0B,EAAS1B,EAAS2B,gBACrB,YACA,aACGC,EAAQ,CACb5B,EAAS6B,eACT7B,EAAS2B,gBACN,IAAI3B,EAAS2B,eAAe,IAC5B,IAAA,EAEFG,OAAOC,OAAO,EACdC,KAAK,GAAG,EAET,OAAAZ,EAAAA,KAAC,KAAA,CAEAC,UAAU,0BAEVC,SAAA,CAAAC,EAAA,IAAC,OAAA,CACAF,UAAW,wBAAwBJ,EAAeS,CAAM,CAAC,GACzDjC,MAAOiC,CACR,CAAA,EACC1B,EAASF,OAAS,UACjBsB,EAAAA,KAAA,OAAA,CAAKC,UAAU,0BACdC,SAAA,CAAAM,EACAL,EAAA,IAAA,OAAA,CAAKF,UAAU,eACfC,SAACC,EAAA,IAAAU,EAAA,CAAcC,QAAQ,+EACtBZ,SAACC,EAAA,IAAAY,EAAA,CAAKC,KAAK,OAAQ,CAAA,CACpB,CAAA,CACD,CAAA,CAAA,CAAA,CACD,EAECb,EAAA,IAAAc,EAAA,CAAKC,GAAIvC,EAAaC,CAAQ,EAAIsB,SAAMM,CAAA,CAAA,EAE1CL,EAAA,IAACc,GAAKC,GAAItC,EAASuC,cAClBjB,SAACC,EAAA,IAAAY,EAAA,CAAKC,KAAK,cAAe,CAAA,CAC3B,CAAA,CAAA,CAAA,EArBKpC,EAAS6B,cAsBf,CAED,CAAA,CAAA,CACF,EAEAN,EAAA,IAAC,KAAED,SAAgB,kBAAA,CAAA,CAAA,CAErB,CAAA,SACC,MACA,CAAAA,SAAA,CAACC,EAAA,IAAA,KAAA,CAAGF,UAAU,oBAAoBC,SAAQ,UAAA,CAAA,EAC1CF,EAAA,KAAC,KAAG,CAAAC,UAAU,mFACbC,SAAA,CAAAC,EAAA,IAAC,KACA,CAAAD,SAAAC,EAAA,IAACiB,EAAK,CAAAC,OAAO,OACZnB,SAAAC,EAAA,IAAC,SAAO,CAAAa,KAAK,SAASM,MAAM,eAAepB,SAAA,oBAE3C,CAAA,CACD,CAAA,CACD,CAAA,EACCC,EAAA,IAAA,KAAA,CACAD,SAACC,EAAA,IAAAiB,EAAA,CAAKC,OAAO,OACZnB,SAAAC,EAAA,IAAC,SAAO,CAAAa,KAAK,SAASM,MAAM,aAAapB,SAAA,4CAEzC,CAAA,CACD,CAAA,CACD,CAAA,EACCC,EAAA,IAAA,KAAA,CACCD,SAAA9B,EAAKmD,iBACJpB,EAAAA,IAAAiB,EAAA,CAAKC,OAAO,OACZnB,eAAC,SAAO,CAAAc,KAAK,SAASM,MAAM,eAC1BpB,SACET,EAAA,wBACA,gBACJ,CAAA,CAAA,CACD,EAEAU,EAAA,IAACiB,EAAK,CAAAC,OAAO,OACZnB,SAACC,EAAA,IAAA,SAAA,CAAOa,KAAK,SAASM,MAAM,UAC1BpB,SAAAN,EACE,wBACA,iBACJ,CAAA,CACD,CAAA,CAEF,CAAA,CAAA,CACD,CAAA,CAAA,CACD,CAAA,SACC,MACA,CAAAM,SAAA,CAACC,EAAA,IAAA,KAAA,CAAGF,UAAU,oBAAoBC,SAAI,MAAA,CAAA,EACrCC,EAAA,IAAA,KAAA,CAAGF,UAAU,6FACZC,SAAA9B,EAAKoD,KAAKnB,IAAKoB,GACdzB,EAAA,KAAA,KAAA,CAAkBC,UAAU,+BAC3BC,SAAA,CAAA9B,EAAKsD,UAAUD,EAAIT,IAAI,EACvBb,EAAA,IAACwB,EAAO,CAAArB,OAAO,SAAU,CAAA,EAExBH,EAAA,IAAAwB,EAAA,CAAOrB,OAAO,SAAU,CAAA,EAEzBmB,EAAIT,IAAA,CANG,EAAAS,EAAIT,IAOb,CACA,CACF,CAAA,CAAA,CACD,CAAA,SACC,MACA,CAAAd,SAAA,CAACC,EAAA,IAAA,KAAA,CAAGF,UAAU,oBAAoBC,SAAS,WAAA,CAAA,QAC1C,KAAG,CAAAD,UAAU,0EACZC,SAAO0B,OAAAC,QAAQzD,EAAKsD,SAAS,EAAErB,IAAI,CAAC,CAACyB,EAAKC,CAAO,IAChD5B,EAAAA,IAAA,KAAA,CACAD,gBAAC,OACC,CAAAA,SAAA,CAAA4B,EAAI,YAAUC,EAAQC,KAAK,UAAQD,EAAQE,IAAI,KAAG,IAClDF,EAAQG,KAAA,CACV,CAAA,CAAA,EAJQJ,CAKT,CACA,CACF,CAAA,CAAA,CACD,CAAA,SACC,MACA,CAAA5B,SAAA,CAACC,EAAA,IAAA,KAAA,CAAGF,UAAU,oBAAoBC,SAAc,gBAAA,CAAA,QAC/C,KAAG,CAAAD,UAAU,0EACZC,SAAO0B,OAAAC,QAAQzD,EAAK+D,aAAa,EAAE9B,IAAI,CAAC,CAACyB,EAAKC,CAAO,IACpD5B,EAAAA,IAAA,KAAA,CACAD,gBAAC,OACC,CAAAA,SAAA,CAAA4B,EAAI,UAAQC,EAAQE,IAAI,iBAAeF,EAAQK,QAAA,CACjD,CAAA,CAAA,EAHQN,CAIT,CACA,CACF,CAAA,CAAA,CACD,CAAA,CAAA,CACD,CAAA,CAEF,CAAA,EAEA,SAASH,EAAO,CACfrB,OAAAA,CACD,EAEG,CACF,MAAM+B,EAAS,CACdC,QAAS,CACRC,OAAQ,eACRC,OAAQ,cACT,EACAC,SAAU,CACTF,OAAQ,aACRC,OAAQ,YACT,EACAE,QAAS,CACRF,OAAQ,aACT,EACAG,MAAO,CACNJ,OAAQ,aACRC,OAAQ,YACT,GACClC,CAAM,EAEP,OAAAN,EAAAA,KAAC,OAAK,CAAAC,UAAU,wBACdC,SAAA,CAAAmC,EAAOE,OACPpC,EAAAA,IAAC,OAAA,CACAF,UAAW,gEAAgEoC,EAAOE,MAAM,cACzF,EACG,KACJpC,EAAA,IAAC,OAAA,CACAF,UAAW,6CAA6CoC,EAAOG,MAAM,EAAA,CACtE,CAAA,CACD,CAAA,CAEF"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{r as c,c as K,A as pe,L as B,w as he,a as ve,l as ge,m as je}from"./chunk-QMGIS6GS-CTjj1G71.js";import{j as e}from"./jsx-runtime-BjG_zV1W.js";import{d as V,e as H,P,f as w,h as be,u as $,m as we,g as Ne,S as ye}from"./tooltip-C6xKzWST.js";import{f as Te,u as z}from"./index-Co8qgD4k.js";import{u as Y,I,c as Ce}from"./misc-yfWFSwMN.js";import{D as Ee}from"./diff-CtGU9cxI.js";import{G as Pe}from"./error-boundary-BLyHIxcu.js";import{L as Ie}from"./loading-CXEQXwx8.js";import{D as De,u as Re}from"./discord-D4appJa-.js";import{u as Se}from"./online-CFV79-RX.js";import{u as Fe}from"./index-DWV7tDz3.js";import{S as _e}from"./set-playground-DtZ5ki7i.js";import{P as Ae,a as ke}from"./tests-7juFXgcY.js";import{P as A}from"./preview-CE_VqYU4.js";import"./index-BP1ceC2h.js";import"./index-DJsDENYs.js";import"./accordion-BNzI0wOK.js";import"./mdx-DD5XL3ew.js";import"./epic-video-D_3otytp.js";import"./index-C0Fh_zu0.js";import"./pe-C53l4u-6.js";import"./user-Dmcddqge.js";import"./workshop-config-gFAnGhSV.js";import"./progress-bar-DTYORRrG.js";import"./revalidation-ws-89FLt73b.js";import"./use-event-source-B411g-uF.js";import"./button-DRpue1NG.js";var _="rovingFocusGroup.onEntryFocus",Le={bubbles:!1,cancelable:!0},D="RovingFocusGroup",[k,W,Ue]=Te(D),[Me,q]=V(D,[Ue]),[Oe,Ge]=Me(D),J=c.forwardRef((t,r)=>e.jsx(k.Provider,{scope:t.__scopeRovingFocusGroup,children:e.jsx(k.Slot,{scope:t.__scopeRovingFocusGroup,children:e.jsx(Ke,{...t,ref:r})})}));J.displayName=D;var Ke=c.forwardRef((t,r)=>{const{__scopeRovingFocusGroup:s,orientation:o,loop:a=!1,dir:f,currentTabStopId:l,defaultCurrentTabStopId:m,onCurrentTabStopIdChange:g,onEntryFocus:x,preventScrollOnEntryFocus:i=!1,...u}=t,p=c.useRef(null),N=be(r,p),y=z(f),[T,d]=$({prop:l,defaultProp:m??null,onChange:g,caller:D}),[n,b]=c.useState(!1),h=we(x),j=W(s),S=c.useRef(!1),[ue,M]=c.useState(0);return c.useEffect(()=>{const v=p.current;if(v)return v.addEventListener(_,h),()=>v.removeEventListener(_,h)},[h]),e.jsx(Oe,{scope:s,orientation:o,dir:y,loop:a,currentTabStopId:T,onItemFocus:c.useCallback(v=>d(v),[d]),onItemShiftTab:c.useCallback(()=>b(!0),[]),onFocusableItemAdd:c.useCallback(()=>M(v=>v+1),[]),onFocusableItemRemove:c.useCallback(()=>M(v=>v-1),[]),children:e.jsx(P.div,{tabIndex:n||ue===0?-1:0,"data-orientation":o,...u,ref:N,style:{outline:"none",...t.style},onMouseDown:w(t.onMouseDown,()=>{S.current=!0}),onFocus:w(t.onFocus,v=>{const de=!S.current;if(v.target===v.currentTarget&&de&&!n){const O=new CustomEvent(_,Le);if(v.currentTarget.dispatchEvent(O),!O.defaultPrevented){const F=j().filter(C=>C.focusable),fe=F.find(C=>C.active),me=F.find(C=>C.id===T),xe=[fe,me,...F].filter(Boolean).map(C=>C.ref.current);Z(xe,i)}}S.current=!1}),onBlur:w(t.onBlur,()=>b(!1))})})}),Q="RovingFocusGroupItem",X=c.forwardRef((t,r)=>{const{__scopeRovingFocusGroup:s,focusable:o=!0,active:a=!1,tabStopId:f,children:l,...m}=t,g=H(),x=f||g,i=Ge(Q,s),u=i.currentTabStopId===x,p=W(s),{onFocusableItemAdd:N,onFocusableItemRemove:y,currentTabStopId:T}=i;return c.useEffect(()=>{if(o)return N(),()=>y()},[o,N,y]),e.jsx(k.ItemSlot,{scope:s,id:x,focusable:o,active:a,children:e.jsx(P.span,{tabIndex:u?0:-1,"data-orientation":i.orientation,...m,ref:r,onMouseDown:w(t.onMouseDown,d=>{o?i.onItemFocus(x):d.preventDefault()}),onFocus:w(t.onFocus,()=>i.onItemFocus(x)),onKeyDown:w(t.onKeyDown,d=>{if(d.key==="Tab"&&d.shiftKey){i.onItemShiftTab();return}if(d.target!==d.currentTarget)return;const n=He(d,i.orientation,i.dir);if(n!==void 0){if(d.metaKey||d.ctrlKey||d.altKey||d.shiftKey)return;d.preventDefault();let h=p().filter(j=>j.focusable).map(j=>j.ref.current);if(n==="last")h.reverse();else if(n==="prev"||n==="next"){n==="prev"&&h.reverse();const j=h.indexOf(d.currentTarget);h=i.loop?$e(h,j+1):h.slice(j+1)}setTimeout(()=>Z(h))}}),children:typeof l=="function"?l({isCurrentTabStop:u,hasTabStop:T!=null}):l})})});X.displayName=Q;var Be={ArrowLeft:"prev",ArrowUp:"prev",ArrowRight:"next",ArrowDown:"next",PageUp:"first",Home:"first",PageDown:"last",End:"last"};function Ve(t,r){return r!=="rtl"?t:t==="ArrowLeft"?"ArrowRight":t==="ArrowRight"?"ArrowLeft":t}function He(t,r,s){const o=Ve(t.key,s);if(!(r==="vertical"&&["ArrowLeft","ArrowRight"].includes(o))&&!(r==="horizontal"&&["ArrowUp","ArrowDown"].includes(o)))return Be[o]}function Z(t,r=!1){const s=document.activeElement;for(const o of t)if(o===s||(o.focus({preventScroll:r}),document.activeElement!==s))return}function $e(t,r){return t.map((s,o)=>t[(r+o)%t.length])}var ze=J,Ye=X,R="Tabs",[We,_t]=V(R,[q]),ee=q(),[qe,U]=We(R),te=c.forwardRef((t,r)=>{const{__scopeTabs:s,value:o,onValueChange:a,defaultValue:f,orientation:l="horizontal",dir:m,activationMode:g="automatic",...x}=t,i=z(m),[u,p]=$({prop:o,onChange:a,defaultProp:f??"",caller:R});return e.jsx(qe,{scope:s,baseId:H(),value:u,onValueChange:p,orientation:l,dir:i,activationMode:g,children:e.jsx(P.div,{dir:i,"data-orientation":l,...x,ref:r})})});te.displayName=R;var re="TabsList",se=c.forwardRef((t,r)=>{const{__scopeTabs:s,loop:o=!0,...a}=t,f=U(re,s),l=ee(s);return e.jsx(ze,{asChild:!0,...l,orientation:f.orientation,dir:f.dir,loop:o,children:e.jsx(P.div,{role:"tablist","aria-orientation":f.orientation,...a,ref:r})})});se.displayName=re;var oe="TabsTrigger",ne=c.forwardRef((t,r)=>{const{__scopeTabs:s,value:o,disabled:a=!1,...f}=t,l=U(oe,s),m=ee(s),g=le(l.baseId,o),x=ce(l.baseId,o),i=o===l.value;return e.jsx(Ye,{asChild:!0,...m,focusable:!a,active:i,children:e.jsx(P.button,{type:"button",role:"tab","aria-selected":i,"aria-controls":x,"data-state":i?"active":"inactive","data-disabled":a?"":void 0,disabled:a,id:g,...f,ref:r,onMouseDown:w(t.onMouseDown,u=>{!a&&u.button===0&&u.ctrlKey===!1?l.onValueChange(o):u.preventDefault()}),onKeyDown:w(t.onKeyDown,u=>{[" ","Enter"].includes(u.key)&&l.onValueChange(o)}),onFocus:w(t.onFocus,()=>{const u=l.activationMode!=="manual";!i&&!a&&u&&l.onValueChange(o)})})})});ne.displayName=oe;var ae="TabsContent",ie=c.forwardRef((t,r)=>{const{__scopeTabs:s,value:o,forceMount:a,children:f,...l}=t,m=U(ae,s),g=le(m.baseId,o),x=ce(m.baseId,o),i=o===m.value,u=c.useRef(i);return c.useEffect(()=>{const p=requestAnimationFrame(()=>u.current=!1);return()=>cancelAnimationFrame(p)},[]),e.jsx(Ne,{present:a||i,children:({present:p})=>e.jsx(P.div,{"data-state":i?"active":"inactive","data-orientation":m.orientation,role:"tabpanel","aria-labelledby":g,hidden:!p,id:x,tabIndex:0,...l,ref:r,style:{...t.style,animationDuration:u.current?"0s":void 0},children:p&&f})})});ie.displayName=ae;function le(t,r){return`${t}-trigger-${r}`}function ce(t,r){return`${t}-content-${r}`}var Je=te,Qe=se,Xe=ne,E=ie;function Ze(){return e.jsxs("div",{className:"flex h-full w-full flex-col gap-4 pt-4",children:[e.jsx("div",{className:"text-center",children:e.jsx(De,{})}),e.jsx("div",{className:"flex-1 overflow-y-scroll bg-accent pb-4 scrollbar-thin scrollbar-thumb-scrollbar",children:e.jsx(et,{})})]})}function et(){const t=K(),r=Re(),s=Y();return Se()?e.jsxs("div",{className:"flex h-full flex-col items-center justify-between",children:[e.jsx(c.Suspense,{fallback:e.jsx("div",{className:"flex h-full w-full flex-col items-center justify-center",children:e.jsx(Ie,{children:"Loading Discord Posts"})}),children:e.jsx(pe,{resolve:t.discordPostsPromise,errorElement:e.jsx("div",{className:"text-red-500",children:"There was a problem loading the discord posts"}),children:a=>e.jsx("ul",{className:"flex w-full flex-col gap-4 p-3 xl:p-12",children:a.map(f=>e.jsx("li",{className:"rounded-xl border bg-background transition-all duration-200 focus-within:-translate-y-1 focus-within:shadow-lg hover:-translate-y-1 hover:shadow-lg",children:e.jsx(tt,{thread:f})},f.id))})})}),e.jsx("div",{children:e.jsxs(B,{to:s&&!r.includes("oauth")?r.replace(/^https/,"discord"):r,target:r.includes("oauth")?void 0:"_blank",rel:"noreferrer noopener",onClick:s?a=>{a.preventDefault(),window.open(a.currentTarget.href,"_blank","noreferrer noopener")}:void 0,className:"flex items-center gap-2 p-2 text-xl hover:underline",children:["Create Post ",e.jsx(I,{name:"ExternalLink"})]})})]}):e.jsx("div",{className:"flex h-full flex-col items-center justify-between",children:e.jsx("div",{className:"flex h-full w-full flex-col items-center justify-center text-foreground-destructive",children:e.jsx(I,{name:"WifiNoConnection",size:"xl",children:"Unable to load discord messages when offline"})})})}function tt({thread:t}){const r=t.reactions.filter(s=>s.count);return e.jsx("div",{children:e.jsxs("div",{className:"flex flex-col gap-2 p-4",children:[e.jsxs("div",{className:"flex gap-4",children:[e.jsxs("div",{className:"flex flex-col gap-1",children:[t.tags.length?e.jsx("div",{className:"flex gap-2",children:t.tags.map(s=>e.jsxs("div",{className:"flex items-center justify-center gap-1 rounded-full bg-accent px-2 py-1 text-sm",children:[e.jsx("span",{className:"h-3 w-3 leading-3",children:e.jsx(G,{name:s.emojiName,url:s.emojiUrl})}),e.jsx("span",{children:s.name})]},s.name))}):null,e.jsx("strong",{className:"text-xl font-bold",children:t.name}),e.jsxs("div",{className:"flex items-start gap-1",children:[e.jsxs("div",{className:"flex items-center gap-1",children:[t.authorAvatarUrl?e.jsx("img",{src:t.authorAvatarUrl,alt:"",className:"h-6 w-6 rounded-full"}):null,e.jsxs("span",{children:[e.jsx("span",{className:"font-bold",style:t.authorHexAccentColor?{color:t.authorHexAccentColor}:{},children:t.authorDisplayName}),":"," "]})]}),e.jsx("span",{className:"flex-1 overflow-ellipsis text-muted-foreground",children:t.messagePreview})]})]}),t.previewImageUrl?e.jsx("img",{src:t.previewImageUrl,alt:"",className:"h-28 w-28 rounded-lg object-cover"}):null]}),e.jsxs("div",{className:"flex justify-between",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("span",{children:r.length?e.jsx("ul",{className:"flex items-center gap-2",children:r.map((s,o)=>e.jsxs("li",{className:"flex items-center gap-1 rounded-md border border-blue-600 bg-blue-500/20 px-[5px] py-[0.5px] text-sm",children:[e.jsx("span",{className:"h-3 w-3 leading-3",children:e.jsx(G,{name:s.emojiName,url:s.emojiUrl})}),e.jsx("span",{children:s.count})]},o))}):null}),e.jsxs("span",{className:"flex items-center gap-1",children:[e.jsxs("span",{className:"inline-flex items-center gap-1",children:[e.jsx(I,{name:"Chat"})," ",t.messageCount]}),` · ${t.lastUpdatedDisplay}`]})]}),e.jsxs("span",{className:"flex items-center gap-4",children:[e.jsx("a",{href:t.link.replace(/^https/,"discord"),children:e.jsx(I,{name:"Discord"})}),e.jsx("a",{href:t.link,target:"_blank",rel:"noreferrer noopener",children:e.jsx(I,{name:"ExternalLink"})})]})]})]})})}function G({name:t,url:r}){return r?e.jsx("img",{src:r,alt:t,className:"h-full w-full"}):t||null}function rt({appInfo:t,inBrowserBrowserRef:r,problemAppName:s,allApps:o,isUpToDate:a}){return e.jsx(Ae,{playgroundAppName:t==null?void 0:t.appName,problemAppName:s,allApps:o,isUpToDate:a,children:(t==null?void 0:t.dev.type)==="none"?e.jsxs("div",{children:[e.jsx("div",{className:"text-foreground-secondary flex h-full items-center justify-center text-2xl",children:"Non-UI playground"}),e.jsx("div",{children:e.jsxs("div",{className:"text-foreground-secondary flex flex-wrap gap-1 text-center",children:["Navigate to"," ",e.jsx(ye,{content:t.fullPath,children:e.jsx("span",{className:"underline",onClick:()=>{navigator.clipboard.writeText(t.fullPath),Fe.success("Copied playground path to clipboard")},children:"the playground directory"})})," ","in your editor and terminal to work on this exercise!"]})})]}):t?e.jsx(A,{id:t.appName,appInfo:t,inBrowserBrowserRef:r}):e.jsxs("div",{className:"flex flex-col justify-center gap-2",children:[e.jsx("p",{children:"Please set the playground first"}),s?e.jsx(_e,{appName:s}):null]})})}const L=["playground","problem","solution","tests","diff","chat"],st=t=>!!(t&&L.includes(t));function ot(t,r,s){const o=new URLSearchParams(t);return s===null?o.delete(r):o.set(r,s),o}const At=he(function(){var u,p,N,y,T,d;const r=K(),[s]=ge(),o=s.get("preview"),a=c.useRef(null),f=Y(),l=je();function m(n){var b,h,j;if(n==="tests")return ENV.EPICSHOP_DEPLOYED||!r.playground||r.playground.test.type==="none";if(n==="problem"||n==="solution"){if(((b=r[n])==null?void 0:b.dev.type)==="none")return!0;if(ENV.EPICSHOP_DEPLOYED)return((h=r[n])==null?void 0:h.dev.type)!=="browser"&&!((j=r[n])!=null&&j.stackBlitzUrl)}return!!(n==="playground"&&ENV.EPICSHOP_DEPLOYED)}const g=st(o)?o:L.find(n=>!m(n)),x=`/diff?${new URLSearchParams({app1:((u=r.problem)==null?void 0:u.name)??"",app2:((p=r.solution)==null?void 0:p.name)??""})}`;function i(n){n.altKey&&!n.ctrlKey&&!n.shiftKey&&!n.metaKey&&(n.preventDefault(),l(x))}return e.jsxs(Je,{className:"relative flex flex-col overflow-y-auto sm:col-span-1 sm:row-span-1",value:g,children:[e.jsx(Qe,{className:"h-14 min-h-14 overflow-x-hidden border-b scrollbar-thin scrollbar-thumb-scrollbar",children:L.map(n=>{const b=m(n);return e.jsx(Xe,{value:n,hidden:b,asChild:!0,children:e.jsx(B,{id:`${n}-tab`,className:Ce("clip-path-button relative h-full px-6 py-4 font-mono text-sm uppercase outline-none radix-state-active:z-10 radix-state-active:bg-foreground radix-state-active:text-background radix-state-active:hover:bg-foreground/80 radix-state-active:hover:text-background/80 radix-state-inactive:hover:bg-foreground/20 radix-state-inactive:hover:text-foreground/80 focus:bg-foreground/80 focus:text-background/80",b?"hidden":"inline-block"),preventScrollReset:!0,prefetch:"intent",onClick:i,to:n==="diff"&&f?x:`?${ot(s,"preview",n==="playground"?null:n)}`,children:n})},n)})}),e.jsxs("div",{className:"relative z-10 flex min-h-96 flex-grow flex-col overflow-y-auto",children:[e.jsx(E,{value:"playground",className:"flex w-full flex-grow items-center justify-center self-start radix-state-inactive:hidden",forceMount:!0,children:e.jsx(rt,{appInfo:r.playground,problemAppName:(N=r.problem)==null?void 0:N.name,inBrowserBrowserRef:a,allApps:r.allApps,isUpToDate:((y=r.playground)==null?void 0:y.isUpToDate)??!1})}),e.jsx(E,{value:"problem",className:"flex w-full flex-grow items-center justify-center self-start radix-state-inactive:hidden",forceMount:!0,children:e.jsx(A,{appInfo:r.problem,inBrowserBrowserRef:a})}),e.jsx(E,{value:"solution",className:"flex w-full flex-grow items-center justify-center self-start radix-state-inactive:hidden",forceMount:!0,children:e.jsx(A,{appInfo:r.solution,inBrowserBrowserRef:a})}),e.jsx(E,{value:"tests",className:"flex w-full flex-grow items-start justify-center self-start overflow-hidden radix-state-inactive:hidden",children:e.jsx(ke,{appInfo:r.playground,problemAppName:(T=r.problem)==null?void 0:T.name,allApps:r.allApps,isUpToDate:((d=r.playground)==null?void 0:d.isUpToDate)??!1})}),e.jsx(E,{value:"diff",className:"flex h-full w-full flex-grow items-start justify-center self-start radix-state-inactive:hidden",children:e.jsx(Ee,{diff:r.diff,allApps:r.allApps})}),e.jsx(E,{value:"chat",className:"flex h-full w-full flex-grow items-start justify-center self-start radix-state-inactive:hidden",children:e.jsx(Ze,{})})]})]})}),kt=ve(function(){return e.jsx(Pe,{statusHandlers:{404:()=>e.jsx("p",{children:"Sorry, we couldn't find an app here."})}})});export{kt as ErrorBoundary,At as default};
|
|
2
|
+
//# sourceMappingURL=index-BGtlU-cD.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-BGtlU-cD.js","sources":["../../../../../node_modules/@radix-ui/react-roving-focus/dist/index.mjs","../../../../../node_modules/@radix-ui/react-tabs/dist/index.mjs","../../../app/routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/__shared/discord.tsx","../../../app/routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/__shared/playground.tsx","../../../app/routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/index.tsx"],"sourcesContent":["\"use client\";\n\n// src/roving-focus-group.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createCollection } from \"@radix-ui/react-collection\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { jsx } from \"react/jsx-runtime\";\nvar ENTRY_FOCUS = \"rovingFocusGroup.onEntryFocus\";\nvar EVENT_OPTIONS = { bubbles: false, cancelable: true };\nvar GROUP_NAME = \"RovingFocusGroup\";\nvar [Collection, useCollection, createCollectionScope] = createCollection(GROUP_NAME);\nvar [createRovingFocusGroupContext, createRovingFocusGroupScope] = createContextScope(\n GROUP_NAME,\n [createCollectionScope]\n);\nvar [RovingFocusProvider, useRovingFocusContext] = createRovingFocusGroupContext(GROUP_NAME);\nvar RovingFocusGroup = React.forwardRef(\n (props, forwardedRef) => {\n return /* @__PURE__ */ jsx(Collection.Provider, { scope: props.__scopeRovingFocusGroup, children: /* @__PURE__ */ jsx(Collection.Slot, { scope: props.__scopeRovingFocusGroup, children: /* @__PURE__ */ jsx(RovingFocusGroupImpl, { ...props, ref: forwardedRef }) }) });\n }\n);\nRovingFocusGroup.displayName = GROUP_NAME;\nvar RovingFocusGroupImpl = React.forwardRef((props, forwardedRef) => {\n const {\n __scopeRovingFocusGroup,\n orientation,\n loop = false,\n dir,\n currentTabStopId: currentTabStopIdProp,\n defaultCurrentTabStopId,\n onCurrentTabStopIdChange,\n onEntryFocus,\n preventScrollOnEntryFocus = false,\n ...groupProps\n } = props;\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const direction = useDirection(dir);\n const [currentTabStopId, setCurrentTabStopId] = useControllableState({\n prop: currentTabStopIdProp,\n defaultProp: defaultCurrentTabStopId ?? null,\n onChange: onCurrentTabStopIdChange,\n caller: GROUP_NAME\n });\n const [isTabbingBackOut, setIsTabbingBackOut] = React.useState(false);\n const handleEntryFocus = useCallbackRef(onEntryFocus);\n const getItems = useCollection(__scopeRovingFocusGroup);\n const isClickFocusRef = React.useRef(false);\n const [focusableItemsCount, setFocusableItemsCount] = React.useState(0);\n React.useEffect(() => {\n const node = ref.current;\n if (node) {\n node.addEventListener(ENTRY_FOCUS, handleEntryFocus);\n return () => node.removeEventListener(ENTRY_FOCUS, handleEntryFocus);\n }\n }, [handleEntryFocus]);\n return /* @__PURE__ */ jsx(\n RovingFocusProvider,\n {\n scope: __scopeRovingFocusGroup,\n orientation,\n dir: direction,\n loop,\n currentTabStopId,\n onItemFocus: React.useCallback(\n (tabStopId) => setCurrentTabStopId(tabStopId),\n [setCurrentTabStopId]\n ),\n onItemShiftTab: React.useCallback(() => setIsTabbingBackOut(true), []),\n onFocusableItemAdd: React.useCallback(\n () => setFocusableItemsCount((prevCount) => prevCount + 1),\n []\n ),\n onFocusableItemRemove: React.useCallback(\n () => setFocusableItemsCount((prevCount) => prevCount - 1),\n []\n ),\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n tabIndex: isTabbingBackOut || focusableItemsCount === 0 ? -1 : 0,\n \"data-orientation\": orientation,\n ...groupProps,\n ref: composedRefs,\n style: { outline: \"none\", ...props.style },\n onMouseDown: composeEventHandlers(props.onMouseDown, () => {\n isClickFocusRef.current = true;\n }),\n onFocus: composeEventHandlers(props.onFocus, (event) => {\n const isKeyboardFocus = !isClickFocusRef.current;\n if (event.target === event.currentTarget && isKeyboardFocus && !isTabbingBackOut) {\n const entryFocusEvent = new CustomEvent(ENTRY_FOCUS, EVENT_OPTIONS);\n event.currentTarget.dispatchEvent(entryFocusEvent);\n if (!entryFocusEvent.defaultPrevented) {\n const items = getItems().filter((item) => item.focusable);\n const activeItem = items.find((item) => item.active);\n const currentItem = items.find((item) => item.id === currentTabStopId);\n const candidateItems = [activeItem, currentItem, ...items].filter(\n Boolean\n );\n const candidateNodes = candidateItems.map((item) => item.ref.current);\n focusFirst(candidateNodes, preventScrollOnEntryFocus);\n }\n }\n isClickFocusRef.current = false;\n }),\n onBlur: composeEventHandlers(props.onBlur, () => setIsTabbingBackOut(false))\n }\n )\n }\n );\n});\nvar ITEM_NAME = \"RovingFocusGroupItem\";\nvar RovingFocusGroupItem = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeRovingFocusGroup,\n focusable = true,\n active = false,\n tabStopId,\n children,\n ...itemProps\n } = props;\n const autoId = useId();\n const id = tabStopId || autoId;\n const context = useRovingFocusContext(ITEM_NAME, __scopeRovingFocusGroup);\n const isCurrentTabStop = context.currentTabStopId === id;\n const getItems = useCollection(__scopeRovingFocusGroup);\n const { onFocusableItemAdd, onFocusableItemRemove, currentTabStopId } = context;\n React.useEffect(() => {\n if (focusable) {\n onFocusableItemAdd();\n return () => onFocusableItemRemove();\n }\n }, [focusable, onFocusableItemAdd, onFocusableItemRemove]);\n return /* @__PURE__ */ jsx(\n Collection.ItemSlot,\n {\n scope: __scopeRovingFocusGroup,\n id,\n focusable,\n active,\n children: /* @__PURE__ */ jsx(\n Primitive.span,\n {\n tabIndex: isCurrentTabStop ? 0 : -1,\n \"data-orientation\": context.orientation,\n ...itemProps,\n ref: forwardedRef,\n onMouseDown: composeEventHandlers(props.onMouseDown, (event) => {\n if (!focusable) event.preventDefault();\n else context.onItemFocus(id);\n }),\n onFocus: composeEventHandlers(props.onFocus, () => context.onItemFocus(id)),\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n if (event.key === \"Tab\" && event.shiftKey) {\n context.onItemShiftTab();\n return;\n }\n if (event.target !== event.currentTarget) return;\n const focusIntent = getFocusIntent(event, context.orientation, context.dir);\n if (focusIntent !== void 0) {\n if (event.metaKey || event.ctrlKey || event.altKey || event.shiftKey) return;\n event.preventDefault();\n const items = getItems().filter((item) => item.focusable);\n let candidateNodes = items.map((item) => item.ref.current);\n if (focusIntent === \"last\") candidateNodes.reverse();\n else if (focusIntent === \"prev\" || focusIntent === \"next\") {\n if (focusIntent === \"prev\") candidateNodes.reverse();\n const currentIndex = candidateNodes.indexOf(event.currentTarget);\n candidateNodes = context.loop ? wrapArray(candidateNodes, currentIndex + 1) : candidateNodes.slice(currentIndex + 1);\n }\n setTimeout(() => focusFirst(candidateNodes));\n }\n }),\n children: typeof children === \"function\" ? children({ isCurrentTabStop, hasTabStop: currentTabStopId != null }) : children\n }\n )\n }\n );\n }\n);\nRovingFocusGroupItem.displayName = ITEM_NAME;\nvar MAP_KEY_TO_FOCUS_INTENT = {\n ArrowLeft: \"prev\",\n ArrowUp: \"prev\",\n ArrowRight: \"next\",\n ArrowDown: \"next\",\n PageUp: \"first\",\n Home: \"first\",\n PageDown: \"last\",\n End: \"last\"\n};\nfunction getDirectionAwareKey(key, dir) {\n if (dir !== \"rtl\") return key;\n return key === \"ArrowLeft\" ? \"ArrowRight\" : key === \"ArrowRight\" ? \"ArrowLeft\" : key;\n}\nfunction getFocusIntent(event, orientation, dir) {\n const key = getDirectionAwareKey(event.key, dir);\n if (orientation === \"vertical\" && [\"ArrowLeft\", \"ArrowRight\"].includes(key)) return void 0;\n if (orientation === \"horizontal\" && [\"ArrowUp\", \"ArrowDown\"].includes(key)) return void 0;\n return MAP_KEY_TO_FOCUS_INTENT[key];\n}\nfunction focusFirst(candidates, preventScroll = false) {\n const PREVIOUSLY_FOCUSED_ELEMENT = document.activeElement;\n for (const candidate of candidates) {\n if (candidate === PREVIOUSLY_FOCUSED_ELEMENT) return;\n candidate.focus({ preventScroll });\n if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT) return;\n }\n}\nfunction wrapArray(array, startIndex) {\n return array.map((_, index) => array[(startIndex + index) % array.length]);\n}\nvar Root = RovingFocusGroup;\nvar Item = RovingFocusGroupItem;\nexport {\n Item,\n Root,\n RovingFocusGroup,\n RovingFocusGroupItem,\n createRovingFocusGroupScope\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/tabs.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { createRovingFocusGroupScope } from \"@radix-ui/react-roving-focus\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport * as RovingFocusGroup from \"@radix-ui/react-roving-focus\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { jsx } from \"react/jsx-runtime\";\nvar TABS_NAME = \"Tabs\";\nvar [createTabsContext, createTabsScope] = createContextScope(TABS_NAME, [\n createRovingFocusGroupScope\n]);\nvar useRovingFocusGroupScope = createRovingFocusGroupScope();\nvar [TabsProvider, useTabsContext] = createTabsContext(TABS_NAME);\nvar Tabs = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeTabs,\n value: valueProp,\n onValueChange,\n defaultValue,\n orientation = \"horizontal\",\n dir,\n activationMode = \"automatic\",\n ...tabsProps\n } = props;\n const direction = useDirection(dir);\n const [value, setValue] = useControllableState({\n prop: valueProp,\n onChange: onValueChange,\n defaultProp: defaultValue ?? \"\",\n caller: TABS_NAME\n });\n return /* @__PURE__ */ jsx(\n TabsProvider,\n {\n scope: __scopeTabs,\n baseId: useId(),\n value,\n onValueChange: setValue,\n orientation,\n dir: direction,\n activationMode,\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n dir: direction,\n \"data-orientation\": orientation,\n ...tabsProps,\n ref: forwardedRef\n }\n )\n }\n );\n }\n);\nTabs.displayName = TABS_NAME;\nvar TAB_LIST_NAME = \"TabsList\";\nvar TabsList = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeTabs, loop = true, ...listProps } = props;\n const context = useTabsContext(TAB_LIST_NAME, __scopeTabs);\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeTabs);\n return /* @__PURE__ */ jsx(\n RovingFocusGroup.Root,\n {\n asChild: true,\n ...rovingFocusGroupScope,\n orientation: context.orientation,\n dir: context.dir,\n loop,\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n role: \"tablist\",\n \"aria-orientation\": context.orientation,\n ...listProps,\n ref: forwardedRef\n }\n )\n }\n );\n }\n);\nTabsList.displayName = TAB_LIST_NAME;\nvar TRIGGER_NAME = \"TabsTrigger\";\nvar TabsTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeTabs, value, disabled = false, ...triggerProps } = props;\n const context = useTabsContext(TRIGGER_NAME, __scopeTabs);\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeTabs);\n const triggerId = makeTriggerId(context.baseId, value);\n const contentId = makeContentId(context.baseId, value);\n const isSelected = value === context.value;\n return /* @__PURE__ */ jsx(\n RovingFocusGroup.Item,\n {\n asChild: true,\n ...rovingFocusGroupScope,\n focusable: !disabled,\n active: isSelected,\n children: /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n role: \"tab\",\n \"aria-selected\": isSelected,\n \"aria-controls\": contentId,\n \"data-state\": isSelected ? \"active\" : \"inactive\",\n \"data-disabled\": disabled ? \"\" : void 0,\n disabled,\n id: triggerId,\n ...triggerProps,\n ref: forwardedRef,\n onMouseDown: composeEventHandlers(props.onMouseDown, (event) => {\n if (!disabled && event.button === 0 && event.ctrlKey === false) {\n context.onValueChange(value);\n } else {\n event.preventDefault();\n }\n }),\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n if ([\" \", \"Enter\"].includes(event.key)) context.onValueChange(value);\n }),\n onFocus: composeEventHandlers(props.onFocus, () => {\n const isAutomaticActivation = context.activationMode !== \"manual\";\n if (!isSelected && !disabled && isAutomaticActivation) {\n context.onValueChange(value);\n }\n })\n }\n )\n }\n );\n }\n);\nTabsTrigger.displayName = TRIGGER_NAME;\nvar CONTENT_NAME = \"TabsContent\";\nvar TabsContent = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeTabs, value, forceMount, children, ...contentProps } = props;\n const context = useTabsContext(CONTENT_NAME, __scopeTabs);\n const triggerId = makeTriggerId(context.baseId, value);\n const contentId = makeContentId(context.baseId, value);\n const isSelected = value === context.value;\n const isMountAnimationPreventedRef = React.useRef(isSelected);\n React.useEffect(() => {\n const rAF = requestAnimationFrame(() => isMountAnimationPreventedRef.current = false);\n return () => cancelAnimationFrame(rAF);\n }, []);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || isSelected, children: ({ present }) => /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-state\": isSelected ? \"active\" : \"inactive\",\n \"data-orientation\": context.orientation,\n role: \"tabpanel\",\n \"aria-labelledby\": triggerId,\n hidden: !present,\n id: contentId,\n tabIndex: 0,\n ...contentProps,\n ref: forwardedRef,\n style: {\n ...props.style,\n animationDuration: isMountAnimationPreventedRef.current ? \"0s\" : void 0\n },\n children: present && children\n }\n ) });\n }\n);\nTabsContent.displayName = CONTENT_NAME;\nfunction makeTriggerId(baseId, value) {\n return `${baseId}-trigger-${value}`;\n}\nfunction makeContentId(baseId, value) {\n return `${baseId}-content-${value}`;\n}\nvar Root2 = Tabs;\nvar List = TabsList;\nvar Trigger = TabsTrigger;\nvar Content = TabsContent;\nexport {\n Content,\n List,\n Root2 as Root,\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n Trigger,\n createTabsScope\n};\n//# sourceMappingURL=index.mjs.map\n","import * as React from 'react'\nimport { Await, Link, useLoaderData } from 'react-router'\nimport { Icon } from '#app/components/icons.tsx'\nimport { Loading } from '#app/components/loading.tsx'\nimport { DiscordCTA, useDiscordCTALink } from '#app/routes/_app+/discord.tsx'\nimport { useAltDown } from '#app/utils/misc.tsx'\nimport { useIsOnline } from '#app/utils/online.ts'\nimport { type Route } from '../+types/index.tsx'\n\nexport function DiscordChat() {\n\treturn (\n\t\t<div className=\"flex h-full w-full flex-col gap-4 pt-4\">\n\t\t\t<div className=\"text-center\">\n\t\t\t\t<DiscordCTA />\n\t\t\t</div>\n\t\t\t<div className=\"flex-1 overflow-y-scroll bg-accent pb-4 scrollbar-thin scrollbar-thumb-scrollbar\">\n\t\t\t\t<DiscordPosts />\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n\nfunction DiscordPosts() {\n\tconst data = useLoaderData<Route.ComponentProps['loaderData']>()\n\tconst ctaLink = useDiscordCTALink()\n\tconst altDown = useAltDown()\n\tconst isOnline = useIsOnline()\n\tif (!isOnline) {\n\t\treturn (\n\t\t\t<div className=\"flex h-full flex-col items-center justify-between\">\n\t\t\t\t<div className=\"flex h-full w-full flex-col items-center justify-center text-foreground-destructive\">\n\t\t\t\t\t<Icon name=\"WifiNoConnection\" size=\"xl\">\n\t\t\t\t\t\tUnable to load discord messages when offline\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=\"flex h-full flex-col items-center justify-between\">\n\t\t\t<React.Suspense\n\t\t\t\tfallback={\n\t\t\t\t\t<div className=\"flex h-full w-full flex-col items-center justify-center\">\n\t\t\t\t\t\t<Loading>Loading Discord Posts</Loading>\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t>\n\t\t\t\t<Await\n\t\t\t\t\tresolve={data.discordPostsPromise}\n\t\t\t\t\terrorElement={\n\t\t\t\t\t\t<div className=\"text-red-500\">\n\t\t\t\t\t\t\tThere was a problem loading the discord posts\n\t\t\t\t\t\t</div>\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t\t{(posts) => (\n\t\t\t\t\t\t<ul className=\"flex w-full flex-col gap-4 p-3 xl:p-12\">\n\t\t\t\t\t\t\t{posts.map((post) => (\n\t\t\t\t\t\t\t\t<li\n\t\t\t\t\t\t\t\t\tkey={post.id}\n\t\t\t\t\t\t\t\t\tclassName=\"rounded-xl border bg-background transition-all duration-200 focus-within:-translate-y-1 focus-within:shadow-lg hover:-translate-y-1 hover:shadow-lg\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<DiscordPost thread={post} />\n\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t)}\n\t\t\t\t</Await>\n\t\t\t</React.Suspense>\n\t\t\t<div>\n\t\t\t\t<Link\n\t\t\t\t\tto={\n\t\t\t\t\t\taltDown && !ctaLink.includes('oauth')\n\t\t\t\t\t\t\t? ctaLink.replace(/^https/, 'discord')\n\t\t\t\t\t\t\t: ctaLink\n\t\t\t\t\t}\n\t\t\t\t\ttarget={ctaLink.includes('oauth') ? undefined : '_blank'}\n\t\t\t\t\trel=\"noreferrer noopener\"\n\t\t\t\t\tonClick={\n\t\t\t\t\t\taltDown\n\t\t\t\t\t\t\t? (e) => {\n\t\t\t\t\t\t\t\t\te.preventDefault()\n\t\t\t\t\t\t\t\t\twindow.open(\n\t\t\t\t\t\t\t\t\t\te.currentTarget.href,\n\t\t\t\t\t\t\t\t\t\t'_blank',\n\t\t\t\t\t\t\t\t\t\t'noreferrer noopener',\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t}\n\t\t\t\t\tclassName=\"flex items-center gap-2 p-2 text-xl hover:underline\"\n\t\t\t\t>\n\t\t\t\t\tCreate Post <Icon name=\"ExternalLink\" />\n\t\t\t\t</Link>\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n\nfunction DiscordPost({\n\tthread,\n}: {\n\tthread: Awaited<\n\t\tRoute.ComponentProps['loaderData']['discordPostsPromise']\n\t>[number]\n}) {\n\tconst reactionsWithCounts = thread.reactions.filter((r) => r.count)\n\n\treturn (\n\t\t<div>\n\t\t\t<div className=\"flex flex-col gap-2 p-4\">\n\t\t\t\t<div className=\"flex gap-4\">\n\t\t\t\t\t<div className=\"flex flex-col gap-1\">\n\t\t\t\t\t\t{thread.tags.length ? (\n\t\t\t\t\t\t\t<div className=\"flex gap-2\">\n\t\t\t\t\t\t\t\t{thread.tags.map((t) => (\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tkey={t.name}\n\t\t\t\t\t\t\t\t\t\tclassName=\"flex items-center justify-center gap-1 rounded-full bg-accent px-2 py-1 text-sm\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<span className=\"h-3 w-3 leading-3\">\n\t\t\t\t\t\t\t\t\t\t\t<Emoji name={t.emojiName} url={t.emojiUrl} />\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t<span>{t.name}</span>\n\t\t\t\t\t\t\t\t\t</div>\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) : null}\n\t\t\t\t\t\t<strong className=\"text-xl font-bold\">{thread.name}</strong>\n\t\t\t\t\t\t<div className=\"flex items-start gap-1\">\n\t\t\t\t\t\t\t<div className=\"flex items-center gap-1\">\n\t\t\t\t\t\t\t\t{thread.authorAvatarUrl ? (\n\t\t\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t\t\t\tsrc={thread.authorAvatarUrl}\n\t\t\t\t\t\t\t\t\t\talt=\"\"\n\t\t\t\t\t\t\t\t\t\tclassName=\"h-6 w-6 rounded-full\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\tclassName=\"font-bold\"\n\t\t\t\t\t\t\t\t\t\tstyle={\n\t\t\t\t\t\t\t\t\t\t\tthread.authorHexAccentColor\n\t\t\t\t\t\t\t\t\t\t\t\t? { color: thread.authorHexAccentColor }\n\t\t\t\t\t\t\t\t\t\t\t\t: {}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{thread.authorDisplayName}\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t:{' '}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<span className=\"flex-1 overflow-ellipsis text-muted-foreground\">\n\t\t\t\t\t\t\t\t{thread.messagePreview}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t{thread.previewImageUrl ? (\n\t\t\t\t\t\t<img\n\t\t\t\t\t\t\tsrc={thread.previewImageUrl}\n\t\t\t\t\t\t\talt=\"\"\n\t\t\t\t\t\t\tclassName=\"h-28 w-28 rounded-lg object-cover\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t) : null}\n\t\t\t\t</div>\n\n\t\t\t\t<div className=\"flex justify-between\">\n\t\t\t\t\t<div className=\"flex items-center gap-3\">\n\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t{reactionsWithCounts.length ? (\n\t\t\t\t\t\t\t\t<ul className=\"flex items-center gap-2\">\n\t\t\t\t\t\t\t\t\t{reactionsWithCounts.map((r, i) => (\n\t\t\t\t\t\t\t\t\t\t<li\n\t\t\t\t\t\t\t\t\t\t\tkey={i}\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"flex items-center gap-1 rounded-md border border-blue-600 bg-blue-500/20 px-[5px] py-[0.5px] text-sm\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"h-3 w-3 leading-3\">\n\t\t\t\t\t\t\t\t\t\t\t\t<Emoji name={r.emojiName} url={r.emojiUrl} />\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t<span>{r.count}</span>\n\t\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t\t<span className=\"flex items-center gap-1\">\n\t\t\t\t\t\t\t<span className=\"inline-flex items-center gap-1\">\n\t\t\t\t\t\t\t\t<Icon name=\"Chat\" /> {thread.messageCount}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t{` · ${thread.lastUpdatedDisplay}`}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</div>\n\t\t\t\t\t<span className=\"flex items-center gap-4\">\n\t\t\t\t\t\t<a href={thread.link.replace(/^https/, 'discord')}>\n\t\t\t\t\t\t\t<Icon name=\"Discord\" />\n\t\t\t\t\t\t</a>\n\t\t\t\t\t\t<a href={thread.link} target=\"_blank\" rel=\"noreferrer noopener\">\n\t\t\t\t\t\t\t<Icon name=\"ExternalLink\" />\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n\nfunction Emoji({ name, url }: { name?: string; url?: string }) {\n\treturn url ? (\n\t\t<img src={url} alt={name} className=\"h-full w-full\" />\n\t) : name ? (\n\t\tname\n\t) : null\n}\n","import { toast as showToast } from 'sonner'\nimport { type InBrowserBrowserRef } from '#app/components/in-browser-browser'\nimport { SimpleTooltip } from '#app/components/ui/tooltip'\nimport { SetAppToPlayground } from '#app/routes/set-playground'\nimport { PlaygroundWindow } from './playground-window'\nimport { Preview } from './preview'\n\nexport function Playground({\n\tappInfo: playgroundAppInfo,\n\tinBrowserBrowserRef,\n\tproblemAppName,\n\tallApps,\n\tisUpToDate,\n}: {\n\tappInfo: Parameters<typeof Preview>['0']['appInfo'] | null\n\tinBrowserBrowserRef: React.RefObject<InBrowserBrowserRef | null>\n\tproblemAppName?: string\n\tallApps: Array<{ name: string; displayName: string }>\n\tisUpToDate: boolean\n}) {\n\treturn (\n\t\t<PlaygroundWindow\n\t\t\tplaygroundAppName={playgroundAppInfo?.appName}\n\t\t\tproblemAppName={problemAppName}\n\t\t\tallApps={allApps}\n\t\t\tisUpToDate={isUpToDate}\n\t\t>\n\t\t\t{playgroundAppInfo?.dev.type === 'none' ? (\n\t\t\t\t<div>\n\t\t\t\t\t<div className=\"text-foreground-secondary flex h-full items-center justify-center text-2xl\">\n\t\t\t\t\t\tNon-UI playground\n\t\t\t\t\t</div>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<div className=\"text-foreground-secondary flex flex-wrap gap-1 text-center\">\n\t\t\t\t\t\t\tNavigate to{' '}\n\t\t\t\t\t\t\t<SimpleTooltip content={playgroundAppInfo.fullPath}>\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\tclassName=\"underline\"\n\t\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\t\tvoid navigator.clipboard.writeText(\n\t\t\t\t\t\t\t\t\t\t\tplaygroundAppInfo.fullPath,\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\tshowToast.success('Copied playground path to clipboard')\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\tthe playground directory\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</SimpleTooltip>{' '}\n\t\t\t\t\t\t\tin your editor and terminal to work on this exercise!\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t) : playgroundAppInfo ? (\n\t\t\t\t<Preview\n\t\t\t\t\tid={playgroundAppInfo.appName}\n\t\t\t\t\tappInfo={playgroundAppInfo}\n\t\t\t\t\tinBrowserBrowserRef={inBrowserBrowserRef}\n\t\t\t\t/>\n\t\t\t) : (\n\t\t\t\t<div className=\"flex flex-col justify-center gap-2\">\n\t\t\t\t\t<p>Please set the playground first</p>\n\t\t\t\t\t{problemAppName ? (\n\t\t\t\t\t\t<SetAppToPlayground appName={problemAppName} />\n\t\t\t\t\t) : null}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</PlaygroundWindow>\n\t)\n}\n","import {\n\tgetAppByName,\n\tgetAppDisplayName,\n\tgetApps,\n\tgetExerciseApp,\n\tisExerciseStepApp,\n\tisPlaygroundApp,\n\trequireExerciseApp,\n\ttype App,\n\ttype ExerciseStepApp,\n} from '@epic-web/workshop-utils/apps.server'\nimport { compileMarkdownString } from '@epic-web/workshop-utils/compile-mdx.server'\nimport { getDiffCode } from '@epic-web/workshop-utils/diff.server'\nimport { userHasAccessToWorkshop } from '@epic-web/workshop-utils/epic-api.server'\nimport {\n\tcombineServerTimings,\n\tgetServerTimeHeader,\n\tmakeTimings,\n} from '@epic-web/workshop-utils/timing.server'\nimport * as Tabs from '@radix-ui/react-tabs'\nimport { clsx } from 'clsx'\nimport * as React from 'react'\nimport { useRef } from 'react'\nimport {\n\tLink,\n\tuseLoaderData,\n\tuseNavigate,\n\tuseSearchParams,\n\tdata,\n\tredirect,\n\ttype HeadersFunction,\n\ttype LoaderFunctionArgs,\n} from 'react-router'\nimport { Diff } from '#app/components/diff.tsx'\nimport { GeneralErrorBoundary } from '#app/components/error-boundary.tsx'\nimport { type InBrowserBrowserRef } from '#app/components/in-browser-browser.tsx'\nimport { useAltDown } from '#app/utils/misc.tsx'\nimport { fetchDiscordPosts } from './__shared/discord.server.ts'\nimport { DiscordChat } from './__shared/discord.tsx'\nimport { Playground } from './__shared/playground.tsx'\nimport { Preview } from './__shared/preview.tsx'\nimport { Tests } from './__shared/tests.tsx'\nimport { getAppRunningState } from './__shared/utils.tsx'\n\nexport async function loader({ request, params }: LoaderFunctionArgs) {\n\tconst timings = makeTimings('exerciseStepTypeIndexLoader')\n\tconst userHasAccess = await userHasAccessToWorkshop({\n\t\trequest,\n\t\ttimings,\n\t})\n\tconst searchParams = new URL(request.url).searchParams\n\tconst cacheOptions = { request, timings }\n\tconst exerciseStepApp = await requireExerciseApp(params, cacheOptions)\n\tconst reqUrl = new URL(request.url)\n\n\tconst pathnameParam = reqUrl.searchParams.get('pathname')\n\tif (pathnameParam === '' || pathnameParam === '/') {\n\t\treqUrl.searchParams.delete('pathname')\n\t\tthrow redirect(reqUrl.toString())\n\t}\n\n\tconst problemApp = await getExerciseApp(\n\t\t{ ...params, type: 'problem' },\n\t\tcacheOptions,\n\t)\n\tconst solutionApp = await getExerciseApp(\n\t\t{ ...params, type: 'solution' },\n\t\tcacheOptions,\n\t)\n\n\tif (!problemApp && !solutionApp) {\n\t\tthrow new Response('Not found', { status: 404 })\n\t}\n\n\tconst allAppsFull = await getApps(cacheOptions)\n\tconst playgroundApp = allAppsFull.find(isPlaygroundApp)\n\n\tconst app1Name = reqUrl.searchParams.get('app1')\n\tconst app2Name = reqUrl.searchParams.get('app2')\n\tconst app1 = app1Name\n\t\t? await getAppByName(app1Name)\n\t\t: playgroundApp || problemApp\n\tconst app2 = app2Name ? await getAppByName(app2Name) : solutionApp\n\n\tfunction getStepId(a: ExerciseStepApp) {\n\t\treturn (\n\t\t\ta.exerciseNumber * 1000 +\n\t\t\ta.stepNumber * 10 +\n\t\t\t(a.type === 'problem' ? 0 : 1)\n\t\t)\n\t}\n\n\tfunction getStepNameAndId(a: App) {\n\t\tif (isExerciseStepApp(a)) {\n\t\t\tconst exerciseNumberStr = String(a.exerciseNumber).padStart(2, '0')\n\t\t\tconst stepNumberStr = String(a.stepNumber).padStart(2, '0')\n\n\t\t\treturn {\n\t\t\t\tstepName: `${exerciseNumberStr}/${stepNumberStr}.${a.type}`,\n\t\t\t\tstepId: getStepId(a),\n\t\t\t}\n\t\t}\n\t\treturn { stepName: '', stepId: -1 }\n\t}\n\n\tconst allApps = allAppsFull\n\t\t.filter((a, i, ar) => ar.findIndex((b) => a.name === b.name) === i)\n\t\t.map((a) => ({\n\t\t\tdisplayName: getAppDisplayName(a, allAppsFull),\n\t\t\tname: a.name,\n\t\t\ttitle: a.title,\n\t\t\ttype: a.type,\n\t\t\t...getStepNameAndId(a),\n\t\t}))\n\n\tallApps.sort((a, b) => {\n\t\t// order them by their stepId\n\t\tif (a.stepId > 0 && b.stepId > 0) return a.stepId - b.stepId\n\n\t\t// non-step apps should come after step apps\n\t\tif (a.stepId > 0) return -1\n\t\tif (b.stepId > 0) return 1\n\n\t\treturn 0\n\t})\n\n\tasync function getDiffProp() {\n\t\tif (!app1 || !app2) {\n\t\t\treturn {\n\t\t\t\tapp1: app1?.name,\n\t\t\t\tapp2: app2?.name,\n\t\t\t\tdiffCode: null,\n\t\t\t}\n\t\t}\n\t\tif (!userHasAccess) {\n\t\t\treturn {\n\t\t\t\tapp1: app1?.name,\n\t\t\t\tapp2: app2?.name,\n\t\t\t\tdiffCode: await compileMarkdownString(\n\t\t\t\t\t`<h1>Access Denied</h1><p>You must login or register for the workshop to view the diff</p>`,\n\t\t\t\t),\n\t\t\t}\n\t\t}\n\t\tconst diffCode = await getDiffCode(app1, app2, {\n\t\t\t...cacheOptions,\n\t\t\tforceFresh: searchParams.get('forceFresh') === 'diff',\n\t\t}).catch((e) => {\n\t\t\tconsole.error(e)\n\t\t\treturn null\n\t\t})\n\t\treturn {\n\t\t\tapp1: app1.name,\n\t\t\tapp2: app2.name,\n\t\t\tdiffCode,\n\t\t}\n\t}\n\n\treturn data(\n\t\t{\n\t\t\ttype: params.type as 'problem' | 'solution',\n\t\t\texerciseStepApp,\n\t\t\tallApps,\n\t\t\t// defer this promise so that we don't block the response from being sent\n\t\t\tdiscordPostsPromise: fetchDiscordPosts({ request }),\n\t\t\tplayground: playgroundApp\n\t\t\t\t? ({\n\t\t\t\t\t\ttype: 'playground',\n\t\t\t\t\t\tfullPath: playgroundApp.fullPath,\n\t\t\t\t\t\tdev: playgroundApp.dev,\n\t\t\t\t\t\ttest: playgroundApp.test,\n\t\t\t\t\t\ttitle: playgroundApp.title,\n\t\t\t\t\t\tname: playgroundApp.name,\n\t\t\t\t\t\tappName: playgroundApp.appName,\n\t\t\t\t\t\tisUpToDate: playgroundApp.isUpToDate,\n\t\t\t\t\t\tstackBlitzUrl: playgroundApp.stackBlitzUrl,\n\t\t\t\t\t\t...(await getAppRunningState(playgroundApp)),\n\t\t\t\t\t} as const)\n\t\t\t\t: null,\n\t\t\tproblem: problemApp\n\t\t\t\t? ({\n\t\t\t\t\t\ttype: 'problem',\n\t\t\t\t\t\tfullPath: problemApp.fullPath,\n\t\t\t\t\t\tdev: problemApp.dev,\n\t\t\t\t\t\ttest: problemApp.test,\n\t\t\t\t\t\ttitle: problemApp.title,\n\t\t\t\t\t\tname: problemApp.name,\n\t\t\t\t\t\tstackBlitzUrl: problemApp.stackBlitzUrl,\n\t\t\t\t\t\t...(await getAppRunningState(problemApp)),\n\t\t\t\t\t} as const)\n\t\t\t\t: null,\n\t\t\tsolution: solutionApp\n\t\t\t\t? ({\n\t\t\t\t\t\ttype: 'solution',\n\t\t\t\t\t\tfullPath: solutionApp.fullPath,\n\t\t\t\t\t\tdev: solutionApp.dev,\n\t\t\t\t\t\ttest: solutionApp.test,\n\t\t\t\t\t\ttitle: solutionApp.title,\n\t\t\t\t\t\tname: solutionApp.name,\n\t\t\t\t\t\tstackBlitzUrl: solutionApp.stackBlitzUrl,\n\t\t\t\t\t\t...(await getAppRunningState(solutionApp)),\n\t\t\t\t\t} as const)\n\t\t\t\t: null,\n\t\t\tdiff: getDiffProp(),\n\t\t} as const,\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'Server-Timing': combineServerTimings(loaderHeaders, parentHeaders),\n\t}\n\treturn headers\n}\n\nconst tabs = [\n\t'playground',\n\t'problem',\n\t'solution',\n\t'tests',\n\t'diff',\n\t'chat',\n] as const\nconst isValidPreview = (s: string | null): s is (typeof tabs)[number] =>\n\tBoolean(s && tabs.includes(s as (typeof tabs)[number]))\n\nfunction withParam(\n\tsearchParams: URLSearchParams,\n\tkey: string,\n\tvalue: string | null,\n) {\n\tconst newSearchParams = new URLSearchParams(searchParams)\n\tif (value === null) {\n\t\tnewSearchParams.delete(key)\n\t} else {\n\t\tnewSearchParams.set(key, value)\n\t}\n\treturn newSearchParams\n}\n\nexport default function ExercisePartRoute() {\n\tconst data = useLoaderData<typeof loader>()\n\tconst [searchParams] = useSearchParams()\n\n\tconst preview = searchParams.get('preview')\n\tconst inBrowserBrowserRef = useRef<InBrowserBrowserRef>(null)\n\n\tconst altDown = useAltDown()\n\tconst navigate = useNavigate()\n\n\tfunction shouldHideTab(tab: (typeof tabs)[number]) {\n\t\tif (tab === 'tests') {\n\t\t\treturn (\n\t\t\t\tENV.EPICSHOP_DEPLOYED ||\n\t\t\t\t!data.playground ||\n\t\t\t\tdata.playground.test.type === 'none'\n\t\t\t)\n\t\t}\n\t\tif (tab === 'problem' || tab === 'solution') {\n\t\t\tif (data[tab]?.dev.type === 'none') return true\n\t\t\tif (ENV.EPICSHOP_DEPLOYED) {\n\t\t\t\treturn data[tab]?.dev.type !== 'browser' && !data[tab]?.stackBlitzUrl\n\t\t\t}\n\t\t}\n\t\tif (tab === 'playground' && ENV.EPICSHOP_DEPLOYED) return true\n\t\treturn false\n\t}\n\n\tconst activeTab = isValidPreview(preview)\n\t\t? preview\n\t\t: tabs.find((t) => !shouldHideTab(t))\n\n\t// when alt is held down, the diff tab should open to the full-page diff view\n\t// between the problem and solution (this is more for the instructor than the student)\n\tconst altDiffUrl = `/diff?${new URLSearchParams({\n\t\tapp1: data.problem?.name ?? '',\n\t\tapp2: data.solution?.name ?? '',\n\t})}`\n\n\tfunction handleDiffTabClick(event: React.MouseEvent<HTMLAnchorElement>) {\n\t\tif (event.altKey && !event.ctrlKey && !event.shiftKey && !event.metaKey) {\n\t\t\tevent.preventDefault()\n\t\t\tvoid navigate(altDiffUrl)\n\t\t}\n\t}\n\n\treturn (\n\t\t<Tabs.Root\n\t\t\tclassName=\"relative flex flex-col overflow-y-auto sm:col-span-1 sm:row-span-1\"\n\t\t\tvalue={activeTab}\n\t\t\t// intentionally no onValueChange here because the Link will trigger the\n\t\t\t// change.\n\t\t>\n\t\t\t<Tabs.List className=\"h-14 min-h-14 overflow-x-hidden border-b scrollbar-thin scrollbar-thumb-scrollbar\">\n\t\t\t\t{tabs.map((tab) => {\n\t\t\t\t\tconst hidden = shouldHideTab(tab)\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<Tabs.Trigger key={tab} value={tab} hidden={hidden} asChild>\n\t\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\t\tid={`${tab}-tab`}\n\t\t\t\t\t\t\t\tclassName={clsx(\n\t\t\t\t\t\t\t\t\t'clip-path-button relative h-full px-6 py-4 font-mono text-sm uppercase outline-none radix-state-active:z-10 radix-state-active:bg-foreground radix-state-active:text-background radix-state-active:hover:bg-foreground/80 radix-state-active:hover:text-background/80 radix-state-inactive:hover:bg-foreground/20 radix-state-inactive:hover:text-foreground/80 focus:bg-foreground/80 focus:text-background/80',\n\t\t\t\t\t\t\t\t\thidden ? 'hidden' : 'inline-block',\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\tpreventScrollReset\n\t\t\t\t\t\t\t\tprefetch=\"intent\"\n\t\t\t\t\t\t\t\tonClick={handleDiffTabClick}\n\t\t\t\t\t\t\t\tto={\n\t\t\t\t\t\t\t\t\ttab === 'diff' && altDown\n\t\t\t\t\t\t\t\t\t\t? altDiffUrl\n\t\t\t\t\t\t\t\t\t\t: `?${withParam(\n\t\t\t\t\t\t\t\t\t\t\t\tsearchParams,\n\t\t\t\t\t\t\t\t\t\t\t\t'preview',\n\t\t\t\t\t\t\t\t\t\t\t\ttab === 'playground' ? null : tab,\n\t\t\t\t\t\t\t\t\t\t\t)}`\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{tab}\n\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t</Tabs.Trigger>\n\t\t\t\t\t)\n\t\t\t\t})}\n\t\t\t</Tabs.List>\n\t\t\t<div className=\"relative z-10 flex min-h-96 flex-grow flex-col overflow-y-auto\">\n\t\t\t\t<Tabs.Content\n\t\t\t\t\tvalue=\"playground\"\n\t\t\t\t\tclassName=\"flex w-full flex-grow items-center justify-center self-start radix-state-inactive:hidden\"\n\t\t\t\t\tforceMount\n\t\t\t\t>\n\t\t\t\t\t<Playground\n\t\t\t\t\t\tappInfo={data.playground}\n\t\t\t\t\t\tproblemAppName={data.problem?.name}\n\t\t\t\t\t\tinBrowserBrowserRef={inBrowserBrowserRef}\n\t\t\t\t\t\tallApps={data.allApps}\n\t\t\t\t\t\tisUpToDate={data.playground?.isUpToDate ?? false}\n\t\t\t\t\t/>\n\t\t\t\t</Tabs.Content>\n\t\t\t\t<Tabs.Content\n\t\t\t\t\tvalue=\"problem\"\n\t\t\t\t\tclassName=\"flex w-full flex-grow items-center justify-center self-start radix-state-inactive:hidden\"\n\t\t\t\t\tforceMount\n\t\t\t\t>\n\t\t\t\t\t<Preview\n\t\t\t\t\t\tappInfo={data.problem}\n\t\t\t\t\t\tinBrowserBrowserRef={inBrowserBrowserRef}\n\t\t\t\t\t/>\n\t\t\t\t</Tabs.Content>\n\t\t\t\t<Tabs.Content\n\t\t\t\t\tvalue=\"solution\"\n\t\t\t\t\tclassName=\"flex w-full flex-grow items-center justify-center self-start radix-state-inactive:hidden\"\n\t\t\t\t\tforceMount\n\t\t\t\t>\n\t\t\t\t\t<Preview\n\t\t\t\t\t\tappInfo={data.solution}\n\t\t\t\t\t\tinBrowserBrowserRef={inBrowserBrowserRef}\n\t\t\t\t\t/>\n\t\t\t\t</Tabs.Content>\n\t\t\t\t<Tabs.Content\n\t\t\t\t\tvalue=\"tests\"\n\t\t\t\t\tclassName=\"flex w-full flex-grow items-start justify-center self-start overflow-hidden radix-state-inactive:hidden\"\n\t\t\t\t>\n\t\t\t\t\t<Tests\n\t\t\t\t\t\tappInfo={data.playground}\n\t\t\t\t\t\tproblemAppName={data.problem?.name}\n\t\t\t\t\t\tallApps={data.allApps}\n\t\t\t\t\t\tisUpToDate={data.playground?.isUpToDate ?? false}\n\t\t\t\t\t/>\n\t\t\t\t</Tabs.Content>\n\t\t\t\t<Tabs.Content\n\t\t\t\t\tvalue=\"diff\"\n\t\t\t\t\tclassName=\"flex h-full w-full flex-grow items-start justify-center self-start radix-state-inactive:hidden\"\n\t\t\t\t>\n\t\t\t\t\t<Diff diff={data.diff} allApps={data.allApps} />\n\t\t\t\t</Tabs.Content>\n\t\t\t\t<Tabs.Content\n\t\t\t\t\tvalue=\"chat\"\n\t\t\t\t\tclassName=\"flex h-full w-full flex-grow items-start justify-center self-start radix-state-inactive:hidden\"\n\t\t\t\t>\n\t\t\t\t\t<DiscordChat />\n\t\t\t\t</Tabs.Content>\n\t\t\t</div>\n\t\t</Tabs.Root>\n\t)\n}\n\nexport function ErrorBoundary() {\n\treturn (\n\t\t<GeneralErrorBoundary\n\t\t\tstatusHandlers={{\n\t\t\t\t404: () => <p>Sorry, we couldn't find an app here.</p>,\n\t\t\t}}\n\t\t/>\n\t)\n}\n"],"names":["ENTRY_FOCUS","EVENT_OPTIONS","GROUP_NAME","Collection","useCollection","createCollectionScope","createCollection","createRovingFocusGroupContext","createRovingFocusGroupScope","createContextScope","RovingFocusProvider","useRovingFocusContext","RovingFocusGroup","React.forwardRef","props","forwardedRef","jsx","RovingFocusGroupImpl","__scopeRovingFocusGroup","orientation","loop","dir","currentTabStopIdProp","defaultCurrentTabStopId","onCurrentTabStopIdChange","onEntryFocus","preventScrollOnEntryFocus","groupProps","ref","React.useRef","composedRefs","useComposedRefs","direction","useDirection","currentTabStopId","setCurrentTabStopId","useControllableState","isTabbingBackOut","setIsTabbingBackOut","React.useState","handleEntryFocus","useCallbackRef","getItems","isClickFocusRef","focusableItemsCount","setFocusableItemsCount","React.useEffect","node","React.useCallback","tabStopId","prevCount","Primitive","composeEventHandlers","event","isKeyboardFocus","entryFocusEvent","items","item","activeItem","currentItem","candidateNodes","focusFirst","ITEM_NAME","RovingFocusGroupItem","focusable","active","children","itemProps","autoId","useId","id","context","isCurrentTabStop","onFocusableItemAdd","onFocusableItemRemove","focusIntent","getFocusIntent","currentIndex","wrapArray","MAP_KEY_TO_FOCUS_INTENT","getDirectionAwareKey","key","candidates","preventScroll","PREVIOUSLY_FOCUSED_ELEMENT","candidate","array","startIndex","_","index","Root","Item","TABS_NAME","createTabsContext","createTabsScope","useRovingFocusGroupScope","TabsProvider","useTabsContext","Tabs","__scopeTabs","valueProp","onValueChange","defaultValue","activationMode","tabsProps","value","setValue","TAB_LIST_NAME","TabsList","listProps","rovingFocusGroupScope","RovingFocusGroup.Root","TRIGGER_NAME","TabsTrigger","disabled","triggerProps","triggerId","makeTriggerId","contentId","makeContentId","isSelected","RovingFocusGroup.Item","isAutomaticActivation","CONTENT_NAME","TabsContent","forceMount","contentProps","isMountAnimationPreventedRef","rAF","Presence","present","baseId","Root2","List","Trigger","Content","DiscordChat","jsxs","DiscordCTA","DiscordPosts","data","useLoaderData","ctaLink","useDiscordCTALink","altDown","useAltDown","useIsOnline","React.Suspense","Loading","Await","posts","post","DiscordPost","Link","e","Icon","thread","reactionsWithCounts","r","t","Emoji","i","name","url","Playground","playgroundAppInfo","inBrowserBrowserRef","problemAppName","allApps","isUpToDate","PlaygroundWindow","SimpleTooltip","showToast","Preview","SetAppToPlayground","tabs","isValidPreview","s","Boolean","includes","withParam","searchParams","newSearchParams","URLSearchParams","delete","set","_UNSAFE_withComponentProps","useSearchParams","preview","get","useRef","navigate","useNavigate","shouldHideTab","tab","ENV","EPICSHOP_DEPLOYED","playground","test","type","dev","stackBlitzUrl","activeTab","find","altDiffUrl","app1","problem","app2","solution","handleDiffTabClick","altKey","ctrlKey","shiftKey","metaKey","preventDefault","className","map","hidden","asChild","clsx","preventScrollReset","prefetch","onClick","to","appInfo","Tests","Diff","diff","ErrorBoundary","_UNSAFE_withErrorBoundaryProps","GeneralErrorBoundary","statusHandlers"],"mappings":"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","x_google_ignoreList":[0,1]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import{r as o,n as _}from"./chunk-QMGIS6GS-CTjj1G71.js";var s={exports:{}},i={};/**
|
|
2
|
+
* @license React
|
|
3
|
+
* react-dom.production.js
|
|
4
|
+
*
|
|
5
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
6
|
+
*
|
|
7
|
+
* This source code is licensed under the MIT license found in the
|
|
8
|
+
* LICENSE file in the root directory of this source tree.
|
|
9
|
+
*/var m=o;function d(e){var r="https://react.dev/errors/"+e;if(1<arguments.length){r+="?args[]="+encodeURIComponent(arguments[1]);for(var t=2;t<arguments.length;t++)r+="&args[]="+encodeURIComponent(arguments[t])}return"Minified React error #"+e+"; visit "+r+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}function a(){}var n={d:{f:a,r:function(){throw Error(d(522))},D:a,C:a,L:a,m:a,X:a,S:a,M:a},p:0,findDOMNode:null},v=Symbol.for("react.portal");function O(e,r,t){var c=3<arguments.length&&arguments[3]!==void 0?arguments[3]:null;return{$$typeof:v,key:c==null?null:""+c,children:e,containerInfo:r,implementation:t}}var f=m.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;function g(e,r){if(e==="font")return"";if(typeof r=="string")return r==="use-credentials"?r:""}i.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=n;i.createPortal=function(e,r){var t=2<arguments.length&&arguments[2]!==void 0?arguments[2]:null;if(!r||r.nodeType!==1&&r.nodeType!==9&&r.nodeType!==11)throw Error(d(299));return O(e,r,null,t)};i.flushSync=function(e){var r=f.T,t=n.p;try{if(f.T=null,n.p=2,e)return e()}finally{f.T=r,n.p=t,n.d.f()}};i.preconnect=function(e,r){typeof e=="string"&&(r?(r=r.crossOrigin,r=typeof r=="string"?r==="use-credentials"?r:"":void 0):r=null,n.d.C(e,r))};i.prefetchDNS=function(e){typeof e=="string"&&n.d.D(e)};i.preinit=function(e,r){if(typeof e=="string"&&r&&typeof r.as=="string"){var t=r.as,c=g(t,r.crossOrigin),u=typeof r.integrity=="string"?r.integrity:void 0,y=typeof r.fetchPriority=="string"?r.fetchPriority:void 0;t==="style"?n.d.S(e,typeof r.precedence=="string"?r.precedence:void 0,{crossOrigin:c,integrity:u,fetchPriority:y}):t==="script"&&n.d.X(e,{crossOrigin:c,integrity:u,fetchPriority:y,nonce:typeof r.nonce=="string"?r.nonce:void 0})}};i.preinitModule=function(e,r){if(typeof e=="string")if(typeof r=="object"&&r!==null){if(r.as==null||r.as==="script"){var t=g(r.as,r.crossOrigin);n.d.M(e,{crossOrigin:t,integrity:typeof r.integrity=="string"?r.integrity:void 0,nonce:typeof r.nonce=="string"?r.nonce:void 0})}}else r==null&&n.d.M(e)};i.preload=function(e,r){if(typeof e=="string"&&typeof r=="object"&&r!==null&&typeof r.as=="string"){var t=r.as,c=g(t,r.crossOrigin);n.d.L(e,t,{crossOrigin:c,integrity:typeof r.integrity=="string"?r.integrity:void 0,nonce:typeof r.nonce=="string"?r.nonce:void 0,type:typeof r.type=="string"?r.type:void 0,fetchPriority:typeof r.fetchPriority=="string"?r.fetchPriority:void 0,referrerPolicy:typeof r.referrerPolicy=="string"?r.referrerPolicy:void 0,imageSrcSet:typeof r.imageSrcSet=="string"?r.imageSrcSet:void 0,imageSizes:typeof r.imageSizes=="string"?r.imageSizes:void 0,media:typeof r.media=="string"?r.media:void 0})}};i.preloadModule=function(e,r){if(typeof e=="string")if(r){var t=g(r.as,r.crossOrigin);n.d.m(e,{as:typeof r.as=="string"&&r.as!=="script"?r.as:void 0,crossOrigin:t,integrity:typeof r.integrity=="string"?r.integrity:void 0})}else n.d.m(e)};i.requestFormReset=function(e){n.d.r(e)};i.unstable_batchedUpdates=function(e,r){return e(r)};i.useFormState=function(e,r,t){return f.H.useFormState(e,r,t)};i.useFormStatus=function(){return f.H.useHostTransitionStatus()};i.version="19.0.0-rc-1460d67c-20241003";function l(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(l)}catch(e){console.error(e)}}l(),s.exports=i;var S=s.exports;const T=_(S);export{T as R,S as r};
|
|
10
|
+
//# sourceMappingURL=index-BP1ceC2h.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-BP1ceC2h.js","sources":["../../../../../node_modules/react-dom/cjs/react-dom.production.js","../../../../../node_modules/react-dom/index.js"],"sourcesContent":["/**\n * @license React\n * react-dom.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar React = require(\"react\");\nfunction formatProdErrorMessage(code) {\n var url = \"https://react.dev/errors/\" + code;\n if (1 < arguments.length) {\n url += \"?args[]=\" + encodeURIComponent(arguments[1]);\n for (var i = 2; i < arguments.length; i++)\n url += \"&args[]=\" + encodeURIComponent(arguments[i]);\n }\n return (\n \"Minified React error #\" +\n code +\n \"; visit \" +\n url +\n \" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"\n );\n}\nfunction noop() {}\nvar Internals = {\n d: {\n f: noop,\n r: function () {\n throw Error(formatProdErrorMessage(522));\n },\n D: noop,\n C: noop,\n L: noop,\n m: noop,\n X: noop,\n S: noop,\n M: noop\n },\n p: 0,\n findDOMNode: null\n },\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\");\nfunction createPortal$1(children, containerInfo, implementation) {\n var key =\n 3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : null;\n return {\n $$typeof: REACT_PORTAL_TYPE,\n key: null == key ? null : \"\" + key,\n children: children,\n containerInfo: containerInfo,\n implementation: implementation\n };\n}\nvar ReactSharedInternals =\n React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;\nfunction getCrossOriginStringAs(as, input) {\n if (\"font\" === as) return \"\";\n if (\"string\" === typeof input)\n return \"use-credentials\" === input ? input : \"\";\n}\nexports.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =\n Internals;\nexports.createPortal = function (children, container) {\n var key =\n 2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : null;\n if (\n !container ||\n (1 !== container.nodeType &&\n 9 !== container.nodeType &&\n 11 !== container.nodeType)\n )\n throw Error(formatProdErrorMessage(299));\n return createPortal$1(children, container, null, key);\n};\nexports.flushSync = function (fn) {\n var previousTransition = ReactSharedInternals.T,\n previousUpdatePriority = Internals.p;\n try {\n if (((ReactSharedInternals.T = null), (Internals.p = 2), fn)) return fn();\n } finally {\n (ReactSharedInternals.T = previousTransition),\n (Internals.p = previousUpdatePriority),\n Internals.d.f();\n }\n};\nexports.preconnect = function (href, options) {\n \"string\" === typeof href &&\n (options\n ? ((options = options.crossOrigin),\n (options =\n \"string\" === typeof options\n ? \"use-credentials\" === options\n ? options\n : \"\"\n : void 0))\n : (options = null),\n Internals.d.C(href, options));\n};\nexports.prefetchDNS = function (href) {\n \"string\" === typeof href && Internals.d.D(href);\n};\nexports.preinit = function (href, options) {\n if (\"string\" === typeof href && options && \"string\" === typeof options.as) {\n var as = options.as,\n crossOrigin = getCrossOriginStringAs(as, options.crossOrigin),\n integrity =\n \"string\" === typeof options.integrity ? options.integrity : void 0,\n fetchPriority =\n \"string\" === typeof options.fetchPriority\n ? options.fetchPriority\n : void 0;\n \"style\" === as\n ? Internals.d.S(\n href,\n \"string\" === typeof options.precedence ? options.precedence : void 0,\n {\n crossOrigin: crossOrigin,\n integrity: integrity,\n fetchPriority: fetchPriority\n }\n )\n : \"script\" === as &&\n Internals.d.X(href, {\n crossOrigin: crossOrigin,\n integrity: integrity,\n fetchPriority: fetchPriority,\n nonce: \"string\" === typeof options.nonce ? options.nonce : void 0\n });\n }\n};\nexports.preinitModule = function (href, options) {\n if (\"string\" === typeof href)\n if (\"object\" === typeof options && null !== options) {\n if (null == options.as || \"script\" === options.as) {\n var crossOrigin = getCrossOriginStringAs(\n options.as,\n options.crossOrigin\n );\n Internals.d.M(href, {\n crossOrigin: crossOrigin,\n integrity:\n \"string\" === typeof options.integrity ? options.integrity : void 0,\n nonce: \"string\" === typeof options.nonce ? options.nonce : void 0\n });\n }\n } else null == options && Internals.d.M(href);\n};\nexports.preload = function (href, options) {\n if (\n \"string\" === typeof href &&\n \"object\" === typeof options &&\n null !== options &&\n \"string\" === typeof options.as\n ) {\n var as = options.as,\n crossOrigin = getCrossOriginStringAs(as, options.crossOrigin);\n Internals.d.L(href, as, {\n crossOrigin: crossOrigin,\n integrity:\n \"string\" === typeof options.integrity ? options.integrity : void 0,\n nonce: \"string\" === typeof options.nonce ? options.nonce : void 0,\n type: \"string\" === typeof options.type ? options.type : void 0,\n fetchPriority:\n \"string\" === typeof options.fetchPriority\n ? options.fetchPriority\n : void 0,\n referrerPolicy:\n \"string\" === typeof options.referrerPolicy\n ? options.referrerPolicy\n : void 0,\n imageSrcSet:\n \"string\" === typeof options.imageSrcSet ? options.imageSrcSet : void 0,\n imageSizes:\n \"string\" === typeof options.imageSizes ? options.imageSizes : void 0,\n media: \"string\" === typeof options.media ? options.media : void 0\n });\n }\n};\nexports.preloadModule = function (href, options) {\n if (\"string\" === typeof href)\n if (options) {\n var crossOrigin = getCrossOriginStringAs(options.as, options.crossOrigin);\n Internals.d.m(href, {\n as:\n \"string\" === typeof options.as && \"script\" !== options.as\n ? options.as\n : void 0,\n crossOrigin: crossOrigin,\n integrity:\n \"string\" === typeof options.integrity ? options.integrity : void 0\n });\n } else Internals.d.m(href);\n};\nexports.requestFormReset = function (form) {\n Internals.d.r(form);\n};\nexports.unstable_batchedUpdates = function (fn, a) {\n return fn(a);\n};\nexports.useFormState = function (action, initialState, permalink) {\n return ReactSharedInternals.H.useFormState(action, initialState, permalink);\n};\nexports.useFormStatus = function () {\n return ReactSharedInternals.H.useHostTransitionStatus();\n};\nexports.version = \"19.0.0-rc-1460d67c-20241003\";\n","'use strict';\n\nfunction checkDCE() {\n /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n if (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n ) {\n return;\n }\n if (process.env.NODE_ENV !== 'production') {\n // This branch is unreachable because this function is only called\n // in production, but the condition is true only in development.\n // Therefore if the branch is still here, dead code elimination wasn't\n // properly applied.\n // Don't change the message. React DevTools relies on it. Also make sure\n // this message doesn't occur elsewhere in this function, or it will cause\n // a false positive.\n throw new Error('^_^');\n }\n try {\n // Verify that the code above has been dead code eliminated (DCE'd).\n __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n } catch (err) {\n // DevTools shouldn't crash React, no matter what.\n // We should still report in case we break this code.\n console.error(err);\n }\n}\n\nif (process.env.NODE_ENV === 'production') {\n // DCE check should happen before ReactDOM bundle executes so that\n // DevTools can report bad minification during injection.\n checkDCE();\n module.exports = require('./cjs/react-dom.production.js');\n} else {\n module.exports = require('./cjs/react-dom.development.js');\n}\n"],"names":["React","require$$0","formatProdErrorMessage","code","url","i","noop","Internals","REACT_PORTAL_TYPE","createPortal$1","children","containerInfo","implementation","key","ReactSharedInternals","getCrossOriginStringAs","as","input","reactDom_production","container","fn","previousTransition","previousUpdatePriority","href","options","crossOrigin","integrity","fetchPriority","form","a","action","initialState","permalink","checkDCE","err","reactDomModule"],"mappings":"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","x_google_ignoreList":[0,1]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{w as i,a as l,L as n}from"./chunk-QMGIS6GS-CTjj1G71.js";import{j as e}from"./jsx-runtime-BjG_zV1W.js";import{E as a}from"./index-D0dQzJhy.js";import{E as m}from"./epic-video-D_3otytp.js";import{G as c}from"./error-boundary-BLyHIxcu.js";import{M as p,E as d}from"./mdx-DD5XL3ew.js";import{a as x}from"./misc-yfWFSwMN.js";import{P as h,u as f}from"./progress-CtGAFS2P.js";import"./index-C0Fh_zu0.js";import"./tooltip-C6xKzWST.js";import"./index-BP1ceC2h.js";import"./pe-C53l4u-6.js";import"./online-CFV79-RX.js";import"./loading-CXEQXwx8.js";import"./user-Dmcddqge.js";import"./workshop-config-gFAnGhSV.js";import"./progress-bar-DTYORRrG.js";function u({exercise:s}){const r=f(s.exerciseNumber);return e.jsx("li",{children:e.jsxs(n,{className:x("relative flex items-center gap-4 px-4 py-3 text-lg font-semibold transition after:absolute after:right-10 after:-translate-x-2 after:opacity-0 after:transition after:content-['→'] hover:bg-gray-50 hover:after:translate-x-0 hover:after:opacity-100 dark:hover:bg-white/5",r),to:`${s.exerciseNumber.toString().padStart(2,"0")}`,children:[e.jsx("span",{className:"text-xs font-normal tabular-nums opacity-50",children:s.exerciseNumber}),e.jsx("span",{children:s.title})]})},s.exerciseNumber)}const b={h1:()=>null},M=i(function({loaderData:r}){const t=e.jsxs("ul",{className:"flex flex-col divide-y divide-border dark:divide-border/50",children:[e.jsx("strong",{className:"px-10 pb-3 font-mono text-xs uppercase",children:"Exercises"}),r.exercises.map(o=>e.jsx(u,{exercise:o},o.exerciseNumber))]});return e.jsxs("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",children:[e.jsxs("article",{id:r.articleId,className:"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",children:[e.jsx("div",{children:e.jsx("h1",{className:"px-10 text-[clamp(3rem,6vw,7.5rem)] font-extrabold leading-none",children:r.title})}),e.jsxs("div",{className:"w-full max-w-none scroll-pt-6 border-t px-3 pt-3 md:px-10 md:pt-8",children:[e.jsx("h2",{className:"pb-5 font-mono text-xs font-semibold uppercase",children:"Intro"}),r.workshopReadme.compiled.status==="success"&&r.workshopReadme.compiled.code?e.jsx(m,{epicVideoInfosPromise:r.epicVideoInfosPromise,children:e.jsx("div",{className:"prose dark:prose-invert sm:prose-lg",children:e.jsx(p,{code:r.workshopReadme.compiled.code,components:b})})}):r.workshopReadme.compiled.status==="error"?e.jsxs("div",{className:"text-red-500",children:["There was an error:",e.jsx("pre",{children:r.workshopReadme.compiled.error})]}):"No instructions yet..."]}),e.jsx("div",{className:"pb-5 pt-10",children:r.workshopReadme.compiled.status==="success"&&r.workshopReadme.compiled.code&&r.workshopReadme.compiled.code.length>500?t:null})]}),e.jsx(a,{elementQuery:`#${r.articleId}`}),e.jsx(h,{type:"workshop-instructions",className:"h-14 border-t px-6"}),e.jsx("div",{className:"flex h-16 justify-center border-t",children:e.jsx(d,{file:r.workshopReadme.file,relativePath:r.workshopReadme.relativePath})})]})}),T=l(function(){return e.jsx(c,{})});export{T as ErrorBoundary,M as default};
|
|
2
|
+
//# sourceMappingURL=index-BSJLLJJ3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-BSJLLJJ3.js","sources":["../../../app/routes/_app+/index.tsx"],"sourcesContent":["import { ElementScrollRestoration } from '@epic-web/restore-scroll'\nimport {\n\tgetExercises,\n\tgetWorkshopInstructions,\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 { data, type HeadersFunction, Link } from 'react-router'\nimport { EpicVideoInfoProvider } from '#app/components/epic-video.tsx'\nimport { GeneralErrorBoundary } from '#app/components/error-boundary.tsx'\nimport { EditFileOnGitHub } from '#app/routes/launch-editor.tsx'\nimport { Mdx } from '#app/utils/mdx.tsx'\nimport { cn } from '#app/utils/misc.tsx'\nimport { ProgressToggle, useExerciseProgressClassName } from '../progress.tsx'\nimport { type Route } from './+types/index.tsx'\n\nexport async function loader({ request }: Route.LoaderArgs) {\n\tconst timings = makeTimings('indexLoader')\n\tconst { title } = getWorkshopConfig()\n\tconst [exercises, workshopReadme] = await Promise.all([\n\t\ttime(() => getExercises({ request, timings }), {\n\t\t\ttimings,\n\t\t\ttype: 'getExercises',\n\t\t\tdesc: 'getExercises in index',\n\t\t}),\n\t\ttime(() => getWorkshopInstructions({ request }), {\n\t\t\ttimings,\n\t\t\ttype: 'compileMdx',\n\t\t\tdesc: 'compileMdx in index',\n\t\t}),\n\t])\n\n\treturn data(\n\t\t{\n\t\t\tarticleId: `workshop-${slugify(title)}-instructions`,\n\t\t\ttitle:\n\t\t\t\tworkshopReadme.compiled.status === 'success'\n\t\t\t\t\t? workshopReadme.compiled.title\n\t\t\t\t\t: title,\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\tworkshopReadme,\n\t\t\tepicVideoInfosPromise:\n\t\t\t\tworkshopReadme.compiled.status === 'success'\n\t\t\t\t\t? getEpicVideoInfos(workshopReadme.compiled.epicVideoEmbeds, {\n\t\t\t\t\t\t\trequest,\n\t\t\t\t\t\t})\n\t\t\t\t\t: null,\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\nfunction ExerciseListItem({\n\texercise,\n}: {\n\texercise: Awaited<Route.ComponentProps['loaderData']>['exercises'][number]\n}) {\n\tconst progressClassName = useExerciseProgressClassName(\n\t\texercise.exerciseNumber,\n\t)\n\treturn (\n\t\t<li key={exercise.exerciseNumber}>\n\t\t\t<Link\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"relative flex items-center gap-4 px-4 py-3 text-lg font-semibold transition after:absolute after:right-10 after:-translate-x-2 after:opacity-0 after:transition after:content-['→'] hover:bg-gray-50 hover:after:translate-x-0 hover:after:opacity-100 dark:hover:bg-white/5\",\n\t\t\t\t\tprogressClassName,\n\t\t\t\t)}\n\t\t\t\tto={`${exercise.exerciseNumber.toString().padStart(2, '0')}`}\n\t\t\t>\n\t\t\t\t<span className=\"text-xs font-normal tabular-nums opacity-50\">\n\t\t\t\t\t{exercise.exerciseNumber}\n\t\t\t\t</span>\n\t\t\t\t<span>{exercise.title}</span>\n\t\t\t</Link>\n\t\t</li>\n\t)\n}\n\nconst mdxComponents = { h1: () => null }\n\nexport default function Index({ loaderData: data }: Route.ComponentProps) {\n\tconst exerciseLinks = (\n\t\t<ul className=\"flex flex-col divide-y divide-border dark:divide-border/50\">\n\t\t\t<strong className=\"px-10 pb-3 font-mono text-xs uppercase\">\n\t\t\t\tExercises\n\t\t\t</strong>\n\t\t\t{data.exercises.map((exercise) => (\n\t\t\t\t<ExerciseListItem key={exercise.exerciseNumber} exercise={exercise} />\n\t\t\t))}\n\t\t</ul>\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\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=\"px-10 text-[clamp(3rem,6vw,7.5rem)] font-extrabold leading-none\">\n\t\t\t\t\t\t{data.title}\n\t\t\t\t\t</h1>\n\t\t\t\t</div>\n\t\t\t\t<div className=\"w-full max-w-none scroll-pt-6 border-t px-3 pt-3 md:px-10 md:pt-8\">\n\t\t\t\t\t<h2 className=\"pb-5 font-mono text-xs font-semibold uppercase\">\n\t\t\t\t\t\tIntro\n\t\t\t\t\t</h2>\n\t\t\t\t\t{data.workshopReadme.compiled.status === 'success' &&\n\t\t\t\t\tdata.workshopReadme.compiled.code ? (\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.workshopReadme.compiled.code}\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) : data.workshopReadme.compiled.status === 'error' ? (\n\t\t\t\t\t\t<div className=\"text-red-500\">\n\t\t\t\t\t\t\tThere was an error:\n\t\t\t\t\t\t\t<pre>{data.workshopReadme.compiled.error}</pre>\n\t\t\t\t\t\t</div>\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\t<div className=\"pb-5 pt-10\">\n\t\t\t\t\t{data.workshopReadme.compiled.status === 'success' &&\n\t\t\t\t\tdata.workshopReadme.compiled.code &&\n\t\t\t\t\tdata.workshopReadme.compiled.code.length > 500\n\t\t\t\t\t\t? exerciseLinks\n\t\t\t\t\t\t: null}\n\t\t\t\t</div>\n\t\t\t</article>\n\t\t\t<ElementScrollRestoration elementQuery={`#${data.articleId}`} />\n\t\t\t<ProgressToggle\n\t\t\t\ttype=\"workshop-instructions\"\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-center border-t\">\n\t\t\t\t<EditFileOnGitHub\n\t\t\t\t\tfile={data.workshopReadme.file}\n\t\t\t\t\trelativePath={data.workshopReadme.relativePath}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</main>\n\t)\n}\n\nexport function ErrorBoundary() {\n\treturn <GeneralErrorBoundary />\n}\n"],"names":["ExerciseListItem","exercise","progressClassName","useExerciseProgressClassName","exerciseNumber","children","jsxs","Link","className","cn","to","toString","padStart","jsx","title","mdxComponents","h1","index","_UNSAFE_withComponentProps","Index","loaderData","data","exerciseLinks","exercises","map","id","articleId","workshopReadme","compiled","status","code","EpicVideoInfoProvider","epicVideoInfosPromise","Mdx","components","error","length","ElementScrollRestoration","elementQuery","ProgressToggle","type","EditFileOnGitHub","file","relativePath","ErrorBoundary","_UNSAFE_withErrorBoundaryProps","GeneralErrorBoundary"],"mappings":"uoBA0EA,SAASA,EAAiB,CACzBC,SAAAA,CACD,EAEG,CACF,MAAMC,EAAoBC,EACzBF,EAASG,cACV,EACA,aACE,KACA,CAAAC,SAAAC,EAAA,KAACC,EAAA,CACAC,UAAWC,EACV,+QACAP,CACD,EACAQ,GAAI,GAAGT,EAASG,eAAeO,SAAW,EAAAC,SAAS,EAAG,GAAG,CAAC,GAE1DP,SAAA,CAAAQ,EAAA,IAAC,OAAK,CAAAL,UAAU,8CACdH,SAAAJ,EAASG,cACX,CAAA,EACAS,EAAA,IAAC,OAAM,CAAAR,SAAAJ,EAASa,KAAM,CAAA,CAAA,CACvB,CAAA,CAAA,EAZQb,EAASG,cAalB,CAEF,CAEA,MAAMW,EAAgB,CAAEC,GAAIA,IAAM,IAAK,EAEvCC,EAAAC,EAAwBC,SAAM,CAAEC,WAAYC,CAAK,EAAyB,CACzE,MAAMC,EACLhB,EAAA,KAAC,KAAG,CAAAE,UAAU,6DACbH,SAAA,CAACQ,EAAA,IAAA,SAAA,CAAOL,UAAU,yCAAyCH,SAE3D,WAAA,CAAA,EACCgB,EAAKE,UAAUC,IAAKvB,SACnBD,EAA+C,CAAAC,SAAAA,CAAA,EAAzBA,EAASG,cAAoC,CACpE,CAAA,CACF,CAAA,EAGA,OAAAE,EAAAA,KAAC,OAAK,CAAAE,UAAU,4FACfH,SAAA,CAAAC,EAAA,KAAC,UAAA,CACAmB,GAAIJ,EAAKK,UACTlB,UAAU,8JAEVH,SAAA,CAACQ,EAAA,IAAA,MAAA,CACAR,eAAC,KAAG,CAAAG,UAAU,kEACZH,SAAAgB,EAAKP,KACP,CAAA,CACD,CAAA,EACAR,EAAA,KAAC,MAAI,CAAAE,UAAU,oEACdH,SAAA,CAACQ,EAAA,IAAA,KAAA,CAAGL,UAAU,iDAAiDH,SAE/D,OAAA,CAAA,EACCgB,EAAKM,eAAeC,SAASC,SAAW,WACzCR,EAAKM,eAAeC,SAASE,KAC5BjB,EAAAA,IAACkB,EAAA,CACAC,sBAAuBX,EAAKW,sBAE5B3B,SAAAQ,EAAA,IAAC,MAAI,CAAAL,UAAU,sCACdH,SAAAQ,EAAA,IAACoB,EAAA,CACAH,KAAMT,EAAKM,eAAeC,SAASE,KACnCI,WAAYnB,CACb,CAAA,CACD,CAAA,CAAA,CACD,EACGM,EAAKM,eAAeC,SAASC,SAAW,QAC3CvB,EAAA,KAAC,MAAI,CAAAE,UAAU,eAAeH,SAAA,CAAA,4BAE5B,MAAK,CAAAA,SAAAgB,EAAKM,eAAeC,SAASO,KAAM,CAAA,CAAA,CAC1C,CAAA,EAEA,wBAAA,CAEF,CAAA,EACAtB,EAAA,IAAC,OAAIL,UAAU,aACbH,SAAAgB,EAAKM,eAAeC,SAASC,SAAW,WACzCR,EAAKM,eAAeC,SAASE,MAC7BT,EAAKM,eAAeC,SAASE,KAAKM,OAAS,IACxCd,EACA,IACJ,CAAA,CAAA,CAAA,CACD,QACCe,EAAyB,CAAAC,aAAc,IAAIjB,EAAKK,SAAS,EAAI,CAAA,EAC9Db,EAAA,IAAC0B,EAAA,CACAC,KAAK,wBACLhC,UAAU,oBAAA,CACX,EACAK,EAAA,IAAC,MAAI,CAAAL,UAAU,oCACdH,SAAAQ,EAAA,IAAC4B,EAAA,CACAC,KAAMrB,EAAKM,eAAee,KAC1BC,aAActB,EAAKM,eAAegB,YACnC,CAAA,CACD,CAAA,CAAA,CACD,CAAA,CAEF,CAAA,EAEOC,EAAAC,EAASD,UAAgB,CAC/B,aAAQE,EAAqB,EAAA,CAC9B,CAAA"}
|