@epic-web/workshop-app 6.69.1 → 6.71.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (225) hide show
  1. package/build/client/assets/{_-BnmXymJG.js → _-dWSrc4Ox.js} +2 -2
  2. package/build/client/assets/{_-BnmXymJG.js.map → _-dWSrc4Ox.js.map} +1 -1
  3. package/build/client/assets/{_basePickBy-D6pFkWVF.js → _basePickBy-D77BeQbR.js} +2 -2
  4. package/build/client/assets/{_basePickBy-D6pFkWVF.js.map → _basePickBy-D77BeQbR.js.map} +1 -1
  5. package/build/client/assets/{_baseUniq-BbljtzXr.js → _baseUniq-DTO-tFvD.js} +2 -2
  6. package/build/client/assets/{_baseUniq-BbljtzXr.js.map → _baseUniq-DTO-tFvD.js.map} +1 -1
  7. package/build/client/assets/{_exerciseNumber-77g7-L-x.js → _exerciseNumber-DgMb13KP.js} +2 -2
  8. package/build/client/assets/{_exerciseNumber-77g7-L-x.js.map → _exerciseNumber-DgMb13KP.js.map} +1 -1
  9. package/build/client/assets/{_exerciseNumber_._stepNumber.index-DYb7kg06.js → _exerciseNumber_._stepNumber.index-WLW-sVZ0.js} +2 -2
  10. package/build/client/assets/{_exerciseNumber_._stepNumber.index-DYb7kg06.js.map → _exerciseNumber_._stepNumber.index-WLW-sVZ0.js.map} +1 -1
  11. package/build/client/assets/{_exerciseNumber_.finished-CGoPhVVF.js → _exerciseNumber_.finished-DkAs61X_.js} +2 -2
  12. package/build/client/assets/_exerciseNumber_.finished-DkAs61X_.js.map +1 -0
  13. package/build/client/assets/_extra-fwsy2qkP.js +2 -0
  14. package/build/client/assets/_extra-fwsy2qkP.js.map +1 -0
  15. package/build/client/assets/_layout-BQ8VYaze.js +2 -0
  16. package/build/client/assets/_layout-BQ8VYaze.js.map +1 -0
  17. package/build/client/assets/_layout-DR0LQ06M.js +2 -0
  18. package/build/client/assets/_layout-DR0LQ06M.js.map +1 -0
  19. package/build/client/assets/{accordion-CzXT3k43.js → accordion-CQ7oujC6.js} +2 -2
  20. package/build/client/assets/{accordion-CzXT3k43.js.map → accordion-CQ7oujC6.js.map} +1 -1
  21. package/build/client/assets/{account-Cs3Te0is.js → account-C96cpeZR.js} +2 -2
  22. package/build/client/assets/{account-Cs3Te0is.js.map → account-C96cpeZR.js.map} +1 -1
  23. package/build/client/assets/app-CJniokic.js +2 -0
  24. package/build/client/assets/{app-TcFAQB2o.js.map → app-CJniokic.js.map} +1 -1
  25. package/build/client/assets/{arc-BHxP6xxO.js → arc-ChVm3d4e.js} +2 -2
  26. package/build/client/assets/{arc-BHxP6xxO.js.map → arc-ChVm3d4e.js.map} +1 -1
  27. package/build/client/assets/{architectureDiagram-VXUJARFQ-oEJHJt7x.js → architectureDiagram-VXUJARFQ-DkqyKZ50.js} +2 -2
  28. package/build/client/assets/{architectureDiagram-VXUJARFQ-oEJHJt7x.js.map → architectureDiagram-VXUJARFQ-DkqyKZ50.js.map} +1 -1
  29. package/build/client/assets/{blockDiagram-VD42YOAC-7xzSJqoM.js → blockDiagram-VD42YOAC-Cqa8Z0qT.js} +2 -2
  30. package/build/client/assets/{blockDiagram-VD42YOAC-7xzSJqoM.js.map → blockDiagram-VD42YOAC-Cqa8Z0qT.js.map} +1 -1
  31. package/build/client/assets/{button-CIlVtsau.js → button-Cd-ekki5.js} +2 -2
  32. package/build/client/assets/{button-CIlVtsau.js.map → button-Cd-ekki5.js.map} +1 -1
  33. package/build/client/assets/{c4Diagram-YG6GDRKO-BUdT9rCJ.js → c4Diagram-YG6GDRKO-BHQRSJ1P.js} +2 -2
  34. package/build/client/assets/{c4Diagram-YG6GDRKO-BUdT9rCJ.js.map → c4Diagram-YG6GDRKO-BHQRSJ1P.js.map} +1 -1
  35. package/build/client/assets/{cache-MJu_dqFS.js → cache-CAr50MIB.js} +2 -2
  36. package/build/client/assets/{cache-MJu_dqFS.js.map → cache-CAr50MIB.js.map} +1 -1
  37. package/build/client/assets/channel-B7uExpgv.js +2 -0
  38. package/build/client/assets/{channel-BLJkdd1O.js.map → channel-B7uExpgv.js.map} +1 -1
  39. package/build/client/assets/{chunk-4BX2VUAB-qrzenNNi.js → chunk-4BX2VUAB-BOJM4J9w.js} +2 -2
  40. package/build/client/assets/{chunk-4BX2VUAB-qrzenNNi.js.map → chunk-4BX2VUAB-BOJM4J9w.js.map} +1 -1
  41. package/build/client/assets/{chunk-55IACEB6-BOr0rES3.js → chunk-55IACEB6-CO_GT_87.js} +2 -2
  42. package/build/client/assets/{chunk-55IACEB6-BOr0rES3.js.map → chunk-55IACEB6-CO_GT_87.js.map} +1 -1
  43. package/build/client/assets/{chunk-B4BG7PRW-C2qQTBXm.js → chunk-B4BG7PRW-CqfZTumF.js} +2 -2
  44. package/build/client/assets/{chunk-B4BG7PRW-C2qQTBXm.js.map → chunk-B4BG7PRW-CqfZTumF.js.map} +1 -1
  45. package/build/client/assets/{chunk-DI55MBZ5-CSfEUcAq.js → chunk-DI55MBZ5-CxSXOmoK.js} +2 -2
  46. package/build/client/assets/{chunk-DI55MBZ5-CSfEUcAq.js.map → chunk-DI55MBZ5-CxSXOmoK.js.map} +1 -1
  47. package/build/client/assets/{chunk-FMBD7UC4-CyJoWksV.js → chunk-FMBD7UC4-ChHVMdVq.js} +2 -2
  48. package/build/client/assets/{chunk-FMBD7UC4-CyJoWksV.js.map → chunk-FMBD7UC4-ChHVMdVq.js.map} +1 -1
  49. package/build/client/assets/{chunk-QN33PNHL-BpbvTQdp.js → chunk-QN33PNHL-DKEBwj3f.js} +2 -2
  50. package/build/client/assets/{chunk-QN33PNHL-BpbvTQdp.js.map → chunk-QN33PNHL-DKEBwj3f.js.map} +1 -1
  51. package/build/client/assets/{chunk-QZHKN3VN-C2RN0CtQ.js → chunk-QZHKN3VN-Cu5tuE5n.js} +2 -2
  52. package/build/client/assets/{chunk-QZHKN3VN-C2RN0CtQ.js.map → chunk-QZHKN3VN-Cu5tuE5n.js.map} +1 -1
  53. package/build/client/assets/{chunk-TZMSLE5B-0z8lxtDn.js → chunk-TZMSLE5B-BpvH1fVS.js} +2 -2
  54. package/build/client/assets/{chunk-TZMSLE5B-0z8lxtDn.js.map → chunk-TZMSLE5B-BpvH1fVS.js.map} +1 -1
  55. package/build/client/assets/classDiagram-2ON5EDUG-BjjlpwdW.js +2 -0
  56. package/build/client/assets/{classDiagram-2ON5EDUG-_kfNpv_f.js.map → classDiagram-2ON5EDUG-BjjlpwdW.js.map} +1 -1
  57. package/build/client/assets/classDiagram-v2-WZHVMYZB-BjjlpwdW.js +2 -0
  58. package/build/client/assets/{classDiagram-v2-WZHVMYZB-_kfNpv_f.js.map → classDiagram-v2-WZHVMYZB-BjjlpwdW.js.map} +1 -1
  59. package/build/client/assets/clone-DRkw5ylZ.js +2 -0
  60. package/build/client/assets/{clone-CztDUJhf.js.map → clone-DRkw5ylZ.js.map} +1 -1
  61. package/build/client/assets/{cose-bilkent-S5V4N54A-DQM-J4RL.js → cose-bilkent-S5V4N54A-9tAqXXXx.js} +2 -2
  62. package/build/client/assets/{cose-bilkent-S5V4N54A-DQM-J4RL.js.map → cose-bilkent-S5V4N54A-9tAqXXXx.js.map} +1 -1
  63. package/build/client/assets/{dagre-6UL2VRFP-BdfvKPZ9.js → dagre-6UL2VRFP-DdQahM76.js} +2 -2
  64. package/build/client/assets/{dagre-6UL2VRFP-BdfvKPZ9.js.map → dagre-6UL2VRFP-DdQahM76.js.map} +1 -1
  65. package/build/client/assets/{db-x6v-Uxrh.js → db-DAnX-T3_.js} +2 -2
  66. package/build/client/assets/{db-x6v-Uxrh.js.map → db-DAnX-T3_.js.map} +1 -1
  67. package/build/client/assets/{diagram-PSM6KHXK-CgwBEb3G.js → diagram-PSM6KHXK-D2ghOCFR.js} +2 -2
  68. package/build/client/assets/{diagram-PSM6KHXK-CgwBEb3G.js.map → diagram-PSM6KHXK-D2ghOCFR.js.map} +1 -1
  69. package/build/client/assets/{diagram-QEK2KX5R-DEaXdLXz.js → diagram-QEK2KX5R-CVdPnwKa.js} +2 -2
  70. package/build/client/assets/{diagram-QEK2KX5R-DEaXdLXz.js.map → diagram-QEK2KX5R-CVdPnwKa.js.map} +1 -1
  71. package/build/client/assets/{diagram-S2PKOQOG-Dq5QQWqq.js → diagram-S2PKOQOG-ByHcRNai.js} +2 -2
  72. package/build/client/assets/{diagram-S2PKOQOG-Dq5QQWqq.js.map → diagram-S2PKOQOG-ByHcRNai.js.map} +1 -1
  73. package/build/client/assets/{dialog-DnpUg3VT.js → dialog-CzO65Z5w.js} +3 -3
  74. package/build/client/assets/{dialog-DnpUg3VT.js.map → dialog-CzO65Z5w.js.map} +1 -1
  75. package/build/client/assets/{diff-CxEbhF8Q.js → diff-BhWzqoVN.js} +2 -2
  76. package/build/client/assets/{diff-CxEbhF8Q.js.map → diff-BhWzqoVN.js.map} +1 -1
  77. package/build/client/assets/{diff-eAvgXb3f.js → diff-DC-wn6-x.js} +2 -2
  78. package/build/client/assets/{diff-eAvgXb3f.js.map → diff-DC-wn6-x.js.map} +1 -1
  79. package/build/client/assets/{discord-DlU9y5Iz.js → discord-BJkw0IrB.js} +2 -2
  80. package/build/client/assets/{discord-DlU9y5Iz.js.map → discord-BJkw0IrB.js.map} +1 -1
  81. package/build/client/assets/{discord-CuxZiU8E.js → discord-r3m19sUM.js} +2 -2
  82. package/build/client/assets/discord-r3m19sUM.js.map +1 -0
  83. package/build/client/assets/{epic-video-Bx8Ctiez.js → epic-video-8Hv_HMMr.js} +2 -2
  84. package/build/client/assets/{epic-video-Bx8Ctiez.js.map → epic-video-8Hv_HMMr.js.map} +1 -1
  85. package/build/client/assets/{epic-video-BVcJzJzi.js → epic-video-D0drHmgC.js} +2 -2
  86. package/build/client/assets/{epic-video-BVcJzJzi.js.map → epic-video-D0drHmgC.js.map} +1 -1
  87. package/build/client/assets/{erDiagram-Q2GNP2WA-CW73Zw0q.js → erDiagram-Q2GNP2WA-CBRWzQzK.js} +2 -2
  88. package/build/client/assets/{erDiagram-Q2GNP2WA-CW73Zw0q.js.map → erDiagram-Q2GNP2WA-CBRWzQzK.js.map} +1 -1
  89. package/build/client/assets/{error-boundary-DFBd6s0g.js → error-boundary-DVp6wKiz.js} +2 -2
  90. package/build/client/assets/{error-boundary-DFBd6s0g.js.map → error-boundary-DVp6wKiz.js.map} +1 -1
  91. package/build/client/assets/{finished-CmV4aFjA.js → finished-CiVHAeSV.js} +2 -2
  92. package/build/client/assets/{finished-CmV4aFjA.js.map → finished-CiVHAeSV.js.map} +1 -1
  93. package/build/client/assets/{flowDiagram-NV44I4VS-BbxV9VQf.js → flowDiagram-NV44I4VS-L32__tfK.js} +2 -2
  94. package/build/client/assets/{flowDiagram-NV44I4VS-BbxV9VQf.js.map → flowDiagram-NV44I4VS-L32__tfK.js.map} +1 -1
  95. package/build/client/assets/{ganttDiagram-JELNMOA3-CRBJBlE5.js → ganttDiagram-JELNMOA3-Dpp5PKJc.js} +2 -2
  96. package/build/client/assets/{ganttDiagram-JELNMOA3-CRBJBlE5.js.map → ganttDiagram-JELNMOA3-Dpp5PKJc.js.map} +1 -1
  97. package/build/client/assets/{gitGraphDiagram-NY62KEGX-CU0X3hfs.js → gitGraphDiagram-NY62KEGX-zn4IXANG.js} +2 -2
  98. package/build/client/assets/{gitGraphDiagram-NY62KEGX-CU0X3hfs.js.map → gitGraphDiagram-NY62KEGX-zn4IXANG.js.map} +1 -1
  99. package/build/client/assets/{graph-CEUh1UxC.js → graph-Da5nhwRG.js} +2 -2
  100. package/build/client/assets/{graph-CEUh1UxC.js.map → graph-Da5nhwRG.js.map} +1 -1
  101. package/build/client/assets/guide-Cinib8Ji.js +9 -0
  102. package/build/client/assets/guide-Cinib8Ji.js.map +1 -0
  103. package/build/client/assets/{index-D3zOGeBE.js → index-BKAVQvm5.js} +2 -2
  104. package/build/client/assets/{index-D3zOGeBE.js.map → index-BKAVQvm5.js.map} +1 -1
  105. package/build/client/assets/{index-BOhw3wcM.js → index-CJDOQ1bl.js} +2 -2
  106. package/build/client/assets/{index-BOhw3wcM.js.map → index-CJDOQ1bl.js.map} +1 -1
  107. package/build/client/assets/{index-B-9GR1C2.js → index-C_wcF1aP.js} +2 -2
  108. package/build/client/assets/{index-B-9GR1C2.js.map → index-C_wcF1aP.js.map} +1 -1
  109. package/build/client/assets/{index-BW8stNyh.js → index-CdzVFL-Z.js} +3 -3
  110. package/build/client/assets/{index-BW8stNyh.js.map → index-CdzVFL-Z.js.map} +1 -1
  111. package/build/client/assets/index-CmflCPTU.js +2 -0
  112. package/build/client/assets/index-CmflCPTU.js.map +1 -0
  113. package/build/client/assets/index-DuFMeXSm.js +2 -0
  114. package/build/client/assets/index-DuFMeXSm.js.map +1 -0
  115. package/build/client/assets/index-hhQHCvb9.js +2 -0
  116. package/build/client/assets/{index-EdNV8gTk.js.map → index-hhQHCvb9.js.map} +1 -1
  117. package/build/client/assets/{index-C_KjwKVt.js → index-ynYvVAOK.js} +2 -2
  118. package/build/client/assets/{index-C_KjwKVt.js.map → index-ynYvVAOK.js.map} +1 -1
  119. package/build/client/assets/{infoDiagram-WHAUD3N6-BplcSre1.js → infoDiagram-WHAUD3N6-CToPP1ur.js} +2 -2
  120. package/build/client/assets/{infoDiagram-WHAUD3N6-BplcSre1.js.map → infoDiagram-WHAUD3N6-CToPP1ur.js.map} +1 -1
  121. package/build/client/assets/{journeyDiagram-XKPGCS4Q-yxvCkf49.js → journeyDiagram-XKPGCS4Q-BBRpqEuF.js} +2 -2
  122. package/build/client/assets/{journeyDiagram-XKPGCS4Q-yxvCkf49.js.map → journeyDiagram-XKPGCS4Q-BBRpqEuF.js.map} +1 -1
  123. package/build/client/assets/{kanban-definition-3W4ZIXB7-DFEBMrRH.js → kanban-definition-3W4ZIXB7-CyGlZ-MK.js} +2 -2
  124. package/build/client/assets/{kanban-definition-3W4ZIXB7-DFEBMrRH.js.map → kanban-definition-3W4ZIXB7-CyGlZ-MK.js.map} +1 -1
  125. package/build/client/assets/{launch-editor-B2dmpkaO.js → launch-editor-D2exGfVu.js} +2 -2
  126. package/build/client/assets/{launch-editor-B2dmpkaO.js.map → launch-editor-D2exGfVu.js.map} +1 -1
  127. package/build/client/assets/{layout-CiHrgFnf.js → layout-CUEelucj.js} +2 -2
  128. package/build/client/assets/{layout-CiHrgFnf.js.map → layout-CUEelucj.js.map} +1 -1
  129. package/build/client/assets/{linear-C-81cvJP.js → linear-DzZ9bjHs.js} +2 -2
  130. package/build/client/assets/{linear-C-81cvJP.js.map → linear-DzZ9bjHs.js.map} +1 -1
  131. package/build/client/assets/{loading-CUydCGD3.js → loading-CDNzW5oO.js} +2 -2
  132. package/build/client/assets/{loading-CUydCGD3.js.map → loading-CDNzW5oO.js.map} +1 -1
  133. package/build/client/assets/{login-DvBmP_ce.js → login-mWjVXGbJ.js} +2 -2
  134. package/build/client/assets/{login-DvBmP_ce.js.map → login-mWjVXGbJ.js.map} +1 -1
  135. package/build/client/assets/manifest-970c9ad1.js +1 -0
  136. package/build/client/assets/{mdx-vrch0szL.js → mdx-BzyhMqFg.js} +3 -3
  137. package/build/client/assets/{mdx-vrch0szL.js.map → mdx-BzyhMqFg.js.map} +1 -1
  138. package/build/client/assets/{mermaid.core-D3y7PO8B.js → mermaid.core-BdxLLjl2.js} +5 -5
  139. package/build/client/assets/{mermaid.core-D3y7PO8B.js.map → mermaid.core-BdxLLjl2.js.map} +1 -1
  140. package/build/client/assets/{mindmap-definition-VGOIOE7T-VMZ6ZZlW.js → mindmap-definition-VGOIOE7T-DeKD8ncg.js} +2 -2
  141. package/build/client/assets/{mindmap-definition-VGOIOE7T-VMZ6ZZlW.js.map → mindmap-definition-VGOIOE7T-DeKD8ncg.js.map} +1 -1
  142. package/build/client/assets/{misc-DVYuZMjW.js → misc-W4055b-0.js} +2 -2
  143. package/build/client/assets/{misc-DVYuZMjW.js.map → misc-W4055b-0.js.map} +1 -1
  144. package/build/client/assets/{nav-chevrons-DlNUibJV.js → nav-chevrons-Dk4GtZwQ.js} +2 -2
  145. package/build/client/assets/{nav-chevrons-DlNUibJV.js.map → nav-chevrons-Dk4GtZwQ.js.map} +1 -1
  146. package/build/client/assets/{offline-videos-Do9PBh87.js → offline-videos-BP7_xJkO.js} +2 -2
  147. package/build/client/assets/{offline-videos-Do9PBh87.js.map → offline-videos-BP7_xJkO.js.map} +1 -1
  148. package/build/client/assets/{onboarding-indicator-CVwXz3Cn.js → onboarding-indicator-B-XR90_G.js} +2 -2
  149. package/build/client/assets/{onboarding-indicator-CVwXz3Cn.js.map → onboarding-indicator-B-XR90_G.js.map} +1 -1
  150. package/build/client/assets/{pieDiagram-ADFJNKIX-CKbrBdQs.js → pieDiagram-ADFJNKIX-BQ4sFDrB.js} +2 -2
  151. package/build/client/assets/{pieDiagram-ADFJNKIX-CKbrBdQs.js.map → pieDiagram-ADFJNKIX-BQ4sFDrB.js.map} +1 -1
  152. package/build/client/assets/playground-DmEAkxG1.js +2 -0
  153. package/build/client/assets/playground-DmEAkxG1.js.map +1 -0
  154. package/build/client/assets/{playground-window-D9a7P7rH.js → playground-window-x2mQ5o1O.js} +2 -2
  155. package/build/client/assets/{playground-window-D9a7P7rH.js.map → playground-window-x2mQ5o1O.js.map} +1 -1
  156. package/build/client/assets/{preferences-BCvK10k2.js → preferences-D6HQ5bK1.js} +2 -2
  157. package/build/client/assets/{preferences-BCvK10k2.js.map → preferences-D6HQ5bK1.js.map} +1 -1
  158. package/build/client/assets/{preview-CiDtuQCc.js → preview-fhmjENlm.js} +2 -2
  159. package/build/client/assets/{preview-CiDtuQCc.js.map → preview-fhmjENlm.js.map} +1 -1
  160. package/build/client/assets/{product-GLsnY1u3.js → product-CvyMpYD_.js} +2 -2
  161. package/build/client/assets/{product-GLsnY1u3.js.map → product-CvyMpYD_.js.map} +1 -1
  162. package/build/client/assets/{progress-fKsNxmmt.js → progress-ILaVQtOO.js} +2 -2
  163. package/build/client/assets/{progress-fKsNxmmt.js.map → progress-ILaVQtOO.js.map} +1 -1
  164. package/build/client/assets/{progress-bar-B27isaGl.js → progress-bar-DpWhcyhC.js} +2 -2
  165. package/build/client/assets/{progress-bar-B27isaGl.js.map → progress-bar-DpWhcyhC.js.map} +1 -1
  166. package/build/client/assets/{quadrantDiagram-AYHSOK5B-Bb5EtkPw.js → quadrantDiagram-AYHSOK5B-QnjodHfi.js} +2 -2
  167. package/build/client/assets/{quadrantDiagram-AYHSOK5B-Bb5EtkPw.js.map → quadrantDiagram-AYHSOK5B-QnjodHfi.js.map} +1 -1
  168. package/build/client/assets/{requirementDiagram-UZGBJVZJ-BNsXiFG2.js → requirementDiagram-UZGBJVZJ-mL9Oeda0.js} +2 -2
  169. package/build/client/assets/{requirementDiagram-UZGBJVZJ-BNsXiFG2.js.map → requirementDiagram-UZGBJVZJ-mL9Oeda0.js.map} +1 -1
  170. package/build/client/assets/{root-Ch373D3a.js → root-Bktp3RtN.js} +2 -2
  171. package/build/client/assets/{root-Ch373D3a.js.map → root-Bktp3RtN.js.map} +1 -1
  172. package/build/client/assets/{sankeyDiagram-TZEHDZUN-qlPqhk7P.js → sankeyDiagram-TZEHDZUN-B8_zpQVR.js} +2 -2
  173. package/build/client/assets/{sankeyDiagram-TZEHDZUN-qlPqhk7P.js.map → sankeyDiagram-TZEHDZUN-B8_zpQVR.js.map} +1 -1
  174. package/build/client/assets/{sequenceDiagram-WL72ISMW-C3d31B7K.js → sequenceDiagram-WL72ISMW-BDd5tjuk.js} +2 -2
  175. package/build/client/assets/{sequenceDiagram-WL72ISMW-C3d31B7K.js.map → sequenceDiagram-WL72ISMW-BDd5tjuk.js.map} +1 -1
  176. package/build/client/assets/{set-playground-DeMY9i7p.js → set-playground-BSGwH9dH.js} +2 -2
  177. package/build/client/assets/{set-playground-DeMY9i7p.js.map → set-playground-BSGwH9dH.js.map} +1 -1
  178. package/build/client/assets/{stateDiagram-FKZM4ZOC-C1eIQm_7.js → stateDiagram-FKZM4ZOC-DGPNpRbW.js} +2 -2
  179. package/build/client/assets/{stateDiagram-FKZM4ZOC-C1eIQm_7.js.map → stateDiagram-FKZM4ZOC-DGPNpRbW.js.map} +1 -1
  180. package/build/client/assets/stateDiagram-v2-4FDKWEC3-DxaFuKxL.js +2 -0
  181. package/build/client/assets/{stateDiagram-v2-4FDKWEC3-CAmcrDIS.js.map → stateDiagram-v2-4FDKWEC3-DxaFuKxL.js.map} +1 -1
  182. package/build/client/assets/status-indicator-C6DiLYL5.js +2 -0
  183. package/build/client/assets/status-indicator-C6DiLYL5.js.map +1 -0
  184. package/build/client/assets/tailwind-B97VvnKU.css +1 -0
  185. package/build/client/assets/test-DtQCjBBX.js +2 -0
  186. package/build/client/assets/{test-CdEKoDoS.js.map → test-DtQCjBBX.js.map} +1 -1
  187. package/build/client/assets/{tests-xD9PppmM.js → tests-fDISNsE-.js} +2 -2
  188. package/build/client/assets/{tests-xD9PppmM.js.map → tests-fDISNsE-.js.map} +1 -1
  189. package/build/client/assets/{timeline-definition-IT6M3QCI-Di_ZGPjO.js → timeline-definition-IT6M3QCI-BnMOh0dz.js} +2 -2
  190. package/build/client/assets/{timeline-definition-IT6M3QCI-Di_ZGPjO.js.map → timeline-definition-IT6M3QCI-BnMOh0dz.js.map} +1 -1
  191. package/build/client/assets/{tooltip-Chzzs4KB.js → tooltip-Tlsyx2YO.js} +2 -2
  192. package/build/client/assets/{tooltip-Chzzs4KB.js.map → tooltip-Tlsyx2YO.js.map} +1 -1
  193. package/build/client/assets/{treemap-KMMF4GRG-DZrMUxqR.js → treemap-KMMF4GRG-Ds3XkDP-.js} +2 -2
  194. package/build/client/assets/{treemap-KMMF4GRG-DZrMUxqR.js.map → treemap-KMMF4GRG-Ds3XkDP-.js.map} +1 -1
  195. package/build/client/assets/{workspace-structure-i_5Tiikk.js → workspace-structure-B6Rpl-B2.js} +2 -2
  196. package/build/client/assets/{workspace-structure-i_5Tiikk.js.map → workspace-structure-B6Rpl-B2.js.map} +1 -1
  197. package/build/client/assets/{xychartDiagram-PRI3JC2R-BxuKJVc7.js → xychartDiagram-PRI3JC2R-DH_JPNZp.js} +2 -2
  198. package/build/client/assets/{xychartDiagram-PRI3JC2R-BxuKJVc7.js.map → xychartDiagram-PRI3JC2R-DH_JPNZp.js.map} +1 -1
  199. package/build/server/index.js +690 -114
  200. package/build/server/index.js.map +1 -1
  201. package/package.json +3 -3
  202. package/build/client/assets/_exerciseNumber_.finished-CGoPhVVF.js.map +0 -1
  203. package/build/client/assets/_extra-BZPB_nWQ.js +0 -2
  204. package/build/client/assets/_extra-BZPB_nWQ.js.map +0 -1
  205. package/build/client/assets/_layout-BxQPZuW6.js +0 -2
  206. package/build/client/assets/_layout-BxQPZuW6.js.map +0 -1
  207. package/build/client/assets/_layout-yxOoJ6Yg.js +0 -2
  208. package/build/client/assets/_layout-yxOoJ6Yg.js.map +0 -1
  209. package/build/client/assets/app-TcFAQB2o.js +0 -2
  210. package/build/client/assets/channel-BLJkdd1O.js +0 -2
  211. package/build/client/assets/classDiagram-2ON5EDUG-_kfNpv_f.js +0 -2
  212. package/build/client/assets/classDiagram-v2-WZHVMYZB-_kfNpv_f.js +0 -2
  213. package/build/client/assets/clone-CztDUJhf.js +0 -2
  214. package/build/client/assets/discord-CuxZiU8E.js.map +0 -1
  215. package/build/client/assets/guide-B4wAqzq_.js +0 -9
  216. package/build/client/assets/guide-B4wAqzq_.js.map +0 -1
  217. package/build/client/assets/index-C6vQqVxz.js +0 -2
  218. package/build/client/assets/index-C6vQqVxz.js.map +0 -1
  219. package/build/client/assets/index-EdNV8gTk.js +0 -2
  220. package/build/client/assets/manifest-34df6718.js +0 -1
  221. package/build/client/assets/playground-C_aP_pE8.js +0 -2
  222. package/build/client/assets/playground-C_aP_pE8.js.map +0 -1
  223. package/build/client/assets/stateDiagram-v2-4FDKWEC3-CAmcrDIS.js +0 -2
  224. package/build/client/assets/tailwind-D_K12wB7.css +0 -1
  225. package/build/client/assets/test-CdEKoDoS.js +0 -2
