@epic-web/workshop-app 6.4.0 → 6.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (323) hide show
  1. package/build/client/assets/{_-DbsI2yZ3.js → _-DOI2gHX3.js} +2 -2
  2. package/build/client/assets/{_-DbsI2yZ3.js.map → _-DOI2gHX3.js.map} +1 -1
  3. package/build/client/assets/{_-C9pypk8E.js → _-v6PvHZ90.js} +2 -2
  4. package/build/client/assets/_-v6PvHZ90.js.map +1 -0
  5. package/build/client/assets/{_basePickBy-BaGiSohD.js → _basePickBy-DK6It6WA.js} +2 -2
  6. package/build/client/assets/{_basePickBy-BaGiSohD.js.map → _basePickBy-DK6It6WA.js.map} +1 -1
  7. package/build/client/assets/{_baseUniq-BxpIs2Oy.js → _baseUniq-B14mMiqO.js} +2 -2
  8. package/build/client/assets/{_baseUniq-BxpIs2Oy.js.map → _baseUniq-B14mMiqO.js.map} +1 -1
  9. package/build/client/assets/{_exerciseNumber-uGponlfN.js → _exerciseNumber-BhK_Xufd.js} +2 -2
  10. package/build/client/assets/{_exerciseNumber-uGponlfN.js.map → _exerciseNumber-BhK_Xufd.js.map} +1 -1
  11. package/build/client/assets/{_exerciseNumber_._stepNumber-Ce6_sCcU.js → _exerciseNumber_._stepNumber-DBbWnlEd.js} +2 -2
  12. package/build/client/assets/{_exerciseNumber_._stepNumber-Ce6_sCcU.js.map → _exerciseNumber_._stepNumber-DBbWnlEd.js.map} +1 -1
  13. package/build/client/assets/_exerciseNumber_._stepNumber.index-Br7x8lR0.js +2 -0
  14. package/build/client/assets/_exerciseNumber_._stepNumber.index-Br7x8lR0.js.map +1 -0
  15. package/build/client/assets/{_exerciseNumber_.finished-BE2v5_rB.js → _exerciseNumber_.finished-B0iUZ4Jp.js} +2 -2
  16. package/build/client/assets/{_exerciseNumber_.finished-BE2v5_rB.js.map → _exerciseNumber_.finished-B0iUZ4Jp.js.map} +1 -1
  17. package/build/client/assets/_layout-BP3Hz4UU.js +2 -0
  18. package/build/client/assets/{_layout-Co6ujuzn.js.map → _layout-BP3Hz4UU.js.map} +1 -1
  19. package/build/client/assets/{_layout-Bzzu5Cz1.js → _layout-DKmpru-v.js} +2 -2
  20. package/build/client/assets/{_layout-Bzzu5Cz1.js.map → _layout-DKmpru-v.js.map} +1 -1
  21. package/build/client/assets/{_layout-vRDHFYoQ.js → _layout-DRBfGSzn.js} +2 -2
  22. package/build/client/assets/{_layout-vRDHFYoQ.js.map → _layout-DRBfGSzn.js.map} +1 -1
  23. package/build/client/assets/{_layout-BVzBSE-n.js → _layout-DxOG9P39.js} +2 -2
  24. package/build/client/assets/{_layout-BVzBSE-n.js.map → _layout-DxOG9P39.js.map} +1 -1
  25. package/build/client/assets/{accordion-BDR86Xcb.js → accordion-CQRBxCdM.js} +2 -2
  26. package/build/client/assets/{accordion-BDR86Xcb.js.map → accordion-CQRBxCdM.js.map} +1 -1
  27. package/build/client/assets/{account-Cldpf0d2.js → account-BwxqSFjk.js} +2 -2
  28. package/build/client/assets/{account-Cldpf0d2.js.map → account-BwxqSFjk.js.map} +1 -1
  29. package/build/client/assets/api._-Br7x8lR0.js +2 -0
  30. package/build/client/assets/api._-Br7x8lR0.js.map +1 -0
  31. package/build/client/assets/app-CJ-4VoDp.js +2 -0
  32. package/build/client/assets/{app-DmNyqOoy.js.map → app-CJ-4VoDp.js.map} +1 -1
  33. package/build/client/assets/app.epic_ws_.js_-Br7x8lR0.js +2 -0
  34. package/build/client/assets/app.epic_ws_.js_-Br7x8lR0.js.map +1 -0
  35. package/build/client/assets/apps-4hFOncm9.js +2 -0
  36. package/build/client/assets/apps-4hFOncm9.js.map +1 -0
  37. package/build/client/assets/apps-Br7x8lR0.js +2 -0
  38. package/build/client/assets/apps-Br7x8lR0.js.map +1 -0
  39. package/build/client/assets/{arc-DRlf7jq7.js → arc-BVQduULV.js} +2 -2
  40. package/build/client/assets/{arc-DRlf7jq7.js.map → arc-BVQduULV.js.map} +1 -1
  41. package/build/client/assets/{architectureDiagram-NQ2NVSRB-CrmRQ9SO.js → architectureDiagram-NQ2NVSRB-CR4gCI8X.js} +2 -2
  42. package/build/client/assets/{architectureDiagram-NQ2NVSRB-CrmRQ9SO.js.map → architectureDiagram-NQ2NVSRB-CR4gCI8X.js.map} +1 -1
  43. package/build/client/assets/{blockDiagram-PHRCVELO-xwBltM5R.js → blockDiagram-PHRCVELO-DuxnuM93.js} +2 -2
  44. package/build/client/assets/{blockDiagram-PHRCVELO-xwBltM5R.js.map → blockDiagram-PHRCVELO-DuxnuM93.js.map} +1 -1
  45. package/build/client/assets/{button-BlPb-37-.js → button-DGnwQ6KN.js} +2 -2
  46. package/build/client/assets/{button-BlPb-37-.js.map → button-DGnwQ6KN.js.map} +1 -1
  47. package/build/client/assets/{c4Diagram-6F6E4RAY-JkoDHTPF.js → c4Diagram-6F6E4RAY-Dqlm7faJ.js} +2 -2
  48. package/build/client/assets/{c4Diagram-6F6E4RAY-JkoDHTPF.js.map → c4Diagram-6F6E4RAY-Dqlm7faJ.js.map} +1 -1
  49. package/build/client/assets/cache-Br7x8lR0.js +2 -0
  50. package/build/client/assets/cache-Br7x8lR0.js.map +1 -0
  51. package/build/client/assets/channel-Ccfwel2m.js +2 -0
  52. package/build/client/assets/{channel-Cks3Ea6t.js.map → channel-Ccfwel2m.js.map} +1 -1
  53. package/build/client/assets/{chunk-353BL4L5-CHKdRF8O.js → chunk-353BL4L5-CY0biqke.js} +2 -2
  54. package/build/client/assets/{chunk-353BL4L5-CHKdRF8O.js.map → chunk-353BL4L5-CY0biqke.js.map} +1 -1
  55. package/build/client/assets/{chunk-67H74DCK-BMun8kdQ.js → chunk-67H74DCK-CZpFcSK7.js} +2 -2
  56. package/build/client/assets/{chunk-67H74DCK-BMun8kdQ.js.map → chunk-67H74DCK-CZpFcSK7.js.map} +1 -1
  57. package/build/client/assets/{chunk-6OLS64BW-D0k_ZwIC.js → chunk-6OLS64BW-CV0M_3sG.js} +2 -2
  58. package/build/client/assets/{chunk-6OLS64BW-D0k_ZwIC.js.map → chunk-6OLS64BW-CV0M_3sG.js.map} +1 -1
  59. package/build/client/assets/{chunk-AACKK3MU-Cj8nrtEq.js → chunk-AACKK3MU-B4Z3pj6y.js} +2 -2
  60. package/build/client/assets/{chunk-AACKK3MU-Cj8nrtEq.js.map → chunk-AACKK3MU-B4Z3pj6y.js.map} +1 -1
  61. package/build/client/assets/{chunk-BFAMUDN2-CIt8WAbe.js → chunk-BFAMUDN2-xSXsSdRc.js} +2 -2
  62. package/build/client/assets/{chunk-BFAMUDN2-CIt8WAbe.js.map → chunk-BFAMUDN2-xSXsSdRc.js.map} +1 -1
  63. package/build/client/assets/{chunk-E2GYISFI-lfUxhUba.js → chunk-E2GYISFI-XxwOHDH_.js} +2 -2
  64. package/build/client/assets/{chunk-E2GYISFI-lfUxhUba.js.map → chunk-E2GYISFI-XxwOHDH_.js.map} +1 -1
  65. package/build/client/assets/{chunk-QEP2MXWD-By0BtF5w.js → chunk-QEP2MXWD-ChxN-fyh.js} +2 -2
  66. package/build/client/assets/{chunk-QEP2MXWD-By0BtF5w.js.map → chunk-QEP2MXWD-ChxN-fyh.js.map} +1 -1
  67. package/build/client/assets/{chunk-QMGIS6GS-D3fke51R.js → chunk-QMGIS6GS-Cnm5uIBY.js} +2 -2
  68. package/build/client/assets/{chunk-QMGIS6GS-D3fke51R.js.map → chunk-QMGIS6GS-Cnm5uIBY.js.map} +1 -1
  69. package/build/client/assets/{chunk-SKB7J2MH-B4y7fFww.js → chunk-SKB7J2MH-Iq1sBnJg.js} +2 -2
  70. package/build/client/assets/{chunk-SKB7J2MH-B4y7fFww.js.map → chunk-SKB7J2MH-Iq1sBnJg.js.map} +1 -1
  71. package/build/client/assets/classDiagram-BGRH5UQR-C3baNHIn.js +2 -0
  72. package/build/client/assets/{classDiagram-BGRH5UQR-Ddac1FX8.js.map → classDiagram-BGRH5UQR-C3baNHIn.js.map} +1 -1
  73. package/build/client/assets/classDiagram-v2-O24JOBDK-C3baNHIn.js +2 -0
  74. package/build/client/assets/{classDiagram-v2-O24JOBDK-Ddac1FX8.js.map → classDiagram-v2-O24JOBDK-C3baNHIn.js.map} +1 -1
  75. package/build/client/assets/clone-CBh9K_C0.js +2 -0
  76. package/build/client/assets/{clone-BzOlX5uP.js.map → clone-CBh9K_C0.js.map} +1 -1
  77. package/build/client/assets/{dagre-FFZHY6LT-BF_ENDvI.js → dagre-FFZHY6LT-DRX4CPoT.js} +2 -2
  78. package/build/client/assets/{dagre-FFZHY6LT-BF_ENDvI.js.map → dagre-FFZHY6LT-DRX4CPoT.js.map} +1 -1
  79. package/build/client/assets/{diagram-3EMPZRKU-Co8BNYOp.js → diagram-3EMPZRKU-DnyeZVpZ.js} +2 -2
  80. package/build/client/assets/{diagram-3EMPZRKU-Co8BNYOp.js.map → diagram-3EMPZRKU-DnyeZVpZ.js.map} +1 -1
  81. package/build/client/assets/{diagram-5UYTHUR4-CTF96wbH.js → diagram-5UYTHUR4-CGNqEi7_.js} +2 -2
  82. package/build/client/assets/{diagram-5UYTHUR4-CTF96wbH.js.map → diagram-5UYTHUR4-CGNqEi7_.js.map} +1 -1
  83. package/build/client/assets/{diagram-ZTM2IBQH-BPjsVcII.js → diagram-ZTM2IBQH-TQuk-ulz.js} +2 -2
  84. package/build/client/assets/{diagram-ZTM2IBQH-BPjsVcII.js.map → diagram-ZTM2IBQH-TQuk-ulz.js.map} +1 -1
  85. package/build/client/assets/diff-C4a0B6T4.js +2 -0
  86. package/build/client/assets/{diff-C4mTCnzp.js.map → diff-C4a0B6T4.js.map} +1 -1
  87. package/build/client/assets/{diff-BHlDvw_d.js → diff-CvXO10rY.js} +2 -2
  88. package/build/client/assets/{diff-BHlDvw_d.js.map → diff-CvXO10rY.js.map} +1 -1
  89. package/build/client/assets/discord-BoNGnjEv.js +2 -0
  90. package/build/client/assets/discord-BoNGnjEv.js.map +1 -0
  91. package/build/client/assets/{discord-DajcCBfS.js → discord-CpOQOwKa.js} +2 -2
  92. package/build/client/assets/{discord-DajcCBfS.js.map → discord-CpOQOwKa.js.map} +1 -1
  93. package/build/client/assets/{entry.client-CkiXyAWa.js → entry.client-JXPtXVLj.js} +2 -2
  94. package/build/client/assets/{entry.client-CkiXyAWa.js.map → entry.client-JXPtXVLj.js.map} +1 -1
  95. package/build/client/assets/{epic-video-7egGi8C6.js → epic-video-VKhk-6Mv.js} +2 -2
  96. package/build/client/assets/{epic-video-7egGi8C6.js.map → epic-video-VKhk-6Mv.js.map} +1 -1
  97. package/build/client/assets/epic_ws_.js_-Br7x8lR0.js +2 -0
  98. package/build/client/assets/epic_ws_.js_-Br7x8lR0.js.map +1 -0
  99. package/build/client/assets/{erDiagram-R3QVA2FD-CoI7VxY8.js → erDiagram-R3QVA2FD-DcVPSaZ1.js} +2 -2
  100. package/build/client/assets/{erDiagram-R3QVA2FD-CoI7VxY8.js.map → erDiagram-R3QVA2FD-DcVPSaZ1.js.map} +1 -1
  101. package/build/client/assets/{error-boundary-DxZMubY-.js → error-boundary-BDRYzb6K.js} +2 -2
  102. package/build/client/assets/{error-boundary-DxZMubY-.js.map → error-boundary-BDRYzb6K.js.map} +1 -1
  103. package/build/client/assets/exercises-Br7x8lR0.js +2 -0
  104. package/build/client/assets/exercises-Br7x8lR0.js.map +1 -0
  105. package/build/client/assets/{finished-DqZ90XsZ.js → finished-BkL8cvWw.js} +2 -2
  106. package/build/client/assets/{finished-DqZ90XsZ.js.map → finished-BkL8cvWw.js.map} +1 -1
  107. package/build/client/assets/{flowDiagram-PKI6S5ZS-FVR0aJCb.js → flowDiagram-PKI6S5ZS-BjGswWQI.js} +2 -2
  108. package/build/client/assets/{flowDiagram-PKI6S5ZS-FVR0aJCb.js.map → flowDiagram-PKI6S5ZS-BjGswWQI.js.map} +1 -1
  109. package/build/client/assets/{ganttDiagram-EK5VF46D-Cgd-KnRJ.js → ganttDiagram-EK5VF46D-CigmRAu8.js} +2 -2
  110. package/build/client/assets/{ganttDiagram-EK5VF46D-Cgd-KnRJ.js.map → ganttDiagram-EK5VF46D-CigmRAu8.js.map} +1 -1
  111. package/build/client/assets/{gitGraphDiagram-GW3U2K7C-C5-T89ck.js → gitGraphDiagram-GW3U2K7C-BZRSDtTk.js} +2 -2
  112. package/build/client/assets/{gitGraphDiagram-GW3U2K7C-C5-T89ck.js.map → gitGraphDiagram-GW3U2K7C-BZRSDtTk.js.map} +1 -1
  113. package/build/client/assets/{graph-2blmPy0J.js → graph-ssQ5a7An.js} +2 -2
  114. package/build/client/assets/{graph-2blmPy0J.js.map → graph-ssQ5a7An.js.map} +1 -1
  115. package/build/client/assets/index-4hFOncm9.js +2 -0
  116. package/build/client/assets/index-4hFOncm9.js.map +1 -0
  117. package/build/client/assets/index-BEOsF4gu.js +2 -0
  118. package/build/client/assets/index-BEOsF4gu.js.map +1 -0
  119. package/build/client/assets/{index-DXWoNbMw.js → index-BSUgjf5i.js} +2 -2
  120. package/build/client/assets/{index-DXWoNbMw.js.map → index-BSUgjf5i.js.map} +1 -1
  121. package/build/client/assets/index-Br7x8lR0.js +2 -0
  122. package/build/client/assets/index-Br7x8lR0.js.map +1 -0
  123. package/build/client/assets/{index-DMYU8Adz.js → index-BvSgrEwH.js} +2 -2
  124. package/build/client/assets/{index-DMYU8Adz.js.map → index-BvSgrEwH.js.map} +1 -1
  125. package/build/client/assets/{index-ENEzd29c.js → index-ByKe5Bbc.js} +2 -2
  126. package/build/client/assets/{index-ENEzd29c.js.map → index-ByKe5Bbc.js.map} +1 -1
  127. package/build/client/assets/{index-BF30kxMM.js → index-CSKRws-d.js} +2 -2
  128. package/build/client/assets/{index-BF30kxMM.js.map → index-CSKRws-d.js.map} +1 -1
  129. package/build/client/assets/{index-N0rVhLdR.js → index-Ce8G4fcS.js} +2 -2
  130. package/build/client/assets/{index-N0rVhLdR.js.map → index-Ce8G4fcS.js.map} +1 -1
  131. package/build/client/assets/{index-CY2XuFSg.js → index-CfuMsJpq.js} +2 -2
  132. package/build/client/assets/{index-CY2XuFSg.js.map → index-CfuMsJpq.js.map} +1 -1
  133. package/build/client/assets/{index-BpiFo4Bs.js → index-DQHP10an.js} +2 -2
  134. package/build/client/assets/{index-BpiFo4Bs.js.map → index-DQHP10an.js.map} +1 -1
  135. package/build/client/assets/{index-BJy9GGix.js → index-DVtOZE_w.js} +2 -2
  136. package/build/client/assets/{index-BJy9GGix.js.map → index-DVtOZE_w.js.map} +1 -1
  137. package/build/client/assets/{index-C4WpsDjj.js → index-kpJjamgW.js} +2 -2
  138. package/build/client/assets/{index-C4WpsDjj.js.map → index-kpJjamgW.js.map} +1 -1
  139. package/build/client/assets/infoDiagram-RLU2ROGC-oEx_S6Vy.js +3 -0
  140. package/build/client/assets/{infoDiagram-RLU2ROGC-D9Xc3j8L.js.map → infoDiagram-RLU2ROGC-oEx_S6Vy.js.map} +1 -1
  141. package/build/client/assets/{journeyDiagram-EWQZEKCU-CYjHBCKP.js → journeyDiagram-EWQZEKCU-BX8-xfo9.js} +2 -2
  142. package/build/client/assets/{journeyDiagram-EWQZEKCU-CYjHBCKP.js.map → journeyDiagram-EWQZEKCU-BX8-xfo9.js.map} +1 -1
  143. package/build/client/assets/{jsx-runtime-B2LUJHWf.js → jsx-runtime-BcujL2Aj.js} +2 -2
  144. package/build/client/assets/{jsx-runtime-B2LUJHWf.js.map → jsx-runtime-BcujL2Aj.js.map} +1 -1
  145. package/build/client/assets/{kanban-definition-ILFWEQ3N-CzQXJAxD.js → kanban-definition-ILFWEQ3N-DSuN0acj.js} +2 -2
  146. package/build/client/assets/{kanban-definition-ILFWEQ3N-CzQXJAxD.js.map → kanban-definition-ILFWEQ3N-DSuN0acj.js.map} +1 -1
  147. package/build/client/assets/l-COkiy20v.js +2 -0
  148. package/build/client/assets/{l-F4A7XDEa.js.map → l-COkiy20v.js.map} +1 -1
  149. package/build/client/assets/launch-editor-Br7x8lR0.js +2 -0
  150. package/build/client/assets/launch-editor-Br7x8lR0.js.map +1 -0
  151. package/build/client/assets/{layout-CV-Afn_q.js → layout-CRUJr5tM.js} +2 -2
  152. package/build/client/assets/{layout-CV-Afn_q.js.map → layout-CRUJr5tM.js.map} +1 -1
  153. package/build/client/assets/{linear-jxQrrEcI.js → linear-4YOhyf6z.js} +2 -2
  154. package/build/client/assets/{linear-jxQrrEcI.js.map → linear-4YOhyf6z.js.map} +1 -1
  155. package/build/client/assets/{loading-j2MezYUg.js → loading-BQiZCXl-.js} +2 -2
  156. package/build/client/assets/{loading-j2MezYUg.js.map → loading-BQiZCXl-.js.map} +1 -1
  157. package/build/client/assets/{login-BcFnxSmx.js → login-C3y9sPuf.js} +2 -2
  158. package/build/client/assets/{login-BcFnxSmx.js.map → login-C3y9sPuf.js.map} +1 -1
  159. package/build/client/assets/login-sse-Br7x8lR0.js +2 -0
  160. package/build/client/assets/login-sse-Br7x8lR0.js.map +1 -0
  161. package/build/client/assets/manifest-93bf5827.js +1 -0
  162. package/build/client/assets/{mdx-qcm_nkgI.js → mdx-Bx84e4TR.js} +3 -3
  163. package/build/client/assets/{mdx-qcm_nkgI.js.map → mdx-Bx84e4TR.js.map} +1 -1
  164. package/build/client/assets/{mermaid.core-D3pfbveR.js → mermaid.core-DUlGGmFz.js} +5 -5
  165. package/build/client/assets/{mermaid.core-D3pfbveR.js.map → mermaid.core-DUlGGmFz.js.map} +1 -1
  166. package/build/client/assets/{mindmap-definition-CZNETY7S-C3usFkdR.js → mindmap-definition-CZNETY7S-BQAkEQ50.js} +2 -2
  167. package/build/client/assets/{mindmap-definition-CZNETY7S-C3usFkdR.js.map → mindmap-definition-CZNETY7S-BQAkEQ50.js.map} +1 -1
  168. package/build/client/assets/{misc-D-dDb89H.js → misc-CJXb1d0J.js} +2 -2
  169. package/build/client/assets/{misc-D-dDb89H.js.map → misc-CJXb1d0J.js.map} +1 -1
  170. package/build/client/assets/{nav-chevrons-BF-_ecnj.js → nav-chevrons-D9XKa1mH.js} +2 -2
  171. package/build/client/assets/{nav-chevrons-BF-_ecnj.js.map → nav-chevrons-D9XKa1mH.js.map} +1 -1
  172. package/build/client/assets/notifications-Br7x8lR0.js +2 -0
  173. package/build/client/assets/notifications-Br7x8lR0.js.map +1 -0
  174. package/build/client/assets/og-Br7x8lR0.js +2 -0
  175. package/build/client/assets/og-Br7x8lR0.js.map +1 -0
  176. package/build/client/assets/{onboarding-BM4wTFL9.js → onboarding-BaZDYUh7.js} +2 -2
  177. package/build/client/assets/{onboarding-BM4wTFL9.js.map → onboarding-BaZDYUh7.js.map} +1 -1
  178. package/build/client/assets/{online-DRbKQRzx.js → online-CgtIvFKH.js} +2 -2
  179. package/build/client/assets/{online-DRbKQRzx.js.map → online-CgtIvFKH.js.map} +1 -1
  180. package/build/client/assets/{pe-Dd-3Vdrv.js → pe-DBKBCHmz.js} +2 -2
  181. package/build/client/assets/{pe-Dd-3Vdrv.js.map → pe-DBKBCHmz.js.map} +1 -1
  182. package/build/client/assets/{pieDiagram-NIOCPIFQ-CNwdtlXk.js → pieDiagram-NIOCPIFQ-BoeOpfcZ.js} +2 -2
  183. package/build/client/assets/{pieDiagram-NIOCPIFQ-CNwdtlXk.js.map → pieDiagram-NIOCPIFQ-BoeOpfcZ.js.map} +1 -1
  184. package/build/client/assets/{preferences-CcTn1CYh.js → preferences-DgiQZThQ.js} +2 -2
  185. package/build/client/assets/{preferences-CcTn1CYh.js.map → preferences-DgiQZThQ.js.map} +1 -1
  186. package/build/client/assets/{presence-h4yTLoon.js → presence-CusrArdA.js} +2 -2
  187. package/build/client/assets/{presence-h4yTLoon.js.map → presence-CusrArdA.js.map} +1 -1
  188. package/build/client/assets/{preview-gHmuDJK-.js → preview-9FeYSEDk.js} +2 -2
  189. package/build/client/assets/{preview-gHmuDJK-.js.map → preview-9FeYSEDk.js.map} +1 -1
  190. package/build/client/assets/processes-Br7x8lR0.js +2 -0
  191. package/build/client/assets/processes-Br7x8lR0.js.map +1 -0
  192. package/build/client/assets/{product-Jj1IV1k9.js → product-CrOzBC_k.js} +2 -2
  193. package/build/client/assets/{product-Jj1IV1k9.js.map → product-CrOzBC_k.js.map} +1 -1
  194. package/build/client/assets/{progress-wyxFr9qs.js → progress-B01tSSb6.js} +2 -2
  195. package/build/client/assets/{progress-wyxFr9qs.js.map → progress-B01tSSb6.js.map} +1 -1
  196. package/build/client/assets/progress-Br7x8lR0.js +2 -0
  197. package/build/client/assets/progress-Br7x8lR0.js.map +1 -0
  198. package/build/client/assets/{progress-bar-BA_tln9A.js → progress-bar-DlBnagEk.js} +2 -2
  199. package/build/client/assets/{progress-bar-BA_tln9A.js.map → progress-bar-DlBnagEk.js.map} +1 -1
  200. package/build/client/assets/{quadrantDiagram-2OG54O6I-DJSr7VVP.js → quadrantDiagram-2OG54O6I-CGBRKetG.js} +2 -2
  201. package/build/client/assets/{quadrantDiagram-2OG54O6I-DJSr7VVP.js.map → quadrantDiagram-2OG54O6I-CGBRKetG.js.map} +1 -1
  202. package/build/client/assets/{requirementDiagram-SO3GGRV7-Dm9X6gYp.js → requirementDiagram-SO3GGRV7-DchVPiOQ.js} +2 -2
  203. package/build/client/assets/{requirementDiagram-SO3GGRV7-Dm9X6gYp.js.map → requirementDiagram-SO3GGRV7-DchVPiOQ.js.map} +1 -1
  204. package/build/client/assets/{revalidation-ws-D6cizZ34.js → revalidation-ws-SaBpRC7c.js} +2 -2
  205. package/build/client/assets/{revalidation-ws-D6cizZ34.js.map → revalidation-ws-SaBpRC7c.js.map} +1 -1
  206. package/build/client/assets/robots_._txt-Br7x8lR0.js +2 -0
  207. package/build/client/assets/robots_._txt-Br7x8lR0.js.map +1 -0
  208. package/build/client/assets/{root-LFhpEp1U.js → root-7toTLRGZ.js} +2 -2
  209. package/build/client/assets/{root-LFhpEp1U.js.map → root-7toTLRGZ.js.map} +1 -1
  210. package/build/client/assets/{sankeyDiagram-4UZDY2LN-afK9nbXy.js → sankeyDiagram-4UZDY2LN-IiFJHkzY.js} +2 -2
  211. package/build/client/assets/{sankeyDiagram-4UZDY2LN-afK9nbXy.js.map → sankeyDiagram-4UZDY2LN-IiFJHkzY.js.map} +1 -1
  212. package/build/client/assets/{seo-BRfbzXHZ.js → seo-F3atQazV.js} +2 -2
  213. package/build/client/assets/{seo-BRfbzXHZ.js.map → seo-F3atQazV.js.map} +1 -1
  214. package/build/client/assets/{sequenceDiagram-ZIKVLSP4-DU42bc3a.js → sequenceDiagram-ZIKVLSP4-Bp2zg0YM.js} +2 -2
  215. package/build/client/assets/{sequenceDiagram-ZIKVLSP4-DU42bc3a.js.map → sequenceDiagram-ZIKVLSP4-Bp2zg0YM.js.map} +1 -1
  216. package/build/client/assets/{set-playground-BGT1RjX_.js → set-playground-BA0z3_BN.js} +2 -2
  217. package/build/client/assets/{set-playground-BGT1RjX_.js.map → set-playground-BA0z3_BN.js.map} +1 -1
  218. package/build/client/assets/set-playground-Br7x8lR0.js +2 -0
  219. package/build/client/assets/set-playground-Br7x8lR0.js.map +1 -0
  220. package/build/client/assets/sitemap_._xml-Br7x8lR0.js +2 -0
  221. package/build/client/assets/sitemap_._xml-Br7x8lR0.js.map +1 -0
  222. package/build/client/assets/start-Br7x8lR0.js +2 -0
  223. package/build/client/assets/start-Br7x8lR0.js.map +1 -0
  224. package/build/client/assets/{stateDiagram-XX37X6EN-B8EwlakM.js → stateDiagram-XX37X6EN-CuKZSA6z.js} +2 -2
  225. package/build/client/assets/{stateDiagram-XX37X6EN-B8EwlakM.js.map → stateDiagram-XX37X6EN-CuKZSA6z.js.map} +1 -1
  226. package/build/client/assets/stateDiagram-v2-GD6S3NHB-bjx76_OI.js +2 -0
  227. package/build/client/assets/{stateDiagram-v2-GD6S3NHB-35ZXM1_g.js.map → stateDiagram-v2-GD6S3NHB-bjx76_OI.js.map} +1 -1
  228. package/build/client/assets/{support-sQOGILfK.js → support-DUh3BiQf.js} +2 -2
  229. package/build/client/assets/{support-sQOGILfK.js.map → support-DUh3BiQf.js.map} +1 -1
  230. package/build/client/assets/test-Br7x8lR0.js +2 -0
  231. package/build/client/assets/test-Br7x8lR0.js.map +1 -0
  232. package/build/client/assets/test-Ctr_7QVp.js +2 -0
  233. package/build/client/assets/{test-B50ljUg2.js.map → test-Ctr_7QVp.js.map} +1 -1
  234. package/build/client/assets/test._testName-Br7x8lR0.js +2 -0
  235. package/build/client/assets/test._testName-Br7x8lR0.js.map +1 -0
  236. package/build/client/assets/test.epic_ws_.js_-Br7x8lR0.js +2 -0
  237. package/build/client/assets/test.epic_ws_.js_-Br7x8lR0.js.map +1 -0
  238. package/build/client/assets/{tests-CNS1bm1R.js → tests-CZAI0vqW.js} +2 -2
  239. package/build/client/assets/{tests-CNS1bm1R.js.map → tests-CZAI0vqW.js.map} +1 -1
  240. package/build/client/assets/{timeline-definition-RI47OAVP-BfpaCaB_.js → timeline-definition-RI47OAVP-COW1irsJ.js} +2 -2
  241. package/build/client/assets/{timeline-definition-RI47OAVP-BfpaCaB_.js.map → timeline-definition-RI47OAVP-COW1irsJ.js.map} +1 -1
  242. package/build/client/assets/{tooltip-DaEk9smk.js → tooltip-Dm5SBVY5.js} +2 -2
  243. package/build/client/assets/{tooltip-DaEk9smk.js.map → tooltip-Dm5SBVY5.js.map} +1 -1
  244. package/build/client/assets/{treemap-FKARHQ26-BYAT_cTQ.js → treemap-FKARHQ26-OIm2RKyV.js} +2 -2
  245. package/build/client/assets/{treemap-FKARHQ26-BYAT_cTQ.js.map → treemap-FKARHQ26-OIm2RKyV.js.map} +1 -1
  246. package/build/client/assets/{use-event-source-D7BmAfNV.js → use-event-source-0sFFzZkm.js} +2 -2
  247. package/build/client/assets/{use-event-source-D7BmAfNV.js.map → use-event-source-0sFFzZkm.js.map} +1 -1
  248. package/build/client/assets/{user-CQfYiwjz.js → user-C6NChLGC.js} +2 -2
  249. package/build/client/assets/{user-CQfYiwjz.js.map → user-C6NChLGC.js.map} +1 -1
  250. package/build/client/assets/{version-DZ56dlh_.js → version-trzp9pgE.js} +2 -2
  251. package/build/client/assets/{version-DZ56dlh_.js.map → version-trzp9pgE.js.map} +1 -1
  252. package/build/client/assets/workshop-config-Cx9qZQEC.js +2 -0
  253. package/build/client/assets/{workshop-config-BOTAWJa-.js.map → workshop-config-Cx9qZQEC.js.map} +1 -1
  254. package/build/client/assets/{workspace-structure-DRKC9vIr.js → workspace-structure-CskVhupe.js} +2 -2
  255. package/build/client/assets/{workspace-structure-DRKC9vIr.js.map → workspace-structure-CskVhupe.js.map} +1 -1
  256. package/build/client/assets/{xychartDiagram-H2YORKM3-8frmuuIZ.js → xychartDiagram-H2YORKM3-BF6VLUdC.js} +2 -2
  257. package/build/client/assets/{xychartDiagram-H2YORKM3-8frmuuIZ.js.map → xychartDiagram-H2YORKM3-BF6VLUdC.js.map} +1 -1
  258. package/build/server/index.js +2 -2
  259. package/package.json +1 -1
  260. package/build/client/assets/_-C9pypk8E.js.map +0 -1
  261. package/build/client/assets/_exerciseNumber_._stepNumber.index-Bltw4W_f.js +0 -2
  262. package/build/client/assets/_exerciseNumber_._stepNumber.index-Bltw4W_f.js.map +0 -1
  263. package/build/client/assets/_layout-Co6ujuzn.js +0 -2
  264. package/build/client/assets/api._-Bltw4W_f.js +0 -2
  265. package/build/client/assets/api._-Bltw4W_f.js.map +0 -1
  266. package/build/client/assets/app-DmNyqOoy.js +0 -2
  267. package/build/client/assets/app.epic_ws_.js_-Bltw4W_f.js +0 -2
  268. package/build/client/assets/app.epic_ws_.js_-Bltw4W_f.js.map +0 -1
  269. package/build/client/assets/apps-Bltw4W_f.js +0 -2
  270. package/build/client/assets/apps-Bltw4W_f.js.map +0 -1
  271. package/build/client/assets/apps-D27kw0fL.js +0 -2
  272. package/build/client/assets/apps-D27kw0fL.js.map +0 -1
  273. package/build/client/assets/cache-Bltw4W_f.js +0 -2
  274. package/build/client/assets/cache-Bltw4W_f.js.map +0 -1
  275. package/build/client/assets/channel-Cks3Ea6t.js +0 -2
  276. package/build/client/assets/classDiagram-BGRH5UQR-Ddac1FX8.js +0 -2
  277. package/build/client/assets/classDiagram-v2-O24JOBDK-Ddac1FX8.js +0 -2
  278. package/build/client/assets/clone-BzOlX5uP.js +0 -2
  279. package/build/client/assets/diff-C4mTCnzp.js +0 -2
  280. package/build/client/assets/discord-CTud2-P1.js +0 -2
  281. package/build/client/assets/discord-CTud2-P1.js.map +0 -1
  282. package/build/client/assets/epic_ws_.js_-Bltw4W_f.js +0 -2
  283. package/build/client/assets/epic_ws_.js_-Bltw4W_f.js.map +0 -1
  284. package/build/client/assets/exercises-Bltw4W_f.js +0 -2
  285. package/build/client/assets/exercises-Bltw4W_f.js.map +0 -1
  286. package/build/client/assets/index-Bltw4W_f.js +0 -2
  287. package/build/client/assets/index-Bltw4W_f.js.map +0 -1
  288. package/build/client/assets/index-D27kw0fL.js +0 -2
  289. package/build/client/assets/index-D27kw0fL.js.map +0 -1
  290. package/build/client/assets/index-Drom-uLQ.js +0 -2
  291. package/build/client/assets/index-Drom-uLQ.js.map +0 -1
  292. package/build/client/assets/infoDiagram-RLU2ROGC-D9Xc3j8L.js +0 -3
  293. package/build/client/assets/l-F4A7XDEa.js +0 -2
  294. package/build/client/assets/launch-editor-Bltw4W_f.js +0 -2
  295. package/build/client/assets/launch-editor-Bltw4W_f.js.map +0 -1
  296. package/build/client/assets/login-sse-Bltw4W_f.js +0 -2
  297. package/build/client/assets/login-sse-Bltw4W_f.js.map +0 -1
  298. package/build/client/assets/manifest-a77f969d.js +0 -1
  299. package/build/client/assets/notifications-Bltw4W_f.js +0 -2
  300. package/build/client/assets/notifications-Bltw4W_f.js.map +0 -1
  301. package/build/client/assets/og-Bltw4W_f.js +0 -2
  302. package/build/client/assets/og-Bltw4W_f.js.map +0 -1
  303. package/build/client/assets/processes-Bltw4W_f.js +0 -2
  304. package/build/client/assets/processes-Bltw4W_f.js.map +0 -1
  305. package/build/client/assets/progress-Bltw4W_f.js +0 -2
  306. package/build/client/assets/progress-Bltw4W_f.js.map +0 -1
  307. package/build/client/assets/robots_._txt-Bltw4W_f.js +0 -2
  308. package/build/client/assets/robots_._txt-Bltw4W_f.js.map +0 -1
  309. package/build/client/assets/set-playground-Bltw4W_f.js +0 -2
  310. package/build/client/assets/set-playground-Bltw4W_f.js.map +0 -1
  311. package/build/client/assets/sitemap_._xml-Bltw4W_f.js +0 -2
  312. package/build/client/assets/sitemap_._xml-Bltw4W_f.js.map +0 -1
  313. package/build/client/assets/start-Bltw4W_f.js +0 -2
  314. package/build/client/assets/start-Bltw4W_f.js.map +0 -1
  315. package/build/client/assets/stateDiagram-v2-GD6S3NHB-35ZXM1_g.js +0 -2
  316. package/build/client/assets/test-B50ljUg2.js +0 -2
  317. package/build/client/assets/test-Bltw4W_f.js +0 -2
  318. package/build/client/assets/test-Bltw4W_f.js.map +0 -1
  319. package/build/client/assets/test._testName-Bltw4W_f.js +0 -2
  320. package/build/client/assets/test._testName-Bltw4W_f.js.map +0 -1
  321. package/build/client/assets/test.epic_ws_.js_-Bltw4W_f.js +0 -2
  322. package/build/client/assets/test.epic_ws_.js_-Bltw4W_f.js.map +0 -1
  323. package/build/client/assets/workshop-config-BOTAWJa-.js +0 -2
