@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{h as D}from"./chunk-FNSCYPCZ-BHgC5cdx.js";import{w as O,f as k,d as P}from"./chunk-EPOLDU6W-BCLmut3y.js";import{j as e}from"./jsx-runtime-C5WNSv3b.js";import{r as p}from"./index-CqIc3cxq.js";import{C as I}from"./client-only-BeMV-Wuv.js";import{i as $,I as R,B as E}from"./button-CIlVtsau.js";import{I as x,f as N,e as M,c as F,h as z,i as Y,b as B,j as T,k as L}from"./misc-DVYuZMjW.js";import{L as V}from"./launch-editor-B2dmpkaO.js";import"./pe-CIZUOJMr.js";import"./progress-bar-B27isaGl.js";import"./root-loader-BOzEMapJ.js";function W({selectedWorkshops:s,availableWorkshops:d,currentWorkshopId:n}){const[i,t]=P(),o=(a,u)=>{const c=u?[...s,a]:s.filter(j=>j!==a),m=new URLSearchParams(i);c.length>0?m.set("workshops",c.join(",")):m.delete("workshops"),t(m)};return e.jsxs("div",{className:"mb-6",children:[e.jsx("h3",{className:"mb-3 text-lg font-semibold",children:"Workshop Filter"}),e.jsx("div",{className:"flex flex-wrap gap-3",children:d.map(a=>e.jsxs("label",{className:"flex items-center gap-2",children:[e.jsx("input",{type:"checkbox",checked:s.includes(a),onChange:u=>o(a,u.target.checked),className:"rounded"}),e.jsxs("span",{className:`text-sm ${a===n?"text-primary font-bold":""}`,children:[a," ",a===n?"(current)":null]})]},a))})]})}function H({filterQuery:s}){const[d,n]=P(),[i,t]=p.useState(s),o=p.useRef(null);p.useEffect(()=>{t(s)},[s]);const a=c=>{const m=new URLSearchParams(d);c?m.set("q",c):m.delete("q"),n(m)},u=()=>{t(""),a(""),o.current?.focus()};return e.jsxs("div",{className:"mb-6",children:[e.jsx("h3",{className:"mb-3 text-lg font-semibold",children:"Search Cache Entries"}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx("input",{ref:o,type:"text",placeholder:"Search by key or cache name...",value:i,onChange:c=>{t(c.target.value),a(c.target.value)},className:"border-border bg-background text-foreground focus:ring-ring flex-1 rounded-md border px-3 py-2 focus:ring-2 focus:outline-none"}),i?e.jsx(R,{onClick:u,title:"Clear search",children:e.jsx(x,{name:"Close",className:"h-4 w-4"})}):null]})]})}function J({workshopId:s,cacheName:d,filename:n,currentValue:i,entryKey:t}){const o=k(),[a,u]=p.useState(JSON.stringify(i,null,2)),[c,m]=p.useState(!1),j=()=>{o.submit({intent:"update-entry",workshopId:s,cacheName:d,filename:n,newValue:a},{method:"POST"}),m(!1)},l=h=>{u(h),m(h!==JSON.stringify(i,null,2))},r=()=>{u(JSON.stringify(i,null,2)),m(!1)};return e.jsxs("details",{className:"mt-2",children:[e.jsx("summary",{className:"text-muted-foreground hover:text-foreground cursor-pointer text-sm",children:"Edit entry details"}),e.jsxs("div",{className:"border-border bg-muted mt-2 space-y-3 rounded border p-3",children:[e.jsxs("div",{children:[e.jsx("label",{className:"mb-1 block text-sm font-medium",children:"Key:"}),e.jsx("code",{className:"bg-background rounded border px-2 py-1 text-sm",children:t})]}),e.jsxs("div",{children:[e.jsx("label",{className:"mb-1 block text-sm font-medium",children:"Value:"}),e.jsx("textarea",{value:a,onChange:h=>l(h.target.value),className:"resize-vertical border-border bg-background text-foreground focus:ring-ring h-32 w-full rounded border p-2 font-mono text-sm focus:ring-2 focus:outline-none",placeholder:"Enter JSON value..."})]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(E,{varient:"primary",onClick:j,disabled:!c||o.state!=="idle",children:o.state!=="idle"?"Saving...":"Save"}),e.jsx(E,{varient:"mono",onClick:r,disabled:!c,children:"Reset"})]})]})]})}function K({skippedFiles:s,workshopId:d,cacheName:n}){const i=k();return s.length===0?null:e.jsxs("div",{className:"border-warning bg-warning mt-4 rounded border p-3",children:[e.jsxs("div",{className:"mb-2 flex items-center gap-2",children:[e.jsx(x,{name:"TriangleAlert",className:"text-warning-foreground h-4 w-4"}),e.jsxs("h5",{className:"text-warning-foreground font-medium",children:["Skipped Files (",s.length,")"]})]}),e.jsx("p",{className:"text-warning-foreground/80 mb-3 text-sm",children:"These cache files were skipped because they exceed the 3MB size limit:"}),e.jsx("div",{className:"space-y-2",children:s.map(t=>e.jsxs("div",{className:"border-warning/20 bg-warning/5 flex items-center justify-between rounded border p-2",children:[e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("div",{className:"text-warning-foreground truncate font-mono text-sm font-medium",children:t.filename}),e.jsxs("div",{className:"text-warning-foreground/70 text-xs",children:[t.error," • Size:"," ",e.jsx("span",{title:`${t.size} bytes`,children:N(t.size)})]})]}),e.jsx("div",{className:"ml-2 flex shrink-0",children:e.jsx(v,{onConfirm:()=>{i.submit({intent:"delete-entry",workshopId:d,cacheName:n,filename:t.filename},{method:"POST"})},title:"Delete large cache file",className:"text-destructive-foreground hover:bg-destructive/20 hover:text-destructive-foreground",children:e.jsx(x,{name:"Remove",className:"h-4 w-4"})})})]},t.filename))})]})}const ne=O(function({loaderData:d}){const n=k(),i=(l,r,h)=>{n.submit({intent:"delete-entry",workshopId:l,cacheName:r,filename:h},{method:"POST"})},t=(l,r)=>{n.submit({intent:"delete-cache",workshopId:l,cacheName:r},{method:"POST"})},o=l=>{n.submit({intent:"delete-workshop-cache",workshopId:l},{method:"POST"})},{currentWorkshopId:a,filteredCaches:u,filterQuery:c,selectedWorkshops:m,availableWorkshops:j}=d;return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"mb-2 text-2xl font-bold",children:"Cache Management"}),e.jsxs("p",{className:"text-muted-foreground",children:["Current Workshop:"," ",e.jsx("span",{className:"text-foreground font-semibold",children:a})]})]}),e.jsx(W,{selectedWorkshops:m,availableWorkshops:j,currentWorkshopId:a}),e.jsx(H,{filterQuery:c}),n.data?.status==="success"?e.jsx("div",{className:"border-border bg-success text-success-foreground rounded border p-4",children:n.data.message}):null,n.data?.status==="error"?e.jsx("div",{className:"border-border bg-destructive text-destructive-foreground rounded border p-4",children:n.data.error}):null,u.length===0?e.jsx("div",{className:"text-muted-foreground py-8 text-center",children:"No caches found matching your criteria."}):null,e.jsx("div",{className:"space-y-6",children:u.map(l=>e.jsxs("details",{open:l.workshopId===a,children:[e.jsx("summary",{className:"border-border bg-card hover:bg-accent cursor-pointer rounded-lg border p-4",children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("h3",{className:"text-card-foreground flex items-center gap-2 text-lg font-semibold",children:[e.jsx(x,{name:"Files",className:"h-5 w-5"}),l.workshopId==="global"?"Global Caches":l.workshopId,l.workshopId===a?e.jsx("span",{className:"bg-primary text-primary-foreground rounded px-2 py-1 text-xs",children:"Current"}):null]}),e.jsx(v,{onConfirm:()=>o(l.workshopId),title:"Delete all workshop caches",children:e.jsx(x,{name:"Remove",className:"h-4 w-4"})})]})}),e.jsx("div",{className:"mt-4 space-y-4 pl-4",children:l.caches.map(r=>{const h=r.entries.reduce((f,g)=>f+(g.size||0),0),b=(r.skippedFiles||[]).reduce((f,g)=>f+g.size,0),w=h+b;return e.jsxs("details",{className:"bg-muted rounded-md",children:[e.jsx("summary",{className:"hover:bg-accent cursor-pointer p-3",children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("h4",{className:"text-muted-foreground flex items-center gap-2 font-medium",children:[e.jsx(x,{name:"Files",className:"h-4 w-4"}),r.name,e.jsxs("span",{className:"text-sm",children:["(",r.entries.length," entr",r.entries.length===1?"y":"ies",")"]}),w>0?e.jsxs("span",{className:"text-muted-foreground text-sm",children:["•"," ",e.jsx("span",{title:`${w} bytes`,children:N(w)})," ","total",b>0?e.jsxs("span",{className:"text-warning",children:[" ","(",e.jsx("span",{title:`${b} bytes`,children:N(b)})," ","skipped)"]}):null]}):null]}),e.jsx(v,{onConfirm:()=>t(l.workshopId,r.name),title:"Delete cache",children:e.jsx(x,{name:"Remove",className:"h-4 w-4"})})]})}),e.jsxs("div",{className:"p-3 pt-0",children:[r.entries.length===0?e.jsx("p",{className:"text-muted-foreground text-sm",children:"No entries match your search."}):null,r.skippedFiles&&r.skippedFiles.length>0?e.jsx(K,{skippedFiles:r.skippedFiles,workshopId:l.workshopId,cacheName:r.name}):null,e.jsx("div",{className:"space-y-2",children:r.entries.map(({key:f,entry:g,filename:y,size:S,filepath:C})=>e.jsxs("div",{className:"border-border bg-background rounded border p-3",children:[e.jsxs("div",{className:"flex items-start justify-between",children:[e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsxs("div",{className:"mb-1 flex items-center gap-2",children:[e.jsx("div",{className:"truncate font-mono text-sm font-medium",title:f,children:f}),S?e.jsx("span",{className:"bg-muted text-muted-foreground inline-flex items-center rounded px-1.5 py-0.5 text-xs whitespace-nowrap",title:`${S} bytes`,children:N(S)}):null]}),e.jsx(U,{metadata:g.metadata})]}),e.jsxs("div",{className:"ml-4 flex shrink-0 gap-1",children:[e.jsx("a",{href:D("/admin/cache/*",{"*":`${l.workshopId}/${r.name}/${y}`}),target:"_blank",rel:"noopener noreferrer",className:"border-border bg-background text-foreground hover:bg-muted focus:ring-ring inline-flex h-8 w-8 items-center justify-center rounded border focus:ring-2 focus:outline-none",title:"View JSON",children:e.jsx(x,{name:"ExternalLink",className:"h-4 w-4"})}),C?e.jsx(V,{file:C,className:$,children:e.jsx(x,{name:"Files",className:"h-4 w-4",title:"Open in editor"})}):null,e.jsx(v,{onConfirm:()=>i(l.workshopId,r.name,y),title:"Delete entry",children:e.jsx(x,{name:"Remove",className:"h-4 w-4"})})]})]}),e.jsx(J,{workshopId:l.workshopId,cacheName:r.name,filename:y,currentValue:g.value,entryKey:f})]},f))})]})]},r.name)})})]},l.workshopId))})]})});function U({metadata:s}){const d=z(),[,n]=p.useState(Date.now()),i=Y(s);B(()=>{n(Date.now())},1e3);const t=d(s.createdTime),o=i?L(i):{text:"Never",isExpired:!1,isExpiringSoon:!1};return e.jsxs("div",{className:"text-muted-foreground flex flex-col gap-1 text-xs",children:[e.jsxs("div",{children:["Created: ",t.format("MMM D, YYYY HH:mm:ss")," ",e.jsx(I,{children:()=>`(${t.fromNow()})`})]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-3",children:[s.ttl!==void 0&&s.ttl!==null?e.jsxs("span",{children:["TTL:"," ",s.ttl===1/0?"Forever":e.jsx("span",{title:`${s.ttl}ms`,children:T(s.ttl)})]}):null,s.swr!==void 0?e.jsxs("span",{children:["SWR:"," ",e.jsx("span",{title:`${s.swr}ms`,children:T(s.swr)})]}):null,e.jsx("div",{className:`inline-flex w-auto rounded-full px-2 py-[2px] font-medium ${o.isExpired?"bg-destructive text-destructive-foreground":o.isExpiringSoon?"bg-warning text-warning-foreground":"text-foreground"}`,children:i?e.jsxs(e.Fragment,{children:["Expires: ",d(i).format("MMM D, YYYY HH:mm:ss")," (",e.jsx("span",{className:"tabular-nums",children:e.jsx(I,{children:()=>o.text})}),")"]}):"Expires: Never"})]})]})}function v({onConfirm:s,children:d,className:n,...i}){const t=M();return e.jsx(R,{...t.getButtonProps({onClick:t.doubleCheck?s:void 0,...i}),className:F(t.doubleCheck?"bg-destructive text-destructive-foreground":null,n),children:t.doubleCheck?"✓":d})}export{ne as default};
2
- //# sourceMappingURL=cache-MJu_dqFS.js.map
1
+ import{h as D}from"./chunk-FNSCYPCZ-BHgC5cdx.js";import{w as O,f as k,d as P}from"./chunk-EPOLDU6W-BCLmut3y.js";import{j as e}from"./jsx-runtime-C5WNSv3b.js";import{r as p}from"./index-CqIc3cxq.js";import{C as I}from"./client-only-BeMV-Wuv.js";import{i as $,I as R,B as E}from"./button-Cd-ekki5.js";import{I as x,f as N,e as M,c as F,h as z,i as Y,b as B,j as T,k as L}from"./misc-W4055b-0.js";import{L as V}from"./launch-editor-D2exGfVu.js";import"./pe-CIZUOJMr.js";import"./progress-bar-DpWhcyhC.js";import"./root-loader-BOzEMapJ.js";function W({selectedWorkshops:s,availableWorkshops:d,currentWorkshopId:n}){const[i,t]=P(),o=(a,u)=>{const c=u?[...s,a]:s.filter(j=>j!==a),m=new URLSearchParams(i);c.length>0?m.set("workshops",c.join(",")):m.delete("workshops"),t(m)};return e.jsxs("div",{className:"mb-6",children:[e.jsx("h3",{className:"mb-3 text-lg font-semibold",children:"Workshop Filter"}),e.jsx("div",{className:"flex flex-wrap gap-3",children:d.map(a=>e.jsxs("label",{className:"flex items-center gap-2",children:[e.jsx("input",{type:"checkbox",checked:s.includes(a),onChange:u=>o(a,u.target.checked),className:"rounded"}),e.jsxs("span",{className:`text-sm ${a===n?"text-primary font-bold":""}`,children:[a," ",a===n?"(current)":null]})]},a))})]})}function H({filterQuery:s}){const[d,n]=P(),[i,t]=p.useState(s),o=p.useRef(null);p.useEffect(()=>{t(s)},[s]);const a=c=>{const m=new URLSearchParams(d);c?m.set("q",c):m.delete("q"),n(m)},u=()=>{t(""),a(""),o.current?.focus()};return e.jsxs("div",{className:"mb-6",children:[e.jsx("h3",{className:"mb-3 text-lg font-semibold",children:"Search Cache Entries"}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx("input",{ref:o,type:"text",placeholder:"Search by key or cache name...",value:i,onChange:c=>{t(c.target.value),a(c.target.value)},className:"border-border bg-background text-foreground focus:ring-ring flex-1 rounded-md border px-3 py-2 focus:ring-2 focus:outline-none"}),i?e.jsx(R,{onClick:u,title:"Clear search",children:e.jsx(x,{name:"Close",className:"h-4 w-4"})}):null]})]})}function J({workshopId:s,cacheName:d,filename:n,currentValue:i,entryKey:t}){const o=k(),[a,u]=p.useState(JSON.stringify(i,null,2)),[c,m]=p.useState(!1),j=()=>{o.submit({intent:"update-entry",workshopId:s,cacheName:d,filename:n,newValue:a},{method:"POST"}),m(!1)},l=h=>{u(h),m(h!==JSON.stringify(i,null,2))},r=()=>{u(JSON.stringify(i,null,2)),m(!1)};return e.jsxs("details",{className:"mt-2",children:[e.jsx("summary",{className:"text-muted-foreground hover:text-foreground cursor-pointer text-sm",children:"Edit entry details"}),e.jsxs("div",{className:"border-border bg-muted mt-2 space-y-3 rounded border p-3",children:[e.jsxs("div",{children:[e.jsx("label",{className:"mb-1 block text-sm font-medium",children:"Key:"}),e.jsx("code",{className:"bg-background rounded border px-2 py-1 text-sm",children:t})]}),e.jsxs("div",{children:[e.jsx("label",{className:"mb-1 block text-sm font-medium",children:"Value:"}),e.jsx("textarea",{value:a,onChange:h=>l(h.target.value),className:"resize-vertical border-border bg-background text-foreground focus:ring-ring h-32 w-full rounded border p-2 font-mono text-sm focus:ring-2 focus:outline-none",placeholder:"Enter JSON value..."})]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(E,{varient:"primary",onClick:j,disabled:!c||o.state!=="idle",children:o.state!=="idle"?"Saving...":"Save"}),e.jsx(E,{varient:"mono",onClick:r,disabled:!c,children:"Reset"})]})]})]})}function K({skippedFiles:s,workshopId:d,cacheName:n}){const i=k();return s.length===0?null:e.jsxs("div",{className:"border-warning bg-warning mt-4 rounded border p-3",children:[e.jsxs("div",{className:"mb-2 flex items-center gap-2",children:[e.jsx(x,{name:"TriangleAlert",className:"text-warning-foreground h-4 w-4"}),e.jsxs("h5",{className:"text-warning-foreground font-medium",children:["Skipped Files (",s.length,")"]})]}),e.jsx("p",{className:"text-warning-foreground/80 mb-3 text-sm",children:"These cache files were skipped because they exceed the 3MB size limit:"}),e.jsx("div",{className:"space-y-2",children:s.map(t=>e.jsxs("div",{className:"border-warning/20 bg-warning/5 flex items-center justify-between rounded border p-2",children:[e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("div",{className:"text-warning-foreground truncate font-mono text-sm font-medium",children:t.filename}),e.jsxs("div",{className:"text-warning-foreground/70 text-xs",children:[t.error," • Size:"," ",e.jsx("span",{title:`${t.size} bytes`,children:N(t.size)})]})]}),e.jsx("div",{className:"ml-2 flex shrink-0",children:e.jsx(v,{onConfirm:()=>{i.submit({intent:"delete-entry",workshopId:d,cacheName:n,filename:t.filename},{method:"POST"})},title:"Delete large cache file",className:"text-destructive-foreground hover:bg-destructive/20 hover:text-destructive-foreground",children:e.jsx(x,{name:"Remove",className:"h-4 w-4"})})})]},t.filename))})]})}const ne=O(function({loaderData:d}){const n=k(),i=(l,r,h)=>{n.submit({intent:"delete-entry",workshopId:l,cacheName:r,filename:h},{method:"POST"})},t=(l,r)=>{n.submit({intent:"delete-cache",workshopId:l,cacheName:r},{method:"POST"})},o=l=>{n.submit({intent:"delete-workshop-cache",workshopId:l},{method:"POST"})},{currentWorkshopId:a,filteredCaches:u,filterQuery:c,selectedWorkshops:m,availableWorkshops:j}=d;return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"mb-2 text-2xl font-bold",children:"Cache Management"}),e.jsxs("p",{className:"text-muted-foreground",children:["Current Workshop:"," ",e.jsx("span",{className:"text-foreground font-semibold",children:a})]})]}),e.jsx(W,{selectedWorkshops:m,availableWorkshops:j,currentWorkshopId:a}),e.jsx(H,{filterQuery:c}),n.data?.status==="success"?e.jsx("div",{className:"border-border bg-success text-success-foreground rounded border p-4",children:n.data.message}):null,n.data?.status==="error"?e.jsx("div",{className:"border-border bg-destructive text-destructive-foreground rounded border p-4",children:n.data.error}):null,u.length===0?e.jsx("div",{className:"text-muted-foreground py-8 text-center",children:"No caches found matching your criteria."}):null,e.jsx("div",{className:"space-y-6",children:u.map(l=>e.jsxs("details",{open:l.workshopId===a,children:[e.jsx("summary",{className:"border-border bg-card hover:bg-accent cursor-pointer rounded-lg border p-4",children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("h3",{className:"text-card-foreground flex items-center gap-2 text-lg font-semibold",children:[e.jsx(x,{name:"Files",className:"h-5 w-5"}),l.workshopId==="global"?"Global Caches":l.workshopId,l.workshopId===a?e.jsx("span",{className:"bg-primary text-primary-foreground rounded px-2 py-1 text-xs",children:"Current"}):null]}),e.jsx(v,{onConfirm:()=>o(l.workshopId),title:"Delete all workshop caches",children:e.jsx(x,{name:"Remove",className:"h-4 w-4"})})]})}),e.jsx("div",{className:"mt-4 space-y-4 pl-4",children:l.caches.map(r=>{const h=r.entries.reduce((f,g)=>f+(g.size||0),0),b=(r.skippedFiles||[]).reduce((f,g)=>f+g.size,0),w=h+b;return e.jsxs("details",{className:"bg-muted rounded-md",children:[e.jsx("summary",{className:"hover:bg-accent cursor-pointer p-3",children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("h4",{className:"text-muted-foreground flex items-center gap-2 font-medium",children:[e.jsx(x,{name:"Files",className:"h-4 w-4"}),r.name,e.jsxs("span",{className:"text-sm",children:["(",r.entries.length," entr",r.entries.length===1?"y":"ies",")"]}),w>0?e.jsxs("span",{className:"text-muted-foreground text-sm",children:["•"," ",e.jsx("span",{title:`${w} bytes`,children:N(w)})," ","total",b>0?e.jsxs("span",{className:"text-warning",children:[" ","(",e.jsx("span",{title:`${b} bytes`,children:N(b)})," ","skipped)"]}):null]}):null]}),e.jsx(v,{onConfirm:()=>t(l.workshopId,r.name),title:"Delete cache",children:e.jsx(x,{name:"Remove",className:"h-4 w-4"})})]})}),e.jsxs("div",{className:"p-3 pt-0",children:[r.entries.length===0?e.jsx("p",{className:"text-muted-foreground text-sm",children:"No entries match your search."}):null,r.skippedFiles&&r.skippedFiles.length>0?e.jsx(K,{skippedFiles:r.skippedFiles,workshopId:l.workshopId,cacheName:r.name}):null,e.jsx("div",{className:"space-y-2",children:r.entries.map(({key:f,entry:g,filename:y,size:S,filepath:C})=>e.jsxs("div",{className:"border-border bg-background rounded border p-3",children:[e.jsxs("div",{className:"flex items-start justify-between",children:[e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsxs("div",{className:"mb-1 flex items-center gap-2",children:[e.jsx("div",{className:"truncate font-mono text-sm font-medium",title:f,children:f}),S?e.jsx("span",{className:"bg-muted text-muted-foreground inline-flex items-center rounded px-1.5 py-0.5 text-xs whitespace-nowrap",title:`${S} bytes`,children:N(S)}):null]}),e.jsx(U,{metadata:g.metadata})]}),e.jsxs("div",{className:"ml-4 flex shrink-0 gap-1",children:[e.jsx("a",{href:D("/admin/cache/*",{"*":`${l.workshopId}/${r.name}/${y}`}),target:"_blank",rel:"noopener noreferrer",className:"border-border bg-background text-foreground hover:bg-muted focus:ring-ring inline-flex h-8 w-8 items-center justify-center rounded border focus:ring-2 focus:outline-none",title:"View JSON",children:e.jsx(x,{name:"ExternalLink",className:"h-4 w-4"})}),C?e.jsx(V,{file:C,className:$,children:e.jsx(x,{name:"Files",className:"h-4 w-4",title:"Open in editor"})}):null,e.jsx(v,{onConfirm:()=>i(l.workshopId,r.name,y),title:"Delete entry",children:e.jsx(x,{name:"Remove",className:"h-4 w-4"})})]})]}),e.jsx(J,{workshopId:l.workshopId,cacheName:r.name,filename:y,currentValue:g.value,entryKey:f})]},f))})]})]},r.name)})})]},l.workshopId))})]})});function U({metadata:s}){const d=z(),[,n]=p.useState(Date.now()),i=Y(s);B(()=>{n(Date.now())},1e3);const t=d(s.createdTime),o=i?L(i):{text:"Never",isExpired:!1,isExpiringSoon:!1};return e.jsxs("div",{className:"text-muted-foreground flex flex-col gap-1 text-xs",children:[e.jsxs("div",{children:["Created: ",t.format("MMM D, YYYY HH:mm:ss")," ",e.jsx(I,{children:()=>`(${t.fromNow()})`})]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-3",children:[s.ttl!==void 0&&s.ttl!==null?e.jsxs("span",{children:["TTL:"," ",s.ttl===1/0?"Forever":e.jsx("span",{title:`${s.ttl}ms`,children:T(s.ttl)})]}):null,s.swr!==void 0?e.jsxs("span",{children:["SWR:"," ",e.jsx("span",{title:`${s.swr}ms`,children:T(s.swr)})]}):null,e.jsx("div",{className:`inline-flex w-auto rounded-full px-2 py-[2px] font-medium ${o.isExpired?"bg-destructive text-destructive-foreground":o.isExpiringSoon?"bg-warning text-warning-foreground":"text-foreground"}`,children:i?e.jsxs(e.Fragment,{children:["Expires: ",d(i).format("MMM D, YYYY HH:mm:ss")," (",e.jsx("span",{className:"tabular-nums",children:e.jsx(I,{children:()=>o.text})}),")"]}):"Expires: Never"})]})]})}function v({onConfirm:s,children:d,className:n,...i}){const t=M();return e.jsx(R,{...t.getButtonProps({onClick:t.doubleCheck?s:void 0,...i}),className:F(t.doubleCheck?"bg-destructive text-destructive-foreground":null,n),children:t.doubleCheck?"✓":d})}export{ne as default};
2
+ //# sourceMappingURL=cache-CAr50MIB.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cache-MJu_dqFS.js","sources":["../../../app/routes/admin+/cache.tsx"],"sourcesContent":["import {\n\tdeleteCacheEntry,\n\tdeleteWorkshopCache,\n\tgetAllWorkshopCaches,\n\tgetGlobalCaches,\n\tglobalCacheDirectoryExists,\n\tupdateCacheEntry,\n} from '@epic-web/workshop-utils/cache.server'\nimport { getEnv } from '@epic-web/workshop-utils/env.server'\nimport { getErrorMessage } from '@epic-web/workshop-utils/utils'\nimport { useEffect, useRef, useState } from 'react'\nimport { href, useFetcher, useSearchParams } from 'react-router'\nimport { ClientOnly } from 'remix-utils/client-only'\nimport { z } from 'zod'\nimport {\n\tButton,\n\tIconButton,\n\ticonButtonClassName,\n} from '#app/components/button.tsx'\nimport { Icon } from '#app/components/icons.tsx'\nimport { LaunchEditor } from '#app/routes/launch-editor.tsx'\nimport {\n\tcalculateExpirationTime,\n\tcn,\n\tensureUndeployed,\n\tformatDuration,\n\tformatFileSize,\n\tformatTimeRemaining,\n\tuseDayjs,\n\tuseDoubleCheck,\n\tuseInterval,\n} from '#app/utils/misc.tsx'\nimport { type Route } from './+types/cache.ts'\n\nexport async function loader({ request }: Route.LoaderArgs) {\n\tensureUndeployed()\n\tconst currentWorkshopId = getEnv().EPICSHOP_WORKSHOP_INSTANCE_ID\n\tconst allWorkshopCaches = await getAllWorkshopCaches()\n\tconst globalCaches = await getGlobalCaches()\n\tconst allCaches = [...allWorkshopCaches, ...globalCaches]\n\n\tconst url = new URL(request.url)\n\tconst filterQuery = url.searchParams.get('q') || ''\n\n\t// Ensure 'global' is always in available workshops if global cache directory exists\n\tconst availableWorkshopIds = new Set(allCaches.map((w) => w.workshopId))\n\tconst globalDirExists = await globalCacheDirectoryExists()\n\tif (globalDirExists) {\n\t\tavailableWorkshopIds.add('global')\n\t}\n\n\tconst selectedWorkshops = url.searchParams\n\t\t.get('workshops')\n\t\t?.split(',')\n\t\t.filter(Boolean) || [\n\t\tcurrentWorkshopId,\n\t\t...(globalDirExists ? ['global'] : []),\n\t]\n\n\t// Filter caches based on search query and selected workshops\n\tconst filteredCaches = allCaches\n\t\t.filter(\n\t\t\t(workshopCache) =>\n\t\t\t\tselectedWorkshops.includes(workshopCache.workshopId) ||\n\t\t\t\tselectedWorkshops.length === 0,\n\t\t)\n\t\t.map((workshopCache) => ({\n\t\t\t...workshopCache,\n\t\t\tcaches: workshopCache.caches\n\t\t\t\t.map((cache) => ({\n\t\t\t\t\t...cache,\n\t\t\t\t\tentries: cache.entries.filter(\n\t\t\t\t\t\t(entry) =>\n\t\t\t\t\t\t\tfilterQuery === '' ||\n\t\t\t\t\t\t\tentry.key.toLowerCase().includes(filterQuery.toLowerCase()) ||\n\t\t\t\t\t\t\tcache.name.toLowerCase().includes(filterQuery.toLowerCase()),\n\t\t\t\t\t),\n\t\t\t\t}))\n\t\t\t\t.filter((cache) => cache.entries.length > 0 || filterQuery === ''),\n\t\t}))\n\t\t.filter(\n\t\t\t(workshopCache) => workshopCache.caches.length > 0 || filterQuery === '',\n\t\t)\n\n\treturn {\n\t\tcurrentWorkshopId,\n\t\tallWorkshopCaches: allCaches,\n\t\tfilteredCaches,\n\t\tfilterQuery,\n\t\tselectedWorkshops,\n\t\tavailableWorkshops: Array.from(availableWorkshopIds),\n\t}\n}\n\nconst ActionSchema = z.discriminatedUnion('intent', [\n\tz.object({\n\t\tintent: z.literal('delete-entry'),\n\t\tworkshopId: z.string(),\n\t\tcacheName: z.string(),\n\t\tfilename: z.string(),\n\t}),\n\tz.object({\n\t\tintent: z.literal('delete-cache'),\n\t\tworkshopId: z.string(),\n\t\tcacheName: z.string(),\n\t}),\n\tz.object({\n\t\tintent: z.literal('delete-workshop-cache'),\n\t\tworkshopId: z.string(),\n\t}),\n\tz.object({\n\t\tintent: z.literal('update-entry'),\n\t\tworkshopId: z.string(),\n\t\tcacheName: z.string(),\n\t\tfilename: z.string(),\n\t\tnewValue: z.string(),\n\t}),\n])\n\nexport async function action({ request }: Route.ActionArgs) {\n\tensureUndeployed()\n\n\tconst formData = await request.formData()\n\tconst rawData = Object.fromEntries(formData.entries())\n\tconst result = ActionSchema.safeParse(rawData)\n\n\tif (!result.success) {\n\t\treturn { status: 'error', error: 'Invalid request' } as const\n\t}\n\n\tconst data = result.data\n\n\ttry {\n\t\tswitch (data.intent) {\n\t\t\tcase 'delete-entry': {\n\t\t\t\tconst path = `${data.workshopId}/${data.cacheName}/${data.filename}`\n\t\t\t\tawait deleteCacheEntry(path)\n\t\t\t\treturn { status: 'success', message: 'Cache entry deleted' } as const\n\t\t\t}\n\t\t\tcase 'delete-cache': {\n\t\t\t\tawait deleteWorkshopCache(data.workshopId, data.cacheName)\n\t\t\t\treturn { status: 'success', message: 'Cache deleted' } as const\n\t\t\t}\n\t\t\tcase 'delete-workshop-cache': {\n\t\t\t\tawait deleteWorkshopCache(data.workshopId)\n\t\t\t\treturn { status: 'success', message: 'Workshop cache deleted' } as const\n\t\t\t}\n\t\t\tcase 'update-entry': {\n\t\t\t\tconst path = `${data.workshopId}/${data.cacheName}/${data.filename}`\n\t\t\t\ttry {\n\t\t\t\t\tconst parsedValue = JSON.parse(data.newValue)\n\t\t\t\t\tawait updateCacheEntry(path, parsedValue)\n\t\t\t\t\treturn { status: 'success', message: 'Cache entry updated' } as const\n\t\t\t\t} catch (error) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tstatus: 'error',\n\t\t\t\t\t\terror: getErrorMessage(error, 'Invalid JSON value'),\n\t\t\t\t\t} as const\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} catch (error) {\n\t\tconsole.error('Cache action error:', error)\n\t\treturn { status: 'error', error: 'Operation failed' } as const\n\t}\n}\n\nfunction WorkshopChooser({\n\tselectedWorkshops,\n\tavailableWorkshops,\n\tcurrentWorkshopId,\n}: {\n\tselectedWorkshops: string[]\n\tavailableWorkshops: string[]\n\tcurrentWorkshopId: string\n}) {\n\tconst [searchParams, setSearchParams] = useSearchParams()\n\n\tconst handleWorkshopChange = (workshop: string, checked: boolean) => {\n\t\tconst newSelected = checked\n\t\t\t? [...selectedWorkshops, workshop]\n\t\t\t: selectedWorkshops.filter((w) => w !== workshop)\n\n\t\tconst params = new URLSearchParams(searchParams)\n\t\tif (newSelected.length > 0) {\n\t\t\tparams.set('workshops', newSelected.join(','))\n\t\t} else {\n\t\t\tparams.delete('workshops')\n\t\t}\n\t\tsetSearchParams(params)\n\t}\n\n\treturn (\n\t\t<div className=\"mb-6\">\n\t\t\t<h3 className=\"mb-3 text-lg font-semibold\">Workshop Filter</h3>\n\t\t\t<div className=\"flex flex-wrap gap-3\">\n\t\t\t\t{availableWorkshops.map((workshop) => (\n\t\t\t\t\t<label key={workshop} className=\"flex items-center gap-2\">\n\t\t\t\t\t\t<input\n\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\tchecked={selectedWorkshops.includes(workshop)}\n\t\t\t\t\t\t\tonChange={(e) => handleWorkshopChange(workshop, e.target.checked)}\n\t\t\t\t\t\t\tclassName=\"rounded\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\tclassName={`text-sm ${workshop === currentWorkshopId ? 'text-primary font-bold' : ''}`}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{workshop} {workshop === currentWorkshopId ? '(current)' : null}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</label>\n\t\t\t\t))}\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n\nfunction SearchFilter({ filterQuery }: { filterQuery: string }) {\n\tconst [searchParams, setSearchParams] = useSearchParams()\n\tconst [inputValue, setInputValue] = useState(filterQuery)\n\tconst inputRef = useRef<HTMLInputElement>(null)\n\n\t// Update input value when filterQuery changes (e.g., from URL)\n\tuseEffect(() => {\n\t\tsetInputValue(filterQuery)\n\t}, [filterQuery])\n\n\tconst handleSearch = (query: string) => {\n\t\tconst params = new URLSearchParams(searchParams)\n\t\tif (query) {\n\t\t\tparams.set('q', query)\n\t\t} else {\n\t\t\tparams.delete('q')\n\t\t}\n\t\tsetSearchParams(params)\n\t}\n\n\tconst handleClear = () => {\n\t\tsetInputValue('')\n\t\thandleSearch('')\n\t\tinputRef.current?.focus()\n\t}\n\n\treturn (\n\t\t<div className=\"mb-6\">\n\t\t\t<h3 className=\"mb-3 text-lg font-semibold\">Search Cache Entries</h3>\n\t\t\t<div className=\"flex gap-2\">\n\t\t\t\t<input\n\t\t\t\t\tref={inputRef}\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tplaceholder=\"Search by key or cache name...\"\n\t\t\t\t\tvalue={inputValue}\n\t\t\t\t\tonChange={(e) => {\n\t\t\t\t\t\tsetInputValue(e.target.value)\n\t\t\t\t\t\thandleSearch(e.target.value)\n\t\t\t\t\t}}\n\t\t\t\t\tclassName=\"border-border bg-background text-foreground focus:ring-ring flex-1 rounded-md border px-3 py-2 focus:ring-2 focus:outline-none\"\n\t\t\t\t/>\n\t\t\t\t{inputValue ? (\n\t\t\t\t\t<IconButton onClick={handleClear} title=\"Clear search\">\n\t\t\t\t\t\t<Icon name=\"Close\" className=\"h-4 w-4\" />\n\t\t\t\t\t</IconButton>\n\t\t\t\t) : null}\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n\n// Inline entry editor component\nfunction InlineEntryEditor({\n\tworkshopId,\n\tcacheName,\n\tfilename,\n\tcurrentValue,\n\tentryKey,\n}: {\n\tworkshopId: string\n\tcacheName: string\n\tfilename: string\n\tcurrentValue: any\n\tentryKey: string\n}) {\n\tconst fetcher = useFetcher<typeof action>()\n\tconst [editValue, setEditValue] = useState(\n\t\tJSON.stringify(currentValue, null, 2),\n\t)\n\tconst [hasChanges, setHasChanges] = useState(false)\n\n\tconst handleSave = () => {\n\t\tvoid fetcher.submit(\n\t\t\t{\n\t\t\t\tintent: 'update-entry',\n\t\t\t\tworkshopId,\n\t\t\t\tcacheName,\n\t\t\t\tfilename,\n\t\t\t\tnewValue: editValue,\n\t\t\t},\n\t\t\t{ method: 'POST' },\n\t\t)\n\t\tsetHasChanges(false)\n\t}\n\n\tconst handleChange = (value: string) => {\n\t\tsetEditValue(value)\n\t\tsetHasChanges(value !== JSON.stringify(currentValue, null, 2))\n\t}\n\n\tconst handleReset = () => {\n\t\tsetEditValue(JSON.stringify(currentValue, null, 2))\n\t\tsetHasChanges(false)\n\t}\n\n\treturn (\n\t\t<details className=\"mt-2\">\n\t\t\t<summary className=\"text-muted-foreground hover:text-foreground cursor-pointer text-sm\">\n\t\t\t\tEdit entry details\n\t\t\t</summary>\n\t\t\t<div className=\"border-border bg-muted mt-2 space-y-3 rounded border p-3\">\n\t\t\t\t<div>\n\t\t\t\t\t<label className=\"mb-1 block text-sm font-medium\">Key:</label>\n\t\t\t\t\t<code className=\"bg-background rounded border px-2 py-1 text-sm\">\n\t\t\t\t\t\t{entryKey}\n\t\t\t\t\t</code>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<label className=\"mb-1 block text-sm font-medium\">Value:</label>\n\t\t\t\t\t<textarea\n\t\t\t\t\t\tvalue={editValue}\n\t\t\t\t\t\tonChange={(e) => handleChange(e.target.value)}\n\t\t\t\t\t\tclassName=\"resize-vertical border-border bg-background text-foreground focus:ring-ring h-32 w-full rounded border p-2 font-mono text-sm focus:ring-2 focus:outline-none\"\n\t\t\t\t\t\tplaceholder=\"Enter JSON value...\"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t\t<div className=\"flex gap-2\">\n\t\t\t\t\t<Button\n\t\t\t\t\t\tvarient=\"primary\"\n\t\t\t\t\t\tonClick={handleSave}\n\t\t\t\t\t\tdisabled={!hasChanges || fetcher.state !== 'idle'}\n\t\t\t\t\t>\n\t\t\t\t\t\t{fetcher.state !== 'idle' ? 'Saving...' : 'Save'}\n\t\t\t\t\t</Button>\n\t\t\t\t\t<Button varient=\"mono\" onClick={handleReset} disabled={!hasChanges}>\n\t\t\t\t\t\tReset\n\t\t\t\t\t</Button>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</details>\n\t)\n}\n\nfunction SkippedFilesSection({\n\tskippedFiles,\n\tworkshopId,\n\tcacheName,\n}: {\n\tskippedFiles: Array<{\n\t\tfilename: string\n\t\terror: string\n\t\tsize: number\n\t\tskipped: true\n\t}>\n\tworkshopId: string\n\tcacheName: string\n}) {\n\tconst fetcher = useFetcher<typeof action>()\n\n\tif (skippedFiles.length === 0) return null\n\n\treturn (\n\t\t<div className=\"border-warning bg-warning mt-4 rounded border p-3\">\n\t\t\t<div className=\"mb-2 flex items-center gap-2\">\n\t\t\t\t<Icon\n\t\t\t\t\tname=\"TriangleAlert\"\n\t\t\t\t\tclassName=\"text-warning-foreground h-4 w-4\"\n\t\t\t\t/>\n\t\t\t\t<h5 className=\"text-warning-foreground font-medium\">\n\t\t\t\t\tSkipped Files ({skippedFiles.length})\n\t\t\t\t</h5>\n\t\t\t</div>\n\t\t\t<p className=\"text-warning-foreground/80 mb-3 text-sm\">\n\t\t\t\tThese cache files were skipped because they exceed the 3MB size limit:\n\t\t\t</p>\n\t\t\t<div className=\"space-y-2\">\n\t\t\t\t{skippedFiles.map((skippedFile) => (\n\t\t\t\t\t<div\n\t\t\t\t\t\tkey={skippedFile.filename}\n\t\t\t\t\t\tclassName=\"border-warning/20 bg-warning/5 flex items-center justify-between rounded border p-2\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<div className=\"min-w-0 flex-1\">\n\t\t\t\t\t\t\t<div className=\"text-warning-foreground truncate font-mono text-sm font-medium\">\n\t\t\t\t\t\t\t\t{skippedFile.filename}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div className=\"text-warning-foreground/70 text-xs\">\n\t\t\t\t\t\t\t\t{skippedFile.error} • Size:{' '}\n\t\t\t\t\t\t\t\t<span title={`${skippedFile.size} bytes`}>\n\t\t\t\t\t\t\t\t\t{formatFileSize(skippedFile.size)}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div className=\"ml-2 flex shrink-0\">\n\t\t\t\t\t\t\t<DoubleCheckButton\n\t\t\t\t\t\t\t\tonConfirm={() => {\n\t\t\t\t\t\t\t\t\tvoid fetcher.submit(\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tintent: 'delete-entry',\n\t\t\t\t\t\t\t\t\t\t\tworkshopId,\n\t\t\t\t\t\t\t\t\t\t\tcacheName,\n\t\t\t\t\t\t\t\t\t\t\tfilename: skippedFile.filename,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{ method: 'POST' },\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\ttitle=\"Delete large cache file\"\n\t\t\t\t\t\t\t\tclassName=\"text-destructive-foreground hover:bg-destructive/20 hover:text-destructive-foreground\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Icon name=\"Remove\" className=\"h-4 w-4\" />\n\t\t\t\t\t\t\t</DoubleCheckButton>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t))}\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n\nexport default function CacheManagement({ loaderData }: Route.ComponentProps) {\n\tconst fetcher = useFetcher<typeof action>()\n\n\tconst deleteEntry = (\n\t\tworkshopId: string,\n\t\tcacheName: string,\n\t\tfilename: string,\n\t) => {\n\t\tvoid fetcher.submit(\n\t\t\t{\n\t\t\t\tintent: 'delete-entry',\n\t\t\t\tworkshopId,\n\t\t\t\tcacheName,\n\t\t\t\tfilename,\n\t\t\t},\n\t\t\t{ method: 'POST' },\n\t\t)\n\t}\n\n\tconst deleteCache = (workshopId: string, cacheName: string) => {\n\t\tvoid fetcher.submit(\n\t\t\t{\n\t\t\t\tintent: 'delete-cache',\n\t\t\t\tworkshopId,\n\t\t\t\tcacheName,\n\t\t\t},\n\t\t\t{ method: 'POST' },\n\t\t)\n\t}\n\n\tconst deleteWorkshopCache = (workshopId: string) => {\n\t\tvoid fetcher.submit(\n\t\t\t{\n\t\t\t\tintent: 'delete-workshop-cache',\n\t\t\t\tworkshopId,\n\t\t\t},\n\t\t\t{ method: 'POST' },\n\t\t)\n\t}\n\n\tconst {\n\t\tcurrentWorkshopId,\n\t\tfilteredCaches,\n\t\tfilterQuery,\n\t\tselectedWorkshops,\n\t\tavailableWorkshops,\n\t} = loaderData\n\n\treturn (\n\t\t<div className=\"space-y-6\">\n\t\t\t<div>\n\t\t\t\t<h2 className=\"mb-2 text-2xl font-bold\">Cache Management</h2>\n\t\t\t\t<p className=\"text-muted-foreground\">\n\t\t\t\t\tCurrent Workshop:{' '}\n\t\t\t\t\t<span className=\"text-foreground font-semibold\">\n\t\t\t\t\t\t{currentWorkshopId}\n\t\t\t\t\t</span>\n\t\t\t\t</p>\n\t\t\t</div>\n\n\t\t\t<WorkshopChooser\n\t\t\t\tselectedWorkshops={selectedWorkshops}\n\t\t\t\tavailableWorkshops={availableWorkshops}\n\t\t\t\tcurrentWorkshopId={currentWorkshopId}\n\t\t\t/>\n\n\t\t\t<SearchFilter filterQuery={filterQuery} />\n\n\t\t\t{fetcher.data?.status === 'success' ? (\n\t\t\t\t<div className=\"border-border bg-success text-success-foreground rounded border p-4\">\n\t\t\t\t\t{fetcher.data.message}\n\t\t\t\t</div>\n\t\t\t) : null}\n\n\t\t\t{fetcher.data?.status === 'error' ? (\n\t\t\t\t<div className=\"border-border bg-destructive text-destructive-foreground rounded border p-4\">\n\t\t\t\t\t{fetcher.data.error}\n\t\t\t\t</div>\n\t\t\t) : null}\n\n\t\t\t{filteredCaches.length === 0 ? (\n\t\t\t\t<div className=\"text-muted-foreground py-8 text-center\">\n\t\t\t\t\tNo caches found matching your criteria.\n\t\t\t\t</div>\n\t\t\t) : null}\n\n\t\t\t<div className=\"space-y-6\">\n\t\t\t\t{filteredCaches.map((workshopCache) => (\n\t\t\t\t\t<details\n\t\t\t\t\t\tkey={workshopCache.workshopId}\n\t\t\t\t\t\topen={workshopCache.workshopId === currentWorkshopId}\n\t\t\t\t\t>\n\t\t\t\t\t\t<summary className=\"border-border bg-card hover:bg-accent cursor-pointer rounded-lg border p-4\">\n\t\t\t\t\t\t\t<div className=\"flex items-center justify-between\">\n\t\t\t\t\t\t\t\t<h3 className=\"text-card-foreground flex items-center gap-2 text-lg font-semibold\">\n\t\t\t\t\t\t\t\t\t<Icon name=\"Files\" className=\"h-5 w-5\" />\n\t\t\t\t\t\t\t\t\t{workshopCache.workshopId === 'global'\n\t\t\t\t\t\t\t\t\t\t? 'Global Caches'\n\t\t\t\t\t\t\t\t\t\t: workshopCache.workshopId}\n\t\t\t\t\t\t\t\t\t{workshopCache.workshopId === currentWorkshopId ? (\n\t\t\t\t\t\t\t\t\t\t<span className=\"bg-primary text-primary-foreground rounded px-2 py-1 text-xs\">\n\t\t\t\t\t\t\t\t\t\t\tCurrent\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t</h3>\n\t\t\t\t\t\t\t\t<DoubleCheckButton\n\t\t\t\t\t\t\t\t\tonConfirm={() =>\n\t\t\t\t\t\t\t\t\t\tdeleteWorkshopCache(workshopCache.workshopId)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\ttitle=\"Delete all workshop caches\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<Icon name=\"Remove\" className=\"h-4 w-4\" />\n\t\t\t\t\t\t\t\t</DoubleCheckButton>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</summary>\n\n\t\t\t\t\t\t<div className=\"mt-4 space-y-4 pl-4\">\n\t\t\t\t\t\t\t{workshopCache.caches.map((cache) => {\n\t\t\t\t\t\t\t\tconst totalSize = cache.entries.reduce(\n\t\t\t\t\t\t\t\t\t(sum, entry) => sum + (entry.size || 0),\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\tconst skippedSize = (cache.skippedFiles || []).reduce(\n\t\t\t\t\t\t\t\t\t(sum, file) => sum + file.size,\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\tconst grandTotal = totalSize + skippedSize\n\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<details key={cache.name} className=\"bg-muted rounded-md\">\n\t\t\t\t\t\t\t\t\t\t<summary className=\"hover:bg-accent cursor-pointer p-3\">\n\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex items-center justify-between\">\n\t\t\t\t\t\t\t\t\t\t\t\t<h4 className=\"text-muted-foreground flex items-center gap-2 font-medium\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Icon name=\"Files\" className=\"h-4 w-4\" />\n\t\t\t\t\t\t\t\t\t\t\t\t\t{cache.name}\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-sm\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t({cache.entries.length} entr\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{cache.entries.length === 1 ? 'y' : 'ies'})\n\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{grandTotal > 0 ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-muted-foreground text-sm\">\n\t\t\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\t\t\t<span title={`${grandTotal} bytes`}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{formatFileSize(grandTotal)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>{' '}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttotal\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{skippedSize > 0 ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-warning\">\n\t\t\t\t\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\t\t\t\t\t(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span title={`${skippedSize} bytes`}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{formatFileSize(skippedSize)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>{' '}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tskipped)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t\t\t\t\t</h4>\n\t\t\t\t\t\t\t\t\t\t\t\t<DoubleCheckButton\n\t\t\t\t\t\t\t\t\t\t\t\t\tonConfirm={() =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdeleteCache(workshopCache.workshopId, cache.name)\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\ttitle=\"Delete cache\"\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<Icon name=\"Remove\" className=\"h-4 w-4\" />\n\t\t\t\t\t\t\t\t\t\t\t\t</DoubleCheckButton>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t</summary>\n\n\t\t\t\t\t\t\t\t\t\t<div className=\"p-3 pt-0\">\n\t\t\t\t\t\t\t\t\t\t\t{cache.entries.length === 0 ? (\n\t\t\t\t\t\t\t\t\t\t\t\t<p className=\"text-muted-foreground text-sm\">\n\t\t\t\t\t\t\t\t\t\t\t\t\tNo entries match your search.\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) : null}\n\n\t\t\t\t\t\t\t\t\t\t\t{cache.skippedFiles && cache.skippedFiles.length > 0 ? (\n\t\t\t\t\t\t\t\t\t\t\t\t<SkippedFilesSection\n\t\t\t\t\t\t\t\t\t\t\t\t\tskippedFiles={cache.skippedFiles}\n\t\t\t\t\t\t\t\t\t\t\t\t\tworkshopId={workshopCache.workshopId}\n\t\t\t\t\t\t\t\t\t\t\t\t\tcacheName={cache.name}\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) : null}\n\n\t\t\t\t\t\t\t\t\t\t\t<div className=\"space-y-2\">\n\t\t\t\t\t\t\t\t\t\t\t\t{cache.entries.map(\n\t\t\t\t\t\t\t\t\t\t\t\t\t({ key, entry, filename, size, filepath }) => (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tkey={key}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"border-border bg-background rounded border p-3\"\n\t\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\t\t\t<div className=\"flex items-start justify-between\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"min-w-0 flex-1\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"mb-1 flex items-center gap-2\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"truncate font-mono text-sm font-medium\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttitle={key}\n\t\t\t\t\t\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\t\t\t\t\t\t\t{key}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{size ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"bg-muted text-muted-foreground inline-flex items-center rounded px-1.5 py-0.5 text-xs whitespace-nowrap\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttitle={`${size} bytes`}\n\t\t\t\t\t\t\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\t\t\t\t\t\t\t\t{formatFileSize(size)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<CacheMetadata metadata={entry.metadata} />\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"ml-4 flex shrink-0 gap-1\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\thref={href('/admin/cache/*', {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'*': `${workshopCache.workshopId}/${cache.name}/${filename}`,\n\t\t\t\t\t\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\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"border-border bg-background text-foreground hover:bg-muted focus:ring-ring inline-flex h-8 w-8 items-center justify-center rounded border focus:ring-2 focus:outline-none\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttitle=\"View JSON\"\n\t\t\t\t\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\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tname=\"ExternalLink\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"h-4 w-4\"\n\t\t\t\t\t\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\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{filepath ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<LaunchEditor\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfile={filepath}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName={iconButtonClassName}\n\t\t\t\t\t\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\t\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tname=\"Files\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"h-4 w-4\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttitle=\"Open in editor\"\n\t\t\t\t\t\t\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\t\t\t\t\t\t</LaunchEditor>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<DoubleCheckButton\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonConfirm={() =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdeleteEntry(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tworkshopCache.workshopId,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcache.name,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfilename,\n\t\t\t\t\t\t\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\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttitle=\"Delete entry\"\n\t\t\t\t\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\t\t\t\t\t\t<Icon name=\"Remove\" className=\"h-4 w-4\" />\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</DoubleCheckButton>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<InlineEntryEditor\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tworkshopId={workshopCache.workshopId}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcacheName={cache.name}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfilename={filename}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcurrentValue={entry.value}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tentryKey={key}\n\t\t\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\t\t</div>\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</div>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</details>\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</details>\n\t\t\t\t))}\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n\n// Component for displaying cache metadata with live countdown\nfunction CacheMetadata({\n\tmetadata,\n}: {\n\tmetadata: {\n\t\tcreatedTime: number\n\t\tttl?: number | null\n\t\tswr?: number\n\t}\n}) {\n\tconst dayjs = useDayjs()\n\tconst [, setCurrentTime] = useState(Date.now())\n\tconst expirationTime = calculateExpirationTime(metadata)\n\n\t// Update time every second for live countdown\n\tuseInterval(() => {\n\t\tsetCurrentTime(Date.now())\n\t}, 1000)\n\n\tconst createdDate = dayjs(metadata.createdTime)\n\tconst timeRemaining = expirationTime\n\t\t? formatTimeRemaining(expirationTime)\n\t\t: { text: 'Never', isExpired: false, isExpiringSoon: false }\n\n\treturn (\n\t\t<div className=\"text-muted-foreground flex flex-col gap-1 text-xs\">\n\t\t\t<div>\n\t\t\t\tCreated: {createdDate.format('MMM D, YYYY HH:mm:ss')}{' '}\n\t\t\t\t<ClientOnly>{() => `(${createdDate.fromNow()})`}</ClientOnly>\n\t\t\t</div>\n\t\t\t<div className=\"flex flex-wrap items-center gap-3\">\n\t\t\t\t{metadata.ttl !== undefined && metadata.ttl !== null ? (\n\t\t\t\t\t<span>\n\t\t\t\t\t\tTTL:{' '}\n\t\t\t\t\t\t{metadata.ttl === Infinity ? (\n\t\t\t\t\t\t\t'Forever'\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<span title={`${metadata.ttl}ms`}>\n\t\t\t\t\t\t\t\t{formatDuration(metadata.ttl)}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</span>\n\t\t\t\t) : null}\n\t\t\t\t{metadata.swr !== undefined ? (\n\t\t\t\t\t<span>\n\t\t\t\t\t\tSWR:{' '}\n\t\t\t\t\t\t<span title={`${metadata.swr}ms`}>\n\t\t\t\t\t\t\t{formatDuration(metadata.swr)}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</span>\n\t\t\t\t) : null}\n\t\t\t\t<div\n\t\t\t\t\tclassName={`inline-flex w-auto rounded-full px-2 py-[2px] font-medium ${\n\t\t\t\t\t\ttimeRemaining.isExpired\n\t\t\t\t\t\t\t? 'bg-destructive text-destructive-foreground'\n\t\t\t\t\t\t\t: timeRemaining.isExpiringSoon\n\t\t\t\t\t\t\t\t? 'bg-warning text-warning-foreground'\n\t\t\t\t\t\t\t\t: 'text-foreground'\n\t\t\t\t\t}`}\n\t\t\t\t>\n\t\t\t\t\t{expirationTime ? (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\tExpires: {dayjs(expirationTime).format('MMM D, YYYY HH:mm:ss')} (\n\t\t\t\t\t\t\t<span className=\"tabular-nums\">\n\t\t\t\t\t\t\t\t<ClientOnly>{() => timeRemaining.text}</ClientOnly>\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t</>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t'Expires: Never'\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n\n// Double-check delete button\nfunction DoubleCheckButton({\n\tonConfirm,\n\tchildren,\n\tclassName,\n\t...props\n}: React.ComponentPropsWithoutRef<'button'> & {\n\tonConfirm: () => void\n}) {\n\tconst doubleCheck = useDoubleCheck()\n\n\treturn (\n\t\t<IconButton\n\t\t\t{...doubleCheck.getButtonProps({\n\t\t\t\tonClick: doubleCheck.doubleCheck ? onConfirm : undefined,\n\t\t\t\t...props,\n\t\t\t})}\n\t\t\tclassName={cn(\n\t\t\t\tdoubleCheck.doubleCheck\n\t\t\t\t\t? 'bg-destructive text-destructive-foreground'\n\t\t\t\t\t: null,\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t{doubleCheck.doubleCheck ? '✓' : children}\n\t\t</IconButton>\n\t)\n}\n"],"names":["WorkshopChooser","selectedWorkshops","availableWorkshops","currentWorkshopId","searchParams","setSearchParams","useSearchParams","handleWorkshopChange","workshop","checked","newSelected","filter","w","params","URLSearchParams","length","set","join","delete","jsxs","className","children","jsx","map","type","includes","onChange","e","target","SearchFilter","filterQuery","inputValue","setInputValue","useState","inputRef","useRef","useEffect","handleSearch","query","handleClear","current","focus","ref","placeholder","value","IconButton","onClick","title","Icon","name","InlineEntryEditor","workshopId","cacheName","filename","currentValue","entryKey","fetcher","useFetcher","editValue","setEditValue","JSON","stringify","hasChanges","setHasChanges","handleSave","submit","intent","newValue","method","handleChange","handleReset","Button","varient","disabled","state","SkippedFilesSection","skippedFiles","skippedFile","error","size","formatFileSize","DoubleCheckButton","onConfirm","cache","_UNSAFE_withComponentProps","loaderData","deleteEntry","deleteCache","deleteWorkshopCache","filteredCaches","data","status","message","workshopCache","open","caches","totalSize","entries","reduce","sum","entry","skippedSize","file","grandTotal","key","filepath","CacheMetadata","metadata","href","rel","LaunchEditor","iconButtonClassName","dayjs","useDayjs","setCurrentTime","Date","now","expirationTime","calculateExpirationTime","useInterval","createdDate","createdTime","timeRemaining","formatTimeRemaining","text","isExpired","isExpiringSoon","format","ClientOnly","fromNow","ttl","Infinity","formatDuration","swr","Fragment","props","doubleCheck","useDoubleCheck","getButtonProps","cn"],"mappings":"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"}
1
+ {"version":3,"file":"cache-CAr50MIB.js","sources":["../../../app/routes/admin+/cache.tsx"],"sourcesContent":["import {\n\tdeleteCacheEntry,\n\tdeleteWorkshopCache,\n\tgetAllWorkshopCaches,\n\tgetGlobalCaches,\n\tglobalCacheDirectoryExists,\n\tupdateCacheEntry,\n} from '@epic-web/workshop-utils/cache.server'\nimport { getEnv } from '@epic-web/workshop-utils/env.server'\nimport { getErrorMessage } from '@epic-web/workshop-utils/utils'\nimport { useEffect, useRef, useState } from 'react'\nimport { href, useFetcher, useSearchParams } from 'react-router'\nimport { ClientOnly } from 'remix-utils/client-only'\nimport { z } from 'zod'\nimport {\n\tButton,\n\tIconButton,\n\ticonButtonClassName,\n} from '#app/components/button.tsx'\nimport { Icon } from '#app/components/icons.tsx'\nimport { LaunchEditor } from '#app/routes/launch-editor.tsx'\nimport {\n\tcalculateExpirationTime,\n\tcn,\n\tensureUndeployed,\n\tformatDuration,\n\tformatFileSize,\n\tformatTimeRemaining,\n\tuseDayjs,\n\tuseDoubleCheck,\n\tuseInterval,\n} from '#app/utils/misc.tsx'\nimport { type Route } from './+types/cache.ts'\n\nexport async function loader({ request }: Route.LoaderArgs) {\n\tensureUndeployed()\n\tconst currentWorkshopId = getEnv().EPICSHOP_WORKSHOP_INSTANCE_ID\n\tconst allWorkshopCaches = await getAllWorkshopCaches()\n\tconst globalCaches = await getGlobalCaches()\n\tconst allCaches = [...allWorkshopCaches, ...globalCaches]\n\n\tconst url = new URL(request.url)\n\tconst filterQuery = url.searchParams.get('q') || ''\n\n\t// Ensure 'global' is always in available workshops if global cache directory exists\n\tconst availableWorkshopIds = new Set(allCaches.map((w) => w.workshopId))\n\tconst globalDirExists = await globalCacheDirectoryExists()\n\tif (globalDirExists) {\n\t\tavailableWorkshopIds.add('global')\n\t}\n\n\tconst selectedWorkshops = url.searchParams\n\t\t.get('workshops')\n\t\t?.split(',')\n\t\t.filter(Boolean) || [\n\t\tcurrentWorkshopId,\n\t\t...(globalDirExists ? ['global'] : []),\n\t]\n\n\t// Filter caches based on search query and selected workshops\n\tconst filteredCaches = allCaches\n\t\t.filter(\n\t\t\t(workshopCache) =>\n\t\t\t\tselectedWorkshops.includes(workshopCache.workshopId) ||\n\t\t\t\tselectedWorkshops.length === 0,\n\t\t)\n\t\t.map((workshopCache) => ({\n\t\t\t...workshopCache,\n\t\t\tcaches: workshopCache.caches\n\t\t\t\t.map((cache) => ({\n\t\t\t\t\t...cache,\n\t\t\t\t\tentries: cache.entries.filter(\n\t\t\t\t\t\t(entry) =>\n\t\t\t\t\t\t\tfilterQuery === '' ||\n\t\t\t\t\t\t\tentry.key.toLowerCase().includes(filterQuery.toLowerCase()) ||\n\t\t\t\t\t\t\tcache.name.toLowerCase().includes(filterQuery.toLowerCase()),\n\t\t\t\t\t),\n\t\t\t\t}))\n\t\t\t\t.filter((cache) => cache.entries.length > 0 || filterQuery === ''),\n\t\t}))\n\t\t.filter(\n\t\t\t(workshopCache) => workshopCache.caches.length > 0 || filterQuery === '',\n\t\t)\n\n\treturn {\n\t\tcurrentWorkshopId,\n\t\tallWorkshopCaches: allCaches,\n\t\tfilteredCaches,\n\t\tfilterQuery,\n\t\tselectedWorkshops,\n\t\tavailableWorkshops: Array.from(availableWorkshopIds),\n\t}\n}\n\nconst ActionSchema = z.discriminatedUnion('intent', [\n\tz.object({\n\t\tintent: z.literal('delete-entry'),\n\t\tworkshopId: z.string(),\n\t\tcacheName: z.string(),\n\t\tfilename: z.string(),\n\t}),\n\tz.object({\n\t\tintent: z.literal('delete-cache'),\n\t\tworkshopId: z.string(),\n\t\tcacheName: z.string(),\n\t}),\n\tz.object({\n\t\tintent: z.literal('delete-workshop-cache'),\n\t\tworkshopId: z.string(),\n\t}),\n\tz.object({\n\t\tintent: z.literal('update-entry'),\n\t\tworkshopId: z.string(),\n\t\tcacheName: z.string(),\n\t\tfilename: z.string(),\n\t\tnewValue: z.string(),\n\t}),\n])\n\nexport async function action({ request }: Route.ActionArgs) {\n\tensureUndeployed()\n\n\tconst formData = await request.formData()\n\tconst rawData = Object.fromEntries(formData.entries())\n\tconst result = ActionSchema.safeParse(rawData)\n\n\tif (!result.success) {\n\t\treturn { status: 'error', error: 'Invalid request' } as const\n\t}\n\n\tconst data = result.data\n\n\ttry {\n\t\tswitch (data.intent) {\n\t\t\tcase 'delete-entry': {\n\t\t\t\tconst path = `${data.workshopId}/${data.cacheName}/${data.filename}`\n\t\t\t\tawait deleteCacheEntry(path)\n\t\t\t\treturn { status: 'success', message: 'Cache entry deleted' } as const\n\t\t\t}\n\t\t\tcase 'delete-cache': {\n\t\t\t\tawait deleteWorkshopCache(data.workshopId, data.cacheName)\n\t\t\t\treturn { status: 'success', message: 'Cache deleted' } as const\n\t\t\t}\n\t\t\tcase 'delete-workshop-cache': {\n\t\t\t\tawait deleteWorkshopCache(data.workshopId)\n\t\t\t\treturn { status: 'success', message: 'Workshop cache deleted' } as const\n\t\t\t}\n\t\t\tcase 'update-entry': {\n\t\t\t\tconst path = `${data.workshopId}/${data.cacheName}/${data.filename}`\n\t\t\t\ttry {\n\t\t\t\t\tconst parsedValue = JSON.parse(data.newValue)\n\t\t\t\t\tawait updateCacheEntry(path, parsedValue)\n\t\t\t\t\treturn { status: 'success', message: 'Cache entry updated' } as const\n\t\t\t\t} catch (error) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tstatus: 'error',\n\t\t\t\t\t\terror: getErrorMessage(error, 'Invalid JSON value'),\n\t\t\t\t\t} as const\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} catch (error) {\n\t\tconsole.error('Cache action error:', error)\n\t\treturn { status: 'error', error: 'Operation failed' } as const\n\t}\n}\n\nfunction WorkshopChooser({\n\tselectedWorkshops,\n\tavailableWorkshops,\n\tcurrentWorkshopId,\n}: {\n\tselectedWorkshops: string[]\n\tavailableWorkshops: string[]\n\tcurrentWorkshopId: string\n}) {\n\tconst [searchParams, setSearchParams] = useSearchParams()\n\n\tconst handleWorkshopChange = (workshop: string, checked: boolean) => {\n\t\tconst newSelected = checked\n\t\t\t? [...selectedWorkshops, workshop]\n\t\t\t: selectedWorkshops.filter((w) => w !== workshop)\n\n\t\tconst params = new URLSearchParams(searchParams)\n\t\tif (newSelected.length > 0) {\n\t\t\tparams.set('workshops', newSelected.join(','))\n\t\t} else {\n\t\t\tparams.delete('workshops')\n\t\t}\n\t\tsetSearchParams(params)\n\t}\n\n\treturn (\n\t\t<div className=\"mb-6\">\n\t\t\t<h3 className=\"mb-3 text-lg font-semibold\">Workshop Filter</h3>\n\t\t\t<div className=\"flex flex-wrap gap-3\">\n\t\t\t\t{availableWorkshops.map((workshop) => (\n\t\t\t\t\t<label key={workshop} className=\"flex items-center gap-2\">\n\t\t\t\t\t\t<input\n\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\tchecked={selectedWorkshops.includes(workshop)}\n\t\t\t\t\t\t\tonChange={(e) => handleWorkshopChange(workshop, e.target.checked)}\n\t\t\t\t\t\t\tclassName=\"rounded\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\tclassName={`text-sm ${workshop === currentWorkshopId ? 'text-primary font-bold' : ''}`}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{workshop} {workshop === currentWorkshopId ? '(current)' : null}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</label>\n\t\t\t\t))}\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n\nfunction SearchFilter({ filterQuery }: { filterQuery: string }) {\n\tconst [searchParams, setSearchParams] = useSearchParams()\n\tconst [inputValue, setInputValue] = useState(filterQuery)\n\tconst inputRef = useRef<HTMLInputElement>(null)\n\n\t// Update input value when filterQuery changes (e.g., from URL)\n\tuseEffect(() => {\n\t\tsetInputValue(filterQuery)\n\t}, [filterQuery])\n\n\tconst handleSearch = (query: string) => {\n\t\tconst params = new URLSearchParams(searchParams)\n\t\tif (query) {\n\t\t\tparams.set('q', query)\n\t\t} else {\n\t\t\tparams.delete('q')\n\t\t}\n\t\tsetSearchParams(params)\n\t}\n\n\tconst handleClear = () => {\n\t\tsetInputValue('')\n\t\thandleSearch('')\n\t\tinputRef.current?.focus()\n\t}\n\n\treturn (\n\t\t<div className=\"mb-6\">\n\t\t\t<h3 className=\"mb-3 text-lg font-semibold\">Search Cache Entries</h3>\n\t\t\t<div className=\"flex gap-2\">\n\t\t\t\t<input\n\t\t\t\t\tref={inputRef}\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tplaceholder=\"Search by key or cache name...\"\n\t\t\t\t\tvalue={inputValue}\n\t\t\t\t\tonChange={(e) => {\n\t\t\t\t\t\tsetInputValue(e.target.value)\n\t\t\t\t\t\thandleSearch(e.target.value)\n\t\t\t\t\t}}\n\t\t\t\t\tclassName=\"border-border bg-background text-foreground focus:ring-ring flex-1 rounded-md border px-3 py-2 focus:ring-2 focus:outline-none\"\n\t\t\t\t/>\n\t\t\t\t{inputValue ? (\n\t\t\t\t\t<IconButton onClick={handleClear} title=\"Clear search\">\n\t\t\t\t\t\t<Icon name=\"Close\" className=\"h-4 w-4\" />\n\t\t\t\t\t</IconButton>\n\t\t\t\t) : null}\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n\n// Inline entry editor component\nfunction InlineEntryEditor({\n\tworkshopId,\n\tcacheName,\n\tfilename,\n\tcurrentValue,\n\tentryKey,\n}: {\n\tworkshopId: string\n\tcacheName: string\n\tfilename: string\n\tcurrentValue: any\n\tentryKey: string\n}) {\n\tconst fetcher = useFetcher<typeof action>()\n\tconst [editValue, setEditValue] = useState(\n\t\tJSON.stringify(currentValue, null, 2),\n\t)\n\tconst [hasChanges, setHasChanges] = useState(false)\n\n\tconst handleSave = () => {\n\t\tvoid fetcher.submit(\n\t\t\t{\n\t\t\t\tintent: 'update-entry',\n\t\t\t\tworkshopId,\n\t\t\t\tcacheName,\n\t\t\t\tfilename,\n\t\t\t\tnewValue: editValue,\n\t\t\t},\n\t\t\t{ method: 'POST' },\n\t\t)\n\t\tsetHasChanges(false)\n\t}\n\n\tconst handleChange = (value: string) => {\n\t\tsetEditValue(value)\n\t\tsetHasChanges(value !== JSON.stringify(currentValue, null, 2))\n\t}\n\n\tconst handleReset = () => {\n\t\tsetEditValue(JSON.stringify(currentValue, null, 2))\n\t\tsetHasChanges(false)\n\t}\n\n\treturn (\n\t\t<details className=\"mt-2\">\n\t\t\t<summary className=\"text-muted-foreground hover:text-foreground cursor-pointer text-sm\">\n\t\t\t\tEdit entry details\n\t\t\t</summary>\n\t\t\t<div className=\"border-border bg-muted mt-2 space-y-3 rounded border p-3\">\n\t\t\t\t<div>\n\t\t\t\t\t<label className=\"mb-1 block text-sm font-medium\">Key:</label>\n\t\t\t\t\t<code className=\"bg-background rounded border px-2 py-1 text-sm\">\n\t\t\t\t\t\t{entryKey}\n\t\t\t\t\t</code>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<label className=\"mb-1 block text-sm font-medium\">Value:</label>\n\t\t\t\t\t<textarea\n\t\t\t\t\t\tvalue={editValue}\n\t\t\t\t\t\tonChange={(e) => handleChange(e.target.value)}\n\t\t\t\t\t\tclassName=\"resize-vertical border-border bg-background text-foreground focus:ring-ring h-32 w-full rounded border p-2 font-mono text-sm focus:ring-2 focus:outline-none\"\n\t\t\t\t\t\tplaceholder=\"Enter JSON value...\"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t\t<div className=\"flex gap-2\">\n\t\t\t\t\t<Button\n\t\t\t\t\t\tvarient=\"primary\"\n\t\t\t\t\t\tonClick={handleSave}\n\t\t\t\t\t\tdisabled={!hasChanges || fetcher.state !== 'idle'}\n\t\t\t\t\t>\n\t\t\t\t\t\t{fetcher.state !== 'idle' ? 'Saving...' : 'Save'}\n\t\t\t\t\t</Button>\n\t\t\t\t\t<Button varient=\"mono\" onClick={handleReset} disabled={!hasChanges}>\n\t\t\t\t\t\tReset\n\t\t\t\t\t</Button>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</details>\n\t)\n}\n\nfunction SkippedFilesSection({\n\tskippedFiles,\n\tworkshopId,\n\tcacheName,\n}: {\n\tskippedFiles: Array<{\n\t\tfilename: string\n\t\terror: string\n\t\tsize: number\n\t\tskipped: true\n\t}>\n\tworkshopId: string\n\tcacheName: string\n}) {\n\tconst fetcher = useFetcher<typeof action>()\n\n\tif (skippedFiles.length === 0) return null\n\n\treturn (\n\t\t<div className=\"border-warning bg-warning mt-4 rounded border p-3\">\n\t\t\t<div className=\"mb-2 flex items-center gap-2\">\n\t\t\t\t<Icon\n\t\t\t\t\tname=\"TriangleAlert\"\n\t\t\t\t\tclassName=\"text-warning-foreground h-4 w-4\"\n\t\t\t\t/>\n\t\t\t\t<h5 className=\"text-warning-foreground font-medium\">\n\t\t\t\t\tSkipped Files ({skippedFiles.length})\n\t\t\t\t</h5>\n\t\t\t</div>\n\t\t\t<p className=\"text-warning-foreground/80 mb-3 text-sm\">\n\t\t\t\tThese cache files were skipped because they exceed the 3MB size limit:\n\t\t\t</p>\n\t\t\t<div className=\"space-y-2\">\n\t\t\t\t{skippedFiles.map((skippedFile) => (\n\t\t\t\t\t<div\n\t\t\t\t\t\tkey={skippedFile.filename}\n\t\t\t\t\t\tclassName=\"border-warning/20 bg-warning/5 flex items-center justify-between rounded border p-2\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<div className=\"min-w-0 flex-1\">\n\t\t\t\t\t\t\t<div className=\"text-warning-foreground truncate font-mono text-sm font-medium\">\n\t\t\t\t\t\t\t\t{skippedFile.filename}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div className=\"text-warning-foreground/70 text-xs\">\n\t\t\t\t\t\t\t\t{skippedFile.error} • Size:{' '}\n\t\t\t\t\t\t\t\t<span title={`${skippedFile.size} bytes`}>\n\t\t\t\t\t\t\t\t\t{formatFileSize(skippedFile.size)}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div className=\"ml-2 flex shrink-0\">\n\t\t\t\t\t\t\t<DoubleCheckButton\n\t\t\t\t\t\t\t\tonConfirm={() => {\n\t\t\t\t\t\t\t\t\tvoid fetcher.submit(\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tintent: 'delete-entry',\n\t\t\t\t\t\t\t\t\t\t\tworkshopId,\n\t\t\t\t\t\t\t\t\t\t\tcacheName,\n\t\t\t\t\t\t\t\t\t\t\tfilename: skippedFile.filename,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{ method: 'POST' },\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\ttitle=\"Delete large cache file\"\n\t\t\t\t\t\t\t\tclassName=\"text-destructive-foreground hover:bg-destructive/20 hover:text-destructive-foreground\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Icon name=\"Remove\" className=\"h-4 w-4\" />\n\t\t\t\t\t\t\t</DoubleCheckButton>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t))}\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n\nexport default function CacheManagement({ loaderData }: Route.ComponentProps) {\n\tconst fetcher = useFetcher<typeof action>()\n\n\tconst deleteEntry = (\n\t\tworkshopId: string,\n\t\tcacheName: string,\n\t\tfilename: string,\n\t) => {\n\t\tvoid fetcher.submit(\n\t\t\t{\n\t\t\t\tintent: 'delete-entry',\n\t\t\t\tworkshopId,\n\t\t\t\tcacheName,\n\t\t\t\tfilename,\n\t\t\t},\n\t\t\t{ method: 'POST' },\n\t\t)\n\t}\n\n\tconst deleteCache = (workshopId: string, cacheName: string) => {\n\t\tvoid fetcher.submit(\n\t\t\t{\n\t\t\t\tintent: 'delete-cache',\n\t\t\t\tworkshopId,\n\t\t\t\tcacheName,\n\t\t\t},\n\t\t\t{ method: 'POST' },\n\t\t)\n\t}\n\n\tconst deleteWorkshopCache = (workshopId: string) => {\n\t\tvoid fetcher.submit(\n\t\t\t{\n\t\t\t\tintent: 'delete-workshop-cache',\n\t\t\t\tworkshopId,\n\t\t\t},\n\t\t\t{ method: 'POST' },\n\t\t)\n\t}\n\n\tconst {\n\t\tcurrentWorkshopId,\n\t\tfilteredCaches,\n\t\tfilterQuery,\n\t\tselectedWorkshops,\n\t\tavailableWorkshops,\n\t} = loaderData\n\n\treturn (\n\t\t<div className=\"space-y-6\">\n\t\t\t<div>\n\t\t\t\t<h2 className=\"mb-2 text-2xl font-bold\">Cache Management</h2>\n\t\t\t\t<p className=\"text-muted-foreground\">\n\t\t\t\t\tCurrent Workshop:{' '}\n\t\t\t\t\t<span className=\"text-foreground font-semibold\">\n\t\t\t\t\t\t{currentWorkshopId}\n\t\t\t\t\t</span>\n\t\t\t\t</p>\n\t\t\t</div>\n\n\t\t\t<WorkshopChooser\n\t\t\t\tselectedWorkshops={selectedWorkshops}\n\t\t\t\tavailableWorkshops={availableWorkshops}\n\t\t\t\tcurrentWorkshopId={currentWorkshopId}\n\t\t\t/>\n\n\t\t\t<SearchFilter filterQuery={filterQuery} />\n\n\t\t\t{fetcher.data?.status === 'success' ? (\n\t\t\t\t<div className=\"border-border bg-success text-success-foreground rounded border p-4\">\n\t\t\t\t\t{fetcher.data.message}\n\t\t\t\t</div>\n\t\t\t) : null}\n\n\t\t\t{fetcher.data?.status === 'error' ? (\n\t\t\t\t<div className=\"border-border bg-destructive text-destructive-foreground rounded border p-4\">\n\t\t\t\t\t{fetcher.data.error}\n\t\t\t\t</div>\n\t\t\t) : null}\n\n\t\t\t{filteredCaches.length === 0 ? (\n\t\t\t\t<div className=\"text-muted-foreground py-8 text-center\">\n\t\t\t\t\tNo caches found matching your criteria.\n\t\t\t\t</div>\n\t\t\t) : null}\n\n\t\t\t<div className=\"space-y-6\">\n\t\t\t\t{filteredCaches.map((workshopCache) => (\n\t\t\t\t\t<details\n\t\t\t\t\t\tkey={workshopCache.workshopId}\n\t\t\t\t\t\topen={workshopCache.workshopId === currentWorkshopId}\n\t\t\t\t\t>\n\t\t\t\t\t\t<summary className=\"border-border bg-card hover:bg-accent cursor-pointer rounded-lg border p-4\">\n\t\t\t\t\t\t\t<div className=\"flex items-center justify-between\">\n\t\t\t\t\t\t\t\t<h3 className=\"text-card-foreground flex items-center gap-2 text-lg font-semibold\">\n\t\t\t\t\t\t\t\t\t<Icon name=\"Files\" className=\"h-5 w-5\" />\n\t\t\t\t\t\t\t\t\t{workshopCache.workshopId === 'global'\n\t\t\t\t\t\t\t\t\t\t? 'Global Caches'\n\t\t\t\t\t\t\t\t\t\t: workshopCache.workshopId}\n\t\t\t\t\t\t\t\t\t{workshopCache.workshopId === currentWorkshopId ? (\n\t\t\t\t\t\t\t\t\t\t<span className=\"bg-primary text-primary-foreground rounded px-2 py-1 text-xs\">\n\t\t\t\t\t\t\t\t\t\t\tCurrent\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t</h3>\n\t\t\t\t\t\t\t\t<DoubleCheckButton\n\t\t\t\t\t\t\t\t\tonConfirm={() =>\n\t\t\t\t\t\t\t\t\t\tdeleteWorkshopCache(workshopCache.workshopId)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\ttitle=\"Delete all workshop caches\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<Icon name=\"Remove\" className=\"h-4 w-4\" />\n\t\t\t\t\t\t\t\t</DoubleCheckButton>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</summary>\n\n\t\t\t\t\t\t<div className=\"mt-4 space-y-4 pl-4\">\n\t\t\t\t\t\t\t{workshopCache.caches.map((cache) => {\n\t\t\t\t\t\t\t\tconst totalSize = cache.entries.reduce(\n\t\t\t\t\t\t\t\t\t(sum, entry) => sum + (entry.size || 0),\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\tconst skippedSize = (cache.skippedFiles || []).reduce(\n\t\t\t\t\t\t\t\t\t(sum, file) => sum + file.size,\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\tconst grandTotal = totalSize + skippedSize\n\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<details key={cache.name} className=\"bg-muted rounded-md\">\n\t\t\t\t\t\t\t\t\t\t<summary className=\"hover:bg-accent cursor-pointer p-3\">\n\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex items-center justify-between\">\n\t\t\t\t\t\t\t\t\t\t\t\t<h4 className=\"text-muted-foreground flex items-center gap-2 font-medium\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Icon name=\"Files\" className=\"h-4 w-4\" />\n\t\t\t\t\t\t\t\t\t\t\t\t\t{cache.name}\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-sm\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t({cache.entries.length} entr\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{cache.entries.length === 1 ? 'y' : 'ies'})\n\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{grandTotal > 0 ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-muted-foreground text-sm\">\n\t\t\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\t\t\t<span title={`${grandTotal} bytes`}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{formatFileSize(grandTotal)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>{' '}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttotal\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{skippedSize > 0 ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-warning\">\n\t\t\t\t\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\t\t\t\t\t(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span title={`${skippedSize} bytes`}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{formatFileSize(skippedSize)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>{' '}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tskipped)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t\t\t\t\t</h4>\n\t\t\t\t\t\t\t\t\t\t\t\t<DoubleCheckButton\n\t\t\t\t\t\t\t\t\t\t\t\t\tonConfirm={() =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdeleteCache(workshopCache.workshopId, cache.name)\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\ttitle=\"Delete cache\"\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<Icon name=\"Remove\" className=\"h-4 w-4\" />\n\t\t\t\t\t\t\t\t\t\t\t\t</DoubleCheckButton>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t</summary>\n\n\t\t\t\t\t\t\t\t\t\t<div className=\"p-3 pt-0\">\n\t\t\t\t\t\t\t\t\t\t\t{cache.entries.length === 0 ? (\n\t\t\t\t\t\t\t\t\t\t\t\t<p className=\"text-muted-foreground text-sm\">\n\t\t\t\t\t\t\t\t\t\t\t\t\tNo entries match your search.\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) : null}\n\n\t\t\t\t\t\t\t\t\t\t\t{cache.skippedFiles && cache.skippedFiles.length > 0 ? (\n\t\t\t\t\t\t\t\t\t\t\t\t<SkippedFilesSection\n\t\t\t\t\t\t\t\t\t\t\t\t\tskippedFiles={cache.skippedFiles}\n\t\t\t\t\t\t\t\t\t\t\t\t\tworkshopId={workshopCache.workshopId}\n\t\t\t\t\t\t\t\t\t\t\t\t\tcacheName={cache.name}\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) : null}\n\n\t\t\t\t\t\t\t\t\t\t\t<div className=\"space-y-2\">\n\t\t\t\t\t\t\t\t\t\t\t\t{cache.entries.map(\n\t\t\t\t\t\t\t\t\t\t\t\t\t({ key, entry, filename, size, filepath }) => (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tkey={key}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"border-border bg-background rounded border p-3\"\n\t\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\t\t\t<div className=\"flex items-start justify-between\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"min-w-0 flex-1\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"mb-1 flex items-center gap-2\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"truncate font-mono text-sm font-medium\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttitle={key}\n\t\t\t\t\t\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\t\t\t\t\t\t\t{key}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{size ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"bg-muted text-muted-foreground inline-flex items-center rounded px-1.5 py-0.5 text-xs whitespace-nowrap\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttitle={`${size} bytes`}\n\t\t\t\t\t\t\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\t\t\t\t\t\t\t\t{formatFileSize(size)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<CacheMetadata metadata={entry.metadata} />\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"ml-4 flex shrink-0 gap-1\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\thref={href('/admin/cache/*', {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'*': `${workshopCache.workshopId}/${cache.name}/${filename}`,\n\t\t\t\t\t\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\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"border-border bg-background text-foreground hover:bg-muted focus:ring-ring inline-flex h-8 w-8 items-center justify-center rounded border focus:ring-2 focus:outline-none\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttitle=\"View JSON\"\n\t\t\t\t\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\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tname=\"ExternalLink\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"h-4 w-4\"\n\t\t\t\t\t\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\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{filepath ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<LaunchEditor\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfile={filepath}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName={iconButtonClassName}\n\t\t\t\t\t\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\t\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tname=\"Files\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"h-4 w-4\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttitle=\"Open in editor\"\n\t\t\t\t\t\t\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\t\t\t\t\t\t</LaunchEditor>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<DoubleCheckButton\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonConfirm={() =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdeleteEntry(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tworkshopCache.workshopId,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcache.name,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfilename,\n\t\t\t\t\t\t\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\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttitle=\"Delete entry\"\n\t\t\t\t\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\t\t\t\t\t\t<Icon name=\"Remove\" className=\"h-4 w-4\" />\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</DoubleCheckButton>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<InlineEntryEditor\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tworkshopId={workshopCache.workshopId}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcacheName={cache.name}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfilename={filename}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcurrentValue={entry.value}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tentryKey={key}\n\t\t\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\t\t</div>\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</div>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</details>\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</details>\n\t\t\t\t))}\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n\n// Component for displaying cache metadata with live countdown\nfunction CacheMetadata({\n\tmetadata,\n}: {\n\tmetadata: {\n\t\tcreatedTime: number\n\t\tttl?: number | null\n\t\tswr?: number\n\t}\n}) {\n\tconst dayjs = useDayjs()\n\tconst [, setCurrentTime] = useState(Date.now())\n\tconst expirationTime = calculateExpirationTime(metadata)\n\n\t// Update time every second for live countdown\n\tuseInterval(() => {\n\t\tsetCurrentTime(Date.now())\n\t}, 1000)\n\n\tconst createdDate = dayjs(metadata.createdTime)\n\tconst timeRemaining = expirationTime\n\t\t? formatTimeRemaining(expirationTime)\n\t\t: { text: 'Never', isExpired: false, isExpiringSoon: false }\n\n\treturn (\n\t\t<div className=\"text-muted-foreground flex flex-col gap-1 text-xs\">\n\t\t\t<div>\n\t\t\t\tCreated: {createdDate.format('MMM D, YYYY HH:mm:ss')}{' '}\n\t\t\t\t<ClientOnly>{() => `(${createdDate.fromNow()})`}</ClientOnly>\n\t\t\t</div>\n\t\t\t<div className=\"flex flex-wrap items-center gap-3\">\n\t\t\t\t{metadata.ttl !== undefined && metadata.ttl !== null ? (\n\t\t\t\t\t<span>\n\t\t\t\t\t\tTTL:{' '}\n\t\t\t\t\t\t{metadata.ttl === Infinity ? (\n\t\t\t\t\t\t\t'Forever'\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<span title={`${metadata.ttl}ms`}>\n\t\t\t\t\t\t\t\t{formatDuration(metadata.ttl)}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</span>\n\t\t\t\t) : null}\n\t\t\t\t{metadata.swr !== undefined ? (\n\t\t\t\t\t<span>\n\t\t\t\t\t\tSWR:{' '}\n\t\t\t\t\t\t<span title={`${metadata.swr}ms`}>\n\t\t\t\t\t\t\t{formatDuration(metadata.swr)}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</span>\n\t\t\t\t) : null}\n\t\t\t\t<div\n\t\t\t\t\tclassName={`inline-flex w-auto rounded-full px-2 py-[2px] font-medium ${\n\t\t\t\t\t\ttimeRemaining.isExpired\n\t\t\t\t\t\t\t? 'bg-destructive text-destructive-foreground'\n\t\t\t\t\t\t\t: timeRemaining.isExpiringSoon\n\t\t\t\t\t\t\t\t? 'bg-warning text-warning-foreground'\n\t\t\t\t\t\t\t\t: 'text-foreground'\n\t\t\t\t\t}`}\n\t\t\t\t>\n\t\t\t\t\t{expirationTime ? (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\tExpires: {dayjs(expirationTime).format('MMM D, YYYY HH:mm:ss')} (\n\t\t\t\t\t\t\t<span className=\"tabular-nums\">\n\t\t\t\t\t\t\t\t<ClientOnly>{() => timeRemaining.text}</ClientOnly>\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t</>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t'Expires: Never'\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n\n// Double-check delete button\nfunction DoubleCheckButton({\n\tonConfirm,\n\tchildren,\n\tclassName,\n\t...props\n}: React.ComponentPropsWithoutRef<'button'> & {\n\tonConfirm: () => void\n}) {\n\tconst doubleCheck = useDoubleCheck()\n\n\treturn (\n\t\t<IconButton\n\t\t\t{...doubleCheck.getButtonProps({\n\t\t\t\tonClick: doubleCheck.doubleCheck ? onConfirm : undefined,\n\t\t\t\t...props,\n\t\t\t})}\n\t\t\tclassName={cn(\n\t\t\t\tdoubleCheck.doubleCheck\n\t\t\t\t\t? 'bg-destructive text-destructive-foreground'\n\t\t\t\t\t: null,\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t{doubleCheck.doubleCheck ? '✓' : children}\n\t\t</IconButton>\n\t)\n}\n"],"names":["WorkshopChooser","selectedWorkshops","availableWorkshops","currentWorkshopId","searchParams","setSearchParams","useSearchParams","handleWorkshopChange","workshop","checked","newSelected","filter","w","params","URLSearchParams","length","set","join","delete","jsxs","className","children","jsx","map","type","includes","onChange","e","target","SearchFilter","filterQuery","inputValue","setInputValue","useState","inputRef","useRef","useEffect","handleSearch","query","handleClear","current","focus","ref","placeholder","value","IconButton","onClick","title","Icon","name","InlineEntryEditor","workshopId","cacheName","filename","currentValue","entryKey","fetcher","useFetcher","editValue","setEditValue","JSON","stringify","hasChanges","setHasChanges","handleSave","submit","intent","newValue","method","handleChange","handleReset","Button","varient","disabled","state","SkippedFilesSection","skippedFiles","skippedFile","error","size","formatFileSize","DoubleCheckButton","onConfirm","cache","_UNSAFE_withComponentProps","loaderData","deleteEntry","deleteCache","deleteWorkshopCache","filteredCaches","data","status","message","workshopCache","open","caches","totalSize","entries","reduce","sum","entry","skippedSize","file","grandTotal","key","filepath","CacheMetadata","metadata","href","rel","LaunchEditor","iconButtonClassName","dayjs","useDayjs","setCurrentTime","Date","now","expirationTime","calculateExpirationTime","useInterval","createdDate","createdTime","timeRemaining","formatTimeRemaining","text","isExpired","isExpiringSoon","format","ClientOnly","fromNow","ttl","Infinity","formatDuration","swr","Fragment","props","doubleCheck","useDoubleCheck","getButtonProps","cn"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import{U as a,C as n}from"./mermaid.core-BdxLLjl2.js";const t=(r,o)=>a.lang.round(n.parse(r)[o]);export{t as c};
2
+ //# sourceMappingURL=channel-B7uExpgv.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"channel-BLJkdd1O.js","sources":["../../../../../node_modules/khroma/dist/methods/channel.js"],"sourcesContent":["/* IMPORT */\nimport _ from '../utils/index.js';\nimport Color from '../color/index.js';\n/* MAIN */\nconst channel = (color, channel) => {\n return _.lang.round(Color.parse(color)[channel]);\n};\n/* EXPORT */\nexport default channel;\n"],"names":["channel","color","_","Color"],"mappings":"sDAIK,MAACA,EAAU,CAACC,EAAOD,IACbE,EAAE,KAAK,MAAMC,EAAM,MAAMF,CAAK,EAAED,CAAO,CAAC","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"channel-B7uExpgv.js","sources":["../../../../../node_modules/khroma/dist/methods/channel.js"],"sourcesContent":["/* IMPORT */\nimport _ from '../utils/index.js';\nimport Color from '../color/index.js';\n/* MAIN */\nconst channel = (color, channel) => {\n return _.lang.round(Color.parse(color)[channel]);\n};\n/* EXPORT */\nexport default channel;\n"],"names":["channel","color","_","Color"],"mappings":"sDAIK,MAACA,EAAU,CAACC,EAAOD,IACbE,EAAE,KAAK,MAAMC,EAAM,MAAMF,CAAK,EAAED,CAAO,CAAC","x_google_ignoreList":[0]}
@@ -1,2 +1,2 @@
1
- import{_ as i}from"./mermaid.core-D3y7PO8B.js";function t(c,e){c.accDescr&&e.setAccDescription?.(c.accDescr),c.accTitle&&e.setAccTitle?.(c.accTitle),c.title&&e.setDiagramTitle?.(c.title)}i(t,"populateCommonDb");export{t as p};
2
- //# sourceMappingURL=chunk-4BX2VUAB-qrzenNNi.js.map
1
+ import{_ as i}from"./mermaid.core-BdxLLjl2.js";function t(c,e){c.accDescr&&e.setAccDescription?.(c.accDescr),c.accTitle&&e.setAccTitle?.(c.accTitle),c.title&&e.setDiagramTitle?.(c.title)}i(t,"populateCommonDb");export{t as p};
2
+ //# sourceMappingURL=chunk-4BX2VUAB-BOJM4J9w.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"chunk-4BX2VUAB-qrzenNNi.js","sources":["../../../../../node_modules/mermaid/dist/chunks/mermaid.core/chunk-4BX2VUAB.mjs"],"sourcesContent":["import {\n __name\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/diagrams/common/populateCommonDb.ts\nfunction populateCommonDb(ast, db) {\n if (ast.accDescr) {\n db.setAccDescription?.(ast.accDescr);\n }\n if (ast.accTitle) {\n db.setAccTitle?.(ast.accTitle);\n }\n if (ast.title) {\n db.setDiagramTitle?.(ast.title);\n }\n}\n__name(populateCommonDb, \"populateCommonDb\");\n\nexport {\n populateCommonDb\n};\n"],"names":["populateCommonDb","ast","db","__name"],"mappings":"+CAKA,SAASA,EAAiBC,EAAKC,EAAI,CAC7BD,EAAI,UACNC,EAAG,oBAAoBD,EAAI,QAAQ,EAEjCA,EAAI,UACNC,EAAG,cAAcD,EAAI,QAAQ,EAE3BA,EAAI,OACNC,EAAG,kBAAkBD,EAAI,KAAK,CAElC,CACAE,EAAOH,EAAkB,kBAAkB","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"chunk-4BX2VUAB-BOJM4J9w.js","sources":["../../../../../node_modules/mermaid/dist/chunks/mermaid.core/chunk-4BX2VUAB.mjs"],"sourcesContent":["import {\n __name\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/diagrams/common/populateCommonDb.ts\nfunction populateCommonDb(ast, db) {\n if (ast.accDescr) {\n db.setAccDescription?.(ast.accDescr);\n }\n if (ast.accTitle) {\n db.setAccTitle?.(ast.accTitle);\n }\n if (ast.title) {\n db.setDiagramTitle?.(ast.title);\n }\n}\n__name(populateCommonDb, \"populateCommonDb\");\n\nexport {\n populateCommonDb\n};\n"],"names":["populateCommonDb","ast","db","__name"],"mappings":"+CAKA,SAASA,EAAiBC,EAAKC,EAAI,CAC7BD,EAAI,UACNC,EAAG,oBAAoBD,EAAI,QAAQ,EAEjCA,EAAI,UACNC,EAAG,cAAcD,EAAI,QAAQ,EAE3BA,EAAI,OACNC,EAAG,kBAAkBD,EAAI,KAAK,CAElC,CACAE,EAAOH,EAAkB,kBAAkB","x_google_ignoreList":[0]}
@@ -1,2 +1,2 @@
1
- import{_ as a,d as o}from"./mermaid.core-D3y7PO8B.js";var d=a((t,e)=>{let n;return e==="sandbox"&&(n=o("#i"+t)),(e==="sandbox"?o(n.nodes()[0].contentDocument.body):o("body")).select(`[id="${t}"]`)},"getDiagramElement");export{d as g};
2
- //# sourceMappingURL=chunk-55IACEB6-BOr0rES3.js.map
1
+ import{_ as a,d as o}from"./mermaid.core-BdxLLjl2.js";var d=a((t,e)=>{let n;return e==="sandbox"&&(n=o("#i"+t)),(e==="sandbox"?o(n.nodes()[0].contentDocument.body):o("body")).select(`[id="${t}"]`)},"getDiagramElement");export{d as g};
2
+ //# sourceMappingURL=chunk-55IACEB6-CO_GT_87.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"chunk-55IACEB6-BOr0rES3.js","sources":["../../../../../node_modules/mermaid/dist/chunks/mermaid.core/chunk-55IACEB6.mjs"],"sourcesContent":["import {\n __name\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/rendering-util/insertElementsForSize.js\nimport { select } from \"d3\";\nvar getDiagramElement = /* @__PURE__ */ __name((id, 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 svg = root.select(`[id=\"${id}\"]`);\n return svg;\n}, \"getDiagramElement\");\n\nexport {\n getDiagramElement\n};\n"],"names":["getDiagramElement","__name","id","securityLevel","sandboxElement","select"],"mappings":"sDAMG,IAACA,EAAoCC,EAAO,CAACC,EAAIC,IAAkB,CACpE,IAAIC,EACJ,OAAID,IAAkB,YACpBC,EAAiBC,EAAO,KAAOH,CAAE,IAEtBC,IAAkB,UAAYE,EAAOD,EAAe,QAAQ,CAAC,EAAE,gBAAgB,IAAI,EAAIC,EAAO,MAAM,GAChG,OAAO,QAAQH,CAAE,IAAI,CAExC,EAAG,mBAAmB","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"chunk-55IACEB6-CO_GT_87.js","sources":["../../../../../node_modules/mermaid/dist/chunks/mermaid.core/chunk-55IACEB6.mjs"],"sourcesContent":["import {\n __name\n} from \"./chunk-AGHRB4JF.mjs\";\n\n// src/rendering-util/insertElementsForSize.js\nimport { select } from \"d3\";\nvar getDiagramElement = /* @__PURE__ */ __name((id, 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 svg = root.select(`[id=\"${id}\"]`);\n return svg;\n}, \"getDiagramElement\");\n\nexport {\n getDiagramElement\n};\n"],"names":["getDiagramElement","__name","id","securityLevel","sandboxElement","select"],"mappings":"sDAMG,IAACA,EAAoCC,EAAO,CAACC,EAAIC,IAAkB,CACpE,IAAIC,EACJ,OAAID,IAAkB,YACpBC,EAAiBC,EAAO,KAAOH,CAAE,IAEtBC,IAAkB,UAAYE,EAAOD,EAAe,QAAQ,CAAC,EAAE,gBAAgB,IAAI,EAAIC,EAAO,MAAM,GAChG,OAAO,QAAQH,CAAE,IAAI,CAExC,EAAG,mBAAmB","x_google_ignoreList":[0]}
@@ -1,4 +1,4 @@
1
- import{g as et}from"./chunk-FMBD7UC4-CyJoWksV.js";import{g as tt}from"./chunk-55IACEB6-BOr0rES3.js";import{s as st}from"./chunk-QN33PNHL-BpbvTQdp.js";import{_ as A,l as Oe,c as D,p as it,r as at,u as we,d as ee,b as nt,a as rt,s as ut,g as lt,q as ct,t as ot,k as v,z as ht,y as dt,i as pt,a8 as R}from"./mermaid.core-D3y7PO8B.js";var Ve=(function(){var s=A(function(I,c,o,d){for(o=o||{},d=I.length;d--;o[I[d]]=c);return o},"o"),i=[1,18],a=[1,19],u=[1,20],l=[1,41],n=[1,42],p=[1,26],f=[1,24],C=[1,25],B=[1,32],L=[1,33],Ae=[1,34],m=[1,45],fe=[1,35],ge=[1,36],Ce=[1,37],me=[1,38],be=[1,27],Ee=[1,28],ye=[1,29],Te=[1,30],ke=[1,31],b=[1,44],E=[1,46],y=[1,43],T=[1,47],De=[1,9],h=[1,8,9],te=[1,58],se=[1,59],ie=[1,60],ae=[1,61],ne=[1,62],Fe=[1,63],Be=[1,64],z=[1,8,9,41],Pe=[1,76],P=[1,8,9,12,13,22,39,41,44,68,69,70,71,72,73,74,79,81],re=[1,8,9,12,13,18,20,22,39,41,44,50,60,68,69,70,71,72,73,74,79,81,86,100,102,103],ue=[13,60,86,100,102,103],K=[13,60,73,74,86,100,102,103],Me=[13,60,68,69,70,71,72,86,100,102,103],_e=[1,100],Y=[1,117],Q=[1,113],W=[1,109],j=[1,115],X=[1,110],q=[1,111],H=[1,112],J=[1,114],Z=[1,116],Re=[22,48,60,61,82,86,87,88,89,90],Se=[1,8,9,39,41,44],le=[1,8,9,22],Ge=[1,145],Ue=[1,8,9,61],N=[1,8,9,22,48,60,61,82,86,87,88,89,90],Ne={trace:A(function(){},"trace"),yy:{},symbols_:{error:2,start:3,mermaidDoc:4,statements:5,graphConfig:6,CLASS_DIAGRAM:7,NEWLINE:8,EOF:9,statement:10,classLabel:11,SQS:12,STR:13,SQE:14,namespaceName:15,alphaNumToken:16,classLiteralName:17,DOT:18,className:19,GENERICTYPE:20,relationStatement:21,LABEL:22,namespaceStatement:23,classStatement:24,memberStatement:25,annotationStatement:26,clickStatement:27,styleStatement:28,cssClassStatement:29,noteStatement:30,classDefStatement:31,direction:32,acc_title:33,acc_title_value:34,acc_descr:35,acc_descr_value:36,acc_descr_multiline_value:37,namespaceIdentifier:38,STRUCT_START:39,classStatements:40,STRUCT_STOP:41,NAMESPACE:42,classIdentifier:43,STYLE_SEPARATOR:44,members:45,CLASS:46,emptyBody:47,SPACE:48,ANNOTATION_START:49,ANNOTATION_END:50,MEMBER:51,SEPARATOR:52,relation:53,NOTE_FOR:54,noteText:55,NOTE:56,CLASSDEF:57,classList:58,stylesOpt:59,ALPHA:60,COMMA:61,direction_tb:62,direction_bt:63,direction_rl:64,direction_lr:65,relationType:66,lineType:67,AGGREGATION:68,EXTENSION:69,COMPOSITION:70,DEPENDENCY:71,LOLLIPOP:72,LINE:73,DOTTED_LINE:74,CALLBACK:75,LINK:76,LINK_TARGET:77,CLICK:78,CALLBACK_NAME:79,CALLBACK_ARGS:80,HREF:81,STYLE:82,CSSCLASS:83,style:84,styleComponent:85,NUM:86,COLON:87,UNIT:88,BRKT:89,PCT:90,commentToken:91,textToken:92,graphCodeTokens:93,textNoTagsToken:94,TAGSTART:95,TAGEND:96,"==":97,"--":98,DEFAULT:99,MINUS:100,keywords:101,UNICODE_TEXT:102,BQUOTE_STR:103,$accept:0,$end:1},terminals_:{2:"error",7:"CLASS_DIAGRAM",8:"NEWLINE",9:"EOF",12:"SQS",13:"STR",14:"SQE",18:"DOT",20:"GENERICTYPE",22:"LABEL",33:"acc_title",34:"acc_title_value",35:"acc_descr",36:"acc_descr_value",37:"acc_descr_multiline_value",39:"STRUCT_START",41:"STRUCT_STOP",42:"NAMESPACE",44:"STYLE_SEPARATOR",46:"CLASS",48:"SPACE",49:"ANNOTATION_START",50:"ANNOTATION_END",51:"MEMBER",52:"SEPARATOR",54:"NOTE_FOR",56:"NOTE",57:"CLASSDEF",60:"ALPHA",61:"COMMA",62:"direction_tb",63:"direction_bt",64:"direction_rl",65:"direction_lr",68:"AGGREGATION",69:"EXTENSION",70:"COMPOSITION",71:"DEPENDENCY",72:"LOLLIPOP",73:"LINE",74:"DOTTED_LINE",75:"CALLBACK",76:"LINK",77:"LINK_TARGET",78:"CLICK",79:"CALLBACK_NAME",80:"CALLBACK_ARGS",81:"HREF",82:"STYLE",83:"CSSCLASS",86:"NUM",87:"COLON",88:"UNIT",89:"BRKT",90:"PCT",93:"graphCodeTokens",95:"TAGSTART",96:"TAGEND",97:"==",98:"--",99:"DEFAULT",100:"MINUS",101:"keywords",102:"UNICODE_TEXT",103:"BQUOTE_STR"},productions_:[0,[3,1],[3,1],[4,1],[6,4],[5,1],[5,2],[5,3],[11,3],[15,1],[15,1],[15,3],[15,2],[19,1],[19,3],[19,1],[19,2],[19,2],[19,2],[10,1],[10,2],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,2],[10,2],[10,1],[23,4],[23,5],[38,2],[40,1],[40,2],[40,3],[24,1],[24,3],[24,4],[24,3],[24,6],[43,2],[43,3],[47,0],[47,2],[47,2],[26,4],[45,1],[45,2],[25,1],[25,2],[25,1],[25,1],[21,3],[21,4],[21,4],[21,5],[30,3],[30,2],[31,3],[58,1],[58,3],[32,1],[32,1],[32,1],[32,1],[53,3],[53,2],[53,2],[53,1],[66,1],[66,1],[66,1],[66,1],[66,1],[67,1],[67,1],[27,3],[27,4],[27,3],[27,4],[27,4],[27,5],[27,3],[27,4],[27,4],[27,5],[27,4],[27,5],[27,5],[27,6],[28,3],[29,3],[59,1],[59,3],[84,1],[84,2],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[91,1],[91,1],[92,1],[92,1],[92,1],[92,1],[92,1],[92,1],[92,1],[94,1],[94,1],[94,1],[94,1],[16,1],[16,1],[16,1],[16,1],[17,1],[55,1]],performAction:A(function(c,o,d,r,g,e,$){var t=e.length-1;switch(g){case 8:this.$=e[t-1];break;case 9:case 10:case 13:case 15:this.$=e[t];break;case 11:case 14:this.$=e[t-2]+"."+e[t];break;case 12:case 16:this.$=e[t-1]+e[t];break;case 17:case 18:this.$=e[t-1]+"~"+e[t]+"~";break;case 19:r.addRelation(e[t]);break;case 20:e[t-1].title=r.cleanupLabel(e[t]),r.addRelation(e[t-1]);break;case 31:this.$=e[t].trim(),r.setAccTitle(this.$);break;case 32:case 33:this.$=e[t].trim(),r.setAccDescription(this.$);break;case 34:r.addClassesToNamespace(e[t-3],e[t-1]);break;case 35:r.addClassesToNamespace(e[t-4],e[t-1]);break;case 36:this.$=e[t],r.addNamespace(e[t]);break;case 37:this.$=[e[t]];break;case 38:this.$=[e[t-1]];break;case 39:e[t].unshift(e[t-2]),this.$=e[t];break;case 41:r.setCssClass(e[t-2],e[t]);break;case 42:r.addMembers(e[t-3],e[t-1]);break;case 44:r.setCssClass(e[t-5],e[t-3]),r.addMembers(e[t-5],e[t-1]);break;case 45:this.$=e[t],r.addClass(e[t]);break;case 46:this.$=e[t-1],r.addClass(e[t-1]),r.setClassLabel(e[t-1],e[t]);break;case 50:r.addAnnotation(e[t],e[t-2]);break;case 51:case 64:this.$=[e[t]];break;case 52:e[t].push(e[t-1]),this.$=e[t];break;case 53:break;case 54:r.addMember(e[t-1],r.cleanupLabel(e[t]));break;case 55:break;case 56:break;case 57:this.$={id1:e[t-2],id2:e[t],relation:e[t-1],relationTitle1:"none",relationTitle2:"none"};break;case 58:this.$={id1:e[t-3],id2:e[t],relation:e[t-1],relationTitle1:e[t-2],relationTitle2:"none"};break;case 59:this.$={id1:e[t-3],id2:e[t],relation:e[t-2],relationTitle1:"none",relationTitle2:e[t-1]};break;case 60:this.$={id1:e[t-4],id2:e[t],relation:e[t-2],relationTitle1:e[t-3],relationTitle2:e[t-1]};break;case 61:r.addNote(e[t],e[t-1]);break;case 62:r.addNote(e[t]);break;case 63:this.$=e[t-2],r.defineClass(e[t-1],e[t]);break;case 65:this.$=e[t-2].concat([e[t]]);break;case 66:r.setDirection("TB");break;case 67:r.setDirection("BT");break;case 68:r.setDirection("RL");break;case 69:r.setDirection("LR");break;case 70:this.$={type1:e[t-2],type2:e[t],lineType:e[t-1]};break;case 71:this.$={type1:"none",type2:e[t],lineType:e[t-1]};break;case 72:this.$={type1:e[t-1],type2:"none",lineType:e[t]};break;case 73:this.$={type1:"none",type2:"none",lineType:e[t]};break;case 74:this.$=r.relationType.AGGREGATION;break;case 75:this.$=r.relationType.EXTENSION;break;case 76:this.$=r.relationType.COMPOSITION;break;case 77:this.$=r.relationType.DEPENDENCY;break;case 78:this.$=r.relationType.LOLLIPOP;break;case 79:this.$=r.lineType.LINE;break;case 80:this.$=r.lineType.DOTTED_LINE;break;case 81:case 87:this.$=e[t-2],r.setClickEvent(e[t-1],e[t]);break;case 82:case 88:this.$=e[t-3],r.setClickEvent(e[t-2],e[t-1]),r.setTooltip(e[t-2],e[t]);break;case 83:this.$=e[t-2],r.setLink(e[t-1],e[t]);break;case 84:this.$=e[t-3],r.setLink(e[t-2],e[t-1],e[t]);break;case 85:this.$=e[t-3],r.setLink(e[t-2],e[t-1]),r.setTooltip(e[t-2],e[t]);break;case 86:this.$=e[t-4],r.setLink(e[t-3],e[t-2],e[t]),r.setTooltip(e[t-3],e[t-1]);break;case 89:this.$=e[t-3],r.setClickEvent(e[t-2],e[t-1],e[t]);break;case 90:this.$=e[t-4],r.setClickEvent(e[t-3],e[t-2],e[t-1]),r.setTooltip(e[t-3],e[t]);break;case 91:this.$=e[t-3],r.setLink(e[t-2],e[t]);break;case 92:this.$=e[t-4],r.setLink(e[t-3],e[t-1],e[t]);break;case 93:this.$=e[t-4],r.setLink(e[t-3],e[t-1]),r.setTooltip(e[t-3],e[t]);break;case 94:this.$=e[t-5],r.setLink(e[t-4],e[t-2],e[t]),r.setTooltip(e[t-4],e[t-1]);break;case 95:this.$=e[t-2],r.setCssStyle(e[t-1],e[t]);break;case 96:r.setCssClass(e[t-1],e[t]);break;case 97:this.$=[e[t]];break;case 98:e[t-2].push(e[t]),this.$=e[t-2];break;case 100:this.$=e[t-1]+e[t];break}},"anonymous"),table:[{3:1,4:2,5:3,6:4,7:[1,6],10:5,16:39,17:40,19:21,21:7,23:8,24:9,25:10,26:11,27:12,28:13,29:14,30:15,31:16,32:17,33:i,35:a,37:u,38:22,42:l,43:23,46:n,49:p,51:f,52:C,54:B,56:L,57:Ae,60:m,62:fe,63:ge,64:Ce,65:me,75:be,76:Ee,78:ye,82:Te,83:ke,86:b,100:E,102:y,103:T},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,3]},s(De,[2,5],{8:[1,48]}),{8:[1,49]},s(h,[2,19],{22:[1,50]}),s(h,[2,21]),s(h,[2,22]),s(h,[2,23]),s(h,[2,24]),s(h,[2,25]),s(h,[2,26]),s(h,[2,27]),s(h,[2,28]),s(h,[2,29]),s(h,[2,30]),{34:[1,51]},{36:[1,52]},s(h,[2,33]),s(h,[2,53],{53:53,66:56,67:57,13:[1,54],22:[1,55],68:te,69:se,70:ie,71:ae,72:ne,73:Fe,74:Be}),{39:[1,65]},s(z,[2,40],{39:[1,67],44:[1,66]}),s(h,[2,55]),s(h,[2,56]),{16:68,60:m,86:b,100:E,102:y},{16:39,17:40,19:69,60:m,86:b,100:E,102:y,103:T},{16:39,17:40,19:70,60:m,86:b,100:E,102:y,103:T},{16:39,17:40,19:71,60:m,86:b,100:E,102:y,103:T},{60:[1,72]},{13:[1,73]},{16:39,17:40,19:74,60:m,86:b,100:E,102:y,103:T},{13:Pe,55:75},{58:77,60:[1,78]},s(h,[2,66]),s(h,[2,67]),s(h,[2,68]),s(h,[2,69]),s(P,[2,13],{16:39,17:40,19:80,18:[1,79],20:[1,81],60:m,86:b,100:E,102:y,103:T}),s(P,[2,15],{20:[1,82]}),{15:83,16:84,17:85,60:m,86:b,100:E,102:y,103:T},{16:39,17:40,19:86,60:m,86:b,100:E,102:y,103:T},s(re,[2,123]),s(re,[2,124]),s(re,[2,125]),s(re,[2,126]),s([1,8,9,12,13,20,22,39,41,44,68,69,70,71,72,73,74,79,81],[2,127]),s(De,[2,6],{10:5,21:7,23:8,24:9,25:10,26:11,27:12,28:13,29:14,30:15,31:16,32:17,19:21,38:22,43:23,16:39,17:40,5:87,33:i,35:a,37:u,42:l,46:n,49:p,51:f,52:C,54:B,56:L,57:Ae,60:m,62:fe,63:ge,64:Ce,65:me,75:be,76:Ee,78:ye,82:Te,83:ke,86:b,100:E,102:y,103:T}),{5:88,10:5,16:39,17:40,19:21,21:7,23:8,24:9,25:10,26:11,27:12,28:13,29:14,30:15,31:16,32:17,33:i,35:a,37:u,38:22,42:l,43:23,46:n,49:p,51:f,52:C,54:B,56:L,57:Ae,60:m,62:fe,63:ge,64:Ce,65:me,75:be,76:Ee,78:ye,82:Te,83:ke,86:b,100:E,102:y,103:T},s(h,[2,20]),s(h,[2,31]),s(h,[2,32]),{13:[1,90],16:39,17:40,19:89,60:m,86:b,100:E,102:y,103:T},{53:91,66:56,67:57,68:te,69:se,70:ie,71:ae,72:ne,73:Fe,74:Be},s(h,[2,54]),{67:92,73:Fe,74:Be},s(ue,[2,73],{66:93,68:te,69:se,70:ie,71:ae,72:ne}),s(K,[2,74]),s(K,[2,75]),s(K,[2,76]),s(K,[2,77]),s(K,[2,78]),s(Me,[2,79]),s(Me,[2,80]),{8:[1,95],24:96,40:94,43:23,46:n},{16:97,60:m,86:b,100:E,102:y},{41:[1,99],45:98,51:_e},{50:[1,101]},{13:[1,102]},{13:[1,103]},{79:[1,104],81:[1,105]},{22:Y,48:Q,59:106,60:W,82:j,84:107,85:108,86:X,87:q,88:H,89:J,90:Z},{60:[1,118]},{13:Pe,55:119},s(h,[2,62]),s(h,[2,128]),{22:Y,48:Q,59:120,60:W,61:[1,121],82:j,84:107,85:108,86:X,87:q,88:H,89:J,90:Z},s(Re,[2,64]),{16:39,17:40,19:122,60:m,86:b,100:E,102:y,103:T},s(P,[2,16]),s(P,[2,17]),s(P,[2,18]),{39:[2,36]},{15:124,16:84,17:85,18:[1,123],39:[2,9],60:m,86:b,100:E,102:y,103:T},{39:[2,10]},s(Se,[2,45],{11:125,12:[1,126]}),s(De,[2,7]),{9:[1,127]},s(le,[2,57]),{16:39,17:40,19:128,60:m,86:b,100:E,102:y,103:T},{13:[1,130],16:39,17:40,19:129,60:m,86:b,100:E,102:y,103:T},s(ue,[2,72],{66:131,68:te,69:se,70:ie,71:ae,72:ne}),s(ue,[2,71]),{41:[1,132]},{24:96,40:133,43:23,46:n},{8:[1,134],41:[2,37]},s(z,[2,41],{39:[1,135]}),{41:[1,136]},s(z,[2,43]),{41:[2,51],45:137,51:_e},{16:39,17:40,19:138,60:m,86:b,100:E,102:y,103:T},s(h,[2,81],{13:[1,139]}),s(h,[2,83],{13:[1,141],77:[1,140]}),s(h,[2,87],{13:[1,142],80:[1,143]}),{13:[1,144]},s(h,[2,95],{61:Ge}),s(Ue,[2,97],{85:146,22:Y,48:Q,60:W,82:j,86:X,87:q,88:H,89:J,90:Z}),s(N,[2,99]),s(N,[2,101]),s(N,[2,102]),s(N,[2,103]),s(N,[2,104]),s(N,[2,105]),s(N,[2,106]),s(N,[2,107]),s(N,[2,108]),s(N,[2,109]),s(h,[2,96]),s(h,[2,61]),s(h,[2,63],{61:Ge}),{60:[1,147]},s(P,[2,14]),{15:148,16:84,17:85,60:m,86:b,100:E,102:y,103:T},{39:[2,12]},s(Se,[2,46]),{13:[1,149]},{1:[2,4]},s(le,[2,59]),s(le,[2,58]),{16:39,17:40,19:150,60:m,86:b,100:E,102:y,103:T},s(ue,[2,70]),s(h,[2,34]),{41:[1,151]},{24:96,40:152,41:[2,38],43:23,46:n},{45:153,51:_e},s(z,[2,42]),{41:[2,52]},s(h,[2,50]),s(h,[2,82]),s(h,[2,84]),s(h,[2,85],{77:[1,154]}),s(h,[2,88]),s(h,[2,89],{13:[1,155]}),s(h,[2,91],{13:[1,157],77:[1,156]}),{22:Y,48:Q,60:W,82:j,84:158,85:108,86:X,87:q,88:H,89:J,90:Z},s(N,[2,100]),s(Re,[2,65]),{39:[2,11]},{14:[1,159]},s(le,[2,60]),s(h,[2,35]),{41:[2,39]},{41:[1,160]},s(h,[2,86]),s(h,[2,90]),s(h,[2,92]),s(h,[2,93],{77:[1,161]}),s(Ue,[2,98],{85:146,22:Y,48:Q,60:W,82:j,86:X,87:q,88:H,89:J,90:Z}),s(Se,[2,8]),s(z,[2,44]),s(h,[2,94])],defaultActions:{2:[2,1],3:[2,2],4:[2,3],83:[2,36],85:[2,10],124:[2,12],127:[2,4],137:[2,52],148:[2,11],152:[2,39]},parseError:A(function(c,o){if(o.recoverable)this.trace(c);else{var d=new Error(c);throw d.hash=o,d}},"parseError"),parse:A(function(c){var o=this,d=[0],r=[],g=[null],e=[],$=this.table,t="",oe=0,ze=0,He=2,Ke=1,Je=e.slice.call(arguments,1),k=Object.create(this.lexer),O={yy:{}};for(var Le in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Le)&&(O.yy[Le]=this.yy[Le]);k.setInput(c,O.yy),O.yy.lexer=k,O.yy.parser=this,typeof k.yylloc>"u"&&(k.yylloc={});var xe=k.yylloc;e.push(xe);var Ze=k.options&&k.options.ranges;typeof O.yy.parseError=="function"?this.parseError=O.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function $e(_){d.length=d.length-2*_,g.length=g.length-_,e.length=e.length-_}A($e,"popStack");function Ye(){var _;return _=r.pop()||k.lex()||Ke,typeof _!="number"&&(_ instanceof Array&&(r=_,_=r.pop()),_=o.symbols_[_]||_),_}A(Ye,"lex");for(var F,w,S,ve,M={},he,x,Qe,de;;){if(w=d[d.length-1],this.defaultActions[w]?S=this.defaultActions[w]:((F===null||typeof F>"u")&&(F=Ye()),S=$[w]&&$[w][F]),typeof S>"u"||!S.length||!S[0]){var Ie="";de=[];for(he in $[w])this.terminals_[he]&&he>He&&de.push("'"+this.terminals_[he]+"'");k.showPosition?Ie="Parse error on line "+(oe+1)+`:
1
+ import{g as et}from"./chunk-FMBD7UC4-ChHVMdVq.js";import{g as tt}from"./chunk-55IACEB6-CO_GT_87.js";import{s as st}from"./chunk-QN33PNHL-DKEBwj3f.js";import{_ as A,l as Oe,c as D,p as it,r as at,u as we,d as ee,b as nt,a as rt,s as ut,g as lt,q as ct,t as ot,k as v,z as ht,y as dt,i as pt,a8 as R}from"./mermaid.core-BdxLLjl2.js";var Ve=(function(){var s=A(function(I,c,o,d){for(o=o||{},d=I.length;d--;o[I[d]]=c);return o},"o"),i=[1,18],a=[1,19],u=[1,20],l=[1,41],n=[1,42],p=[1,26],f=[1,24],C=[1,25],B=[1,32],L=[1,33],Ae=[1,34],m=[1,45],fe=[1,35],ge=[1,36],Ce=[1,37],me=[1,38],be=[1,27],Ee=[1,28],ye=[1,29],Te=[1,30],ke=[1,31],b=[1,44],E=[1,46],y=[1,43],T=[1,47],De=[1,9],h=[1,8,9],te=[1,58],se=[1,59],ie=[1,60],ae=[1,61],ne=[1,62],Fe=[1,63],Be=[1,64],z=[1,8,9,41],Pe=[1,76],P=[1,8,9,12,13,22,39,41,44,68,69,70,71,72,73,74,79,81],re=[1,8,9,12,13,18,20,22,39,41,44,50,60,68,69,70,71,72,73,74,79,81,86,100,102,103],ue=[13,60,86,100,102,103],K=[13,60,73,74,86,100,102,103],Me=[13,60,68,69,70,71,72,86,100,102,103],_e=[1,100],Y=[1,117],Q=[1,113],W=[1,109],j=[1,115],X=[1,110],q=[1,111],H=[1,112],J=[1,114],Z=[1,116],Re=[22,48,60,61,82,86,87,88,89,90],Se=[1,8,9,39,41,44],le=[1,8,9,22],Ge=[1,145],Ue=[1,8,9,61],N=[1,8,9,22,48,60,61,82,86,87,88,89,90],Ne={trace:A(function(){},"trace"),yy:{},symbols_:{error:2,start:3,mermaidDoc:4,statements:5,graphConfig:6,CLASS_DIAGRAM:7,NEWLINE:8,EOF:9,statement:10,classLabel:11,SQS:12,STR:13,SQE:14,namespaceName:15,alphaNumToken:16,classLiteralName:17,DOT:18,className:19,GENERICTYPE:20,relationStatement:21,LABEL:22,namespaceStatement:23,classStatement:24,memberStatement:25,annotationStatement:26,clickStatement:27,styleStatement:28,cssClassStatement:29,noteStatement:30,classDefStatement:31,direction:32,acc_title:33,acc_title_value:34,acc_descr:35,acc_descr_value:36,acc_descr_multiline_value:37,namespaceIdentifier:38,STRUCT_START:39,classStatements:40,STRUCT_STOP:41,NAMESPACE:42,classIdentifier:43,STYLE_SEPARATOR:44,members:45,CLASS:46,emptyBody:47,SPACE:48,ANNOTATION_START:49,ANNOTATION_END:50,MEMBER:51,SEPARATOR:52,relation:53,NOTE_FOR:54,noteText:55,NOTE:56,CLASSDEF:57,classList:58,stylesOpt:59,ALPHA:60,COMMA:61,direction_tb:62,direction_bt:63,direction_rl:64,direction_lr:65,relationType:66,lineType:67,AGGREGATION:68,EXTENSION:69,COMPOSITION:70,DEPENDENCY:71,LOLLIPOP:72,LINE:73,DOTTED_LINE:74,CALLBACK:75,LINK:76,LINK_TARGET:77,CLICK:78,CALLBACK_NAME:79,CALLBACK_ARGS:80,HREF:81,STYLE:82,CSSCLASS:83,style:84,styleComponent:85,NUM:86,COLON:87,UNIT:88,BRKT:89,PCT:90,commentToken:91,textToken:92,graphCodeTokens:93,textNoTagsToken:94,TAGSTART:95,TAGEND:96,"==":97,"--":98,DEFAULT:99,MINUS:100,keywords:101,UNICODE_TEXT:102,BQUOTE_STR:103,$accept:0,$end:1},terminals_:{2:"error",7:"CLASS_DIAGRAM",8:"NEWLINE",9:"EOF",12:"SQS",13:"STR",14:"SQE",18:"DOT",20:"GENERICTYPE",22:"LABEL",33:"acc_title",34:"acc_title_value",35:"acc_descr",36:"acc_descr_value",37:"acc_descr_multiline_value",39:"STRUCT_START",41:"STRUCT_STOP",42:"NAMESPACE",44:"STYLE_SEPARATOR",46:"CLASS",48:"SPACE",49:"ANNOTATION_START",50:"ANNOTATION_END",51:"MEMBER",52:"SEPARATOR",54:"NOTE_FOR",56:"NOTE",57:"CLASSDEF",60:"ALPHA",61:"COMMA",62:"direction_tb",63:"direction_bt",64:"direction_rl",65:"direction_lr",68:"AGGREGATION",69:"EXTENSION",70:"COMPOSITION",71:"DEPENDENCY",72:"LOLLIPOP",73:"LINE",74:"DOTTED_LINE",75:"CALLBACK",76:"LINK",77:"LINK_TARGET",78:"CLICK",79:"CALLBACK_NAME",80:"CALLBACK_ARGS",81:"HREF",82:"STYLE",83:"CSSCLASS",86:"NUM",87:"COLON",88:"UNIT",89:"BRKT",90:"PCT",93:"graphCodeTokens",95:"TAGSTART",96:"TAGEND",97:"==",98:"--",99:"DEFAULT",100:"MINUS",101:"keywords",102:"UNICODE_TEXT",103:"BQUOTE_STR"},productions_:[0,[3,1],[3,1],[4,1],[6,4],[5,1],[5,2],[5,3],[11,3],[15,1],[15,1],[15,3],[15,2],[19,1],[19,3],[19,1],[19,2],[19,2],[19,2],[10,1],[10,2],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,2],[10,2],[10,1],[23,4],[23,5],[38,2],[40,1],[40,2],[40,3],[24,1],[24,3],[24,4],[24,3],[24,6],[43,2],[43,3],[47,0],[47,2],[47,2],[26,4],[45,1],[45,2],[25,1],[25,2],[25,1],[25,1],[21,3],[21,4],[21,4],[21,5],[30,3],[30,2],[31,3],[58,1],[58,3],[32,1],[32,1],[32,1],[32,1],[53,3],[53,2],[53,2],[53,1],[66,1],[66,1],[66,1],[66,1],[66,1],[67,1],[67,1],[27,3],[27,4],[27,3],[27,4],[27,4],[27,5],[27,3],[27,4],[27,4],[27,5],[27,4],[27,5],[27,5],[27,6],[28,3],[29,3],[59,1],[59,3],[84,1],[84,2],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[91,1],[91,1],[92,1],[92,1],[92,1],[92,1],[92,1],[92,1],[92,1],[94,1],[94,1],[94,1],[94,1],[16,1],[16,1],[16,1],[16,1],[17,1],[55,1]],performAction:A(function(c,o,d,r,g,e,$){var t=e.length-1;switch(g){case 8:this.$=e[t-1];break;case 9:case 10:case 13:case 15:this.$=e[t];break;case 11:case 14:this.$=e[t-2]+"."+e[t];break;case 12:case 16:this.$=e[t-1]+e[t];break;case 17:case 18:this.$=e[t-1]+"~"+e[t]+"~";break;case 19:r.addRelation(e[t]);break;case 20:e[t-1].title=r.cleanupLabel(e[t]),r.addRelation(e[t-1]);break;case 31:this.$=e[t].trim(),r.setAccTitle(this.$);break;case 32:case 33:this.$=e[t].trim(),r.setAccDescription(this.$);break;case 34:r.addClassesToNamespace(e[t-3],e[t-1]);break;case 35:r.addClassesToNamespace(e[t-4],e[t-1]);break;case 36:this.$=e[t],r.addNamespace(e[t]);break;case 37:this.$=[e[t]];break;case 38:this.$=[e[t-1]];break;case 39:e[t].unshift(e[t-2]),this.$=e[t];break;case 41:r.setCssClass(e[t-2],e[t]);break;case 42:r.addMembers(e[t-3],e[t-1]);break;case 44:r.setCssClass(e[t-5],e[t-3]),r.addMembers(e[t-5],e[t-1]);break;case 45:this.$=e[t],r.addClass(e[t]);break;case 46:this.$=e[t-1],r.addClass(e[t-1]),r.setClassLabel(e[t-1],e[t]);break;case 50:r.addAnnotation(e[t],e[t-2]);break;case 51:case 64:this.$=[e[t]];break;case 52:e[t].push(e[t-1]),this.$=e[t];break;case 53:break;case 54:r.addMember(e[t-1],r.cleanupLabel(e[t]));break;case 55:break;case 56:break;case 57:this.$={id1:e[t-2],id2:e[t],relation:e[t-1],relationTitle1:"none",relationTitle2:"none"};break;case 58:this.$={id1:e[t-3],id2:e[t],relation:e[t-1],relationTitle1:e[t-2],relationTitle2:"none"};break;case 59:this.$={id1:e[t-3],id2:e[t],relation:e[t-2],relationTitle1:"none",relationTitle2:e[t-1]};break;case 60:this.$={id1:e[t-4],id2:e[t],relation:e[t-2],relationTitle1:e[t-3],relationTitle2:e[t-1]};break;case 61:r.addNote(e[t],e[t-1]);break;case 62:r.addNote(e[t]);break;case 63:this.$=e[t-2],r.defineClass(e[t-1],e[t]);break;case 65:this.$=e[t-2].concat([e[t]]);break;case 66:r.setDirection("TB");break;case 67:r.setDirection("BT");break;case 68:r.setDirection("RL");break;case 69:r.setDirection("LR");break;case 70:this.$={type1:e[t-2],type2:e[t],lineType:e[t-1]};break;case 71:this.$={type1:"none",type2:e[t],lineType:e[t-1]};break;case 72:this.$={type1:e[t-1],type2:"none",lineType:e[t]};break;case 73:this.$={type1:"none",type2:"none",lineType:e[t]};break;case 74:this.$=r.relationType.AGGREGATION;break;case 75:this.$=r.relationType.EXTENSION;break;case 76:this.$=r.relationType.COMPOSITION;break;case 77:this.$=r.relationType.DEPENDENCY;break;case 78:this.$=r.relationType.LOLLIPOP;break;case 79:this.$=r.lineType.LINE;break;case 80:this.$=r.lineType.DOTTED_LINE;break;case 81:case 87:this.$=e[t-2],r.setClickEvent(e[t-1],e[t]);break;case 82:case 88:this.$=e[t-3],r.setClickEvent(e[t-2],e[t-1]),r.setTooltip(e[t-2],e[t]);break;case 83:this.$=e[t-2],r.setLink(e[t-1],e[t]);break;case 84:this.$=e[t-3],r.setLink(e[t-2],e[t-1],e[t]);break;case 85:this.$=e[t-3],r.setLink(e[t-2],e[t-1]),r.setTooltip(e[t-2],e[t]);break;case 86:this.$=e[t-4],r.setLink(e[t-3],e[t-2],e[t]),r.setTooltip(e[t-3],e[t-1]);break;case 89:this.$=e[t-3],r.setClickEvent(e[t-2],e[t-1],e[t]);break;case 90:this.$=e[t-4],r.setClickEvent(e[t-3],e[t-2],e[t-1]),r.setTooltip(e[t-3],e[t]);break;case 91:this.$=e[t-3],r.setLink(e[t-2],e[t]);break;case 92:this.$=e[t-4],r.setLink(e[t-3],e[t-1],e[t]);break;case 93:this.$=e[t-4],r.setLink(e[t-3],e[t-1]),r.setTooltip(e[t-3],e[t]);break;case 94:this.$=e[t-5],r.setLink(e[t-4],e[t-2],e[t]),r.setTooltip(e[t-4],e[t-1]);break;case 95:this.$=e[t-2],r.setCssStyle(e[t-1],e[t]);break;case 96:r.setCssClass(e[t-1],e[t]);break;case 97:this.$=[e[t]];break;case 98:e[t-2].push(e[t]),this.$=e[t-2];break;case 100:this.$=e[t-1]+e[t];break}},"anonymous"),table:[{3:1,4:2,5:3,6:4,7:[1,6],10:5,16:39,17:40,19:21,21:7,23:8,24:9,25:10,26:11,27:12,28:13,29:14,30:15,31:16,32:17,33:i,35:a,37:u,38:22,42:l,43:23,46:n,49:p,51:f,52:C,54:B,56:L,57:Ae,60:m,62:fe,63:ge,64:Ce,65:me,75:be,76:Ee,78:ye,82:Te,83:ke,86:b,100:E,102:y,103:T},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,3]},s(De,[2,5],{8:[1,48]}),{8:[1,49]},s(h,[2,19],{22:[1,50]}),s(h,[2,21]),s(h,[2,22]),s(h,[2,23]),s(h,[2,24]),s(h,[2,25]),s(h,[2,26]),s(h,[2,27]),s(h,[2,28]),s(h,[2,29]),s(h,[2,30]),{34:[1,51]},{36:[1,52]},s(h,[2,33]),s(h,[2,53],{53:53,66:56,67:57,13:[1,54],22:[1,55],68:te,69:se,70:ie,71:ae,72:ne,73:Fe,74:Be}),{39:[1,65]},s(z,[2,40],{39:[1,67],44:[1,66]}),s(h,[2,55]),s(h,[2,56]),{16:68,60:m,86:b,100:E,102:y},{16:39,17:40,19:69,60:m,86:b,100:E,102:y,103:T},{16:39,17:40,19:70,60:m,86:b,100:E,102:y,103:T},{16:39,17:40,19:71,60:m,86:b,100:E,102:y,103:T},{60:[1,72]},{13:[1,73]},{16:39,17:40,19:74,60:m,86:b,100:E,102:y,103:T},{13:Pe,55:75},{58:77,60:[1,78]},s(h,[2,66]),s(h,[2,67]),s(h,[2,68]),s(h,[2,69]),s(P,[2,13],{16:39,17:40,19:80,18:[1,79],20:[1,81],60:m,86:b,100:E,102:y,103:T}),s(P,[2,15],{20:[1,82]}),{15:83,16:84,17:85,60:m,86:b,100:E,102:y,103:T},{16:39,17:40,19:86,60:m,86:b,100:E,102:y,103:T},s(re,[2,123]),s(re,[2,124]),s(re,[2,125]),s(re,[2,126]),s([1,8,9,12,13,20,22,39,41,44,68,69,70,71,72,73,74,79,81],[2,127]),s(De,[2,6],{10:5,21:7,23:8,24:9,25:10,26:11,27:12,28:13,29:14,30:15,31:16,32:17,19:21,38:22,43:23,16:39,17:40,5:87,33:i,35:a,37:u,42:l,46:n,49:p,51:f,52:C,54:B,56:L,57:Ae,60:m,62:fe,63:ge,64:Ce,65:me,75:be,76:Ee,78:ye,82:Te,83:ke,86:b,100:E,102:y,103:T}),{5:88,10:5,16:39,17:40,19:21,21:7,23:8,24:9,25:10,26:11,27:12,28:13,29:14,30:15,31:16,32:17,33:i,35:a,37:u,38:22,42:l,43:23,46:n,49:p,51:f,52:C,54:B,56:L,57:Ae,60:m,62:fe,63:ge,64:Ce,65:me,75:be,76:Ee,78:ye,82:Te,83:ke,86:b,100:E,102:y,103:T},s(h,[2,20]),s(h,[2,31]),s(h,[2,32]),{13:[1,90],16:39,17:40,19:89,60:m,86:b,100:E,102:y,103:T},{53:91,66:56,67:57,68:te,69:se,70:ie,71:ae,72:ne,73:Fe,74:Be},s(h,[2,54]),{67:92,73:Fe,74:Be},s(ue,[2,73],{66:93,68:te,69:se,70:ie,71:ae,72:ne}),s(K,[2,74]),s(K,[2,75]),s(K,[2,76]),s(K,[2,77]),s(K,[2,78]),s(Me,[2,79]),s(Me,[2,80]),{8:[1,95],24:96,40:94,43:23,46:n},{16:97,60:m,86:b,100:E,102:y},{41:[1,99],45:98,51:_e},{50:[1,101]},{13:[1,102]},{13:[1,103]},{79:[1,104],81:[1,105]},{22:Y,48:Q,59:106,60:W,82:j,84:107,85:108,86:X,87:q,88:H,89:J,90:Z},{60:[1,118]},{13:Pe,55:119},s(h,[2,62]),s(h,[2,128]),{22:Y,48:Q,59:120,60:W,61:[1,121],82:j,84:107,85:108,86:X,87:q,88:H,89:J,90:Z},s(Re,[2,64]),{16:39,17:40,19:122,60:m,86:b,100:E,102:y,103:T},s(P,[2,16]),s(P,[2,17]),s(P,[2,18]),{39:[2,36]},{15:124,16:84,17:85,18:[1,123],39:[2,9],60:m,86:b,100:E,102:y,103:T},{39:[2,10]},s(Se,[2,45],{11:125,12:[1,126]}),s(De,[2,7]),{9:[1,127]},s(le,[2,57]),{16:39,17:40,19:128,60:m,86:b,100:E,102:y,103:T},{13:[1,130],16:39,17:40,19:129,60:m,86:b,100:E,102:y,103:T},s(ue,[2,72],{66:131,68:te,69:se,70:ie,71:ae,72:ne}),s(ue,[2,71]),{41:[1,132]},{24:96,40:133,43:23,46:n},{8:[1,134],41:[2,37]},s(z,[2,41],{39:[1,135]}),{41:[1,136]},s(z,[2,43]),{41:[2,51],45:137,51:_e},{16:39,17:40,19:138,60:m,86:b,100:E,102:y,103:T},s(h,[2,81],{13:[1,139]}),s(h,[2,83],{13:[1,141],77:[1,140]}),s(h,[2,87],{13:[1,142],80:[1,143]}),{13:[1,144]},s(h,[2,95],{61:Ge}),s(Ue,[2,97],{85:146,22:Y,48:Q,60:W,82:j,86:X,87:q,88:H,89:J,90:Z}),s(N,[2,99]),s(N,[2,101]),s(N,[2,102]),s(N,[2,103]),s(N,[2,104]),s(N,[2,105]),s(N,[2,106]),s(N,[2,107]),s(N,[2,108]),s(N,[2,109]),s(h,[2,96]),s(h,[2,61]),s(h,[2,63],{61:Ge}),{60:[1,147]},s(P,[2,14]),{15:148,16:84,17:85,60:m,86:b,100:E,102:y,103:T},{39:[2,12]},s(Se,[2,46]),{13:[1,149]},{1:[2,4]},s(le,[2,59]),s(le,[2,58]),{16:39,17:40,19:150,60:m,86:b,100:E,102:y,103:T},s(ue,[2,70]),s(h,[2,34]),{41:[1,151]},{24:96,40:152,41:[2,38],43:23,46:n},{45:153,51:_e},s(z,[2,42]),{41:[2,52]},s(h,[2,50]),s(h,[2,82]),s(h,[2,84]),s(h,[2,85],{77:[1,154]}),s(h,[2,88]),s(h,[2,89],{13:[1,155]}),s(h,[2,91],{13:[1,157],77:[1,156]}),{22:Y,48:Q,60:W,82:j,84:158,85:108,86:X,87:q,88:H,89:J,90:Z},s(N,[2,100]),s(Re,[2,65]),{39:[2,11]},{14:[1,159]},s(le,[2,60]),s(h,[2,35]),{41:[2,39]},{41:[1,160]},s(h,[2,86]),s(h,[2,90]),s(h,[2,92]),s(h,[2,93],{77:[1,161]}),s(Ue,[2,98],{85:146,22:Y,48:Q,60:W,82:j,86:X,87:q,88:H,89:J,90:Z}),s(Se,[2,8]),s(z,[2,44]),s(h,[2,94])],defaultActions:{2:[2,1],3:[2,2],4:[2,3],83:[2,36],85:[2,10],124:[2,12],127:[2,4],137:[2,52],148:[2,11],152:[2,39]},parseError:A(function(c,o){if(o.recoverable)this.trace(c);else{var d=new Error(c);throw d.hash=o,d}},"parseError"),parse:A(function(c){var o=this,d=[0],r=[],g=[null],e=[],$=this.table,t="",oe=0,ze=0,He=2,Ke=1,Je=e.slice.call(arguments,1),k=Object.create(this.lexer),O={yy:{}};for(var Le in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Le)&&(O.yy[Le]=this.yy[Le]);k.setInput(c,O.yy),O.yy.lexer=k,O.yy.parser=this,typeof k.yylloc>"u"&&(k.yylloc={});var xe=k.yylloc;e.push(xe);var Ze=k.options&&k.options.ranges;typeof O.yy.parseError=="function"?this.parseError=O.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function $e(_){d.length=d.length-2*_,g.length=g.length-_,e.length=e.length-_}A($e,"popStack");function Ye(){var _;return _=r.pop()||k.lex()||Ke,typeof _!="number"&&(_ instanceof Array&&(r=_,_=r.pop()),_=o.symbols_[_]||_),_}A(Ye,"lex");for(var F,w,S,ve,M={},he,x,Qe,de;;){if(w=d[d.length-1],this.defaultActions[w]?S=this.defaultActions[w]:((F===null||typeof F>"u")&&(F=Ye()),S=$[w]&&$[w][F]),typeof S>"u"||!S.length||!S[0]){var Ie="";de=[];for(he in $[w])this.terminals_[he]&&he>He&&de.push("'"+this.terminals_[he]+"'");k.showPosition?Ie="Parse error on line "+(oe+1)+`:
2
2
  `+k.showPosition()+`
3
3
  Expecting `+de.join(", ")+", got '"+(this.terminals_[F]||F)+"'":Ie="Parse error on line "+(oe+1)+": Unexpected "+(F==Ke?"end of input":"'"+(this.terminals_[F]||F)+"'"),this.parseError(Ie,{text:k.match,token:this.terminals_[F]||F,line:k.yylineno,loc:xe,expected:de})}if(S[0]instanceof Array&&S.length>1)throw new Error("Parse Error: multiple actions possible at state: "+w+", token: "+F);switch(S[0]){case 1:d.push(F),g.push(k.yytext),e.push(k.yylloc),d.push(S[1]),F=null,ze=k.yyleng,t=k.yytext,oe=k.yylineno,xe=k.yylloc;break;case 2:if(x=this.productions_[S[1]][1],M.$=g[g.length-x],M._$={first_line:e[e.length-(x||1)].first_line,last_line:e[e.length-1].last_line,first_column:e[e.length-(x||1)].first_column,last_column:e[e.length-1].last_column},Ze&&(M._$.range=[e[e.length-(x||1)].range[0],e[e.length-1].range[1]]),ve=this.performAction.apply(M,[t,ze,oe,O.yy,S[1],g,e].concat(Je)),typeof ve<"u")return ve;x&&(d=d.slice(0,-1*x*2),g=g.slice(0,-1*x),e=e.slice(0,-1*x)),d.push(this.productions_[S[1]][0]),g.push(M.$),e.push(M._$),Qe=$[d[d.length-2]][d[d.length-1]],d.push(Qe);break;case 3:return!0}}return!0},"parse")},qe=(function(){var I={EOF:1,parseError:A(function(o,d){if(this.yy.parser)this.yy.parser.parseError(o,d);else throw new Error(o)},"parseError"),setInput:A(function(c,o){return this.yy=o||this.yy||{},this._input=c,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:A(function(){var c=this._input[0];this.yytext+=c,this.yyleng++,this.offset++,this.match+=c,this.matched+=c;var o=c.match(/(?:\r\n?|\n).*/g);return o?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),c},"input"),unput:A(function(c){var o=c.length,d=c.split(/(?:\r\n?|\n)/g);this._input=c+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-o),this.offset-=o;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),d.length-1&&(this.yylineno-=d.length-1);var g=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:d?(d.length===r.length?this.yylloc.first_column:0)+r[r.length-d.length].length-d[0].length:this.yylloc.first_column-o},this.options.ranges&&(this.yylloc.range=[g[0],g[0]+this.yyleng-o]),this.yyleng=this.yytext.length,this},"unput"),more:A(function(){return this._more=!0,this},"more"),reject:A(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
4
4
  `+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:A(function(c){this.unput(this.match.slice(c))},"less"),pastInput:A(function(){var c=this.matched.substr(0,this.matched.length-this.match.length);return(c.length>20?"...":"")+c.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:A(function(){var c=this.match;return c.length<20&&(c+=this._input.substr(0,20-c.length)),(c.substr(0,20)+(c.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:A(function(){var c=this.pastInput(),o=new Array(c.length+1).join("-");return c+this.upcomingInput()+`
@@ -163,4 +163,4 @@ g.classGroup line {
163
163
  }
164
164
  ${et()}
165
165
  `,"getStyles"),Dt=At,ft=A((s,i="TB")=>{if(!s.doc)return i;let a=i;for(const u of s.doc)u.stmt==="dir"&&(a=u.value);return a},"getDir"),gt=A(function(s,i){return i.db.getClasses()},"getClasses"),Ct=A(async function(s,i,a,u){Oe.info("REF0:"),Oe.info("Drawing class diagram (v3)",i);const{securityLevel:l,state:n,layout:p}=D(),f=u.db.getData(),C=tt(i,l);f.type=u.type,f.layoutAlgorithm=it(p),f.nodeSpacing=n?.nodeSpacing||50,f.rankSpacing=n?.rankSpacing||50,f.markers=["aggregation","extension","composition","dependency","lollipop"],f.diagramId=i,await at(f,C);const B=8;we.insertTitle(C,"classDiagramTitleText",n?.titleTopMargin??25,u.db.getDiagramTitle()),st(C,B,"classDiagram",n?.useMaxWidth??!0)},"draw"),Ft={getClasses:gt,draw:Ct,getDir:ft};export{kt as C,Tt as a,Ft as c,Dt as s};
166
- //# sourceMappingURL=chunk-B4BG7PRW-C2qQTBXm.js.map
166
+ //# sourceMappingURL=chunk-B4BG7PRW-CqfZTumF.js.map