@@ -1,2 +1,2 @@
1
- import{j as e}from"./jsx-runtime-C5WNSv3b.js";import{R as _,T as V,V as G,I as U,P as Y,C as $,S as z,a as q,G as S,L as w,b as H,c as M,d as Q,e as W,f as J}from"./index-BOhw3wcM.js";import{a as b,I as y}from"./misc-DVYuZMjW.js";import{r as u}from"./index-CqIc3cxq.js";import{f}from"./chunk-EPOLDU6W-BCLmut3y.js";import{B as D}from"./button-CIlVtsau.js";import{u as K,O as X}from"./onboarding-indicator-CVwXz3Cn.js";import{s as Z}from"./progress-bar-B27isaGl.js";import{D as T,a as I,b as O,c as k,d as E,e as R}from"./dialog-DnpUg3VT.js";import{S as ee}from"./tooltip-Chzzs4KB.js";import{u as F}from"./pe-CIZUOJMr.js";import{u as se}from"./root-loader-BOzEMapJ.js";const B="set-playground",P="__saved-playgrounds__",te=[];function N(){const n=se(),r=n.preferences?.playground?.persist??!1,o=n.preferences?.onboardingComplete?.includes(B)??!1;return{persistEnabled:r,shouldConfirm:!r&&!o}}function L({open:n,onOpenChange:r,onConfirm:o,isSubmitting:a,persistFetcher:t}){const d=F(),{persistEnabled:p}=N(),l=t.state!=="idle",i=t.data?.status==="success"?t.data.persist:p,c=!i;return e.jsx(T,{open:n,onOpenChange:r,children:e.jsxs(I,{className:"max-w-xl",children:[e.jsxs(O,{children:[e.jsx(k,{children:"Playground ready for your first step"}),e.jsx(E,{children:"Nice work getting here! Setting the playground is how you bring the next step's instructions into your workspace."})]}),e.jsxs("div",{className:"space-y-4 text-sm",children:[e.jsx("p",{className:"text-muted-foreground",children:"This will replace whatever is currently in your playground with the next step's files. That is expected and the default workflow."}),e.jsxs("div",{className:"border-border bg-muted/40 space-y-3 rounded-md border p-4",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-foreground font-semibold",children:"Optional: Save a copy each time"}),e.jsxs("p",{className:"text-muted-foreground mt-1 text-sm",children:["When enabled, every set saves a copy in",e.jsx("span",{className:"font-mono",children:" saved-playgrounds"}),". You can change this later in Preferences."]}),e.jsx("p",{className:"text-muted-foreground mt-2 text-xs",children:"You can always manage this in Preferences."})]}),e.jsxs(t.Form,{method:"POST",action:"/persist-playground",children:[d,e.jsx("input",{type:"hidden",name:"persist",value:c?"true":"false"}),e.jsxs("div",{className:"flex items-center justify-between gap-3",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-foreground text-sm font-medium",children:"Persistence"}),e.jsx("p",{className:"text-muted-foreground text-xs",children:i?"Enabled":"Disabled"})]}),e.jsx("button",{type:"submit",role:"switch","aria-checked":i,"aria-label":`Toggle playground persistence ${i?"off":"on"}`,className:b("focus-visible:ring-ring relative inline-flex h-6 w-11 items-center rounded-full border transition",i?"border-foreground bg-foreground":"border-border bg-muted",l?"cursor-progress opacity-70":null),disabled:l,children:e.jsx("span",{className:b("bg-background inline-block h-5 w-5 rounded-full shadow transition",i?"translate-x-5":"translate-x-0")})})]})]})]})]}),e.jsxs(R,{children:[e.jsx("button",{type:"button",className:"border-border text-foreground hover:bg-muted focus-visible:ring-ring inline-flex items-center justify-center rounded-md border px-3 py-2 text-sm font-semibold",onClick:()=>r(!1),children:"Cancel"}),e.jsx(D,{varient:"primary",type:"button",onClick:o,disabled:a,children:a?"Setting...":"Set playground"})]})]})})}function re({open:n,onOpenChange:r,allApps:o}){const a=f(),t=f(),[d,p]=u.useState(""),l=a.data?.status==="success"?a.data.savedPlaygrounds:te,i=a.state!=="idle"&&!a.data,c=t.state!=="idle",x=t.formData?.get("savedPlaygroundId"),m=u.useMemo(()=>new Intl.DateTimeFormat(void 0,{dateStyle:"medium",timeStyle:"short"}),[]);u.useEffect(()=>{n&&a.state==="idle"&&a.load("/saved-playgrounds")},[a,n]),u.useEffect(()=>{n||p("")},[n]),u.useEffect(()=>{t.data?.status==="success"&&r(!1)},[t.data,r]);const h=u.useMemo(()=>{const s=d.trim().toLowerCase();return s?l.filter(g=>{const j=o.find(v=>v.name===g.appName)?.displayName??g.appName;return g.appName.toLowerCase().includes(s)||g.id.toLowerCase().includes(s)||j.toLowerCase().includes(s)}):l},[o,d,l]);return e.jsx(T,{open:n,onOpenChange:r,children:e.jsxs(I,{className:"max-w-2xl",children:[e.jsxs(O,{children:[e.jsx(k,{children:"Saved playgrounds"}),e.jsx(E,{children:"Restore a saved playground into your active playground directory."})]}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx("label",{htmlFor:"savedPlaygroundSearch",className:"text-sm font-medium",children:"Search saved playgrounds"}),e.jsx("input",{id:"savedPlaygroundSearch",type:"search",value:d,onChange:s=>p(s.currentTarget.value),placeholder:"Filter by exercise, app name, or timestamp",className:"border-border bg-background text-foreground w-full rounded-md border px-3 py-2 text-sm"})]}),e.jsxs("div",{className:"border-border bg-muted/40 rounded-md border",children:[e.jsxs("div",{className:"border-border text-muted-foreground flex items-center justify-between border-b px-3 py-2 text-xs",children:[e.jsx("span",{children:l.length===1?"1 saved playground":`${l.length} saved playgrounds`}),d?e.jsx("span",{children:h.length===1?"1 match":`${h.length} matches`}):null]}),e.jsx("div",{className:"max-h-72 overflow-y-auto",children:i?e.jsx("div",{className:"text-muted-foreground px-3 py-4 text-sm",children:"Loading saved playgrounds..."}):a.data?.status==="disabled"?e.jsx("div",{className:"text-muted-foreground px-3 py-4 text-sm",children:"Enable playground persistence in Preferences to use saved playgrounds."}):h.length===0?e.jsx("div",{className:"text-muted-foreground px-3 py-4 text-sm",children:d?"No saved playgrounds match your search.":"No saved playgrounds yet. Set the playground to create one."}):h.map(s=>{const g=o.find(A=>A.name===s.appName)?.displayName??s.appName,j=new Date(s.createdAt),v=x===s.id;return e.jsxs("div",{className:"border-border flex items-center justify-between gap-4 border-b px-3 py-3 last:border-b-0",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsx("p",{className:"text-foreground text-sm font-semibold",children:g}),e.jsx("p",{className:"text-muted-foreground truncate font-mono text-xs",children:s.appName}),e.jsx("time",{className:"text-muted-foreground text-xs",dateTime:s.createdAt,children:Number.isNaN(j.getTime())?s.createdAt:m.format(j)})]}),e.jsx(D,{varient:"primary",type:"button",disabled:c,onClick:()=>t.submit({savedPlaygroundId:s.id},{method:"POST",action:"/saved-playgrounds"}),children:v?"Setting...":"Set playground"})]},s.id)})})]}),t.data?.status==="error"?e.jsx("p",{className:"text-foreground-destructive text-sm",children:t.data.error}):null]}),e.jsx(R,{children:e.jsx("button",{type:"button",className:"border-border text-foreground hover:bg-muted focus-visible:ring-ring inline-flex items-center justify-center rounded-md border px-3 py-2 text-sm font-semibold",onClick:()=>r(!1),children:"Close"})})]})})}function ae({appName:n,reset:r=!1,tooltipText:o,...a}){const t=f(),d=f(),p=F(),{shouldConfirm:l}=N(),[i,c]=u.useState(!1),x=u.useRef(null),m=u.useRef(!1),h=t.state!=="idle",s=e.jsx("button",{type:"submit",...a,className:b(a.className,t.state!=="idle"?"cursor-progress":null,t.data?.status==="error"?"cursor-not-allowed":null)});return e.jsxs(e.Fragment,{children:[e.jsxs(t.Form,{action:"/set-playground",method:"POST",className:"inline-flex items-center justify-center",ref:x,onSubmit:g=>{if(l&&!m.current){g.preventDefault(),c(!0);return}m.current=!1},children:[p,e.jsx("input",{type:"hidden",name:"appName",value:n}),r?e.jsx("input",{type:"hidden",name:"reset",value:"true"}):null,Z,o?e.jsx(ee,{content:o,children:s}):s]}),e.jsx(L,{open:i,onOpenChange:c,isSubmitting:h,persistFetcher:d,onConfirm:()=>{m.current=!0,c(!1),x.current?.requestSubmit()}})]})}function fe({playgroundAppName:n,allApps:r}){const o=f(),a=f(),{shouldConfirm:t,persistEnabled:d}=N(),[p,l]=u.useState(!1),[i,c]=u.useState(!1),[x,m]=u.useState(null),h=o.state!=="idle";return e.jsxs(e.Fragment,{children:[e.jsxs(_,{name:"appName",value:n,onValueChange:s=>{if(s===P){c(!0);return}if(t){m(s),l(!0);return}o.submit({appName:s},{method:"POST",action:"/set-playground"})},children:[e.jsxs(V,{"aria-label":"Select app for playground",className:b("radix-placeholder:text-muted-foreground flex h-full w-full items-center justify-between text-left focus-visible:outline-none",o.state!=="idle"?"cursor-progress":null,o.data?.status==="error"?"cursor-not-allowed":null),children:[e.jsx("span",{className:"scrollbar-thin scrollbar-thumb-scrollbar w-80 flex-1 truncate",children:e.jsx(G,{placeholder:"Select current app",className:"inline-block w-40 truncate"})}),e.jsx(U,{children:e.jsx(y,{name:"TriangleDownSmall"})})]}),e.jsx(Y,{children:e.jsxs($,{position:"popper",align:"start",className:"invert-theme bg-popover text-popover-foreground z-20 max-h-[50vh] lg:max-h-[70vh]",children:[e.jsx(z,{className:"flex h-5 cursor-default items-center justify-center",children:e.jsx(y,{name:"ChevronUp"})}),e.jsxs(q,{className:"p-3",children:[e.jsxs(S,{children:[e.jsx(w,{className:"px-5 pb-3 font-mono uppercase",children:"App"}),r.filter(s=>s.name!=="playground").map(s=>e.jsx(C,{value:s.name,children:s.displayName},s.name))]}),d?e.jsxs(e.Fragment,{children:[e.jsx(H,{className:"bg-border my-2 h-px"}),e.jsxs(S,{children:[e.jsx(w,{className:"text-muted-foreground px-5 pb-2 font-mono text-xs uppercase",children:"Saved playgrounds"}),e.jsx(C,{value:P,children:"Choose a saved playground..."})]})]}):null]}),e.jsx(M,{className:"flex h-5 cursor-default items-center justify-center",children:e.jsx(y,{name:"ChevronDown"})})]})})]}),e.jsx(L,{open:p,onOpenChange:s=>{l(s),s||m(null)},isSubmitting:h,persistFetcher:a,onConfirm:()=>{x&&(l(!1),o.submit({appName:x},{method:"POST",action:"/set-playground"}),m(null))}}),e.jsx(re,{open:i,onOpenChange:c,allApps:r})]})}function C({value:n,children:r}){return e.jsxs(Q,{value:n,className:"radix-disabled:text-muted-foreground radix-highlighted:opacity-100 radix-highlighted:outline-none radix-state-checked:opacity-100 relative flex cursor-pointer items-center rounded px-10 py-2 leading-none opacity-80 select-none",children:[e.jsx(W,{children:r}),e.jsx(J,{className:"absolute left-0 inline-flex w-[25px] items-center justify-center",children:e.jsx(y,{name:"CheckSmall"})})]})}function ye({appName:n,isOutdated:r,hideTextOnNarrow:o,showOnboardingIndicator:a=!1,onClick:t,className:d,...p}){const[l,i]=K(B);if(ENV.EPICSHOP_DEPLOYED)return null;const c=a&&l,x=b(d,c?"relative":null);return e.jsx(ae,{appName:n,tooltipText:r?"The app the playground was set to has been updated. Click to update to the latest version.":"Playground is not set to the right app. Click to set Playground.",...p,className:x,onClick:m=>{t?.(m),a&&i()},children:e.jsxs("span",{className:"text-foreground-destructive flex items-center justify-center gap-1 hover:underline",children:[e.jsx(y,{name:"Unlinked",className:"animate-ping"})," ",e.jsx("span",{className:o?"hidden uppercase @min-[600px]:inline":"uppercase",children:r?"Playground Outdated":"Set to Playground"}),c?e.jsx(X,{tooltip:"Set the playground for this step.",size:"sm"}):null]})})}export{fe as P,ye as S,ae as a};
2
- //# sourceMappingURL=set-playground-DeMY9i7p.js.map
1
+ import{j as e}from"./jsx-runtime-C5WNSv3b.js";import{R as _,T as V,V as G,I as U,P as Y,C as $,S as z,a as q,G as S,L as w,b as H,c as M,d as Q,e as W,f as J}from"./index-CJDOQ1bl.js";import{a as b,I as y}from"./misc-W4055b-0.js";import{r as u}from"./index-CqIc3cxq.js";import{f}from"./chunk-EPOLDU6W-BCLmut3y.js";import{B as D}from"./button-Cd-ekki5.js";import{u as K,O as X}from"./onboarding-indicator-B-XR90_G.js";import{s as Z}from"./progress-bar-DpWhcyhC.js";import{D as T,a as I,b as O,c as k,d as E,e as R}from"./dialog-CzO65Z5w.js";import{S as ee}from"./tooltip-Tlsyx2YO.js";import{u as F}from"./pe-CIZUOJMr.js";import{u as se}from"./root-loader-BOzEMapJ.js";const B="set-playground",P="__saved-playgrounds__",te=[];function N(){const n=se(),r=n.preferences?.playground?.persist??!1,o=n.preferences?.onboardingComplete?.includes(B)??!1;return{persistEnabled:r,shouldConfirm:!r&&!o}}function L({open:n,onOpenChange:r,onConfirm:o,isSubmitting:a,persistFetcher:t}){const d=F(),{persistEnabled:p}=N(),l=t.state!=="idle",i=t.data?.status==="success"?t.data.persist:p,c=!i;return e.jsx(T,{open:n,onOpenChange:r,children:e.jsxs(I,{className:"max-w-xl",children:[e.jsxs(O,{children:[e.jsx(k,{children:"Playground ready for your first step"}),e.jsx(E,{children:"Nice work getting here! Setting the playground is how you bring the next step's instructions into your workspace."})]}),e.jsxs("div",{className:"space-y-4 text-sm",children:[e.jsx("p",{className:"text-muted-foreground",children:"This will replace whatever is currently in your playground with the next step's files. That is expected and the default workflow."}),e.jsxs("div",{className:"border-border bg-muted/40 space-y-3 rounded-md border p-4",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-foreground font-semibold",children:"Optional: Save a copy each time"}),e.jsxs("p",{className:"text-muted-foreground mt-1 text-sm",children:["When enabled, every set saves a copy in",e.jsx("span",{className:"font-mono",children:" saved-playgrounds"}),". You can change this later in Preferences."]}),e.jsx("p",{className:"text-muted-foreground mt-2 text-xs",children:"You can always manage this in Preferences."})]}),e.jsxs(t.Form,{method:"POST",action:"/persist-playground",children:[d,e.jsx("input",{type:"hidden",name:"persist",value:c?"true":"false"}),e.jsxs("div",{className:"flex items-center justify-between gap-3",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-foreground text-sm font-medium",children:"Persistence"}),e.jsx("p",{className:"text-muted-foreground text-xs",children:i?"Enabled":"Disabled"})]}),e.jsx("button",{type:"submit",role:"switch","aria-checked":i,"aria-label":`Toggle playground persistence ${i?"off":"on"}`,className:b("focus-visible:ring-ring relative inline-flex h-6 w-11 items-center rounded-full border transition",i?"border-foreground bg-foreground":"border-border bg-muted",l?"cursor-progress opacity-70":null),disabled:l,children:e.jsx("span",{className:b("bg-background inline-block h-5 w-5 rounded-full shadow transition",i?"translate-x-5":"translate-x-0")})})]})]})]})]}),e.jsxs(R,{children:[e.jsx("button",{type:"button",className:"border-border text-foreground hover:bg-muted focus-visible:ring-ring inline-flex items-center justify-center rounded-md border px-3 py-2 text-sm font-semibold",onClick:()=>r(!1),children:"Cancel"}),e.jsx(D,{varient:"primary",type:"button",onClick:o,disabled:a,children:a?"Setting...":"Set playground"})]})]})})}function re({open:n,onOpenChange:r,allApps:o}){const a=f(),t=f(),[d,p]=u.useState(""),l=a.data?.status==="success"?a.data.savedPlaygrounds:te,i=a.state!=="idle"&&!a.data,c=t.state!=="idle",x=t.formData?.get("savedPlaygroundId"),m=u.useMemo(()=>new Intl.DateTimeFormat(void 0,{dateStyle:"medium",timeStyle:"short"}),[]);u.useEffect(()=>{n&&a.state==="idle"&&a.load("/saved-playgrounds")},[a,n]),u.useEffect(()=>{n||p("")},[n]),u.useEffect(()=>{t.data?.status==="success"&&r(!1)},[t.data,r]);const h=u.useMemo(()=>{const s=d.trim().toLowerCase();return s?l.filter(g=>{const j=o.find(v=>v.name===g.appName)?.displayName??g.appName;return g.appName.toLowerCase().includes(s)||g.id.toLowerCase().includes(s)||j.toLowerCase().includes(s)}):l},[o,d,l]);return e.jsx(T,{open:n,onOpenChange:r,children:e.jsxs(I,{className:"max-w-2xl",children:[e.jsxs(O,{children:[e.jsx(k,{children:"Saved playgrounds"}),e.jsx(E,{children:"Restore a saved playground into your active playground directory."})]}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx("label",{htmlFor:"savedPlaygroundSearch",className:"text-sm font-medium",children:"Search saved playgrounds"}),e.jsx("input",{id:"savedPlaygroundSearch",type:"search",value:d,onChange:s=>p(s.currentTarget.value),placeholder:"Filter by exercise, app name, or timestamp",className:"border-border bg-background text-foreground w-full rounded-md border px-3 py-2 text-sm"})]}),e.jsxs("div",{className:"border-border bg-muted/40 rounded-md border",children:[e.jsxs("div",{className:"border-border text-muted-foreground flex items-center justify-between border-b px-3 py-2 text-xs",children:[e.jsx("span",{children:l.length===1?"1 saved playground":`${l.length} saved playgrounds`}),d?e.jsx("span",{children:h.length===1?"1 match":`${h.length} matches`}):null]}),e.jsx("div",{className:"max-h-72 overflow-y-auto",children:i?e.jsx("div",{className:"text-muted-foreground px-3 py-4 text-sm",children:"Loading saved playgrounds..."}):a.data?.status==="disabled"?e.jsx("div",{className:"text-muted-foreground px-3 py-4 text-sm",children:"Enable playground persistence in Preferences to use saved playgrounds."}):h.length===0?e.jsx("div",{className:"text-muted-foreground px-3 py-4 text-sm",children:d?"No saved playgrounds match your search.":"No saved playgrounds yet. Set the playground to create one."}):h.map(s=>{const g=o.find(A=>A.name===s.appName)?.displayName??s.appName,j=new Date(s.createdAt),v=x===s.id;return e.jsxs("div",{className:"border-border flex items-center justify-between gap-4 border-b px-3 py-3 last:border-b-0",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsx("p",{className:"text-foreground text-sm font-semibold",children:g}),e.jsx("p",{className:"text-muted-foreground truncate font-mono text-xs",children:s.appName}),e.jsx("time",{className:"text-muted-foreground text-xs",dateTime:s.createdAt,children:Number.isNaN(j.getTime())?s.createdAt:m.format(j)})]}),e.jsx(D,{varient:"primary",type:"button",disabled:c,onClick:()=>t.submit({savedPlaygroundId:s.id},{method:"POST",action:"/saved-playgrounds"}),children:v?"Setting...":"Set playground"})]},s.id)})})]}),t.data?.status==="error"?e.jsx("p",{className:"text-foreground-destructive text-sm",children:t.data.error}):null]}),e.jsx(R,{children:e.jsx("button",{type:"button",className:"border-border text-foreground hover:bg-muted focus-visible:ring-ring inline-flex items-center justify-center rounded-md border px-3 py-2 text-sm font-semibold",onClick:()=>r(!1),children:"Close"})})]})})}function ae({appName:n,reset:r=!1,tooltipText:o,...a}){const t=f(),d=f(),p=F(),{shouldConfirm:l}=N(),[i,c]=u.useState(!1),x=u.useRef(null),m=u.useRef(!1),h=t.state!=="idle",s=e.jsx("button",{type:"submit",...a,className:b(a.className,t.state!=="idle"?"cursor-progress":null,t.data?.status==="error"?"cursor-not-allowed":null)});return e.jsxs(e.Fragment,{children:[e.jsxs(t.Form,{action:"/set-playground",method:"POST",className:"inline-flex items-center justify-center",ref:x,onSubmit:g=>{if(l&&!m.current){g.preventDefault(),c(!0);return}m.current=!1},children:[p,e.jsx("input",{type:"hidden",name:"appName",value:n}),r?e.jsx("input",{type:"hidden",name:"reset",value:"true"}):null,Z,o?e.jsx(ee,{content:o,children:s}):s]}),e.jsx(L,{open:i,onOpenChange:c,isSubmitting:h,persistFetcher:d,onConfirm:()=>{m.current=!0,c(!1),x.current?.requestSubmit()}})]})}function fe({playgroundAppName:n,allApps:r}){const o=f(),a=f(),{shouldConfirm:t,persistEnabled:d}=N(),[p,l]=u.useState(!1),[i,c]=u.useState(!1),[x,m]=u.useState(null),h=o.state!=="idle";return e.jsxs(e.Fragment,{children:[e.jsxs(_,{name:"appName",value:n,onValueChange:s=>{if(s===P){c(!0);return}if(t){m(s),l(!0);return}o.submit({appName:s},{method:"POST",action:"/set-playground"})},children:[e.jsxs(V,{"aria-label":"Select app for playground",className:b("radix-placeholder:text-muted-foreground flex h-full w-full items-center justify-between text-left focus-visible:outline-none",o.state!=="idle"?"cursor-progress":null,o.data?.status==="error"?"cursor-not-allowed":null),children:[e.jsx("span",{className:"scrollbar-thin scrollbar-thumb-scrollbar w-80 flex-1 truncate",children:e.jsx(G,{placeholder:"Select current app",className:"inline-block w-40 truncate"})}),e.jsx(U,{children:e.jsx(y,{name:"TriangleDownSmall"})})]}),e.jsx(Y,{children:e.jsxs($,{position:"popper",align:"start",className:"invert-theme bg-popover text-popover-foreground z-20 max-h-[50vh] lg:max-h-[70vh]",children:[e.jsx(z,{className:"flex h-5 cursor-default items-center justify-center",children:e.jsx(y,{name:"ChevronUp"})}),e.jsxs(q,{className:"p-3",children:[e.jsxs(S,{children:[e.jsx(w,{className:"px-5 pb-3 font-mono uppercase",children:"App"}),r.filter(s=>s.name!=="playground").map(s=>e.jsx(C,{value:s.name,children:s.displayName},s.name))]}),d?e.jsxs(e.Fragment,{children:[e.jsx(H,{className:"bg-border my-2 h-px"}),e.jsxs(S,{children:[e.jsx(w,{className:"text-muted-foreground px-5 pb-2 font-mono text-xs uppercase",children:"Saved playgrounds"}),e.jsx(C,{value:P,children:"Choose a saved playground..."})]})]}):null]}),e.jsx(M,{className:"flex h-5 cursor-default items-center justify-center",children:e.jsx(y,{name:"ChevronDown"})})]})})]}),e.jsx(L,{open:p,onOpenChange:s=>{l(s),s||m(null)},isSubmitting:h,persistFetcher:a,onConfirm:()=>{x&&(l(!1),o.submit({appName:x},{method:"POST",action:"/set-playground"}),m(null))}}),e.jsx(re,{open:i,onOpenChange:c,allApps:r})]})}function C({value:n,children:r}){return e.jsxs(Q,{value:n,className:"radix-disabled:text-muted-foreground radix-highlighted:opacity-100 radix-highlighted:outline-none radix-state-checked:opacity-100 relative flex cursor-pointer items-center rounded px-10 py-2 leading-none opacity-80 select-none",children:[e.jsx(W,{children:r}),e.jsx(J,{className:"absolute left-0 inline-flex w-[25px] items-center justify-center",children:e.jsx(y,{name:"CheckSmall"})})]})}function ye({appName:n,isOutdated:r,hideTextOnNarrow:o,showOnboardingIndicator:a=!1,onClick:t,className:d,...p}){const[l,i]=K(B);if(ENV.EPICSHOP_DEPLOYED)return null;const c=a&&l,x=b(d,c?"relative":null);return e.jsx(ae,{appName:n,tooltipText:r?"The app the playground was set to has been updated. Click to update to the latest version.":"Playground is not set to the right app. Click to set Playground.",...p,className:x,onClick:m=>{t?.(m),a&&i()},children:e.jsxs("span",{className:"text-foreground-destructive flex items-center justify-center gap-1 hover:underline",children:[e.jsx(y,{name:"Unlinked",className:"animate-ping"})," ",e.jsx("span",{className:o?"hidden uppercase @min-[600px]:inline":"uppercase",children:r?"Playground Outdated":"Set to Playground"}),c?e.jsx(X,{tooltip:"Set the playground for this step.",size:"sm"}):null]})})}export{fe as P,ye as S,ae as a};
2
+ //# sourceMappingURL=set-playground-BSGwH9dH.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"set-playground-DeMY9i7p.js","sources":["../../../app/routes/set-playground.tsx"],"sourcesContent":["import {\n\tgetAppByName,\n\tgetApps,\n\tisPlaygroundApp,\n\tisProblemApp,\n\tisSolutionApp,\n\tsetPlayground,\n} from '@epic-web/workshop-utils/apps.server'\nimport { markOnboardingComplete } from '@epic-web/workshop-utils/db.server'\nimport { getDiffCode } from '@epic-web/workshop-utils/diff.server'\nimport { clearTestProcessEntry } from '@epic-web/workshop-utils/process-manager.server'\nimport * as Select from '@radix-ui/react-select'\nimport { clsx } from 'clsx'\nimport * as React from 'react'\nimport { type ActionFunctionArgs, useFetcher } from 'react-router'\nimport { z } from 'zod'\nimport { Button } from '#app/components/button.tsx'\nimport { Icon } from '#app/components/icons.tsx'\nimport {\n\tOnboardingBadge,\n\tuseOnboardingIndicator,\n} from '#app/components/onboarding-indicator.tsx'\nimport { showProgressBarField } from '#app/components/progress-bar.tsx'\nimport {\n\tDialog,\n\tDialogContent,\n\tDialogDescription,\n\tDialogFooter,\n\tDialogHeader,\n\tDialogTitle,\n} from '#app/components/ui/dialog.tsx'\nimport { SimpleTooltip } from '#app/components/ui/tooltip.tsx'\nimport { ensureUndeployed, getErrorMessage } from '#app/utils/misc.tsx'\nimport { dataWithPE, usePERedirectInput } from '#app/utils/pe.tsx'\nimport { useRootLoaderData } from '#app/utils/root-loader.ts'\nimport { createToastHeaders } from '#app/utils/toast.server.ts'\n\nconst PLAYGROUND_ONBOARDING_FEATURE_ID = 'set-playground'\n\nconst SetPlaygroundSchema = z.object({\n\tappName: z.string(),\n\treset: z\n\t\t.string()\n\t\t.nullable()\n\t\t.optional()\n\t\t.transform((v) => v === 'true'),\n})\n\nexport async function action({ request }: ActionFunctionArgs) {\n\tensureUndeployed()\n\tconst formData = await request.formData()\n\tconst rawData = {\n\t\tappName: formData.get('appName'),\n\t\tredirectTo: formData.get('redirectTo'),\n\t}\n\tconst result = SetPlaygroundSchema.safeParse(rawData)\n\tif (!result.success) {\n\t\treturn dataWithPE(\n\t\t\trequest,\n\t\t\tformData,\n\t\t\t{ status: 'error', error: result.error.message } as const,\n\t\t\t{ status: 400 },\n\t\t)\n\t}\n\tconst form = result.data\n\tconst app = await getAppByName(form.appName)\n\tif (!app) {\n\t\treturn dataWithPE(\n\t\t\trequest,\n\t\t\tformData,\n\t\t\t{ status: 'error', error: `App ${form.appName} not found` } as const,\n\t\t\t{ status: 404 },\n\t\t)\n\t}\n\tconst converseApp =\n\t\tisProblemApp(app) && app.solutionName\n\t\t\t? await getAppByName(app.solutionName)\n\t\t\t: isSolutionApp(app) && app.problemName\n\t\t\t\t? await getAppByName(app.problemName)\n\t\t\t\t: undefined\n\ttry {\n\t\tawait setPlayground(app.fullPath, { reset: form.reset })\n\t} catch (error: unknown) {\n\t\tconst message = getErrorMessage(error)\n\t\tconsole.error('Error setting playground', message)\n\t\treturn dataWithPE(\n\t\t\trequest,\n\t\t\tformData,\n\t\t\t{ status: 'error', error: message } as const,\n\t\t\t{\n\t\t\t\tstatus: 500,\n\t\t\t\theaders: await createToastHeaders({\n\t\t\t\t\ttype: 'error',\n\t\t\t\t\ttitle: 'Error',\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t'There was an error setting the playground. Check the terminal for details.',\n\t\t\t\t}),\n\t\t\t},\n\t\t)\n\t}\n\tconst apps = await getApps({ forceFresh: true })\n\tconst playground = apps.find(isPlaygroundApp)\n\tif (playground) {\n\t\tclearTestProcessEntry(playground)\n\t\tif (converseApp) {\n\t\t\tvoid getDiffCode(playground, converseApp, { forceFresh: true })\n\t\t}\n\t}\n\tawait markOnboardingComplete(PLAYGROUND_ONBOARDING_FEATURE_ID)\n\treturn dataWithPE(request, formData, { status: 'success' } as const)\n}\n\ntype PersistPlaygroundResult =\n\t| { status: 'success'; persist: boolean }\n\t| { status: 'error' }\n\ntype SavedPlaygroundsLoaderData =\n\t| {\n\t\t\tstatus: 'success'\n\t\t\tsavedPlaygrounds: Array<{\n\t\t\t\tid: string\n\t\t\t\tappName: string\n\t\t\t\tcreatedAt: string\n\t\t\t}>\n\t }\n\t| { status: 'disabled'; savedPlaygrounds: [] }\n\ntype SavedPlaygroundsActionData =\n\t| { status: 'success'; savedPlaygroundId: string }\n\t| { status: 'error'; error: string }\n\nconst savedPlaygroundsValue = '__saved-playgrounds__'\nconst emptySavedPlaygrounds: Array<{\n\tid: string\n\tappName: string\n\tcreatedAt: string\n}> = []\n\nfunction usePlaygroundOnboardingGate() {\n\tconst rootData = useRootLoaderData()\n\tconst persistEnabled = rootData.preferences?.playground?.persist ?? false\n\tconst onboardingComplete =\n\t\trootData.preferences?.onboardingComplete?.includes(\n\t\t\tPLAYGROUND_ONBOARDING_FEATURE_ID,\n\t\t) ?? false\n\treturn {\n\t\tpersistEnabled,\n\t\tshouldConfirm: !persistEnabled && !onboardingComplete,\n\t}\n}\n\nfunction PlaygroundSetDialog({\n\topen,\n\tonOpenChange,\n\tonConfirm,\n\tisSubmitting,\n\tpersistFetcher,\n}: {\n\topen: boolean\n\tonOpenChange: (open: boolean) => void\n\tonConfirm: () => void\n\tisSubmitting: boolean\n\tpersistFetcher: ReturnType<typeof useFetcher<PersistPlaygroundResult>>\n}) {\n\tconst peRedirectInput = usePERedirectInput()\n\tconst { persistEnabled } = usePlaygroundOnboardingGate()\n\tconst isPersisting = persistFetcher.state !== 'idle'\n\tconst currentPersist =\n\t\tpersistFetcher.data?.status === 'success'\n\t\t\t? persistFetcher.data.persist\n\t\t\t: persistEnabled\n\tconst nextPersist = !currentPersist\n\treturn (\n\t\t<Dialog open={open} onOpenChange={onOpenChange}>\n\t\t\t<DialogContent className=\"max-w-xl\">\n\t\t\t\t<DialogHeader>\n\t\t\t\t\t<DialogTitle>Playground ready for your first step</DialogTitle>\n\t\t\t\t\t<DialogDescription>\n\t\t\t\t\t\tNice work getting here! Setting the playground is how you bring the\n\t\t\t\t\t\tnext step&apos;s instructions into your workspace.\n\t\t\t\t\t</DialogDescription>\n\t\t\t\t</DialogHeader>\n\t\t\t\t<div className=\"space-y-4 text-sm\">\n\t\t\t\t\t<p className=\"text-muted-foreground\">\n\t\t\t\t\t\tThis will replace whatever is currently in your playground with the\n\t\t\t\t\t\tnext step&apos;s files. That is expected and the default workflow.\n\t\t\t\t\t</p>\n\t\t\t\t\t<div className=\"border-border bg-muted/40 space-y-3 rounded-md border p-4\">\n\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t<p className=\"text-foreground font-semibold\">\n\t\t\t\t\t\t\t\tOptional: Save a copy each time\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t<p className=\"text-muted-foreground mt-1 text-sm\">\n\t\t\t\t\t\t\t\tWhen enabled, every set saves a copy in\n\t\t\t\t\t\t\t\t<span className=\"font-mono\"> saved-playgrounds</span>. You can\n\t\t\t\t\t\t\t\tchange this later in Preferences.\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t<p className=\"text-muted-foreground mt-2 text-xs\">\n\t\t\t\t\t\t\t\tYou can always manage this in Preferences.\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<persistFetcher.Form method=\"POST\" action=\"/persist-playground\">\n\t\t\t\t\t\t\t{peRedirectInput}\n\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\ttype=\"hidden\"\n\t\t\t\t\t\t\t\tname=\"persist\"\n\t\t\t\t\t\t\t\tvalue={nextPersist ? 'true' : 'false'}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<div className=\"flex items-center justify-between gap-3\">\n\t\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t\t<p className=\"text-foreground text-sm font-medium\">\n\t\t\t\t\t\t\t\t\t\tPersistence\n\t\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t\t\t<p className=\"text-muted-foreground text-xs\">\n\t\t\t\t\t\t\t\t\t\t{currentPersist ? 'Enabled' : 'Disabled'}\n\t\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\t\t\t\t\trole=\"switch\"\n\t\t\t\t\t\t\t\t\taria-checked={currentPersist}\n\t\t\t\t\t\t\t\t\taria-label={`Toggle playground persistence ${\n\t\t\t\t\t\t\t\t\t\tcurrentPersist ? 'off' : 'on'\n\t\t\t\t\t\t\t\t\t}`}\n\t\t\t\t\t\t\t\t\tclassName={clsx(\n\t\t\t\t\t\t\t\t\t\t'focus-visible:ring-ring relative inline-flex h-6 w-11 items-center rounded-full border transition',\n\t\t\t\t\t\t\t\t\t\tcurrentPersist\n\t\t\t\t\t\t\t\t\t\t\t? 'border-foreground bg-foreground'\n\t\t\t\t\t\t\t\t\t\t\t: 'border-border bg-muted',\n\t\t\t\t\t\t\t\t\t\tisPersisting ? 'cursor-progress opacity-70' : null,\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\tdisabled={isPersisting}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\tclassName={clsx(\n\t\t\t\t\t\t\t\t\t\t\t'bg-background inline-block h-5 w-5 rounded-full shadow transition',\n\t\t\t\t\t\t\t\t\t\t\tcurrentPersist ? 'translate-x-5' : 'translate-x-0',\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</button>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</persistFetcher.Form>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<DialogFooter>\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclassName=\"border-border text-foreground hover:bg-muted focus-visible:ring-ring inline-flex items-center justify-center rounded-md border px-3 py-2 text-sm font-semibold\"\n\t\t\t\t\t\tonClick={() => onOpenChange(false)}\n\t\t\t\t\t>\n\t\t\t\t\t\tCancel\n\t\t\t\t\t</button>\n\t\t\t\t\t<Button\n\t\t\t\t\t\tvarient=\"primary\"\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tonClick={onConfirm}\n\t\t\t\t\t\tdisabled={isSubmitting}\n\t\t\t\t\t>\n\t\t\t\t\t\t{isSubmitting ? 'Setting...' : 'Set playground'}\n\t\t\t\t\t</Button>\n\t\t\t\t</DialogFooter>\n\t\t\t</DialogContent>\n\t\t</Dialog>\n\t)\n}\n\nfunction SavedPlaygroundsDialog({\n\topen,\n\tonOpenChange,\n\tallApps,\n}: {\n\topen: boolean\n\tonOpenChange: (open: boolean) => void\n\tallApps: Array<{ name: string; displayName: string }>\n}) {\n\tconst listFetcher = useFetcher<SavedPlaygroundsLoaderData>()\n\tconst actionFetcher = useFetcher<SavedPlaygroundsActionData>()\n\tconst [query, setQuery] = React.useState('')\n\tconst savedPlaygrounds =\n\t\tlistFetcher.data?.status === 'success'\n\t\t\t? listFetcher.data.savedPlaygrounds\n\t\t\t: emptySavedPlaygrounds\n\tconst isLoading = listFetcher.state !== 'idle' && !listFetcher.data\n\tconst isSubmitting = actionFetcher.state !== 'idle'\n\tconst activeSubmissionId = actionFetcher.formData?.get(\n\t\t'savedPlaygroundId',\n\t) as string | null\n\tconst formatter = React.useMemo(\n\t\t() =>\n\t\t\tnew Intl.DateTimeFormat(undefined, {\n\t\t\t\tdateStyle: 'medium',\n\t\t\t\ttimeStyle: 'short',\n\t\t\t}),\n\t\t[],\n\t)\n\n\tReact.useEffect(() => {\n\t\tif (!open) return\n\t\tif (listFetcher.state !== 'idle') return\n\t\tvoid listFetcher.load('/saved-playgrounds')\n\t}, [listFetcher, open])\n\n\tReact.useEffect(() => {\n\t\tif (!open) {\n\t\t\tsetQuery('')\n\t\t}\n\t}, [open])\n\n\tReact.useEffect(() => {\n\t\tif (actionFetcher.data?.status === 'success') {\n\t\t\tonOpenChange(false)\n\t\t}\n\t}, [actionFetcher.data, onOpenChange])\n\n\tconst filteredPlaygrounds = React.useMemo(() => {\n\t\tconst normalized = query.trim().toLowerCase()\n\t\tif (!normalized) return savedPlaygrounds\n\t\treturn savedPlaygrounds.filter((entry) => {\n\t\t\tconst displayName =\n\t\t\t\tallApps.find((app) => app.name === entry.appName)?.displayName ??\n\t\t\t\tentry.appName\n\t\t\treturn (\n\t\t\t\tentry.appName.toLowerCase().includes(normalized) ||\n\t\t\t\tentry.id.toLowerCase().includes(normalized) ||\n\t\t\t\tdisplayName.toLowerCase().includes(normalized)\n\t\t\t)\n\t\t})\n\t}, [allApps, query, savedPlaygrounds])\n\n\treturn (\n\t\t<Dialog open={open} onOpenChange={onOpenChange}>\n\t\t\t<DialogContent className=\"max-w-2xl\">\n\t\t\t\t<DialogHeader>\n\t\t\t\t\t<DialogTitle>Saved playgrounds</DialogTitle>\n\t\t\t\t\t<DialogDescription>\n\t\t\t\t\t\tRestore a saved playground into your active playground directory.\n\t\t\t\t\t</DialogDescription>\n\t\t\t\t</DialogHeader>\n\t\t\t\t<div className=\"space-y-4\">\n\t\t\t\t\t<div className=\"space-y-2\">\n\t\t\t\t\t\t<label\n\t\t\t\t\t\t\thtmlFor=\"savedPlaygroundSearch\"\n\t\t\t\t\t\t\tclassName=\"text-sm font-medium\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tSearch saved playgrounds\n\t\t\t\t\t\t</label>\n\t\t\t\t\t\t<input\n\t\t\t\t\t\t\tid=\"savedPlaygroundSearch\"\n\t\t\t\t\t\t\ttype=\"search\"\n\t\t\t\t\t\t\tvalue={query}\n\t\t\t\t\t\t\tonChange={(event) => setQuery(event.currentTarget.value)}\n\t\t\t\t\t\t\tplaceholder=\"Filter by exercise, app name, or timestamp\"\n\t\t\t\t\t\t\tclassName=\"border-border bg-background text-foreground w-full rounded-md border px-3 py-2 text-sm\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div className=\"border-border bg-muted/40 rounded-md border\">\n\t\t\t\t\t\t<div className=\"border-border text-muted-foreground flex items-center justify-between border-b px-3 py-2 text-xs\">\n\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t{savedPlaygrounds.length === 1\n\t\t\t\t\t\t\t\t\t? '1 saved playground'\n\t\t\t\t\t\t\t\t\t: `${savedPlaygrounds.length} saved playgrounds`}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t{query ? (\n\t\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t\t{filteredPlaygrounds.length === 1\n\t\t\t\t\t\t\t\t\t\t? '1 match'\n\t\t\t\t\t\t\t\t\t\t: `${filteredPlaygrounds.length} matches`}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div className=\"max-h-72 overflow-y-auto\">\n\t\t\t\t\t\t\t{isLoading ? (\n\t\t\t\t\t\t\t\t<div className=\"text-muted-foreground px-3 py-4 text-sm\">\n\t\t\t\t\t\t\t\t\tLoading saved playgrounds...\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t) : listFetcher.data?.status === 'disabled' ? (\n\t\t\t\t\t\t\t\t<div className=\"text-muted-foreground px-3 py-4 text-sm\">\n\t\t\t\t\t\t\t\t\tEnable playground persistence in Preferences to use saved\n\t\t\t\t\t\t\t\t\tplaygrounds.\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t) : filteredPlaygrounds.length === 0 ? (\n\t\t\t\t\t\t\t\t<div className=\"text-muted-foreground px-3 py-4 text-sm\">\n\t\t\t\t\t\t\t\t\t{query\n\t\t\t\t\t\t\t\t\t\t? 'No saved playgrounds match your search.'\n\t\t\t\t\t\t\t\t\t\t: 'No saved playgrounds yet. Set the playground to create one.'}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\tfilteredPlaygrounds.map((entry) => {\n\t\t\t\t\t\t\t\t\tconst displayName =\n\t\t\t\t\t\t\t\t\t\tallApps.find((app) => app.name === entry.appName)\n\t\t\t\t\t\t\t\t\t\t\t?.displayName ?? entry.appName\n\t\t\t\t\t\t\t\t\tconst createdAt = new Date(entry.createdAt)\n\t\t\t\t\t\t\t\t\tconst isActive = activeSubmissionId === entry.id\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\tkey={entry.id}\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"border-border flex items-center justify-between gap-4 border-b px-3 py-3 last:border-b-0\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<div className=\"min-w-0\">\n\t\t\t\t\t\t\t\t\t\t\t\t<p className=\"text-foreground text-sm font-semibold\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t{displayName}\n\t\t\t\t\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t\t\t\t\t\t<p className=\"text-muted-foreground truncate font-mono text-xs\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t{entry.appName}\n\t\t\t\t\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t\t\t\t\t\t<time\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"text-muted-foreground text-xs\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tdateTime={entry.createdAt}\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{Number.isNaN(createdAt.getTime())\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? entry.createdAt\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: formatter.format(createdAt)}\n\t\t\t\t\t\t\t\t\t\t\t\t</time>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\tvarient=\"primary\"\n\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\tdisabled={isSubmitting}\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={() =>\n\t\t\t\t\t\t\t\t\t\t\t\t\tactionFetcher.submit(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{ savedPlaygroundId: entry.id },\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{ method: 'POST', action: '/saved-playgrounds' },\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{isActive ? 'Setting...' : 'Set playground'}\n\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t{actionFetcher.data?.status === 'error' ? (\n\t\t\t\t\t\t<p className=\"text-foreground-destructive text-sm\">\n\t\t\t\t\t\t\t{actionFetcher.data.error}\n\t\t\t\t\t\t</p>\n\t\t\t\t\t) : null}\n\t\t\t\t</div>\n\t\t\t\t<DialogFooter>\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclassName=\"border-border text-foreground hover:bg-muted focus-visible:ring-ring inline-flex items-center justify-center rounded-md border px-3 py-2 text-sm font-semibold\"\n\t\t\t\t\t\tonClick={() => onOpenChange(false)}\n\t\t\t\t\t>\n\t\t\t\t\t\tClose\n\t\t\t\t\t</button>\n\t\t\t\t</DialogFooter>\n\t\t\t</DialogContent>\n\t\t</Dialog>\n\t)\n}\n\nexport function SetPlayground({\n\tappName,\n\treset = false,\n\ttooltipText,\n\t...buttonProps\n}: {\n\tappName: string\n\ttooltipText?: string\n\treset?: boolean\n} & React.ComponentProps<'button'>) {\n\tconst fetcher = useFetcher<typeof action>()\n\tconst persistFetcher = useFetcher<PersistPlaygroundResult>()\n\tconst peRedirectInput = usePERedirectInput()\n\tconst { shouldConfirm } = usePlaygroundOnboardingGate()\n\tconst [dialogOpen, setDialogOpen] = React.useState(false)\n\tconst formRef = React.useRef<HTMLFormElement>(null)\n\tconst bypassConfirmationRef = React.useRef(false)\n\tconst isSubmitting = fetcher.state !== 'idle'\n\n\tconst submitButton = (\n\t\t<button\n\t\t\ttype=\"submit\"\n\t\t\t{...buttonProps}\n\t\t\tclassName={clsx(\n\t\t\t\tbuttonProps.className,\n\t\t\t\tfetcher.state !== 'idle' ? 'cursor-progress' : null,\n\t\t\t\tfetcher.data?.status === 'error' ? 'cursor-not-allowed' : null,\n\t\t\t)}\n\t\t/>\n\t)\n\treturn (\n\t\t<>\n\t\t\t<fetcher.Form\n\t\t\t\taction=\"/set-playground\"\n\t\t\t\tmethod=\"POST\"\n\t\t\t\tclassName=\"inline-flex items-center justify-center\"\n\t\t\t\tref={formRef}\n\t\t\t\tonSubmit={(event) => {\n\t\t\t\t\tif (shouldConfirm && !bypassConfirmationRef.current) {\n\t\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\t\tsetDialogOpen(true)\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\tbypassConfirmationRef.current = false\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{peRedirectInput}\n\t\t\t\t<input type=\"hidden\" name=\"appName\" value={appName} />\n\t\t\t\t{reset ? <input type=\"hidden\" name=\"reset\" value=\"true\" /> : null}\n\t\t\t\t{showProgressBarField}\n\t\t\t\t{tooltipText ? (\n\t\t\t\t\t<SimpleTooltip content={tooltipText}>{submitButton}</SimpleTooltip>\n\t\t\t\t) : (\n\t\t\t\t\tsubmitButton\n\t\t\t\t)}\n\t\t\t</fetcher.Form>\n\t\t\t<PlaygroundSetDialog\n\t\t\t\topen={dialogOpen}\n\t\t\t\tonOpenChange={setDialogOpen}\n\t\t\t\tisSubmitting={isSubmitting}\n\t\t\t\tpersistFetcher={persistFetcher}\n\t\t\t\tonConfirm={() => {\n\t\t\t\t\tbypassConfirmationRef.current = true\n\t\t\t\t\tsetDialogOpen(false)\n\t\t\t\t\tformRef.current?.requestSubmit()\n\t\t\t\t}}\n\t\t\t/>\n\t\t</>\n\t)\n}\n\nexport function PlaygroundChooser({\n\tplaygroundAppName,\n\tallApps,\n}: {\n\tplaygroundAppName?: string\n\tallApps: Array<{ name: string; displayName: string }>\n}) {\n\tconst fetcher = useFetcher<typeof action>()\n\tconst persistFetcher = useFetcher<PersistPlaygroundResult>()\n\tconst { shouldConfirm, persistEnabled } = usePlaygroundOnboardingGate()\n\tconst [dialogOpen, setDialogOpen] = React.useState(false)\n\tconst [savedDialogOpen, setSavedDialogOpen] = React.useState(false)\n\tconst [pendingAppName, setPendingAppName] = React.useState<string | null>(\n\t\tnull,\n\t)\n\tconst isSubmitting = fetcher.state !== 'idle'\n\treturn (\n\t\t<>\n\t\t\t<Select.Root\n\t\t\t\tname=\"appName\"\n\t\t\t\tvalue={playgroundAppName}\n\t\t\t\tonValueChange={(appName) => {\n\t\t\t\t\tif (appName === savedPlaygroundsValue) {\n\t\t\t\t\t\tsetSavedDialogOpen(true)\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\tif (shouldConfirm) {\n\t\t\t\t\t\tsetPendingAppName(appName)\n\t\t\t\t\t\tsetDialogOpen(true)\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\tvoid fetcher.submit(\n\t\t\t\t\t\t{ appName },\n\t\t\t\t\t\t{ method: 'POST', action: '/set-playground' },\n\t\t\t\t\t)\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<Select.Trigger\n\t\t\t\t\taria-label=\"Select app for playground\"\n\t\t\t\t\tclassName={clsx(\n\t\t\t\t\t\t'radix-placeholder:text-muted-foreground flex h-full w-full items-center justify-between text-left focus-visible:outline-none',\n\t\t\t\t\t\tfetcher.state !== 'idle' ? 'cursor-progress' : null,\n\t\t\t\t\t\tfetcher.data?.status === 'error' ? 'cursor-not-allowed' : null,\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t<span className=\"scrollbar-thin scrollbar-thumb-scrollbar w-80 flex-1 truncate\">\n\t\t\t\t\t\t<Select.Value\n\t\t\t\t\t\t\tplaceholder=\"Select current app\"\n\t\t\t\t\t\t\tclassName=\"inline-block w-40 truncate\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</span>\n\t\t\t\t\t<Select.Icon>\n\t\t\t\t\t\t<Icon name=\"TriangleDownSmall\" />\n\t\t\t\t\t</Select.Icon>\n\t\t\t\t</Select.Trigger>\n\t\t\t\t<Select.Portal>\n\t\t\t\t\t<Select.Content\n\t\t\t\t\t\tposition=\"popper\"\n\t\t\t\t\t\talign=\"start\"\n\t\t\t\t\t\tclassName=\"invert-theme bg-popover text-popover-foreground z-20 max-h-[50vh] lg:max-h-[70vh]\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<Select.ScrollUpButton className=\"flex h-5 cursor-default items-center justify-center\">\n\t\t\t\t\t\t\t<Icon name=\"ChevronUp\" />\n\t\t\t\t\t\t</Select.ScrollUpButton>\n\t\t\t\t\t\t<Select.Viewport className=\"p-3\">\n\t\t\t\t\t\t\t<Select.Group>\n\t\t\t\t\t\t\t\t<Select.Label className=\"px-5 pb-3 font-mono uppercase\">\n\t\t\t\t\t\t\t\t\tApp\n\t\t\t\t\t\t\t\t</Select.Label>\n\t\t\t\t\t\t\t\t{allApps\n\t\t\t\t\t\t\t\t\t.filter((app) => app.name !== 'playground')\n\t\t\t\t\t\t\t\t\t.map((app) => {\n\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t<SelectItem key={app.name} value={app.name}>\n\t\t\t\t\t\t\t\t\t\t\t\t{app.displayName}\n\t\t\t\t\t\t\t\t\t\t\t</SelectItem>\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</Select.Group>\n\t\t\t\t\t\t\t{persistEnabled ? (\n\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t<Select.Separator className=\"bg-border my-2 h-px\" />\n\t\t\t\t\t\t\t\t\t<Select.Group>\n\t\t\t\t\t\t\t\t\t\t<Select.Label className=\"text-muted-foreground px-5 pb-2 font-mono text-xs uppercase\">\n\t\t\t\t\t\t\t\t\t\t\tSaved playgrounds\n\t\t\t\t\t\t\t\t\t\t</Select.Label>\n\t\t\t\t\t\t\t\t\t\t<SelectItem value={savedPlaygroundsValue}>\n\t\t\t\t\t\t\t\t\t\t\tChoose a saved playground...\n\t\t\t\t\t\t\t\t\t\t</SelectItem>\n\t\t\t\t\t\t\t\t\t</Select.Group>\n\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t</Select.Viewport>\n\t\t\t\t\t\t<Select.ScrollDownButton className=\"flex h-5 cursor-default items-center justify-center\">\n\t\t\t\t\t\t\t<Icon name=\"ChevronDown\" />\n\t\t\t\t\t\t</Select.ScrollDownButton>\n\t\t\t\t\t</Select.Content>\n\t\t\t\t</Select.Portal>\n\t\t\t</Select.Root>\n\t\t\t<PlaygroundSetDialog\n\t\t\t\topen={dialogOpen}\n\t\t\t\tonOpenChange={(open) => {\n\t\t\t\t\tsetDialogOpen(open)\n\t\t\t\t\tif (!open) {\n\t\t\t\t\t\tsetPendingAppName(null)\n\t\t\t\t\t}\n\t\t\t\t}}\n\t\t\t\tisSubmitting={isSubmitting}\n\t\t\t\tpersistFetcher={persistFetcher}\n\t\t\t\tonConfirm={() => {\n\t\t\t\t\tif (!pendingAppName) return\n\t\t\t\t\tsetDialogOpen(false)\n\t\t\t\t\tvoid fetcher.submit(\n\t\t\t\t\t\t{ appName: pendingAppName },\n\t\t\t\t\t\t{ method: 'POST', action: '/set-playground' },\n\t\t\t\t\t)\n\t\t\t\t\tsetPendingAppName(null)\n\t\t\t\t}}\n\t\t\t/>\n\t\t\t<SavedPlaygroundsDialog\n\t\t\t\topen={savedDialogOpen}\n\t\t\t\tonOpenChange={setSavedDialogOpen}\n\t\t\t\tallApps={allApps}\n\t\t\t/>\n\t\t</>\n\t)\n}\n\nfunction SelectItem({\n\tvalue,\n\tchildren,\n}: {\n\tvalue: string\n\tchildren: React.ReactNode\n}) {\n\treturn (\n\t\t<Select.Item\n\t\t\tvalue={value}\n\t\t\tclassName=\"radix-disabled:text-muted-foreground radix-highlighted:opacity-100 radix-highlighted:outline-none radix-state-checked:opacity-100 relative flex cursor-pointer items-center rounded px-10 py-2 leading-none opacity-80 select-none\"\n\t\t>\n\t\t\t<Select.ItemText>{children}</Select.ItemText>\n\t\t\t<Select.ItemIndicator className=\"absolute left-0 inline-flex w-[25px] items-center justify-center\">\n\t\t\t\t<Icon name=\"CheckSmall\" />\n\t\t\t</Select.ItemIndicator>\n\t\t</Select.Item>\n\t)\n}\n\nexport function SetAppToPlayground({\n\tappName,\n\tisOutdated,\n\thideTextOnNarrow,\n\tshowOnboardingIndicator = false,\n\tonClick,\n\tclassName,\n\t...buttonProps\n}: {\n\tappName: string\n\tisOutdated?: boolean\n\t/** When true, hides text at narrow container widths (for use in @container contexts) */\n\thideTextOnNarrow?: boolean\n\tshowOnboardingIndicator?: boolean\n} & React.ComponentProps<'button'>) {\n\tconst [showBadge, dismissBadge] = useOnboardingIndicator(\n\t\tPLAYGROUND_ONBOARDING_FEATURE_ID,\n\t)\n\tif (ENV.EPICSHOP_DEPLOYED) return null\n\tconst shouldShowBadge = showOnboardingIndicator && showBadge\n\tconst buttonClassName = clsx(className, shouldShowBadge ? 'relative' : null)\n\treturn (\n\t\t<SetPlayground\n\t\t\tappName={appName}\n\t\t\ttooltipText={\n\t\t\t\tisOutdated\n\t\t\t\t\t? 'The app the playground was set to has been updated. Click to update to the latest version.'\n\t\t\t\t\t: 'Playground is not set to the right app. Click to set Playground.'\n\t\t\t}\n\t\t\t{...buttonProps}\n\t\t\tclassName={buttonClassName}\n\t\t\tonClick={(event) => {\n\t\t\t\tonClick?.(event)\n\t\t\t\tif (showOnboardingIndicator) {\n\t\t\t\t\tdismissBadge()\n\t\t\t\t}\n\t\t\t}}\n\t\t>\n\t\t\t<span className=\"text-foreground-destructive flex items-center justify-center gap-1 hover:underline\">\n\t\t\t\t<Icon name=\"Unlinked\" className=\"animate-ping\" />{' '}\n\t\t\t\t<span\n\t\t\t\t\tclassName={\n\t\t\t\t\t\thideTextOnNarrow\n\t\t\t\t\t\t\t? 'hidden uppercase @min-[600px]:inline'\n\t\t\t\t\t\t\t: 'uppercase'\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t\t{isOutdated ? 'Playground Outdated' : 'Set to Playground'}\n\t\t\t\t</span>\n\t\t\t\t{shouldShowBadge ? (\n\t\t\t\t\t<OnboardingBadge\n\t\t\t\t\t\ttooltip=\"Set the playground for this step.\"\n\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t/>\n\t\t\t\t) : null}\n\t\t\t</span>\n\t\t</SetPlayground>\n\t)\n}\n"],"names":["PLAYGROUND_ONBOARDING_FEATURE_ID","savedPlaygroundsValue","emptySavedPlaygrounds","usePlaygroundOnboardingGate","rootData","useRootLoaderData","persistEnabled","preferences","playground","persist","onboardingComplete","includes","shouldConfirm","PlaygroundSetDialog","open","onOpenChange","onConfirm","isSubmitting","persistFetcher","peRedirectInput","usePERedirectInput","isPersisting","state","currentPersist","data","status","nextPersist","Dialog","children","jsxs","DialogContent","className","DialogHeader","jsx","DialogTitle","DialogDescription","Form","method","action","type","name","value","role","clsx","disabled","DialogFooter","onClick","Button","varient","SavedPlaygroundsDialog","allApps","listFetcher","useFetcher","actionFetcher","query","setQuery","React","savedPlaygrounds","isLoading","activeSubmissionId","formData","get","formatter","Intl","DateTimeFormat","dateStyle","timeStyle","load","filteredPlaygrounds","normalized","trim","toLowerCase","filter","entry","displayName","find","app","appName","id","htmlFor","onChange","event","currentTarget","placeholder","length","map","createdAt","Date","isActive","dateTime","Number","isNaN","getTime","format","submit","savedPlaygroundId","error","SetPlayground","reset","tooltipText","buttonProps","fetcher","dialogOpen","setDialogOpen","formRef","bypassConfirmationRef","submitButton","Fragment","ref","onSubmit","current","preventDefault","showProgressBarField","SimpleTooltip","content","requestSubmit","PlaygroundChooser","playgroundAppName","savedDialogOpen","setSavedDialogOpen","pendingAppName","setPendingAppName","Select","onValueChange","Icon","position","align","SelectItem","SetAppToPlayground","isOutdated","hideTextOnNarrow","showOnboardingIndicator","showBadge","dismissBadge","useOnboardingIndicator","ENV","EPICSHOP_DEPLOYED","shouldShowBadge","buttonClassName","OnboardingBadge","tooltip","size"],"mappings":"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"}
1
+ {"version":3,"file":"set-playground-BSGwH9dH.js","sources":["../../../app/routes/set-playground.tsx"],"sourcesContent":["import {\n\tgetAppByName,\n\tgetApps,\n\tisPlaygroundApp,\n\tisProblemApp,\n\tisSolutionApp,\n\tsetPlayground,\n} from '@epic-web/workshop-utils/apps.server'\nimport { markOnboardingComplete } from '@epic-web/workshop-utils/db.server'\nimport { getDiffCode } from '@epic-web/workshop-utils/diff.server'\nimport { clearTestProcessEntry } from '@epic-web/workshop-utils/process-manager.server'\nimport * as Select from '@radix-ui/react-select'\nimport { clsx } from 'clsx'\nimport * as React from 'react'\nimport { type ActionFunctionArgs, useFetcher } from 'react-router'\nimport { z } from 'zod'\nimport { Button } from '#app/components/button.tsx'\nimport { Icon } from '#app/components/icons.tsx'\nimport {\n\tOnboardingBadge,\n\tuseOnboardingIndicator,\n} from '#app/components/onboarding-indicator.tsx'\nimport { showProgressBarField } from '#app/components/progress-bar.tsx'\nimport {\n\tDialog,\n\tDialogContent,\n\tDialogDescription,\n\tDialogFooter,\n\tDialogHeader,\n\tDialogTitle,\n} from '#app/components/ui/dialog.tsx'\nimport { SimpleTooltip } from '#app/components/ui/tooltip.tsx'\nimport { ensureUndeployed, getErrorMessage } from '#app/utils/misc.tsx'\nimport { dataWithPE, usePERedirectInput } from '#app/utils/pe.tsx'\nimport { useRootLoaderData } from '#app/utils/root-loader.ts'\nimport { createToastHeaders } from '#app/utils/toast.server.ts'\n\nconst PLAYGROUND_ONBOARDING_FEATURE_ID = 'set-playground'\n\nconst SetPlaygroundSchema = z.object({\n\tappName: z.string(),\n\treset: z\n\t\t.string()\n\t\t.nullable()\n\t\t.optional()\n\t\t.transform((v) => v === 'true'),\n})\n\nexport async function action({ request }: ActionFunctionArgs) {\n\tensureUndeployed()\n\tconst formData = await request.formData()\n\tconst rawData = {\n\t\tappName: formData.get('appName'),\n\t\tredirectTo: formData.get('redirectTo'),\n\t}\n\tconst result = SetPlaygroundSchema.safeParse(rawData)\n\tif (!result.success) {\n\t\treturn dataWithPE(\n\t\t\trequest,\n\t\t\tformData,\n\t\t\t{ status: 'error', error: result.error.message } as const,\n\t\t\t{ status: 400 },\n\t\t)\n\t}\n\tconst form = result.data\n\tconst app = await getAppByName(form.appName)\n\tif (!app) {\n\t\treturn dataWithPE(\n\t\t\trequest,\n\t\t\tformData,\n\t\t\t{ status: 'error', error: `App ${form.appName} not found` } as const,\n\t\t\t{ status: 404 },\n\t\t)\n\t}\n\tconst converseApp =\n\t\tisProblemApp(app) && app.solutionName\n\t\t\t? await getAppByName(app.solutionName)\n\t\t\t: isSolutionApp(app) && app.problemName\n\t\t\t\t? await getAppByName(app.problemName)\n\t\t\t\t: undefined\n\ttry {\n\t\tawait setPlayground(app.fullPath, { reset: form.reset })\n\t} catch (error: unknown) {\n\t\tconst message = getErrorMessage(error)\n\t\tconsole.error('Error setting playground', message)\n\t\treturn dataWithPE(\n\t\t\trequest,\n\t\t\tformData,\n\t\t\t{ status: 'error', error: message } as const,\n\t\t\t{\n\t\t\t\tstatus: 500,\n\t\t\t\theaders: await createToastHeaders({\n\t\t\t\t\ttype: 'error',\n\t\t\t\t\ttitle: 'Error',\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t'There was an error setting the playground. Check the terminal for details.',\n\t\t\t\t}),\n\t\t\t},\n\t\t)\n\t}\n\tconst apps = await getApps({ forceFresh: true })\n\tconst playground = apps.find(isPlaygroundApp)\n\tif (playground) {\n\t\tclearTestProcessEntry(playground)\n\t\tif (converseApp) {\n\t\t\tvoid getDiffCode(playground, converseApp, { forceFresh: true })\n\t\t}\n\t}\n\tawait markOnboardingComplete(PLAYGROUND_ONBOARDING_FEATURE_ID)\n\treturn dataWithPE(request, formData, { status: 'success' } as const)\n}\n\ntype PersistPlaygroundResult =\n\t| { status: 'success'; persist: boolean }\n\t| { status: 'error' }\n\ntype SavedPlaygroundsLoaderData =\n\t| {\n\t\t\tstatus: 'success'\n\t\t\tsavedPlaygrounds: Array<{\n\t\t\t\tid: string\n\t\t\t\tappName: string\n\t\t\t\tcreatedAt: string\n\t\t\t}>\n\t }\n\t| { status: 'disabled'; savedPlaygrounds: [] }\n\ntype SavedPlaygroundsActionData =\n\t| { status: 'success'; savedPlaygroundId: string }\n\t| { status: 'error'; error: string }\n\nconst savedPlaygroundsValue = '__saved-playgrounds__'\nconst emptySavedPlaygrounds: Array<{\n\tid: string\n\tappName: string\n\tcreatedAt: string\n}> = []\n\nfunction usePlaygroundOnboardingGate() {\n\tconst rootData = useRootLoaderData()\n\tconst persistEnabled = rootData.preferences?.playground?.persist ?? false\n\tconst onboardingComplete =\n\t\trootData.preferences?.onboardingComplete?.includes(\n\t\t\tPLAYGROUND_ONBOARDING_FEATURE_ID,\n\t\t) ?? false\n\treturn {\n\t\tpersistEnabled,\n\t\tshouldConfirm: !persistEnabled && !onboardingComplete,\n\t}\n}\n\nfunction PlaygroundSetDialog({\n\topen,\n\tonOpenChange,\n\tonConfirm,\n\tisSubmitting,\n\tpersistFetcher,\n}: {\n\topen: boolean\n\tonOpenChange: (open: boolean) => void\n\tonConfirm: () => void\n\tisSubmitting: boolean\n\tpersistFetcher: ReturnType<typeof useFetcher<PersistPlaygroundResult>>\n}) {\n\tconst peRedirectInput = usePERedirectInput()\n\tconst { persistEnabled } = usePlaygroundOnboardingGate()\n\tconst isPersisting = persistFetcher.state !== 'idle'\n\tconst currentPersist =\n\t\tpersistFetcher.data?.status === 'success'\n\t\t\t? persistFetcher.data.persist\n\t\t\t: persistEnabled\n\tconst nextPersist = !currentPersist\n\treturn (\n\t\t<Dialog open={open} onOpenChange={onOpenChange}>\n\t\t\t<DialogContent className=\"max-w-xl\">\n\t\t\t\t<DialogHeader>\n\t\t\t\t\t<DialogTitle>Playground ready for your first step</DialogTitle>\n\t\t\t\t\t<DialogDescription>\n\t\t\t\t\t\tNice work getting here! Setting the playground is how you bring the\n\t\t\t\t\t\tnext step&apos;s instructions into your workspace.\n\t\t\t\t\t</DialogDescription>\n\t\t\t\t</DialogHeader>\n\t\t\t\t<div className=\"space-y-4 text-sm\">\n\t\t\t\t\t<p className=\"text-muted-foreground\">\n\t\t\t\t\t\tThis will replace whatever is currently in your playground with the\n\t\t\t\t\t\tnext step&apos;s files. That is expected and the default workflow.\n\t\t\t\t\t</p>\n\t\t\t\t\t<div className=\"border-border bg-muted/40 space-y-3 rounded-md border p-4\">\n\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t<p className=\"text-foreground font-semibold\">\n\t\t\t\t\t\t\t\tOptional: Save a copy each time\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t<p className=\"text-muted-foreground mt-1 text-sm\">\n\t\t\t\t\t\t\t\tWhen enabled, every set saves a copy in\n\t\t\t\t\t\t\t\t<span className=\"font-mono\"> saved-playgrounds</span>. You can\n\t\t\t\t\t\t\t\tchange this later in Preferences.\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t<p className=\"text-muted-foreground mt-2 text-xs\">\n\t\t\t\t\t\t\t\tYou can always manage this in Preferences.\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<persistFetcher.Form method=\"POST\" action=\"/persist-playground\">\n\t\t\t\t\t\t\t{peRedirectInput}\n\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\ttype=\"hidden\"\n\t\t\t\t\t\t\t\tname=\"persist\"\n\t\t\t\t\t\t\t\tvalue={nextPersist ? 'true' : 'false'}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<div className=\"flex items-center justify-between gap-3\">\n\t\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t\t<p className=\"text-foreground text-sm font-medium\">\n\t\t\t\t\t\t\t\t\t\tPersistence\n\t\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t\t\t<p className=\"text-muted-foreground text-xs\">\n\t\t\t\t\t\t\t\t\t\t{currentPersist ? 'Enabled' : 'Disabled'}\n\t\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\t\t\t\t\trole=\"switch\"\n\t\t\t\t\t\t\t\t\taria-checked={currentPersist}\n\t\t\t\t\t\t\t\t\taria-label={`Toggle playground persistence ${\n\t\t\t\t\t\t\t\t\t\tcurrentPersist ? 'off' : 'on'\n\t\t\t\t\t\t\t\t\t}`}\n\t\t\t\t\t\t\t\t\tclassName={clsx(\n\t\t\t\t\t\t\t\t\t\t'focus-visible:ring-ring relative inline-flex h-6 w-11 items-center rounded-full border transition',\n\t\t\t\t\t\t\t\t\t\tcurrentPersist\n\t\t\t\t\t\t\t\t\t\t\t? 'border-foreground bg-foreground'\n\t\t\t\t\t\t\t\t\t\t\t: 'border-border bg-muted',\n\t\t\t\t\t\t\t\t\t\tisPersisting ? 'cursor-progress opacity-70' : null,\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\tdisabled={isPersisting}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\tclassName={clsx(\n\t\t\t\t\t\t\t\t\t\t\t'bg-background inline-block h-5 w-5 rounded-full shadow transition',\n\t\t\t\t\t\t\t\t\t\t\tcurrentPersist ? 'translate-x-5' : 'translate-x-0',\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</button>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</persistFetcher.Form>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<DialogFooter>\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclassName=\"border-border text-foreground hover:bg-muted focus-visible:ring-ring inline-flex items-center justify-center rounded-md border px-3 py-2 text-sm font-semibold\"\n\t\t\t\t\t\tonClick={() => onOpenChange(false)}\n\t\t\t\t\t>\n\t\t\t\t\t\tCancel\n\t\t\t\t\t</button>\n\t\t\t\t\t<Button\n\t\t\t\t\t\tvarient=\"primary\"\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tonClick={onConfirm}\n\t\t\t\t\t\tdisabled={isSubmitting}\n\t\t\t\t\t>\n\t\t\t\t\t\t{isSubmitting ? 'Setting...' : 'Set playground'}\n\t\t\t\t\t</Button>\n\t\t\t\t</DialogFooter>\n\t\t\t</DialogContent>\n\t\t</Dialog>\n\t)\n}\n\nfunction SavedPlaygroundsDialog({\n\topen,\n\tonOpenChange,\n\tallApps,\n}: {\n\topen: boolean\n\tonOpenChange: (open: boolean) => void\n\tallApps: Array<{ name: string; displayName: string }>\n}) {\n\tconst listFetcher = useFetcher<SavedPlaygroundsLoaderData>()\n\tconst actionFetcher = useFetcher<SavedPlaygroundsActionData>()\n\tconst [query, setQuery] = React.useState('')\n\tconst savedPlaygrounds =\n\t\tlistFetcher.data?.status === 'success'\n\t\t\t? listFetcher.data.savedPlaygrounds\n\t\t\t: emptySavedPlaygrounds\n\tconst isLoading = listFetcher.state !== 'idle' && !listFetcher.data\n\tconst isSubmitting = actionFetcher.state !== 'idle'\n\tconst activeSubmissionId = actionFetcher.formData?.get(\n\t\t'savedPlaygroundId',\n\t) as string | null\n\tconst formatter = React.useMemo(\n\t\t() =>\n\t\t\tnew Intl.DateTimeFormat(undefined, {\n\t\t\t\tdateStyle: 'medium',\n\t\t\t\ttimeStyle: 'short',\n\t\t\t}),\n\t\t[],\n\t)\n\n\tReact.useEffect(() => {\n\t\tif (!open) return\n\t\tif (listFetcher.state !== 'idle') return\n\t\tvoid listFetcher.load('/saved-playgrounds')\n\t}, [listFetcher, open])\n\n\tReact.useEffect(() => {\n\t\tif (!open) {\n\t\t\tsetQuery('')\n\t\t}\n\t}, [open])\n\n\tReact.useEffect(() => {\n\t\tif (actionFetcher.data?.status === 'success') {\n\t\t\tonOpenChange(false)\n\t\t}\n\t}, [actionFetcher.data, onOpenChange])\n\n\tconst filteredPlaygrounds = React.useMemo(() => {\n\t\tconst normalized = query.trim().toLowerCase()\n\t\tif (!normalized) return savedPlaygrounds\n\t\treturn savedPlaygrounds.filter((entry) => {\n\t\t\tconst displayName =\n\t\t\t\tallApps.find((app) => app.name === entry.appName)?.displayName ??\n\t\t\t\tentry.appName\n\t\t\treturn (\n\t\t\t\tentry.appName.toLowerCase().includes(normalized) ||\n\t\t\t\tentry.id.toLowerCase().includes(normalized) ||\n\t\t\t\tdisplayName.toLowerCase().includes(normalized)\n\t\t\t)\n\t\t})\n\t}, [allApps, query, savedPlaygrounds])\n\n\treturn (\n\t\t<Dialog open={open} onOpenChange={onOpenChange}>\n\t\t\t<DialogContent className=\"max-w-2xl\">\n\t\t\t\t<DialogHeader>\n\t\t\t\t\t<DialogTitle>Saved playgrounds</DialogTitle>\n\t\t\t\t\t<DialogDescription>\n\t\t\t\t\t\tRestore a saved playground into your active playground directory.\n\t\t\t\t\t</DialogDescription>\n\t\t\t\t</DialogHeader>\n\t\t\t\t<div className=\"space-y-4\">\n\t\t\t\t\t<div className=\"space-y-2\">\n\t\t\t\t\t\t<label\n\t\t\t\t\t\t\thtmlFor=\"savedPlaygroundSearch\"\n\t\t\t\t\t\t\tclassName=\"text-sm font-medium\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tSearch saved playgrounds\n\t\t\t\t\t\t</label>\n\t\t\t\t\t\t<input\n\t\t\t\t\t\t\tid=\"savedPlaygroundSearch\"\n\t\t\t\t\t\t\ttype=\"search\"\n\t\t\t\t\t\t\tvalue={query}\n\t\t\t\t\t\t\tonChange={(event) => setQuery(event.currentTarget.value)}\n\t\t\t\t\t\t\tplaceholder=\"Filter by exercise, app name, or timestamp\"\n\t\t\t\t\t\t\tclassName=\"border-border bg-background text-foreground w-full rounded-md border px-3 py-2 text-sm\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div className=\"border-border bg-muted/40 rounded-md border\">\n\t\t\t\t\t\t<div className=\"border-border text-muted-foreground flex items-center justify-between border-b px-3 py-2 text-xs\">\n\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t{savedPlaygrounds.length === 1\n\t\t\t\t\t\t\t\t\t? '1 saved playground'\n\t\t\t\t\t\t\t\t\t: `${savedPlaygrounds.length} saved playgrounds`}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t{query ? (\n\t\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t\t{filteredPlaygrounds.length === 1\n\t\t\t\t\t\t\t\t\t\t? '1 match'\n\t\t\t\t\t\t\t\t\t\t: `${filteredPlaygrounds.length} matches`}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div className=\"max-h-72 overflow-y-auto\">\n\t\t\t\t\t\t\t{isLoading ? (\n\t\t\t\t\t\t\t\t<div className=\"text-muted-foreground px-3 py-4 text-sm\">\n\t\t\t\t\t\t\t\t\tLoading saved playgrounds...\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t) : listFetcher.data?.status === 'disabled' ? (\n\t\t\t\t\t\t\t\t<div className=\"text-muted-foreground px-3 py-4 text-sm\">\n\t\t\t\t\t\t\t\t\tEnable playground persistence in Preferences to use saved\n\t\t\t\t\t\t\t\t\tplaygrounds.\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t) : filteredPlaygrounds.length === 0 ? (\n\t\t\t\t\t\t\t\t<div className=\"text-muted-foreground px-3 py-4 text-sm\">\n\t\t\t\t\t\t\t\t\t{query\n\t\t\t\t\t\t\t\t\t\t? 'No saved playgrounds match your search.'\n\t\t\t\t\t\t\t\t\t\t: 'No saved playgrounds yet. Set the playground to create one.'}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\tfilteredPlaygrounds.map((entry) => {\n\t\t\t\t\t\t\t\t\tconst displayName =\n\t\t\t\t\t\t\t\t\t\tallApps.find((app) => app.name === entry.appName)\n\t\t\t\t\t\t\t\t\t\t\t?.displayName ?? entry.appName\n\t\t\t\t\t\t\t\t\tconst createdAt = new Date(entry.createdAt)\n\t\t\t\t\t\t\t\t\tconst isActive = activeSubmissionId === entry.id\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\tkey={entry.id}\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"border-border flex items-center justify-between gap-4 border-b px-3 py-3 last:border-b-0\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<div className=\"min-w-0\">\n\t\t\t\t\t\t\t\t\t\t\t\t<p className=\"text-foreground text-sm font-semibold\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t{displayName}\n\t\t\t\t\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t\t\t\t\t\t<p className=\"text-muted-foreground truncate font-mono text-xs\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t{entry.appName}\n\t\t\t\t\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t\t\t\t\t\t<time\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"text-muted-foreground text-xs\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tdateTime={entry.createdAt}\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{Number.isNaN(createdAt.getTime())\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? entry.createdAt\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: formatter.format(createdAt)}\n\t\t\t\t\t\t\t\t\t\t\t\t</time>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\tvarient=\"primary\"\n\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\tdisabled={isSubmitting}\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={() =>\n\t\t\t\t\t\t\t\t\t\t\t\t\tactionFetcher.submit(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{ savedPlaygroundId: entry.id },\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{ method: 'POST', action: '/saved-playgrounds' },\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{isActive ? 'Setting...' : 'Set playground'}\n\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t{actionFetcher.data?.status === 'error' ? (\n\t\t\t\t\t\t<p className=\"text-foreground-destructive text-sm\">\n\t\t\t\t\t\t\t{actionFetcher.data.error}\n\t\t\t\t\t\t</p>\n\t\t\t\t\t) : null}\n\t\t\t\t</div>\n\t\t\t\t<DialogFooter>\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclassName=\"border-border text-foreground hover:bg-muted focus-visible:ring-ring inline-flex items-center justify-center rounded-md border px-3 py-2 text-sm font-semibold\"\n\t\t\t\t\t\tonClick={() => onOpenChange(false)}\n\t\t\t\t\t>\n\t\t\t\t\t\tClose\n\t\t\t\t\t</button>\n\t\t\t\t</DialogFooter>\n\t\t\t</DialogContent>\n\t\t</Dialog>\n\t)\n}\n\nexport function SetPlayground({\n\tappName,\n\treset = false,\n\ttooltipText,\n\t...buttonProps\n}: {\n\tappName: string\n\ttooltipText?: string\n\treset?: boolean\n} & React.ComponentProps<'button'>) {\n\tconst fetcher = useFetcher<typeof action>()\n\tconst persistFetcher = useFetcher<PersistPlaygroundResult>()\n\tconst peRedirectInput = usePERedirectInput()\n\tconst { shouldConfirm } = usePlaygroundOnboardingGate()\n\tconst [dialogOpen, setDialogOpen] = React.useState(false)\n\tconst formRef = React.useRef<HTMLFormElement>(null)\n\tconst bypassConfirmationRef = React.useRef(false)\n\tconst isSubmitting = fetcher.state !== 'idle'\n\n\tconst submitButton = (\n\t\t<button\n\t\t\ttype=\"submit\"\n\t\t\t{...buttonProps}\n\t\t\tclassName={clsx(\n\t\t\t\tbuttonProps.className,\n\t\t\t\tfetcher.state !== 'idle' ? 'cursor-progress' : null,\n\t\t\t\tfetcher.data?.status === 'error' ? 'cursor-not-allowed' : null,\n\t\t\t)}\n\t\t/>\n\t)\n\treturn (\n\t\t<>\n\t\t\t<fetcher.Form\n\t\t\t\taction=\"/set-playground\"\n\t\t\t\tmethod=\"POST\"\n\t\t\t\tclassName=\"inline-flex items-center justify-center\"\n\t\t\t\tref={formRef}\n\t\t\t\tonSubmit={(event) => {\n\t\t\t\t\tif (shouldConfirm && !bypassConfirmationRef.current) {\n\t\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\t\tsetDialogOpen(true)\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\tbypassConfirmationRef.current = false\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{peRedirectInput}\n\t\t\t\t<input type=\"hidden\" name=\"appName\" value={appName} />\n\t\t\t\t{reset ? <input type=\"hidden\" name=\"reset\" value=\"true\" /> : null}\n\t\t\t\t{showProgressBarField}\n\t\t\t\t{tooltipText ? (\n\t\t\t\t\t<SimpleTooltip content={tooltipText}>{submitButton}</SimpleTooltip>\n\t\t\t\t) : (\n\t\t\t\t\tsubmitButton\n\t\t\t\t)}\n\t\t\t</fetcher.Form>\n\t\t\t<PlaygroundSetDialog\n\t\t\t\topen={dialogOpen}\n\t\t\t\tonOpenChange={setDialogOpen}\n\t\t\t\tisSubmitting={isSubmitting}\n\t\t\t\tpersistFetcher={persistFetcher}\n\t\t\t\tonConfirm={() => {\n\t\t\t\t\tbypassConfirmationRef.current = true\n\t\t\t\t\tsetDialogOpen(false)\n\t\t\t\t\tformRef.current?.requestSubmit()\n\t\t\t\t}}\n\t\t\t/>\n\t\t</>\n\t)\n}\n\nexport function PlaygroundChooser({\n\tplaygroundAppName,\n\tallApps,\n}: {\n\tplaygroundAppName?: string\n\tallApps: Array<{ name: string; displayName: string }>\n}) {\n\tconst fetcher = useFetcher<typeof action>()\n\tconst persistFetcher = useFetcher<PersistPlaygroundResult>()\n\tconst { shouldConfirm, persistEnabled } = usePlaygroundOnboardingGate()\n\tconst [dialogOpen, setDialogOpen] = React.useState(false)\n\tconst [savedDialogOpen, setSavedDialogOpen] = React.useState(false)\n\tconst [pendingAppName, setPendingAppName] = React.useState<string | null>(\n\t\tnull,\n\t)\n\tconst isSubmitting = fetcher.state !== 'idle'\n\treturn (\n\t\t<>\n\t\t\t<Select.Root\n\t\t\t\tname=\"appName\"\n\t\t\t\tvalue={playgroundAppName}\n\t\t\t\tonValueChange={(appName) => {\n\t\t\t\t\tif (appName === savedPlaygroundsValue) {\n\t\t\t\t\t\tsetSavedDialogOpen(true)\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\tif (shouldConfirm) {\n\t\t\t\t\t\tsetPendingAppName(appName)\n\t\t\t\t\t\tsetDialogOpen(true)\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\tvoid fetcher.submit(\n\t\t\t\t\t\t{ appName },\n\t\t\t\t\t\t{ method: 'POST', action: '/set-playground' },\n\t\t\t\t\t)\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<Select.Trigger\n\t\t\t\t\taria-label=\"Select app for playground\"\n\t\t\t\t\tclassName={clsx(\n\t\t\t\t\t\t'radix-placeholder:text-muted-foreground flex h-full w-full items-center justify-between text-left focus-visible:outline-none',\n\t\t\t\t\t\tfetcher.state !== 'idle' ? 'cursor-progress' : null,\n\t\t\t\t\t\tfetcher.data?.status === 'error' ? 'cursor-not-allowed' : null,\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t<span className=\"scrollbar-thin scrollbar-thumb-scrollbar w-80 flex-1 truncate\">\n\t\t\t\t\t\t<Select.Value\n\t\t\t\t\t\t\tplaceholder=\"Select current app\"\n\t\t\t\t\t\t\tclassName=\"inline-block w-40 truncate\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</span>\n\t\t\t\t\t<Select.Icon>\n\t\t\t\t\t\t<Icon name=\"TriangleDownSmall\" />\n\t\t\t\t\t</Select.Icon>\n\t\t\t\t</Select.Trigger>\n\t\t\t\t<Select.Portal>\n\t\t\t\t\t<Select.Content\n\t\t\t\t\t\tposition=\"popper\"\n\t\t\t\t\t\talign=\"start\"\n\t\t\t\t\t\tclassName=\"invert-theme bg-popover text-popover-foreground z-20 max-h-[50vh] lg:max-h-[70vh]\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<Select.ScrollUpButton className=\"flex h-5 cursor-default items-center justify-center\">\n\t\t\t\t\t\t\t<Icon name=\"ChevronUp\" />\n\t\t\t\t\t\t</Select.ScrollUpButton>\n\t\t\t\t\t\t<Select.Viewport className=\"p-3\">\n\t\t\t\t\t\t\t<Select.Group>\n\t\t\t\t\t\t\t\t<Select.Label className=\"px-5 pb-3 font-mono uppercase\">\n\t\t\t\t\t\t\t\t\tApp\n\t\t\t\t\t\t\t\t</Select.Label>\n\t\t\t\t\t\t\t\t{allApps\n\t\t\t\t\t\t\t\t\t.filter((app) => app.name !== 'playground')\n\t\t\t\t\t\t\t\t\t.map((app) => {\n\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t<SelectItem key={app.name} value={app.name}>\n\t\t\t\t\t\t\t\t\t\t\t\t{app.displayName}\n\t\t\t\t\t\t\t\t\t\t\t</SelectItem>\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</Select.Group>\n\t\t\t\t\t\t\t{persistEnabled ? (\n\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t<Select.Separator className=\"bg-border my-2 h-px\" />\n\t\t\t\t\t\t\t\t\t<Select.Group>\n\t\t\t\t\t\t\t\t\t\t<Select.Label className=\"text-muted-foreground px-5 pb-2 font-mono text-xs uppercase\">\n\t\t\t\t\t\t\t\t\t\t\tSaved playgrounds\n\t\t\t\t\t\t\t\t\t\t</Select.Label>\n\t\t\t\t\t\t\t\t\t\t<SelectItem value={savedPlaygroundsValue}>\n\t\t\t\t\t\t\t\t\t\t\tChoose a saved playground...\n\t\t\t\t\t\t\t\t\t\t</SelectItem>\n\t\t\t\t\t\t\t\t\t</Select.Group>\n\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t</Select.Viewport>\n\t\t\t\t\t\t<Select.ScrollDownButton className=\"flex h-5 cursor-default items-center justify-center\">\n\t\t\t\t\t\t\t<Icon name=\"ChevronDown\" />\n\t\t\t\t\t\t</Select.ScrollDownButton>\n\t\t\t\t\t</Select.Content>\n\t\t\t\t</Select.Portal>\n\t\t\t</Select.Root>\n\t\t\t<PlaygroundSetDialog\n\t\t\t\topen={dialogOpen}\n\t\t\t\tonOpenChange={(open) => {\n\t\t\t\t\tsetDialogOpen(open)\n\t\t\t\t\tif (!open) {\n\t\t\t\t\t\tsetPendingAppName(null)\n\t\t\t\t\t}\n\t\t\t\t}}\n\t\t\t\tisSubmitting={isSubmitting}\n\t\t\t\tpersistFetcher={persistFetcher}\n\t\t\t\tonConfirm={() => {\n\t\t\t\t\tif (!pendingAppName) return\n\t\t\t\t\tsetDialogOpen(false)\n\t\t\t\t\tvoid fetcher.submit(\n\t\t\t\t\t\t{ appName: pendingAppName },\n\t\t\t\t\t\t{ method: 'POST', action: '/set-playground' },\n\t\t\t\t\t)\n\t\t\t\t\tsetPendingAppName(null)\n\t\t\t\t}}\n\t\t\t/>\n\t\t\t<SavedPlaygroundsDialog\n\t\t\t\topen={savedDialogOpen}\n\t\t\t\tonOpenChange={setSavedDialogOpen}\n\t\t\t\tallApps={allApps}\n\t\t\t/>\n\t\t</>\n\t)\n}\n\nfunction SelectItem({\n\tvalue,\n\tchildren,\n}: {\n\tvalue: string\n\tchildren: React.ReactNode\n}) {\n\treturn (\n\t\t<Select.Item\n\t\t\tvalue={value}\n\t\t\tclassName=\"radix-disabled:text-muted-foreground radix-highlighted:opacity-100 radix-highlighted:outline-none radix-state-checked:opacity-100 relative flex cursor-pointer items-center rounded px-10 py-2 leading-none opacity-80 select-none\"\n\t\t>\n\t\t\t<Select.ItemText>{children}</Select.ItemText>\n\t\t\t<Select.ItemIndicator className=\"absolute left-0 inline-flex w-[25px] items-center justify-center\">\n\t\t\t\t<Icon name=\"CheckSmall\" />\n\t\t\t</Select.ItemIndicator>\n\t\t</Select.Item>\n\t)\n}\n\nexport function SetAppToPlayground({\n\tappName,\n\tisOutdated,\n\thideTextOnNarrow,\n\tshowOnboardingIndicator = false,\n\tonClick,\n\tclassName,\n\t...buttonProps\n}: {\n\tappName: string\n\tisOutdated?: boolean\n\t/** When true, hides text at narrow container widths (for use in @container contexts) */\n\thideTextOnNarrow?: boolean\n\tshowOnboardingIndicator?: boolean\n} & React.ComponentProps<'button'>) {\n\tconst [showBadge, dismissBadge] = useOnboardingIndicator(\n\t\tPLAYGROUND_ONBOARDING_FEATURE_ID,\n\t)\n\tif (ENV.EPICSHOP_DEPLOYED) return null\n\tconst shouldShowBadge = showOnboardingIndicator && showBadge\n\tconst buttonClassName = clsx(className, shouldShowBadge ? 'relative' : null)\n\treturn (\n\t\t<SetPlayground\n\t\t\tappName={appName}\n\t\t\ttooltipText={\n\t\t\t\tisOutdated\n\t\t\t\t\t? 'The app the playground was set to has been updated. Click to update to the latest version.'\n\t\t\t\t\t: 'Playground is not set to the right app. Click to set Playground.'\n\t\t\t}\n\t\t\t{...buttonProps}\n\t\t\tclassName={buttonClassName}\n\t\t\tonClick={(event) => {\n\t\t\t\tonClick?.(event)\n\t\t\t\tif (showOnboardingIndicator) {\n\t\t\t\t\tdismissBadge()\n\t\t\t\t}\n\t\t\t}}\n\t\t>\n\t\t\t<span className=\"text-foreground-destructive flex items-center justify-center gap-1 hover:underline\">\n\t\t\t\t<Icon name=\"Unlinked\" className=\"animate-ping\" />{' '}\n\t\t\t\t<span\n\t\t\t\t\tclassName={\n\t\t\t\t\t\thideTextOnNarrow\n\t\t\t\t\t\t\t? 'hidden uppercase @min-[600px]:inline'\n\t\t\t\t\t\t\t: 'uppercase'\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t\t{isOutdated ? 'Playground Outdated' : 'Set to Playground'}\n\t\t\t\t</span>\n\t\t\t\t{shouldShowBadge ? (\n\t\t\t\t\t<OnboardingBadge\n\t\t\t\t\t\ttooltip=\"Set the playground for this step.\"\n\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t/>\n\t\t\t\t) : null}\n\t\t\t</span>\n\t\t</SetPlayground>\n\t)\n}\n"],"names":["PLAYGROUND_ONBOARDING_FEATURE_ID","savedPlaygroundsValue","emptySavedPlaygrounds","usePlaygroundOnboardingGate","rootData","useRootLoaderData","persistEnabled","preferences","playground","persist","onboardingComplete","includes","shouldConfirm","PlaygroundSetDialog","open","onOpenChange","onConfirm","isSubmitting","persistFetcher","peRedirectInput","usePERedirectInput","isPersisting","state","currentPersist","data","status","nextPersist","Dialog","children","jsxs","DialogContent","className","DialogHeader","jsx","DialogTitle","DialogDescription","Form","method","action","type","name","value","role","clsx","disabled","DialogFooter","onClick","Button","varient","SavedPlaygroundsDialog","allApps","listFetcher","useFetcher","actionFetcher","query","setQuery","React","savedPlaygrounds","isLoading","activeSubmissionId","formData","get","formatter","Intl","DateTimeFormat","dateStyle","timeStyle","load","filteredPlaygrounds","normalized","trim","toLowerCase","filter","entry","displayName","find","app","appName","id","htmlFor","onChange","event","currentTarget","placeholder","length","map","createdAt","Date","isActive","dateTime","Number","isNaN","getTime","format","submit","savedPlaygroundId","error","SetPlayground","reset","tooltipText","buttonProps","fetcher","dialogOpen","setDialogOpen","formRef","bypassConfirmationRef","submitButton","Fragment","ref","onSubmit","current","preventDefault","showProgressBarField","SimpleTooltip","content","requestSubmit","PlaygroundChooser","playgroundAppName","savedDialogOpen","setSavedDialogOpen","pendingAppName","setPendingAppName","Select","onValueChange","Icon","position","align","SelectItem","SetAppToPlayground","isOutdated","hideTextOnNarrow","showOnboardingIndicator","showBadge","dismissBadge","useOnboardingIndicator","ENV","EPICSHOP_DEPLOYED","shouldShowBadge","buttonClassName","OnboardingBadge","tooltip","size"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{s as R,a as W,S as N}from"./chunk-DI55MBZ5-CSfEUcAq.js";import{_ as f,c as t,d as H,l as S,e as P,k as z,a9 as _,aa as U,a6 as C,u as F}from"./mermaid.core-D3y7PO8B.js";import{G as O}from"./graph-CEUh1UxC.js";import{l as J}from"./layout-CiHrgFnf.js";import"./chunk-55IACEB6-BOr0rES3.js";import"./chunk-QN33PNHL-BpbvTQdp.js";import"./preload-helper-BXl3LOEh.js";import"./misc-DVYuZMjW.js";import"./jsx-runtime-C5WNSv3b.js";import"./index-CqIc3cxq.js";import"./chunk-EPOLDU6W-BCLmut3y.js";import"./_baseUniq-BbljtzXr.js";import"./_basePickBy-D6pFkWVF.js";var X=f(e=>e.append("circle").attr("class","start-state").attr("r",t().state.sizeUnit).attr("cx",t().state.padding+t().state.sizeUnit).attr("cy",t().state.padding+t().state.sizeUnit),"drawStartState"),D=f(e=>e.append("line").style("stroke","grey").style("stroke-dasharray","3").attr("x1",t().state.textHeight).attr("class","divider").attr("x2",t().state.textHeight*2).attr("y1",0).attr("y2",0),"drawDivider"),Y=f((e,i)=>{const d=e.append("text").attr("x",2*t().state.padding).attr("y",t().state.textHeight+2*t().state.padding).attr("font-size",t().state.fontSize).attr("class","state-title").text(i.id),c=d.node().getBBox();return e.insert("rect",":first-child").attr("x",t().state.padding).attr("y",t().state.padding).attr("width",c.width+2*t().state.padding).attr("height",c.height+2*t().state.padding).attr("rx",t().state.radius),d},"drawSimpleState"),I=f((e,i)=>{const d=f(function(g,B,m){const E=g.append("tspan").attr("x",2*t().state.padding).text(B);m||E.attr("dy",t().state.textHeight)},"addTspan"),n=e.append("text").attr("x",2*t().state.padding).attr("y",t().state.textHeight+1.3*t().state.padding).attr("font-size",t().state.fontSize).attr("class","state-title").text(i.descriptions[0]).node().getBBox(),l=n.height,x=e.append("text").attr("x",t().state.padding).attr("y",l+t().state.padding*.4+t().state.dividerMargin+t().state.textHeight).attr("class","state-description");let a=!0,s=!0;i.descriptions.forEach(function(g){a||(d(x,g,s),s=!1),a=!1});const w=e.append("line").attr("x1",t().state.padding).attr("y1",t().state.padding+l+t().state.dividerMargin/2).attr("y2",t().state.padding+l+t().state.dividerMargin/2).attr("class","descr-divider"),p=x.node().getBBox(),o=Math.max(p.width,n.width);return w.attr("x2",o+3*t().state.padding),e.insert("rect",":first-child").attr("x",t().state.padding).attr("y",t().state.padding).attr("width",o+2*t().state.padding).attr("height",p.height+l+2*t().state.padding).attr("rx",t().state.radius),e},"drawDescrState"),$=f((e,i,d)=>{const c=t().state.padding,n=2*t().state.padding,l=e.node().getBBox(),x=l.width,a=l.x,s=e.append("text").attr("x",0).attr("y",t().state.titleShift).attr("font-size",t().state.fontSize).attr("class","state-title").text(i.id),p=s.node().getBBox().width+n;let o=Math.max(p,x);o===x&&(o=o+n);let g;const B=e.node().getBBox();i.doc,g=a-c,p>x&&(g=(x-o)/2+c),Math.abs(a-B.x)<c&&p>x&&(g=a-(p-x)/2);const m=1-t().state.textHeight;return e.insert("rect",":first-child").attr("x",g).attr("y",m).attr("class",d?"alt-composit":"composit").attr("width",o).attr("height",B.height+t().state.textHeight+t().state.titleShift+1).attr("rx","0"),s.attr("x",g+c),p<=x&&s.attr("x",a+(o-n)/2-p/2+c),e.insert("rect",":first-child").attr("x",g).attr("y",t().state.titleShift-t().state.textHeight-t().state.padding).attr("width",o).attr("height",t().state.textHeight*3).attr("rx",t().state.radius),e.insert("rect",":first-child").attr("x",g).attr("y",t().state.titleShift-t().state.textHeight-t().state.padding).attr("width",o).attr("height",B.height+3+2*t().state.textHeight).attr("rx",t().state.radius),e},"addTitleAndBox"),q=f(e=>(e.append("circle").attr("class","end-state-outer").attr("r",t().state.sizeUnit+t().state.miniPadding).attr("cx",t().state.padding+t().state.sizeUnit+t().state.miniPadding).attr("cy",t().state.padding+t().state.sizeUnit+t().state.miniPadding),e.append("circle").attr("class","end-state-inner").attr("r",t().state.sizeUnit).attr("cx",t().state.padding+t().state.sizeUnit+2).attr("cy",t().state.padding+t().state.sizeUnit+2)),"drawEndState"),Z=f((e,i)=>{let d=t().state.forkWidth,c=t().state.forkHeight;if(i.parentId){let n=d;d=c,c=n}return e.append("rect").style("stroke","black").style("fill","black").attr("width",d).attr("height",c).attr("x",t().state.padding).attr("y",t().state.padding)},"drawForkJoinState"),j=f((e,i,d,c)=>{let n=0;const l=c.append("text");l.style("text-anchor","start"),l.attr("class","noteText");let x=e.replace(/\r\n/g,"<br/>");x=x.replace(/\n/g,"<br/>");const a=x.split(z.lineBreakRegex);let s=1.25*t().state.noteMargin;for(const w of a){const p=w.trim();if(p.length>0){const o=l.append("tspan");if(o.text(p),s===0){const g=o.node().getBBox();s+=g.height}n+=s,o.attr("x",i+t().state.noteMargin),o.attr("y",d+n+1.25*t().state.noteMargin)}}return{textWidth:l.node().getBBox().width,textHeight:n}},"_drawLongText"),K=f((e,i)=>{i.attr("class","state-note");const d=i.append("rect").attr("x",0).attr("y",t().state.padding),c=i.append("g"),{textWidth:n,textHeight:l}=j(e,0,0,c);return d.attr("height",l+2*t().state.noteMargin),d.attr("width",n+t().state.noteMargin*2),d},"drawNote"),L=f(function(e,i){const d=i.id,c={id:d,label:i.id,width:0,height:0},n=e.append("g").attr("id",d).attr("class","stateGroup");i.type==="start"&&X(n),i.type==="end"&&q(n),(i.type==="fork"||i.type==="join")&&Z(n,i),i.type==="note"&&K(i.note.text,n),i.type==="divider"&&D(n),i.type==="default"&&i.descriptions.length===0&&Y(n,i),i.type==="default"&&i.descriptions.length>0&&I(n,i);const l=n.node().getBBox();return c.width=l.width+2*t().state.padding,c.height=l.height+2*t().state.padding,c},"drawState"),A=0,Q=f(function(e,i,d){const c=f(function(s){switch(s){case N.relationType.AGGREGATION:return"aggregation";case N.relationType.EXTENSION:return"extension";case N.relationType.COMPOSITION:return"composition";case N.relationType.DEPENDENCY:return"dependency"}},"getRelationType");i.points=i.points.filter(s=>!Number.isNaN(s.y));const n=i.points,l=_().x(function(s){return s.x}).y(function(s){return s.y}).curve(U),x=e.append("path").attr("d",l(n)).attr("id","edge"+A).attr("class","transition");let a="";if(t().state.arrowMarkerAbsolute&&(a=C(!0)),x.attr("marker-end","url("+a+"#"+c(N.relationType.DEPENDENCY)+"End)"),d.title!==void 0){const s=e.append("g").attr("class","stateLabel"),{x:w,y:p}=F.calcLabelPosition(i.points),o=z.getRows(d.title);let g=0;const B=[];let m=0,E=0;for(let u=0;u<=o.length;u++){const h=s.append("text").attr("text-anchor","middle").text(o[u]).attr("x",w).attr("y",p+g),y=h.node().getBBox();m=Math.max(m,y.width),E=Math.min(E,y.x),S.info(y.x,w,p+g),g===0&&(g=h.node().getBBox().height,S.info("Title height",g,p)),B.push(h)}let k=g*o.length;if(o.length>1){const u=(o.length-1)*g*.5;B.forEach((h,y)=>h.attr("y",p+y*g-u)),k=g*o.length}const r=s.node().getBBox();s.insert("rect",":first-child").attr("class","box").attr("x",w-m/2-t().state.padding/2).attr("y",p-k/2-t().state.padding/2-3.5).attr("width",m+t().state.padding).attr("height",k+t().state.padding),S.info(r)}A++},"drawEdge"),b,T={},V=f(function(){},"setConf"),tt=f(function(e){e.append("defs").append("marker").attr("id","dependencyEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")},"insertMarkers"),et=f(function(e,i,d,c){b=t().state;const n=t().securityLevel;let l;n==="sandbox"&&(l=H("#i"+i));const x=n==="sandbox"?H(l.nodes()[0].contentDocument.body):H("body"),a=n==="sandbox"?l.nodes()[0].contentDocument:document;S.debug("Rendering diagram "+e);const s=x.select(`[id='${i}']`);tt(s);const w=c.db.getRootDoc();G(w,s,void 0,!1,x,a,c);const p=b.padding,o=s.node().getBBox(),g=o.width+p*2,B=o.height+p*2,m=g*1.75;P(s,B,m,b.useMaxWidth),s.attr("viewBox",`${o.x-b.padding} ${o.y-b.padding} `+g+" "+B)},"draw"),at=f(e=>e?e.length*b.fontSizeFactor:1,"getLabelWidth"),G=f((e,i,d,c,n,l,x)=>{const a=new O({compound:!0,multigraph:!0});let s,w=!0;for(s=0;s<e.length;s++)if(e[s].stmt==="relation"){w=!1;break}d?a.setGraph({rankdir:"LR",multigraph:!0,compound:!0,ranker:"tight-tree",ranksep:w?1:b.edgeLengthFactor,nodeSep:w?1:50,isMultiGraph:!0}):a.setGraph({rankdir:"TB",multigraph:!0,compound:!0,ranksep:w?1:b.edgeLengthFactor,nodeSep:w?1:50,ranker:"tight-tree",isMultiGraph:!0}),a.setDefaultEdgeLabel(function(){return{}});const p=x.db.getStates(),o=x.db.getRelations(),g=Object.keys(p);for(const r of g){const u=p[r];d&&(u.parentId=d);let h;if(u.doc){let y=i.append("g").attr("id",u.id).attr("class","stateGroup");h=G(u.doc,y,u.id,!c,n,l,x);{y=$(y,u,c);let v=y.node().getBBox();h.width=v.width,h.height=v.height+b.padding/2,T[u.id]={y:b.compositTitleSize}}}else h=L(i,u,a);if(u.note){const y={descriptions:[],id:u.id+"-note",note:u.note,type:"note"},v=L(i,y,a);u.note.position==="left of"?(a.setNode(h.id+"-note",v),a.setNode(h.id,h)):(a.setNode(h.id,h),a.setNode(h.id+"-note",v)),a.setParent(h.id,h.id+"-group"),a.setParent(h.id+"-note",h.id+"-group")}else a.setNode(h.id,h)}S.debug("Count=",a.nodeCount(),a);let B=0;o.forEach(function(r){B++,S.debug("Setting edge",r),a.setEdge(r.id1,r.id2,{relation:r,width:at(r.title),height:b.labelHeight*z.getRows(r.title).length,labelpos:"c"},"id"+B)}),J(a),S.debug("Graph after layout",a.nodes());const m=i.node();a.nodes().forEach(function(r){r!==void 0&&a.node(r)!==void 0?(S.warn("Node "+r+": "+JSON.stringify(a.node(r))),n.select("#"+m.id+" #"+r).attr("transform","translate("+(a.node(r).x-a.node(r).width/2)+","+(a.node(r).y+(T[r]?T[r].y:0)-a.node(r).height/2)+" )"),n.select("#"+m.id+" #"+r).attr("data-x-shift",a.node(r).x-a.node(r).width/2),l.querySelectorAll("#"+m.id+" #"+r+" .divider").forEach(h=>{const y=h.parentElement;let v=0,M=0;y&&(y.parentElement&&(v=y.parentElement.getBBox().width),M=parseInt(y.getAttribute("data-x-shift"),10),Number.isNaN(M)&&(M=0)),h.setAttribute("x1",0-M+8),h.setAttribute("x2",v-M-8)})):S.debug("No Node "+r+": "+JSON.stringify(a.node(r)))});let E=m.getBBox();a.edges().forEach(function(r){r!==void 0&&a.edge(r)!==void 0&&(S.debug("Edge "+r.v+" -> "+r.w+": "+JSON.stringify(a.edge(r))),Q(i,a.edge(r),a.edge(r).relation))}),E=m.getBBox();const k={id:d||"root",label:d||"root",width:0,height:0};return k.width=E.width+2*b.padding,k.height=E.height+2*b.padding,S.debug("Doc rendered",k,a),k},"renderDoc"),it={setConf:V,draw:et},yt={parser:W,get db(){return new N(1)},renderer:it,styles:R,init:f(e=>{e.state||(e.state={}),e.state.arrowMarkerAbsolute=e.arrowMarkerAbsolute},"init")};export{yt as diagram};
2
- //# sourceMappingURL=stateDiagram-FKZM4ZOC-C1eIQm_7.js.map
1
+ import{s as R,a as W,S as N}from"./chunk-DI55MBZ5-CxSXOmoK.js";import{_ as f,c as t,d as H,l as S,e as P,k as z,a9 as _,aa as U,a6 as C,u as F}from"./mermaid.core-BdxLLjl2.js";import{G as O}from"./graph-Da5nhwRG.js";import{l as J}from"./layout-CUEelucj.js";import"./chunk-55IACEB6-CO_GT_87.js";import"./chunk-QN33PNHL-DKEBwj3f.js";import"./preload-helper-BXl3LOEh.js";import"./misc-W4055b-0.js";import"./jsx-runtime-C5WNSv3b.js";import"./index-CqIc3cxq.js";import"./chunk-EPOLDU6W-BCLmut3y.js";import"./_baseUniq-DTO-tFvD.js";import"./_basePickBy-D77BeQbR.js";var X=f(e=>e.append("circle").attr("class","start-state").attr("r",t().state.sizeUnit).attr("cx",t().state.padding+t().state.sizeUnit).attr("cy",t().state.padding+t().state.sizeUnit),"drawStartState"),D=f(e=>e.append("line").style("stroke","grey").style("stroke-dasharray","3").attr("x1",t().state.textHeight).attr("class","divider").attr("x2",t().state.textHeight*2).attr("y1",0).attr("y2",0),"drawDivider"),Y=f((e,i)=>{const d=e.append("text").attr("x",2*t().state.padding).attr("y",t().state.textHeight+2*t().state.padding).attr("font-size",t().state.fontSize).attr("class","state-title").text(i.id),c=d.node().getBBox();return e.insert("rect",":first-child").attr("x",t().state.padding).attr("y",t().state.padding).attr("width",c.width+2*t().state.padding).attr("height",c.height+2*t().state.padding).attr("rx",t().state.radius),d},"drawSimpleState"),I=f((e,i)=>{const d=f(function(g,B,m){const E=g.append("tspan").attr("x",2*t().state.padding).text(B);m||E.attr("dy",t().state.textHeight)},"addTspan"),n=e.append("text").attr("x",2*t().state.padding).attr("y",t().state.textHeight+1.3*t().state.padding).attr("font-size",t().state.fontSize).attr("class","state-title").text(i.descriptions[0]).node().getBBox(),l=n.height,x=e.append("text").attr("x",t().state.padding).attr("y",l+t().state.padding*.4+t().state.dividerMargin+t().state.textHeight).attr("class","state-description");let a=!0,s=!0;i.descriptions.forEach(function(g){a||(d(x,g,s),s=!1),a=!1});const w=e.append("line").attr("x1",t().state.padding).attr("y1",t().state.padding+l+t().state.dividerMargin/2).attr("y2",t().state.padding+l+t().state.dividerMargin/2).attr("class","descr-divider"),p=x.node().getBBox(),o=Math.max(p.width,n.width);return w.attr("x2",o+3*t().state.padding),e.insert("rect",":first-child").attr("x",t().state.padding).attr("y",t().state.padding).attr("width",o+2*t().state.padding).attr("height",p.height+l+2*t().state.padding).attr("rx",t().state.radius),e},"drawDescrState"),$=f((e,i,d)=>{const c=t().state.padding,n=2*t().state.padding,l=e.node().getBBox(),x=l.width,a=l.x,s=e.append("text").attr("x",0).attr("y",t().state.titleShift).attr("font-size",t().state.fontSize).attr("class","state-title").text(i.id),p=s.node().getBBox().width+n;let o=Math.max(p,x);o===x&&(o=o+n);let g;const B=e.node().getBBox();i.doc,g=a-c,p>x&&(g=(x-o)/2+c),Math.abs(a-B.x)<c&&p>x&&(g=a-(p-x)/2);const m=1-t().state.textHeight;return e.insert("rect",":first-child").attr("x",g).attr("y",m).attr("class",d?"alt-composit":"composit").attr("width",o).attr("height",B.height+t().state.textHeight+t().state.titleShift+1).attr("rx","0"),s.attr("x",g+c),p<=x&&s.attr("x",a+(o-n)/2-p/2+c),e.insert("rect",":first-child").attr("x",g).attr("y",t().state.titleShift-t().state.textHeight-t().state.padding).attr("width",o).attr("height",t().state.textHeight*3).attr("rx",t().state.radius),e.insert("rect",":first-child").attr("x",g).attr("y",t().state.titleShift-t().state.textHeight-t().state.padding).attr("width",o).attr("height",B.height+3+2*t().state.textHeight).attr("rx",t().state.radius),e},"addTitleAndBox"),q=f(e=>(e.append("circle").attr("class","end-state-outer").attr("r",t().state.sizeUnit+t().state.miniPadding).attr("cx",t().state.padding+t().state.sizeUnit+t().state.miniPadding).attr("cy",t().state.padding+t().state.sizeUnit+t().state.miniPadding),e.append("circle").attr("class","end-state-inner").attr("r",t().state.sizeUnit).attr("cx",t().state.padding+t().state.sizeUnit+2).attr("cy",t().state.padding+t().state.sizeUnit+2)),"drawEndState"),Z=f((e,i)=>{let d=t().state.forkWidth,c=t().state.forkHeight;if(i.parentId){let n=d;d=c,c=n}return e.append("rect").style("stroke","black").style("fill","black").attr("width",d).attr("height",c).attr("x",t().state.padding).attr("y",t().state.padding)},"drawForkJoinState"),j=f((e,i,d,c)=>{let n=0;const l=c.append("text");l.style("text-anchor","start"),l.attr("class","noteText");let x=e.replace(/\r\n/g,"<br/>");x=x.replace(/\n/g,"<br/>");const a=x.split(z.lineBreakRegex);let s=1.25*t().state.noteMargin;for(const w of a){const p=w.trim();if(p.length>0){const o=l.append("tspan");if(o.text(p),s===0){const g=o.node().getBBox();s+=g.height}n+=s,o.attr("x",i+t().state.noteMargin),o.attr("y",d+n+1.25*t().state.noteMargin)}}return{textWidth:l.node().getBBox().width,textHeight:n}},"_drawLongText"),K=f((e,i)=>{i.attr("class","state-note");const d=i.append("rect").attr("x",0).attr("y",t().state.padding),c=i.append("g"),{textWidth:n,textHeight:l}=j(e,0,0,c);return d.attr("height",l+2*t().state.noteMargin),d.attr("width",n+t().state.noteMargin*2),d},"drawNote"),L=f(function(e,i){const d=i.id,c={id:d,label:i.id,width:0,height:0},n=e.append("g").attr("id",d).attr("class","stateGroup");i.type==="start"&&X(n),i.type==="end"&&q(n),(i.type==="fork"||i.type==="join")&&Z(n,i),i.type==="note"&&K(i.note.text,n),i.type==="divider"&&D(n),i.type==="default"&&i.descriptions.length===0&&Y(n,i),i.type==="default"&&i.descriptions.length>0&&I(n,i);const l=n.node().getBBox();return c.width=l.width+2*t().state.padding,c.height=l.height+2*t().state.padding,c},"drawState"),A=0,Q=f(function(e,i,d){const c=f(function(s){switch(s){case N.relationType.AGGREGATION:return"aggregation";case N.relationType.EXTENSION:return"extension";case N.relationType.COMPOSITION:return"composition";case N.relationType.DEPENDENCY:return"dependency"}},"getRelationType");i.points=i.points.filter(s=>!Number.isNaN(s.y));const n=i.points,l=_().x(function(s){return s.x}).y(function(s){return s.y}).curve(U),x=e.append("path").attr("d",l(n)).attr("id","edge"+A).attr("class","transition");let a="";if(t().state.arrowMarkerAbsolute&&(a=C(!0)),x.attr("marker-end","url("+a+"#"+c(N.relationType.DEPENDENCY)+"End)"),d.title!==void 0){const s=e.append("g").attr("class","stateLabel"),{x:w,y:p}=F.calcLabelPosition(i.points),o=z.getRows(d.title);let g=0;const B=[];let m=0,E=0;for(let u=0;u<=o.length;u++){const h=s.append("text").attr("text-anchor","middle").text(o[u]).attr("x",w).attr("y",p+g),y=h.node().getBBox();m=Math.max(m,y.width),E=Math.min(E,y.x),S.info(y.x,w,p+g),g===0&&(g=h.node().getBBox().height,S.info("Title height",g,p)),B.push(h)}let k=g*o.length;if(o.length>1){const u=(o.length-1)*g*.5;B.forEach((h,y)=>h.attr("y",p+y*g-u)),k=g*o.length}const r=s.node().getBBox();s.insert("rect",":first-child").attr("class","box").attr("x",w-m/2-t().state.padding/2).attr("y",p-k/2-t().state.padding/2-3.5).attr("width",m+t().state.padding).attr("height",k+t().state.padding),S.info(r)}A++},"drawEdge"),b,T={},V=f(function(){},"setConf"),tt=f(function(e){e.append("defs").append("marker").attr("id","dependencyEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")},"insertMarkers"),et=f(function(e,i,d,c){b=t().state;const n=t().securityLevel;let l;n==="sandbox"&&(l=H("#i"+i));const x=n==="sandbox"?H(l.nodes()[0].contentDocument.body):H("body"),a=n==="sandbox"?l.nodes()[0].contentDocument:document;S.debug("Rendering diagram "+e);const s=x.select(`[id='${i}']`);tt(s);const w=c.db.getRootDoc();G(w,s,void 0,!1,x,a,c);const p=b.padding,o=s.node().getBBox(),g=o.width+p*2,B=o.height+p*2,m=g*1.75;P(s,B,m,b.useMaxWidth),s.attr("viewBox",`${o.x-b.padding} ${o.y-b.padding} `+g+" "+B)},"draw"),at=f(e=>e?e.length*b.fontSizeFactor:1,"getLabelWidth"),G=f((e,i,d,c,n,l,x)=>{const a=new O({compound:!0,multigraph:!0});let s,w=!0;for(s=0;s<e.length;s++)if(e[s].stmt==="relation"){w=!1;break}d?a.setGraph({rankdir:"LR",multigraph:!0,compound:!0,ranker:"tight-tree",ranksep:w?1:b.edgeLengthFactor,nodeSep:w?1:50,isMultiGraph:!0}):a.setGraph({rankdir:"TB",multigraph:!0,compound:!0,ranksep:w?1:b.edgeLengthFactor,nodeSep:w?1:50,ranker:"tight-tree",isMultiGraph:!0}),a.setDefaultEdgeLabel(function(){return{}});const p=x.db.getStates(),o=x.db.getRelations(),g=Object.keys(p);for(const r of g){const u=p[r];d&&(u.parentId=d);let h;if(u.doc){let y=i.append("g").attr("id",u.id).attr("class","stateGroup");h=G(u.doc,y,u.id,!c,n,l,x);{y=$(y,u,c);let v=y.node().getBBox();h.width=v.width,h.height=v.height+b.padding/2,T[u.id]={y:b.compositTitleSize}}}else h=L(i,u,a);if(u.note){const y={descriptions:[],id:u.id+"-note",note:u.note,type:"note"},v=L(i,y,a);u.note.position==="left of"?(a.setNode(h.id+"-note",v),a.setNode(h.id,h)):(a.setNode(h.id,h),a.setNode(h.id+"-note",v)),a.setParent(h.id,h.id+"-group"),a.setParent(h.id+"-note",h.id+"-group")}else a.setNode(h.id,h)}S.debug("Count=",a.nodeCount(),a);let B=0;o.forEach(function(r){B++,S.debug("Setting edge",r),a.setEdge(r.id1,r.id2,{relation:r,width:at(r.title),height:b.labelHeight*z.getRows(r.title).length,labelpos:"c"},"id"+B)}),J(a),S.debug("Graph after layout",a.nodes());const m=i.node();a.nodes().forEach(function(r){r!==void 0&&a.node(r)!==void 0?(S.warn("Node "+r+": "+JSON.stringify(a.node(r))),n.select("#"+m.id+" #"+r).attr("transform","translate("+(a.node(r).x-a.node(r).width/2)+","+(a.node(r).y+(T[r]?T[r].y:0)-a.node(r).height/2)+" )"),n.select("#"+m.id+" #"+r).attr("data-x-shift",a.node(r).x-a.node(r).width/2),l.querySelectorAll("#"+m.id+" #"+r+" .divider").forEach(h=>{const y=h.parentElement;let v=0,M=0;y&&(y.parentElement&&(v=y.parentElement.getBBox().width),M=parseInt(y.getAttribute("data-x-shift"),10),Number.isNaN(M)&&(M=0)),h.setAttribute("x1",0-M+8),h.setAttribute("x2",v-M-8)})):S.debug("No Node "+r+": "+JSON.stringify(a.node(r)))});let E=m.getBBox();a.edges().forEach(function(r){r!==void 0&&a.edge(r)!==void 0&&(S.debug("Edge "+r.v+" -> "+r.w+": "+JSON.stringify(a.edge(r))),Q(i,a.edge(r),a.edge(r).relation))}),E=m.getBBox();const k={id:d||"root",label:d||"root",width:0,height:0};return k.width=E.width+2*b.padding,k.height=E.height+2*b.padding,S.debug("Doc rendered",k,a),k},"renderDoc"),it={setConf:V,draw:et},yt={parser:W,get db(){return new N(1)},renderer:it,styles:R,init:f(e=>{e.state||(e.state={}),e.state.arrowMarkerAbsolute=e.arrowMarkerAbsolute},"init")};export{yt as diagram};
2
+ //# sourceMappingURL=stateDiagram-FKZM4ZOC-DGPNpRbW.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"stateDiagram-FKZM4ZOC-C1eIQm_7.js","sources":["../../../../../node_modules/mermaid/dist/chunks/mermaid.core/stateDiagram-FKZM4ZOC.mjs"],"sourcesContent":["import {\n StateDB,\n stateDiagram_default,\n styles_default\n} from \"./chunk-DI55MBZ5.mjs\";\nimport \"./chunk-55IACEB6.mjs\";\nimport \"./chunk-QN33PNHL.mjs\";\nimport \"./chunk-N4CR4FBY.mjs\";\nimport \"./chunk-QXUST7PY.mjs\";\nimport \"./chunk-HN2XXSSU.mjs\";\nimport \"./chunk-JZLCHNYA.mjs\";\nimport \"./chunk-CVBHYZKI.mjs\";\nimport \"./chunk-ATLVNIR6.mjs\";\nimport \"./chunk-JA3XYJ7Z.mjs\";\nimport {\n utils_default\n} from \"./chunk-S3R3BYOJ.mjs\";\nimport {\n common_default,\n configureSvgSize,\n getConfig2 as getConfig,\n getUrl\n} from \"./chunk-ABZYJK2D.mjs\";\nimport {\n __name,\n log\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/diagrams/state/stateRenderer.js\nimport { select } from \"d3\";\nimport { layout as dagreLayout } from \"dagre-d3-es/src/dagre/index.js\";\nimport * as graphlib from \"dagre-d3-es/src/graphlib/index.js\";\n\n// src/diagrams/state/shapes.js\nimport { line, curveBasis } from \"d3\";\nvar drawStartState = /* @__PURE__ */ __name((g) => g.append(\"circle\").attr(\"class\", \"start-state\").attr(\"r\", getConfig().state.sizeUnit).attr(\"cx\", getConfig().state.padding + getConfig().state.sizeUnit).attr(\"cy\", getConfig().state.padding + getConfig().state.sizeUnit), \"drawStartState\");\nvar drawDivider = /* @__PURE__ */ __name((g) => g.append(\"line\").style(\"stroke\", \"grey\").style(\"stroke-dasharray\", \"3\").attr(\"x1\", getConfig().state.textHeight).attr(\"class\", \"divider\").attr(\"x2\", getConfig().state.textHeight * 2).attr(\"y1\", 0).attr(\"y2\", 0), \"drawDivider\");\nvar drawSimpleState = /* @__PURE__ */ __name((g, stateDef) => {\n const state = g.append(\"text\").attr(\"x\", 2 * getConfig().state.padding).attr(\"y\", getConfig().state.textHeight + 2 * getConfig().state.padding).attr(\"font-size\", getConfig().state.fontSize).attr(\"class\", \"state-title\").text(stateDef.id);\n const classBox = state.node().getBBox();\n g.insert(\"rect\", \":first-child\").attr(\"x\", getConfig().state.padding).attr(\"y\", getConfig().state.padding).attr(\"width\", classBox.width + 2 * getConfig().state.padding).attr(\"height\", classBox.height + 2 * getConfig().state.padding).attr(\"rx\", getConfig().state.radius);\n return state;\n}, \"drawSimpleState\");\nvar drawDescrState = /* @__PURE__ */ __name((g, stateDef) => {\n const addTspan = /* @__PURE__ */ __name(function(textEl, txt, isFirst2) {\n const tSpan = textEl.append(\"tspan\").attr(\"x\", 2 * getConfig().state.padding).text(txt);\n if (!isFirst2) {\n tSpan.attr(\"dy\", getConfig().state.textHeight);\n }\n }, \"addTspan\");\n const title = g.append(\"text\").attr(\"x\", 2 * getConfig().state.padding).attr(\"y\", getConfig().state.textHeight + 1.3 * getConfig().state.padding).attr(\"font-size\", getConfig().state.fontSize).attr(\"class\", \"state-title\").text(stateDef.descriptions[0]);\n const titleBox = title.node().getBBox();\n const titleHeight = titleBox.height;\n const description = g.append(\"text\").attr(\"x\", getConfig().state.padding).attr(\n \"y\",\n titleHeight + getConfig().state.padding * 0.4 + getConfig().state.dividerMargin + getConfig().state.textHeight\n ).attr(\"class\", \"state-description\");\n let isFirst = true;\n let isSecond = true;\n stateDef.descriptions.forEach(function(descr) {\n if (!isFirst) {\n addTspan(description, descr, isSecond);\n isSecond = false;\n }\n isFirst = false;\n });\n const descrLine = g.append(\"line\").attr(\"x1\", getConfig().state.padding).attr(\"y1\", getConfig().state.padding + titleHeight + getConfig().state.dividerMargin / 2).attr(\"y2\", getConfig().state.padding + titleHeight + getConfig().state.dividerMargin / 2).attr(\"class\", \"descr-divider\");\n const descrBox = description.node().getBBox();\n const width = Math.max(descrBox.width, titleBox.width);\n descrLine.attr(\"x2\", width + 3 * getConfig().state.padding);\n g.insert(\"rect\", \":first-child\").attr(\"x\", getConfig().state.padding).attr(\"y\", getConfig().state.padding).attr(\"width\", width + 2 * getConfig().state.padding).attr(\"height\", descrBox.height + titleHeight + 2 * getConfig().state.padding).attr(\"rx\", getConfig().state.radius);\n return g;\n}, \"drawDescrState\");\nvar addTitleAndBox = /* @__PURE__ */ __name((g, stateDef, altBkg) => {\n const pad = getConfig().state.padding;\n const dblPad = 2 * getConfig().state.padding;\n const orgBox = g.node().getBBox();\n const orgWidth = orgBox.width;\n const orgX = orgBox.x;\n const title = g.append(\"text\").attr(\"x\", 0).attr(\"y\", getConfig().state.titleShift).attr(\"font-size\", getConfig().state.fontSize).attr(\"class\", \"state-title\").text(stateDef.id);\n const titleBox = title.node().getBBox();\n const titleWidth = titleBox.width + dblPad;\n let width = Math.max(titleWidth, orgWidth);\n if (width === orgWidth) {\n width = width + dblPad;\n }\n let startX;\n const graphBox = g.node().getBBox();\n if (stateDef.doc) {\n }\n startX = orgX - pad;\n if (titleWidth > orgWidth) {\n startX = (orgWidth - width) / 2 + pad;\n }\n if (Math.abs(orgX - graphBox.x) < pad && titleWidth > orgWidth) {\n startX = orgX - (titleWidth - orgWidth) / 2;\n }\n const lineY = 1 - getConfig().state.textHeight;\n g.insert(\"rect\", \":first-child\").attr(\"x\", startX).attr(\"y\", lineY).attr(\"class\", altBkg ? \"alt-composit\" : \"composit\").attr(\"width\", width).attr(\n \"height\",\n graphBox.height + getConfig().state.textHeight + getConfig().state.titleShift + 1\n ).attr(\"rx\", \"0\");\n title.attr(\"x\", startX + pad);\n if (titleWidth <= orgWidth) {\n title.attr(\"x\", orgX + (width - dblPad) / 2 - titleWidth / 2 + pad);\n }\n g.insert(\"rect\", \":first-child\").attr(\"x\", startX).attr(\n \"y\",\n getConfig().state.titleShift - getConfig().state.textHeight - getConfig().state.padding\n ).attr(\"width\", width).attr(\"height\", getConfig().state.textHeight * 3).attr(\"rx\", getConfig().state.radius);\n g.insert(\"rect\", \":first-child\").attr(\"x\", startX).attr(\n \"y\",\n getConfig().state.titleShift - getConfig().state.textHeight - getConfig().state.padding\n ).attr(\"width\", width).attr(\"height\", graphBox.height + 3 + 2 * getConfig().state.textHeight).attr(\"rx\", getConfig().state.radius);\n return g;\n}, \"addTitleAndBox\");\nvar drawEndState = /* @__PURE__ */ __name((g) => {\n g.append(\"circle\").attr(\"class\", \"end-state-outer\").attr(\"r\", getConfig().state.sizeUnit + getConfig().state.miniPadding).attr(\n \"cx\",\n getConfig().state.padding + getConfig().state.sizeUnit + getConfig().state.miniPadding\n ).attr(\n \"cy\",\n getConfig().state.padding + getConfig().state.sizeUnit + getConfig().state.miniPadding\n );\n return g.append(\"circle\").attr(\"class\", \"end-state-inner\").attr(\"r\", getConfig().state.sizeUnit).attr(\"cx\", getConfig().state.padding + getConfig().state.sizeUnit + 2).attr(\"cy\", getConfig().state.padding + getConfig().state.sizeUnit + 2);\n}, \"drawEndState\");\nvar drawForkJoinState = /* @__PURE__ */ __name((g, stateDef) => {\n let width = getConfig().state.forkWidth;\n let height = getConfig().state.forkHeight;\n if (stateDef.parentId) {\n let tmp = width;\n width = height;\n height = tmp;\n }\n return g.append(\"rect\").style(\"stroke\", \"black\").style(\"fill\", \"black\").attr(\"width\", width).attr(\"height\", height).attr(\"x\", getConfig().state.padding).attr(\"y\", getConfig().state.padding);\n}, \"drawForkJoinState\");\nvar _drawLongText = /* @__PURE__ */ __name((_text, x, y, g) => {\n let textHeight = 0;\n const textElem = g.append(\"text\");\n textElem.style(\"text-anchor\", \"start\");\n textElem.attr(\"class\", \"noteText\");\n let text = _text.replace(/\\r\\n/g, \"<br/>\");\n text = text.replace(/\\n/g, \"<br/>\");\n const lines = text.split(common_default.lineBreakRegex);\n let tHeight = 1.25 * getConfig().state.noteMargin;\n for (const line2 of lines) {\n const txt = line2.trim();\n if (txt.length > 0) {\n const span = textElem.append(\"tspan\");\n span.text(txt);\n if (tHeight === 0) {\n const textBounds = span.node().getBBox();\n tHeight += textBounds.height;\n }\n textHeight += tHeight;\n span.attr(\"x\", x + getConfig().state.noteMargin);\n span.attr(\"y\", y + textHeight + 1.25 * getConfig().state.noteMargin);\n }\n }\n return { textWidth: textElem.node().getBBox().width, textHeight };\n}, \"_drawLongText\");\nvar drawNote = /* @__PURE__ */ __name((text, g) => {\n g.attr(\"class\", \"state-note\");\n const note = g.append(\"rect\").attr(\"x\", 0).attr(\"y\", getConfig().state.padding);\n const rectElem = g.append(\"g\");\n const { textWidth, textHeight } = _drawLongText(text, 0, 0, rectElem);\n note.attr(\"height\", textHeight + 2 * getConfig().state.noteMargin);\n note.attr(\"width\", textWidth + getConfig().state.noteMargin * 2);\n return note;\n}, \"drawNote\");\nvar drawState = /* @__PURE__ */ __name(function(elem, stateDef) {\n const id = stateDef.id;\n const stateInfo = {\n id,\n label: stateDef.id,\n width: 0,\n height: 0\n };\n const g = elem.append(\"g\").attr(\"id\", id).attr(\"class\", \"stateGroup\");\n if (stateDef.type === \"start\") {\n drawStartState(g);\n }\n if (stateDef.type === \"end\") {\n drawEndState(g);\n }\n if (stateDef.type === \"fork\" || stateDef.type === \"join\") {\n drawForkJoinState(g, stateDef);\n }\n if (stateDef.type === \"note\") {\n drawNote(stateDef.note.text, g);\n }\n if (stateDef.type === \"divider\") {\n drawDivider(g);\n }\n if (stateDef.type === \"default\" && stateDef.descriptions.length === 0) {\n drawSimpleState(g, stateDef);\n }\n if (stateDef.type === \"default\" && stateDef.descriptions.length > 0) {\n drawDescrState(g, stateDef);\n }\n const stateBox = g.node().getBBox();\n stateInfo.width = stateBox.width + 2 * getConfig().state.padding;\n stateInfo.height = stateBox.height + 2 * getConfig().state.padding;\n return stateInfo;\n}, \"drawState\");\nvar edgeCount = 0;\nvar drawEdge = /* @__PURE__ */ __name(function(elem, path, relation) {\n const getRelationType = /* @__PURE__ */ __name(function(type) {\n switch (type) {\n case StateDB.relationType.AGGREGATION:\n return \"aggregation\";\n case StateDB.relationType.EXTENSION:\n return \"extension\";\n case StateDB.relationType.COMPOSITION:\n return \"composition\";\n case StateDB.relationType.DEPENDENCY:\n return \"dependency\";\n }\n }, \"getRelationType\");\n path.points = path.points.filter((p) => !Number.isNaN(p.y));\n const lineData = path.points;\n const lineFunction = line().x(function(d) {\n return d.x;\n }).y(function(d) {\n return d.y;\n }).curve(curveBasis);\n const svgPath = elem.append(\"path\").attr(\"d\", lineFunction(lineData)).attr(\"id\", \"edge\" + edgeCount).attr(\"class\", \"transition\");\n let url = \"\";\n if (getConfig().state.arrowMarkerAbsolute) {\n url = getUrl(true);\n }\n svgPath.attr(\n \"marker-end\",\n \"url(\" + url + \"#\" + getRelationType(StateDB.relationType.DEPENDENCY) + \"End)\"\n );\n if (relation.title !== void 0) {\n const label = elem.append(\"g\").attr(\"class\", \"stateLabel\");\n const { x, y } = utils_default.calcLabelPosition(path.points);\n const rows = common_default.getRows(relation.title);\n let titleHeight = 0;\n const titleRows = [];\n let maxWidth = 0;\n let minX = 0;\n for (let i = 0; i <= rows.length; i++) {\n const title = label.append(\"text\").attr(\"text-anchor\", \"middle\").text(rows[i]).attr(\"x\", x).attr(\"y\", y + titleHeight);\n const boundsTmp = title.node().getBBox();\n maxWidth = Math.max(maxWidth, boundsTmp.width);\n minX = Math.min(minX, boundsTmp.x);\n log.info(boundsTmp.x, x, y + titleHeight);\n if (titleHeight === 0) {\n const titleBox = title.node().getBBox();\n titleHeight = titleBox.height;\n log.info(\"Title height\", titleHeight, y);\n }\n titleRows.push(title);\n }\n let boxHeight = titleHeight * rows.length;\n if (rows.length > 1) {\n const heightAdj = (rows.length - 1) * titleHeight * 0.5;\n titleRows.forEach((title, i) => title.attr(\"y\", y + i * titleHeight - heightAdj));\n boxHeight = titleHeight * rows.length;\n }\n const bounds = label.node().getBBox();\n label.insert(\"rect\", \":first-child\").attr(\"class\", \"box\").attr(\"x\", x - maxWidth / 2 - getConfig().state.padding / 2).attr(\"y\", y - boxHeight / 2 - getConfig().state.padding / 2 - 3.5).attr(\"width\", maxWidth + getConfig().state.padding).attr(\"height\", boxHeight + getConfig().state.padding);\n log.info(bounds);\n }\n edgeCount++;\n}, \"drawEdge\");\n\n// src/diagrams/state/stateRenderer.js\nvar conf;\nvar transformationLog = {};\nvar setConf = /* @__PURE__ */ __name(function() {\n}, \"setConf\");\nvar insertMarkers = /* @__PURE__ */ __name(function(elem) {\n elem.append(\"defs\").append(\"marker\").attr(\"id\", \"dependencyEnd\").attr(\"refX\", 19).attr(\"refY\", 7).attr(\"markerWidth\", 20).attr(\"markerHeight\", 28).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 19,7 L9,13 L14,7 L9,1 Z\");\n}, \"insertMarkers\");\nvar draw = /* @__PURE__ */ __name(function(text, id, _version, diagObj) {\n conf = getConfig().state;\n const securityLevel = getConfig().securityLevel;\n let sandboxElement;\n if (securityLevel === \"sandbox\") {\n sandboxElement = select(\"#i\" + id);\n }\n const root = securityLevel === \"sandbox\" ? select(sandboxElement.nodes()[0].contentDocument.body) : select(\"body\");\n const doc = securityLevel === \"sandbox\" ? sandboxElement.nodes()[0].contentDocument : document;\n log.debug(\"Rendering diagram \" + text);\n const diagram2 = root.select(`[id='${id}']`);\n insertMarkers(diagram2);\n const rootDoc = diagObj.db.getRootDoc();\n renderDoc(rootDoc, diagram2, void 0, false, root, doc, diagObj);\n const padding = conf.padding;\n const bounds = diagram2.node().getBBox();\n const width = bounds.width + padding * 2;\n const height = bounds.height + padding * 2;\n const svgWidth = width * 1.75;\n configureSvgSize(diagram2, height, svgWidth, conf.useMaxWidth);\n diagram2.attr(\n \"viewBox\",\n `${bounds.x - conf.padding} ${bounds.y - conf.padding} ` + width + \" \" + height\n );\n}, \"draw\");\nvar getLabelWidth = /* @__PURE__ */ __name((text) => {\n return text ? text.length * conf.fontSizeFactor : 1;\n}, \"getLabelWidth\");\nvar renderDoc = /* @__PURE__ */ __name((doc, diagram2, parentId, altBkg, root, domDocument, diagObj) => {\n const graph = new graphlib.Graph({\n compound: true,\n multigraph: true\n });\n let i;\n let edgeFreeDoc = true;\n for (i = 0; i < doc.length; i++) {\n if (doc[i].stmt === \"relation\") {\n edgeFreeDoc = false;\n break;\n }\n }\n if (parentId) {\n graph.setGraph({\n rankdir: \"LR\",\n multigraph: true,\n compound: true,\n // acyclicer: 'greedy',\n ranker: \"tight-tree\",\n ranksep: edgeFreeDoc ? 1 : conf.edgeLengthFactor,\n nodeSep: edgeFreeDoc ? 1 : 50,\n isMultiGraph: true\n // ranksep: 5,\n // nodesep: 1\n });\n } else {\n graph.setGraph({\n rankdir: \"TB\",\n multigraph: true,\n compound: true,\n // isCompound: true,\n // acyclicer: 'greedy',\n // ranker: 'longest-path'\n ranksep: edgeFreeDoc ? 1 : conf.edgeLengthFactor,\n nodeSep: edgeFreeDoc ? 1 : 50,\n ranker: \"tight-tree\",\n // ranker: 'network-simplex'\n isMultiGraph: true\n });\n }\n graph.setDefaultEdgeLabel(function() {\n return {};\n });\n const states = diagObj.db.getStates();\n const relations = diagObj.db.getRelations();\n const keys = Object.keys(states);\n let first = true;\n for (const key of keys) {\n const stateDef = states[key];\n if (parentId) {\n stateDef.parentId = parentId;\n }\n let node;\n if (stateDef.doc) {\n let sub = diagram2.append(\"g\").attr(\"id\", stateDef.id).attr(\"class\", \"stateGroup\");\n node = renderDoc(stateDef.doc, sub, stateDef.id, !altBkg, root, domDocument, diagObj);\n if (first) {\n sub = addTitleAndBox(sub, stateDef, altBkg);\n let boxBounds = sub.node().getBBox();\n node.width = boxBounds.width;\n node.height = boxBounds.height + conf.padding / 2;\n transformationLog[stateDef.id] = { y: conf.compositTitleSize };\n } else {\n let boxBounds = sub.node().getBBox();\n node.width = boxBounds.width;\n node.height = boxBounds.height;\n }\n } else {\n node = drawState(diagram2, stateDef, graph);\n }\n if (stateDef.note) {\n const noteDef = {\n descriptions: [],\n id: stateDef.id + \"-note\",\n note: stateDef.note,\n type: \"note\"\n };\n const note = drawState(diagram2, noteDef, graph);\n if (stateDef.note.position === \"left of\") {\n graph.setNode(node.id + \"-note\", note);\n graph.setNode(node.id, node);\n } else {\n graph.setNode(node.id, node);\n graph.setNode(node.id + \"-note\", note);\n }\n graph.setParent(node.id, node.id + \"-group\");\n graph.setParent(node.id + \"-note\", node.id + \"-group\");\n } else {\n graph.setNode(node.id, node);\n }\n }\n log.debug(\"Count=\", graph.nodeCount(), graph);\n let cnt = 0;\n relations.forEach(function(relation) {\n cnt++;\n log.debug(\"Setting edge\", relation);\n graph.setEdge(\n relation.id1,\n relation.id2,\n {\n relation,\n width: getLabelWidth(relation.title),\n height: conf.labelHeight * common_default.getRows(relation.title).length,\n labelpos: \"c\"\n },\n \"id\" + cnt\n );\n });\n dagreLayout(graph);\n log.debug(\"Graph after layout\", graph.nodes());\n const svgElem = diagram2.node();\n graph.nodes().forEach(function(v) {\n if (v !== void 0 && graph.node(v) !== void 0) {\n log.warn(\"Node \" + v + \": \" + JSON.stringify(graph.node(v)));\n root.select(\"#\" + svgElem.id + \" #\" + v).attr(\n \"transform\",\n \"translate(\" + (graph.node(v).x - graph.node(v).width / 2) + \",\" + (graph.node(v).y + (transformationLog[v] ? transformationLog[v].y : 0) - graph.node(v).height / 2) + \" )\"\n );\n root.select(\"#\" + svgElem.id + \" #\" + v).attr(\"data-x-shift\", graph.node(v).x - graph.node(v).width / 2);\n const dividers = domDocument.querySelectorAll(\"#\" + svgElem.id + \" #\" + v + \" .divider\");\n dividers.forEach((divider) => {\n const parent = divider.parentElement;\n let pWidth = 0;\n let pShift = 0;\n if (parent) {\n if (parent.parentElement) {\n pWidth = parent.parentElement.getBBox().width;\n }\n pShift = parseInt(parent.getAttribute(\"data-x-shift\"), 10);\n if (Number.isNaN(pShift)) {\n pShift = 0;\n }\n }\n divider.setAttribute(\"x1\", 0 - pShift + 8);\n divider.setAttribute(\"x2\", pWidth - pShift - 8);\n });\n } else {\n log.debug(\"No Node \" + v + \": \" + JSON.stringify(graph.node(v)));\n }\n });\n let stateBox = svgElem.getBBox();\n graph.edges().forEach(function(e) {\n if (e !== void 0 && graph.edge(e) !== void 0) {\n log.debug(\"Edge \" + e.v + \" -> \" + e.w + \": \" + JSON.stringify(graph.edge(e)));\n drawEdge(diagram2, graph.edge(e), graph.edge(e).relation);\n }\n });\n stateBox = svgElem.getBBox();\n const stateInfo = {\n id: parentId ? parentId : \"root\",\n label: parentId ? parentId : \"root\",\n width: 0,\n height: 0\n };\n stateInfo.width = stateBox.width + 2 * conf.padding;\n stateInfo.height = stateBox.height + 2 * conf.padding;\n log.debug(\"Doc rendered\", stateInfo, graph);\n return stateInfo;\n}, \"renderDoc\");\nvar stateRenderer_default = {\n setConf,\n draw\n};\n\n// src/diagrams/state/stateDiagram.ts\nvar diagram = {\n parser: stateDiagram_default,\n get db() {\n return new StateDB(1);\n },\n renderer: stateRenderer_default,\n styles: styles_default,\n init: /* @__PURE__ */ __name((cnf) => {\n if (!cnf.state) {\n cnf.state = {};\n }\n cnf.state.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute;\n }, \"init\")\n};\nexport {\n diagram\n};\n"],"names":["drawStartState","__name","g","getConfig","drawDivider","drawSimpleState","stateDef","state","classBox","drawDescrState","addTspan","textEl","txt","isFirst2","tSpan","titleBox","titleHeight","description","isFirst","isSecond","descr","descrLine","descrBox","width","addTitleAndBox","altBkg","pad","dblPad","orgBox","orgWidth","orgX","title","titleWidth","startX","graphBox","lineY","drawEndState","drawForkJoinState","height","tmp","_drawLongText","_text","x","y","textHeight","textElem","text","lines","common_default","tHeight","line2","span","textBounds","drawNote","note","rectElem","textWidth","drawState","elem","id","stateInfo","stateBox","edgeCount","drawEdge","path","relation","getRelationType","type","StateDB","p","lineData","lineFunction","line","d","curveBasis","svgPath","url","getUrl","label","utils_default","rows","titleRows","maxWidth","minX","i","boundsTmp","log","boxHeight","heightAdj","bounds","conf","transformationLog","setConf","insertMarkers","draw","_version","diagObj","securityLevel","sandboxElement","select","root","doc","diagram2","rootDoc","renderDoc","padding","svgWidth","configureSvgSize","getLabelWidth","parentId","domDocument","graph","graphlib.Graph","edgeFreeDoc","states","relations","keys","key","node","sub","boxBounds","noteDef","cnt","dagreLayout","svgElem","v","divider","parent","pWidth","pShift","e","stateRenderer_default","diagram","stateDiagram_default","styles_default","cnf"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"stateDiagram-FKZM4ZOC-DGPNpRbW.js","sources":["../../../../../node_modules/mermaid/dist/chunks/mermaid.core/stateDiagram-FKZM4ZOC.mjs"],"sourcesContent":["import {\n StateDB,\n stateDiagram_default,\n styles_default\n} from \"./chunk-DI55MBZ5.mjs\";\nimport \"./chunk-55IACEB6.mjs\";\nimport \"./chunk-QN33PNHL.mjs\";\nimport \"./chunk-N4CR4FBY.mjs\";\nimport \"./chunk-QXUST7PY.mjs\";\nimport \"./chunk-HN2XXSSU.mjs\";\nimport \"./chunk-JZLCHNYA.mjs\";\nimport \"./chunk-CVBHYZKI.mjs\";\nimport \"./chunk-ATLVNIR6.mjs\";\nimport \"./chunk-JA3XYJ7Z.mjs\";\nimport {\n utils_default\n} from \"./chunk-S3R3BYOJ.mjs\";\nimport {\n common_default,\n configureSvgSize,\n getConfig2 as getConfig,\n getUrl\n} from \"./chunk-ABZYJK2D.mjs\";\nimport {\n __name,\n log\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/diagrams/state/stateRenderer.js\nimport { select } from \"d3\";\nimport { layout as dagreLayout } from \"dagre-d3-es/src/dagre/index.js\";\nimport * as graphlib from \"dagre-d3-es/src/graphlib/index.js\";\n\n// src/diagrams/state/shapes.js\nimport { line, curveBasis } from \"d3\";\nvar drawStartState = /* @__PURE__ */ __name((g) => g.append(\"circle\").attr(\"class\", \"start-state\").attr(\"r\", getConfig().state.sizeUnit).attr(\"cx\", getConfig().state.padding + getConfig().state.sizeUnit).attr(\"cy\", getConfig().state.padding + getConfig().state.sizeUnit), \"drawStartState\");\nvar drawDivider = /* @__PURE__ */ __name((g) => g.append(\"line\").style(\"stroke\", \"grey\").style(\"stroke-dasharray\", \"3\").attr(\"x1\", getConfig().state.textHeight).attr(\"class\", \"divider\").attr(\"x2\", getConfig().state.textHeight * 2).attr(\"y1\", 0).attr(\"y2\", 0), \"drawDivider\");\nvar drawSimpleState = /* @__PURE__ */ __name((g, stateDef) => {\n const state = g.append(\"text\").attr(\"x\", 2 * getConfig().state.padding).attr(\"y\", getConfig().state.textHeight + 2 * getConfig().state.padding).attr(\"font-size\", getConfig().state.fontSize).attr(\"class\", \"state-title\").text(stateDef.id);\n const classBox = state.node().getBBox();\n g.insert(\"rect\", \":first-child\").attr(\"x\", getConfig().state.padding).attr(\"y\", getConfig().state.padding).attr(\"width\", classBox.width + 2 * getConfig().state.padding).attr(\"height\", classBox.height + 2 * getConfig().state.padding).attr(\"rx\", getConfig().state.radius);\n return state;\n}, \"drawSimpleState\");\nvar drawDescrState = /* @__PURE__ */ __name((g, stateDef) => {\n const addTspan = /* @__PURE__ */ __name(function(textEl, txt, isFirst2) {\n const tSpan = textEl.append(\"tspan\").attr(\"x\", 2 * getConfig().state.padding).text(txt);\n if (!isFirst2) {\n tSpan.attr(\"dy\", getConfig().state.textHeight);\n }\n }, \"addTspan\");\n const title = g.append(\"text\").attr(\"x\", 2 * getConfig().state.padding).attr(\"y\", getConfig().state.textHeight + 1.3 * getConfig().state.padding).attr(\"font-size\", getConfig().state.fontSize).attr(\"class\", \"state-title\").text(stateDef.descriptions[0]);\n const titleBox = title.node().getBBox();\n const titleHeight = titleBox.height;\n const description = g.append(\"text\").attr(\"x\", getConfig().state.padding).attr(\n \"y\",\n titleHeight + getConfig().state.padding * 0.4 + getConfig().state.dividerMargin + getConfig().state.textHeight\n ).attr(\"class\", \"state-description\");\n let isFirst = true;\n let isSecond = true;\n stateDef.descriptions.forEach(function(descr) {\n if (!isFirst) {\n addTspan(description, descr, isSecond);\n isSecond = false;\n }\n isFirst = false;\n });\n const descrLine = g.append(\"line\").attr(\"x1\", getConfig().state.padding).attr(\"y1\", getConfig().state.padding + titleHeight + getConfig().state.dividerMargin / 2).attr(\"y2\", getConfig().state.padding + titleHeight + getConfig().state.dividerMargin / 2).attr(\"class\", \"descr-divider\");\n const descrBox = description.node().getBBox();\n const width = Math.max(descrBox.width, titleBox.width);\n descrLine.attr(\"x2\", width + 3 * getConfig().state.padding);\n g.insert(\"rect\", \":first-child\").attr(\"x\", getConfig().state.padding).attr(\"y\", getConfig().state.padding).attr(\"width\", width + 2 * getConfig().state.padding).attr(\"height\", descrBox.height + titleHeight + 2 * getConfig().state.padding).attr(\"rx\", getConfig().state.radius);\n return g;\n}, \"drawDescrState\");\nvar addTitleAndBox = /* @__PURE__ */ __name((g, stateDef, altBkg) => {\n const pad = getConfig().state.padding;\n const dblPad = 2 * getConfig().state.padding;\n const orgBox = g.node().getBBox();\n const orgWidth = orgBox.width;\n const orgX = orgBox.x;\n const title = g.append(\"text\").attr(\"x\", 0).attr(\"y\", getConfig().state.titleShift).attr(\"font-size\", getConfig().state.fontSize).attr(\"class\", \"state-title\").text(stateDef.id);\n const titleBox = title.node().getBBox();\n const titleWidth = titleBox.width + dblPad;\n let width = Math.max(titleWidth, orgWidth);\n if (width === orgWidth) {\n width = width + dblPad;\n }\n let startX;\n const graphBox = g.node().getBBox();\n if (stateDef.doc) {\n }\n startX = orgX - pad;\n if (titleWidth > orgWidth) {\n startX = (orgWidth - width) / 2 + pad;\n }\n if (Math.abs(orgX - graphBox.x) < pad && titleWidth > orgWidth) {\n startX = orgX - (titleWidth - orgWidth) / 2;\n }\n const lineY = 1 - getConfig().state.textHeight;\n g.insert(\"rect\", \":first-child\").attr(\"x\", startX).attr(\"y\", lineY).attr(\"class\", altBkg ? \"alt-composit\" : \"composit\").attr(\"width\", width).attr(\n \"height\",\n graphBox.height + getConfig().state.textHeight + getConfig().state.titleShift + 1\n ).attr(\"rx\", \"0\");\n title.attr(\"x\", startX + pad);\n if (titleWidth <= orgWidth) {\n title.attr(\"x\", orgX + (width - dblPad) / 2 - titleWidth / 2 + pad);\n }\n g.insert(\"rect\", \":first-child\").attr(\"x\", startX).attr(\n \"y\",\n getConfig().state.titleShift - getConfig().state.textHeight - getConfig().state.padding\n ).attr(\"width\", width).attr(\"height\", getConfig().state.textHeight * 3).attr(\"rx\", getConfig().state.radius);\n g.insert(\"rect\", \":first-child\").attr(\"x\", startX).attr(\n \"y\",\n getConfig().state.titleShift - getConfig().state.textHeight - getConfig().state.padding\n ).attr(\"width\", width).attr(\"height\", graphBox.height + 3 + 2 * getConfig().state.textHeight).attr(\"rx\", getConfig().state.radius);\n return g;\n}, \"addTitleAndBox\");\nvar drawEndState = /* @__PURE__ */ __name((g) => {\n g.append(\"circle\").attr(\"class\", \"end-state-outer\").attr(\"r\", getConfig().state.sizeUnit + getConfig().state.miniPadding).attr(\n \"cx\",\n getConfig().state.padding + getConfig().state.sizeUnit + getConfig().state.miniPadding\n ).attr(\n \"cy\",\n getConfig().state.padding + getConfig().state.sizeUnit + getConfig().state.miniPadding\n );\n return g.append(\"circle\").attr(\"class\", \"end-state-inner\").attr(\"r\", getConfig().state.sizeUnit).attr(\"cx\", getConfig().state.padding + getConfig().state.sizeUnit + 2).attr(\"cy\", getConfig().state.padding + getConfig().state.sizeUnit + 2);\n}, \"drawEndState\");\nvar drawForkJoinState = /* @__PURE__ */ __name((g, stateDef) => {\n let width = getConfig().state.forkWidth;\n let height = getConfig().state.forkHeight;\n if (stateDef.parentId) {\n let tmp = width;\n width = height;\n height = tmp;\n }\n return g.append(\"rect\").style(\"stroke\", \"black\").style(\"fill\", \"black\").attr(\"width\", width).attr(\"height\", height).attr(\"x\", getConfig().state.padding).attr(\"y\", getConfig().state.padding);\n}, \"drawForkJoinState\");\nvar _drawLongText = /* @__PURE__ */ __name((_text, x, y, g) => {\n let textHeight = 0;\n const textElem = g.append(\"text\");\n textElem.style(\"text-anchor\", \"start\");\n textElem.attr(\"class\", \"noteText\");\n let text = _text.replace(/\\r\\n/g, \"<br/>\");\n text = text.replace(/\\n/g, \"<br/>\");\n const lines = text.split(common_default.lineBreakRegex);\n let tHeight = 1.25 * getConfig().state.noteMargin;\n for (const line2 of lines) {\n const txt = line2.trim();\n if (txt.length > 0) {\n const span = textElem.append(\"tspan\");\n span.text(txt);\n if (tHeight === 0) {\n const textBounds = span.node().getBBox();\n tHeight += textBounds.height;\n }\n textHeight += tHeight;\n span.attr(\"x\", x + getConfig().state.noteMargin);\n span.attr(\"y\", y + textHeight + 1.25 * getConfig().state.noteMargin);\n }\n }\n return { textWidth: textElem.node().getBBox().width, textHeight };\n}, \"_drawLongText\");\nvar drawNote = /* @__PURE__ */ __name((text, g) => {\n g.attr(\"class\", \"state-note\");\n const note = g.append(\"rect\").attr(\"x\", 0).attr(\"y\", getConfig().state.padding);\n const rectElem = g.append(\"g\");\n const { textWidth, textHeight } = _drawLongText(text, 0, 0, rectElem);\n note.attr(\"height\", textHeight + 2 * getConfig().state.noteMargin);\n note.attr(\"width\", textWidth + getConfig().state.noteMargin * 2);\n return note;\n}, \"drawNote\");\nvar drawState = /* @__PURE__ */ __name(function(elem, stateDef) {\n const id = stateDef.id;\n const stateInfo = {\n id,\n label: stateDef.id,\n width: 0,\n height: 0\n };\n const g = elem.append(\"g\").attr(\"id\", id).attr(\"class\", \"stateGroup\");\n if (stateDef.type === \"start\") {\n drawStartState(g);\n }\n if (stateDef.type === \"end\") {\n drawEndState(g);\n }\n if (stateDef.type === \"fork\" || stateDef.type === \"join\") {\n drawForkJoinState(g, stateDef);\n }\n if (stateDef.type === \"note\") {\n drawNote(stateDef.note.text, g);\n }\n if (stateDef.type === \"divider\") {\n drawDivider(g);\n }\n if (stateDef.type === \"default\" && stateDef.descriptions.length === 0) {\n drawSimpleState(g, stateDef);\n }\n if (stateDef.type === \"default\" && stateDef.descriptions.length > 0) {\n drawDescrState(g, stateDef);\n }\n const stateBox = g.node().getBBox();\n stateInfo.width = stateBox.width + 2 * getConfig().state.padding;\n stateInfo.height = stateBox.height + 2 * getConfig().state.padding;\n return stateInfo;\n}, \"drawState\");\nvar edgeCount = 0;\nvar drawEdge = /* @__PURE__ */ __name(function(elem, path, relation) {\n const getRelationType = /* @__PURE__ */ __name(function(type) {\n switch (type) {\n case StateDB.relationType.AGGREGATION:\n return \"aggregation\";\n case StateDB.relationType.EXTENSION:\n return \"extension\";\n case StateDB.relationType.COMPOSITION:\n return \"composition\";\n case StateDB.relationType.DEPENDENCY:\n return \"dependency\";\n }\n }, \"getRelationType\");\n path.points = path.points.filter((p) => !Number.isNaN(p.y));\n const lineData = path.points;\n const lineFunction = line().x(function(d) {\n return d.x;\n }).y(function(d) {\n return d.y;\n }).curve(curveBasis);\n const svgPath = elem.append(\"path\").attr(\"d\", lineFunction(lineData)).attr(\"id\", \"edge\" + edgeCount).attr(\"class\", \"transition\");\n let url = \"\";\n if (getConfig().state.arrowMarkerAbsolute) {\n url = getUrl(true);\n }\n svgPath.attr(\n \"marker-end\",\n \"url(\" + url + \"#\" + getRelationType(StateDB.relationType.DEPENDENCY) + \"End)\"\n );\n if (relation.title !== void 0) {\n const label = elem.append(\"g\").attr(\"class\", \"stateLabel\");\n const { x, y } = utils_default.calcLabelPosition(path.points);\n const rows = common_default.getRows(relation.title);\n let titleHeight = 0;\n const titleRows = [];\n let maxWidth = 0;\n let minX = 0;\n for (let i = 0; i <= rows.length; i++) {\n const title = label.append(\"text\").attr(\"text-anchor\", \"middle\").text(rows[i]).attr(\"x\", x).attr(\"y\", y + titleHeight);\n const boundsTmp = title.node().getBBox();\n maxWidth = Math.max(maxWidth, boundsTmp.width);\n minX = Math.min(minX, boundsTmp.x);\n log.info(boundsTmp.x, x, y + titleHeight);\n if (titleHeight === 0) {\n const titleBox = title.node().getBBox();\n titleHeight = titleBox.height;\n log.info(\"Title height\", titleHeight, y);\n }\n titleRows.push(title);\n }\n let boxHeight = titleHeight * rows.length;\n if (rows.length > 1) {\n const heightAdj = (rows.length - 1) * titleHeight * 0.5;\n titleRows.forEach((title, i) => title.attr(\"y\", y + i * titleHeight - heightAdj));\n boxHeight = titleHeight * rows.length;\n }\n const bounds = label.node().getBBox();\n label.insert(\"rect\", \":first-child\").attr(\"class\", \"box\").attr(\"x\", x - maxWidth / 2 - getConfig().state.padding / 2).attr(\"y\", y - boxHeight / 2 - getConfig().state.padding / 2 - 3.5).attr(\"width\", maxWidth + getConfig().state.padding).attr(\"height\", boxHeight + getConfig().state.padding);\n log.info(bounds);\n }\n edgeCount++;\n}, \"drawEdge\");\n\n// src/diagrams/state/stateRenderer.js\nvar conf;\nvar transformationLog = {};\nvar setConf = /* @__PURE__ */ __name(function() {\n}, \"setConf\");\nvar insertMarkers = /* @__PURE__ */ __name(function(elem) {\n elem.append(\"defs\").append(\"marker\").attr(\"id\", \"dependencyEnd\").attr(\"refX\", 19).attr(\"refY\", 7).attr(\"markerWidth\", 20).attr(\"markerHeight\", 28).attr(\"orient\", \"auto\").append(\"path\").attr(\"d\", \"M 19,7 L9,13 L14,7 L9,1 Z\");\n}, \"insertMarkers\");\nvar draw = /* @__PURE__ */ __name(function(text, id, _version, diagObj) {\n conf = getConfig().state;\n const securityLevel = getConfig().securityLevel;\n let sandboxElement;\n if (securityLevel === \"sandbox\") {\n sandboxElement = select(\"#i\" + id);\n }\n const root = securityLevel === \"sandbox\" ? select(sandboxElement.nodes()[0].contentDocument.body) : select(\"body\");\n const doc = securityLevel === \"sandbox\" ? sandboxElement.nodes()[0].contentDocument : document;\n log.debug(\"Rendering diagram \" + text);\n const diagram2 = root.select(`[id='${id}']`);\n insertMarkers(diagram2);\n const rootDoc = diagObj.db.getRootDoc();\n renderDoc(rootDoc, diagram2, void 0, false, root, doc, diagObj);\n const padding = conf.padding;\n const bounds = diagram2.node().getBBox();\n const width = bounds.width + padding * 2;\n const height = bounds.height + padding * 2;\n const svgWidth = width * 1.75;\n configureSvgSize(diagram2, height, svgWidth, conf.useMaxWidth);\n diagram2.attr(\n \"viewBox\",\n `${bounds.x - conf.padding} ${bounds.y - conf.padding} ` + width + \" \" + height\n );\n}, \"draw\");\nvar getLabelWidth = /* @__PURE__ */ __name((text) => {\n return text ? text.length * conf.fontSizeFactor : 1;\n}, \"getLabelWidth\");\nvar renderDoc = /* @__PURE__ */ __name((doc, diagram2, parentId, altBkg, root, domDocument, diagObj) => {\n const graph = new graphlib.Graph({\n compound: true,\n multigraph: true\n });\n let i;\n let edgeFreeDoc = true;\n for (i = 0; i < doc.length; i++) {\n if (doc[i].stmt === \"relation\") {\n edgeFreeDoc = false;\n break;\n }\n }\n if (parentId) {\n graph.setGraph({\n rankdir: \"LR\",\n multigraph: true,\n compound: true,\n // acyclicer: 'greedy',\n ranker: \"tight-tree\",\n ranksep: edgeFreeDoc ? 1 : conf.edgeLengthFactor,\n nodeSep: edgeFreeDoc ? 1 : 50,\n isMultiGraph: true\n // ranksep: 5,\n // nodesep: 1\n });\n } else {\n graph.setGraph({\n rankdir: \"TB\",\n multigraph: true,\n compound: true,\n // isCompound: true,\n // acyclicer: 'greedy',\n // ranker: 'longest-path'\n ranksep: edgeFreeDoc ? 1 : conf.edgeLengthFactor,\n nodeSep: edgeFreeDoc ? 1 : 50,\n ranker: \"tight-tree\",\n // ranker: 'network-simplex'\n isMultiGraph: true\n });\n }\n graph.setDefaultEdgeLabel(function() {\n return {};\n });\n const states = diagObj.db.getStates();\n const relations = diagObj.db.getRelations();\n const keys = Object.keys(states);\n let first = true;\n for (const key of keys) {\n const stateDef = states[key];\n if (parentId) {\n stateDef.parentId = parentId;\n }\n let node;\n if (stateDef.doc) {\n let sub = diagram2.append(\"g\").attr(\"id\", stateDef.id).attr(\"class\", \"stateGroup\");\n node = renderDoc(stateDef.doc, sub, stateDef.id, !altBkg, root, domDocument, diagObj);\n if (first) {\n sub = addTitleAndBox(sub, stateDef, altBkg);\n let boxBounds = sub.node().getBBox();\n node.width = boxBounds.width;\n node.height = boxBounds.height + conf.padding / 2;\n transformationLog[stateDef.id] = { y: conf.compositTitleSize };\n } else {\n let boxBounds = sub.node().getBBox();\n node.width = boxBounds.width;\n node.height = boxBounds.height;\n }\n } else {\n node = drawState(diagram2, stateDef, graph);\n }\n if (stateDef.note) {\n const noteDef = {\n descriptions: [],\n id: stateDef.id + \"-note\",\n note: stateDef.note,\n type: \"note\"\n };\n const note = drawState(diagram2, noteDef, graph);\n if (stateDef.note.position === \"left of\") {\n graph.setNode(node.id + \"-note\", note);\n graph.setNode(node.id, node);\n } else {\n graph.setNode(node.id, node);\n graph.setNode(node.id + \"-note\", note);\n }\n graph.setParent(node.id, node.id + \"-group\");\n graph.setParent(node.id + \"-note\", node.id + \"-group\");\n } else {\n graph.setNode(node.id, node);\n }\n }\n log.debug(\"Count=\", graph.nodeCount(), graph);\n let cnt = 0;\n relations.forEach(function(relation) {\n cnt++;\n log.debug(\"Setting edge\", relation);\n graph.setEdge(\n relation.id1,\n relation.id2,\n {\n relation,\n width: getLabelWidth(relation.title),\n height: conf.labelHeight * common_default.getRows(relation.title).length,\n labelpos: \"c\"\n },\n \"id\" + cnt\n );\n });\n dagreLayout(graph);\n log.debug(\"Graph after layout\", graph.nodes());\n const svgElem = diagram2.node();\n graph.nodes().forEach(function(v) {\n if (v !== void 0 && graph.node(v) !== void 0) {\n log.warn(\"Node \" + v + \": \" + JSON.stringify(graph.node(v)));\n root.select(\"#\" + svgElem.id + \" #\" + v).attr(\n \"transform\",\n \"translate(\" + (graph.node(v).x - graph.node(v).width / 2) + \",\" + (graph.node(v).y + (transformationLog[v] ? transformationLog[v].y : 0) - graph.node(v).height / 2) + \" )\"\n );\n root.select(\"#\" + svgElem.id + \" #\" + v).attr(\"data-x-shift\", graph.node(v).x - graph.node(v).width / 2);\n const dividers = domDocument.querySelectorAll(\"#\" + svgElem.id + \" #\" + v + \" .divider\");\n dividers.forEach((divider) => {\n const parent = divider.parentElement;\n let pWidth = 0;\n let pShift = 0;\n if (parent) {\n if (parent.parentElement) {\n pWidth = parent.parentElement.getBBox().width;\n }\n pShift = parseInt(parent.getAttribute(\"data-x-shift\"), 10);\n if (Number.isNaN(pShift)) {\n pShift = 0;\n }\n }\n divider.setAttribute(\"x1\", 0 - pShift + 8);\n divider.setAttribute(\"x2\", pWidth - pShift - 8);\n });\n } else {\n log.debug(\"No Node \" + v + \": \" + JSON.stringify(graph.node(v)));\n }\n });\n let stateBox = svgElem.getBBox();\n graph.edges().forEach(function(e) {\n if (e !== void 0 && graph.edge(e) !== void 0) {\n log.debug(\"Edge \" + e.v + \" -> \" + e.w + \": \" + JSON.stringify(graph.edge(e)));\n drawEdge(diagram2, graph.edge(e), graph.edge(e).relation);\n }\n });\n stateBox = svgElem.getBBox();\n const stateInfo = {\n id: parentId ? parentId : \"root\",\n label: parentId ? parentId : \"root\",\n width: 0,\n height: 0\n };\n stateInfo.width = stateBox.width + 2 * conf.padding;\n stateInfo.height = stateBox.height + 2 * conf.padding;\n log.debug(\"Doc rendered\", stateInfo, graph);\n return stateInfo;\n}, \"renderDoc\");\nvar stateRenderer_default = {\n setConf,\n draw\n};\n\n// src/diagrams/state/stateDiagram.ts\nvar diagram = {\n parser: stateDiagram_default,\n get db() {\n return new StateDB(1);\n },\n renderer: stateRenderer_default,\n styles: styles_default,\n init: /* @__PURE__ */ __name((cnf) => {\n if (!cnf.state) {\n cnf.state = {};\n }\n cnf.state.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute;\n }, \"init\")\n};\nexport {\n diagram\n};\n"],"names":["drawStartState","__name","g","getConfig","drawDivider","drawSimpleState","stateDef","state","classBox","drawDescrState","addTspan","textEl","txt","isFirst2","tSpan","titleBox","titleHeight","description","isFirst","isSecond","descr","descrLine","descrBox","width","addTitleAndBox","altBkg","pad","dblPad","orgBox","orgWidth","orgX","title","titleWidth","startX","graphBox","lineY","drawEndState","drawForkJoinState","height","tmp","_drawLongText","_text","x","y","textHeight","textElem","text","lines","common_default","tHeight","line2","span","textBounds","drawNote","note","rectElem","textWidth","drawState","elem","id","stateInfo","stateBox","edgeCount","drawEdge","path","relation","getRelationType","type","StateDB","p","lineData","lineFunction","line","d","curveBasis","svgPath","url","getUrl","label","utils_default","rows","titleRows","maxWidth","minX","i","boundsTmp","log","boxHeight","heightAdj","bounds","conf","transformationLog","setConf","insertMarkers","draw","_version","diagObj","securityLevel","sandboxElement","select","root","doc","diagram2","rootDoc","renderDoc","padding","svgWidth","configureSvgSize","getLabelWidth","parentId","domDocument","graph","graphlib.Graph","edgeFreeDoc","states","relations","keys","key","node","sub","boxBounds","noteDef","cnt","dagreLayout","svgElem","v","divider","parent","pWidth","pShift","e","stateRenderer_default","diagram","stateDiagram_default","styles_default","cnf"],"mappings":"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","x_google_ignoreList":[0]}
@@ -0,0 +1,2 @@
1
+ import{s as r,b as e,a,S as i}from"./chunk-DI55MBZ5-CxSXOmoK.js";import{_ as s}from"./mermaid.core-BdxLLjl2.js";import"./chunk-55IACEB6-CO_GT_87.js";import"./chunk-QN33PNHL-DKEBwj3f.js";import"./preload-helper-BXl3LOEh.js";import"./misc-W4055b-0.js";import"./jsx-runtime-C5WNSv3b.js";import"./index-CqIc3cxq.js";import"./chunk-EPOLDU6W-BCLmut3y.js";var f={parser:a,get db(){return new i(2)},renderer:e,styles:r,init:s(t=>{t.state||(t.state={}),t.state.arrowMarkerAbsolute=t.arrowMarkerAbsolute},"init")};export{f as diagram};
2
+ //# sourceMappingURL=stateDiagram-v2-4FDKWEC3-DxaFuKxL.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"stateDiagram-v2-4FDKWEC3-CAmcrDIS.js","sources":["../../../../../node_modules/mermaid/dist/chunks/mermaid.core/stateDiagram-v2-4FDKWEC3.mjs"],"sourcesContent":["import {\n StateDB,\n stateDiagram_default,\n stateRenderer_v3_unified_default,\n styles_default\n} from \"./chunk-DI55MBZ5.mjs\";\nimport \"./chunk-55IACEB6.mjs\";\nimport \"./chunk-QN33PNHL.mjs\";\nimport \"./chunk-N4CR4FBY.mjs\";\nimport \"./chunk-QXUST7PY.mjs\";\nimport \"./chunk-HN2XXSSU.mjs\";\nimport \"./chunk-JZLCHNYA.mjs\";\nimport \"./chunk-CVBHYZKI.mjs\";\nimport \"./chunk-ATLVNIR6.mjs\";\nimport \"./chunk-JA3XYJ7Z.mjs\";\nimport \"./chunk-S3R3BYOJ.mjs\";\nimport \"./chunk-ABZYJK2D.mjs\";\nimport {\n __name\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/diagrams/state/stateDiagram-v2.ts\nvar diagram = {\n parser: stateDiagram_default,\n get db() {\n return new StateDB(2);\n },\n renderer: stateRenderer_v3_unified_default,\n styles: styles_default,\n init: /* @__PURE__ */ __name((cnf) => {\n if (!cnf.state) {\n cnf.state = {};\n }\n cnf.state.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute;\n }, \"init\")\n};\nexport {\n diagram\n};\n"],"names":["diagram","stateDiagram_default","StateDB","stateRenderer_v3_unified_default","styles_default","__name","cnf"],"mappings":"6VAsBG,IAACA,EAAU,CACZ,OAAQC,EACR,IAAI,IAAK,CACP,OAAO,IAAIC,EAAQ,CAAC,CACtB,EACA,SAAUC,EACV,OAAQC,EACR,KAAsBC,EAAQC,GAAQ,CAC/BA,EAAI,QACPA,EAAI,MAAQ,CAAA,GAEdA,EAAI,MAAM,oBAAsBA,EAAI,mBACtC,EAAG,MAAM,CACX","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"stateDiagram-v2-4FDKWEC3-DxaFuKxL.js","sources":["../../../../../node_modules/mermaid/dist/chunks/mermaid.core/stateDiagram-v2-4FDKWEC3.mjs"],"sourcesContent":["import {\n StateDB,\n stateDiagram_default,\n stateRenderer_v3_unified_default,\n styles_default\n} from \"./chunk-DI55MBZ5.mjs\";\nimport \"./chunk-55IACEB6.mjs\";\nimport \"./chunk-QN33PNHL.mjs\";\nimport \"./chunk-N4CR4FBY.mjs\";\nimport \"./chunk-QXUST7PY.mjs\";\nimport \"./chunk-HN2XXSSU.mjs\";\nimport \"./chunk-JZLCHNYA.mjs\";\nimport \"./chunk-CVBHYZKI.mjs\";\nimport \"./chunk-ATLVNIR6.mjs\";\nimport \"./chunk-JA3XYJ7Z.mjs\";\nimport \"./chunk-S3R3BYOJ.mjs\";\nimport \"./chunk-ABZYJK2D.mjs\";\nimport {\n __name\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/diagrams/state/stateDiagram-v2.ts\nvar diagram = {\n parser: stateDiagram_default,\n get db() {\n return new StateDB(2);\n },\n renderer: stateRenderer_v3_unified_default,\n styles: styles_default,\n init: /* @__PURE__ */ __name((cnf) => {\n if (!cnf.state) {\n cnf.state = {};\n }\n cnf.state.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute;\n }, \"init\")\n};\nexport {\n diagram\n};\n"],"names":["diagram","stateDiagram_default","StateDB","stateRenderer_v3_unified_default","styles_default","__name","cnf"],"mappings":"6VAsBG,IAACA,EAAU,CACZ,OAAQC,EACR,IAAI,IAAK,CACP,OAAO,IAAIC,EAAQ,CAAC,CACtB,EACA,SAAUC,EACV,OAAQC,EACR,KAAsBC,EAAQC,GAAQ,CAC/BA,EAAI,QACPA,EAAI,MAAQ,CAAA,GAEdA,EAAI,MAAM,oBAAsBA,EAAI,mBACtC,EAAG,MAAM,CACX","x_google_ignoreList":[0]}
@@ -0,0 +1,2 @@
1
+ import{j as l}from"./jsx-runtime-C5WNSv3b.js";function i({status:s}){const e={running:{pinger:"bg-yellow-500/60",circle:"bg-yellow-500"},passed:{circle:"bg-success"},failed:{circle:"bg-destructive"},stopped:{circle:"bg-muted-foreground"}}[s];return l.jsxs("span",{className:"relative flex h-3 w-3",children:[e.pinger?l.jsx("span",{className:`absolute inline-flex h-full w-full animate-ping rounded-full ${e.pinger} opacity-75`}):null,l.jsx("span",{className:`relative inline-flex h-3 w-3 rounded-full ${e.circle}`})]})}export{i as S};
2
+ //# sourceMappingURL=status-indicator-C6DiLYL5.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status-indicator-C6DiLYL5.js","sources":["../../../app/components/status-indicator.tsx"],"sourcesContent":["export function StatusIndicator({\n\tstatus,\n}: {\n\tstatus: 'running' | 'passed' | 'failed' | 'stopped'\n}) {\n\tconst colors = {\n\t\trunning: {\n\t\t\tpinger: 'bg-yellow-500/60',\n\t\t\tcircle: 'bg-yellow-500',\n\t\t},\n\t\tpassed: {\n\t\t\tcircle: 'bg-success',\n\t\t},\n\t\tfailed: {\n\t\t\tcircle: 'bg-destructive',\n\t\t},\n\t\tstopped: {\n\t\t\tcircle: 'bg-muted-foreground',\n\t\t},\n\t}[status]\n\treturn (\n\t\t<span className=\"relative flex h-3 w-3\">\n\t\t\t{colors.pinger ? (\n\t\t\t\t<span\n\t\t\t\t\tclassName={`absolute inline-flex h-full w-full animate-ping rounded-full ${colors.pinger} opacity-75`}\n\t\t\t\t/>\n\t\t\t) : null}\n\t\t\t<span\n\t\t\t\tclassName={`relative inline-flex h-3 w-3 rounded-full ${colors.circle}`}\n\t\t\t/>\n\t\t</span>\n\t)\n}\n"],"names":["StatusIndicator","status","colors","jsxs","jsx"],"mappings":"8CAAO,SAASA,EAAgB,CAC/B,OAAAC,CACD,EAEG,CACF,MAAMC,EAAS,CACd,QAAS,CACR,OAAQ,mBACR,OAAQ,eAAA,EAET,OAAQ,CACP,OAAQ,YAAA,EAET,OAAQ,CACP,OAAQ,gBAAA,EAET,QAAS,CACR,OAAQ,qBAAA,CACT,EACCD,CAAM,EACR,OACCE,EAAAA,KAAC,OAAA,CAAK,UAAU,wBACd,SAAA,CAAAD,EAAO,OACPE,EAAAA,IAAC,OAAA,CACA,UAAW,gEAAgEF,EAAO,MAAM,aAAA,CAAA,EAEtF,KACJE,EAAAA,IAAC,OAAA,CACA,UAAW,6CAA6CF,EAAO,MAAM,EAAA,CAAA,CACtE,EACD,CAEF"}