@@ -1 +1 @@
1
- {"version":3,"file":"tests-CNS1bm1R.js","sources":["../../../app/routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/__shared/playground-window.tsx","../../../../../node_modules/entities/lib/decode_codepoint.js","../../../../../node_modules/entities/lib/decode.js","../../../../../node_modules/entities/lib/encode.js","../../../../../node_modules/entities/lib/index.js","../../../../../node_modules/ansi-to-html/lib/ansi_to_html.js","../../../app/utils/ansi-text.ts","../../../app/components/in-browser-test-runner.tsx","../../../app/routes/test.tsx","../../../app/routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/__shared/tests.tsx"],"sourcesContent":["import { Icon } from '#app/components/icons'\nimport { SimpleTooltip } from '#app/components/ui/tooltip.js'\nimport { PlaygroundChooser, SetPlayground } from '#app/routes/set-playground'\n\nexport function PlaygroundWindow({\n\tplaygroundAppName,\n\tproblemAppName,\n\tisUpToDate,\n\tallApps,\n\tchildren,\n}: {\n\tplaygroundAppName?: string\n\tproblemAppName?: string\n\tisUpToDate: boolean\n\tallApps: Array<{ name: string; displayName: string }>\n\tchildren: React.ReactNode\n}) {\n\tconst isCorrectApp = playgroundAppName === problemAppName\n\tconst playgroundLinkedUI =\n\t\tisCorrectApp && isUpToDate ? (\n\t\t\t<Icon size=\"xl\" name=\"Linked\" />\n\t\t) : (\n\t\t\t<Icon\n\t\t\t\tsize=\"xl\"\n\t\t\t\tname=\"Unlinked\"\n\t\t\t\tclassName=\"animate-pulse text-foreground-destructive\"\n\t\t\t/>\n\t\t)\n\tlet setPlaygroundTooltipText = 'Click to reset Playground.'\n\tif (!isUpToDate) {\n\t\tsetPlaygroundTooltipText =\n\t\t\t'Playground is out of date. Click to reset Playground.'\n\t}\n\tif (!isCorrectApp) {\n\t\tsetPlaygroundTooltipText =\n\t\t\t'Playground is not set to the right app. Click to set Playground.'\n\t}\n\treturn (\n\t\t<div className=\"flex h-full w-full flex-col justify-between\">\n\t\t\t<div className=\"flex h-14 flex-shrink-0 items-center justify-start gap-2 border-b px-3\">\n\t\t\t\t<div className=\"display-alt-up\">\n\t\t\t\t\t{problemAppName ? (\n\t\t\t\t\t\t<SetPlayground\n\t\t\t\t\t\t\tappName={problemAppName}\n\t\t\t\t\t\t\ttooltipText={setPlaygroundTooltipText}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{playgroundLinkedUI}\n\t\t\t\t\t\t</SetPlayground>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<SimpleTooltip content=\"No problem app available for this step\">\n\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t<Icon name=\"Question\" />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</SimpleTooltip>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t\t<div className=\"display-alt-down\">\n\t\t\t\t\t{playgroundAppName ? (\n\t\t\t\t\t\t<SetPlayground\n\t\t\t\t\t\t\tappName={playgroundAppName}\n\t\t\t\t\t\t\treset\n\t\t\t\t\t\t\ttooltipText=\"Reset Playground\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div className=\"flex h-7 w-7 items-center justify-center\">\n\t\t\t\t\t\t\t\t<Icon name=\"Refresh\" />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</SetPlayground>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<div className=\"h-7 w-7\" />\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t\t<PlaygroundChooser\n\t\t\t\t\tallApps={allApps}\n\t\t\t\t\tplaygroundAppName={playgroundAppName}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<div className=\"flex h-full flex-1 flex-grow items-center justify-center\">\n\t\t\t\t{children}\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar decode_json_1 = __importDefault(require(\"./maps/decode.json\"));\n// Adapted from https://github.com/mathiasbynens/he/blob/master/src/he.js#L94-L119\nvar fromCodePoint = \n// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\nString.fromCodePoint ||\n function (codePoint) {\n var output = \"\";\n if (codePoint > 0xffff) {\n codePoint -= 0x10000;\n output += String.fromCharCode(((codePoint >>> 10) & 0x3ff) | 0xd800);\n codePoint = 0xdc00 | (codePoint & 0x3ff);\n }\n output += String.fromCharCode(codePoint);\n return output;\n };\nfunction decodeCodePoint(codePoint) {\n if ((codePoint >= 0xd800 && codePoint <= 0xdfff) || codePoint > 0x10ffff) {\n return \"\\uFFFD\";\n }\n if (codePoint in decode_json_1.default) {\n codePoint = decode_json_1.default[codePoint];\n }\n return fromCodePoint(codePoint);\n}\nexports.default = decodeCodePoint;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.decodeHTML = exports.decodeHTMLStrict = exports.decodeXML = void 0;\nvar entities_json_1 = __importDefault(require(\"./maps/entities.json\"));\nvar legacy_json_1 = __importDefault(require(\"./maps/legacy.json\"));\nvar xml_json_1 = __importDefault(require(\"./maps/xml.json\"));\nvar decode_codepoint_1 = __importDefault(require(\"./decode_codepoint\"));\nvar strictEntityRe = /&(?:[a-zA-Z0-9]+|#[xX][\\da-fA-F]+|#\\d+);/g;\nexports.decodeXML = getStrictDecoder(xml_json_1.default);\nexports.decodeHTMLStrict = getStrictDecoder(entities_json_1.default);\nfunction getStrictDecoder(map) {\n var replace = getReplacer(map);\n return function (str) { return String(str).replace(strictEntityRe, replace); };\n}\nvar sorter = function (a, b) { return (a < b ? 1 : -1); };\nexports.decodeHTML = (function () {\n var legacy = Object.keys(legacy_json_1.default).sort(sorter);\n var keys = Object.keys(entities_json_1.default).sort(sorter);\n for (var i = 0, j = 0; i < keys.length; i++) {\n if (legacy[j] === keys[i]) {\n keys[i] += \";?\";\n j++;\n }\n else {\n keys[i] += \";\";\n }\n }\n var re = new RegExp(\"&(?:\" + keys.join(\"|\") + \"|#[xX][\\\\da-fA-F]+;?|#\\\\d+;?)\", \"g\");\n var replace = getReplacer(entities_json_1.default);\n function replacer(str) {\n if (str.substr(-1) !== \";\")\n str += \";\";\n return replace(str);\n }\n // TODO consider creating a merged map\n return function (str) { return String(str).replace(re, replacer); };\n})();\nfunction getReplacer(map) {\n return function replace(str) {\n if (str.charAt(1) === \"#\") {\n var secondChar = str.charAt(2);\n if (secondChar === \"X\" || secondChar === \"x\") {\n return decode_codepoint_1.default(parseInt(str.substr(3), 16));\n }\n return decode_codepoint_1.default(parseInt(str.substr(2), 10));\n }\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n return map[str.slice(1, -1)] || str;\n };\n}\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.escapeUTF8 = exports.escape = exports.encodeNonAsciiHTML = exports.encodeHTML = exports.encodeXML = void 0;\nvar xml_json_1 = __importDefault(require(\"./maps/xml.json\"));\nvar inverseXML = getInverseObj(xml_json_1.default);\nvar xmlReplacer = getInverseReplacer(inverseXML);\n/**\n * Encodes all non-ASCII characters, as well as characters not valid in XML\n * documents using XML entities.\n *\n * If a character has no equivalent entity, a\n * numeric hexadecimal reference (eg. `&#xfc;`) will be used.\n */\nexports.encodeXML = getASCIIEncoder(inverseXML);\nvar entities_json_1 = __importDefault(require(\"./maps/entities.json\"));\nvar inverseHTML = getInverseObj(entities_json_1.default);\nvar htmlReplacer = getInverseReplacer(inverseHTML);\n/**\n * Encodes all entities and non-ASCII characters in the input.\n *\n * This includes characters that are valid ASCII characters in HTML documents.\n * For example `#` will be encoded as `&num;`. To get a more compact output,\n * consider using the `encodeNonAsciiHTML` function.\n *\n * If a character has no equivalent entity, a\n * numeric hexadecimal reference (eg. `&#xfc;`) will be used.\n */\nexports.encodeHTML = getInverse(inverseHTML, htmlReplacer);\n/**\n * Encodes all non-ASCII characters, as well as characters not valid in HTML\n * documents using HTML entities.\n *\n * If a character has no equivalent entity, a\n * numeric hexadecimal reference (eg. `&#xfc;`) will be used.\n */\nexports.encodeNonAsciiHTML = getASCIIEncoder(inverseHTML);\nfunction getInverseObj(obj) {\n return Object.keys(obj)\n .sort()\n .reduce(function (inverse, name) {\n inverse[obj[name]] = \"&\" + name + \";\";\n return inverse;\n }, {});\n}\nfunction getInverseReplacer(inverse) {\n var single = [];\n var multiple = [];\n for (var _i = 0, _a = Object.keys(inverse); _i < _a.length; _i++) {\n var k = _a[_i];\n if (k.length === 1) {\n // Add value to single array\n single.push(\"\\\\\" + k);\n }\n else {\n // Add value to multiple array\n multiple.push(k);\n }\n }\n // Add ranges to single characters.\n single.sort();\n for (var start = 0; start < single.length - 1; start++) {\n // Find the end of a run of characters\n var end = start;\n while (end < single.length - 1 &&\n single[end].charCodeAt(1) + 1 === single[end + 1].charCodeAt(1)) {\n end += 1;\n }\n var count = 1 + end - start;\n // We want to replace at least three characters\n if (count < 3)\n continue;\n single.splice(start, count, single[start] + \"-\" + single[end]);\n }\n multiple.unshift(\"[\" + single.join(\"\") + \"]\");\n return new RegExp(multiple.join(\"|\"), \"g\");\n}\n// /[^\\0-\\x7F]/gu\nvar reNonASCII = /(?:[\\x80-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/g;\nvar getCodePoint = \n// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\nString.prototype.codePointAt != null\n ? // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n function (str) { return str.codePointAt(0); }\n : // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n function (c) {\n return (c.charCodeAt(0) - 0xd800) * 0x400 +\n c.charCodeAt(1) -\n 0xdc00 +\n 0x10000;\n };\nfunction singleCharReplacer(c) {\n return \"&#x\" + (c.length > 1 ? getCodePoint(c) : c.charCodeAt(0))\n .toString(16)\n .toUpperCase() + \";\";\n}\nfunction getInverse(inverse, re) {\n return function (data) {\n return data\n .replace(re, function (name) { return inverse[name]; })\n .replace(reNonASCII, singleCharReplacer);\n };\n}\nvar reEscapeChars = new RegExp(xmlReplacer.source + \"|\" + reNonASCII.source, \"g\");\n/**\n * Encodes all non-ASCII characters, as well as characters not valid in XML\n * documents using numeric hexadecimal reference (eg. `&#xfc;`).\n *\n * Have a look at `escapeUTF8` if you want a more concise output at the expense\n * of reduced transportability.\n *\n * @param data String to escape.\n */\nfunction escape(data) {\n return data.replace(reEscapeChars, singleCharReplacer);\n}\nexports.escape = escape;\n/**\n * Encodes all characters not valid in XML documents using numeric hexadecimal\n * reference (eg. `&#xfc;`).\n *\n * Note that the output will be character-set dependent.\n *\n * @param data String to escape.\n */\nfunction escapeUTF8(data) {\n return data.replace(xmlReplacer, singleCharReplacer);\n}\nexports.escapeUTF8 = escapeUTF8;\nfunction getASCIIEncoder(obj) {\n return function (data) {\n return data.replace(reEscapeChars, function (c) { return obj[c] || singleCharReplacer(c); });\n };\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.decodeXMLStrict = exports.decodeHTML5Strict = exports.decodeHTML4Strict = exports.decodeHTML5 = exports.decodeHTML4 = exports.decodeHTMLStrict = exports.decodeHTML = exports.decodeXML = exports.encodeHTML5 = exports.encodeHTML4 = exports.escapeUTF8 = exports.escape = exports.encodeNonAsciiHTML = exports.encodeHTML = exports.encodeXML = exports.encode = exports.decodeStrict = exports.decode = void 0;\nvar decode_1 = require(\"./decode\");\nvar encode_1 = require(\"./encode\");\n/**\n * Decodes a string with entities.\n *\n * @param data String to decode.\n * @param level Optional level to decode at. 0 = XML, 1 = HTML. Default is 0.\n * @deprecated Use `decodeXML` or `decodeHTML` directly.\n */\nfunction decode(data, level) {\n return (!level || level <= 0 ? decode_1.decodeXML : decode_1.decodeHTML)(data);\n}\nexports.decode = decode;\n/**\n * Decodes a string with entities. Does not allow missing trailing semicolons for entities.\n *\n * @param data String to decode.\n * @param level Optional level to decode at. 0 = XML, 1 = HTML. Default is 0.\n * @deprecated Use `decodeHTMLStrict` or `decodeXML` directly.\n */\nfunction decodeStrict(data, level) {\n return (!level || level <= 0 ? decode_1.decodeXML : decode_1.decodeHTMLStrict)(data);\n}\nexports.decodeStrict = decodeStrict;\n/**\n * Encodes a string with entities.\n *\n * @param data String to encode.\n * @param level Optional level to encode at. 0 = XML, 1 = HTML. Default is 0.\n * @deprecated Use `encodeHTML`, `encodeXML` or `encodeNonAsciiHTML` directly.\n */\nfunction encode(data, level) {\n return (!level || level <= 0 ? encode_1.encodeXML : encode_1.encodeHTML)(data);\n}\nexports.encode = encode;\nvar encode_2 = require(\"./encode\");\nObject.defineProperty(exports, \"encodeXML\", { enumerable: true, get: function () { return encode_2.encodeXML; } });\nObject.defineProperty(exports, \"encodeHTML\", { enumerable: true, get: function () { return encode_2.encodeHTML; } });\nObject.defineProperty(exports, \"encodeNonAsciiHTML\", { enumerable: true, get: function () { return encode_2.encodeNonAsciiHTML; } });\nObject.defineProperty(exports, \"escape\", { enumerable: true, get: function () { return encode_2.escape; } });\nObject.defineProperty(exports, \"escapeUTF8\", { enumerable: true, get: function () { return encode_2.escapeUTF8; } });\n// Legacy aliases (deprecated)\nObject.defineProperty(exports, \"encodeHTML4\", { enumerable: true, get: function () { return encode_2.encodeHTML; } });\nObject.defineProperty(exports, \"encodeHTML5\", { enumerable: true, get: function () { return encode_2.encodeHTML; } });\nvar decode_2 = require(\"./decode\");\nObject.defineProperty(exports, \"decodeXML\", { enumerable: true, get: function () { return decode_2.decodeXML; } });\nObject.defineProperty(exports, \"decodeHTML\", { enumerable: true, get: function () { return decode_2.decodeHTML; } });\nObject.defineProperty(exports, \"decodeHTMLStrict\", { enumerable: true, get: function () { return decode_2.decodeHTMLStrict; } });\n// Legacy aliases (deprecated)\nObject.defineProperty(exports, \"decodeHTML4\", { enumerable: true, get: function () { return decode_2.decodeHTML; } });\nObject.defineProperty(exports, \"decodeHTML5\", { enumerable: true, get: function () { return decode_2.decodeHTML; } });\nObject.defineProperty(exports, \"decodeHTML4Strict\", { enumerable: true, get: function () { return decode_2.decodeHTMLStrict; } });\nObject.defineProperty(exports, \"decodeHTML5Strict\", { enumerable: true, get: function () { return decode_2.decodeHTMLStrict; } });\nObject.defineProperty(exports, \"decodeXMLStrict\", { enumerable: true, get: function () { return decode_2.decodeXML; } });\n","'use strict';\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nvar entities = require('entities');\n\nvar defaults = {\n fg: '#FFF',\n bg: '#000',\n newline: false,\n escapeXML: false,\n stream: false,\n colors: getDefaultColors()\n};\n\nfunction getDefaultColors() {\n var colors = {\n 0: '#000',\n 1: '#A00',\n 2: '#0A0',\n 3: '#A50',\n 4: '#00A',\n 5: '#A0A',\n 6: '#0AA',\n 7: '#AAA',\n 8: '#555',\n 9: '#F55',\n 10: '#5F5',\n 11: '#FF5',\n 12: '#55F',\n 13: '#F5F',\n 14: '#5FF',\n 15: '#FFF'\n };\n range(0, 5).forEach(function (red) {\n range(0, 5).forEach(function (green) {\n range(0, 5).forEach(function (blue) {\n return setStyleColor(red, green, blue, colors);\n });\n });\n });\n range(0, 23).forEach(function (gray) {\n var c = gray + 232;\n var l = toHexString(gray * 10 + 8);\n colors[c] = '#' + l + l + l;\n });\n return colors;\n}\n/**\n * @param {number} red\n * @param {number} green\n * @param {number} blue\n * @param {object} colors\n */\n\n\nfunction setStyleColor(red, green, blue, colors) {\n var c = 16 + red * 36 + green * 6 + blue;\n var r = red > 0 ? red * 40 + 55 : 0;\n var g = green > 0 ? green * 40 + 55 : 0;\n var b = blue > 0 ? blue * 40 + 55 : 0;\n colors[c] = toColorHexString([r, g, b]);\n}\n/**\n * Converts from a number like 15 to a hex string like 'F'\n * @param {number} num\n * @returns {string}\n */\n\n\nfunction toHexString(num) {\n var str = num.toString(16);\n\n while (str.length < 2) {\n str = '0' + str;\n }\n\n return str;\n}\n/**\n * Converts from an array of numbers like [15, 15, 15] to a hex string like 'FFF'\n * @param {[red, green, blue]} ref\n * @returns {string}\n */\n\n\nfunction toColorHexString(ref) {\n var results = [];\n\n var _iterator = _createForOfIteratorHelper(ref),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var r = _step.value;\n results.push(toHexString(r));\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n return '#' + results.join('');\n}\n/**\n * @param {Array} stack\n * @param {string} token\n * @param {*} data\n * @param {object} options\n */\n\n\nfunction generateOutput(stack, token, data, options) {\n var result;\n\n if (token === 'text') {\n result = pushText(data, options);\n } else if (token === 'display') {\n result = handleDisplay(stack, data, options);\n } else if (token === 'xterm256Foreground') {\n result = pushForegroundColor(stack, options.colors[data]);\n } else if (token === 'xterm256Background') {\n result = pushBackgroundColor(stack, options.colors[data]);\n } else if (token === 'rgb') {\n result = handleRgb(stack, data);\n }\n\n return result;\n}\n/**\n * @param {Array} stack\n * @param {string} data\n * @returns {*}\n */\n\n\nfunction handleRgb(stack, data) {\n data = data.substring(2).slice(0, -1);\n var operation = +data.substr(0, 2);\n var color = data.substring(5).split(';');\n var rgb = color.map(function (value) {\n return ('0' + Number(value).toString(16)).substr(-2);\n }).join('');\n return pushStyle(stack, (operation === 38 ? 'color:#' : 'background-color:#') + rgb);\n}\n/**\n * @param {Array} stack\n * @param {number} code\n * @param {object} options\n * @returns {*}\n */\n\n\nfunction handleDisplay(stack, code, options) {\n code = parseInt(code, 10);\n var codeMap = {\n '-1': function _() {\n return '<br/>';\n },\n 0: function _() {\n return stack.length && resetStyles(stack);\n },\n 1: function _() {\n return pushTag(stack, 'b');\n },\n 3: function _() {\n return pushTag(stack, 'i');\n },\n 4: function _() {\n return pushTag(stack, 'u');\n },\n 8: function _() {\n return pushStyle(stack, 'display:none');\n },\n 9: function _() {\n return pushTag(stack, 'strike');\n },\n 22: function _() {\n return pushStyle(stack, 'font-weight:normal;text-decoration:none;font-style:normal');\n },\n 23: function _() {\n return closeTag(stack, 'i');\n },\n 24: function _() {\n return closeTag(stack, 'u');\n },\n 39: function _() {\n return pushForegroundColor(stack, options.fg);\n },\n 49: function _() {\n return pushBackgroundColor(stack, options.bg);\n },\n 53: function _() {\n return pushStyle(stack, 'text-decoration:overline');\n }\n };\n var result;\n\n if (codeMap[code]) {\n result = codeMap[code]();\n } else if (4 < code && code < 7) {\n result = pushTag(stack, 'blink');\n } else if (29 < code && code < 38) {\n result = pushForegroundColor(stack, options.colors[code - 30]);\n } else if (39 < code && code < 48) {\n result = pushBackgroundColor(stack, options.colors[code - 40]);\n } else if (89 < code && code < 98) {\n result = pushForegroundColor(stack, options.colors[8 + (code - 90)]);\n } else if (99 < code && code < 108) {\n result = pushBackgroundColor(stack, options.colors[8 + (code - 100)]);\n }\n\n return result;\n}\n/**\n * Clear all the styles\n * @returns {string}\n */\n\n\nfunction resetStyles(stack) {\n var stackClone = stack.slice(0);\n stack.length = 0;\n return stackClone.reverse().map(function (tag) {\n return '</' + tag + '>';\n }).join('');\n}\n/**\n * Creates an array of numbers ranging from low to high\n * @param {number} low\n * @param {number} high\n * @returns {Array}\n * @example range(3, 7); // creates [3, 4, 5, 6, 7]\n */\n\n\nfunction range(low, high) {\n var results = [];\n\n for (var j = low; j <= high; j++) {\n results.push(j);\n }\n\n return results;\n}\n/**\n * Returns a new function that is true if value is NOT the same category\n * @param {string} category\n * @returns {function}\n */\n\n\nfunction notCategory(category) {\n return function (e) {\n return (category === null || e.category !== category) && category !== 'all';\n };\n}\n/**\n * Converts a code into an ansi token type\n * @param {number} code\n * @returns {string}\n */\n\n\nfunction categoryForCode(code) {\n code = parseInt(code, 10);\n var result = null;\n\n if (code === 0) {\n result = 'all';\n } else if (code === 1) {\n result = 'bold';\n } else if (2 < code && code < 5) {\n result = 'underline';\n } else if (4 < code && code < 7) {\n result = 'blink';\n } else if (code === 8) {\n result = 'hide';\n } else if (code === 9) {\n result = 'strike';\n } else if (29 < code && code < 38 || code === 39 || 89 < code && code < 98) {\n result = 'foreground-color';\n } else if (39 < code && code < 48 || code === 49 || 99 < code && code < 108) {\n result = 'background-color';\n }\n\n return result;\n}\n/**\n * @param {string} text\n * @param {object} options\n * @returns {string}\n */\n\n\nfunction pushText(text, options) {\n if (options.escapeXML) {\n return entities.encodeXML(text);\n }\n\n return text;\n}\n/**\n * @param {Array} stack\n * @param {string} tag\n * @param {string} [style='']\n * @returns {string}\n */\n\n\nfunction pushTag(stack, tag, style) {\n if (!style) {\n style = '';\n }\n\n stack.push(tag);\n return \"<\".concat(tag).concat(style ? \" style=\\\"\".concat(style, \"\\\"\") : '', \">\");\n}\n/**\n * @param {Array} stack\n * @param {string} style\n * @returns {string}\n */\n\n\nfunction pushStyle(stack, style) {\n return pushTag(stack, 'span', style);\n}\n\nfunction pushForegroundColor(stack, color) {\n return pushTag(stack, 'span', 'color:' + color);\n}\n\nfunction pushBackgroundColor(stack, color) {\n return pushTag(stack, 'span', 'background-color:' + color);\n}\n/**\n * @param {Array} stack\n * @param {string} style\n * @returns {string}\n */\n\n\nfunction closeTag(stack, style) {\n var last;\n\n if (stack.slice(-1)[0] === style) {\n last = stack.pop();\n }\n\n if (last) {\n return '</' + style + '>';\n }\n}\n/**\n * @param {string} text\n * @param {object} options\n * @param {function} callback\n * @returns {Array}\n */\n\n\nfunction tokenize(text, options, callback) {\n var ansiMatch = false;\n var ansiHandler = 3;\n\n function remove() {\n return '';\n }\n\n function removeXterm256Foreground(m, g1) {\n callback('xterm256Foreground', g1);\n return '';\n }\n\n function removeXterm256Background(m, g1) {\n callback('xterm256Background', g1);\n return '';\n }\n\n function newline(m) {\n if (options.newline) {\n callback('display', -1);\n } else {\n callback('text', m);\n }\n\n return '';\n }\n\n function ansiMess(m, g1) {\n ansiMatch = true;\n\n if (g1.trim().length === 0) {\n g1 = '0';\n }\n\n g1 = g1.trimRight(';').split(';');\n\n var _iterator2 = _createForOfIteratorHelper(g1),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var g = _step2.value;\n callback('display', g);\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n return '';\n }\n\n function realText(m) {\n callback('text', m);\n return '';\n }\n\n function rgb(m) {\n callback('rgb', m);\n return '';\n }\n /* eslint no-control-regex:0 */\n\n\n var tokens = [{\n pattern: /^\\x08+/,\n sub: remove\n }, {\n pattern: /^\\x1b\\[[012]?K/,\n sub: remove\n }, {\n pattern: /^\\x1b\\[\\(B/,\n sub: remove\n }, {\n pattern: /^\\x1b\\[[34]8;2;\\d+;\\d+;\\d+m/,\n sub: rgb\n }, {\n pattern: /^\\x1b\\[38;5;(\\d+)m/,\n sub: removeXterm256Foreground\n }, {\n pattern: /^\\x1b\\[48;5;(\\d+)m/,\n sub: removeXterm256Background\n }, {\n pattern: /^\\n/,\n sub: newline\n }, {\n pattern: /^\\r+\\n/,\n sub: newline\n }, {\n pattern: /^\\r/,\n sub: newline\n }, {\n pattern: /^\\x1b\\[((?:\\d{1,3};?)+|)m/,\n sub: ansiMess\n }, {\n // CSI n J\n // ED - Erase in Display Clears part of the screen.\n // If n is 0 (or missing), clear from cursor to end of screen.\n // If n is 1, clear from cursor to beginning of the screen.\n // If n is 2, clear entire screen (and moves cursor to upper left on DOS ANSI.SYS).\n // If n is 3, clear entire screen and delete all lines saved in the scrollback buffer\n // (this feature was added for xterm and is supported by other terminal applications).\n pattern: /^\\x1b\\[\\d?J/,\n sub: remove\n }, {\n // CSI n ; m f\n // HVP - Horizontal Vertical Position Same as CUP\n pattern: /^\\x1b\\[\\d{0,3};\\d{0,3}f/,\n sub: remove\n }, {\n // catch-all for CSI sequences?\n pattern: /^\\x1b\\[?[\\d;]{0,3}/,\n sub: remove\n }, {\n /**\n * extracts real text - not containing:\n * - `\\x1b' - ESC - escape (Ascii 27)\n * - '\\x08' - BS - backspace (Ascii 8)\n * - `\\n` - Newline - linefeed (LF) (ascii 10)\n * - `\\r` - Windows Carriage Return (CR)\n */\n pattern: /^(([^\\x1b\\x08\\r\\n])+)/,\n sub: realText\n }];\n\n function process(handler, i) {\n if (i > ansiHandler && ansiMatch) {\n return;\n }\n\n ansiMatch = false;\n text = text.replace(handler.pattern, handler.sub);\n }\n\n var results1 = [];\n var _text = text,\n length = _text.length;\n\n outer: while (length > 0) {\n for (var i = 0, o = 0, len = tokens.length; o < len; i = ++o) {\n var handler = tokens[i];\n process(handler, i);\n\n if (text.length !== length) {\n // We matched a token and removed it from the text. We need to\n // start matching *all* tokens against the new text.\n length = text.length;\n continue outer;\n }\n }\n\n if (text.length === length) {\n break;\n }\n\n results1.push(0);\n length = text.length;\n }\n\n return results1;\n}\n/**\n * If streaming, then the stack is \"sticky\"\n *\n * @param {Array} stickyStack\n * @param {string} token\n * @param {*} data\n * @returns {Array}\n */\n\n\nfunction updateStickyStack(stickyStack, token, data) {\n if (token !== 'text') {\n stickyStack = stickyStack.filter(notCategory(categoryForCode(data)));\n stickyStack.push({\n token: token,\n data: data,\n category: categoryForCode(data)\n });\n }\n\n return stickyStack;\n}\n\nvar Filter = /*#__PURE__*/function () {\n /**\n * @param {object} options\n * @param {string=} options.fg The default foreground color used when reset color codes are encountered.\n * @param {string=} options.bg The default background color used when reset color codes are encountered.\n * @param {boolean=} options.newline Convert newline characters to `<br/>`.\n * @param {boolean=} options.escapeXML Generate HTML/XML entities.\n * @param {boolean=} options.stream Save style state across invocations of `toHtml()`.\n * @param {(string[] | {[code: number]: string})=} options.colors Can override specific colors or the entire ANSI palette.\n */\n function Filter(options) {\n _classCallCheck(this, Filter);\n\n options = options || {};\n\n if (options.colors) {\n options.colors = Object.assign({}, defaults.colors, options.colors);\n }\n\n this.options = Object.assign({}, defaults, options);\n this.stack = [];\n this.stickyStack = [];\n }\n /**\n * @param {string | string[]} input\n * @returns {string}\n */\n\n\n _createClass(Filter, [{\n key: \"toHtml\",\n value: function toHtml(input) {\n var _this = this;\n\n input = typeof input === 'string' ? [input] : input;\n var stack = this.stack,\n options = this.options;\n var buf = [];\n this.stickyStack.forEach(function (element) {\n var output = generateOutput(stack, element.token, element.data, options);\n\n if (output) {\n buf.push(output);\n }\n });\n tokenize(input.join(''), options, function (token, data) {\n var output = generateOutput(stack, token, data, options);\n\n if (output) {\n buf.push(output);\n }\n\n if (options.stream) {\n _this.stickyStack = updateStickyStack(_this.stickyStack, token, data);\n }\n });\n\n if (stack.length) {\n buf.push(resetStyles(stack));\n }\n\n return buf.join('');\n }\n }]);\n\n return Filter;\n}();\n\nmodule.exports = Filter;\n//# sourceMappingURL=ansi_to_html.js.map","import AnsiToHTML from 'ansi-to-html'\nimport { useMemo } from 'react'\nimport { useTheme } from '#app/routes/theme/index.js'\n\nexport function useAnsiToHtml() {\n\tconst theme = useTheme()\n\tconst ansi = useMemo(\n\t\t() =>\n\t\t\tnew AnsiToHTML(\n\t\t\t\ttheme === 'dark'\n\t\t\t\t\t? { fg: '#d6deeb', bg: '#121318', escapeXML: true }\n\t\t\t\t\t: { fg: '#000000', bg: '#f3f3f3', escapeXML: true },\n\t\t\t),\n\t\t[theme],\n\t)\n\treturn ansi\n}\n\n// remove this when this is fixed: https://github.com/rburns/ansi-to-html/issues/112\nexport function stripCursorMovements(data: string) {\n\treturn data.replace(/\\u001b\\[\\d+A/g, '').replace(/\\u001b\\[\\d+K/g, '')\n}\n","import * as Accordion from '@radix-ui/react-accordion'\nimport { useEffect, useRef, useState } from 'react'\nimport { z } from 'zod'\nimport AccordionComponent from '#app/components/accordion.tsx'\nimport { useTheme } from '#app/routes/theme/index.tsx'\nimport { stripCursorMovements, useAnsiToHtml } from '#app/utils/ansi-text.js'\nimport { AnimatedBars, Icon } from './icons.tsx'\n\nconst testRunnerStatusDataSchema = z.intersection(\n\tz.object({\n\t\ttype: z.literal('epicshop:test-status-update'),\n\t\ttimestamp: z.number(),\n\t}),\n\tz.union([\n\t\tz.object({ status: z.literal('pending') }),\n\t\tz.object({ status: z.literal('pass') }),\n\t\tz.object({ status: z.literal('fail'), error: z.string() }),\n\t]),\n)\n\nconst testRunnerTestStepDataSchema = z.object({\n\ttype: z.literal('epicshop:test-step-update'),\n\tstatus: z.literal('pass'),\n\ttitle: z.string(),\n\ttimestamp: z.number(),\n})\n\nconst testRunnerDataSchema = z.union([\n\ttestRunnerTestStepDataSchema,\n\ttestRunnerStatusDataSchema,\n])\n\ntype TestRunnerStatusData = z.infer<typeof testRunnerStatusDataSchema>\ntype TestRunnerTestStepData = z.infer<typeof testRunnerTestStepDataSchema>\n\nexport function InBrowserTestRunner({\n\tpathname,\n\ttestFile,\n}: {\n\tpathname: string\n\ttestFile: string\n}) {\n\tconst theme = useTheme()\n\tconst ansi = useAnsiToHtml()\n\tconst iframeRef = useRef<HTMLIFrameElement>(null)\n\tconst [message, setMessage] = useState<TestRunnerStatusData | null>(null)\n\tconst [testSteps, setTestSteps] = useState<Array<TestRunnerTestStepData>>([])\n\n\tuseEffect(() => {\n\t\tfunction handleMessage(messageEvent: MessageEvent) {\n\t\t\tif (messageEvent.source !== iframeRef.current?.contentWindow) return\n\t\t\tif ('request' in messageEvent.data) return\n\n\t\t\tconst result = testRunnerDataSchema.safeParse(messageEvent.data, {\n\t\t\t\tpath: ['messageEvent', 'data'],\n\t\t\t})\n\t\t\tif (!result.success) {\n\t\t\t\tconsole.error(\n\t\t\t\t\t`Invalid message from test iframe`,\n\t\t\t\t\tmessageEvent.data,\n\t\t\t\t\tresult.error,\n\t\t\t\t)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst { data } = result\n\t\t\tif (data.type === 'epicshop:test-status-update') {\n\t\t\t\tif (data.status === 'pending') {\n\t\t\t\t\tsetTestSteps([])\n\t\t\t\t}\n\t\t\t\tsetMessage(data)\n\t\t\t}\n\t\t\tif (data.type === 'epicshop:test-step-update') {\n\t\t\t\tsetTestSteps((steps) => [...steps, data])\n\t\t\t}\n\t\t}\n\t\twindow.addEventListener('message', handleMessage)\n\t\treturn () => {\n\t\t\twindow.removeEventListener('message', handleMessage)\n\t\t}\n\t}, [])\n\n\tconst statusEmoji = {\n\t\tpending: <AnimatedBars size={14} aria-label=\"Pending\" />,\n\t\tpass: (\n\t\t\t<Icon\n\t\t\t\tname=\"CheckSmall\"\n\t\t\t\taria-label=\"Passed\"\n\t\t\t\tclassName=\"text-emerald-700\"\n\t\t\t/>\n\t\t),\n\t\tfail: (\n\t\t\t<Icon\n\t\t\t\tname=\"Remove\"\n\t\t\t\taria-label=\"Failed\"\n\t\t\t\tclassName=\"text-foreground-destructive\"\n\t\t\t/>\n\t\t),\n\t\tunknown: (\n\t\t\t<Icon name=\"Question\" aria-label=\"Unknown\" className=\"animate-pulse\" />\n\t\t),\n\t}[message?.status ?? 'unknown']\n\n\tconst sortedTestSteps = testSteps.sort((a, b) => a.timestamp - b.timestamp)\n\tconst testStepStatusEmojis = {\n\t\tpass: <Icon name=\"CheckSmall\" aria-label=\"Passed\" />,\n\t\tfail: <Icon name=\"Remove\" aria-label=\"Failed\" />,\n\t\tunknown: (\n\t\t\t<Icon name=\"Question\" aria-label=\"Unknown\" className=\"animate-pulse\" />\n\t\t),\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<Accordion.Root className=\"w-full\" type=\"multiple\">\n\t\t\t\t<AccordionComponent\n\t\t\t\t\ticon={statusEmoji}\n\t\t\t\t\ttitle={testFile}\n\t\t\t\t\tforceMount={true}\n\t\t\t\t>\n\t\t\t\t\t<div className=\"not-prose\">\n\t\t\t\t\t\t<div className=\"flex flex-col gap-2 p-5 pt-3\">\n\t\t\t\t\t\t\t<ul className=\"flex flex-col gap-2\">\n\t\t\t\t\t\t\t\t{sortedTestSteps.map((testStep, index) => (\n\t\t\t\t\t\t\t\t\t// sometimes the steps come in so fast that the timestamp is the same\n\t\t\t\t\t\t\t\t\t<li key={testStep.timestamp + testStep.title}>\n\t\t\t\t\t\t\t\t\t\t<div className=\"flex items-baseline gap-2 text-emerald-700\">\n\t\t\t\t\t\t\t\t\t\t\t<span>{index + 1}.</span>\n\t\t\t\t\t\t\t\t\t\t\t<span>{testStepStatusEmojis[testStep.status]}</span>\n\t\t\t\t\t\t\t\t\t\t\t<pre className=\"max-h-48 overflow-y-auto p-4 scrollbar-thin scrollbar-thumb-scrollbar\">\n\t\t\t\t\t\t\t\t\t\t\t\t{testStep.title}\n\t\t\t\t\t\t\t\t\t\t\t</pre>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t\t{message?.status === 'fail' ? (\n\t\t\t\t\t\t\t\t<div className=\"flex items-baseline gap-2 text-foreground-destructive\">\n\t\t\t\t\t\t\t\t\t<span>{sortedTestSteps.length + 1}.</span>\n\t\t\t\t\t\t\t\t\t<span>{testStepStatusEmojis.fail}</span>\n\t\t\t\t\t\t\t\t\t<pre\n\t\t\t\t\t\t\t\t\t\tclassName=\"max-h-48 overflow-y-auto p-4 scrollbar-thin scrollbar-thumb-scrollbar\"\n\t\t\t\t\t\t\t\t\t\tdangerouslySetInnerHTML={{\n\t\t\t\t\t\t\t\t\t\t\t__html: ansi.toHtml(stripCursorMovements(message.error)),\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</div>\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t<iframe\n\t\t\t\t\t\t\t\tref={iframeRef}\n\t\t\t\t\t\t\t\ttitle={testFile}\n\t\t\t\t\t\t\t\tsrc={pathname + testFile}\n\t\t\t\t\t\t\t\tclassName=\"mt-5 min-h-[420px] w-full border bg-white\"\n\t\t\t\t\t\t\t\tstyle={{ colorScheme: theme }}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div className=\"flex border-y\">\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\tonClick={() =>\n\t\t\t\t\t\t\t\t\tiframeRef.current?.contentWindow?.location.reload()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tclassName=\"border-r p-3\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Icon name=\"Refresh\" aria-label=\"Rerun Tests\" />\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\thref={pathname + testFile}\n\t\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\t\trel=\"noreferrer\"\n\t\t\t\t\t\t\t\tclassName=\"border-r p-3\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Icon name=\"ExternalLink\" aria-label=\"Open in New Window\" />\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</AccordionComponent>\n\t\t\t</Accordion.Root>\n\t\t</>\n\t)\n}\n","import { getAppByName } from '@epic-web/workshop-utils/apps.server'\nimport { userHasAccessToWorkshop } from '@epic-web/workshop-utils/epic-api.server'\nimport {\n\tclearTestProcessEntry,\n\tgetTestProcessEntry,\n\tisTestRunning,\n\trunAppTests,\n} from '@epic-web/workshop-utils/process-manager.server'\nimport { useEffect, useReducer, useRef } from 'react'\nimport {\n\tdata,\n\ttype ActionFunctionArgs,\n\ttype LoaderFunctionArgs,\n\tuseFetcher,\n} from 'react-router'\nimport { useEventSource } from 'remix-utils/sse/react'\nimport { eventStream } from 'remix-utils/sse/server'\nimport { z } from 'zod'\nimport { AnimatedBars, Icon } from '#app/components/icons.tsx'\nimport { SimpleTooltip } from '#app/components/ui/tooltip.tsx'\nimport { stripCursorMovements, useAnsiToHtml } from '#app/utils/ansi-text.js'\nimport { ensureUndeployed } from '#app/utils/misc.tsx'\nimport { dataWithPE, usePERedirectInput } from '#app/utils/pe.js'\nimport { createToastHeaders } from '#app/utils/toast.server.js'\n\nconst testActionSchema = z.union([\n\tz.object({\n\t\tintent: z.literal('run'),\n\t\tname: z.string(),\n\t}),\n\tz.object({\n\t\tintent: z.literal('stop'),\n\t\tname: z.string(),\n\t}),\n\tz.object({\n\t\tintent: z.literal('clear'),\n\t\tname: z.string(),\n\t}),\n])\n\nconst testEventSchema = z.union([\n\tz.object({\n\t\ttype: z.literal('init'),\n\t\texitCode: z.number().nullable().optional(),\n\t\tisRunning: z.boolean(),\n\t\toutput: z.array(\n\t\t\tz.object({\n\t\t\t\ttype: z.union([z.literal('stdout'), z.literal('stderr')]),\n\t\t\t\tcontent: z.string(),\n\t\t\t\ttimestamp: z.number(),\n\t\t\t}),\n\t\t),\n\t}),\n\tz.object({\n\t\ttype: z.union([z.literal('stdout'), z.literal('stderr')]),\n\t\tdata: z.string(),\n\t\ttimestamp: z.number(),\n\t}),\n\tz.object({\n\t\ttype: z.literal('exit'),\n\t\tisRunning: z.literal(false),\n\t\tcode: z.number().nullable(),\n\t}),\n])\nconst testEventQueueSchema = z.array(testEventSchema)\n\ntype TestEvent = z.infer<typeof testEventSchema>\ntype TestEventQueue = z.infer<typeof testEventQueueSchema>\n\nexport async function loader({ request }: LoaderFunctionArgs) {\n\tensureUndeployed()\n\tconst url = new URL(request.url)\n\tconst name = url.searchParams.get('name')\n\tif (!name) {\n\t\treturn data({ error: 'Missing name' }, { status: 400 })\n\t}\n\tconst app = await getAppByName(name)\n\tif (!app) {\n\t\treturn data({ error: 'App not found' }, { status: 404 })\n\t}\n\tconst processEntry = getTestProcessEntry(app)\n\tif (!processEntry) {\n\t\treturn data({ error: 'App is not running tests' }, { status: 404 })\n\t}\n\treturn eventStream(request.signal, function setup(send) {\n\t\t// have to batch because the client may miss events if we send too many\n\t\t// too rapidly\n\t\tlet queue: TestEventQueue = []\n\t\tfunction sendEvent(event: TestEvent) {\n\t\t\tqueue.push(event)\n\t\t}\n\t\tconst interval = setInterval(() => {\n\t\t\tif (queue.length) {\n\t\t\t\tsend({ data: JSON.stringify(queue) })\n\t\t\t\tqueue = []\n\t\t\t}\n\t\t}, 10)\n\n\t\tconst isRunning = isTestRunning(app)\n\n\t\tsendEvent({\n\t\t\ttype: 'init',\n\t\t\texitCode: processEntry.exitCode,\n\t\t\tisRunning,\n\t\t\toutput: processEntry.output.map((line) => ({\n\t\t\t\ttype: line.type,\n\t\t\t\tcontent: line.content,\n\t\t\t\ttimestamp: line.timestamp,\n\t\t\t})),\n\t\t})\n\n\t\tconst testProcess = processEntry.process\n\t\tif (!testProcess) {\n\t\t\treturn () => {}\n\t\t}\n\n\t\tfunction handleStdOutData(data: Buffer) {\n\t\t\tsendEvent({\n\t\t\t\ttype: 'stdout',\n\t\t\t\tdata: data.toString('utf-8'),\n\t\t\t\ttimestamp: Date.now(),\n\t\t\t})\n\t\t}\n\t\tfunction handleStdErrData(data: Buffer) {\n\t\t\tsendEvent({\n\t\t\t\ttype: 'stderr',\n\t\t\t\tdata: data.toString('utf-8'),\n\t\t\t\ttimestamp: Date.now(),\n\t\t\t})\n\t\t}\n\t\tfunction handleExit(code: number) {\n\t\t\ttestProcess?.stdout?.off('data', handleStdOutData)\n\t\t\ttestProcess?.stderr?.off('data', handleStdErrData)\n\t\t\ttestProcess?.off('exit', handleExit)\n\t\t\tsendEvent({ type: 'exit', isRunning: false, code })\n\t\t}\n\t\ttestProcess.stdout?.on('data', handleStdOutData)\n\t\ttestProcess.stderr?.on('data', handleStdErrData)\n\t\ttestProcess.on('exit', handleExit)\n\t\treturn function cleanup() {\n\t\t\ttestProcess.stdout?.off('data', handleStdOutData)\n\t\t\ttestProcess.stderr?.off('data', handleStdErrData)\n\t\t\ttestProcess.off('exit', handleExit)\n\t\t\tclearInterval(interval)\n\t\t}\n\t})\n}\n\nexport async function action({ request }: ActionFunctionArgs) {\n\tensureUndeployed()\n\tconst formData = await request.formData()\n\tconst userHasAccess = await userHasAccessToWorkshop({\n\t\trequest,\n\t})\n\tif (!userHasAccess) {\n\t\treturn dataWithPE(\n\t\t\tformData,\n\t\t\t{\n\t\t\t\tsuccess: false,\n\t\t\t\terror:\n\t\t\t\t\t'You do not have access to this workshop. Login or register for the workshop to be able to run the tests.',\n\t\t\t},\n\t\t\t{\n\t\t\t\tstatus: 403,\n\t\t\t\theaders: await createToastHeaders({\n\t\t\t\t\ttitle: 'Access denied',\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t'You do not have access to this workshop. Login or register for the workshop to be able to run the tests.',\n\t\t\t\t}),\n\t\t\t},\n\t\t)\n\t}\n\tconst result = testActionSchema.safeParse({\n\t\tintent: formData.get('intent'),\n\t\tname: formData.get('name'),\n\t})\n\tif (!result.success) {\n\t\treturn dataWithPE(\n\t\t\tformData,\n\t\t\t{ success: false, error: result.error.flatten() },\n\t\t\t{ status: 400 },\n\t\t)\n\t}\n\tconst app = await getAppByName(result.data.name)\n\tif (!app) {\n\t\treturn dataWithPE(\n\t\t\tformData,\n\t\t\t{ success: false, error: 'App not found' },\n\t\t\t{ status: 404 },\n\t\t)\n\t}\n\tswitch (result.data.intent) {\n\t\tcase 'run': {\n\t\t\tvoid runAppTests(app)\n\t\t\treturn dataWithPE(formData, { success: true })\n\t\t}\n\t\tcase 'stop': {\n\t\t\tconst processEntry = getTestProcessEntry(app)\n\t\t\tif (processEntry) {\n\t\t\t\tprocessEntry.process?.kill()\n\t\t\t}\n\t\t\treturn dataWithPE(formData, { success: true })\n\t\t}\n\t\tcase 'clear': {\n\t\t\tclearTestProcessEntry(app)\n\t\t\treturn dataWithPE(formData, { success: true })\n\t\t}\n\t}\n}\n\nfunction simpleReducer<State>(prev: State, getNext: (prev: State) => State) {\n\treturn getNext(prev)\n}\n\nexport function TestOutput({ name }: { name: string }) {\n\ttype State = {\n\t\t/** version is used to trigger an unsubscribe and resubscribe to the event source */\n\t\tversion: number\n\t\tisRunning: boolean\n\t\texitCode: number | null | undefined\n\t\tlines: Array<{\n\t\t\ttype: 'stdout' | 'stderr'\n\t\t\tcontent: string\n\t\t\ttimestamp: number\n\t\t}>\n\t}\n\tconst [state, dispatch] = useReducer(simpleReducer<State>, {\n\t\tversion: 0,\n\t\tisRunning: false,\n\t\texitCode: undefined,\n\t\tlines: [],\n\t})\n\tconst ansi = useAnsiToHtml()\n\tconst { version, isRunning, exitCode, lines } = state\n\tconst lastMessage = useEventSource(\n\t\t`/test?${new URLSearchParams({ name })}&v=${version}`,\n\t)\n\tuseEffect(() => {\n\t\tif (!lastMessage) return\n\n\t\tconst parsed = JSON.parse(lastMessage)\n\t\tconst result = testEventQueueSchema.safeParse(parsed)\n\t\tif (!result.success) {\n\t\t\tconsole.error(result.error.flatten())\n\t\t\treturn\n\t\t}\n\t\tfor (const event of result.data) {\n\t\t\tswitch (event.type) {\n\t\t\t\tcase 'exit': {\n\t\t\t\t\tconst { isRunning, code: exitCode } = event\n\t\t\t\t\tdispatch((prev) => ({ ...prev, isRunning, exitCode }))\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tcase 'init': {\n\t\t\t\t\tconst { output, exitCode, isRunning } = event\n\t\t\t\t\tdispatch((prev) => ({ ...prev, lines: output, exitCode, isRunning }))\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tcase 'stderr':\n\t\t\t\tcase 'stdout': {\n\t\t\t\t\tconst { type, data: content, timestamp } = event\n\t\t\t\t\tdispatch((prev) => ({\n\t\t\t\t\t\t...prev,\n\t\t\t\t\t\tlines: [...prev.lines, { type, content, timestamp }].sort(\n\t\t\t\t\t\t\t(a, b) => a.timestamp - b.timestamp,\n\t\t\t\t\t\t),\n\t\t\t\t\t\tisRunning: true,\n\t\t\t\t\t}))\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}, [lastMessage])\n\n\treturn (\n\t\t<div className=\"relative flex h-full w-full flex-col overflow-y-auto\">\n\t\t\t<div className=\"flex h-12 w-full flex-shrink-0 items-center justify-between border-b\">\n\t\t\t\t<div className=\"flex h-full items-center\">\n\t\t\t\t\t{!isRunning && (\n\t\t\t\t\t\t<TestRunner\n\t\t\t\t\t\t\tname={name}\n\t\t\t\t\t\t\tonRun={() => {\n\t\t\t\t\t\t\t\tdispatch((prev) => ({\n\t\t\t\t\t\t\t\t\t...prev,\n\t\t\t\t\t\t\t\t\texitCode: undefined,\n\t\t\t\t\t\t\t\t\tlines: [],\n\t\t\t\t\t\t\t\t\tversion: prev.version + 1,\n\t\t\t\t\t\t\t\t}))\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t\t{isRunning ? (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<div className=\"flex h-full flex-grow items-center justify-center border-r px-3.5\">\n\t\t\t\t\t\t\t\t<AnimatedBars role=\"status\" aria-label=\"Running Tests\" />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<StopTest name={name} />\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{!isRunning && exitCode !== undefined && (\n\t\t\t\t\t<p className=\"pr-3.5 leading-none\">\n\t\t\t\t\t\t{exitCode === 0\n\t\t\t\t\t\t\t? `Tests passed`\n\t\t\t\t\t\t\t: `Test failed (exit code ${String(exitCode)})`}\n\t\t\t\t\t</p>\n\t\t\t\t)}\n\t\t\t\t{!isRunning && exitCode !== undefined && (\n\t\t\t\t\t<ClearTest\n\t\t\t\t\t\tname={name}\n\t\t\t\t\t\tonClear={() => {\n\t\t\t\t\t\t\tdispatch((prev) => ({\n\t\t\t\t\t\t\t\t...prev,\n\t\t\t\t\t\t\t\texitCode: undefined,\n\t\t\t\t\t\t\t\tlines: [],\n\t\t\t\t\t\t\t}))\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t\t<div className=\"flex h-full flex-col gap-5 p-5\">\n\t\t\t\t<p className=\"font-mono text-sm font-medium uppercase\">Test Output</p>\n\t\t\t\t<pre className=\"shadow-on-scrollbox flex-1 overflow-y-scroll scrollbar-thin scrollbar-thumb-scrollbar\">\n\t\t\t\t\t{lines.map((line) => (\n\t\t\t\t\t\t<code\n\t\t\t\t\t\t\tkey={line.timestamp}\n\t\t\t\t\t\t\tdata-type={line.type}\n\t\t\t\t\t\t\tdangerouslySetInnerHTML={{\n\t\t\t\t\t\t\t\t__html: ansi.toHtml(stripCursorMovements(line.content)),\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t))}\n\t\t\t\t</pre>\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n\nexport function TestRunner({\n\tname,\n\tonRun,\n}: {\n\tname: string\n\tonRun?: () => void\n}) {\n\tconst fetcher = useFetcher<typeof action>()\n\tconst peRedirectInput = usePERedirectInput()\n\tconst latestOnRun = useRef(onRun)\n\tuseEffect(() => {\n\t\tlatestOnRun.current = onRun\n\t}, [onRun])\n\tuseEffect(() => {\n\t\tif (fetcher.data?.success) {\n\t\t\tlatestOnRun.current?.()\n\t\t}\n\t}, [fetcher.data])\n\treturn (\n\t\t<fetcher.Form method=\"POST\" action=\"/test\" className=\"h-full\">\n\t\t\t{peRedirectInput}\n\t\t\t<input type=\"hidden\" name=\"name\" value={name} />\n\t\t\t<SimpleTooltip\n\t\t\t\tcontent={fetcher.state === 'idle' ? 'Run Tests' : 'Running Tests...'}\n\t\t\t>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\tname=\"intent\"\n\t\t\t\t\tvalue=\"run\"\n\t\t\t\t\tclassName=\"flex h-full flex-grow items-center justify-center border-r px-3.5\"\n\t\t\t\t>\n\t\t\t\t\t{fetcher.state === 'idle' ? (\n\t\t\t\t\t\t<Icon name=\"TriangleSmall\" />\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<AnimatedBars role=\"status\" />\n\t\t\t\t\t)}\n\t\t\t\t</button>\n\t\t\t</SimpleTooltip>\n\t\t</fetcher.Form>\n\t)\n}\n\nexport function ClearTest({\n\tname,\n\tonClear,\n}: {\n\tname: string\n\tonClear?: () => void\n}) {\n\tconst fetcher = useFetcher<typeof action>()\n\tconst peRedirectInput = usePERedirectInput()\n\tconst latestOnClear = useRef(onClear)\n\tuseEffect(() => {\n\t\tlatestOnClear.current = onClear\n\t}, [onClear])\n\tuseEffect(() => {\n\t\tif (fetcher.data?.success) {\n\t\t\tlatestOnClear.current?.()\n\t\t}\n\t}, [fetcher.data])\n\treturn (\n\t\t<fetcher.Form method=\"POST\" action=\"/test\" className=\"h-full\">\n\t\t\t{peRedirectInput}\n\t\t\t<input type=\"hidden\" name=\"name\" value={name} />\n\t\t\t<SimpleTooltip\n\t\t\t\tcontent={fetcher.state === 'idle' ? 'Clear Tests' : 'Clearing Tests...'}\n\t\t\t>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\tname=\"intent\"\n\t\t\t\t\tvalue=\"clear\"\n\t\t\t\t\tclassName=\"flex h-full flex-grow items-center justify-center border-l px-3.5\"\n\t\t\t\t>\n\t\t\t\t\t{fetcher.state === 'idle' ? (\n\t\t\t\t\t\t<Icon name=\"Clear\" />\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<Icon name=\"Clear\" className=\"animate-pulse\" role=\"status\" />\n\t\t\t\t\t)}\n\t\t\t\t</button>\n\t\t\t</SimpleTooltip>\n\t\t</fetcher.Form>\n\t)\n}\n\nexport function StopTest({\n\tname,\n\tonStop,\n}: {\n\tname: string\n\tonStop?: () => void\n}) {\n\tconst fetcher = useFetcher<typeof action>()\n\tconst peRedirectInput = usePERedirectInput()\n\tconst latestOnStop = useRef(onStop)\n\tuseEffect(() => {\n\t\tlatestOnStop.current = onStop\n\t}, [onStop])\n\tuseEffect(() => {\n\t\tif (fetcher.data?.success) {\n\t\t\tlatestOnStop.current?.()\n\t\t}\n\t}, [fetcher.data])\n\treturn (\n\t\t<fetcher.Form method=\"POST\" action=\"/test\" className=\"h-full\">\n\t\t\t{peRedirectInput}\n\t\t\t<input type=\"hidden\" name=\"name\" value={name} />\n\t\t\t<SimpleTooltip\n\t\t\t\tcontent={fetcher.state === 'idle' ? 'Stop Tests' : 'Stopping Tests...'}\n\t\t\t>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\tname=\"intent\"\n\t\t\t\t\tvalue=\"stop\"\n\t\t\t\t\tclassName=\"flex h-full flex-grow items-center justify-center border-r px-3.5\"\n\t\t\t\t>\n\t\t\t\t\t{fetcher.state === 'idle' ? (\n\t\t\t\t\t\t<Icon name=\"Stop\" />\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<Icon name=\"Stop\" className=\"animate-pulse\" role=\"status\" />\n\t\t\t\t\t)}\n\t\t\t\t</button>\n\t\t\t</SimpleTooltip>\n\t\t</fetcher.Form>\n\t)\n}\n","import { type PlaygroundApp } from '@epic-web/workshop-utils/apps.server'\nimport { useState } from 'react'\nimport { DeferredEpicVideo } from '#app/components/epic-video.js'\nimport { Icon } from '#app/components/icons'\nimport { InBrowserTestRunner } from '#app/components/in-browser-test-runner'\nimport { useUserHasAccess } from '#app/components/user.js'\nimport { TestOutput } from '#app/routes/test'\nimport { PlaygroundWindow } from './playground-window'\n\nexport function Tests({\n\tappInfo: playgroundAppInfo,\n\tproblemAppName,\n\tallApps,\n\tisUpToDate,\n}: {\n\tappInfo: Pick<PlaygroundApp, 'appName' | 'name' | 'test'> | 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<TestUI playgroundAppInfo={playgroundAppInfo} />\n\t\t</PlaygroundWindow>\n\t)\n}\n\nexport function TestUI({\n\tplaygroundAppInfo,\n}: {\n\tplaygroundAppInfo: Pick<PlaygroundApp, 'name' | 'test'> | null\n}) {\n\tconst [inBrowserTestKey, setInBrowserTestKey] = useState(0)\n\tconst userHasAccess = useUserHasAccess()\n\n\tif (!userHasAccess) {\n\t\treturn (\n\t\t\t<div className=\"w-full p-12\">\n\t\t\t\t<div className=\"flex w-full flex-col gap-4 text-center\">\n\t\t\t\t\t<p className=\"text-2xl font-bold\">Access Denied</p>\n\t\t\t\t\t<p className=\"text-lg\">\n\t\t\t\t\t\tYou must login or register for the workshop to view and run the\n\t\t\t\t\t\ttests.\n\t\t\t\t\t</p>\n\t\t\t\t</div>\n\t\t\t\t<div className=\"h-16\" />\n\t\t\t\t<p className=\"pb-4\">\n\t\t\t\t\tCheck out this video to see how the test tab works.\n\t\t\t\t</p>\n\t\t\t\t<DeferredEpicVideo url=\"https://www.epicweb.dev/tips/epic-workshop-test-tab-demo\" />\n\t\t\t</div>\n\t\t)\n\t}\n\n\tif (!playgroundAppInfo) {\n\t\treturn (\n\t\t\t<div className=\"flex h-full items-center justify-center text-lg\">\n\t\t\t\t<p>No tests here 😢 Sorry.</p>\n\t\t\t</div>\n\t\t)\n\t}\n\n\tif (playgroundAppInfo.test.type === 'script') {\n\t\treturn <TestOutput name={playgroundAppInfo.name} />\n\t}\n\n\tif (playgroundAppInfo.test.type === 'browser') {\n\t\tconst { pathname } = playgroundAppInfo.test\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName=\"flex h-full w-full flex-grow flex-col overflow-y-auto\"\n\t\t\t\tkey={inBrowserTestKey}\n\t\t\t>\n\t\t\t\t{playgroundAppInfo.test.testFiles.map((testFile) => (\n\t\t\t\t\t<div key={testFile}>\n\t\t\t\t\t\t<InBrowserTestRunner pathname={pathname} testFile={testFile} />\n\t\t\t\t\t</div>\n\t\t\t\t))}\n\t\t\t\t<div className=\"px-3 py-[21px]\">\n\t\t\t\t\t<button\n\t\t\t\t\t\tonClick={() => setInBrowserTestKey((c) => c + 1)}\n\t\t\t\t\t\tclassName=\"flex items-center gap-2 font-mono text-sm uppercase leading-none\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<Icon name=\"Refresh\" aria-hidden /> Rerun All Tests\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t)\n\t}\n\n\treturn (\n\t\t<div className=\"flex h-full items-center justify-center text-lg\">\n\t\t\t<p>No tests here 😢 Sorry.</p>\n\t\t</div>\n\t)\n}\n"],"names":["PlaygroundWindow","playgroundAppName","problemAppName","isUpToDate","allApps","children","isCorrectApp","playgroundLinkedUI","jsx","Icon","setPlaygroundTooltipText","jsxs","SetPlayground","SimpleTooltip","PlaygroundChooser","__importDefault","this","mod","decode_codepoint","decode_json_1","require$$0","fromCodePoint","codePoint","output","decodeCodePoint","decode","entities_json_1","legacy_json_1","require$$1","xml_json_1","require$$2","decode_codepoint_1","strictEntityRe","getStrictDecoder","map","replace","getReplacer","str","sorter","a","b","legacy","keys","i","j","re","replacer","secondChar","encode","inverseXML","getInverseObj","xmlReplacer","getInverseReplacer","getASCIIEncoder","inverseHTML","htmlReplacer","getInverse","obj","inverse","name","single","multiple","_i","_a","k","start","end","count","reNonASCII","getCodePoint","c","singleCharReplacer","data","reEscapeChars","escape","escapeUTF8","exports","decode_1","encode_1","level","decodeStrict","encode_2","decode_2","_classCallCheck","instance","Constructor","_defineProperties","target","props","descriptor","_createClass","protoProps","staticProps","_createForOfIteratorHelper","o","allowArrayLike","it","_unsupportedIterableToArray","F","_e","normalCompletion","didErr","err","step","_e2","minLen","_arrayLikeToArray","n","arr","len","arr2","entities","defaults","getDefaultColors","colors","range","red","green","blue","setStyleColor","gray","l","toHexString","r","g","toColorHexString","num","ref","results","_iterator","_step","generateOutput","stack","token","options","result","pushText","handleDisplay","pushForegroundColor","pushBackgroundColor","handleRgb","operation","color","rgb","value","pushStyle","code","codeMap","resetStyles","pushTag","closeTag","stackClone","tag","low","high","notCategory","category","e","categoryForCode","text","style","last","tokenize","callback","ansiMatch","ansiHandler","remove","removeXterm256Foreground","m","g1","removeXterm256Background","newline","ansiMess","_iterator2","_step2","realText","tokens","process","handler","results1","_text","length","outer","updateStickyStack","stickyStack","Filter","input","_this","buf","element","ansi_to_html","useAnsiToHtml","theme","useTheme","useMemo","AnsiToHTML","stripCursorMovements","testRunnerStatusDataSchema","z.intersection","z.object","z.literal","z.number","z.union","z.string","testRunnerTestStepDataSchema","testRunnerDataSchema","InBrowserTestRunner","pathname","testFile","ansi","iframeRef","useRef","message","setMessage","useState","testSteps","setTestSteps","useEffect","handleMessage","messageEvent","steps","statusEmoji","AnimatedBars","sortedTestSteps","testStepStatusEmojis","Fragment","Accordion.Root","AccordionComponent","testStep","index","testEventSchema","z","type","exitCode","nullable","optional","isRunning","content","timestamp","testEventQueueSchema","simpleReducer","prev","getNext","TestOutput","state","dispatch","useReducer","version","lines","lastMessage","useEventSource","URLSearchParams","parsed","JSON","parse","safeParse","success","console","error","flatten","event","sort","className","TestRunner","onRun","role","StopTest","String","ClearTest","onClear","line","dangerouslySetInnerHTML","__html","toHtml","fetcher","useFetcher","peRedirectInput","usePERedirectInput","latestOnRun","current","Form","method","action","latestOnClear","onStop","latestOnStop","Tests","playgroundAppInfo","TestUI","inBrowserTestKey","setInBrowserTestKey","useUserHasAccess","DeferredEpicVideo"],"mappings":"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","x_google_ignoreList":[1,2,3,4,5]}
1
+ {"version":3,"file":"tests-CZAI0vqW.js","sources":["../../../app/routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/__shared/playground-window.tsx","../../../../../node_modules/entities/lib/decode_codepoint.js","../../../../../node_modules/entities/lib/decode.js","../../../../../node_modules/entities/lib/encode.js","../../../../../node_modules/entities/lib/index.js","../../../../../node_modules/ansi-to-html/lib/ansi_to_html.js","../../../app/utils/ansi-text.ts","../../../app/components/in-browser-test-runner.tsx","../../../app/routes/test.tsx","../../../app/routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/__shared/tests.tsx"],"sourcesContent":["import { Icon } from '#app/components/icons'\nimport { SimpleTooltip } from '#app/components/ui/tooltip.js'\nimport { PlaygroundChooser, SetPlayground } from '#app/routes/set-playground'\n\nexport function PlaygroundWindow({\n\tplaygroundAppName,\n\tproblemAppName,\n\tisUpToDate,\n\tallApps,\n\tchildren,\n}: {\n\tplaygroundAppName?: string\n\tproblemAppName?: string\n\tisUpToDate: boolean\n\tallApps: Array<{ name: string; displayName: string }>\n\tchildren: React.ReactNode\n}) {\n\tconst isCorrectApp = playgroundAppName === problemAppName\n\tconst playgroundLinkedUI =\n\t\tisCorrectApp && isUpToDate ? (\n\t\t\t<Icon size=\"xl\" name=\"Linked\" />\n\t\t) : (\n\t\t\t<Icon\n\t\t\t\tsize=\"xl\"\n\t\t\t\tname=\"Unlinked\"\n\t\t\t\tclassName=\"animate-pulse text-foreground-destructive\"\n\t\t\t/>\n\t\t)\n\tlet setPlaygroundTooltipText = 'Click to reset Playground.'\n\tif (!isUpToDate) {\n\t\tsetPlaygroundTooltipText =\n\t\t\t'Playground is out of date. Click to reset Playground.'\n\t}\n\tif (!isCorrectApp) {\n\t\tsetPlaygroundTooltipText =\n\t\t\t'Playground is not set to the right app. Click to set Playground.'\n\t}\n\treturn (\n\t\t<div className=\"flex h-full w-full flex-col justify-between\">\n\t\t\t<div className=\"flex h-14 flex-shrink-0 items-center justify-start gap-2 border-b px-3\">\n\t\t\t\t<div className=\"display-alt-up\">\n\t\t\t\t\t{problemAppName ? (\n\t\t\t\t\t\t<SetPlayground\n\t\t\t\t\t\t\tappName={problemAppName}\n\t\t\t\t\t\t\ttooltipText={setPlaygroundTooltipText}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{playgroundLinkedUI}\n\t\t\t\t\t\t</SetPlayground>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<SimpleTooltip content=\"No problem app available for this step\">\n\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t<Icon name=\"Question\" />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</SimpleTooltip>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t\t<div className=\"display-alt-down\">\n\t\t\t\t\t{playgroundAppName ? (\n\t\t\t\t\t\t<SetPlayground\n\t\t\t\t\t\t\tappName={playgroundAppName}\n\t\t\t\t\t\t\treset\n\t\t\t\t\t\t\ttooltipText=\"Reset Playground\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div className=\"flex h-7 w-7 items-center justify-center\">\n\t\t\t\t\t\t\t\t<Icon name=\"Refresh\" />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</SetPlayground>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<div className=\"h-7 w-7\" />\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t\t<PlaygroundChooser\n\t\t\t\t\tallApps={allApps}\n\t\t\t\t\tplaygroundAppName={playgroundAppName}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<div className=\"flex h-full flex-1 flex-grow items-center justify-center\">\n\t\t\t\t{children}\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar decode_json_1 = __importDefault(require(\"./maps/decode.json\"));\n// Adapted from https://github.com/mathiasbynens/he/blob/master/src/he.js#L94-L119\nvar fromCodePoint = \n// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\nString.fromCodePoint ||\n function (codePoint) {\n var output = \"\";\n if (codePoint > 0xffff) {\n codePoint -= 0x10000;\n output += String.fromCharCode(((codePoint >>> 10) & 0x3ff) | 0xd800);\n codePoint = 0xdc00 | (codePoint & 0x3ff);\n }\n output += String.fromCharCode(codePoint);\n return output;\n };\nfunction decodeCodePoint(codePoint) {\n if ((codePoint >= 0xd800 && codePoint <= 0xdfff) || codePoint > 0x10ffff) {\n return \"\\uFFFD\";\n }\n if (codePoint in decode_json_1.default) {\n codePoint = decode_json_1.default[codePoint];\n }\n return fromCodePoint(codePoint);\n}\nexports.default = decodeCodePoint;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.decodeHTML = exports.decodeHTMLStrict = exports.decodeXML = void 0;\nvar entities_json_1 = __importDefault(require(\"./maps/entities.json\"));\nvar legacy_json_1 = __importDefault(require(\"./maps/legacy.json\"));\nvar xml_json_1 = __importDefault(require(\"./maps/xml.json\"));\nvar decode_codepoint_1 = __importDefault(require(\"./decode_codepoint\"));\nvar strictEntityRe = /&(?:[a-zA-Z0-9]+|#[xX][\\da-fA-F]+|#\\d+);/g;\nexports.decodeXML = getStrictDecoder(xml_json_1.default);\nexports.decodeHTMLStrict = getStrictDecoder(entities_json_1.default);\nfunction getStrictDecoder(map) {\n var replace = getReplacer(map);\n return function (str) { return String(str).replace(strictEntityRe, replace); };\n}\nvar sorter = function (a, b) { return (a < b ? 1 : -1); };\nexports.decodeHTML = (function () {\n var legacy = Object.keys(legacy_json_1.default).sort(sorter);\n var keys = Object.keys(entities_json_1.default).sort(sorter);\n for (var i = 0, j = 0; i < keys.length; i++) {\n if (legacy[j] === keys[i]) {\n keys[i] += \";?\";\n j++;\n }\n else {\n keys[i] += \";\";\n }\n }\n var re = new RegExp(\"&(?:\" + keys.join(\"|\") + \"|#[xX][\\\\da-fA-F]+;?|#\\\\d+;?)\", \"g\");\n var replace = getReplacer(entities_json_1.default);\n function replacer(str) {\n if (str.substr(-1) !== \";\")\n str += \";\";\n return replace(str);\n }\n // TODO consider creating a merged map\n return function (str) { return String(str).replace(re, replacer); };\n})();\nfunction getReplacer(map) {\n return function replace(str) {\n if (str.charAt(1) === \"#\") {\n var secondChar = str.charAt(2);\n if (secondChar === \"X\" || secondChar === \"x\") {\n return decode_codepoint_1.default(parseInt(str.substr(3), 16));\n }\n return decode_codepoint_1.default(parseInt(str.substr(2), 10));\n }\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n return map[str.slice(1, -1)] || str;\n };\n}\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.escapeUTF8 = exports.escape = exports.encodeNonAsciiHTML = exports.encodeHTML = exports.encodeXML = void 0;\nvar xml_json_1 = __importDefault(require(\"./maps/xml.json\"));\nvar inverseXML = getInverseObj(xml_json_1.default);\nvar xmlReplacer = getInverseReplacer(inverseXML);\n/**\n * Encodes all non-ASCII characters, as well as characters not valid in XML\n * documents using XML entities.\n *\n * If a character has no equivalent entity, a\n * numeric hexadecimal reference (eg. `&#xfc;`) will be used.\n */\nexports.encodeXML = getASCIIEncoder(inverseXML);\nvar entities_json_1 = __importDefault(require(\"./maps/entities.json\"));\nvar inverseHTML = getInverseObj(entities_json_1.default);\nvar htmlReplacer = getInverseReplacer(inverseHTML);\n/**\n * Encodes all entities and non-ASCII characters in the input.\n *\n * This includes characters that are valid ASCII characters in HTML documents.\n * For example `#` will be encoded as `&num;`. To get a more compact output,\n * consider using the `encodeNonAsciiHTML` function.\n *\n * If a character has no equivalent entity, a\n * numeric hexadecimal reference (eg. `&#xfc;`) will be used.\n */\nexports.encodeHTML = getInverse(inverseHTML, htmlReplacer);\n/**\n * Encodes all non-ASCII characters, as well as characters not valid in HTML\n * documents using HTML entities.\n *\n * If a character has no equivalent entity, a\n * numeric hexadecimal reference (eg. `&#xfc;`) will be used.\n */\nexports.encodeNonAsciiHTML = getASCIIEncoder(inverseHTML);\nfunction getInverseObj(obj) {\n return Object.keys(obj)\n .sort()\n .reduce(function (inverse, name) {\n inverse[obj[name]] = \"&\" + name + \";\";\n return inverse;\n }, {});\n}\nfunction getInverseReplacer(inverse) {\n var single = [];\n var multiple = [];\n for (var _i = 0, _a = Object.keys(inverse); _i < _a.length; _i++) {\n var k = _a[_i];\n if (k.length === 1) {\n // Add value to single array\n single.push(\"\\\\\" + k);\n }\n else {\n // Add value to multiple array\n multiple.push(k);\n }\n }\n // Add ranges to single characters.\n single.sort();\n for (var start = 0; start < single.length - 1; start++) {\n // Find the end of a run of characters\n var end = start;\n while (end < single.length - 1 &&\n single[end].charCodeAt(1) + 1 === single[end + 1].charCodeAt(1)) {\n end += 1;\n }\n var count = 1 + end - start;\n // We want to replace at least three characters\n if (count < 3)\n continue;\n single.splice(start, count, single[start] + \"-\" + single[end]);\n }\n multiple.unshift(\"[\" + single.join(\"\") + \"]\");\n return new RegExp(multiple.join(\"|\"), \"g\");\n}\n// /[^\\0-\\x7F]/gu\nvar reNonASCII = /(?:[\\x80-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/g;\nvar getCodePoint = \n// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\nString.prototype.codePointAt != null\n ? // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n function (str) { return str.codePointAt(0); }\n : // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n function (c) {\n return (c.charCodeAt(0) - 0xd800) * 0x400 +\n c.charCodeAt(1) -\n 0xdc00 +\n 0x10000;\n };\nfunction singleCharReplacer(c) {\n return \"&#x\" + (c.length > 1 ? getCodePoint(c) : c.charCodeAt(0))\n .toString(16)\n .toUpperCase() + \";\";\n}\nfunction getInverse(inverse, re) {\n return function (data) {\n return data\n .replace(re, function (name) { return inverse[name]; })\n .replace(reNonASCII, singleCharReplacer);\n };\n}\nvar reEscapeChars = new RegExp(xmlReplacer.source + \"|\" + reNonASCII.source, \"g\");\n/**\n * Encodes all non-ASCII characters, as well as characters not valid in XML\n * documents using numeric hexadecimal reference (eg. `&#xfc;`).\n *\n * Have a look at `escapeUTF8` if you want a more concise output at the expense\n * of reduced transportability.\n *\n * @param data String to escape.\n */\nfunction escape(data) {\n return data.replace(reEscapeChars, singleCharReplacer);\n}\nexports.escape = escape;\n/**\n * Encodes all characters not valid in XML documents using numeric hexadecimal\n * reference (eg. `&#xfc;`).\n *\n * Note that the output will be character-set dependent.\n *\n * @param data String to escape.\n */\nfunction escapeUTF8(data) {\n return data.replace(xmlReplacer, singleCharReplacer);\n}\nexports.escapeUTF8 = escapeUTF8;\nfunction getASCIIEncoder(obj) {\n return function (data) {\n return data.replace(reEscapeChars, function (c) { return obj[c] || singleCharReplacer(c); });\n };\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.decodeXMLStrict = exports.decodeHTML5Strict = exports.decodeHTML4Strict = exports.decodeHTML5 = exports.decodeHTML4 = exports.decodeHTMLStrict = exports.decodeHTML = exports.decodeXML = exports.encodeHTML5 = exports.encodeHTML4 = exports.escapeUTF8 = exports.escape = exports.encodeNonAsciiHTML = exports.encodeHTML = exports.encodeXML = exports.encode = exports.decodeStrict = exports.decode = void 0;\nvar decode_1 = require(\"./decode\");\nvar encode_1 = require(\"./encode\");\n/**\n * Decodes a string with entities.\n *\n * @param data String to decode.\n * @param level Optional level to decode at. 0 = XML, 1 = HTML. Default is 0.\n * @deprecated Use `decodeXML` or `decodeHTML` directly.\n */\nfunction decode(data, level) {\n return (!level || level <= 0 ? decode_1.decodeXML : decode_1.decodeHTML)(data);\n}\nexports.decode = decode;\n/**\n * Decodes a string with entities. Does not allow missing trailing semicolons for entities.\n *\n * @param data String to decode.\n * @param level Optional level to decode at. 0 = XML, 1 = HTML. Default is 0.\n * @deprecated Use `decodeHTMLStrict` or `decodeXML` directly.\n */\nfunction decodeStrict(data, level) {\n return (!level || level <= 0 ? decode_1.decodeXML : decode_1.decodeHTMLStrict)(data);\n}\nexports.decodeStrict = decodeStrict;\n/**\n * Encodes a string with entities.\n *\n * @param data String to encode.\n * @param level Optional level to encode at. 0 = XML, 1 = HTML. Default is 0.\n * @deprecated Use `encodeHTML`, `encodeXML` or `encodeNonAsciiHTML` directly.\n */\nfunction encode(data, level) {\n return (!level || level <= 0 ? encode_1.encodeXML : encode_1.encodeHTML)(data);\n}\nexports.encode = encode;\nvar encode_2 = require(\"./encode\");\nObject.defineProperty(exports, \"encodeXML\", { enumerable: true, get: function () { return encode_2.encodeXML; } });\nObject.defineProperty(exports, \"encodeHTML\", { enumerable: true, get: function () { return encode_2.encodeHTML; } });\nObject.defineProperty(exports, \"encodeNonAsciiHTML\", { enumerable: true, get: function () { return encode_2.encodeNonAsciiHTML; } });\nObject.defineProperty(exports, \"escape\", { enumerable: true, get: function () { return encode_2.escape; } });\nObject.defineProperty(exports, \"escapeUTF8\", { enumerable: true, get: function () { return encode_2.escapeUTF8; } });\n// Legacy aliases (deprecated)\nObject.defineProperty(exports, \"encodeHTML4\", { enumerable: true, get: function () { return encode_2.encodeHTML; } });\nObject.defineProperty(exports, \"encodeHTML5\", { enumerable: true, get: function () { return encode_2.encodeHTML; } });\nvar decode_2 = require(\"./decode\");\nObject.defineProperty(exports, \"decodeXML\", { enumerable: true, get: function () { return decode_2.decodeXML; } });\nObject.defineProperty(exports, \"decodeHTML\", { enumerable: true, get: function () { return decode_2.decodeHTML; } });\nObject.defineProperty(exports, \"decodeHTMLStrict\", { enumerable: true, get: function () { return decode_2.decodeHTMLStrict; } });\n// Legacy aliases (deprecated)\nObject.defineProperty(exports, \"decodeHTML4\", { enumerable: true, get: function () { return decode_2.decodeHTML; } });\nObject.defineProperty(exports, \"decodeHTML5\", { enumerable: true, get: function () { return decode_2.decodeHTML; } });\nObject.defineProperty(exports, \"decodeHTML4Strict\", { enumerable: true, get: function () { return decode_2.decodeHTMLStrict; } });\nObject.defineProperty(exports, \"decodeHTML5Strict\", { enumerable: true, get: function () { return decode_2.decodeHTMLStrict; } });\nObject.defineProperty(exports, \"decodeXMLStrict\", { enumerable: true, get: function () { return decode_2.decodeXML; } });\n","'use strict';\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nvar entities = require('entities');\n\nvar defaults = {\n fg: '#FFF',\n bg: '#000',\n newline: false,\n escapeXML: false,\n stream: false,\n colors: getDefaultColors()\n};\n\nfunction getDefaultColors() {\n var colors = {\n 0: '#000',\n 1: '#A00',\n 2: '#0A0',\n 3: '#A50',\n 4: '#00A',\n 5: '#A0A',\n 6: '#0AA',\n 7: '#AAA',\n 8: '#555',\n 9: '#F55',\n 10: '#5F5',\n 11: '#FF5',\n 12: '#55F',\n 13: '#F5F',\n 14: '#5FF',\n 15: '#FFF'\n };\n range(0, 5).forEach(function (red) {\n range(0, 5).forEach(function (green) {\n range(0, 5).forEach(function (blue) {\n return setStyleColor(red, green, blue, colors);\n });\n });\n });\n range(0, 23).forEach(function (gray) {\n var c = gray + 232;\n var l = toHexString(gray * 10 + 8);\n colors[c] = '#' + l + l + l;\n });\n return colors;\n}\n/**\n * @param {number} red\n * @param {number} green\n * @param {number} blue\n * @param {object} colors\n */\n\n\nfunction setStyleColor(red, green, blue, colors) {\n var c = 16 + red * 36 + green * 6 + blue;\n var r = red > 0 ? red * 40 + 55 : 0;\n var g = green > 0 ? green * 40 + 55 : 0;\n var b = blue > 0 ? blue * 40 + 55 : 0;\n colors[c] = toColorHexString([r, g, b]);\n}\n/**\n * Converts from a number like 15 to a hex string like 'F'\n * @param {number} num\n * @returns {string}\n */\n\n\nfunction toHexString(num) {\n var str = num.toString(16);\n\n while (str.length < 2) {\n str = '0' + str;\n }\n\n return str;\n}\n/**\n * Converts from an array of numbers like [15, 15, 15] to a hex string like 'FFF'\n * @param {[red, green, blue]} ref\n * @returns {string}\n */\n\n\nfunction toColorHexString(ref) {\n var results = [];\n\n var _iterator = _createForOfIteratorHelper(ref),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var r = _step.value;\n results.push(toHexString(r));\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n return '#' + results.join('');\n}\n/**\n * @param {Array} stack\n * @param {string} token\n * @param {*} data\n * @param {object} options\n */\n\n\nfunction generateOutput(stack, token, data, options) {\n var result;\n\n if (token === 'text') {\n result = pushText(data, options);\n } else if (token === 'display') {\n result = handleDisplay(stack, data, options);\n } else if (token === 'xterm256Foreground') {\n result = pushForegroundColor(stack, options.colors[data]);\n } else if (token === 'xterm256Background') {\n result = pushBackgroundColor(stack, options.colors[data]);\n } else if (token === 'rgb') {\n result = handleRgb(stack, data);\n }\n\n return result;\n}\n/**\n * @param {Array} stack\n * @param {string} data\n * @returns {*}\n */\n\n\nfunction handleRgb(stack, data) {\n data = data.substring(2).slice(0, -1);\n var operation = +data.substr(0, 2);\n var color = data.substring(5).split(';');\n var rgb = color.map(function (value) {\n return ('0' + Number(value).toString(16)).substr(-2);\n }).join('');\n return pushStyle(stack, (operation === 38 ? 'color:#' : 'background-color:#') + rgb);\n}\n/**\n * @param {Array} stack\n * @param {number} code\n * @param {object} options\n * @returns {*}\n */\n\n\nfunction handleDisplay(stack, code, options) {\n code = parseInt(code, 10);\n var codeMap = {\n '-1': function _() {\n return '<br/>';\n },\n 0: function _() {\n return stack.length && resetStyles(stack);\n },\n 1: function _() {\n return pushTag(stack, 'b');\n },\n 3: function _() {\n return pushTag(stack, 'i');\n },\n 4: function _() {\n return pushTag(stack, 'u');\n },\n 8: function _() {\n return pushStyle(stack, 'display:none');\n },\n 9: function _() {\n return pushTag(stack, 'strike');\n },\n 22: function _() {\n return pushStyle(stack, 'font-weight:normal;text-decoration:none;font-style:normal');\n },\n 23: function _() {\n return closeTag(stack, 'i');\n },\n 24: function _() {\n return closeTag(stack, 'u');\n },\n 39: function _() {\n return pushForegroundColor(stack, options.fg);\n },\n 49: function _() {\n return pushBackgroundColor(stack, options.bg);\n },\n 53: function _() {\n return pushStyle(stack, 'text-decoration:overline');\n }\n };\n var result;\n\n if (codeMap[code]) {\n result = codeMap[code]();\n } else if (4 < code && code < 7) {\n result = pushTag(stack, 'blink');\n } else if (29 < code && code < 38) {\n result = pushForegroundColor(stack, options.colors[code - 30]);\n } else if (39 < code && code < 48) {\n result = pushBackgroundColor(stack, options.colors[code - 40]);\n } else if (89 < code && code < 98) {\n result = pushForegroundColor(stack, options.colors[8 + (code - 90)]);\n } else if (99 < code && code < 108) {\n result = pushBackgroundColor(stack, options.colors[8 + (code - 100)]);\n }\n\n return result;\n}\n/**\n * Clear all the styles\n * @returns {string}\n */\n\n\nfunction resetStyles(stack) {\n var stackClone = stack.slice(0);\n stack.length = 0;\n return stackClone.reverse().map(function (tag) {\n return '</' + tag + '>';\n }).join('');\n}\n/**\n * Creates an array of numbers ranging from low to high\n * @param {number} low\n * @param {number} high\n * @returns {Array}\n * @example range(3, 7); // creates [3, 4, 5, 6, 7]\n */\n\n\nfunction range(low, high) {\n var results = [];\n\n for (var j = low; j <= high; j++) {\n results.push(j);\n }\n\n return results;\n}\n/**\n * Returns a new function that is true if value is NOT the same category\n * @param {string} category\n * @returns {function}\n */\n\n\nfunction notCategory(category) {\n return function (e) {\n return (category === null || e.category !== category) && category !== 'all';\n };\n}\n/**\n * Converts a code into an ansi token type\n * @param {number} code\n * @returns {string}\n */\n\n\nfunction categoryForCode(code) {\n code = parseInt(code, 10);\n var result = null;\n\n if (code === 0) {\n result = 'all';\n } else if (code === 1) {\n result = 'bold';\n } else if (2 < code && code < 5) {\n result = 'underline';\n } else if (4 < code && code < 7) {\n result = 'blink';\n } else if (code === 8) {\n result = 'hide';\n } else if (code === 9) {\n result = 'strike';\n } else if (29 < code && code < 38 || code === 39 || 89 < code && code < 98) {\n result = 'foreground-color';\n } else if (39 < code && code < 48 || code === 49 || 99 < code && code < 108) {\n result = 'background-color';\n }\n\n return result;\n}\n/**\n * @param {string} text\n * @param {object} options\n * @returns {string}\n */\n\n\nfunction pushText(text, options) {\n if (options.escapeXML) {\n return entities.encodeXML(text);\n }\n\n return text;\n}\n/**\n * @param {Array} stack\n * @param {string} tag\n * @param {string} [style='']\n * @returns {string}\n */\n\n\nfunction pushTag(stack, tag, style) {\n if (!style) {\n style = '';\n }\n\n stack.push(tag);\n return \"<\".concat(tag).concat(style ? \" style=\\\"\".concat(style, \"\\\"\") : '', \">\");\n}\n/**\n * @param {Array} stack\n * @param {string} style\n * @returns {string}\n */\n\n\nfunction pushStyle(stack, style) {\n return pushTag(stack, 'span', style);\n}\n\nfunction pushForegroundColor(stack, color) {\n return pushTag(stack, 'span', 'color:' + color);\n}\n\nfunction pushBackgroundColor(stack, color) {\n return pushTag(stack, 'span', 'background-color:' + color);\n}\n/**\n * @param {Array} stack\n * @param {string} style\n * @returns {string}\n */\n\n\nfunction closeTag(stack, style) {\n var last;\n\n if (stack.slice(-1)[0] === style) {\n last = stack.pop();\n }\n\n if (last) {\n return '</' + style + '>';\n }\n}\n/**\n * @param {string} text\n * @param {object} options\n * @param {function} callback\n * @returns {Array}\n */\n\n\nfunction tokenize(text, options, callback) {\n var ansiMatch = false;\n var ansiHandler = 3;\n\n function remove() {\n return '';\n }\n\n function removeXterm256Foreground(m, g1) {\n callback('xterm256Foreground', g1);\n return '';\n }\n\n function removeXterm256Background(m, g1) {\n callback('xterm256Background', g1);\n return '';\n }\n\n function newline(m) {\n if (options.newline) {\n callback('display', -1);\n } else {\n callback('text', m);\n }\n\n return '';\n }\n\n function ansiMess(m, g1) {\n ansiMatch = true;\n\n if (g1.trim().length === 0) {\n g1 = '0';\n }\n\n g1 = g1.trimRight(';').split(';');\n\n var _iterator2 = _createForOfIteratorHelper(g1),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var g = _step2.value;\n callback('display', g);\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n return '';\n }\n\n function realText(m) {\n callback('text', m);\n return '';\n }\n\n function rgb(m) {\n callback('rgb', m);\n return '';\n }\n /* eslint no-control-regex:0 */\n\n\n var tokens = [{\n pattern: /^\\x08+/,\n sub: remove\n }, {\n pattern: /^\\x1b\\[[012]?K/,\n sub: remove\n }, {\n pattern: /^\\x1b\\[\\(B/,\n sub: remove\n }, {\n pattern: /^\\x1b\\[[34]8;2;\\d+;\\d+;\\d+m/,\n sub: rgb\n }, {\n pattern: /^\\x1b\\[38;5;(\\d+)m/,\n sub: removeXterm256Foreground\n }, {\n pattern: /^\\x1b\\[48;5;(\\d+)m/,\n sub: removeXterm256Background\n }, {\n pattern: /^\\n/,\n sub: newline\n }, {\n pattern: /^\\r+\\n/,\n sub: newline\n }, {\n pattern: /^\\r/,\n sub: newline\n }, {\n pattern: /^\\x1b\\[((?:\\d{1,3};?)+|)m/,\n sub: ansiMess\n }, {\n // CSI n J\n // ED - Erase in Display Clears part of the screen.\n // If n is 0 (or missing), clear from cursor to end of screen.\n // If n is 1, clear from cursor to beginning of the screen.\n // If n is 2, clear entire screen (and moves cursor to upper left on DOS ANSI.SYS).\n // If n is 3, clear entire screen and delete all lines saved in the scrollback buffer\n // (this feature was added for xterm and is supported by other terminal applications).\n pattern: /^\\x1b\\[\\d?J/,\n sub: remove\n }, {\n // CSI n ; m f\n // HVP - Horizontal Vertical Position Same as CUP\n pattern: /^\\x1b\\[\\d{0,3};\\d{0,3}f/,\n sub: remove\n }, {\n // catch-all for CSI sequences?\n pattern: /^\\x1b\\[?[\\d;]{0,3}/,\n sub: remove\n }, {\n /**\n * extracts real text - not containing:\n * - `\\x1b' - ESC - escape (Ascii 27)\n * - '\\x08' - BS - backspace (Ascii 8)\n * - `\\n` - Newline - linefeed (LF) (ascii 10)\n * - `\\r` - Windows Carriage Return (CR)\n */\n pattern: /^(([^\\x1b\\x08\\r\\n])+)/,\n sub: realText\n }];\n\n function process(handler, i) {\n if (i > ansiHandler && ansiMatch) {\n return;\n }\n\n ansiMatch = false;\n text = text.replace(handler.pattern, handler.sub);\n }\n\n var results1 = [];\n var _text = text,\n length = _text.length;\n\n outer: while (length > 0) {\n for (var i = 0, o = 0, len = tokens.length; o < len; i = ++o) {\n var handler = tokens[i];\n process(handler, i);\n\n if (text.length !== length) {\n // We matched a token and removed it from the text. We need to\n // start matching *all* tokens against the new text.\n length = text.length;\n continue outer;\n }\n }\n\n if (text.length === length) {\n break;\n }\n\n results1.push(0);\n length = text.length;\n }\n\n return results1;\n}\n/**\n * If streaming, then the stack is \"sticky\"\n *\n * @param {Array} stickyStack\n * @param {string} token\n * @param {*} data\n * @returns {Array}\n */\n\n\nfunction updateStickyStack(stickyStack, token, data) {\n if (token !== 'text') {\n stickyStack = stickyStack.filter(notCategory(categoryForCode(data)));\n stickyStack.push({\n token: token,\n data: data,\n category: categoryForCode(data)\n });\n }\n\n return stickyStack;\n}\n\nvar Filter = /*#__PURE__*/function () {\n /**\n * @param {object} options\n * @param {string=} options.fg The default foreground color used when reset color codes are encountered.\n * @param {string=} options.bg The default background color used when reset color codes are encountered.\n * @param {boolean=} options.newline Convert newline characters to `<br/>`.\n * @param {boolean=} options.escapeXML Generate HTML/XML entities.\n * @param {boolean=} options.stream Save style state across invocations of `toHtml()`.\n * @param {(string[] | {[code: number]: string})=} options.colors Can override specific colors or the entire ANSI palette.\n */\n function Filter(options) {\n _classCallCheck(this, Filter);\n\n options = options || {};\n\n if (options.colors) {\n options.colors = Object.assign({}, defaults.colors, options.colors);\n }\n\n this.options = Object.assign({}, defaults, options);\n this.stack = [];\n this.stickyStack = [];\n }\n /**\n * @param {string | string[]} input\n * @returns {string}\n */\n\n\n _createClass(Filter, [{\n key: \"toHtml\",\n value: function toHtml(input) {\n var _this = this;\n\n input = typeof input === 'string' ? [input] : input;\n var stack = this.stack,\n options = this.options;\n var buf = [];\n this.stickyStack.forEach(function (element) {\n var output = generateOutput(stack, element.token, element.data, options);\n\n if (output) {\n buf.push(output);\n }\n });\n tokenize(input.join(''), options, function (token, data) {\n var output = generateOutput(stack, token, data, options);\n\n if (output) {\n buf.push(output);\n }\n\n if (options.stream) {\n _this.stickyStack = updateStickyStack(_this.stickyStack, token, data);\n }\n });\n\n if (stack.length) {\n buf.push(resetStyles(stack));\n }\n\n return buf.join('');\n }\n }]);\n\n return Filter;\n}();\n\nmodule.exports = Filter;\n//# sourceMappingURL=ansi_to_html.js.map","import AnsiToHTML from 'ansi-to-html'\nimport { useMemo } from 'react'\nimport { useTheme } from '#app/routes/theme/index.js'\n\nexport function useAnsiToHtml() {\n\tconst theme = useTheme()\n\tconst ansi = useMemo(\n\t\t() =>\n\t\t\tnew AnsiToHTML(\n\t\t\t\ttheme === 'dark'\n\t\t\t\t\t? { fg: '#d6deeb', bg: '#121318', escapeXML: true }\n\t\t\t\t\t: { fg: '#000000', bg: '#f3f3f3', escapeXML: true },\n\t\t\t),\n\t\t[theme],\n\t)\n\treturn ansi\n}\n\n// remove this when this is fixed: https://github.com/rburns/ansi-to-html/issues/112\nexport function stripCursorMovements(data: string) {\n\treturn data.replace(/\\u001b\\[\\d+A/g, '').replace(/\\u001b\\[\\d+K/g, '')\n}\n","import * as Accordion from '@radix-ui/react-accordion'\nimport { useEffect, useRef, useState } from 'react'\nimport { z } from 'zod'\nimport AccordionComponent from '#app/components/accordion.tsx'\nimport { useTheme } from '#app/routes/theme/index.tsx'\nimport { stripCursorMovements, useAnsiToHtml } from '#app/utils/ansi-text.js'\nimport { AnimatedBars, Icon } from './icons.tsx'\n\nconst testRunnerStatusDataSchema = z.intersection(\n\tz.object({\n\t\ttype: z.literal('epicshop:test-status-update'),\n\t\ttimestamp: z.number(),\n\t}),\n\tz.union([\n\t\tz.object({ status: z.literal('pending') }),\n\t\tz.object({ status: z.literal('pass') }),\n\t\tz.object({ status: z.literal('fail'), error: z.string() }),\n\t]),\n)\n\nconst testRunnerTestStepDataSchema = z.object({\n\ttype: z.literal('epicshop:test-step-update'),\n\tstatus: z.literal('pass'),\n\ttitle: z.string(),\n\ttimestamp: z.number(),\n})\n\nconst testRunnerDataSchema = z.union([\n\ttestRunnerTestStepDataSchema,\n\ttestRunnerStatusDataSchema,\n])\n\ntype TestRunnerStatusData = z.infer<typeof testRunnerStatusDataSchema>\ntype TestRunnerTestStepData = z.infer<typeof testRunnerTestStepDataSchema>\n\nexport function InBrowserTestRunner({\n\tpathname,\n\ttestFile,\n}: {\n\tpathname: string\n\ttestFile: string\n}) {\n\tconst theme = useTheme()\n\tconst ansi = useAnsiToHtml()\n\tconst iframeRef = useRef<HTMLIFrameElement>(null)\n\tconst [message, setMessage] = useState<TestRunnerStatusData | null>(null)\n\tconst [testSteps, setTestSteps] = useState<Array<TestRunnerTestStepData>>([])\n\n\tuseEffect(() => {\n\t\tfunction handleMessage(messageEvent: MessageEvent) {\n\t\t\tif (messageEvent.source !== iframeRef.current?.contentWindow) return\n\t\t\tif ('request' in messageEvent.data) return\n\n\t\t\tconst result = testRunnerDataSchema.safeParse(messageEvent.data, {\n\t\t\t\tpath: ['messageEvent', 'data'],\n\t\t\t})\n\t\t\tif (!result.success) {\n\t\t\t\tconsole.error(\n\t\t\t\t\t`Invalid message from test iframe`,\n\t\t\t\t\tmessageEvent.data,\n\t\t\t\t\tresult.error,\n\t\t\t\t)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst { data } = result\n\t\t\tif (data.type === 'epicshop:test-status-update') {\n\t\t\t\tif (data.status === 'pending') {\n\t\t\t\t\tsetTestSteps([])\n\t\t\t\t}\n\t\t\t\tsetMessage(data)\n\t\t\t}\n\t\t\tif (data.type === 'epicshop:test-step-update') {\n\t\t\t\tsetTestSteps((steps) => [...steps, data])\n\t\t\t}\n\t\t}\n\t\twindow.addEventListener('message', handleMessage)\n\t\treturn () => {\n\t\t\twindow.removeEventListener('message', handleMessage)\n\t\t}\n\t}, [])\n\n\tconst statusEmoji = {\n\t\tpending: <AnimatedBars size={14} aria-label=\"Pending\" />,\n\t\tpass: (\n\t\t\t<Icon\n\t\t\t\tname=\"CheckSmall\"\n\t\t\t\taria-label=\"Passed\"\n\t\t\t\tclassName=\"text-emerald-700\"\n\t\t\t/>\n\t\t),\n\t\tfail: (\n\t\t\t<Icon\n\t\t\t\tname=\"Remove\"\n\t\t\t\taria-label=\"Failed\"\n\t\t\t\tclassName=\"text-foreground-destructive\"\n\t\t\t/>\n\t\t),\n\t\tunknown: (\n\t\t\t<Icon name=\"Question\" aria-label=\"Unknown\" className=\"animate-pulse\" />\n\t\t),\n\t}[message?.status ?? 'unknown']\n\n\tconst sortedTestSteps = testSteps.sort((a, b) => a.timestamp - b.timestamp)\n\tconst testStepStatusEmojis = {\n\t\tpass: <Icon name=\"CheckSmall\" aria-label=\"Passed\" />,\n\t\tfail: <Icon name=\"Remove\" aria-label=\"Failed\" />,\n\t\tunknown: (\n\t\t\t<Icon name=\"Question\" aria-label=\"Unknown\" className=\"animate-pulse\" />\n\t\t),\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<Accordion.Root className=\"w-full\" type=\"multiple\">\n\t\t\t\t<AccordionComponent\n\t\t\t\t\ticon={statusEmoji}\n\t\t\t\t\ttitle={testFile}\n\t\t\t\t\tforceMount={true}\n\t\t\t\t>\n\t\t\t\t\t<div className=\"not-prose\">\n\t\t\t\t\t\t<div className=\"flex flex-col gap-2 p-5 pt-3\">\n\t\t\t\t\t\t\t<ul className=\"flex flex-col gap-2\">\n\t\t\t\t\t\t\t\t{sortedTestSteps.map((testStep, index) => (\n\t\t\t\t\t\t\t\t\t// sometimes the steps come in so fast that the timestamp is the same\n\t\t\t\t\t\t\t\t\t<li key={testStep.timestamp + testStep.title}>\n\t\t\t\t\t\t\t\t\t\t<div className=\"flex items-baseline gap-2 text-emerald-700\">\n\t\t\t\t\t\t\t\t\t\t\t<span>{index + 1}.</span>\n\t\t\t\t\t\t\t\t\t\t\t<span>{testStepStatusEmojis[testStep.status]}</span>\n\t\t\t\t\t\t\t\t\t\t\t<pre className=\"max-h-48 overflow-y-auto p-4 scrollbar-thin scrollbar-thumb-scrollbar\">\n\t\t\t\t\t\t\t\t\t\t\t\t{testStep.title}\n\t\t\t\t\t\t\t\t\t\t\t</pre>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t\t{message?.status === 'fail' ? (\n\t\t\t\t\t\t\t\t<div className=\"flex items-baseline gap-2 text-foreground-destructive\">\n\t\t\t\t\t\t\t\t\t<span>{sortedTestSteps.length + 1}.</span>\n\t\t\t\t\t\t\t\t\t<span>{testStepStatusEmojis.fail}</span>\n\t\t\t\t\t\t\t\t\t<pre\n\t\t\t\t\t\t\t\t\t\tclassName=\"max-h-48 overflow-y-auto p-4 scrollbar-thin scrollbar-thumb-scrollbar\"\n\t\t\t\t\t\t\t\t\t\tdangerouslySetInnerHTML={{\n\t\t\t\t\t\t\t\t\t\t\t__html: ansi.toHtml(stripCursorMovements(message.error)),\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</div>\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t<iframe\n\t\t\t\t\t\t\t\tref={iframeRef}\n\t\t\t\t\t\t\t\ttitle={testFile}\n\t\t\t\t\t\t\t\tsrc={pathname + testFile}\n\t\t\t\t\t\t\t\tclassName=\"mt-5 min-h-[420px] w-full border bg-white\"\n\t\t\t\t\t\t\t\tstyle={{ colorScheme: theme }}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div className=\"flex border-y\">\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\tonClick={() =>\n\t\t\t\t\t\t\t\t\tiframeRef.current?.contentWindow?.location.reload()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tclassName=\"border-r p-3\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Icon name=\"Refresh\" aria-label=\"Rerun Tests\" />\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\thref={pathname + testFile}\n\t\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\t\trel=\"noreferrer\"\n\t\t\t\t\t\t\t\tclassName=\"border-r p-3\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Icon name=\"ExternalLink\" aria-label=\"Open in New Window\" />\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</AccordionComponent>\n\t\t\t</Accordion.Root>\n\t\t</>\n\t)\n}\n","import { getAppByName } from '@epic-web/workshop-utils/apps.server'\nimport { userHasAccessToWorkshop } from '@epic-web/workshop-utils/epic-api.server'\nimport {\n\tclearTestProcessEntry,\n\tgetTestProcessEntry,\n\tisTestRunning,\n\trunAppTests,\n} from '@epic-web/workshop-utils/process-manager.server'\nimport { useEffect, useReducer, useRef } from 'react'\nimport {\n\tdata,\n\ttype ActionFunctionArgs,\n\ttype LoaderFunctionArgs,\n\tuseFetcher,\n} from 'react-router'\nimport { useEventSource } from 'remix-utils/sse/react'\nimport { eventStream } from 'remix-utils/sse/server'\nimport { z } from 'zod'\nimport { AnimatedBars, Icon } from '#app/components/icons.tsx'\nimport { SimpleTooltip } from '#app/components/ui/tooltip.tsx'\nimport { stripCursorMovements, useAnsiToHtml } from '#app/utils/ansi-text.js'\nimport { ensureUndeployed } from '#app/utils/misc.tsx'\nimport { dataWithPE, usePERedirectInput } from '#app/utils/pe.js'\nimport { createToastHeaders } from '#app/utils/toast.server.js'\n\nconst testActionSchema = z.union([\n\tz.object({\n\t\tintent: z.literal('run'),\n\t\tname: z.string(),\n\t}),\n\tz.object({\n\t\tintent: z.literal('stop'),\n\t\tname: z.string(),\n\t}),\n\tz.object({\n\t\tintent: z.literal('clear'),\n\t\tname: z.string(),\n\t}),\n])\n\nconst testEventSchema = z.union([\n\tz.object({\n\t\ttype: z.literal('init'),\n\t\texitCode: z.number().nullable().optional(),\n\t\tisRunning: z.boolean(),\n\t\toutput: z.array(\n\t\t\tz.object({\n\t\t\t\ttype: z.union([z.literal('stdout'), z.literal('stderr')]),\n\t\t\t\tcontent: z.string(),\n\t\t\t\ttimestamp: z.number(),\n\t\t\t}),\n\t\t),\n\t}),\n\tz.object({\n\t\ttype: z.union([z.literal('stdout'), z.literal('stderr')]),\n\t\tdata: z.string(),\n\t\ttimestamp: z.number(),\n\t}),\n\tz.object({\n\t\ttype: z.literal('exit'),\n\t\tisRunning: z.literal(false),\n\t\tcode: z.number().nullable(),\n\t}),\n])\nconst testEventQueueSchema = z.array(testEventSchema)\n\ntype TestEvent = z.infer<typeof testEventSchema>\ntype TestEventQueue = z.infer<typeof testEventQueueSchema>\n\nexport async function loader({ request }: LoaderFunctionArgs) {\n\tensureUndeployed()\n\tconst url = new URL(request.url)\n\tconst name = url.searchParams.get('name')\n\tif (!name) {\n\t\treturn data({ error: 'Missing name' }, { status: 400 })\n\t}\n\tconst app = await getAppByName(name)\n\tif (!app) {\n\t\treturn data({ error: 'App not found' }, { status: 404 })\n\t}\n\tconst processEntry = getTestProcessEntry(app)\n\tif (!processEntry) {\n\t\treturn data({ error: 'App is not running tests' }, { status: 404 })\n\t}\n\treturn eventStream(request.signal, function setup(send) {\n\t\t// have to batch because the client may miss events if we send too many\n\t\t// too rapidly\n\t\tlet queue: TestEventQueue = []\n\t\tfunction sendEvent(event: TestEvent) {\n\t\t\tqueue.push(event)\n\t\t}\n\t\tconst interval = setInterval(() => {\n\t\t\tif (queue.length) {\n\t\t\t\tsend({ data: JSON.stringify(queue) })\n\t\t\t\tqueue = []\n\t\t\t}\n\t\t}, 10)\n\n\t\tconst isRunning = isTestRunning(app)\n\n\t\tsendEvent({\n\t\t\ttype: 'init',\n\t\t\texitCode: processEntry.exitCode,\n\t\t\tisRunning,\n\t\t\toutput: processEntry.output.map((line) => ({\n\t\t\t\ttype: line.type,\n\t\t\t\tcontent: line.content,\n\t\t\t\ttimestamp: line.timestamp,\n\t\t\t})),\n\t\t})\n\n\t\tconst testProcess = processEntry.process\n\t\tif (!testProcess) {\n\t\t\treturn () => {}\n\t\t}\n\n\t\tfunction handleStdOutData(data: Buffer) {\n\t\t\tsendEvent({\n\t\t\t\ttype: 'stdout',\n\t\t\t\tdata: data.toString('utf-8'),\n\t\t\t\ttimestamp: Date.now(),\n\t\t\t})\n\t\t}\n\t\tfunction handleStdErrData(data: Buffer) {\n\t\t\tsendEvent({\n\t\t\t\ttype: 'stderr',\n\t\t\t\tdata: data.toString('utf-8'),\n\t\t\t\ttimestamp: Date.now(),\n\t\t\t})\n\t\t}\n\t\tfunction handleExit(code: number) {\n\t\t\ttestProcess?.stdout?.off('data', handleStdOutData)\n\t\t\ttestProcess?.stderr?.off('data', handleStdErrData)\n\t\t\ttestProcess?.off('exit', handleExit)\n\t\t\tsendEvent({ type: 'exit', isRunning: false, code })\n\t\t}\n\t\ttestProcess.stdout?.on('data', handleStdOutData)\n\t\ttestProcess.stderr?.on('data', handleStdErrData)\n\t\ttestProcess.on('exit', handleExit)\n\t\treturn function cleanup() {\n\t\t\ttestProcess.stdout?.off('data', handleStdOutData)\n\t\t\ttestProcess.stderr?.off('data', handleStdErrData)\n\t\t\ttestProcess.off('exit', handleExit)\n\t\t\tclearInterval(interval)\n\t\t}\n\t})\n}\n\nexport async function action({ request }: ActionFunctionArgs) {\n\tensureUndeployed()\n\tconst formData = await request.formData()\n\tconst userHasAccess = await userHasAccessToWorkshop({\n\t\trequest,\n\t})\n\tif (!userHasAccess) {\n\t\treturn dataWithPE(\n\t\t\tformData,\n\t\t\t{\n\t\t\t\tsuccess: false,\n\t\t\t\terror:\n\t\t\t\t\t'You do not have access to this workshop. Login or register for the workshop to be able to run the tests.',\n\t\t\t},\n\t\t\t{\n\t\t\t\tstatus: 403,\n\t\t\t\theaders: await createToastHeaders({\n\t\t\t\t\ttitle: 'Access denied',\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t'You do not have access to this workshop. Login or register for the workshop to be able to run the tests.',\n\t\t\t\t}),\n\t\t\t},\n\t\t)\n\t}\n\tconst result = testActionSchema.safeParse({\n\t\tintent: formData.get('intent'),\n\t\tname: formData.get('name'),\n\t})\n\tif (!result.success) {\n\t\treturn dataWithPE(\n\t\t\tformData,\n\t\t\t{ success: false, error: result.error.flatten() },\n\t\t\t{ status: 400 },\n\t\t)\n\t}\n\tconst app = await getAppByName(result.data.name)\n\tif (!app) {\n\t\treturn dataWithPE(\n\t\t\tformData,\n\t\t\t{ success: false, error: 'App not found' },\n\t\t\t{ status: 404 },\n\t\t)\n\t}\n\tswitch (result.data.intent) {\n\t\tcase 'run': {\n\t\t\tvoid runAppTests(app)\n\t\t\treturn dataWithPE(formData, { success: true })\n\t\t}\n\t\tcase 'stop': {\n\t\t\tconst processEntry = getTestProcessEntry(app)\n\t\t\tif (processEntry) {\n\t\t\t\tprocessEntry.process?.kill()\n\t\t\t}\n\t\t\treturn dataWithPE(formData, { success: true })\n\t\t}\n\t\tcase 'clear': {\n\t\t\tclearTestProcessEntry(app)\n\t\t\treturn dataWithPE(formData, { success: true })\n\t\t}\n\t}\n}\n\nfunction simpleReducer<State>(prev: State, getNext: (prev: State) => State) {\n\treturn getNext(prev)\n}\n\nexport function TestOutput({ name }: { name: string }) {\n\ttype State = {\n\t\t/** version is used to trigger an unsubscribe and resubscribe to the event source */\n\t\tversion: number\n\t\tisRunning: boolean\n\t\texitCode: number | null | undefined\n\t\tlines: Array<{\n\t\t\ttype: 'stdout' | 'stderr'\n\t\t\tcontent: string\n\t\t\ttimestamp: number\n\t\t}>\n\t}\n\tconst [state, dispatch] = useReducer(simpleReducer<State>, {\n\t\tversion: 0,\n\t\tisRunning: false,\n\t\texitCode: undefined,\n\t\tlines: [],\n\t})\n\tconst ansi = useAnsiToHtml()\n\tconst { version, isRunning, exitCode, lines } = state\n\tconst lastMessage = useEventSource(\n\t\t`/test?${new URLSearchParams({ name })}&v=${version}`,\n\t)\n\tuseEffect(() => {\n\t\tif (!lastMessage) return\n\n\t\tconst parsed = JSON.parse(lastMessage)\n\t\tconst result = testEventQueueSchema.safeParse(parsed)\n\t\tif (!result.success) {\n\t\t\tconsole.error(result.error.flatten())\n\t\t\treturn\n\t\t}\n\t\tfor (const event of result.data) {\n\t\t\tswitch (event.type) {\n\t\t\t\tcase 'exit': {\n\t\t\t\t\tconst { isRunning, code: exitCode } = event\n\t\t\t\t\tdispatch((prev) => ({ ...prev, isRunning, exitCode }))\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tcase 'init': {\n\t\t\t\t\tconst { output, exitCode, isRunning } = event\n\t\t\t\t\tdispatch((prev) => ({ ...prev, lines: output, exitCode, isRunning }))\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tcase 'stderr':\n\t\t\t\tcase 'stdout': {\n\t\t\t\t\tconst { type, data: content, timestamp } = event\n\t\t\t\t\tdispatch((prev) => ({\n\t\t\t\t\t\t...prev,\n\t\t\t\t\t\tlines: [...prev.lines, { type, content, timestamp }].sort(\n\t\t\t\t\t\t\t(a, b) => a.timestamp - b.timestamp,\n\t\t\t\t\t\t),\n\t\t\t\t\t\tisRunning: true,\n\t\t\t\t\t}))\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}, [lastMessage])\n\n\treturn (\n\t\t<div className=\"relative flex h-full w-full flex-col overflow-y-auto\">\n\t\t\t<div className=\"flex h-12 w-full flex-shrink-0 items-center justify-between border-b\">\n\t\t\t\t<div className=\"flex h-full items-center\">\n\t\t\t\t\t{!isRunning && (\n\t\t\t\t\t\t<TestRunner\n\t\t\t\t\t\t\tname={name}\n\t\t\t\t\t\t\tonRun={() => {\n\t\t\t\t\t\t\t\tdispatch((prev) => ({\n\t\t\t\t\t\t\t\t\t...prev,\n\t\t\t\t\t\t\t\t\texitCode: undefined,\n\t\t\t\t\t\t\t\t\tlines: [],\n\t\t\t\t\t\t\t\t\tversion: prev.version + 1,\n\t\t\t\t\t\t\t\t}))\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t\t{isRunning ? (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<div className=\"flex h-full flex-grow items-center justify-center border-r px-3.5\">\n\t\t\t\t\t\t\t\t<AnimatedBars role=\"status\" aria-label=\"Running Tests\" />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<StopTest name={name} />\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{!isRunning && exitCode !== undefined && (\n\t\t\t\t\t<p className=\"pr-3.5 leading-none\">\n\t\t\t\t\t\t{exitCode === 0\n\t\t\t\t\t\t\t? `Tests passed`\n\t\t\t\t\t\t\t: `Test failed (exit code ${String(exitCode)})`}\n\t\t\t\t\t</p>\n\t\t\t\t)}\n\t\t\t\t{!isRunning && exitCode !== undefined && (\n\t\t\t\t\t<ClearTest\n\t\t\t\t\t\tname={name}\n\t\t\t\t\t\tonClear={() => {\n\t\t\t\t\t\t\tdispatch((prev) => ({\n\t\t\t\t\t\t\t\t...prev,\n\t\t\t\t\t\t\t\texitCode: undefined,\n\t\t\t\t\t\t\t\tlines: [],\n\t\t\t\t\t\t\t}))\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t\t<div className=\"flex h-full flex-col gap-5 p-5\">\n\t\t\t\t<p className=\"font-mono text-sm font-medium uppercase\">Test Output</p>\n\t\t\t\t<pre className=\"shadow-on-scrollbox flex-1 overflow-y-scroll scrollbar-thin scrollbar-thumb-scrollbar\">\n\t\t\t\t\t{lines.map((line) => (\n\t\t\t\t\t\t<code\n\t\t\t\t\t\t\tkey={line.timestamp}\n\t\t\t\t\t\t\tdata-type={line.type}\n\t\t\t\t\t\t\tdangerouslySetInnerHTML={{\n\t\t\t\t\t\t\t\t__html: ansi.toHtml(stripCursorMovements(line.content)),\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t))}\n\t\t\t\t</pre>\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n\nexport function TestRunner({\n\tname,\n\tonRun,\n}: {\n\tname: string\n\tonRun?: () => void\n}) {\n\tconst fetcher = useFetcher<typeof action>()\n\tconst peRedirectInput = usePERedirectInput()\n\tconst latestOnRun = useRef(onRun)\n\tuseEffect(() => {\n\t\tlatestOnRun.current = onRun\n\t}, [onRun])\n\tuseEffect(() => {\n\t\tif (fetcher.data?.success) {\n\t\t\tlatestOnRun.current?.()\n\t\t}\n\t}, [fetcher.data])\n\treturn (\n\t\t<fetcher.Form method=\"POST\" action=\"/test\" className=\"h-full\">\n\t\t\t{peRedirectInput}\n\t\t\t<input type=\"hidden\" name=\"name\" value={name} />\n\t\t\t<SimpleTooltip\n\t\t\t\tcontent={fetcher.state === 'idle' ? 'Run Tests' : 'Running Tests...'}\n\t\t\t>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\tname=\"intent\"\n\t\t\t\t\tvalue=\"run\"\n\t\t\t\t\tclassName=\"flex h-full flex-grow items-center justify-center border-r px-3.5\"\n\t\t\t\t>\n\t\t\t\t\t{fetcher.state === 'idle' ? (\n\t\t\t\t\t\t<Icon name=\"TriangleSmall\" />\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<AnimatedBars role=\"status\" />\n\t\t\t\t\t)}\n\t\t\t\t</button>\n\t\t\t</SimpleTooltip>\n\t\t</fetcher.Form>\n\t)\n}\n\nexport function ClearTest({\n\tname,\n\tonClear,\n}: {\n\tname: string\n\tonClear?: () => void\n}) {\n\tconst fetcher = useFetcher<typeof action>()\n\tconst peRedirectInput = usePERedirectInput()\n\tconst latestOnClear = useRef(onClear)\n\tuseEffect(() => {\n\t\tlatestOnClear.current = onClear\n\t}, [onClear])\n\tuseEffect(() => {\n\t\tif (fetcher.data?.success) {\n\t\t\tlatestOnClear.current?.()\n\t\t}\n\t}, [fetcher.data])\n\treturn (\n\t\t<fetcher.Form method=\"POST\" action=\"/test\" className=\"h-full\">\n\t\t\t{peRedirectInput}\n\t\t\t<input type=\"hidden\" name=\"name\" value={name} />\n\t\t\t<SimpleTooltip\n\t\t\t\tcontent={fetcher.state === 'idle' ? 'Clear Tests' : 'Clearing Tests...'}\n\t\t\t>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\tname=\"intent\"\n\t\t\t\t\tvalue=\"clear\"\n\t\t\t\t\tclassName=\"flex h-full flex-grow items-center justify-center border-l px-3.5\"\n\t\t\t\t>\n\t\t\t\t\t{fetcher.state === 'idle' ? (\n\t\t\t\t\t\t<Icon name=\"Clear\" />\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<Icon name=\"Clear\" className=\"animate-pulse\" role=\"status\" />\n\t\t\t\t\t)}\n\t\t\t\t</button>\n\t\t\t</SimpleTooltip>\n\t\t</fetcher.Form>\n\t)\n}\n\nexport function StopTest({\n\tname,\n\tonStop,\n}: {\n\tname: string\n\tonStop?: () => void\n}) {\n\tconst fetcher = useFetcher<typeof action>()\n\tconst peRedirectInput = usePERedirectInput()\n\tconst latestOnStop = useRef(onStop)\n\tuseEffect(() => {\n\t\tlatestOnStop.current = onStop\n\t}, [onStop])\n\tuseEffect(() => {\n\t\tif (fetcher.data?.success) {\n\t\t\tlatestOnStop.current?.()\n\t\t}\n\t}, [fetcher.data])\n\treturn (\n\t\t<fetcher.Form method=\"POST\" action=\"/test\" className=\"h-full\">\n\t\t\t{peRedirectInput}\n\t\t\t<input type=\"hidden\" name=\"name\" value={name} />\n\t\t\t<SimpleTooltip\n\t\t\t\tcontent={fetcher.state === 'idle' ? 'Stop Tests' : 'Stopping Tests...'}\n\t\t\t>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\tname=\"intent\"\n\t\t\t\t\tvalue=\"stop\"\n\t\t\t\t\tclassName=\"flex h-full flex-grow items-center justify-center border-r px-3.5\"\n\t\t\t\t>\n\t\t\t\t\t{fetcher.state === 'idle' ? (\n\t\t\t\t\t\t<Icon name=\"Stop\" />\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<Icon name=\"Stop\" className=\"animate-pulse\" role=\"status\" />\n\t\t\t\t\t)}\n\t\t\t\t</button>\n\t\t\t</SimpleTooltip>\n\t\t</fetcher.Form>\n\t)\n}\n","import { type PlaygroundApp } from '@epic-web/workshop-utils/apps.server'\nimport { useState } from 'react'\nimport { DeferredEpicVideo } from '#app/components/epic-video.js'\nimport { Icon } from '#app/components/icons'\nimport { InBrowserTestRunner } from '#app/components/in-browser-test-runner'\nimport { useUserHasAccess } from '#app/components/user.js'\nimport { TestOutput } from '#app/routes/test'\nimport { PlaygroundWindow } from './playground-window'\n\nexport function Tests({\n\tappInfo: playgroundAppInfo,\n\tproblemAppName,\n\tallApps,\n\tisUpToDate,\n}: {\n\tappInfo: Pick<PlaygroundApp, 'appName' | 'name' | 'test'> | 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<TestUI playgroundAppInfo={playgroundAppInfo} />\n\t\t</PlaygroundWindow>\n\t)\n}\n\nexport function TestUI({\n\tplaygroundAppInfo,\n}: {\n\tplaygroundAppInfo: Pick<PlaygroundApp, 'name' | 'test'> | null\n}) {\n\tconst [inBrowserTestKey, setInBrowserTestKey] = useState(0)\n\tconst userHasAccess = useUserHasAccess()\n\n\tif (!userHasAccess) {\n\t\treturn (\n\t\t\t<div className=\"w-full p-12\">\n\t\t\t\t<div className=\"flex w-full flex-col gap-4 text-center\">\n\t\t\t\t\t<p className=\"text-2xl font-bold\">Access Denied</p>\n\t\t\t\t\t<p className=\"text-lg\">\n\t\t\t\t\t\tYou must login or register for the workshop to view and run the\n\t\t\t\t\t\ttests.\n\t\t\t\t\t</p>\n\t\t\t\t</div>\n\t\t\t\t<div className=\"h-16\" />\n\t\t\t\t<p className=\"pb-4\">\n\t\t\t\t\tCheck out this video to see how the test tab works.\n\t\t\t\t</p>\n\t\t\t\t<DeferredEpicVideo url=\"https://www.epicweb.dev/tips/epic-workshop-test-tab-demo\" />\n\t\t\t</div>\n\t\t)\n\t}\n\n\tif (!playgroundAppInfo) {\n\t\treturn (\n\t\t\t<div className=\"flex h-full items-center justify-center text-lg\">\n\t\t\t\t<p>No tests here 😢 Sorry.</p>\n\t\t\t</div>\n\t\t)\n\t}\n\n\tif (playgroundAppInfo.test.type === 'script') {\n\t\treturn <TestOutput name={playgroundAppInfo.name} />\n\t}\n\n\tif (playgroundAppInfo.test.type === 'browser') {\n\t\tconst { pathname } = playgroundAppInfo.test\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName=\"flex h-full w-full flex-grow flex-col overflow-y-auto\"\n\t\t\t\tkey={inBrowserTestKey}\n\t\t\t>\n\t\t\t\t{playgroundAppInfo.test.testFiles.map((testFile) => (\n\t\t\t\t\t<div key={testFile}>\n\t\t\t\t\t\t<InBrowserTestRunner pathname={pathname} testFile={testFile} />\n\t\t\t\t\t</div>\n\t\t\t\t))}\n\t\t\t\t<div className=\"px-3 py-[21px]\">\n\t\t\t\t\t<button\n\t\t\t\t\t\tonClick={() => setInBrowserTestKey((c) => c + 1)}\n\t\t\t\t\t\tclassName=\"flex items-center gap-2 font-mono text-sm uppercase leading-none\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<Icon name=\"Refresh\" aria-hidden /> Rerun All Tests\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t)\n\t}\n\n\treturn (\n\t\t<div className=\"flex h-full items-center justify-center text-lg\">\n\t\t\t<p>No tests here 😢 Sorry.</p>\n\t\t</div>\n\t)\n}\n"],"names":["PlaygroundWindow","playgroundAppName","problemAppName","isUpToDate","allApps","children","isCorrectApp","playgroundLinkedUI","jsx","Icon","setPlaygroundTooltipText","jsxs","SetPlayground","SimpleTooltip","PlaygroundChooser","__importDefault","this","mod","decode_codepoint","decode_json_1","require$$0","fromCodePoint","codePoint","output","decodeCodePoint","decode","entities_json_1","legacy_json_1","require$$1","xml_json_1","require$$2","decode_codepoint_1","strictEntityRe","getStrictDecoder","map","replace","getReplacer","str","sorter","a","b","legacy","keys","i","j","re","replacer","secondChar","encode","inverseXML","getInverseObj","xmlReplacer","getInverseReplacer","getASCIIEncoder","inverseHTML","htmlReplacer","getInverse","obj","inverse","name","single","multiple","_i","_a","k","start","end","count","reNonASCII","getCodePoint","c","singleCharReplacer","data","reEscapeChars","escape","escapeUTF8","exports","decode_1","encode_1","level","decodeStrict","encode_2","decode_2","_classCallCheck","instance","Constructor","_defineProperties","target","props","descriptor","_createClass","protoProps","staticProps","_createForOfIteratorHelper","o","allowArrayLike","it","_unsupportedIterableToArray","F","_e","normalCompletion","didErr","err","step","_e2","minLen","_arrayLikeToArray","n","arr","len","arr2","entities","defaults","getDefaultColors","colors","range","red","green","blue","setStyleColor","gray","l","toHexString","r","g","toColorHexString","num","ref","results","_iterator","_step","generateOutput","stack","token","options","result","pushText","handleDisplay","pushForegroundColor","pushBackgroundColor","handleRgb","operation","color","rgb","value","pushStyle","code","codeMap","resetStyles","pushTag","closeTag","stackClone","tag","low","high","notCategory","category","e","categoryForCode","text","style","last","tokenize","callback","ansiMatch","ansiHandler","remove","removeXterm256Foreground","m","g1","removeXterm256Background","newline","ansiMess","_iterator2","_step2","realText","tokens","process","handler","results1","_text","length","outer","updateStickyStack","stickyStack","Filter","input","_this","buf","element","ansi_to_html","useAnsiToHtml","theme","useTheme","useMemo","AnsiToHTML","stripCursorMovements","testRunnerStatusDataSchema","z.intersection","z.object","z.literal","z.number","z.union","z.string","testRunnerTestStepDataSchema","testRunnerDataSchema","InBrowserTestRunner","pathname","testFile","ansi","iframeRef","useRef","message","setMessage","useState","testSteps","setTestSteps","useEffect","handleMessage","messageEvent","steps","statusEmoji","AnimatedBars","sortedTestSteps","testStepStatusEmojis","Fragment","Accordion.Root","AccordionComponent","testStep","index","testEventSchema","z","type","exitCode","nullable","optional","isRunning","content","timestamp","testEventQueueSchema","simpleReducer","prev","getNext","TestOutput","state","dispatch","useReducer","version","lines","lastMessage","useEventSource","URLSearchParams","parsed","JSON","parse","safeParse","success","console","error","flatten","event","sort","className","TestRunner","onRun","role","StopTest","String","ClearTest","onClear","line","dangerouslySetInnerHTML","__html","toHtml","fetcher","useFetcher","peRedirectInput","usePERedirectInput","latestOnRun","current","Form","method","action","latestOnClear","onStop","latestOnStop","Tests","playgroundAppInfo","TestUI","inBrowserTestKey","setInBrowserTestKey","useUserHasAccess","DeferredEpicVideo"],"mappings":"mmBAIO,SAASA,GAAiB,CAChC,kBAAAC,EACA,eAAAC,EACA,WAAAC,EACA,QAAAC,EACA,SAAAC,CACD,EAMG,CACF,MAAMC,EAAeL,IAAsBC,EACrCK,EACLD,GAAgBH,EACfK,EAAAA,IAACC,GAAK,KAAK,KAAK,KAAK,QAAA,CAAS,EAE9BD,EAAAA,IAACC,EAAA,CACA,KAAK,KACL,KAAK,WACL,UAAU,2CAAA,CAAA,EAGb,IAAIC,EAA2B,6BAC/B,OAAKP,IACJO,EACC,yDAEGJ,IACJI,EACC,oEAGDC,EAAAA,KAAC,MAAA,CAAI,UAAU,8CACd,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,yEACd,SAAA,CAAAH,EAAAA,IAAC,MAAA,CAAI,UAAU,iBACb,SAAAN,EACAM,EAAAA,IAACI,GAAA,CACA,QAASV,EACT,YAAaQ,EAEZ,SAAAH,CAAA,CAAA,EAGFC,EAAAA,IAACK,EAAA,CAAc,QAAQ,yCACtB,SAAAL,EAAAA,IAAC,MAAA,CACA,SAAAA,EAAAA,IAACC,EAAA,CAAK,KAAK,UAAA,CAAW,CAAA,CACvB,EACD,EAEF,EACAD,EAAAA,IAAC,MAAA,CAAI,UAAU,mBACb,SAAAP,EACAO,EAAAA,IAACI,GAAA,CACA,QAASX,EACT,MAAK,GACL,YAAY,mBAEZ,SAAAO,EAAAA,IAAC,OAAI,UAAU,2CACd,eAACC,EAAA,CAAK,KAAK,UAAU,CAAA,CACtB,CAAA,CAAA,EAGDD,EAAAA,IAAC,MAAA,CAAI,UAAU,UAAU,CAAA,CAE3B,EACAA,EAAAA,IAACM,GAAA,CACA,QAAAV,EACA,kBAAAH,CAAA,CAAA,CACD,EACD,EACAO,EAAAA,IAAC,MAAA,CAAI,UAAU,2DACb,SAAAH,CAAA,CACF,CAAA,EACD,CAEF;2k+BChFA,IAAIU,EAAmBC,GAAQA,EAAK,iBAAoB,SAAUC,EAAK,CACnE,OAAQA,GAAOA,EAAI,WAAcA,EAAM,CAAE,QAAWA,CAAG,CAC3D,EACA,OAAO,eAAeC,EAAS,aAAc,CAAE,MAAO,GAAM,EAC5D,IAAIC,EAAgBJ,EAAgBK,EAA6B,EAE7DC,EAEJ,OAAO,eACH,SAAUC,EAAW,CACjB,IAAIC,EAAS,GACb,OAAID,EAAY,QACZA,GAAa,MACbC,GAAU,OAAO,aAAeD,IAAc,GAAM,KAAS,KAAM,EACnEA,EAAY,MAAUA,EAAY,MAEtCC,GAAU,OAAO,aAAaD,CAAS,EAChCC,CACf,EACA,SAASC,EAAgBF,EAAW,CAChC,OAAKA,GAAa,OAAUA,GAAa,OAAWA,EAAY,QACrD,KAEPA,KAAaH,EAAc,UAC3BG,EAAYH,EAAc,QAAQG,CAAS,GAExCD,EAAcC,CAAS,EAClC,CACA,OAAAJ,EAAA,QAAkBM,6CC5BlB,IAAIT,EAAmBC,GAAQA,EAAK,iBAAoB,SAAUC,EAAK,CACnE,OAAQA,GAAOA,EAAI,WAAcA,EAAM,CAAE,QAAWA,CAAG,CAC3D,EACA,OAAO,eAAeQ,EAAS,aAAc,CAAE,MAAO,GAAM,EAC5DA,EAAA,WAAqBA,EAAA,iBAA2BA,EAAA,UAAoB,OACpE,IAAIC,EAAkBX,EAAgBK,EAA+B,EACjEO,EAAgBZ,EAAgBa,EAA6B,EAC7DC,EAAad,EAAgBe,EAA0B,EACvDC,EAAqBhB,MAA6C,EAClEiB,EAAiB,4CACrBP,EAAA,UAAoBQ,EAAiBJ,EAAW,OAAO,EACvDJ,EAAA,iBAA2BQ,EAAiBP,EAAgB,OAAO,EACnE,SAASO,EAAiBC,EAAK,CAC3B,IAAIC,EAAUC,EAAYF,CAAG,EAC7B,OAAO,SAAUG,EAAK,CAAE,OAAO,OAAOA,CAAG,EAAE,QAAQL,EAAgBG,CAAO,CAAE,CAChF,CACA,IAAIG,EAAS,SAAUC,EAAGC,EAAG,CAAE,OAAQD,EAAIC,EAAI,EAAI,EAAI,EACvDf,EAAA,WAAsB,UAAY,CAG9B,QAFIgB,EAAS,OAAO,KAAKd,EAAc,OAAO,EAAE,KAAKW,CAAM,EACvDI,EAAO,OAAO,KAAKhB,EAAgB,OAAO,EAAE,KAAKY,CAAM,EAClDK,EAAI,EAAGC,EAAI,EAAGD,EAAID,EAAK,OAAQC,IAChCF,EAAOG,CAAC,IAAMF,EAAKC,CAAC,GACpBD,EAAKC,CAAC,GAAK,KACXC,KAGAF,EAAKC,CAAC,GAAK,IAGnB,IAAIE,EAAK,IAAI,OAAO,OAASH,EAAK,KAAK,GAAG,EAAI,gCAAiC,GAAG,EAC9EP,EAAUC,EAAYV,EAAgB,OAAO,EACjD,SAASoB,EAAST,EAAK,CACnB,OAAIA,EAAI,OAAO,EAAE,IAAM,MACnBA,GAAO,KACJF,EAAQE,CAAG,CAC1B,CAEI,OAAO,SAAUA,EAAK,CAAE,OAAO,OAAOA,CAAG,EAAE,QAAQQ,EAAIC,CAAQ,CAAE,CACrE,EAAC,EACD,SAASV,EAAYF,EAAK,CACtB,OAAO,SAAiBG,EAAK,CACzB,GAAIA,EAAI,OAAO,CAAC,IAAM,IAAK,CACvB,IAAIU,EAAaV,EAAI,OAAO,CAAC,EAC7B,OAAIU,IAAe,KAAOA,IAAe,IAC9BhB,EAAmB,QAAQ,SAASM,EAAI,OAAO,CAAC,EAAG,EAAE,CAAC,EAE1DN,EAAmB,QAAQ,SAASM,EAAI,OAAO,CAAC,EAAG,EAAE,CAAC,CACzE,CAEQ,OAAOH,EAAIG,EAAI,MAAM,EAAG,EAAE,CAAC,GAAKA,CACxC,CACA,wDCnDA,IAAItB,EAAmBC,GAAQA,EAAK,iBAAoB,SAAUC,EAAK,CACnE,OAAQA,GAAOA,EAAI,WAAcA,EAAM,CAAE,QAAWA,CAAG,CAC3D,EACA,OAAO,eAAe+B,EAAS,aAAc,CAAE,MAAO,GAAM,EAC5DA,EAAA,WAAqBA,EAAA,OAAiBA,EAAA,mBAA6BA,aAAqBA,EAAA,UAAoB,OAC5G,IAAInB,EAAad,EAAgBK,EAA0B,EACvD6B,EAAaC,EAAcrB,EAAW,OAAO,EAC7CsB,EAAcC,EAAmBH,CAAU,EAQ/CD,EAAA,UAAoBK,EAAgBJ,CAAU,EAC9C,IAAIvB,EAAkBX,EAAgBa,EAA+B,EACjE0B,EAAcJ,EAAcxB,EAAgB,OAAO,EACnD6B,EAAeH,EAAmBE,CAAW,EAWjDN,EAAA,WAAqBQ,EAAWF,EAAaC,CAAY,EAQzDP,EAAA,mBAA6BK,EAAgBC,CAAW,EACxD,SAASJ,EAAcO,EAAK,CACxB,OAAO,OAAO,KAAKA,CAAG,EACjB,KAAI,EACJ,OAAO,SAAUC,EAASC,EAAM,CACjC,OAAAD,EAAQD,EAAIE,CAAI,CAAC,EAAI,IAAMA,EAAO,IAC3BD,CACf,EAAO,CAAA,CAAE,CACT,CACA,SAASN,EAAmBM,EAAS,CAGjC,QAFIE,EAAS,CAAA,EACTC,EAAW,CAAA,EACNC,EAAK,EAAGC,EAAK,OAAO,KAAKL,CAAO,EAAGI,EAAKC,EAAG,OAAQD,IAAM,CAC9D,IAAIE,EAAID,EAAGD,CAAE,EACTE,EAAE,SAAW,EAEbJ,EAAO,KAAK,KAAOI,CAAC,EAIpBH,EAAS,KAAKG,CAAC,CAE3B,CAEIJ,EAAO,KAAI,EACX,QAASK,EAAQ,EAAGA,EAAQL,EAAO,OAAS,EAAGK,IAAS,CAGpD,QADIC,EAAMD,EACHC,EAAMN,EAAO,OAAS,GACzBA,EAAOM,CAAG,EAAE,WAAW,CAAC,EAAI,IAAMN,EAAOM,EAAM,CAAC,EAAE,WAAW,CAAC,GAC9DA,GAAO,EAEX,IAAIC,EAAQ,EAAID,EAAMD,EAElBE,EAAQ,GAEZP,EAAO,OAAOK,EAAOE,EAAOP,EAAOK,CAAK,EAAI,IAAML,EAAOM,CAAG,CAAC,CACrE,CACI,OAAAL,EAAS,QAAQ,IAAMD,EAAO,KAAK,EAAE,EAAI,GAAG,EACrC,IAAI,OAAOC,EAAS,KAAK,GAAG,EAAG,GAAG,CAC7C,CAEA,IAAIO,EAAa,0IACbC,EAEJ,OAAO,UAAU,aAAe,KAExB,SAAUhC,EAAK,CAAE,OAAOA,EAAI,YAAY,CAAC,CAAE,EAE3C,SAAUiC,EAAG,CACT,OAAQA,EAAE,WAAW,CAAC,EAAI,OAAU,KAChCA,EAAE,WAAW,CAAC,EACd,MACA,KAChB,EACA,SAASC,EAAmBD,EAAG,CAC3B,MAAO,OAASA,EAAE,OAAS,EAAID,EAAaC,CAAC,EAAIA,EAAE,WAAW,CAAC,GAC1D,SAAS,EAAE,EACX,YAAW,EAAK,GACzB,CACA,SAASd,EAAWE,EAASb,EAAI,CAC7B,OAAO,SAAU2B,EAAM,CACnB,OAAOA,EACF,QAAQ3B,EAAI,SAAUc,EAAM,CAAE,OAAOD,EAAQC,CAAI,CAAE,CAAE,EACrD,QAAQS,EAAYG,CAAkB,CACnD,CACA,CACA,IAAIE,EAAgB,IAAI,OAAOtB,EAAY,OAAS,IAAMiB,EAAW,OAAQ,GAAG,EAUhF,SAASM,EAAOF,EAAM,CAClB,OAAOA,EAAK,QAAQC,EAAeF,CAAkB,CACzD,CACAvB,EAAA,OAAiB0B,EASjB,SAASC,EAAWH,EAAM,CACtB,OAAOA,EAAK,QAAQrB,EAAaoB,CAAkB,CACvD,CACAvB,EAAA,WAAqB2B,EACrB,SAAStB,EAAgBI,EAAK,CAC1B,OAAO,SAAUe,EAAM,CACnB,OAAOA,EAAK,QAAQC,EAAe,SAAUH,EAAG,CAAE,OAAOb,EAAIa,CAAC,GAAKC,EAAmBD,CAAC,CAAE,CAAE,CACnG,CACA,4DCtIA,OAAO,eAAcM,EAAU,aAAc,CAAE,MAAO,GAAM,EAC5DA,EAAA,gBAA0BA,oBAA4BA,EAAA,kBAA4BA,EAAA,YAAsBA,cAAsBA,EAAA,iBAA2BA,EAAA,WAAqBA,YAAoBA,EAAA,YAAsBA,EAAA,YAAsBA,EAAA,WAAqBA,EAAA,OAAiBA,qBAA6BA,EAAA,WAAqBA,EAAA,UAAoBA,SAAiBA,EAAA,aAAuBA,EAAA,OAAiB,OACnZ,IAAIC,EAAWzD,GAAA,EACX0D,EAAWlD,GAAA,EAQf,SAASH,EAAO+C,EAAMO,EAAO,CACzB,OAAQ,CAACA,GAASA,GAAS,EAAIF,EAAS,UAAYA,EAAS,YAAYL,CAAI,CACjF,CACAI,EAAA,OAAiBnD,EAQjB,SAASuD,EAAaR,EAAMO,EAAO,CAC/B,OAAQ,CAACA,GAASA,GAAS,EAAIF,EAAS,UAAYA,EAAS,kBAAkBL,CAAI,CACvF,CACAI,EAAA,aAAuBI,EAQvB,SAAShC,EAAOwB,EAAMO,EAAO,CACzB,OAAQ,CAACA,GAASA,GAAS,EAAID,EAAS,UAAYA,EAAS,YAAYN,CAAI,CACjF,CACAI,EAAA,OAAiB5B,EACjB,IAAIiC,EAAWrD,GAAA,EACf,OAAO,eAAegD,EAAS,YAAa,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAOK,EAAS,SAAU,CAAE,CAAE,EACjH,OAAO,eAAeL,EAAS,aAAc,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAOK,EAAS,UAAW,CAAE,CAAE,EACnH,OAAO,eAAeL,EAAS,qBAAsB,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAOK,EAAS,kBAAmB,CAAE,CAAE,EACnI,OAAO,eAAeL,EAAS,SAAU,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAOK,EAAS,MAAO,CAAE,CAAE,EAC3G,OAAO,eAAeL,EAAS,aAAc,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAOK,EAAS,UAAW,CAAE,CAAE,EAEnH,OAAO,eAAeL,EAAS,cAAe,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAOK,EAAS,UAAW,CAAE,CAAE,EACpH,OAAO,eAAeL,EAAS,cAAe,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAOK,EAAS,UAAW,CAAE,CAAE,EACpH,IAAIC,EAAW9D,GAAA,EACf,OAAO,eAAewD,EAAS,YAAa,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAOM,EAAS,SAAU,CAAE,CAAE,EACjH,OAAO,eAAeN,EAAS,aAAc,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAOM,EAAS,UAAW,CAAE,CAAE,EACnH,OAAO,eAAeN,EAAS,mBAAoB,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAOM,EAAS,gBAAiB,CAAE,CAAE,EAE/H,OAAO,eAAeN,EAAS,cAAe,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAOM,EAAS,UAAW,CAAE,CAAE,EACpH,OAAO,eAAeN,EAAS,cAAe,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAOM,EAAS,UAAW,CAAE,CAAE,EACpH,OAAO,eAAeN,EAAS,oBAAqB,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAOM,EAAS,gBAAiB,CAAE,CAAE,EAChI,OAAO,eAAeN,EAAS,oBAAqB,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAOM,EAAS,gBAAiB,CAAE,CAAE,EAChI,OAAO,eAAeN,EAAS,kBAAmB,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAOM,EAAS,SAAU,CAAE,CAAE,sDCtDvH,SAASC,EAAgBC,EAAUC,EAAa,CAAE,GAAI,EAAED,aAAoBC,GAAgB,MAAM,IAAI,UAAU,mCAAmC,CAAI,CAEvJ,SAASC,EAAkBC,EAAQC,EAAO,CAAE,QAAS7C,EAAI,EAAGA,EAAI6C,EAAM,OAAQ7C,IAAK,CAAE,IAAI8C,EAAaD,EAAM7C,CAAC,EAAG8C,EAAW,WAAaA,EAAW,YAAc,GAAOA,EAAW,aAAe,GAAU,UAAWA,IAAYA,EAAW,SAAW,IAAM,OAAO,eAAeF,EAAQE,EAAW,IAAKA,CAAU,CAAE,CAAE,CAE3T,SAASC,EAAaL,EAAaM,EAAYC,EAAa,CAAE,OAAID,GAAYL,EAAkBD,EAAY,UAAWM,CAAU,EAAwEN,CAAY,CAErN,SAASQ,EAA2BC,EAAGC,EAAgB,CAAE,IAAIC,EAAK,OAAO,OAAW,KAAeF,EAAE,OAAO,QAAQ,GAAKA,EAAE,YAAY,EAAG,GAAI,CAACE,EAAI,CAAE,GAAI,MAAM,QAAQF,CAAC,IAAME,EAAKC,EAA4BH,CAAC,IAAMC,EAAqD,CAAMC,IAAIF,EAAIE,GAAI,IAAIrD,EAAI,EAAOuD,EAAI,UAAa,CAAA,EAAI,MAAO,CAAE,EAAGA,EAAG,EAAG,UAAa,CAAE,OAAIvD,GAAKmD,EAAE,OAAe,CAAE,KAAM,EAAI,EAAW,CAAE,KAAM,GAAO,MAAOA,EAAEnD,GAAG,CAAC,CAAG,EAAI,EAAG,SAAWwD,EAAI,CAAE,MAAMA,CAAG,EAAID,CAAI,CAAG,CAAG,MAAM,IAAI,UAAU;AAAA,mFAAuI,CAAE,CAAG,IAAIE,EAAmB,GAAMC,EAAS,GAAOC,EAAK,MAAO,CAAE,EAAG,UAAa,CAAEN,EAAKA,EAAG,KAAKF,CAAC,CAAE,EAAI,EAAG,UAAa,CAAE,IAAIS,EAAOP,EAAG,KAAI,EAAI,OAAAI,EAAmBG,EAAK,KAAaA,CAAK,EAAI,EAAG,SAAWC,EAAK,CAAEH,EAAS,GAAMC,EAAME,CAAI,EAAI,EAAG,UAAa,CAAE,GAAI,CAAM,CAACJ,GAAoBJ,EAAG,QAAa,MAAMA,EAAG,OAAS,CAAG,QAAE,CAAW,GAAIK,EAAQ,MAAMC,CAAI,CAAE,CAAE,CAAG,CAE1+B,SAASL,EAA4BH,EAAGW,EAAQ,CAAE,GAAKX,EAAW,IAAI,OAAOA,GAAM,SAAU,OAAOY,EAAkBZ,EAAGW,CAAM,EAAG,IAAIE,EAAI,OAAO,UAAU,SAAS,KAAKb,CAAC,EAAE,MAAM,EAAG,EAAE,EAAgE,GAAzDa,IAAM,UAAYb,EAAE,cAAaa,EAAIb,EAAE,YAAY,MAAUa,IAAM,OAASA,IAAM,MAAO,OAAO,MAAM,KAAKb,CAAC,EAAG,GAAIa,IAAM,aAAe,2CAA2C,KAAKA,CAAC,EAAG,OAAOD,EAAkBZ,EAAGW,CAAM,EAAE,CAE9Z,SAASC,EAAkBE,EAAKC,EAAK,EAAMA,GAAO,MAAQA,EAAMD,EAAI,UAAQC,EAAMD,EAAI,QAAQ,QAASjE,EAAI,EAAGmE,EAAO,IAAI,MAAMD,CAAG,EAAGlE,EAAIkE,EAAKlE,IAAOmE,EAAKnE,CAAC,EAAIiE,EAAIjE,CAAC,EAAK,OAAOmE,CAAK,CAErL,IAAIC,EAAW3F,GAAA,EAEX4F,EAAW,CACb,GAAI,OACJ,GAAI,OACJ,QAAS,GACT,UAAW,GACX,OAAQ,GACR,OAAQC,EAAgB,GAG1B,SAASA,GAAmB,CAC1B,IAAIC,EAAS,CACX,EAAG,OACH,EAAG,OACH,EAAG,OACH,EAAG,OACH,EAAG,OACH,EAAG,OACH,EAAG,OACH,EAAG,OACH,EAAG,OACH,EAAG,OACH,GAAI,OACJ,GAAI,OACJ,GAAI,OACJ,GAAI,OACJ,GAAI,OACJ,GAAI,QAEN,OAAAC,EAAM,EAAG,CAAC,EAAE,QAAQ,SAAUC,EAAK,CACjCD,EAAM,EAAG,CAAC,EAAE,QAAQ,SAAUE,EAAO,CACnCF,EAAM,EAAG,CAAC,EAAE,QAAQ,SAAUG,EAAM,CAClC,OAAOC,EAAcH,EAAKC,EAAOC,EAAMJ,CAAM,CACrD,CAAO,CACP,CAAK,CACL,CAAG,EACDC,EAAM,EAAG,EAAE,EAAE,QAAQ,SAAUK,EAAM,CACnC,IAAI,EAAIA,EAAO,IACXC,EAAIC,EAAYF,EAAO,GAAK,CAAC,EACjCN,EAAO,CAAC,EAAI,IAAMO,EAAIA,EAAIA,CAC9B,CAAG,EACMP,CACT,CASA,SAASK,EAAcH,EAAKC,EAAOC,EAAMJ,EAAQ,CAC/C,IAAI5C,EAAI,GAAK8C,EAAM,GAAKC,EAAQ,EAAIC,EAChCK,EAAIP,EAAM,EAAIA,EAAM,GAAK,GAAK,EAC9BQ,EAAIP,EAAQ,EAAIA,EAAQ,GAAK,GAAK,EAClC7E,EAAI8E,EAAO,EAAIA,EAAO,GAAK,GAAK,EACpCJ,EAAO5C,CAAC,EAAIuD,EAAiB,CAACF,EAAGC,EAAGpF,CAAC,CAAC,CACxC,CAQA,SAASkF,EAAYI,EAAK,CAGxB,QAFIzF,EAAMyF,EAAI,SAAS,EAAE,EAElBzF,EAAI,OAAS,GAClBA,EAAM,IAAMA,EAGd,OAAOA,CACT,CAQA,SAASwF,EAAiBE,EAAK,CAC7B,IAAIC,EAAU,CAAA,EAEVC,EAAYpC,EAA2BkC,CAAG,EAC1CG,EAEJ,GAAI,CACF,IAAKD,EAAU,EAAC,EAAI,EAAEC,EAAQD,EAAU,EAAC,GAAI,MAAO,CAClD,IAAIN,EAAIO,EAAM,MACdF,EAAQ,KAAKN,EAAYC,CAAC,CAAC,CACjC,CACA,OAAWrB,EAAK,CACZ2B,EAAU,EAAE3B,CAAG,CACnB,QAAG,CACC2B,EAAU,EAAC,CACf,CAEE,MAAO,IAAMD,EAAQ,KAAK,EAAE,CAC9B,CASA,SAASG,EAAeC,EAAOC,EAAO7D,EAAM8D,EAAS,CACnD,IAAIC,EAEJ,OAAIF,IAAU,OACZE,EAASC,EAAShE,EAAM8D,CAAO,EACtBD,IAAU,UACnBE,EAASE,EAAcL,EAAO5D,EAAM8D,CAAO,EAClCD,IAAU,qBACnBE,EAASG,EAAoBN,EAAOE,EAAQ,OAAO9D,CAAI,CAAC,EAC/C6D,IAAU,qBACnBE,EAASI,EAAoBP,EAAOE,EAAQ,OAAO9D,CAAI,CAAC,EAC/C6D,IAAU,QACnBE,EAASK,EAAUR,EAAO5D,CAAI,GAGzB+D,CACT,CAQA,SAASK,EAAUR,EAAO5D,EAAM,CAC9BA,EAAOA,EAAK,UAAU,CAAC,EAAE,MAAM,EAAG,EAAE,EACpC,IAAIqE,EAAY,CAACrE,EAAK,OAAO,EAAG,CAAC,EAC7BsE,EAAQtE,EAAK,UAAU,CAAC,EAAE,MAAM,GAAG,EACnCuE,EAAMD,EAAM,IAAI,SAAUE,EAAO,CACnC,OAAQ,IAAM,OAAOA,CAAK,EAAE,SAAS,EAAE,GAAG,OAAO,EAAE,CACvD,CAAG,EAAE,KAAK,EAAE,EACV,OAAOC,EAAUb,GAAQS,IAAc,GAAK,UAAY,sBAAwBE,CAAG,CACrF,CASA,SAASN,EAAcL,EAAOc,EAAMZ,EAAS,CAC3CY,EAAO,SAASA,EAAM,EAAE,EACxB,IAAIC,EAAU,CACZ,KAAM,UAAa,CACjB,MAAO,OACb,EACI,EAAG,UAAa,CACd,OAAOf,EAAM,QAAUgB,EAAYhB,CAAK,CAC9C,EACI,EAAG,UAAa,CACd,OAAOiB,EAAQjB,EAAO,GAAG,CAC/B,EACI,EAAG,UAAa,CACd,OAAOiB,EAAQjB,EAAO,GAAG,CAC/B,EACI,EAAG,UAAa,CACd,OAAOiB,EAAQjB,EAAO,GAAG,CAC/B,EACI,EAAG,UAAa,CACd,OAAOa,EAAUb,EAAO,cAAc,CAC5C,EACI,EAAG,UAAa,CACd,OAAOiB,EAAQjB,EAAO,QAAQ,CACpC,EACI,GAAI,UAAa,CACf,OAAOa,EAAUb,EAAO,2DAA2D,CACzF,EACI,GAAI,UAAa,CACf,OAAOkB,EAASlB,EAAO,GAAG,CAChC,EACI,GAAI,UAAa,CACf,OAAOkB,EAASlB,EAAO,GAAG,CAChC,EACI,GAAI,UAAa,CACf,OAAOM,EAAoBN,EAAOE,EAAQ,EAAE,CAClD,EACI,GAAI,UAAa,CACf,OAAOK,EAAoBP,EAAOE,EAAQ,EAAE,CAClD,EACI,GAAI,UAAa,CACf,OAAOW,EAAUb,EAAO,0BAA0B,CACxD,GAEMG,EAEJ,OAAIY,EAAQD,CAAI,EACdX,EAASY,EAAQD,CAAI,EAAC,EACb,EAAIA,GAAQA,EAAO,EAC5BX,EAASc,EAAQjB,EAAO,OAAO,EACtB,GAAKc,GAAQA,EAAO,GAC7BX,EAASG,EAAoBN,EAAOE,EAAQ,OAAOY,EAAO,EAAE,CAAC,EACpD,GAAKA,GAAQA,EAAO,GAC7BX,EAASI,EAAoBP,EAAOE,EAAQ,OAAOY,EAAO,EAAE,CAAC,EACpD,GAAKA,GAAQA,EAAO,GAC7BX,EAASG,EAAoBN,EAAOE,EAAQ,OAAO,GAAKY,EAAO,GAAG,CAAC,EAC1D,GAAKA,GAAQA,EAAO,MAC7BX,EAASI,EAAoBP,EAAOE,EAAQ,OAAO,GAAKY,EAAO,IAAI,CAAC,GAG/DX,CACT,CAOA,SAASa,EAAYhB,EAAO,CAC1B,IAAImB,EAAanB,EAAM,MAAM,CAAC,EAC9B,OAAAA,EAAM,OAAS,EACRmB,EAAW,QAAO,EAAG,IAAI,SAAUC,EAAK,CAC7C,MAAO,KAAOA,EAAM,GACxB,CAAG,EAAE,KAAK,EAAE,CACZ,CAUA,SAASrC,EAAMsC,EAAKC,EAAM,CAGxB,QAFI1B,EAAU,CAAA,EAELpF,EAAI6G,EAAK7G,GAAK8G,EAAM9G,IAC3BoF,EAAQ,KAAKpF,CAAC,EAGhB,OAAOoF,CACT,CAQA,SAAS2B,EAAYC,EAAU,CAC7B,OAAO,SAAUC,EAAG,CAClB,OAAQD,IAAa,MAAQC,EAAE,WAAaD,IAAaA,IAAa,KAC1E,CACA,CAQA,SAASE,EAAgBZ,EAAM,CAC7BA,EAAO,SAASA,EAAM,EAAE,EACxB,IAAIX,EAAS,KAEb,OAAIW,IAAS,EACXX,EAAS,MACAW,IAAS,EAClBX,EAAS,OACA,EAAIW,GAAQA,EAAO,EAC5BX,EAAS,YACA,EAAIW,GAAQA,EAAO,EAC5BX,EAAS,QACAW,IAAS,EAClBX,EAAS,OACAW,IAAS,EAClBX,EAAS,SACA,GAAKW,GAAQA,EAAO,IAAMA,IAAS,IAAM,GAAKA,GAAQA,EAAO,GACtEX,EAAS,oBACA,GAAKW,GAAQA,EAAO,IAAMA,IAAS,IAAM,GAAKA,GAAQA,EAAO,OACtEX,EAAS,oBAGJA,CACT,CAQA,SAASC,EAASuB,EAAMzB,EAAS,CAC/B,OAAIA,EAAQ,UACHvB,EAAS,UAAUgD,CAAI,EAGzBA,CACT,CASA,SAASV,EAAQjB,EAAOoB,EAAKQ,EAAO,CAClC,OAAKA,IACHA,EAAQ,IAGV5B,EAAM,KAAKoB,CAAG,EACP,IAAI,OAAOA,CAAG,EAAE,OAAOQ,EAAQ,WAAY,OAAOA,EAAO,GAAI,EAAI,GAAI,GAAG,CACjF,CAQA,SAASf,EAAUb,EAAO4B,EAAO,CAC/B,OAAOX,EAAQjB,EAAO,OAAQ4B,CAAK,CACrC,CAEA,SAAStB,EAAoBN,EAAOU,EAAO,CACzC,OAAOO,EAAQjB,EAAO,OAAQ,SAAWU,CAAK,CAChD,CAEA,SAASH,EAAoBP,EAAOU,EAAO,CACzC,OAAOO,EAAQjB,EAAO,OAAQ,oBAAsBU,CAAK,CAC3D,CAQA,SAASQ,EAASlB,EAAO4B,EAAO,CAC9B,IAAIC,EAMJ,GAJI7B,EAAM,MAAM,EAAE,EAAE,CAAC,IAAM4B,IACzBC,EAAO7B,EAAM,IAAG,GAGd6B,EACF,MAAO,KAAOD,EAAQ,GAE1B,CASA,SAASE,EAASH,EAAMzB,EAAS6B,EAAU,CACzC,IAAIC,EAAY,GACZC,EAAc,EAElB,SAASC,GAAS,CAChB,MAAO,EACX,CAEE,SAASC,EAAyBC,EAAGC,EAAI,CACvC,OAAAN,EAAS,qBAAsBM,CAAE,EAC1B,EACX,CAEE,SAASC,EAAyBF,EAAGC,EAAI,CACvC,OAAAN,EAAS,qBAAsBM,CAAE,EAC1B,EACX,CAEE,SAASE,EAAQH,EAAG,CAClB,OAAIlC,EAAQ,QACV6B,EAAS,UAAW,EAAE,EAEtBA,EAAS,OAAQK,CAAC,EAGb,EACX,CAEE,SAASI,EAASJ,EAAGC,EAAI,CACvBL,EAAY,GAERK,EAAG,OAAO,SAAW,IACvBA,EAAK,KAGPA,EAAKA,EAAG,UAAU,GAAG,EAAE,MAAM,GAAG,EAEhC,IAAII,EAAahF,EAA2B4E,CAAE,EAC1CK,GAEJ,GAAI,CACF,IAAKD,EAAW,EAAC,EAAI,EAAEC,GAASD,EAAW,EAAC,GAAI,MAAO,CACrD,IAAIjD,GAAIkD,GAAO,MACfX,EAAS,UAAWvC,EAAC,CAC7B,CACA,OAAatB,GAAK,CACZuE,EAAW,EAAEvE,EAAG,CACtB,QAAK,CACCuE,EAAW,EAAC,CAClB,CAEI,MAAO,EACX,CAEE,SAASE,GAASP,EAAG,CACnB,OAAAL,EAAS,OAAQK,CAAC,EACX,EACX,CAEE,SAASzB,GAAIyB,EAAG,CACd,OAAAL,EAAS,MAAOK,CAAC,EACV,EACX,CAIE,IAAIQ,GAAS,CAAC,CACZ,QAAS,SACT,IAAKV,CACT,EAAK,CACD,QAAS,iBACT,IAAKA,CACT,EAAK,CACD,QAAS,aACT,IAAKA,CACT,EAAK,CACD,QAAS,8BACT,IAAKvB,EACT,EAAK,CACD,QAAS,qBACT,IAAKwB,CACT,EAAK,CACD,QAAS,qBACT,IAAKG,CACT,EAAK,CACD,QAAS,MACT,IAAKC,CACT,EAAK,CACD,QAAS,SACT,IAAKA,CACT,EAAK,CACD,QAAS,MACT,IAAKA,CACT,EAAK,CACD,QAAS,4BACT,IAAKC,CACT,EAAK,CAQD,QAAS,cACT,IAAKN,CACT,EAAK,CAGD,QAAS,0BACT,IAAKA,CACT,EAAK,CAED,QAAS,qBACT,IAAKA,CACT,EAAK,CAQD,QAAS,wBACT,IAAKS,EACT,CAAG,EAED,SAASE,GAAQC,EAASvI,EAAG,CACvBA,EAAI0H,GAAeD,IAIvBA,EAAY,GACZL,EAAOA,EAAK,QAAQmB,EAAQ,QAASA,EAAQ,GAAG,EACpD,CAEE,IAAIC,GAAW,CAAA,EACXC,GAAQrB,EACRsB,EAASD,GAAM,OAEnBE,EAAO,KAAOD,EAAS,GAAG,CACxB,QAAS1I,EAAI,EAAGmD,GAAI,EAAGe,GAAMmE,GAAO,OAAQlF,GAAIe,GAAKlE,EAAI,EAAEmD,GAAG,CAC5D,IAAIoF,GAAUF,GAAOrI,CAAC,EAGtB,GAFAsI,GAAQC,GAASvI,CAAC,EAEdoH,EAAK,SAAWsB,EAAQ,CAG1BA,EAAStB,EAAK,OACd,SAASuB,CACjB,CACA,CAEI,GAAIvB,EAAK,SAAWsB,EAClB,MAGFF,GAAS,KAAK,CAAC,EACfE,EAAStB,EAAK,MAClB,CAEE,OAAOoB,EACT,CAWA,SAASI,GAAkBC,EAAanD,EAAO7D,EAAM,CACnD,OAAI6D,IAAU,SACZmD,EAAcA,EAAY,OAAO7B,EAAYG,EAAgBtF,CAAI,CAAC,CAAC,EACnEgH,EAAY,KAAK,CACf,MAAOnD,EACP,KAAM7D,EACN,SAAUsF,EAAgBtF,CAAI,CACpC,CAAK,GAGIgH,CACT,CAEA,IAAIC,GAAsB,UAAY,CAUpC,SAASA,EAAOnD,EAAS,CACvBnD,EAAgB,KAAMsG,CAAM,EAE5BnD,EAAUA,GAAW,CAAA,EAEjBA,EAAQ,SACVA,EAAQ,OAAS,OAAO,OAAO,CAAA,EAAItB,EAAS,OAAQsB,EAAQ,MAAM,GAGpE,KAAK,QAAU,OAAO,OAAO,CAAA,EAAItB,EAAUsB,CAAO,EAClD,KAAK,MAAQ,CAAA,EACb,KAAK,YAAc,CAAA,CACvB,CAOE,OAAA5C,EAAa+F,EAAQ,CAAC,CACpB,IAAK,SACL,MAAO,SAAgBC,EAAO,CAC5B,IAAIC,EAAQ,KAEZD,EAAQ,OAAOA,GAAU,SAAW,CAACA,CAAK,EAAIA,EAC9C,IAAItD,EAAQ,KAAK,MACbE,EAAU,KAAK,QACfsD,EAAM,CAAA,EACV,YAAK,YAAY,QAAQ,SAAUC,EAAS,CAC1C,IAAItK,EAAS4G,EAAeC,EAAOyD,EAAQ,MAAOA,EAAQ,KAAMvD,CAAO,EAEnE/G,GACFqK,EAAI,KAAKrK,CAAM,CAEzB,CAAO,EACD2I,EAASwB,EAAM,KAAK,EAAE,EAAGpD,EAAS,SAAUD,EAAO7D,EAAM,CACvD,IAAIjD,EAAS4G,EAAeC,EAAOC,EAAO7D,EAAM8D,CAAO,EAEnD/G,GACFqK,EAAI,KAAKrK,CAAM,EAGb+G,EAAQ,SACVqD,EAAM,YAAcJ,GAAkBI,EAAM,YAAatD,EAAO7D,CAAI,EAE9E,CAAO,EAEG4D,EAAM,QACRwD,EAAI,KAAKxC,EAAYhB,CAAK,CAAC,EAGtBwD,EAAI,KAAK,EAAE,CACxB,CACA,CAAG,CAAC,EAEKH,CACT,EAAC,EAED,OAAAK,GAAiBL,kCC/mBV,SAASM,IAAgB,CAC/B,MAAMC,EAAQC,GAAA,EAUd,OATaC,EAAAA,QACZ,IACC,IAAIC,GACHH,IAAU,OACP,CAAE,GAAI,UAAW,GAAI,UAAW,UAAW,EAAA,EAC3C,CAAE,GAAI,UAAW,GAAI,UAAW,UAAW,EAAA,CAAK,EAErD,CAACA,CAAK,CAAA,CAGR,CAGO,SAASI,GAAqB5H,EAAc,CAClD,OAAOA,EAAK,QAAQ,gBAAiB,EAAE,EAAE,QAAQ,gBAAiB,EAAE,CACrE,CCbA,MAAM6H,GAA6BC,GAClCC,EAAS,CACR,KAAMC,EAAU,6BAA6B,EAC7C,UAAWC,EAAE,CAAO,CACpB,EACDC,EAAQ,CACPH,EAAS,CAAE,OAAQC,EAAU,SAAS,EAAG,EACzCD,EAAS,CAAE,OAAQC,EAAU,MAAM,EAAG,EACtCD,EAAS,CAAE,OAAQC,EAAU,MAAM,EAAG,MAAOG,GAAS,CAAG,CAAA,CACzD,CACF,EAEMC,GAA+BL,EAAS,CAC7C,KAAMC,EAAU,2BAA2B,EAC3C,OAAQA,EAAU,MAAM,EACxB,MAAOG,EAAE,EACT,UAAWF,EAAE,CACd,CAAC,EAEKI,GAAuBH,EAAQ,CACpCE,GACAP,EACD,CAAC,EAKM,SAASS,GAAoB,CACnC,SAAAC,EACA,SAAAC,CACD,EAGG,CACF,MAAMhB,EAAQC,GAAA,EACRgB,EAAOlB,GAAA,EACPmB,EAAYC,EAAAA,OAA0B,IAAI,EAC1C,CAACC,EAASC,CAAU,EAAIC,EAAAA,SAAsC,IAAI,EAClE,CAACC,EAAWC,CAAY,EAAIF,EAAAA,SAAwC,CAAA,CAAE,EAE5EG,EAAAA,UAAU,IAAM,CACf,SAASC,EAAcC,EAA4B,CAElD,GADIA,EAAa,SAAWT,EAAU,SAAS,eAC3C,YAAaS,EAAa,KAAM,OAEpC,MAAMpF,EAASsE,GAAqB,UAAUc,EAAa,KAAM,CAChE,KAAM,CAAC,eAAgB,MAAM,CAAA,CAC7B,EACD,GAAI,CAACpF,EAAO,QAAS,CACpB,QAAQ,MACP,mCACAoF,EAAa,KACbpF,EAAO,KAAA,EAER,MACD,CACA,KAAM,CAAE,KAAA/D,GAAS+D,EACb/D,EAAK,OAAS,gCACbA,EAAK,SAAW,WACnBgJ,EAAa,CAAA,CAAE,EAEhBH,EAAW7I,CAAI,GAEZA,EAAK,OAAS,6BACjBgJ,EAAcI,GAAU,CAAC,GAAGA,EAAOpJ,CAAI,CAAC,CAE1C,CACA,cAAO,iBAAiB,UAAWkJ,CAAa,EACzC,IAAM,CACZ,OAAO,oBAAoB,UAAWA,CAAa,CACpD,CACD,EAAG,CAAA,CAAE,EAEL,MAAMG,EAAc,CACnB,QAASrN,EAAAA,IAACsN,GAAA,CAAa,KAAM,GAAI,aAAW,UAAU,EACtD,KACCtN,EAAAA,IAACC,EAAA,CACA,KAAK,aACL,aAAW,SACX,UAAU,kBAAA,CAAA,EAGZ,KACCD,EAAAA,IAACC,EAAA,CACA,KAAK,SACL,aAAW,SACX,UAAU,6BAAA,CAAA,EAGZ,cACEA,EAAA,CAAK,KAAK,WAAW,aAAW,UAAU,UAAU,eAAA,CAAgB,CAAA,EAErE2M,GAAS,QAAU,SAAS,EAExBW,EAAkBR,EAAU,KAAK,CAAChL,EAAGC,IAAMD,EAAE,UAAYC,EAAE,SAAS,EACpEwL,EAAuB,CAC5B,KAAMxN,EAAAA,IAACC,EAAA,CAAK,KAAK,aAAa,aAAW,SAAS,EAClD,KAAMD,EAAAA,IAACC,EAAA,CAAK,KAAK,SAAS,aAAW,SAAS,EAC9C,cACEA,EAAA,CAAK,KAAK,WAAW,aAAW,UAAU,UAAU,eAAA,CAAgB,CAAA,EAIvE,OACCD,MAAAyN,EAAAA,SAAA,CACC,eAACC,GAAA,CAAe,UAAU,SAAS,KAAK,WACvC,SAAA1N,EAAAA,IAAC2N,GAAA,CACA,KAAMN,EACN,MAAOb,EACP,WAAY,GAEZ,SAAArM,EAAAA,KAAC,MAAA,CAAI,UAAU,YACd,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,+BACd,SAAA,CAAAH,MAAC,MAAG,UAAU,sBACZ,SAAAuN,EAAgB,IAAI,CAACK,EAAUC,IAE/B7N,MAAC,KAAA,CACA,SAAAG,EAAAA,KAAC,MAAA,CAAI,UAAU,6CACd,SAAA,CAAAA,OAAC,OAAA,CAAM,SAAA,CAAA0N,EAAQ,EAAE,GAAA,EAAC,EAClB7N,EAAAA,IAAC,OAAA,CAAM,SAAAwN,EAAqBI,EAAS,MAAM,EAAE,EAC7C5N,EAAAA,IAAC,MAAA,CAAI,UAAU,wEACb,WAAS,KAAA,CACX,CAAA,CAAA,CACD,CAAA,EAPQ4N,EAAS,UAAYA,EAAS,KAQvC,CACA,EACF,EACChB,GAAS,SAAW,OACpBzM,EAAAA,KAAC,MAAA,CAAI,UAAU,wDACd,SAAA,CAAAA,OAAC,OAAA,CAAM,SAAA,CAAAoN,EAAgB,OAAS,EAAE,GAAA,EAAC,EACnCvN,EAAAA,IAAC,OAAA,CAAM,SAAAwN,EAAqB,IAAA,CAAK,EACjCxN,EAAAA,IAAC,MAAA,CACA,UAAU,wEACV,wBAAyB,CACxB,OAAQyM,EAAK,OAAOb,GAAqBgB,EAAQ,KAAK,CAAC,CAAA,CACxD,CAAA,CACD,CAAA,CACD,EACG,KACJ5M,EAAAA,IAAC,SAAA,CACA,IAAK0M,EACL,MAAOF,EACP,IAAKD,EAAWC,EAChB,UAAU,4CACV,MAAO,CAAE,YAAahB,CAAA,CAAM,CAAA,CAC7B,EACD,EACArL,EAAAA,KAAC,MAAA,CAAI,UAAU,gBACd,SAAA,CAAAH,EAAAA,IAAC,SAAA,CACA,QAAS,IACR0M,EAAU,SAAS,eAAe,SAAS,OAAA,EAE5C,UAAU,eAEV,SAAA1M,EAAAA,IAACC,EAAA,CAAK,KAAK,UAAU,aAAW,aAAA,CAAc,CAAA,CAAA,EAE/CD,EAAAA,IAAC,IAAA,CACA,KAAMuM,EAAWC,EACjB,OAAO,SACP,IAAI,aACJ,UAAU,eAEV,SAAAxM,EAAAA,IAACC,EAAA,CAAK,KAAK,eAAe,aAAW,oBAAA,CAAqB,CAAA,CAAA,CAC3D,CAAA,CACD,CAAA,CAAA,CACD,CAAA,CAAA,EAEF,CAAA,CACD,CAEF,CC1IA,MAAM6N,GAAkBC,EAAQ,CAC/BA,EAAS,CACRC,KAAMD,EAAU,MAAM,EACtBE,SAAUF,EAAE,EAASG,SAAA,EAAWC,SAAA,EAChCC,UAAWL,GAAE,EACbhN,OAAQgN,GACPA,EAAS,CACRC,KAAMD,EAAQ,CAACA,EAAU,QAAQ,EAAGA,EAAU,QAAQ,CAAC,CAAC,EACxDM,QAASN,EAAE,EACXO,UAAWP,EAAE,CACd,CAAC,CACF,CACD,CAAC,EACDA,EAAS,CACRC,KAAMD,EAAQ,CAACA,EAAU,QAAQ,EAAGA,EAAU,QAAQ,CAAC,CAAC,EACxD/J,KAAM+J,EAAE,EACRO,UAAWP,EAAE,CACd,CAAC,EACDA,EAAS,CACRC,KAAMD,EAAU,MAAM,EACtBK,UAAWL,EAAU,EAAK,EAC1BrF,KAAMqF,EAAE,EAASG,SAAA,CAClB,CAAC,CAAA,CACD,EACKK,GAAuBR,GAAQD,EAAe,EAkJpD,SAASU,GAAqBC,EAAaC,EAAiC,CAC3E,OAAOA,EAAQD,CAAI,CACpB,CAEO,SAASE,GAAW,CAAExL,KAAAA,CAAK,EAAqB,CAYtD,KAAM,CAACyL,EAAOC,CAAQ,EAAIC,EAAAA,WAAWN,GAAsB,CAC1DO,QAAS,EACTX,UAAW,GACXH,SAAU,OACVe,MAAO,CAAA,CACR,CAAC,EACKvC,EAAOlB,GAAA,EACP,CAAEwD,QAAAA,EAASX,UAAAA,EAAWH,SAAAA,EAAUe,MAAAA,CAAM,EAAIJ,EAC1CK,EAAcC,GACnB,SAAS,IAAIC,gBAAgB,CAAEhM,KAAAA,CAAK,CAAC,CAAC,MAAM4L,CAAO,EACpD,EACA9B,OAAAA,EAAAA,UAAU,IAAM,CACf,GAAI,CAACgC,EAAa,OAElB,MAAMG,EAASC,KAAKC,MAAML,CAAW,EAC/BlH,EAASwG,GAAqBgB,UAAUH,CAAM,EACpD,GAAI,CAACrH,EAAOyH,QAAS,CACpBC,QAAQC,MAAM3H,EAAO2H,MAAMC,QAAA,CAAS,EACpC,MACD,CACA,UAAWC,KAAS7H,EAAO/D,KAC1B,OAAQ4L,EAAM5B,KAAA,CACb,IAAK,OAAQ,CACZ,KAAM,CAAEI,UAAAA,EAAW1F,KAAMuF,CAAS,EAAI2B,EACtCf,EAAUJ,IAAU,CAAE,GAAGA,EAAML,UAAAA,EAAWH,SAAAA,CAAS,EAAE,EACrD,KACD,CACA,IAAK,OAAQ,CACZ,KAAM,CAAElN,OAAAA,EAAQkN,SAAAA,EAAUG,UAAAA,CAAU,EAAIwB,EACxCf,EAAUJ,IAAU,CAAE,GAAGA,EAAMO,MAAOjO,EAAQkN,SAAAA,EAAUG,UAAAA,CAAU,EAAE,EACpE,KACD,CACA,IAAK,SACL,IAAK,SAAU,CACd,KAAM,CAAEJ,KAAAA,EAAMhK,KAAMqK,EAASC,UAAAA,CAAU,EAAIsB,EAC3Cf,EAAUJ,IAAU,CACnB,GAAGA,EACHO,MAAO,CAAC,GAAGP,EAAKO,MAAO,CAAEhB,KAAAA,EAAMK,QAAAA,EAASC,UAAAA,CAAU,CAAC,EAAEuB,KACpD,CAAC9N,EAAGC,IAAMD,EAAEuM,UAAYtM,EAAEsM,SAC3B,EACAF,UAAW,EACZ,EAAE,EACF,KACD,CACD,CAEF,EAAG,CAACa,CAAW,CAAC,EAGf9O,EAAAA,KAAC,MAAA,CAAI2P,UAAU,uDACdjQ,SAAA,CAAAM,EAAAA,KAAC,MAAA,CAAI2P,UAAU,uEACdjQ,SAAA,CAAAM,EAAAA,KAAC,MAAA,CAAI2P,UAAU,2BACbjQ,SAAA,CAAA,CAACuO,GACDpO,EAAAA,IAAC+P,GAAA,CACA5M,KAAAA,EACA6M,MAAOA,IAAM,CACZnB,EAAUJ,IAAU,CACnB,GAAGA,EACHR,SAAU,OACVe,MAAO,CAAA,EACPD,QAASN,EAAKM,QAAU,CACzB,EAAE,CACH,EACD,EAEAX,EACAjO,EAAAA,KAAAsN,WAAA,CACC5N,SAAA,CAAAG,EAAAA,IAAC,MAAA,CAAI8P,UAAU,oEACdjQ,SAAAG,EAAAA,IAACsN,IAAa2C,KAAK,SAAS,aAAW,gBAAgB,CAAA,CACxD,EACAjQ,EAAAA,IAACkQ,IAAS/M,KAAAA,CAAA,CAAY,CAAA,EACvB,EACG,IAAA,CAAA,CACL,EAEC,CAACiL,GAAaH,IAAa,cAC1B,IAAA,CAAE6B,UAAU,sBACXjQ,SAAAoO,IAAa,EACX,eACA,0BAA0BkC,OAAOlC,CAAQ,CAAC,GAAA,CAC9C,EAEA,CAACG,GAAaH,IAAa,QAC3BjO,EAAAA,IAACoQ,GAAA,CACAjN,KAAAA,EACAkN,QAASA,IAAM,CACdxB,EAAUJ,IAAU,CACnB,GAAGA,EACHR,SAAU,OACVe,MAAO,CAAA,CACR,EAAE,CACH,CAAA,CACD,CAAA,CAAA,CAEF,EACA7O,EAAAA,KAAC,MAAA,CAAI2P,UAAU,iCACdjQ,SAAA,CAAAG,EAAAA,IAAC,IAAA,CAAE8P,UAAU,0CAA0CjQ,SAAA,aAAA,CAAW,QACjE,MAAA,CAAIiQ,UAAU,wFACbjQ,SAAAmP,EAAMtN,IAAK4O,GACXtQ,EAAAA,IAAC,OAAA,CAEA,YAAWsQ,EAAKtC,KAChBuC,wBAAyB,CACxBC,OAAQ/D,EAAKgE,OAAO7E,GAAqB0E,EAAKjC,OAAO,CAAC,CACvD,CAAA,EAJKiC,EAAKhC,SAKX,CACA,CAAA,CACF,CAAA,CAAA,CACD,CAAA,CAAA,CACD,CAEF,CAEO,SAASyB,GAAW,CAC1B5M,KAAAA,EACA6M,MAAAA,CACD,EAGG,CACF,MAAMU,EAAUC,GAAA,EACVC,EAAkBC,GAAA,EAClBC,EAAcnE,EAAAA,OAAOqD,CAAK,EAChC/C,OAAAA,EAAAA,UAAU,IAAM,CACf6D,EAAYC,QAAUf,CACvB,EAAG,CAACA,CAAK,CAAC,EACV/C,EAAAA,UAAU,IAAM,CACXyD,EAAQ1M,MAAMwL,SACjBsB,EAAYC,UAAA,CAEd,EAAG,CAACL,EAAQ1M,IAAI,CAAC,EAEhB7D,EAAAA,KAACuQ,EAAQM,KAAR,CAAaC,OAAO,OAAOC,OAAO,QAAQpB,UAAU,SACnDjQ,SAAA,CAAA+Q,QACA,QAAA,CAAM5C,KAAK,SAAS7K,KAAK,OAAOqF,MAAOrF,CAAA,CAAM,EAC9CnD,EAAAA,IAACK,EAAA,CACAgO,QAASqC,EAAQ9B,QAAU,OAAS,YAAc,mBAElD/O,SAAAG,EAAAA,IAAC,SAAA,CACAgO,KAAK,SACL7K,KAAK,SACLqF,MAAM,MACNsH,UAAU,oEAETjQ,SAAA6Q,EAAQ9B,QAAU,OAClB5O,EAAAA,IAACC,EAAA,CAAKkD,KAAK,eAAA,CAAgB,EAE3BnD,EAAAA,IAACsN,GAAA,CAAa2C,KAAK,SAAS,EAE9B,CAAA,CACD,CAAA,CAAA,CACD,CAEF,CAEO,SAASG,GAAU,CACzBjN,KAAAA,EACAkN,QAAAA,CACD,EAGG,CACF,MAAMK,EAAUC,GAAA,EACVC,EAAkBC,GAAA,EAClBM,EAAgBxE,EAAAA,OAAO0D,CAAO,EACpCpD,OAAAA,EAAAA,UAAU,IAAM,CACfkE,EAAcJ,QAAUV,CACzB,EAAG,CAACA,CAAO,CAAC,EACZpD,EAAAA,UAAU,IAAM,CACXyD,EAAQ1M,MAAMwL,SACjB2B,EAAcJ,UAAA,CAEhB,EAAG,CAACL,EAAQ1M,IAAI,CAAC,EAEhB7D,EAAAA,KAACuQ,EAAQM,KAAR,CAAaC,OAAO,OAAOC,OAAO,QAAQpB,UAAU,SACnDjQ,SAAA,CAAA+Q,QACA,QAAA,CAAM5C,KAAK,SAAS7K,KAAK,OAAOqF,MAAOrF,CAAA,CAAM,EAC9CnD,EAAAA,IAACK,EAAA,CACAgO,QAASqC,EAAQ9B,QAAU,OAAS,cAAgB,oBAEpD/O,SAAAG,EAAAA,IAAC,SAAA,CACAgO,KAAK,SACL7K,KAAK,SACLqF,MAAM,QACNsH,UAAU,oEAETjQ,SAAA6Q,EAAQ9B,QAAU,OAClB5O,EAAAA,IAACC,GAAKkD,KAAK,OAAA,CAAQ,EAEnBnD,EAAAA,IAACC,GAAKkD,KAAK,QAAQ2M,UAAU,gBAAgBG,KAAK,SAAS,EAE7D,CAAA,CACD,CAAA,CAAA,CACD,CAEF,CAEO,SAASC,GAAS,CACxB/M,KAAAA,EACAiO,OAAAA,CACD,EAGG,CACF,MAAMV,EAAUC,GAAA,EACVC,EAAkBC,GAAA,EAClBQ,EAAe1E,EAAAA,OAAOyE,CAAM,EAClCnE,OAAAA,EAAAA,UAAU,IAAM,CACfoE,EAAaN,QAAUK,CACxB,EAAG,CAACA,CAAM,CAAC,EACXnE,EAAAA,UAAU,IAAM,CACXyD,EAAQ1M,MAAMwL,SACjB6B,EAAaN,UAAA,CAEf,EAAG,CAACL,EAAQ1M,IAAI,CAAC,EAEhB7D,EAAAA,KAACuQ,EAAQM,KAAR,CAAaC,OAAO,OAAOC,OAAO,QAAQpB,UAAU,SACnDjQ,SAAA,CAAA+Q,QACA,QAAA,CAAM5C,KAAK,SAAS7K,KAAK,OAAOqF,MAAOrF,CAAA,CAAM,EAC9CnD,EAAAA,IAACK,EAAA,CACAgO,QAASqC,EAAQ9B,QAAU,OAAS,aAAe,oBAEnD/O,SAAAG,EAAAA,IAAC,SAAA,CACAgO,KAAK,SACL7K,KAAK,SACLqF,MAAM,OACNsH,UAAU,oEAETjQ,SAAA6Q,EAAQ9B,QAAU,OAClB5O,EAAAA,IAACC,GAAKkD,KAAK,MAAA,CAAO,EAElBnD,EAAAA,IAACC,GAAKkD,KAAK,OAAO2M,UAAU,gBAAgBG,KAAK,SAAS,EAE5D,CAAA,CACD,CAAA,CAAA,CACD,CAEF,CCtcO,SAASqB,GAAM,CACrB,QAASC,EACT,eAAA7R,EACA,QAAAE,EACA,WAAAD,CACD,EAKG,CACF,OACCK,EAAAA,IAACR,GAAA,CACA,kBAAmB+R,GAAmB,QACtC,eAAA7R,EACA,QAAAE,EACA,WAAAD,EAEA,SAAAK,EAAAA,IAACwR,IAAO,kBAAAD,CAAA,CAAsC,CAAA,CAAA,CAGjD,CAEO,SAASC,GAAO,CACtB,kBAAAD,CACD,EAEG,CACF,KAAM,CAACE,EAAkBC,CAAmB,EAAI5E,EAAAA,SAAS,CAAC,EAG1D,GAAI,CAFkB6E,GAAA,EAGrB,OACCxR,EAAAA,KAAC,MAAA,CAAI,UAAU,cACd,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,yCACd,SAAA,CAAAH,EAAAA,IAAC,IAAA,CAAE,UAAU,qBAAqB,SAAA,gBAAa,EAC/CA,EAAAA,IAAC,IAAA,CAAE,UAAU,UAAU,SAAA,wEAAA,CAGvB,CAAA,EACD,EACAA,EAAAA,IAAC,MAAA,CAAI,UAAU,MAAA,CAAO,EACtBA,EAAAA,IAAC,IAAA,CAAE,UAAU,OAAO,SAAA,sDAEpB,EACAA,EAAAA,IAAC4R,GAAA,CAAkB,IAAI,0DAAA,CAA2D,CAAA,EACnF,EAIF,GAAI,CAACL,EACJ,aACE,MAAA,CAAI,UAAU,kDACd,SAAAvR,EAAAA,IAAC,IAAA,CAAE,mCAAuB,CAAA,CAC3B,EAIF,GAAIuR,EAAkB,KAAK,OAAS,SACnC,OAAOvR,EAAAA,IAAC2O,GAAA,CAAW,KAAM4C,EAAkB,IAAA,CAAM,EAGlD,GAAIA,EAAkB,KAAK,OAAS,UAAW,CAC9C,KAAM,CAAE,SAAAhF,GAAagF,EAAkB,KACvC,OACCpR,EAAAA,KAAC,MAAA,CACA,UAAU,wDAGT,SAAA,CAAAoR,EAAkB,KAAK,UAAU,IAAK/E,GACtCxM,EAAAA,IAAC,MAAA,CACA,SAAAA,EAAAA,IAACsM,GAAA,CAAoB,SAAAC,EAAoB,SAAAC,CAAA,CAAoB,CAAA,EADpDA,CAEV,CACA,EACDxM,EAAAA,IAAC,MAAA,CAAI,UAAU,iBACd,SAAAG,EAAAA,KAAC,SAAA,CACA,QAAS,IAAMuR,EAAqB5N,GAAMA,EAAI,CAAC,EAC/C,UAAU,mEAEV,SAAA,CAAA9D,EAAAA,IAACC,EAAA,CAAK,KAAK,UAAU,cAAW,GAAC,EAAE,kBAAA,CAAA,CAAA,CACpC,CACD,CAAA,CAAA,EAdKwR,CAAA,CAiBR,CAEA,aACE,MAAA,CAAI,UAAU,kDACd,SAAAzR,EAAAA,IAAC,IAAA,CAAE,mCAAuB,CAAA,CAC3B,CAEF","x_google_ignoreList":[1,2,3,4,5]}
@@ -1,4 +1,4 @@
1
- import{_ as s,c as xt,l as E,d as j,ac as kt,ad as vt,ae as _t,af as bt,D as wt,ag as St,z as Et}from"./mermaid.core-D3pfbveR.js";import{d as nt}from"./arc-DRlf7jq7.js";import"./mdx-qcm_nkgI.js";import"./jsx-runtime-B2LUJHWf.js";import"./_-C9pypk8E.js";import"./clsx-B-dksMZM.js";import"./chunk-QMGIS6GS-D3fke51R.js";import"./index-C4WpsDjj.js";import"./epic-video-7egGi8C6.js";import"./index-DXWoNbMw.js";import"./misc-D-dDb89H.js";import"./tooltip-DaEk9smk.js";import"./pe-Dd-3Vdrv.js";import"./online-DRbKQRzx.js";import"./loading-j2MezYUg.js";import"./user-CQfYiwjz.js";import"./workshop-config-BOTAWJa-.js";import"./progress-bar-BA_tln9A.js";var Q=function(){var n=s(function(x,i,a,c){for(a=a||{},c=x.length;c--;a[x[c]]=i);return a},"o"),t=[6,8,10,11,12,14,16,17,20,21],e=[1,9],l=[1,10],r=[1,11],d=[1,12],h=[1,13],f=[1,16],m=[1,17],p={trace:s(function(){},"trace"),yy:{},symbols_:{error:2,start:3,timeline:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,title:11,acc_title:12,acc_title_value:13,acc_descr:14,acc_descr_value:15,acc_descr_multiline_value:16,section:17,period_statement:18,event_statement:19,period:20,event:21,$accept:0,$end:1},terminals_:{2:"error",4:"timeline",6:"EOF",8:"SPACE",10:"NEWLINE",11:"title",12:"acc_title",13:"acc_title_value",14:"acc_descr",15:"acc_descr_value",16:"acc_descr_multiline_value",17:"section",20:"period",21:"event"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,1],[9,1],[18,1],[19,1]],performAction:s(function(i,a,c,u,y,o,w){var v=o.length-1;switch(y){case 1:return o[v-1];case 2:this.$=[];break;case 3:o[v-1].push(o[v]),this.$=o[v-1];break;case 4:case 5:this.$=o[v];break;case 6:case 7:this.$=[];break;case 8:u.getCommonDb().setDiagramTitle(o[v].substr(6)),this.$=o[v].substr(6);break;case 9:this.$=o[v].trim(),u.getCommonDb().setAccTitle(this.$);break;case 10:case 11:this.$=o[v].trim(),u.getCommonDb().setAccDescription(this.$);break;case 12:u.addSection(o[v].substr(8)),this.$=o[v].substr(8);break;case 15:u.addTask(o[v],0,""),this.$=o[v];break;case 16:u.addEvent(o[v].substr(2)),this.$=o[v];break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},n(t,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:e,12:l,14:r,16:d,17:h,18:14,19:15,20:f,21:m},n(t,[2,7],{1:[2,1]}),n(t,[2,3]),{9:18,11:e,12:l,14:r,16:d,17:h,18:14,19:15,20:f,21:m},n(t,[2,5]),n(t,[2,6]),n(t,[2,8]),{13:[1,19]},{15:[1,20]},n(t,[2,11]),n(t,[2,12]),n(t,[2,13]),n(t,[2,14]),n(t,[2,15]),n(t,[2,16]),n(t,[2,4]),n(t,[2,9]),n(t,[2,10])],defaultActions:{},parseError:s(function(i,a){if(a.recoverable)this.trace(i);else{var c=new Error(i);throw c.hash=a,c}},"parseError"),parse:s(function(i){var a=this,c=[0],u=[],y=[null],o=[],w=this.table,v="",N=0,P=0,V=2,U=1,H=o.slice.call(arguments,1),g=Object.create(this.lexer),b={yy:{}};for(var L in this.yy)Object.prototype.hasOwnProperty.call(this.yy,L)&&(b.yy[L]=this.yy[L]);g.setInput(i,b.yy),b.yy.lexer=g,b.yy.parser=this,typeof g.yylloc>"u"&&(g.yylloc={});var M=g.yylloc;o.push(M);var W=g.options&&g.options.ranges;typeof b.yy.parseError=="function"?this.parseError=b.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Z(T){c.length=c.length-2*T,y.length=y.length-T,o.length=o.length-T}s(Z,"popStack");function tt(){var T;return T=u.pop()||g.lex()||U,typeof T!="number"&&(T instanceof Array&&(u=T,T=u.pop()),T=a.symbols_[T]||T),T}s(tt,"lex");for(var S,A,I,J,R={},B,$,et,O;;){if(A=c[c.length-1],this.defaultActions[A]?I=this.defaultActions[A]:((S===null||typeof S>"u")&&(S=tt()),I=w[A]&&w[A][S]),typeof I>"u"||!I.length||!I[0]){var K="";O=[];for(B in w[A])this.terminals_[B]&&B>V&&O.push("'"+this.terminals_[B]+"'");g.showPosition?K="Parse error on line "+(N+1)+`:
1
+ import{_ as s,c as xt,l as E,d as j,ac as kt,ad as vt,ae as _t,af as bt,D as wt,ag as St,z as Et}from"./mermaid.core-DUlGGmFz.js";import{d as nt}from"./arc-BVQduULV.js";import"./mdx-Bx84e4TR.js";import"./jsx-runtime-BcujL2Aj.js";import"./_-v6PvHZ90.js";import"./clsx-B-dksMZM.js";import"./chunk-QMGIS6GS-Cnm5uIBY.js";import"./index-kpJjamgW.js";import"./epic-video-VKhk-6Mv.js";import"./index-BSUgjf5i.js";import"./misc-CJXb1d0J.js";import"./tooltip-Dm5SBVY5.js";import"./pe-DBKBCHmz.js";import"./online-CgtIvFKH.js";import"./loading-BQiZCXl-.js";import"./user-C6NChLGC.js";import"./workshop-config-Cx9qZQEC.js";import"./progress-bar-DlBnagEk.js";var Q=function(){var n=s(function(x,i,a,c){for(a=a||{},c=x.length;c--;a[x[c]]=i);return a},"o"),t=[6,8,10,11,12,14,16,17,20,21],e=[1,9],l=[1,10],r=[1,11],d=[1,12],h=[1,13],f=[1,16],m=[1,17],p={trace:s(function(){},"trace"),yy:{},symbols_:{error:2,start:3,timeline:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,title:11,acc_title:12,acc_title_value:13,acc_descr:14,acc_descr_value:15,acc_descr_multiline_value:16,section:17,period_statement:18,event_statement:19,period:20,event:21,$accept:0,$end:1},terminals_:{2:"error",4:"timeline",6:"EOF",8:"SPACE",10:"NEWLINE",11:"title",12:"acc_title",13:"acc_title_value",14:"acc_descr",15:"acc_descr_value",16:"acc_descr_multiline_value",17:"section",20:"period",21:"event"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,1],[9,1],[18,1],[19,1]],performAction:s(function(i,a,c,u,y,o,w){var v=o.length-1;switch(y){case 1:return o[v-1];case 2:this.$=[];break;case 3:o[v-1].push(o[v]),this.$=o[v-1];break;case 4:case 5:this.$=o[v];break;case 6:case 7:this.$=[];break;case 8:u.getCommonDb().setDiagramTitle(o[v].substr(6)),this.$=o[v].substr(6);break;case 9:this.$=o[v].trim(),u.getCommonDb().setAccTitle(this.$);break;case 10:case 11:this.$=o[v].trim(),u.getCommonDb().setAccDescription(this.$);break;case 12:u.addSection(o[v].substr(8)),this.$=o[v].substr(8);break;case 15:u.addTask(o[v],0,""),this.$=o[v];break;case 16:u.addEvent(o[v].substr(2)),this.$=o[v];break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},n(t,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:e,12:l,14:r,16:d,17:h,18:14,19:15,20:f,21:m},n(t,[2,7],{1:[2,1]}),n(t,[2,3]),{9:18,11:e,12:l,14:r,16:d,17:h,18:14,19:15,20:f,21:m},n(t,[2,5]),n(t,[2,6]),n(t,[2,8]),{13:[1,19]},{15:[1,20]},n(t,[2,11]),n(t,[2,12]),n(t,[2,13]),n(t,[2,14]),n(t,[2,15]),n(t,[2,16]),n(t,[2,4]),n(t,[2,9]),n(t,[2,10])],defaultActions:{},parseError:s(function(i,a){if(a.recoverable)this.trace(i);else{var c=new Error(i);throw c.hash=a,c}},"parseError"),parse:s(function(i){var a=this,c=[0],u=[],y=[null],o=[],w=this.table,v="",N=0,P=0,V=2,U=1,H=o.slice.call(arguments,1),g=Object.create(this.lexer),b={yy:{}};for(var L in this.yy)Object.prototype.hasOwnProperty.call(this.yy,L)&&(b.yy[L]=this.yy[L]);g.setInput(i,b.yy),b.yy.lexer=g,b.yy.parser=this,typeof g.yylloc>"u"&&(g.yylloc={});var M=g.yylloc;o.push(M);var W=g.options&&g.options.ranges;typeof b.yy.parseError=="function"?this.parseError=b.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Z(T){c.length=c.length-2*T,y.length=y.length-T,o.length=o.length-T}s(Z,"popStack");function tt(){var T;return T=u.pop()||g.lex()||U,typeof T!="number"&&(T instanceof Array&&(u=T,T=u.pop()),T=a.symbols_[T]||T),T}s(tt,"lex");for(var S,A,I,J,R={},B,$,et,O;;){if(A=c[c.length-1],this.defaultActions[A]?I=this.defaultActions[A]:((S===null||typeof S>"u")&&(S=tt()),I=w[A]&&w[A][S]),typeof I>"u"||!I.length||!I[0]){var K="";O=[];for(B in w[A])this.terminals_[B]&&B>V&&O.push("'"+this.terminals_[B]+"'");g.showPosition?K="Parse error on line "+(N+1)+`:
2
2
  `+g.showPosition()+`
3
3
  Expecting `+O.join(", ")+", got '"+(this.terminals_[S]||S)+"'":K="Parse error on line "+(N+1)+": Unexpected "+(S==U?"end of input":"'"+(this.terminals_[S]||S)+"'"),this.parseError(K,{text:g.match,token:this.terminals_[S]||S,line:g.yylineno,loc:M,expected:O})}if(I[0]instanceof Array&&I.length>1)throw new Error("Parse Error: multiple actions possible at state: "+A+", token: "+S);switch(I[0]){case 1:c.push(S),y.push(g.yytext),o.push(g.yylloc),c.push(I[1]),S=null,P=g.yyleng,v=g.yytext,N=g.yylineno,M=g.yylloc;break;case 2:if($=this.productions_[I[1]][1],R.$=y[y.length-$],R._$={first_line:o[o.length-($||1)].first_line,last_line:o[o.length-1].last_line,first_column:o[o.length-($||1)].first_column,last_column:o[o.length-1].last_column},W&&(R._$.range=[o[o.length-($||1)].range[0],o[o.length-1].range[1]]),J=this.performAction.apply(R,[v,P,N,b.yy,I[1],y,o].concat(H)),typeof J<"u")return J;$&&(c=c.slice(0,-1*$*2),y=y.slice(0,-1*$),o=o.slice(0,-1*$)),c.push(this.productions_[I[1]][0]),y.push(R.$),o.push(R._$),et=w[c[c.length-2]][c[c.length-1]],c.push(et);break;case 3:return!0}}return!0},"parse")},k=function(){var x={EOF:1,parseError:s(function(a,c){if(this.yy.parser)this.yy.parser.parseError(a,c);else throw new Error(a)},"parseError"),setInput:s(function(i,a){return this.yy=a||this.yy||{},this._input=i,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:s(function(){var i=this._input[0];this.yytext+=i,this.yyleng++,this.offset++,this.match+=i,this.matched+=i;var a=i.match(/(?:\r\n?|\n).*/g);return a?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),i},"input"),unput:s(function(i){var a=i.length,c=i.split(/(?:\r\n?|\n)/g);this._input=i+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-a),this.offset-=a;var u=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),c.length-1&&(this.yylineno-=c.length-1);var y=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:c?(c.length===u.length?this.yylloc.first_column:0)+u[u.length-c.length].length-c[0].length:this.yylloc.first_column-a},this.options.ranges&&(this.yylloc.range=[y[0],y[0]+this.yyleng-a]),this.yyleng=this.yytext.length,this},"unput"),more:s(function(){return this._more=!0,this},"more"),reject:s(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
4
4
  `+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:s(function(i){this.unput(this.match.slice(i))},"less"),pastInput:s(function(){var i=this.matched.substr(0,this.matched.length-this.match.length);return(i.length>20?"...":"")+i.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:s(function(){var i=this.match;return i.length<20&&(i+=this._input.substr(0,20-i.length)),(i.substr(0,20)+(i.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:s(function(){var i=this.pastInput(),a=new Array(i.length+1).join("-");return i+this.upcomingInput()+`
@@ -59,4 +59,4 @@ Expecting `+O.join(", ")+", got '"+(this.terminals_[S]||S)+"'":K="Parse error on
59
59
  filter: brightness(120%);
60
60
  }
61
61
  `,"getStyles"),qt=Gt,he={db:at,renderer:Ot,parser:Tt,styles:qt};export{he as diagram};
62
- //# sourceMappingURL=timeline-definition-RI47OAVP-BfpaCaB_.js.map
62
+ //# sourceMappingURL=timeline-definition-RI47OAVP-COW1irsJ.js.map