@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,6 +1,6 @@
1
- import{j as n}from"./jsx-runtime-C5WNSv3b.js";import{r as i}from"./index-CqIc3cxq.js";import{u as U,c as Y,d as N,e as C,P as m,f as p,g as h,h as Z,i as J,D as Q,j as X}from"./tooltip-Chzzs4KB.js";import{h as ee,R as te,u as oe,F as ae}from"./index-C_KjwKVt.js";import{c as f,I as ne}from"./misc-DVYuZMjW.js";var D="Dialog",[E]=Y(D),[re,d]=E(D),b=e=>{const{__scopeDialog:t,children:o,open:r,defaultOpen:s,onOpenChange:a,modal:c=!0}=e,l=i.useRef(null),g=i.useRef(null),[v,y]=U({prop:r,defaultProp:s??!1,onChange:a,caller:D});return n.jsx(re,{scope:t,triggerRef:l,contentRef:g,contentId:N(),titleId:N(),descriptionId:N(),open:v,onOpenChange:y,onOpenToggle:i.useCallback(()=>y(K=>!K),[y]),modal:c,children:o})};b.displayName=D;var P="DialogTrigger",I=i.forwardRef((e,t)=>{const{__scopeDialog:o,...r}=e,s=d(P,o),a=C(t,s.triggerRef);return n.jsx(m.button,{type:"button","aria-haspopup":"dialog","aria-expanded":s.open,"aria-controls":s.contentId,"data-state":j(s.open),...r,ref:a,onClick:p(e.onClick,s.onOpenToggle)})});I.displayName=P;var R="DialogPortal",[se,O]=E(R,{forceMount:void 0}),T=e=>{const{__scopeDialog:t,forceMount:o,children:r,container:s}=e,a=d(R,t);return n.jsx(se,{scope:t,forceMount:o,children:i.Children.map(r,c=>n.jsx(h,{present:o||a.open,children:n.jsx(Z,{asChild:!0,container:s,children:c})}))})};T.displayName=R;var x="DialogOverlay",A=i.forwardRef((e,t)=>{const o=O(x,e.__scopeDialog),{forceMount:r=o.forceMount,...s}=e,a=d(x,e.__scopeDialog);return a.modal?n.jsx(h,{present:r||a.open,children:n.jsx(le,{...s,ref:t})}):null});A.displayName=x;var ie=J("DialogOverlay.RemoveScroll"),le=i.forwardRef((e,t)=>{const{__scopeDialog:o,...r}=e,s=d(x,o);return n.jsx(te,{as:ie,allowPinchZoom:!0,shards:[s.contentRef],children:n.jsx(m.div,{"data-state":j(s.open),...r,ref:t,style:{pointerEvents:"auto",...r.style}})})}),u="DialogContent",w=i.forwardRef((e,t)=>{const o=O(u,e.__scopeDialog),{forceMount:r=o.forceMount,...s}=e,a=d(u,e.__scopeDialog);return n.jsx(h,{present:r||a.open,children:a.modal?n.jsx(ce,{...s,ref:t}):n.jsx(de,{...s,ref:t})})});w.displayName=u;var ce=i.forwardRef((e,t)=>{const o=d(u,e.__scopeDialog),r=i.useRef(null),s=C(t,o.contentRef,r);return i.useEffect(()=>{const a=r.current;if(a)return ee(a)},[]),n.jsx(M,{...e,ref:s,trapFocus:o.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:p(e.onCloseAutoFocus,a=>{a.preventDefault(),o.triggerRef.current?.focus()}),onPointerDownOutside:p(e.onPointerDownOutside,a=>{const c=a.detail.originalEvent,l=c.button===0&&c.ctrlKey===!0;(c.button===2||l)&&a.preventDefault()}),onFocusOutside:p(e.onFocusOutside,a=>a.preventDefault())})}),de=i.forwardRef((e,t)=>{const o=d(u,e.__scopeDialog),r=i.useRef(!1),s=i.useRef(!1);return n.jsx(M,{...e,ref:t,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:a=>{e.onCloseAutoFocus?.(a),a.defaultPrevented||(r.current||o.triggerRef.current?.focus(),a.preventDefault()),r.current=!1,s.current=!1},onInteractOutside:a=>{e.onInteractOutside?.(a),a.defaultPrevented||(r.current=!0,a.detail.originalEvent.type==="pointerdown"&&(s.current=!0));const c=a.target;o.triggerRef.current?.contains(c)&&a.preventDefault(),a.detail.originalEvent.type==="focusin"&&s.current&&a.preventDefault()}})}),M=i.forwardRef((e,t)=>{const{__scopeDialog:o,trapFocus:r,onOpenAutoFocus:s,onCloseAutoFocus:a,...c}=e,l=d(u,o),g=i.useRef(null),v=C(t,g);return oe(),n.jsxs(n.Fragment,{children:[n.jsx(ae,{asChild:!0,loop:!0,trapped:r,onMountAutoFocus:s,onUnmountAutoFocus:a,children:n.jsx(Q,{role:"dialog",id:l.contentId,"aria-describedby":l.descriptionId,"aria-labelledby":l.titleId,"data-state":j(l.open),...c,ref:v,onDismiss:()=>l.onOpenChange(!1)})}),n.jsxs(n.Fragment,{children:[n.jsx(ue,{titleId:l.titleId}),n.jsx(ge,{contentRef:g,descriptionId:l.descriptionId})]})]})}),_="DialogTitle",F=i.forwardRef((e,t)=>{const{__scopeDialog:o,...r}=e,s=d(_,o);return n.jsx(m.h2,{id:s.titleId,...r,ref:t})});F.displayName=_;var S="DialogDescription",k=i.forwardRef((e,t)=>{const{__scopeDialog:o,...r}=e,s=d(S,o);return n.jsx(m.p,{id:s.descriptionId,...r,ref:t})});k.displayName=S;var $="DialogClose",W=i.forwardRef((e,t)=>{const{__scopeDialog:o,...r}=e,s=d($,o);return n.jsx(m.button,{type:"button",...r,ref:t,onClick:p(e.onClick,()=>s.onOpenChange(!1))})});W.displayName=$;function j(e){return e?"open":"closed"}var G="DialogTitleWarning",[Ie,L]=X(G,{contentName:u,titleName:_,docsSlug:"dialog"}),ue=({titleId:e})=>{const t=L(G),o=`\`${t.contentName}\` requires a \`${t.titleName}\` for the component to be accessible for screen reader users.
1
+ import{j as n}from"./jsx-runtime-C5WNSv3b.js";import{r as i}from"./index-CqIc3cxq.js";import{u as U,a as Y,b as N,d as C,P as m,e as p,f as h,g as Z,h as J,D as Q,l as X}from"./tooltip-Tlsyx2YO.js";import{h as ee,R as te,u as oe,F as ae}from"./index-ynYvVAOK.js";import{c as f,I as ne}from"./misc-W4055b-0.js";var D="Dialog",[j]=Y(D),[re,d]=j(D),E=e=>{const{__scopeDialog:t,children:o,open:r,defaultOpen:s,onOpenChange:a,modal:c=!0}=e,l=i.useRef(null),g=i.useRef(null),[v,y]=U({prop:r,defaultProp:s??!1,onChange:a,caller:D});return n.jsx(re,{scope:t,triggerRef:l,contentRef:g,contentId:N(),titleId:N(),descriptionId:N(),open:v,onOpenChange:y,onOpenToggle:i.useCallback(()=>y(K=>!K),[y]),modal:c,children:o})};E.displayName=D;var P="DialogTrigger",I=i.forwardRef((e,t)=>{const{__scopeDialog:o,...r}=e,s=d(P,o),a=C(t,s.triggerRef);return n.jsx(m.button,{type:"button","aria-haspopup":"dialog","aria-expanded":s.open,"aria-controls":s.contentId,"data-state":b(s.open),...r,ref:a,onClick:p(e.onClick,s.onOpenToggle)})});I.displayName=P;var R="DialogPortal",[se,O]=j(R,{forceMount:void 0}),T=e=>{const{__scopeDialog:t,forceMount:o,children:r,container:s}=e,a=d(R,t);return n.jsx(se,{scope:t,forceMount:o,children:i.Children.map(r,c=>n.jsx(h,{present:o||a.open,children:n.jsx(Z,{asChild:!0,container:s,children:c})}))})};T.displayName=R;var x="DialogOverlay",A=i.forwardRef((e,t)=>{const o=O(x,e.__scopeDialog),{forceMount:r=o.forceMount,...s}=e,a=d(x,e.__scopeDialog);return a.modal?n.jsx(h,{present:r||a.open,children:n.jsx(le,{...s,ref:t})}):null});A.displayName=x;var ie=J("DialogOverlay.RemoveScroll"),le=i.forwardRef((e,t)=>{const{__scopeDialog:o,...r}=e,s=d(x,o);return n.jsx(te,{as:ie,allowPinchZoom:!0,shards:[s.contentRef],children:n.jsx(m.div,{"data-state":b(s.open),...r,ref:t,style:{pointerEvents:"auto",...r.style}})})}),u="DialogContent",w=i.forwardRef((e,t)=>{const o=O(u,e.__scopeDialog),{forceMount:r=o.forceMount,...s}=e,a=d(u,e.__scopeDialog);return n.jsx(h,{present:r||a.open,children:a.modal?n.jsx(ce,{...s,ref:t}):n.jsx(de,{...s,ref:t})})});w.displayName=u;var ce=i.forwardRef((e,t)=>{const o=d(u,e.__scopeDialog),r=i.useRef(null),s=C(t,o.contentRef,r);return i.useEffect(()=>{const a=r.current;if(a)return ee(a)},[]),n.jsx(M,{...e,ref:s,trapFocus:o.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:p(e.onCloseAutoFocus,a=>{a.preventDefault(),o.triggerRef.current?.focus()}),onPointerDownOutside:p(e.onPointerDownOutside,a=>{const c=a.detail.originalEvent,l=c.button===0&&c.ctrlKey===!0;(c.button===2||l)&&a.preventDefault()}),onFocusOutside:p(e.onFocusOutside,a=>a.preventDefault())})}),de=i.forwardRef((e,t)=>{const o=d(u,e.__scopeDialog),r=i.useRef(!1),s=i.useRef(!1);return n.jsx(M,{...e,ref:t,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:a=>{e.onCloseAutoFocus?.(a),a.defaultPrevented||(r.current||o.triggerRef.current?.focus(),a.preventDefault()),r.current=!1,s.current=!1},onInteractOutside:a=>{e.onInteractOutside?.(a),a.defaultPrevented||(r.current=!0,a.detail.originalEvent.type==="pointerdown"&&(s.current=!0));const c=a.target;o.triggerRef.current?.contains(c)&&a.preventDefault(),a.detail.originalEvent.type==="focusin"&&s.current&&a.preventDefault()}})}),M=i.forwardRef((e,t)=>{const{__scopeDialog:o,trapFocus:r,onOpenAutoFocus:s,onCloseAutoFocus:a,...c}=e,l=d(u,o),g=i.useRef(null),v=C(t,g);return oe(),n.jsxs(n.Fragment,{children:[n.jsx(ae,{asChild:!0,loop:!0,trapped:r,onMountAutoFocus:s,onUnmountAutoFocus:a,children:n.jsx(Q,{role:"dialog",id:l.contentId,"aria-describedby":l.descriptionId,"aria-labelledby":l.titleId,"data-state":b(l.open),...c,ref:v,onDismiss:()=>l.onOpenChange(!1)})}),n.jsxs(n.Fragment,{children:[n.jsx(ue,{titleId:l.titleId}),n.jsx(ge,{contentRef:g,descriptionId:l.descriptionId})]})]})}),_="DialogTitle",F=i.forwardRef((e,t)=>{const{__scopeDialog:o,...r}=e,s=d(_,o);return n.jsx(m.h2,{id:s.titleId,...r,ref:t})});F.displayName=_;var S="DialogDescription",k=i.forwardRef((e,t)=>{const{__scopeDialog:o,...r}=e,s=d(S,o);return n.jsx(m.p,{id:s.descriptionId,...r,ref:t})});k.displayName=S;var $="DialogClose",W=i.forwardRef((e,t)=>{const{__scopeDialog:o,...r}=e,s=d($,o);return n.jsx(m.button,{type:"button",...r,ref:t,onClick:p(e.onClick,()=>s.onOpenChange(!1))})});W.displayName=$;function b(e){return e?"open":"closed"}var G="DialogTitleWarning",[Ie,L]=X(G,{contentName:u,titleName:_,docsSlug:"dialog"}),ue=({titleId:e})=>{const t=L(G),o=`\`${t.contentName}\` requires a \`${t.titleName}\` for the component to be accessible for screen reader users.
2
2
 
3
3
  If you want to hide the \`${t.titleName}\`, you can wrap it with our VisuallyHidden component.
4
4
 
5
- For more information, see https://radix-ui.com/primitives/docs/components/${t.docsSlug}`;return i.useEffect(()=>{e&&(document.getElementById(e)||console.error(o))},[o,e]),null},fe="DialogDescriptionWarning",ge=({contentRef:e,descriptionId:t})=>{const r=`Warning: Missing \`Description\` or \`aria-describedby={undefined}\` for {${L(fe).contentName}}.`;return i.useEffect(()=>{const s=e.current?.getAttribute("aria-describedby");t&&s&&(document.getElementById(t)||console.warn(r))},[r,e,t]),null},pe=b,me=I,xe=T,z=A,H=w,B=F,V=k,De=W;const Oe=pe,Te=me,ve=xe;function q({className:e,ref:t,...o}){return n.jsx(z,{ref:t,className:f("bg-background/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 backdrop-blur-sm",e),...o})}q.displayName=z.displayName;function ye({className:e,children:t,ref:o,...r}){return n.jsxs(ve,{children:[n.jsx(q,{}),n.jsxs(H,{ref:o,className:f("bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border p-6 shadow-lg duration-200 sm:rounded-lg md:w-full",e),...r,children:[t,n.jsxs(De,{className:"ring-offset-background data-[state=open]:bg-accent data-[state=open]:text-muted-foreground focus:ring-ring absolute top-4 right-4 rounded-sm opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-none disabled:pointer-events-none",children:[n.jsx(ne,{name:"Close"}),n.jsx("span",{className:"sr-only",children:"Close"})]})]})]})}ye.displayName=H.displayName;function Ne({className:e,...t}){return n.jsx("div",{className:f("flex flex-col space-y-1.5 text-center sm:text-left",e),...t})}Ne.displayName="DialogHeader";function Ce({className:e,...t}){return n.jsx("div",{className:f("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",e),...t})}Ce.displayName="DialogFooter";function he({className:e,ref:t,...o}){return n.jsx(B,{ref:t,className:f("text-lg leading-none font-semibold tracking-tight",e),...o})}he.displayName=B.displayName;function Re({className:e,ref:t,...o}){return n.jsx(V,{ref:t,className:f("text-muted-foreground text-sm",e),...o})}Re.displayName=V.displayName;export{Oe as D,ye as a,Ne as b,he as c,Re as d,Ce as e,Te as f};
6
- //# sourceMappingURL=dialog-DnpUg3VT.js.map
5
+ For more information, see https://radix-ui.com/primitives/docs/components/${t.docsSlug}`;return i.useEffect(()=>{e&&(document.getElementById(e)||console.error(o))},[o,e]),null},fe="DialogDescriptionWarning",ge=({contentRef:e,descriptionId:t})=>{const r=`Warning: Missing \`Description\` or \`aria-describedby={undefined}\` for {${L(fe).contentName}}.`;return i.useEffect(()=>{const s=e.current?.getAttribute("aria-describedby");t&&s&&(document.getElementById(t)||console.warn(r))},[r,e,t]),null},pe=E,me=I,xe=T,z=A,H=w,B=F,V=k,De=W;const Oe=pe,Te=me,ve=xe;function q({className:e,ref:t,...o}){return n.jsx(z,{ref:t,className:f("bg-background/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 backdrop-blur-sm",e),...o})}q.displayName=z.displayName;function ye({className:e,children:t,ref:o,...r}){return n.jsxs(ve,{children:[n.jsx(q,{}),n.jsxs(H,{ref:o,className:f("bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border p-6 shadow-lg duration-200 sm:rounded-lg md:w-full",e),...r,children:[t,n.jsxs(De,{className:"ring-offset-background data-[state=open]:bg-accent data-[state=open]:text-muted-foreground focus:ring-ring absolute top-4 right-4 rounded-sm opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-none disabled:pointer-events-none",children:[n.jsx(ne,{name:"Close"}),n.jsx("span",{className:"sr-only",children:"Close"})]})]})]})}ye.displayName=H.displayName;function Ne({className:e,...t}){return n.jsx("div",{className:f("flex flex-col space-y-1.5 text-center sm:text-left",e),...t})}Ne.displayName="DialogHeader";function Ce({className:e,...t}){return n.jsx("div",{className:f("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",e),...t})}Ce.displayName="DialogFooter";function he({className:e,ref:t,...o}){return n.jsx(B,{ref:t,className:f("text-lg leading-none font-semibold tracking-tight",e),...o})}he.displayName=B.displayName;function Re({className:e,ref:t,...o}){return n.jsx(V,{ref:t,className:f("text-muted-foreground text-sm",e),...o})}Re.displayName=V.displayName;export{Oe as D,ye as a,Ne as b,he as c,Re as d,Ce as e,Te as f};
6
+ //# sourceMappingURL=dialog-CzO65Z5w.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dialog-DnpUg3VT.js","sources":["../../../../../node_modules/@radix-ui/react-dialog/dist/index.mjs","../../../app/components/ui/dialog.tsx"],"sourcesContent":["\"use client\";\n\n// src/dialog.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContext, createContextScope } from \"@radix-ui/react-context\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { DismissableLayer } from \"@radix-ui/react-dismissable-layer\";\nimport { FocusScope } from \"@radix-ui/react-focus-scope\";\nimport { Portal as PortalPrimitive } from \"@radix-ui/react-portal\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useFocusGuards } from \"@radix-ui/react-focus-guards\";\nimport { RemoveScroll } from \"react-remove-scroll\";\nimport { hideOthers } from \"aria-hidden\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nvar DIALOG_NAME = \"Dialog\";\nvar [createDialogContext, createDialogScope] = createContextScope(DIALOG_NAME);\nvar [DialogProvider, useDialogContext] = createDialogContext(DIALOG_NAME);\nvar Dialog = (props) => {\n const {\n __scopeDialog,\n children,\n open: openProp,\n defaultOpen,\n onOpenChange,\n modal = true\n } = props;\n const triggerRef = React.useRef(null);\n const contentRef = React.useRef(null);\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen ?? false,\n onChange: onOpenChange,\n caller: DIALOG_NAME\n });\n return /* @__PURE__ */ jsx(\n DialogProvider,\n {\n scope: __scopeDialog,\n triggerRef,\n contentRef,\n contentId: useId(),\n titleId: useId(),\n descriptionId: useId(),\n open,\n onOpenChange: setOpen,\n onOpenToggle: React.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen]),\n modal,\n children\n }\n );\n};\nDialog.displayName = DIALOG_NAME;\nvar TRIGGER_NAME = \"DialogTrigger\";\nvar DialogTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, ...triggerProps } = props;\n const context = useDialogContext(TRIGGER_NAME, __scopeDialog);\n const composedTriggerRef = useComposedRefs(forwardedRef, context.triggerRef);\n return /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n \"aria-haspopup\": \"dialog\",\n \"aria-expanded\": context.open,\n \"aria-controls\": context.contentId,\n \"data-state\": getState(context.open),\n ...triggerProps,\n ref: composedTriggerRef,\n onClick: composeEventHandlers(props.onClick, context.onOpenToggle)\n }\n );\n }\n);\nDialogTrigger.displayName = TRIGGER_NAME;\nvar PORTAL_NAME = \"DialogPortal\";\nvar [PortalProvider, usePortalContext] = createDialogContext(PORTAL_NAME, {\n forceMount: void 0\n});\nvar DialogPortal = (props) => {\n const { __scopeDialog, forceMount, children, container } = props;\n const context = useDialogContext(PORTAL_NAME, __scopeDialog);\n return /* @__PURE__ */ jsx(PortalProvider, { scope: __scopeDialog, forceMount, children: React.Children.map(children, (child) => /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(PortalPrimitive, { asChild: true, container, children: child }) })) });\n};\nDialogPortal.displayName = PORTAL_NAME;\nvar OVERLAY_NAME = \"DialogOverlay\";\nvar DialogOverlay = React.forwardRef(\n (props, forwardedRef) => {\n const portalContext = usePortalContext(OVERLAY_NAME, props.__scopeDialog);\n const { forceMount = portalContext.forceMount, ...overlayProps } = props;\n const context = useDialogContext(OVERLAY_NAME, props.__scopeDialog);\n return context.modal ? /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(DialogOverlayImpl, { ...overlayProps, ref: forwardedRef }) }) : null;\n }\n);\nDialogOverlay.displayName = OVERLAY_NAME;\nvar Slot = createSlot(\"DialogOverlay.RemoveScroll\");\nvar DialogOverlayImpl = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, ...overlayProps } = props;\n const context = useDialogContext(OVERLAY_NAME, __scopeDialog);\n return (\n // Make sure `Content` is scrollable even when it doesn't live inside `RemoveScroll`\n // ie. when `Overlay` and `Content` are siblings\n /* @__PURE__ */ jsx(RemoveScroll, { as: Slot, allowPinchZoom: true, shards: [context.contentRef], children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-state\": getState(context.open),\n ...overlayProps,\n ref: forwardedRef,\n style: { pointerEvents: \"auto\", ...overlayProps.style }\n }\n ) })\n );\n }\n);\nvar CONTENT_NAME = \"DialogContent\";\nvar DialogContent = React.forwardRef(\n (props, forwardedRef) => {\n const portalContext = usePortalContext(CONTENT_NAME, props.__scopeDialog);\n const { forceMount = portalContext.forceMount, ...contentProps } = props;\n const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: context.modal ? /* @__PURE__ */ jsx(DialogContentModal, { ...contentProps, ref: forwardedRef }) : /* @__PURE__ */ jsx(DialogContentNonModal, { ...contentProps, ref: forwardedRef }) });\n }\n);\nDialogContent.displayName = CONTENT_NAME;\nvar DialogContentModal = React.forwardRef(\n (props, forwardedRef) => {\n const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n const contentRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, context.contentRef, contentRef);\n React.useEffect(() => {\n const content = contentRef.current;\n if (content) return hideOthers(content);\n }, []);\n return /* @__PURE__ */ jsx(\n DialogContentImpl,\n {\n ...props,\n ref: composedRefs,\n trapFocus: context.open,\n disableOutsidePointerEvents: true,\n onCloseAutoFocus: composeEventHandlers(props.onCloseAutoFocus, (event) => {\n event.preventDefault();\n context.triggerRef.current?.focus();\n }),\n onPointerDownOutside: composeEventHandlers(props.onPointerDownOutside, (event) => {\n const originalEvent = event.detail.originalEvent;\n const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;\n const isRightClick = originalEvent.button === 2 || ctrlLeftClick;\n if (isRightClick) event.preventDefault();\n }),\n onFocusOutside: composeEventHandlers(\n props.onFocusOutside,\n (event) => event.preventDefault()\n )\n }\n );\n }\n);\nvar DialogContentNonModal = React.forwardRef(\n (props, forwardedRef) => {\n const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n const hasInteractedOutsideRef = React.useRef(false);\n const hasPointerDownOutsideRef = React.useRef(false);\n return /* @__PURE__ */ jsx(\n DialogContentImpl,\n {\n ...props,\n ref: forwardedRef,\n trapFocus: false,\n disableOutsidePointerEvents: false,\n onCloseAutoFocus: (event) => {\n props.onCloseAutoFocus?.(event);\n if (!event.defaultPrevented) {\n if (!hasInteractedOutsideRef.current) context.triggerRef.current?.focus();\n event.preventDefault();\n }\n hasInteractedOutsideRef.current = false;\n hasPointerDownOutsideRef.current = false;\n },\n onInteractOutside: (event) => {\n props.onInteractOutside?.(event);\n if (!event.defaultPrevented) {\n hasInteractedOutsideRef.current = true;\n if (event.detail.originalEvent.type === \"pointerdown\") {\n hasPointerDownOutsideRef.current = true;\n }\n }\n const target = event.target;\n const targetIsTrigger = context.triggerRef.current?.contains(target);\n if (targetIsTrigger) event.preventDefault();\n if (event.detail.originalEvent.type === \"focusin\" && hasPointerDownOutsideRef.current) {\n event.preventDefault();\n }\n }\n }\n );\n }\n);\nvar DialogContentImpl = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, trapFocus, onOpenAutoFocus, onCloseAutoFocus, ...contentProps } = props;\n const context = useDialogContext(CONTENT_NAME, __scopeDialog);\n const contentRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, contentRef);\n useFocusGuards();\n return /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(\n FocusScope,\n {\n asChild: true,\n loop: true,\n trapped: trapFocus,\n onMountAutoFocus: onOpenAutoFocus,\n onUnmountAutoFocus: onCloseAutoFocus,\n children: /* @__PURE__ */ jsx(\n DismissableLayer,\n {\n role: \"dialog\",\n id: context.contentId,\n \"aria-describedby\": context.descriptionId,\n \"aria-labelledby\": context.titleId,\n \"data-state\": getState(context.open),\n ...contentProps,\n ref: composedRefs,\n onDismiss: () => context.onOpenChange(false)\n }\n )\n }\n ),\n /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(TitleWarning, { titleId: context.titleId }),\n /* @__PURE__ */ jsx(DescriptionWarning, { contentRef, descriptionId: context.descriptionId })\n ] })\n ] });\n }\n);\nvar TITLE_NAME = \"DialogTitle\";\nvar DialogTitle = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, ...titleProps } = props;\n const context = useDialogContext(TITLE_NAME, __scopeDialog);\n return /* @__PURE__ */ jsx(Primitive.h2, { id: context.titleId, ...titleProps, ref: forwardedRef });\n }\n);\nDialogTitle.displayName = TITLE_NAME;\nvar DESCRIPTION_NAME = \"DialogDescription\";\nvar DialogDescription = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, ...descriptionProps } = props;\n const context = useDialogContext(DESCRIPTION_NAME, __scopeDialog);\n return /* @__PURE__ */ jsx(Primitive.p, { id: context.descriptionId, ...descriptionProps, ref: forwardedRef });\n }\n);\nDialogDescription.displayName = DESCRIPTION_NAME;\nvar CLOSE_NAME = \"DialogClose\";\nvar DialogClose = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, ...closeProps } = props;\n const context = useDialogContext(CLOSE_NAME, __scopeDialog);\n return /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n ...closeProps,\n ref: forwardedRef,\n onClick: composeEventHandlers(props.onClick, () => context.onOpenChange(false))\n }\n );\n }\n);\nDialogClose.displayName = CLOSE_NAME;\nfunction getState(open) {\n return open ? \"open\" : \"closed\";\n}\nvar TITLE_WARNING_NAME = \"DialogTitleWarning\";\nvar [WarningProvider, useWarningContext] = createContext(TITLE_WARNING_NAME, {\n contentName: CONTENT_NAME,\n titleName: TITLE_NAME,\n docsSlug: \"dialog\"\n});\nvar TitleWarning = ({ titleId }) => {\n const titleWarningContext = useWarningContext(TITLE_WARNING_NAME);\n const MESSAGE = `\\`${titleWarningContext.contentName}\\` requires a \\`${titleWarningContext.titleName}\\` for the component to be accessible for screen reader users.\n\nIf you want to hide the \\`${titleWarningContext.titleName}\\`, you can wrap it with our VisuallyHidden component.\n\nFor more information, see https://radix-ui.com/primitives/docs/components/${titleWarningContext.docsSlug}`;\n React.useEffect(() => {\n if (titleId) {\n const hasTitle = document.getElementById(titleId);\n if (!hasTitle) console.error(MESSAGE);\n }\n }, [MESSAGE, titleId]);\n return null;\n};\nvar DESCRIPTION_WARNING_NAME = \"DialogDescriptionWarning\";\nvar DescriptionWarning = ({ contentRef, descriptionId }) => {\n const descriptionWarningContext = useWarningContext(DESCRIPTION_WARNING_NAME);\n const MESSAGE = `Warning: Missing \\`Description\\` or \\`aria-describedby={undefined}\\` for {${descriptionWarningContext.contentName}}.`;\n React.useEffect(() => {\n const describedById = contentRef.current?.getAttribute(\"aria-describedby\");\n if (descriptionId && describedById) {\n const hasDescription = document.getElementById(descriptionId);\n if (!hasDescription) console.warn(MESSAGE);\n }\n }, [MESSAGE, contentRef, descriptionId]);\n return null;\n};\nvar Root = Dialog;\nvar Trigger = DialogTrigger;\nvar Portal = DialogPortal;\nvar Overlay = DialogOverlay;\nvar Content = DialogContent;\nvar Title = DialogTitle;\nvar Description = DialogDescription;\nvar Close = DialogClose;\nexport {\n Close,\n Content,\n Description,\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n Overlay,\n Portal,\n Root,\n Title,\n Trigger,\n WarningProvider,\n createDialogScope\n};\n//# sourceMappingURL=index.mjs.map\n","import * as DialogPrimitive from '@radix-ui/react-dialog'\nimport * as React from 'react'\nimport { cn } from '#app/utils/misc.tsx'\nimport { Icon } from '../icons'\n\nconst Dialog = DialogPrimitive.Root\n\nconst DialogTrigger = DialogPrimitive.Trigger\n\nconst DialogPortal = DialogPrimitive.Portal\n\nconst DialogClose = DialogPrimitive.Close\n\nfunction DialogOverlay({\n\tclassName,\n\tref,\n\t...props\n}: React.ComponentProps<typeof DialogPrimitive.Overlay>) {\n\treturn (\n\t\t<DialogPrimitive.Overlay\n\t\t\tref={ref}\n\t\t\tclassName={cn(\n\t\t\t\t'bg-background/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 backdrop-blur-sm',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t)\n}\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName\n\nfunction DialogContent({\n\tclassName,\n\tchildren,\n\tref,\n\t...props\n}: React.ComponentProps<typeof DialogPrimitive.Content>) {\n\treturn (\n\t\t<DialogPortal>\n\t\t\t<DialogOverlay />\n\t\t\t<DialogPrimitive.Content\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border p-6 shadow-lg duration-200 sm:rounded-lg md:w-full',\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t\t<DialogPrimitive.Close className=\"ring-offset-background data-[state=open]:bg-accent data-[state=open]:text-muted-foreground focus:ring-ring absolute top-4 right-4 rounded-sm opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-none disabled:pointer-events-none\">\n\t\t\t\t\t<Icon name=\"Close\" />\n\t\t\t\t\t<span className=\"sr-only\">Close</span>\n\t\t\t\t</DialogPrimitive.Close>\n\t\t\t</DialogPrimitive.Content>\n\t\t</DialogPortal>\n\t)\n}\nDialogContent.displayName = DialogPrimitive.Content.displayName\n\nfunction DialogHeader({\n\tclassName,\n\t...props\n}: React.HTMLAttributes<HTMLDivElement>) {\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t'flex flex-col space-y-1.5 text-center sm:text-left',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t)\n}\nDialogHeader.displayName = 'DialogHeader'\n\nfunction DialogFooter({\n\tclassName,\n\t...props\n}: React.HTMLAttributes<HTMLDivElement>) {\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t'flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t)\n}\nDialogFooter.displayName = 'DialogFooter'\n\nfunction DialogTitle({\n\tclassName,\n\tref,\n\t...props\n}: React.ComponentProps<typeof DialogPrimitive.Title>) {\n\treturn (\n\t\t<DialogPrimitive.Title\n\t\t\tref={ref}\n\t\t\tclassName={cn(\n\t\t\t\t'text-lg leading-none font-semibold tracking-tight',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t)\n}\nDialogTitle.displayName = DialogPrimitive.Title.displayName\n\nfunction DialogDescription({\n\tclassName,\n\tref,\n\t...props\n}: React.ComponentProps<typeof DialogPrimitive.Description>) {\n\treturn (\n\t\t<DialogPrimitive.Description\n\t\t\tref={ref}\n\t\t\tclassName={cn('text-muted-foreground text-sm', className)}\n\t\t\t{...props}\n\t\t/>\n\t)\n}\nDialogDescription.displayName = DialogPrimitive.Description.displayName\n\nexport {\n\tDialog,\n\tDialogClose,\n\tDialogContent,\n\tDialogDescription,\n\tDialogFooter,\n\tDialogHeader,\n\tDialogOverlay,\n\tDialogPortal,\n\tDialogTitle,\n\tDialogTrigger,\n}\n"],"names":["DIALOG_NAME","createDialogContext","createContextScope","DialogProvider","useDialogContext","Dialog","props","__scopeDialog","children","openProp","defaultOpen","onOpenChange","modal","triggerRef","React.useRef","contentRef","open","setOpen","useControllableState","jsx","useId","React.useCallback","prevOpen","TRIGGER_NAME","DialogTrigger","React.forwardRef","forwardedRef","triggerProps","context","composedTriggerRef","useComposedRefs","Primitive","getState","composeEventHandlers","PORTAL_NAME","PortalProvider","usePortalContext","DialogPortal","forceMount","container","React.Children","child","Presence","PortalPrimitive","OVERLAY_NAME","DialogOverlay","portalContext","overlayProps","DialogOverlayImpl","Slot","createSlot","RemoveScroll","CONTENT_NAME","DialogContent","contentProps","DialogContentModal","DialogContentNonModal","composedRefs","React.useEffect","content","hideOthers","DialogContentImpl","event","originalEvent","ctrlLeftClick","hasInteractedOutsideRef","hasPointerDownOutsideRef","target","trapFocus","onOpenAutoFocus","onCloseAutoFocus","useFocusGuards","jsxs","Fragment","FocusScope","DismissableLayer","TitleWarning","DescriptionWarning","TITLE_NAME","DialogTitle","titleProps","DESCRIPTION_NAME","DialogDescription","descriptionProps","CLOSE_NAME","DialogClose","closeProps","TITLE_WARNING_NAME","WarningProvider","useWarningContext","createContext","titleId","titleWarningContext","MESSAGE","DESCRIPTION_WARNING_NAME","descriptionId","describedById","Root","Trigger","Portal","Overlay","Content","Title","Description","Close","DialogPrimitive.Root","DialogPrimitive.Trigger","DialogPrimitive.Portal","className","ref","DialogPrimitive.Overlay","cn","DialogPrimitive.Content","DialogPrimitive.Close","Icon","DialogHeader","DialogFooter","DialogPrimitive.Title","DialogPrimitive.Description"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"dialog-CzO65Z5w.js","sources":["../../../../../node_modules/@radix-ui/react-dialog/dist/index.mjs","../../../app/components/ui/dialog.tsx"],"sourcesContent":["\"use client\";\n\n// src/dialog.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContext, createContextScope } from \"@radix-ui/react-context\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { DismissableLayer } from \"@radix-ui/react-dismissable-layer\";\nimport { FocusScope } from \"@radix-ui/react-focus-scope\";\nimport { Portal as PortalPrimitive } from \"@radix-ui/react-portal\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useFocusGuards } from \"@radix-ui/react-focus-guards\";\nimport { RemoveScroll } from \"react-remove-scroll\";\nimport { hideOthers } from \"aria-hidden\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nvar DIALOG_NAME = \"Dialog\";\nvar [createDialogContext, createDialogScope] = createContextScope(DIALOG_NAME);\nvar [DialogProvider, useDialogContext] = createDialogContext(DIALOG_NAME);\nvar Dialog = (props) => {\n const {\n __scopeDialog,\n children,\n open: openProp,\n defaultOpen,\n onOpenChange,\n modal = true\n } = props;\n const triggerRef = React.useRef(null);\n const contentRef = React.useRef(null);\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen ?? false,\n onChange: onOpenChange,\n caller: DIALOG_NAME\n });\n return /* @__PURE__ */ jsx(\n DialogProvider,\n {\n scope: __scopeDialog,\n triggerRef,\n contentRef,\n contentId: useId(),\n titleId: useId(),\n descriptionId: useId(),\n open,\n onOpenChange: setOpen,\n onOpenToggle: React.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen]),\n modal,\n children\n }\n );\n};\nDialog.displayName = DIALOG_NAME;\nvar TRIGGER_NAME = \"DialogTrigger\";\nvar DialogTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, ...triggerProps } = props;\n const context = useDialogContext(TRIGGER_NAME, __scopeDialog);\n const composedTriggerRef = useComposedRefs(forwardedRef, context.triggerRef);\n return /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n \"aria-haspopup\": \"dialog\",\n \"aria-expanded\": context.open,\n \"aria-controls\": context.contentId,\n \"data-state\": getState(context.open),\n ...triggerProps,\n ref: composedTriggerRef,\n onClick: composeEventHandlers(props.onClick, context.onOpenToggle)\n }\n );\n }\n);\nDialogTrigger.displayName = TRIGGER_NAME;\nvar PORTAL_NAME = \"DialogPortal\";\nvar [PortalProvider, usePortalContext] = createDialogContext(PORTAL_NAME, {\n forceMount: void 0\n});\nvar DialogPortal = (props) => {\n const { __scopeDialog, forceMount, children, container } = props;\n const context = useDialogContext(PORTAL_NAME, __scopeDialog);\n return /* @__PURE__ */ jsx(PortalProvider, { scope: __scopeDialog, forceMount, children: React.Children.map(children, (child) => /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(PortalPrimitive, { asChild: true, container, children: child }) })) });\n};\nDialogPortal.displayName = PORTAL_NAME;\nvar OVERLAY_NAME = \"DialogOverlay\";\nvar DialogOverlay = React.forwardRef(\n (props, forwardedRef) => {\n const portalContext = usePortalContext(OVERLAY_NAME, props.__scopeDialog);\n const { forceMount = portalContext.forceMount, ...overlayProps } = props;\n const context = useDialogContext(OVERLAY_NAME, props.__scopeDialog);\n return context.modal ? /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(DialogOverlayImpl, { ...overlayProps, ref: forwardedRef }) }) : null;\n }\n);\nDialogOverlay.displayName = OVERLAY_NAME;\nvar Slot = createSlot(\"DialogOverlay.RemoveScroll\");\nvar DialogOverlayImpl = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, ...overlayProps } = props;\n const context = useDialogContext(OVERLAY_NAME, __scopeDialog);\n return (\n // Make sure `Content` is scrollable even when it doesn't live inside `RemoveScroll`\n // ie. when `Overlay` and `Content` are siblings\n /* @__PURE__ */ jsx(RemoveScroll, { as: Slot, allowPinchZoom: true, shards: [context.contentRef], children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-state\": getState(context.open),\n ...overlayProps,\n ref: forwardedRef,\n style: { pointerEvents: \"auto\", ...overlayProps.style }\n }\n ) })\n );\n }\n);\nvar CONTENT_NAME = \"DialogContent\";\nvar DialogContent = React.forwardRef(\n (props, forwardedRef) => {\n const portalContext = usePortalContext(CONTENT_NAME, props.__scopeDialog);\n const { forceMount = portalContext.forceMount, ...contentProps } = props;\n const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: context.modal ? /* @__PURE__ */ jsx(DialogContentModal, { ...contentProps, ref: forwardedRef }) : /* @__PURE__ */ jsx(DialogContentNonModal, { ...contentProps, ref: forwardedRef }) });\n }\n);\nDialogContent.displayName = CONTENT_NAME;\nvar DialogContentModal = React.forwardRef(\n (props, forwardedRef) => {\n const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n const contentRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, context.contentRef, contentRef);\n React.useEffect(() => {\n const content = contentRef.current;\n if (content) return hideOthers(content);\n }, []);\n return /* @__PURE__ */ jsx(\n DialogContentImpl,\n {\n ...props,\n ref: composedRefs,\n trapFocus: context.open,\n disableOutsidePointerEvents: true,\n onCloseAutoFocus: composeEventHandlers(props.onCloseAutoFocus, (event) => {\n event.preventDefault();\n context.triggerRef.current?.focus();\n }),\n onPointerDownOutside: composeEventHandlers(props.onPointerDownOutside, (event) => {\n const originalEvent = event.detail.originalEvent;\n const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;\n const isRightClick = originalEvent.button === 2 || ctrlLeftClick;\n if (isRightClick) event.preventDefault();\n }),\n onFocusOutside: composeEventHandlers(\n props.onFocusOutside,\n (event) => event.preventDefault()\n )\n }\n );\n }\n);\nvar DialogContentNonModal = React.forwardRef(\n (props, forwardedRef) => {\n const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n const hasInteractedOutsideRef = React.useRef(false);\n const hasPointerDownOutsideRef = React.useRef(false);\n return /* @__PURE__ */ jsx(\n DialogContentImpl,\n {\n ...props,\n ref: forwardedRef,\n trapFocus: false,\n disableOutsidePointerEvents: false,\n onCloseAutoFocus: (event) => {\n props.onCloseAutoFocus?.(event);\n if (!event.defaultPrevented) {\n if (!hasInteractedOutsideRef.current) context.triggerRef.current?.focus();\n event.preventDefault();\n }\n hasInteractedOutsideRef.current = false;\n hasPointerDownOutsideRef.current = false;\n },\n onInteractOutside: (event) => {\n props.onInteractOutside?.(event);\n if (!event.defaultPrevented) {\n hasInteractedOutsideRef.current = true;\n if (event.detail.originalEvent.type === \"pointerdown\") {\n hasPointerDownOutsideRef.current = true;\n }\n }\n const target = event.target;\n const targetIsTrigger = context.triggerRef.current?.contains(target);\n if (targetIsTrigger) event.preventDefault();\n if (event.detail.originalEvent.type === \"focusin\" && hasPointerDownOutsideRef.current) {\n event.preventDefault();\n }\n }\n }\n );\n }\n);\nvar DialogContentImpl = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, trapFocus, onOpenAutoFocus, onCloseAutoFocus, ...contentProps } = props;\n const context = useDialogContext(CONTENT_NAME, __scopeDialog);\n const contentRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, contentRef);\n useFocusGuards();\n return /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(\n FocusScope,\n {\n asChild: true,\n loop: true,\n trapped: trapFocus,\n onMountAutoFocus: onOpenAutoFocus,\n onUnmountAutoFocus: onCloseAutoFocus,\n children: /* @__PURE__ */ jsx(\n DismissableLayer,\n {\n role: \"dialog\",\n id: context.contentId,\n \"aria-describedby\": context.descriptionId,\n \"aria-labelledby\": context.titleId,\n \"data-state\": getState(context.open),\n ...contentProps,\n ref: composedRefs,\n onDismiss: () => context.onOpenChange(false)\n }\n )\n }\n ),\n /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(TitleWarning, { titleId: context.titleId }),\n /* @__PURE__ */ jsx(DescriptionWarning, { contentRef, descriptionId: context.descriptionId })\n ] })\n ] });\n }\n);\nvar TITLE_NAME = \"DialogTitle\";\nvar DialogTitle = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, ...titleProps } = props;\n const context = useDialogContext(TITLE_NAME, __scopeDialog);\n return /* @__PURE__ */ jsx(Primitive.h2, { id: context.titleId, ...titleProps, ref: forwardedRef });\n }\n);\nDialogTitle.displayName = TITLE_NAME;\nvar DESCRIPTION_NAME = \"DialogDescription\";\nvar DialogDescription = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, ...descriptionProps } = props;\n const context = useDialogContext(DESCRIPTION_NAME, __scopeDialog);\n return /* @__PURE__ */ jsx(Primitive.p, { id: context.descriptionId, ...descriptionProps, ref: forwardedRef });\n }\n);\nDialogDescription.displayName = DESCRIPTION_NAME;\nvar CLOSE_NAME = \"DialogClose\";\nvar DialogClose = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, ...closeProps } = props;\n const context = useDialogContext(CLOSE_NAME, __scopeDialog);\n return /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n ...closeProps,\n ref: forwardedRef,\n onClick: composeEventHandlers(props.onClick, () => context.onOpenChange(false))\n }\n );\n }\n);\nDialogClose.displayName = CLOSE_NAME;\nfunction getState(open) {\n return open ? \"open\" : \"closed\";\n}\nvar TITLE_WARNING_NAME = \"DialogTitleWarning\";\nvar [WarningProvider, useWarningContext] = createContext(TITLE_WARNING_NAME, {\n contentName: CONTENT_NAME,\n titleName: TITLE_NAME,\n docsSlug: \"dialog\"\n});\nvar TitleWarning = ({ titleId }) => {\n const titleWarningContext = useWarningContext(TITLE_WARNING_NAME);\n const MESSAGE = `\\`${titleWarningContext.contentName}\\` requires a \\`${titleWarningContext.titleName}\\` for the component to be accessible for screen reader users.\n\nIf you want to hide the \\`${titleWarningContext.titleName}\\`, you can wrap it with our VisuallyHidden component.\n\nFor more information, see https://radix-ui.com/primitives/docs/components/${titleWarningContext.docsSlug}`;\n React.useEffect(() => {\n if (titleId) {\n const hasTitle = document.getElementById(titleId);\n if (!hasTitle) console.error(MESSAGE);\n }\n }, [MESSAGE, titleId]);\n return null;\n};\nvar DESCRIPTION_WARNING_NAME = \"DialogDescriptionWarning\";\nvar DescriptionWarning = ({ contentRef, descriptionId }) => {\n const descriptionWarningContext = useWarningContext(DESCRIPTION_WARNING_NAME);\n const MESSAGE = `Warning: Missing \\`Description\\` or \\`aria-describedby={undefined}\\` for {${descriptionWarningContext.contentName}}.`;\n React.useEffect(() => {\n const describedById = contentRef.current?.getAttribute(\"aria-describedby\");\n if (descriptionId && describedById) {\n const hasDescription = document.getElementById(descriptionId);\n if (!hasDescription) console.warn(MESSAGE);\n }\n }, [MESSAGE, contentRef, descriptionId]);\n return null;\n};\nvar Root = Dialog;\nvar Trigger = DialogTrigger;\nvar Portal = DialogPortal;\nvar Overlay = DialogOverlay;\nvar Content = DialogContent;\nvar Title = DialogTitle;\nvar Description = DialogDescription;\nvar Close = DialogClose;\nexport {\n Close,\n Content,\n Description,\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n Overlay,\n Portal,\n Root,\n Title,\n Trigger,\n WarningProvider,\n createDialogScope\n};\n//# sourceMappingURL=index.mjs.map\n","import * as DialogPrimitive from '@radix-ui/react-dialog'\nimport * as React from 'react'\nimport { cn } from '#app/utils/misc.tsx'\nimport { Icon } from '../icons'\n\nconst Dialog = DialogPrimitive.Root\n\nconst DialogTrigger = DialogPrimitive.Trigger\n\nconst DialogPortal = DialogPrimitive.Portal\n\nconst DialogClose = DialogPrimitive.Close\n\nfunction DialogOverlay({\n\tclassName,\n\tref,\n\t...props\n}: React.ComponentProps<typeof DialogPrimitive.Overlay>) {\n\treturn (\n\t\t<DialogPrimitive.Overlay\n\t\t\tref={ref}\n\t\t\tclassName={cn(\n\t\t\t\t'bg-background/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 backdrop-blur-sm',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t)\n}\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName\n\nfunction DialogContent({\n\tclassName,\n\tchildren,\n\tref,\n\t...props\n}: React.ComponentProps<typeof DialogPrimitive.Content>) {\n\treturn (\n\t\t<DialogPortal>\n\t\t\t<DialogOverlay />\n\t\t\t<DialogPrimitive.Content\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border p-6 shadow-lg duration-200 sm:rounded-lg md:w-full',\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t\t<DialogPrimitive.Close className=\"ring-offset-background data-[state=open]:bg-accent data-[state=open]:text-muted-foreground focus:ring-ring absolute top-4 right-4 rounded-sm opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-none disabled:pointer-events-none\">\n\t\t\t\t\t<Icon name=\"Close\" />\n\t\t\t\t\t<span className=\"sr-only\">Close</span>\n\t\t\t\t</DialogPrimitive.Close>\n\t\t\t</DialogPrimitive.Content>\n\t\t</DialogPortal>\n\t)\n}\nDialogContent.displayName = DialogPrimitive.Content.displayName\n\nfunction DialogHeader({\n\tclassName,\n\t...props\n}: React.HTMLAttributes<HTMLDivElement>) {\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t'flex flex-col space-y-1.5 text-center sm:text-left',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t)\n}\nDialogHeader.displayName = 'DialogHeader'\n\nfunction DialogFooter({\n\tclassName,\n\t...props\n}: React.HTMLAttributes<HTMLDivElement>) {\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t'flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t)\n}\nDialogFooter.displayName = 'DialogFooter'\n\nfunction DialogTitle({\n\tclassName,\n\tref,\n\t...props\n}: React.ComponentProps<typeof DialogPrimitive.Title>) {\n\treturn (\n\t\t<DialogPrimitive.Title\n\t\t\tref={ref}\n\t\t\tclassName={cn(\n\t\t\t\t'text-lg leading-none font-semibold tracking-tight',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t)\n}\nDialogTitle.displayName = DialogPrimitive.Title.displayName\n\nfunction DialogDescription({\n\tclassName,\n\tref,\n\t...props\n}: React.ComponentProps<typeof DialogPrimitive.Description>) {\n\treturn (\n\t\t<DialogPrimitive.Description\n\t\t\tref={ref}\n\t\t\tclassName={cn('text-muted-foreground text-sm', className)}\n\t\t\t{...props}\n\t\t/>\n\t)\n}\nDialogDescription.displayName = DialogPrimitive.Description.displayName\n\nexport {\n\tDialog,\n\tDialogClose,\n\tDialogContent,\n\tDialogDescription,\n\tDialogFooter,\n\tDialogHeader,\n\tDialogOverlay,\n\tDialogPortal,\n\tDialogTitle,\n\tDialogTrigger,\n}\n"],"names":["DIALOG_NAME","createDialogContext","createContextScope","DialogProvider","useDialogContext","Dialog","props","__scopeDialog","children","openProp","defaultOpen","onOpenChange","modal","triggerRef","React.useRef","contentRef","open","setOpen","useControllableState","jsx","useId","React.useCallback","prevOpen","TRIGGER_NAME","DialogTrigger","React.forwardRef","forwardedRef","triggerProps","context","composedTriggerRef","useComposedRefs","Primitive","getState","composeEventHandlers","PORTAL_NAME","PortalProvider","usePortalContext","DialogPortal","forceMount","container","React.Children","child","Presence","PortalPrimitive","OVERLAY_NAME","DialogOverlay","portalContext","overlayProps","DialogOverlayImpl","Slot","createSlot","RemoveScroll","CONTENT_NAME","DialogContent","contentProps","DialogContentModal","DialogContentNonModal","composedRefs","React.useEffect","content","hideOthers","DialogContentImpl","event","originalEvent","ctrlLeftClick","hasInteractedOutsideRef","hasPointerDownOutsideRef","target","trapFocus","onOpenAutoFocus","onCloseAutoFocus","useFocusGuards","jsxs","Fragment","FocusScope","DismissableLayer","TitleWarning","DescriptionWarning","TITLE_NAME","DialogTitle","titleProps","DESCRIPTION_NAME","DialogDescription","descriptionProps","CLOSE_NAME","DialogClose","closeProps","TITLE_WARNING_NAME","WarningProvider","useWarningContext","createContext","titleId","titleWarningContext","MESSAGE","DESCRIPTION_WARNING_NAME","descriptionId","describedById","Root","Trigger","Portal","Overlay","Content","Title","Description","Close","DialogPrimitive.Root","DialogPrimitive.Trigger","DialogPrimitive.Portal","className","ref","DialogPrimitive.Overlay","cn","DialogPrimitive.Content","DialogPrimitive.Close","Icon","DialogHeader","DialogFooter","DialogPrimitive.Title","DialogPrimitive.Description"],"mappings":"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","x_google_ignoreList":[0]}
@@ -1,2 +1,2 @@
1
- import{j as e}from"./jsx-runtime-C5WNSv3b.js";import{m as j,R as g,A as N}from"./accordion-CzXT3k43.js";import{R as b,T as w,V as v,I as y,P as S,C as k,S as R,a as D,G as C,L as I,c as A,d as T,e as L,f as P}from"./index-BOhw3wcM.js";import{I as o,d as $,c as E,a as x}from"./misc-DVYuZMjW.js";import{r as f}from"./index-CqIc3cxq.js";import{A as h,n as V,d as F,k as U,L as B,F as G}from"./chunk-EPOLDU6W-BCLmut3y.js";import{M}from"./mdx-vrch0szL.js";import{b as W}from"./root-loader-BOzEMapJ.js";import{D as z}from"./epic-video-BVcJzJzi.js";import{u as H}from"./revalidation-ws-BJWJviUX.js";import{S as p}from"./tooltip-Chzzs4KB.js";const Y=r=>e.jsx("pre",{...r}),q={Accordion:N,pre:Y};function J({app1:r,app2:a}){const t=W(),l=t.find(n=>n.name===r),c=t.find(n=>n.name===a);return H({watchPaths:[l?.fullPath,c?.fullPath].filter(Boolean)}),null}function oe({userHasAccessPromise:r,diff:a,allApps:t}){return e.jsx(j,{fallbackRender:()=>e.jsx("div",{className:"w-full p-12",children:e.jsxs("div",{className:"flex w-full flex-col gap-4 text-center",children:[e.jsx("p",{className:"text-2xl font-bold",children:"Error"}),e.jsx("p",{className:"text-lg",children:"There was an error loading the user access."})]})}),children:e.jsx(f.Suspense,{fallback:e.jsx("div",{className:"flex items-center justify-center p-8",children:e.jsx(p,{content:"Loading user access",children:e.jsx(o,{name:"Refresh",className:"animate-spin"})})}),children:e.jsx(h,{resolve:r,children:l=>l?e.jsx(K,{diff:a,allApps:t}):e.jsxs("div",{className:"w-full p-12",children:[e.jsxs("div",{className:"flex w-full flex-col gap-4 text-center",children:[e.jsx("p",{className:"text-2xl font-bold",children:"Access Denied"}),e.jsx("p",{className:"text-lg",children:"You must login or register for the workshop to view the diff."})]}),e.jsx("div",{className:"h-16"}),e.jsx("p",{className:"pb-4",children:"Check out this video to see how the diff tab works."}),e.jsx(z,{url:"https://www.epicweb.dev/tips/epic-workshop-diff-tab-demo"})]})})})})}function K({diff:r,allApps:a}){const t=V(),[l]=F(),c=new URLSearchParams(l);c.set("forceFresh","diff");const n=U(),u=$.useSpinDelay(n.state!=="idle",{delay:0,minDuration:1e3}),m=[];for(const[s,i]of l.entries())s==="app1"||s==="app2"||m.push(e.jsx("input",{type:"hidden",name:s,value:i},s));return e.jsx(f.Suspense,{fallback:e.jsx("div",{className:"flex items-center justify-center p-8",children:e.jsx(p,{content:"Loading diff",children:e.jsx(o,{name:"Refresh",className:"animate-spin"})})}),children:e.jsx(h,{resolve:r,errorElement:e.jsx("p",{className:"text-foreground-destructive p-6",children:"There was an error calculating the diff. Sorry."}),children:s=>e.jsxs("div",{className:"flex h-full w-full flex-col",children:[e.jsxs("div",{className:"flex h-14 min-h-14 w-full overflow-x-hidden border-b",children:[e.jsx("div",{className:"border-r",children:e.jsx(p,{content:"Reload diff",children:e.jsx(B,{to:`.?${c}`,className:"flex h-full w-14 items-center justify-center",children:e.jsx(o,{name:"Refresh",className:E({"animate-spin":u})})})})}),e.jsxs(G,{onChange:i=>t(i.currentTarget),className:"scrollbar-thin scrollbar-thumb-scrollbar flex h-full flex-1 items-center overflow-x-auto",children:[m,e.jsx(d,{name:"app1",label:"App 1",className:"border-r",allApps:a,defaultValue:s.app1}),e.jsx(d,{name:"app2",label:"App 2",allApps:a,defaultValue:s.app2})]},`${s.app1}${s.app2}`)]}),e.jsx("div",{className:"scrollbar-thin scrollbar-thumb-scrollbar grow overflow-y-scroll",children:s.diffCode?e.jsx("div",{children:e.jsx(g,{className:"w-full",type:"multiple",children:e.jsx(M,{code:s.diffCode,components:q})})}):s.app1&&s.app2?e.jsx("p",{className:"bg-foreground text-background m-5 inline-flex items-center justify-center px-1 py-0.5 font-mono text-sm uppercase",children:"There was a problem generating the diff"}):e.jsx("p",{className:"bg-foreground text-background m-5 inline-flex items-center justify-center px-1 py-0.5 font-mono text-sm uppercase",children:"Select two apps to compare"})}),e.jsx(J,{app1:s.app1,app2:s.app2})]})})})}function d({name:r,label:a,className:t,allApps:l,defaultValue:c}){return e.jsxs(b,{name:r,defaultValue:c,children:[e.jsxs(w,{className:x("radix-placeholder:text-muted-foreground flex h-full w-full max-w-[50%] items-center justify-between px-3 text-left focus-visible:outline-none",t),"aria-label":`Select ${a} for git Diff`,children:[e.jsxs("span",{className:"truncate",children:[a,":"," ",e.jsx(v,{placeholder:`Select ${a}`,className:"inline-block w-40 truncate"})]}),e.jsx(y,{className:"",children:e.jsx(o,{name:"TriangleDownSmall"})})]}),e.jsx(S,{children:e.jsxs(k,{position:"popper",align:"start",className:"bg-popover text-popover-foreground z-20 max-h-[50vh] lg:max-h-[70vh]",children:[e.jsx(R,{className:"flex h-5 cursor-default items-center justify-center",children:e.jsx(o,{name:"ChevronUp"})}),e.jsx(D,{className:"p-3",children:e.jsxs(C,{children:[e.jsx(I,{className:"px-5 pb-3 font-mono uppercase",children:a}),l.map(n=>e.jsx(O,{value:n.name,children:n.displayName},n.name))]})}),e.jsx(A,{className:"flex h-5 cursor-default items-center justify-center",children:e.jsx(o,{name:"ChevronDown"})})]})})]})}const O=({ref:r,children:a,className:t,...l})=>e.jsxs(T,{className:x("radix-disabled:text-muted-foreground radix-highlighted:opacity-100 radix-highlighted:outline-none radix-state-checked:opacity-100 relative flex cursor-pointer items-center rounded px-10 py-2 leading-none opacity-80 select-none",t),...l,ref:r,children:[e.jsx(L,{children:a}),e.jsx(P,{className:"absolute left-0 inline-flex w-[25px] items-center justify-center",children:e.jsx(o,{name:"CheckSmall"})})]});export{oe as U};
2
- //# sourceMappingURL=diff-CxEbhF8Q.js.map
1
+ import{j as e}from"./jsx-runtime-C5WNSv3b.js";import{m as j,R as g,A as N}from"./accordion-CQ7oujC6.js";import{R as b,T as w,V as v,I as y,P as S,C as k,S as R,a as D,G as C,L as I,c as A,d as T,e as L,f as P}from"./index-CJDOQ1bl.js";import{I as o,d as $,c as E,a as x}from"./misc-W4055b-0.js";import{r as f}from"./index-CqIc3cxq.js";import{A as h,n as V,d as F,k as U,L as B,F as G}from"./chunk-EPOLDU6W-BCLmut3y.js";import{M}from"./mdx-BzyhMqFg.js";import{b as W}from"./root-loader-BOzEMapJ.js";import{D as z}from"./epic-video-D0drHmgC.js";import{u as H}from"./revalidation-ws-BJWJviUX.js";import{S as p}from"./tooltip-Tlsyx2YO.js";const Y=r=>e.jsx("pre",{...r}),q={Accordion:N,pre:Y};function J({app1:r,app2:a}){const t=W(),l=t.find(n=>n.name===r),c=t.find(n=>n.name===a);return H({watchPaths:[l?.fullPath,c?.fullPath].filter(Boolean)}),null}function oe({userHasAccessPromise:r,diff:a,allApps:t}){return e.jsx(j,{fallbackRender:()=>e.jsx("div",{className:"w-full p-12",children:e.jsxs("div",{className:"flex w-full flex-col gap-4 text-center",children:[e.jsx("p",{className:"text-2xl font-bold",children:"Error"}),e.jsx("p",{className:"text-lg",children:"There was an error loading the user access."})]})}),children:e.jsx(f.Suspense,{fallback:e.jsx("div",{className:"flex items-center justify-center p-8",children:e.jsx(p,{content:"Loading user access",children:e.jsx(o,{name:"Refresh",className:"animate-spin"})})}),children:e.jsx(h,{resolve:r,children:l=>l?e.jsx(K,{diff:a,allApps:t}):e.jsxs("div",{className:"w-full p-12",children:[e.jsxs("div",{className:"flex w-full flex-col gap-4 text-center",children:[e.jsx("p",{className:"text-2xl font-bold",children:"Access Denied"}),e.jsx("p",{className:"text-lg",children:"You must login or register for the workshop to view the diff."})]}),e.jsx("div",{className:"h-16"}),e.jsx("p",{className:"pb-4",children:"Check out this video to see how the diff tab works."}),e.jsx(z,{url:"https://www.epicweb.dev/tips/epic-workshop-diff-tab-demo"})]})})})})}function K({diff:r,allApps:a}){const t=V(),[l]=F(),c=new URLSearchParams(l);c.set("forceFresh","diff");const n=U(),u=$.useSpinDelay(n.state!=="idle",{delay:0,minDuration:1e3}),m=[];for(const[s,i]of l.entries())s==="app1"||s==="app2"||m.push(e.jsx("input",{type:"hidden",name:s,value:i},s));return e.jsx(f.Suspense,{fallback:e.jsx("div",{className:"flex items-center justify-center p-8",children:e.jsx(p,{content:"Loading diff",children:e.jsx(o,{name:"Refresh",className:"animate-spin"})})}),children:e.jsx(h,{resolve:r,errorElement:e.jsx("p",{className:"text-foreground-destructive p-6",children:"There was an error calculating the diff. Sorry."}),children:s=>e.jsxs("div",{className:"flex h-full w-full flex-col",children:[e.jsxs("div",{className:"flex h-14 min-h-14 w-full overflow-x-hidden border-b",children:[e.jsx("div",{className:"border-r",children:e.jsx(p,{content:"Reload diff",children:e.jsx(B,{to:`.?${c}`,className:"flex h-full w-14 items-center justify-center",children:e.jsx(o,{name:"Refresh",className:E({"animate-spin":u})})})})}),e.jsxs(G,{onChange:i=>t(i.currentTarget),className:"scrollbar-thin scrollbar-thumb-scrollbar flex h-full flex-1 items-center overflow-x-auto",children:[m,e.jsx(d,{name:"app1",label:"App 1",className:"border-r",allApps:a,defaultValue:s.app1}),e.jsx(d,{name:"app2",label:"App 2",allApps:a,defaultValue:s.app2})]},`${s.app1}${s.app2}`)]}),e.jsx("div",{className:"scrollbar-thin scrollbar-thumb-scrollbar grow overflow-y-scroll",children:s.diffCode?e.jsx("div",{children:e.jsx(g,{className:"w-full",type:"multiple",children:e.jsx(M,{code:s.diffCode,components:q})})}):s.app1&&s.app2?e.jsx("p",{className:"bg-foreground text-background m-5 inline-flex items-center justify-center px-1 py-0.5 font-mono text-sm uppercase",children:"There was a problem generating the diff"}):e.jsx("p",{className:"bg-foreground text-background m-5 inline-flex items-center justify-center px-1 py-0.5 font-mono text-sm uppercase",children:"Select two apps to compare"})}),e.jsx(J,{app1:s.app1,app2:s.app2})]})})})}function d({name:r,label:a,className:t,allApps:l,defaultValue:c}){return e.jsxs(b,{name:r,defaultValue:c,children:[e.jsxs(w,{className:x("radix-placeholder:text-muted-foreground flex h-full w-full max-w-[50%] items-center justify-between px-3 text-left focus-visible:outline-none",t),"aria-label":`Select ${a} for git Diff`,children:[e.jsxs("span",{className:"truncate",children:[a,":"," ",e.jsx(v,{placeholder:`Select ${a}`,className:"inline-block w-40 truncate"})]}),e.jsx(y,{className:"",children:e.jsx(o,{name:"TriangleDownSmall"})})]}),e.jsx(S,{children:e.jsxs(k,{position:"popper",align:"start",className:"bg-popover text-popover-foreground z-20 max-h-[50vh] lg:max-h-[70vh]",children:[e.jsx(R,{className:"flex h-5 cursor-default items-center justify-center",children:e.jsx(o,{name:"ChevronUp"})}),e.jsx(D,{className:"p-3",children:e.jsxs(C,{children:[e.jsx(I,{className:"px-5 pb-3 font-mono uppercase",children:a}),l.map(n=>e.jsx(O,{value:n.name,children:n.displayName},n.name))]})}),e.jsx(A,{className:"flex h-5 cursor-default items-center justify-center",children:e.jsx(o,{name:"ChevronDown"})})]})})]})}const O=({ref:r,children:a,className:t,...l})=>e.jsxs(T,{className:x("radix-disabled:text-muted-foreground radix-highlighted:opacity-100 radix-highlighted:outline-none radix-state-checked:opacity-100 relative flex cursor-pointer items-center rounded px-10 py-2 leading-none opacity-80 select-none",t),...l,ref:r,children:[e.jsx(L,{children:a}),e.jsx(P,{className:"absolute left-0 inline-flex w-[25px] items-center justify-center",children:e.jsx(o,{name:"CheckSmall"})})]});export{oe as U};
2
+ //# sourceMappingURL=diff-BhWzqoVN.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"diff-CxEbhF8Q.js","sources":["../../../app/components/diff.tsx"],"sourcesContent":["import * as Accordion from '@radix-ui/react-accordion'\nimport * as Select from '@radix-ui/react-select'\nimport { clsx } from 'clsx'\nimport React, { Suspense } from 'react'\nimport { ErrorBoundary } from 'react-error-boundary'\nimport {\n\tAwait,\n\tForm,\n\tLink,\n\tuseNavigation,\n\tuseSearchParams,\n\tuseSubmit,\n} from 'react-router'\nimport { useSpinDelay } from 'spin-delay'\nimport AccordionComponent from '#app/components/accordion.tsx'\nimport { Mdx } from '#app/utils/mdx.tsx'\nimport { cn } from '#app/utils/misc.tsx'\nimport { useApps } from '#app/utils/root-loader.ts'\nimport { DeferredEpicVideo } from './epic-video.tsx'\nimport { Icon } from './icons.tsx'\nimport { useRevalidationWS } from './revalidation-ws.tsx'\nimport { SimpleTooltip } from './ui/tooltip.tsx'\n\ntype diffProp = {\n\tapp1?: string\n\tapp2?: string\n\tdiffCode?: string | null\n}\n\nconst pre = (props: any) => <pre {...props} />\n\nconst mdxComponents = {\n\tAccordion: AccordionComponent,\n\t// override the pre-with-buttons\n\tpre,\n}\n\nfunction RevalidateApps({\n\tapp1: app1Name,\n\tapp2: app2Name,\n}: {\n\tapp1?: string\n\tapp2?: string\n}) {\n\tconst apps = useApps()\n\tconst app1 = apps.find((app) => app.name === app1Name)\n\tconst app2 = apps.find((app) => app.name === app2Name)\n\n\tuseRevalidationWS({\n\t\twatchPaths: [app1?.fullPath, app2?.fullPath].filter(Boolean),\n\t})\n\treturn null\n}\n\nexport function UserHasAccessDiff({\n\tuserHasAccessPromise,\n\tdiff,\n\tallApps,\n}: {\n\tuserHasAccessPromise: Promise<boolean>\n\tdiff: Promise<diffProp> | diffProp\n\tallApps: Array<{ name: string; displayName: string }>\n}) {\n\treturn (\n\t\t<ErrorBoundary\n\t\t\tfallbackRender={() => (\n\t\t\t\t<div className=\"w-full p-12\">\n\t\t\t\t\t<div className=\"flex w-full flex-col gap-4 text-center\">\n\t\t\t\t\t\t<p className=\"text-2xl font-bold\">Error</p>\n\t\t\t\t\t\t<p className=\"text-lg\">\n\t\t\t\t\t\t\tThere was an error loading the user access.\n\t\t\t\t\t\t</p>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t>\n\t\t\t<Suspense\n\t\t\t\tfallback={\n\t\t\t\t\t<div className=\"flex items-center justify-center p-8\">\n\t\t\t\t\t\t<SimpleTooltip content=\"Loading user access\">\n\t\t\t\t\t\t\t<Icon name=\"Refresh\" className=\"animate-spin\" />\n\t\t\t\t\t\t</SimpleTooltip>\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t>\n\t\t\t\t<Await resolve={userHasAccessPromise}>\n\t\t\t\t\t{(userHasAccess) =>\n\t\t\t\t\t\tuserHasAccess ? (\n\t\t\t\t\t\t\t<DiffImplementation diff={diff} allApps={allApps} />\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<div className=\"w-full p-12\">\n\t\t\t\t\t\t\t\t<div className=\"flex w-full flex-col gap-4 text-center\">\n\t\t\t\t\t\t\t\t\t<p className=\"text-2xl font-bold\">Access Denied</p>\n\t\t\t\t\t\t\t\t\t<p className=\"text-lg\">\n\t\t\t\t\t\t\t\t\t\tYou must login or register for the workshop to view the\n\t\t\t\t\t\t\t\t\t\tdiff.\n\t\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div className=\"h-16\" />\n\t\t\t\t\t\t\t\t<p className=\"pb-4\">\n\t\t\t\t\t\t\t\t\tCheck out this video to see how the diff tab works.\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t\t<DeferredEpicVideo url=\"https://www.epicweb.dev/tips/epic-workshop-diff-tab-demo\" />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t</Await>\n\t\t\t</Suspense>\n\t\t</ErrorBoundary>\n\t)\n}\n\nexport { UserHasAccessDiff as Diff }\n\nexport function DiffImplementation({\n\tdiff,\n\tallApps,\n}: {\n\tdiff: Promise<diffProp> | diffProp\n\tallApps: Array<{ name: string; displayName: string }>\n}) {\n\tconst submit = useSubmit()\n\tconst [params] = useSearchParams()\n\tconst paramsWithForcedRefresh = new URLSearchParams(params)\n\tparamsWithForcedRefresh.set('forceFresh', 'diff')\n\tconst navigation = useNavigation()\n\tconst spinnerNavigating = useSpinDelay(navigation.state !== 'idle', {\n\t\tdelay: 0,\n\t\tminDuration: 1000,\n\t})\n\n\tconst hiddenInputs: Array<React.ReactNode> = []\n\tfor (const [key, value] of params.entries()) {\n\t\tif (key === 'app1' || key === 'app2') continue\n\t\thiddenInputs.push(\n\t\t\t<input key={key} type=\"hidden\" name={key} value={value} />,\n\t\t)\n\t}\n\n\treturn (\n\t\t<Suspense\n\t\t\tfallback={\n\t\t\t\t<div className=\"flex items-center justify-center p-8\">\n\t\t\t\t\t<SimpleTooltip content=\"Loading diff\">\n\t\t\t\t\t\t<Icon name=\"Refresh\" className=\"animate-spin\" />\n\t\t\t\t\t</SimpleTooltip>\n\t\t\t\t</div>\n\t\t\t}\n\t\t>\n\t\t\t<Await\n\t\t\t\tresolve={diff}\n\t\t\t\terrorElement={\n\t\t\t\t\t<p className=\"text-foreground-destructive p-6\">\n\t\t\t\t\t\tThere was an error calculating the diff. Sorry.\n\t\t\t\t\t</p>\n\t\t\t\t}\n\t\t\t>\n\t\t\t\t{(diff) => (\n\t\t\t\t\t<div className=\"flex h-full w-full flex-col\">\n\t\t\t\t\t\t<div className=\"flex h-14 min-h-14 w-full overflow-x-hidden border-b\">\n\t\t\t\t\t\t\t<div className=\"border-r\">\n\t\t\t\t\t\t\t\t<SimpleTooltip content=\"Reload diff\">\n\t\t\t\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\t\t\t\tto={`.?${paramsWithForcedRefresh}`}\n\t\t\t\t\t\t\t\t\t\tclassName=\"flex h-full w-14 items-center justify-center\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\t\t\t\t\tname=\"Refresh\"\n\t\t\t\t\t\t\t\t\t\t\tclassName={cn({ 'animate-spin': spinnerNavigating })}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t\t\t</SimpleTooltip>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<Form\n\t\t\t\t\t\t\t\tonChange={(e) => submit(e.currentTarget)}\n\t\t\t\t\t\t\t\tclassName=\"scrollbar-thin scrollbar-thumb-scrollbar flex h-full flex-1 items-center overflow-x-auto\"\n\t\t\t\t\t\t\t\tkey={`${diff.app1}${diff.app2}`}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{hiddenInputs}\n\t\t\t\t\t\t\t\t<SelectFileToDiff\n\t\t\t\t\t\t\t\t\tname=\"app1\"\n\t\t\t\t\t\t\t\t\tlabel=\"App 1\"\n\t\t\t\t\t\t\t\t\tclassName=\"border-r\"\n\t\t\t\t\t\t\t\t\tallApps={allApps}\n\t\t\t\t\t\t\t\t\tdefaultValue={diff.app1}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<SelectFileToDiff\n\t\t\t\t\t\t\t\t\tname=\"app2\"\n\t\t\t\t\t\t\t\t\tlabel=\"App 2\"\n\t\t\t\t\t\t\t\t\tallApps={allApps}\n\t\t\t\t\t\t\t\t\tdefaultValue={diff.app2}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</Form>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div className=\"scrollbar-thin scrollbar-thumb-scrollbar grow overflow-y-scroll\">\n\t\t\t\t\t\t\t{diff.diffCode ? (\n\t\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t\t<Accordion.Root className=\"w-full\" type=\"multiple\">\n\t\t\t\t\t\t\t\t\t\t<Mdx code={diff.diffCode} components={mdxComponents} />\n\t\t\t\t\t\t\t\t\t</Accordion.Root>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t) : diff.app1 && diff.app2 ? (\n\t\t\t\t\t\t\t\t<p className=\"bg-foreground text-background m-5 inline-flex items-center justify-center px-1 py-0.5 font-mono text-sm uppercase\">\n\t\t\t\t\t\t\t\t\tThere was a problem generating the diff\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<p className=\"bg-foreground text-background m-5 inline-flex items-center justify-center px-1 py-0.5 font-mono text-sm uppercase\">\n\t\t\t\t\t\t\t\t\tSelect two apps to compare\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<RevalidateApps app1={diff.app1} app2={diff.app2} />\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</Await>\n\t\t</Suspense>\n\t)\n}\n\nfunction SelectFileToDiff({\n\tname,\n\tlabel,\n\tclassName,\n\tallApps,\n\tdefaultValue,\n}: {\n\tname: string\n\tlabel: string\n\tclassName?: string\n\tallApps: Array<{ name: string; displayName: string }>\n\tdefaultValue?: string\n}) {\n\treturn (\n\t\t<Select.Root name={name} defaultValue={defaultValue}>\n\t\t\t<Select.Trigger\n\t\t\t\tclassName={clsx(\n\t\t\t\t\t'radix-placeholder:text-muted-foreground flex h-full w-full max-w-[50%] items-center justify-between px-3 text-left focus-visible:outline-none',\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\taria-label={`Select ${label} for git Diff`}\n\t\t\t>\n\t\t\t\t<span className=\"truncate\">\n\t\t\t\t\t{label}:{' '}\n\t\t\t\t\t<Select.Value\n\t\t\t\t\t\tplaceholder={`Select ${label}`}\n\t\t\t\t\t\tclassName=\"inline-block w-40 truncate\"\n\t\t\t\t\t/>\n\t\t\t\t</span>\n\t\t\t\t<Select.Icon className=\"\">\n\t\t\t\t\t<Icon name=\"TriangleDownSmall\" />\n\t\t\t\t</Select.Icon>\n\t\t\t</Select.Trigger>\n\t\t\t<Select.Portal>\n\t\t\t\t<Select.Content\n\t\t\t\t\tposition=\"popper\"\n\t\t\t\t\talign=\"start\"\n\t\t\t\t\tclassName=\"bg-popover text-popover-foreground z-20 max-h-[50vh] lg:max-h-[70vh]\"\n\t\t\t\t>\n\t\t\t\t\t<Select.ScrollUpButton className=\"flex h-5 cursor-default items-center justify-center\">\n\t\t\t\t\t\t<Icon name=\"ChevronUp\" />\n\t\t\t\t\t</Select.ScrollUpButton>\n\t\t\t\t\t<Select.Viewport className=\"p-3\">\n\t\t\t\t\t\t<Select.Group>\n\t\t\t\t\t\t\t<Select.Label className=\"px-5 pb-3 font-mono uppercase\">\n\t\t\t\t\t\t\t\t{label}\n\t\t\t\t\t\t\t</Select.Label>\n\t\t\t\t\t\t\t{allApps.map((app) => {\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<SelectItem key={app.name} value={app.name}>\n\t\t\t\t\t\t\t\t\t\t{app.displayName}\n\t\t\t\t\t\t\t\t\t</SelectItem>\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t</Select.Group>\n\t\t\t\t\t</Select.Viewport>\n\t\t\t\t\t<Select.ScrollDownButton className=\"flex h-5 cursor-default items-center justify-center\">\n\t\t\t\t\t\t<Icon name=\"ChevronDown\" />\n\t\t\t\t\t</Select.ScrollDownButton>\n\t\t\t\t</Select.Content>\n\t\t\t</Select.Portal>\n\t\t</Select.Root>\n\t)\n}\n\nconst SelectItem: React.FC<any> = ({\n\tref: forwardedRef,\n\tchildren,\n\tclassName,\n\t...props\n}) => {\n\treturn (\n\t\t<Select.Item\n\t\t\tclassName={clsx(\n\t\t\t\t'radix-disabled:text-muted-foreground radix-highlighted:opacity-100 radix-highlighted:outline-none radix-state-checked:opacity-100 relative flex cursor-pointer items-center rounded px-10 py-2 leading-none opacity-80 select-none',\n\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t\tref={forwardedRef}\n\t\t>\n\t\t\t<Select.ItemText>{children}</Select.ItemText>\n\t\t\t<Select.ItemIndicator className=\"absolute left-0 inline-flex w-[25px] items-center justify-center\">\n\t\t\t\t<Icon name=\"CheckSmall\" />\n\t\t\t</Select.ItemIndicator>\n\t\t</Select.Item>\n\t)\n}\n"],"names":["pre","props","jsx","mdxComponents","AccordionComponent","RevalidateApps","app1Name","app2Name","apps","useApps","app1","app","app2","useRevalidationWS","UserHasAccessDiff","userHasAccessPromise","diff","allApps","ErrorBoundary","jsxs","Suspense","SimpleTooltip","Icon","Await","userHasAccess","DiffImplementation","DeferredEpicVideo","submit","useSubmit","params","useSearchParams","paramsWithForcedRefresh","navigation","useNavigation","spinnerNavigating","useSpinDelay","hiddenInputs","key","value","Link","cn","Form","e","SelectFileToDiff","Accordion.Root","Mdx","name","label","className","defaultValue","Select.Root","Select.Trigger","clsx","Select.Value","Select.Icon","Select.Portal","Select.Content","Select.ScrollUpButton","Select.Viewport","Select.Group","Select.Label","SelectItem","Select.ScrollDownButton","forwardedRef","children","Select.Item","Select.ItemText","Select.ItemIndicator"],"mappings":"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"}
1
+ {"version":3,"file":"diff-BhWzqoVN.js","sources":["../../../app/components/diff.tsx"],"sourcesContent":["import * as Accordion from '@radix-ui/react-accordion'\nimport * as Select from '@radix-ui/react-select'\nimport { clsx } from 'clsx'\nimport React, { Suspense } from 'react'\nimport { ErrorBoundary } from 'react-error-boundary'\nimport {\n\tAwait,\n\tForm,\n\tLink,\n\tuseNavigation,\n\tuseSearchParams,\n\tuseSubmit,\n} from 'react-router'\nimport { useSpinDelay } from 'spin-delay'\nimport AccordionComponent from '#app/components/accordion.tsx'\nimport { Mdx } from '#app/utils/mdx.tsx'\nimport { cn } from '#app/utils/misc.tsx'\nimport { useApps } from '#app/utils/root-loader.ts'\nimport { DeferredEpicVideo } from './epic-video.tsx'\nimport { Icon } from './icons.tsx'\nimport { useRevalidationWS } from './revalidation-ws.tsx'\nimport { SimpleTooltip } from './ui/tooltip.tsx'\n\ntype diffProp = {\n\tapp1?: string\n\tapp2?: string\n\tdiffCode?: string | null\n}\n\nconst pre = (props: any) => <pre {...props} />\n\nconst mdxComponents = {\n\tAccordion: AccordionComponent,\n\t// override the pre-with-buttons\n\tpre,\n}\n\nfunction RevalidateApps({\n\tapp1: app1Name,\n\tapp2: app2Name,\n}: {\n\tapp1?: string\n\tapp2?: string\n}) {\n\tconst apps = useApps()\n\tconst app1 = apps.find((app) => app.name === app1Name)\n\tconst app2 = apps.find((app) => app.name === app2Name)\n\n\tuseRevalidationWS({\n\t\twatchPaths: [app1?.fullPath, app2?.fullPath].filter(Boolean),\n\t})\n\treturn null\n}\n\nexport function UserHasAccessDiff({\n\tuserHasAccessPromise,\n\tdiff,\n\tallApps,\n}: {\n\tuserHasAccessPromise: Promise<boolean>\n\tdiff: Promise<diffProp> | diffProp\n\tallApps: Array<{ name: string; displayName: string }>\n}) {\n\treturn (\n\t\t<ErrorBoundary\n\t\t\tfallbackRender={() => (\n\t\t\t\t<div className=\"w-full p-12\">\n\t\t\t\t\t<div className=\"flex w-full flex-col gap-4 text-center\">\n\t\t\t\t\t\t<p className=\"text-2xl font-bold\">Error</p>\n\t\t\t\t\t\t<p className=\"text-lg\">\n\t\t\t\t\t\t\tThere was an error loading the user access.\n\t\t\t\t\t\t</p>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t>\n\t\t\t<Suspense\n\t\t\t\tfallback={\n\t\t\t\t\t<div className=\"flex items-center justify-center p-8\">\n\t\t\t\t\t\t<SimpleTooltip content=\"Loading user access\">\n\t\t\t\t\t\t\t<Icon name=\"Refresh\" className=\"animate-spin\" />\n\t\t\t\t\t\t</SimpleTooltip>\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t>\n\t\t\t\t<Await resolve={userHasAccessPromise}>\n\t\t\t\t\t{(userHasAccess) =>\n\t\t\t\t\t\tuserHasAccess ? (\n\t\t\t\t\t\t\t<DiffImplementation diff={diff} allApps={allApps} />\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<div className=\"w-full p-12\">\n\t\t\t\t\t\t\t\t<div className=\"flex w-full flex-col gap-4 text-center\">\n\t\t\t\t\t\t\t\t\t<p className=\"text-2xl font-bold\">Access Denied</p>\n\t\t\t\t\t\t\t\t\t<p className=\"text-lg\">\n\t\t\t\t\t\t\t\t\t\tYou must login or register for the workshop to view the\n\t\t\t\t\t\t\t\t\t\tdiff.\n\t\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div className=\"h-16\" />\n\t\t\t\t\t\t\t\t<p className=\"pb-4\">\n\t\t\t\t\t\t\t\t\tCheck out this video to see how the diff tab works.\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t\t<DeferredEpicVideo url=\"https://www.epicweb.dev/tips/epic-workshop-diff-tab-demo\" />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t</Await>\n\t\t\t</Suspense>\n\t\t</ErrorBoundary>\n\t)\n}\n\nexport { UserHasAccessDiff as Diff }\n\nexport function DiffImplementation({\n\tdiff,\n\tallApps,\n}: {\n\tdiff: Promise<diffProp> | diffProp\n\tallApps: Array<{ name: string; displayName: string }>\n}) {\n\tconst submit = useSubmit()\n\tconst [params] = useSearchParams()\n\tconst paramsWithForcedRefresh = new URLSearchParams(params)\n\tparamsWithForcedRefresh.set('forceFresh', 'diff')\n\tconst navigation = useNavigation()\n\tconst spinnerNavigating = useSpinDelay(navigation.state !== 'idle', {\n\t\tdelay: 0,\n\t\tminDuration: 1000,\n\t})\n\n\tconst hiddenInputs: Array<React.ReactNode> = []\n\tfor (const [key, value] of params.entries()) {\n\t\tif (key === 'app1' || key === 'app2') continue\n\t\thiddenInputs.push(\n\t\t\t<input key={key} type=\"hidden\" name={key} value={value} />,\n\t\t)\n\t}\n\n\treturn (\n\t\t<Suspense\n\t\t\tfallback={\n\t\t\t\t<div className=\"flex items-center justify-center p-8\">\n\t\t\t\t\t<SimpleTooltip content=\"Loading diff\">\n\t\t\t\t\t\t<Icon name=\"Refresh\" className=\"animate-spin\" />\n\t\t\t\t\t</SimpleTooltip>\n\t\t\t\t</div>\n\t\t\t}\n\t\t>\n\t\t\t<Await\n\t\t\t\tresolve={diff}\n\t\t\t\terrorElement={\n\t\t\t\t\t<p className=\"text-foreground-destructive p-6\">\n\t\t\t\t\t\tThere was an error calculating the diff. Sorry.\n\t\t\t\t\t</p>\n\t\t\t\t}\n\t\t\t>\n\t\t\t\t{(diff) => (\n\t\t\t\t\t<div className=\"flex h-full w-full flex-col\">\n\t\t\t\t\t\t<div className=\"flex h-14 min-h-14 w-full overflow-x-hidden border-b\">\n\t\t\t\t\t\t\t<div className=\"border-r\">\n\t\t\t\t\t\t\t\t<SimpleTooltip content=\"Reload diff\">\n\t\t\t\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\t\t\t\tto={`.?${paramsWithForcedRefresh}`}\n\t\t\t\t\t\t\t\t\t\tclassName=\"flex h-full w-14 items-center justify-center\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\t\t\t\t\tname=\"Refresh\"\n\t\t\t\t\t\t\t\t\t\t\tclassName={cn({ 'animate-spin': spinnerNavigating })}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t\t\t</SimpleTooltip>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<Form\n\t\t\t\t\t\t\t\tonChange={(e) => submit(e.currentTarget)}\n\t\t\t\t\t\t\t\tclassName=\"scrollbar-thin scrollbar-thumb-scrollbar flex h-full flex-1 items-center overflow-x-auto\"\n\t\t\t\t\t\t\t\tkey={`${diff.app1}${diff.app2}`}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{hiddenInputs}\n\t\t\t\t\t\t\t\t<SelectFileToDiff\n\t\t\t\t\t\t\t\t\tname=\"app1\"\n\t\t\t\t\t\t\t\t\tlabel=\"App 1\"\n\t\t\t\t\t\t\t\t\tclassName=\"border-r\"\n\t\t\t\t\t\t\t\t\tallApps={allApps}\n\t\t\t\t\t\t\t\t\tdefaultValue={diff.app1}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<SelectFileToDiff\n\t\t\t\t\t\t\t\t\tname=\"app2\"\n\t\t\t\t\t\t\t\t\tlabel=\"App 2\"\n\t\t\t\t\t\t\t\t\tallApps={allApps}\n\t\t\t\t\t\t\t\t\tdefaultValue={diff.app2}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</Form>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div className=\"scrollbar-thin scrollbar-thumb-scrollbar grow overflow-y-scroll\">\n\t\t\t\t\t\t\t{diff.diffCode ? (\n\t\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t\t<Accordion.Root className=\"w-full\" type=\"multiple\">\n\t\t\t\t\t\t\t\t\t\t<Mdx code={diff.diffCode} components={mdxComponents} />\n\t\t\t\t\t\t\t\t\t</Accordion.Root>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t) : diff.app1 && diff.app2 ? (\n\t\t\t\t\t\t\t\t<p className=\"bg-foreground text-background m-5 inline-flex items-center justify-center px-1 py-0.5 font-mono text-sm uppercase\">\n\t\t\t\t\t\t\t\t\tThere was a problem generating the diff\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<p className=\"bg-foreground text-background m-5 inline-flex items-center justify-center px-1 py-0.5 font-mono text-sm uppercase\">\n\t\t\t\t\t\t\t\t\tSelect two apps to compare\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<RevalidateApps app1={diff.app1} app2={diff.app2} />\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</Await>\n\t\t</Suspense>\n\t)\n}\n\nfunction SelectFileToDiff({\n\tname,\n\tlabel,\n\tclassName,\n\tallApps,\n\tdefaultValue,\n}: {\n\tname: string\n\tlabel: string\n\tclassName?: string\n\tallApps: Array<{ name: string; displayName: string }>\n\tdefaultValue?: string\n}) {\n\treturn (\n\t\t<Select.Root name={name} defaultValue={defaultValue}>\n\t\t\t<Select.Trigger\n\t\t\t\tclassName={clsx(\n\t\t\t\t\t'radix-placeholder:text-muted-foreground flex h-full w-full max-w-[50%] items-center justify-between px-3 text-left focus-visible:outline-none',\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\taria-label={`Select ${label} for git Diff`}\n\t\t\t>\n\t\t\t\t<span className=\"truncate\">\n\t\t\t\t\t{label}:{' '}\n\t\t\t\t\t<Select.Value\n\t\t\t\t\t\tplaceholder={`Select ${label}`}\n\t\t\t\t\t\tclassName=\"inline-block w-40 truncate\"\n\t\t\t\t\t/>\n\t\t\t\t</span>\n\t\t\t\t<Select.Icon className=\"\">\n\t\t\t\t\t<Icon name=\"TriangleDownSmall\" />\n\t\t\t\t</Select.Icon>\n\t\t\t</Select.Trigger>\n\t\t\t<Select.Portal>\n\t\t\t\t<Select.Content\n\t\t\t\t\tposition=\"popper\"\n\t\t\t\t\talign=\"start\"\n\t\t\t\t\tclassName=\"bg-popover text-popover-foreground z-20 max-h-[50vh] lg:max-h-[70vh]\"\n\t\t\t\t>\n\t\t\t\t\t<Select.ScrollUpButton className=\"flex h-5 cursor-default items-center justify-center\">\n\t\t\t\t\t\t<Icon name=\"ChevronUp\" />\n\t\t\t\t\t</Select.ScrollUpButton>\n\t\t\t\t\t<Select.Viewport className=\"p-3\">\n\t\t\t\t\t\t<Select.Group>\n\t\t\t\t\t\t\t<Select.Label className=\"px-5 pb-3 font-mono uppercase\">\n\t\t\t\t\t\t\t\t{label}\n\t\t\t\t\t\t\t</Select.Label>\n\t\t\t\t\t\t\t{allApps.map((app) => {\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<SelectItem key={app.name} value={app.name}>\n\t\t\t\t\t\t\t\t\t\t{app.displayName}\n\t\t\t\t\t\t\t\t\t</SelectItem>\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t</Select.Group>\n\t\t\t\t\t</Select.Viewport>\n\t\t\t\t\t<Select.ScrollDownButton className=\"flex h-5 cursor-default items-center justify-center\">\n\t\t\t\t\t\t<Icon name=\"ChevronDown\" />\n\t\t\t\t\t</Select.ScrollDownButton>\n\t\t\t\t</Select.Content>\n\t\t\t</Select.Portal>\n\t\t</Select.Root>\n\t)\n}\n\nconst SelectItem: React.FC<any> = ({\n\tref: forwardedRef,\n\tchildren,\n\tclassName,\n\t...props\n}) => {\n\treturn (\n\t\t<Select.Item\n\t\t\tclassName={clsx(\n\t\t\t\t'radix-disabled:text-muted-foreground radix-highlighted:opacity-100 radix-highlighted:outline-none radix-state-checked:opacity-100 relative flex cursor-pointer items-center rounded px-10 py-2 leading-none opacity-80 select-none',\n\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t\tref={forwardedRef}\n\t\t>\n\t\t\t<Select.ItemText>{children}</Select.ItemText>\n\t\t\t<Select.ItemIndicator className=\"absolute left-0 inline-flex w-[25px] items-center justify-center\">\n\t\t\t\t<Icon name=\"CheckSmall\" />\n\t\t\t</Select.ItemIndicator>\n\t\t</Select.Item>\n\t)\n}\n"],"names":["pre","props","jsx","mdxComponents","AccordionComponent","RevalidateApps","app1Name","app2Name","apps","useApps","app1","app","app2","useRevalidationWS","UserHasAccessDiff","userHasAccessPromise","diff","allApps","ErrorBoundary","jsxs","Suspense","SimpleTooltip","Icon","Await","userHasAccess","DiffImplementation","DeferredEpicVideo","submit","useSubmit","params","useSearchParams","paramsWithForcedRefresh","navigation","useNavigation","spinnerNavigating","useSpinDelay","hiddenInputs","key","value","Link","cn","Form","e","SelectFileToDiff","Accordion.Root","Mdx","name","label","className","defaultValue","Select.Root","Select.Trigger","clsx","Select.Value","Select.Icon","Select.Portal","Select.Content","Select.ScrollUpButton","Select.Viewport","Select.Group","Select.Label","SelectItem","Select.ScrollDownButton","forwardedRef","children","Select.Item","Select.ItemText","Select.ItemIndicator"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{w as o,b as a,d as m,k as p}from"./chunk-EPOLDU6W-BCLmut3y.js";import{j as s}from"./jsx-runtime-C5WNSv3b.js";import{d as n,c}from"./misc-DVYuZMjW.js";import{U as f}from"./diff-CxEbhF8Q.js";import{N as d}from"./nav-chevrons-DlNUibJV.js";import"./index-CqIc3cxq.js";import"./accordion-CzXT3k43.js";import"./tooltip-Chzzs4KB.js";import"./index-vDCSPjrM.js";import"./index-BOhw3wcM.js";import"./index-C_KjwKVt.js";import"./mdx-vrch0szL.js";import"./index-DzdDahau.js";import"./epic-video-BVcJzJzi.js";import"./use-event-source-BuD4_2SF.js";import"./index-BW8stNyh.js";import"./root-loader-BOzEMapJ.js";import"./pe-CIZUOJMr.js";import"./schemas-Uj5SZtvt.js";import"./online-DiNLkgTC.js";import"./loading-CUydCGD3.js";import"./user-BsPobzjB.js";import"./workshop-config-Zfc8zU0x.js";import"./preload-helper-BXl3LOEh.js";import"./launch-editor-B2dmpkaO.js";import"./progress-bar-B27isaGl.js";import"./revalidation-ws-BJWJviUX.js";const I=o(function(){const r=a(),[i]=m();new URLSearchParams(i).set("forceFresh","diff");const t=p(),e=n.useSpinDelay(t.state!=="idle",{delay:200,minDuration:200});return s.jsxs("div",{className:c("h-screen-safe relative",{"cursor-wait opacity-30":e}),children:[s.jsx("div",{className:"h-full pb-16",children:s.jsx(f,{diff:r.diff,allApps:r.allApps,userHasAccessPromise:r.userHasAccessPromise})}),s.jsx("div",{className:"bg-background fixed inset-x-0 bottom-0 z-10 flex h-16 items-center justify-end border-t",children:s.jsx("div",{className:"flex h-full items-center justify-end",children:s.jsx(d,{prev:r.prevLink,next:r.nextLink})})})]})});export{I as default};
2
- //# sourceMappingURL=diff-eAvgXb3f.js.map
1
+ import{w as o,b as a,d as m,k as p}from"./chunk-EPOLDU6W-BCLmut3y.js";import{j as s}from"./jsx-runtime-C5WNSv3b.js";import{d as n,c}from"./misc-W4055b-0.js";import{U as f}from"./diff-BhWzqoVN.js";import{N as d}from"./nav-chevrons-Dk4GtZwQ.js";import"./index-CqIc3cxq.js";import"./accordion-CQ7oujC6.js";import"./tooltip-Tlsyx2YO.js";import"./index-vDCSPjrM.js";import"./index-CJDOQ1bl.js";import"./index-ynYvVAOK.js";import"./mdx-BzyhMqFg.js";import"./index-DzdDahau.js";import"./epic-video-D0drHmgC.js";import"./use-event-source-BuD4_2SF.js";import"./index-CdzVFL-Z.js";import"./root-loader-BOzEMapJ.js";import"./pe-CIZUOJMr.js";import"./schemas-Uj5SZtvt.js";import"./online-DiNLkgTC.js";import"./loading-CDNzW5oO.js";import"./user-BsPobzjB.js";import"./workshop-config-Zfc8zU0x.js";import"./preload-helper-BXl3LOEh.js";import"./launch-editor-D2exGfVu.js";import"./progress-bar-DpWhcyhC.js";import"./revalidation-ws-BJWJviUX.js";const I=o(function(){const r=a(),[i]=m();new URLSearchParams(i).set("forceFresh","diff");const t=p(),e=n.useSpinDelay(t.state!=="idle",{delay:200,minDuration:200});return s.jsxs("div",{className:c("h-screen-safe relative",{"cursor-wait opacity-30":e}),children:[s.jsx("div",{className:"h-full pb-16",children:s.jsx(f,{diff:r.diff,allApps:r.allApps,userHasAccessPromise:r.userHasAccessPromise})}),s.jsx("div",{className:"bg-background fixed inset-x-0 bottom-0 z-10 flex h-16 items-center justify-end border-t",children:s.jsx("div",{className:"flex h-full items-center justify-end",children:s.jsx(d,{prev:r.prevLink,next:r.nextLink})})})]})});export{I as default};
2
+ //# sourceMappingURL=diff-DC-wn6-x.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"diff-eAvgXb3f.js","sources":["../../../app/routes/diff.tsx"],"sourcesContent":["import {\n\tgetAppByName,\n\tgetAppDisplayName,\n\tgetApps,\n\tisExerciseStepApp,\n} from '@epic-web/workshop-utils/apps.server'\nimport { getDiffCode } from '@epic-web/workshop-utils/diff.server'\nimport { userHasAccessToWorkshop } from '@epic-web/workshop-utils/epic-api.server'\nimport { makeTimings } from '@epic-web/workshop-utils/timing.server'\nimport {\n\ttype LoaderFunctionArgs,\n\tuseLoaderData,\n\tuseNavigation,\n\tuseSearchParams,\n} from 'react-router'\nimport { useSpinDelay } from 'spin-delay'\nimport { Diff } from '#app/components/diff.tsx'\nimport { NavChevrons } from '#app/components/nav-chevrons.tsx'\nimport { cn } from '#app/utils/misc.tsx'\n\nexport async function loader({ request }: LoaderFunctionArgs) {\n\tconst reqUrl = new URL(request.url)\n\tconst searchParams = reqUrl.searchParams\n\tconst timings = makeTimings('diffLoader')\n\tconst cacheOptions = { request, timings }\n\tconst allAppsFull = await getApps()\n\tconst app1Name = reqUrl.searchParams.get('app1')\n\tconst app2Name = reqUrl.searchParams.get('app2')\n\n\tconst usingDefaultApp1 = !app1Name\n\n\t// defaults to first problem app\n\tconst app1 = app1Name\n\t\t? await getAppByName(app1Name)\n\t\t: allAppsFull.filter(isExerciseStepApp).at(0)\n\n\t// defaults to last exercise step app\n\tconst app2 = app2Name\n\t\t? await getAppByName(app2Name)\n\t\t: allAppsFull.filter(isExerciseStepApp).at(-1)\n\n\tasync function getDiffProp() {\n\t\tif (!app1 || !app2) {\n\t\t\treturn {\n\t\t\t\tapp1: app1?.name,\n\t\t\t\tapp2: app2?.name,\n\t\t\t\tdiffCode: null,\n\t\t\t}\n\t\t}\n\t\tconst diffCode = await getDiffCode(app1, app2, {\n\t\t\t...cacheOptions,\n\t\t\tforceFresh: searchParams.get('forceFresh') === 'diff',\n\t\t}).catch((e) => {\n\t\t\tconsole.error(e)\n\t\t\treturn null\n\t\t})\n\t\treturn {\n\t\t\tapp1: app1.name,\n\t\t\tapp2: app2.name,\n\t\t\tdiffCode,\n\t\t}\n\t}\n\n\tconst allApps = allAppsFull\n\t\t.filter((a, i, ar) => ar.findIndex((b) => a.name === b.name) === i)\n\t\t.map((a) => ({\n\t\t\tdisplayName: getAppDisplayName(a, allAppsFull),\n\t\t\tname: a.name,\n\t\t\ttitle: a.title,\n\t\t\ttype: a.type,\n\t\t}))\n\n\tconst diff = getDiffProp()\n\tconst app1Index = allApps.findIndex((a) => a.name === app1?.name)\n\tconst prevApp1Index = usingDefaultApp1\n\t\t? allApps.length - 2\n\t\t: app1Index === 0\n\t\t\t? -2\n\t\t\t: app1Index - 1\n\tconst prevApp2Index = prevApp1Index + 1\n\tconst nextApp1Index = usingDefaultApp1\n\t\t? 0\n\t\t: app1Index + 1 < allApps.length\n\t\t\t? app1Index + 1\n\t\t\t: -2\n\tconst nextApp2Index = nextApp1Index + 1\n\tconst prevApp1 = allAppsFull[prevApp1Index]?.name\n\tconst prevApp2 = allAppsFull[prevApp2Index]?.name\n\tconst nextApp1 = allAppsFull[nextApp1Index]?.name\n\tconst nextApp2 = allAppsFull[nextApp2Index]?.name\n\tconst prevSearchParams = new URLSearchParams(reqUrl.searchParams)\n\tprevSearchParams.set('app1', prevApp1 ?? '')\n\tprevSearchParams.set('app2', prevApp2 ?? '')\n\tconst nextSearchParams = new URLSearchParams(reqUrl.searchParams)\n\tnextSearchParams.set('app1', nextApp1 ?? '')\n\tnextSearchParams.set('app2', nextApp2 ?? '')\n\treturn {\n\t\tuserHasAccessPromise: userHasAccessToWorkshop({ request, timings }),\n\t\tallApps,\n\t\tdiff,\n\t\tprevLink:\n\t\t\tprevApp1 && prevApp2\n\t\t\t\t? { to: `/diff?${prevSearchParams}`, 'aria-label': 'Previous App' }\n\t\t\t\t: { to: '/diff' },\n\t\tnextLink:\n\t\t\tnextApp1 && nextApp2\n\t\t\t\t? { to: `/diff?${nextSearchParams}`, 'aria-label': 'Next App' }\n\t\t\t\t: { to: '/diff' },\n\t}\n}\n\nexport default function DiffViewer() {\n\tconst data = useLoaderData<typeof loader>()\n\tconst [params] = useSearchParams()\n\tconst paramsWithForcedRefresh = new URLSearchParams(params)\n\tparamsWithForcedRefresh.set('forceFresh', 'diff')\n\tconst navigation = useNavigation()\n\tconst isNavigating = useSpinDelay(navigation.state !== 'idle', {\n\t\tdelay: 200,\n\t\tminDuration: 200,\n\t})\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn('h-screen-safe relative', {\n\t\t\t\t'cursor-wait opacity-30': isNavigating,\n\t\t\t})}\n\t\t>\n\t\t\t<div className=\"h-full pb-16\">\n\t\t\t\t<Diff\n\t\t\t\t\tdiff={data.diff}\n\t\t\t\t\tallApps={data.allApps}\n\t\t\t\t\tuserHasAccessPromise={data.userHasAccessPromise}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<div className=\"bg-background fixed inset-x-0 bottom-0 z-10 flex h-16 items-center justify-end border-t\">\n\t\t\t\t<div className=\"flex h-full items-center justify-end\">\n\t\t\t\t\t<NavChevrons prev={data.prevLink} next={data.nextLink} />\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n"],"names":["diff","_UNSAFE_withComponentProps","data","useLoaderData","params","useSearchParams","URLSearchParams","set","navigation","useNavigation","isNavigating","useSpinDelay","state","delay","minDuration","jsxs","className","cn","children","jsx","Diff","allApps","userHasAccessPromise","NavChevrons","prev","prevLink","next","nextLink"],"mappings":"k6BA+GA,MAAAA,EAAAC,EAAA,UAAqC,CACpC,MAAMC,EAAOC,EAAA,EACP,CAACC,CAAM,EAAIC,EAAA,EACe,IAAIC,gBAAgBF,CAAM,EAClCG,IAAI,aAAc,MAAM,EAChD,MAAMC,EAAaC,EAAA,EACbC,EAAeC,EAAAA,aAAaH,EAAWI,QAAU,OAAQ,CAC9DC,MAAO,IACPC,YAAa,GACd,CAAC,EAED,OACCC,EAAAA,KAAC,MAAA,CACAC,UAAWC,EAAG,yBAA0B,CACvC,yBAA0BP,CAC3B,CAAC,EAEDQ,SAAA,CAAAC,EAAAA,IAAC,MAAA,CAAIH,UAAU,eACdE,SAAAC,EAAAA,IAACC,EAAA,CACApB,KAAME,EAAKF,KACXqB,QAASnB,EAAKmB,QACdC,qBAAsBpB,EAAKoB,qBAC5B,CAAA,CACD,QACC,MAAA,CAAIN,UAAU,0FACdE,SAAAC,EAAAA,IAAC,OAAIH,UAAU,uCACdE,SAAAC,EAAAA,IAACI,EAAA,CAAYC,KAAMtB,EAAKuB,SAAUC,KAAMxB,EAAKyB,SAAU,EACxD,CAAA,CACD,CAAA,CAAA,CACD,CAEF,CAAA"}
1
+ {"version":3,"file":"diff-DC-wn6-x.js","sources":["../../../app/routes/diff.tsx"],"sourcesContent":["import {\n\tgetAppByName,\n\tgetAppDisplayName,\n\tgetApps,\n\tisExerciseStepApp,\n} from '@epic-web/workshop-utils/apps.server'\nimport { getDiffCode } from '@epic-web/workshop-utils/diff.server'\nimport { userHasAccessToWorkshop } from '@epic-web/workshop-utils/epic-api.server'\nimport { makeTimings } from '@epic-web/workshop-utils/timing.server'\nimport {\n\ttype LoaderFunctionArgs,\n\tuseLoaderData,\n\tuseNavigation,\n\tuseSearchParams,\n} from 'react-router'\nimport { useSpinDelay } from 'spin-delay'\nimport { Diff } from '#app/components/diff.tsx'\nimport { NavChevrons } from '#app/components/nav-chevrons.tsx'\nimport { cn } from '#app/utils/misc.tsx'\n\nexport async function loader({ request }: LoaderFunctionArgs) {\n\tconst reqUrl = new URL(request.url)\n\tconst searchParams = reqUrl.searchParams\n\tconst timings = makeTimings('diffLoader')\n\tconst cacheOptions = { request, timings }\n\tconst allAppsFull = await getApps()\n\tconst app1Name = reqUrl.searchParams.get('app1')\n\tconst app2Name = reqUrl.searchParams.get('app2')\n\n\tconst usingDefaultApp1 = !app1Name\n\n\t// defaults to first problem app\n\tconst app1 = app1Name\n\t\t? await getAppByName(app1Name)\n\t\t: allAppsFull.filter(isExerciseStepApp).at(0)\n\n\t// defaults to last exercise step app\n\tconst app2 = app2Name\n\t\t? await getAppByName(app2Name)\n\t\t: allAppsFull.filter(isExerciseStepApp).at(-1)\n\n\tasync function getDiffProp() {\n\t\tif (!app1 || !app2) {\n\t\t\treturn {\n\t\t\t\tapp1: app1?.name,\n\t\t\t\tapp2: app2?.name,\n\t\t\t\tdiffCode: null,\n\t\t\t}\n\t\t}\n\t\tconst diffCode = await getDiffCode(app1, app2, {\n\t\t\t...cacheOptions,\n\t\t\tforceFresh: searchParams.get('forceFresh') === 'diff',\n\t\t}).catch((e) => {\n\t\t\tconsole.error(e)\n\t\t\treturn null\n\t\t})\n\t\treturn {\n\t\t\tapp1: app1.name,\n\t\t\tapp2: app2.name,\n\t\t\tdiffCode,\n\t\t}\n\t}\n\n\tconst allApps = allAppsFull\n\t\t.filter((a, i, ar) => ar.findIndex((b) => a.name === b.name) === i)\n\t\t.map((a) => ({\n\t\t\tdisplayName: getAppDisplayName(a, allAppsFull),\n\t\t\tname: a.name,\n\t\t\ttitle: a.title,\n\t\t\ttype: a.type,\n\t\t}))\n\n\tconst diff = getDiffProp()\n\tconst app1Index = allApps.findIndex((a) => a.name === app1?.name)\n\tconst prevApp1Index = usingDefaultApp1\n\t\t? allApps.length - 2\n\t\t: app1Index === 0\n\t\t\t? -2\n\t\t\t: app1Index - 1\n\tconst prevApp2Index = prevApp1Index + 1\n\tconst nextApp1Index = usingDefaultApp1\n\t\t? 0\n\t\t: app1Index + 1 < allApps.length\n\t\t\t? app1Index + 1\n\t\t\t: -2\n\tconst nextApp2Index = nextApp1Index + 1\n\tconst prevApp1 = allAppsFull[prevApp1Index]?.name\n\tconst prevApp2 = allAppsFull[prevApp2Index]?.name\n\tconst nextApp1 = allAppsFull[nextApp1Index]?.name\n\tconst nextApp2 = allAppsFull[nextApp2Index]?.name\n\tconst prevSearchParams = new URLSearchParams(reqUrl.searchParams)\n\tprevSearchParams.set('app1', prevApp1 ?? '')\n\tprevSearchParams.set('app2', prevApp2 ?? '')\n\tconst nextSearchParams = new URLSearchParams(reqUrl.searchParams)\n\tnextSearchParams.set('app1', nextApp1 ?? '')\n\tnextSearchParams.set('app2', nextApp2 ?? '')\n\treturn {\n\t\tuserHasAccessPromise: userHasAccessToWorkshop({ request, timings }),\n\t\tallApps,\n\t\tdiff,\n\t\tprevLink:\n\t\t\tprevApp1 && prevApp2\n\t\t\t\t? { to: `/diff?${prevSearchParams}`, 'aria-label': 'Previous App' }\n\t\t\t\t: { to: '/diff' },\n\t\tnextLink:\n\t\t\tnextApp1 && nextApp2\n\t\t\t\t? { to: `/diff?${nextSearchParams}`, 'aria-label': 'Next App' }\n\t\t\t\t: { to: '/diff' },\n\t}\n}\n\nexport default function DiffViewer() {\n\tconst data = useLoaderData<typeof loader>()\n\tconst [params] = useSearchParams()\n\tconst paramsWithForcedRefresh = new URLSearchParams(params)\n\tparamsWithForcedRefresh.set('forceFresh', 'diff')\n\tconst navigation = useNavigation()\n\tconst isNavigating = useSpinDelay(navigation.state !== 'idle', {\n\t\tdelay: 200,\n\t\tminDuration: 200,\n\t})\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn('h-screen-safe relative', {\n\t\t\t\t'cursor-wait opacity-30': isNavigating,\n\t\t\t})}\n\t\t>\n\t\t\t<div className=\"h-full pb-16\">\n\t\t\t\t<Diff\n\t\t\t\t\tdiff={data.diff}\n\t\t\t\t\tallApps={data.allApps}\n\t\t\t\t\tuserHasAccessPromise={data.userHasAccessPromise}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<div className=\"bg-background fixed inset-x-0 bottom-0 z-10 flex h-16 items-center justify-end border-t\">\n\t\t\t\t<div className=\"flex h-full items-center justify-end\">\n\t\t\t\t\t<NavChevrons prev={data.prevLink} next={data.nextLink} />\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n"],"names":["diff","_UNSAFE_withComponentProps","data","useLoaderData","params","useSearchParams","URLSearchParams","set","navigation","useNavigation","isNavigating","useSpinDelay","state","delay","minDuration","jsxs","className","cn","children","jsx","Diff","allApps","userHasAccessPromise","NavChevrons","prev","prevLink","next","nextLink"],"mappings":"k6BA+GA,MAAAA,EAAAC,EAAA,UAAqC,CACpC,MAAMC,EAAOC,EAAA,EACP,CAACC,CAAM,EAAIC,EAAA,EACe,IAAIC,gBAAgBF,CAAM,EAClCG,IAAI,aAAc,MAAM,EAChD,MAAMC,EAAaC,EAAA,EACbC,EAAeC,EAAAA,aAAaH,EAAWI,QAAU,OAAQ,CAC9DC,MAAO,IACPC,YAAa,GACd,CAAC,EAED,OACCC,EAAAA,KAAC,MAAA,CACAC,UAAWC,EAAG,yBAA0B,CACvC,yBAA0BP,CAC3B,CAAC,EAEDQ,SAAA,CAAAC,EAAAA,IAAC,MAAA,CAAIH,UAAU,eACdE,SAAAC,EAAAA,IAACC,EAAA,CACApB,KAAME,EAAKF,KACXqB,QAASnB,EAAKmB,QACdC,qBAAsBpB,EAAKoB,qBAC5B,CAAA,CACD,QACC,MAAA,CAAIN,UAAU,0FACdE,SAAAC,EAAAA,IAAC,OAAIH,UAAU,uCACdE,SAAAC,EAAAA,IAACI,EAAA,CAAYC,KAAMtB,EAAKuB,SAAUC,KAAMxB,EAAKyB,SAAU,EACxD,CAAA,CACD,CAAA,CAAA,CACD,CAEF,CAAA"}
@@ -1,2 +1,2 @@
1
- import{w as d,L as s}from"./chunk-EPOLDU6W-BCLmut3y.js";import{j as e}from"./jsx-runtime-C5WNSv3b.js";import{I as t}from"./misc-DVYuZMjW.js";import{c as i,a as c}from"./user-BsPobzjB.js";import{u as a}from"./workshop-config-Zfc8zU0x.js";const j={getSitemapEntries:()=>null};function l(){const{product:{host:r}}=a();return`https://${r}/discord`}function g(){const r=i(),n=c(),o=l();return r?n?"https://discord.com/channels/715220730605731931/1161045224907341972":o:"/login"}function h(){const r=i(),n=c(),o=l();return r?n?e.jsxs("div",{className:"flex items-center justify-center gap-2 text-xl underline",children:[e.jsx(s,{to:"discord://discord.com/channels/715220730605731931/1161045224907341972",children:e.jsx(t,{name:"Discord",size:"2xl"})}),e.jsx(s,{to:"https://discord.com/channels/715220730605731931/1161045224907341972",target:"_blank",rel:"noreferrer noopener",children:"Open Discord"})]}):e.jsxs("div",{className:"flex flex-wrap items-center justify-center gap-2 text-xl",children:[e.jsxs(s,{to:o,className:"flex items-center gap-2 underline",children:[e.jsx(t,{name:"Discord",size:"2xl"}),"Connect Discord"]})," ",e.jsxs("span",{children:["to get access to the exclusive"," ",e.jsx(s,{to:"/discord",className:"underline",children:"discord channel"}),"."]})]}):e.jsxs("div",{className:"flex flex-wrap items-center justify-center gap-2 text-xl",children:[e.jsxs(s,{to:"/login",className:"inline-flex items-center gap-2 underline",children:[e.jsx(t,{name:"Discord",size:"2xl"}),"Login"]})," ",e.jsxs("span",{children:["to get access to the exclusive"," ",e.jsx(s,{to:"/discord",className:"underline",children:"discord channel"}),"."]})]})}const D=d(function(){return e.jsxs("div",{className:"container flex h-full max-w-3xl flex-col items-center justify-center gap-4 p-12",children:[e.jsx(h,{}),e.jsxs("p",{children:["The"," ",e.jsx(s,{target:"_blank",rel:"noreferrer noopener",className:"underline",to:"https://kentcdodds.com/discord",children:"Epic Web Community on Discord"})," ","is a great place to hang out with other developers who are working through this workshop. You can ask questions, get help, and solidify what you're learning by helping others."]}),e.jsx("p",{children:e.jsxs("small",{className:"text-sm",children:["If you've not joined the Epic Web Community on Discord yet, you'll be required to go through a short onboarding process first. A friendly bot will explain the process when you"," ",e.jsx(s,{to:"https://kcd.im/discord",target:"_blank",rel:"noreferrer noopener",className:"underline",children:"join"}),"."]})})]})});export{h as D,D as d,j as h,g as u};
2
- //# sourceMappingURL=discord-DlU9y5Iz.js.map
1
+ import{w as d,L as s}from"./chunk-EPOLDU6W-BCLmut3y.js";import{j as e}from"./jsx-runtime-C5WNSv3b.js";import{I as t}from"./misc-W4055b-0.js";import{c as i,a as c}from"./user-BsPobzjB.js";import{u as a}from"./workshop-config-Zfc8zU0x.js";const j={getSitemapEntries:()=>null};function l(){const{product:{host:r}}=a();return`https://${r}/discord`}function g(){const r=i(),n=c(),o=l();return r?n?"https://discord.com/channels/715220730605731931/1161045224907341972":o:"/login"}function h(){const r=i(),n=c(),o=l();return r?n?e.jsxs("div",{className:"flex items-center justify-center gap-2 text-xl underline",children:[e.jsx(s,{to:"discord://discord.com/channels/715220730605731931/1161045224907341972",children:e.jsx(t,{name:"Discord",size:"2xl"})}),e.jsx(s,{to:"https://discord.com/channels/715220730605731931/1161045224907341972",target:"_blank",rel:"noreferrer noopener",children:"Open Discord"})]}):e.jsxs("div",{className:"flex flex-wrap items-center justify-center gap-2 text-xl",children:[e.jsxs(s,{to:o,className:"flex items-center gap-2 underline",children:[e.jsx(t,{name:"Discord",size:"2xl"}),"Connect Discord"]})," ",e.jsxs("span",{children:["to get access to the exclusive"," ",e.jsx(s,{to:"/discord",className:"underline",children:"discord channel"}),"."]})]}):e.jsxs("div",{className:"flex flex-wrap items-center justify-center gap-2 text-xl",children:[e.jsxs(s,{to:"/login",className:"inline-flex items-center gap-2 underline",children:[e.jsx(t,{name:"Discord",size:"2xl"}),"Login"]})," ",e.jsxs("span",{children:["to get access to the exclusive"," ",e.jsx(s,{to:"/discord",className:"underline",children:"discord channel"}),"."]})]})}const D=d(function(){return e.jsxs("div",{className:"container flex h-full max-w-3xl flex-col items-center justify-center gap-4 p-12",children:[e.jsx(h,{}),e.jsxs("p",{children:["The"," ",e.jsx(s,{target:"_blank",rel:"noreferrer noopener",className:"underline",to:"https://kentcdodds.com/discord",children:"Epic Web Community on Discord"})," ","is a great place to hang out with other developers who are working through this workshop. You can ask questions, get help, and solidify what you're learning by helping others."]}),e.jsx("p",{children:e.jsxs("small",{className:"text-sm",children:["If you've not joined the Epic Web Community on Discord yet, you'll be required to go through a short onboarding process first. A friendly bot will explain the process when you"," ",e.jsx(s,{to:"https://kcd.im/discord",target:"_blank",rel:"noreferrer noopener",className:"underline",children:"join"}),"."]})})]})});export{h as D,D as d,j as h,g as u};
2
+ //# sourceMappingURL=discord-BJkw0IrB.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"discord-DlU9y5Iz.js","sources":["../../../app/routes/_app+/discord.tsx"],"sourcesContent":["import { type SEOHandle } from '@nasa-gcn/remix-seo'\nimport { Link } from 'react-router'\nimport { Icon } from '#app/components/icons.tsx'\nimport {\n\tuseOptionalDiscordMember,\n\tuseOptionalUser,\n} from '#app/components/user.tsx'\nimport { useWorkshopConfig } from '#app/components/workshop-config.tsx'\n\nexport const handle: SEOHandle = {\n\tgetSitemapEntries: () => null,\n}\n\nfunction useConnectDiscordURL() {\n\tconst {\n\t\tproduct: { host },\n\t} = useWorkshopConfig()\n\treturn `https://${host}/discord`\n}\n\nexport function useDiscordCTALink() {\n\tconst user = useOptionalUser()\n\tconst discordMember = useOptionalDiscordMember()\n\tconst connectDiscordURL = useConnectDiscordURL()\n\n\tif (!user) {\n\t\treturn '/login'\n\t}\n\tif (!discordMember) {\n\t\treturn connectDiscordURL\n\t}\n\n\treturn 'https://discord.com/channels/715220730605731931/1161045224907341972'\n}\n\nexport function DiscordCTA() {\n\tconst user = useOptionalUser()\n\tconst discordMember = useOptionalDiscordMember()\n\tconst connectDiscordURL = useConnectDiscordURL()\n\tif (!user) {\n\t\treturn (\n\t\t\t<div className=\"flex flex-wrap items-center justify-center gap-2 text-xl\">\n\t\t\t\t<Link to=\"/login\" className=\"inline-flex items-center gap-2 underline\">\n\t\t\t\t\t<Icon name=\"Discord\" size=\"2xl\" />\n\t\t\t\t\tLogin\n\t\t\t\t</Link>{' '}\n\t\t\t\t<span>\n\t\t\t\t\tto get access to the exclusive{' '}\n\t\t\t\t\t<Link to=\"/discord\" className=\"underline\">\n\t\t\t\t\t\tdiscord channel\n\t\t\t\t\t</Link>\n\t\t\t\t\t.\n\t\t\t\t</span>\n\t\t\t</div>\n\t\t)\n\t}\n\tif (!discordMember) {\n\t\treturn (\n\t\t\t<div className=\"flex flex-wrap items-center justify-center gap-2 text-xl\">\n\t\t\t\t<Link\n\t\t\t\t\tto={connectDiscordURL}\n\t\t\t\t\tclassName=\"flex items-center gap-2 underline\"\n\t\t\t\t>\n\t\t\t\t\t<Icon name=\"Discord\" size=\"2xl\" />\n\t\t\t\t\tConnect Discord\n\t\t\t\t</Link>{' '}\n\t\t\t\t<span>\n\t\t\t\t\tto get access to the exclusive{' '}\n\t\t\t\t\t<Link to=\"/discord\" className=\"underline\">\n\t\t\t\t\t\tdiscord channel\n\t\t\t\t\t</Link>\n\t\t\t\t\t.\n\t\t\t\t</span>\n\t\t\t</div>\n\t\t)\n\t}\n\n\treturn (\n\t\t<div className=\"flex items-center justify-center gap-2 text-xl underline\">\n\t\t\t<Link to=\"discord://discord.com/channels/715220730605731931/1161045224907341972\">\n\t\t\t\t<Icon name=\"Discord\" size=\"2xl\" />\n\t\t\t</Link>\n\t\t\t<Link\n\t\t\t\tto=\"https://discord.com/channels/715220730605731931/1161045224907341972\"\n\t\t\t\ttarget=\"_blank\"\n\t\t\t\trel=\"noreferrer noopener\"\n\t\t\t>\n\t\t\t\tOpen Discord\n\t\t\t</Link>\n\t\t</div>\n\t)\n}\n\nexport default function DiscordRoute() {\n\treturn (\n\t\t<div className=\"container flex h-full max-w-3xl flex-col items-center justify-center gap-4 p-12\">\n\t\t\t<DiscordCTA />\n\t\t\t<p>\n\t\t\t\tThe{' '}\n\t\t\t\t<Link\n\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\trel=\"noreferrer noopener\"\n\t\t\t\t\tclassName=\"underline\"\n\t\t\t\t\tto=\"https://kentcdodds.com/discord\"\n\t\t\t\t>\n\t\t\t\t\tEpic Web Community on Discord\n\t\t\t\t</Link>{' '}\n\t\t\t\tis a great place to hang out with other developers who are working\n\t\t\t\tthrough this workshop. You can ask questions, get help, and solidify\n\t\t\t\twhat you're learning by helping others.\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\t<small className=\"text-sm\">\n\t\t\t\t\tIf you've not joined the Epic Web Community on Discord yet, you'll be\n\t\t\t\t\trequired to go through a short onboarding process first. A friendly\n\t\t\t\t\tbot will explain the process when you{' '}\n\t\t\t\t\t<Link\n\t\t\t\t\t\tto=\"https://kcd.im/discord\"\n\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\trel=\"noreferrer noopener\"\n\t\t\t\t\t\tclassName=\"underline\"\n\t\t\t\t\t>\n\t\t\t\t\t\tjoin\n\t\t\t\t\t</Link>\n\t\t\t\t\t.\n\t\t\t\t</small>\n\t\t\t</p>\n\t\t</div>\n\t)\n}\n"],"names":["handle","getSitemapEntries","useConnectDiscordURL","product","host","useWorkshopConfig","useDiscordCTALink","user","useOptionalUser","discordMember","useOptionalDiscordMember","connectDiscordURL","DiscordCTA","jsxs","className","children","jsx","Link","to","Icon","name","size","target","rel","discord","_UNSAFE_withComponentProps"],"mappings":"6OASO,MAAMA,EAAoB,CAChCC,kBAAmBA,IAAM,IAC1B,EAEA,SAASC,GAAuB,CAC/B,KAAM,CACLC,QAAS,CAAEC,KAAAA,CAAK,GACbC,EAAA,EACJ,MAAO,WAAWD,CAAI,UACvB,CAEO,SAASE,GAAoB,CACnC,MAAMC,EAAOC,EAAA,EACPC,EAAgBC,EAAA,EAChBC,EAAoBT,EAAA,EAE1B,OAAKK,EAGAE,EAIE,sEAHCE,EAHA,QAOT,CAEO,SAASC,GAAa,CAC5B,MAAML,EAAOC,EAAA,EACPC,EAAgBC,EAAA,EAChBC,EAAoBT,EAAA,EAC1B,OAAKK,EAiBAE,EAsBJI,EAAAA,KAAC,MAAA,CAAIC,UAAU,2DACdC,SAAA,CAAAC,EAAAA,IAACC,EAAA,CAAKC,GAAG,wEACRH,SAAAC,EAAAA,IAACG,GAAKC,KAAK,UAAUC,KAAK,MAAM,CAAA,CACjC,EACAL,EAAAA,IAACC,EAAA,CACAC,GAAG,sEACHI,OAAO,SACPC,IAAI,sBACJR,SAAA,cAAA,CAED,CAAA,CAAA,CACD,EA/BCF,EAAAA,KAAC,MAAA,CAAIC,UAAU,2DACdC,SAAA,CAAAF,EAAAA,KAACI,EAAA,CACAC,GAAIP,EACJG,UAAU,oCAEVC,SAAA,CAAAC,EAAAA,IAACG,EAAA,CAAKC,KAAK,UAAUC,KAAK,MAAM,EAAE,iBAAA,EAEnC,EAAQ,WACP,OAAA,CAAKN,SAAA,CAAA,iCAC0B,UAC9BE,EAAA,CAAKC,GAAG,WAAWJ,UAAU,YAAYC,SAAA,kBAE1C,EAAO,GAAA,CAAA,CAER,CAAA,CAAA,CACD,EAhCAF,EAAAA,KAAC,MAAA,CAAIC,UAAU,2DACdC,SAAA,CAAAF,EAAAA,KAACI,EAAA,CAAKC,GAAG,SAASJ,UAAU,2CAC3BC,SAAA,CAAAC,EAAAA,IAACG,EAAA,CAAKC,KAAK,UAAUC,KAAK,MAAM,EAAE,OAAA,EAEnC,EAAQ,WACP,OAAA,CAAKN,SAAA,CAAA,iCAC0B,UAC9BE,EAAA,CAAKC,GAAG,WAAWJ,UAAU,YAAYC,SAAA,kBAE1C,EAAO,GAAA,CAAA,CAER,CAAA,CAAA,CACD,CAsCH,CAEA,MAAAS,EAAAC,EAAA,UAAuC,CACtC,OACCZ,EAAAA,KAAC,MAAA,CAAIC,UAAU,kFACdC,SAAA,CAAAC,EAAAA,IAACJ,EAAA,CAAA,CAAW,SACX,IAAA,CAAEG,SAAA,CAAA,MACE,IACJC,EAAAA,IAACC,EAAA,CACAK,OAAO,SACPC,IAAI,sBACJT,UAAU,YACVI,GAAG,iCACHH,SAAA,+BAAA,CAED,EAAQ,IAAI,iLAAA,CAAA,CAIb,EACAC,EAAAA,IAAC,IAAA,CACAD,SAAAF,EAAAA,KAAC,QAAA,CAAMC,UAAU,UAAUC,SAAA,CAAA,kLAGY,IACtCC,EAAAA,IAACC,EAAA,CACAC,GAAG,yBACHI,OAAO,SACPC,IAAI,sBACJT,UAAU,YACVC,SAAA,OAED,EAAO,GAAA,EAER,CAAA,CACD,CAAA,CAAA,CACD,CAEF,CAAA"}
1
+ {"version":3,"file":"discord-BJkw0IrB.js","sources":["../../../app/routes/_app+/discord.tsx"],"sourcesContent":["import { type SEOHandle } from '@nasa-gcn/remix-seo'\nimport { Link } from 'react-router'\nimport { Icon } from '#app/components/icons.tsx'\nimport {\n\tuseOptionalDiscordMember,\n\tuseOptionalUser,\n} from '#app/components/user.tsx'\nimport { useWorkshopConfig } from '#app/components/workshop-config.tsx'\n\nexport const handle: SEOHandle = {\n\tgetSitemapEntries: () => null,\n}\n\nfunction useConnectDiscordURL() {\n\tconst {\n\t\tproduct: { host },\n\t} = useWorkshopConfig()\n\treturn `https://${host}/discord`\n}\n\nexport function useDiscordCTALink() {\n\tconst user = useOptionalUser()\n\tconst discordMember = useOptionalDiscordMember()\n\tconst connectDiscordURL = useConnectDiscordURL()\n\n\tif (!user) {\n\t\treturn '/login'\n\t}\n\tif (!discordMember) {\n\t\treturn connectDiscordURL\n\t}\n\n\treturn 'https://discord.com/channels/715220730605731931/1161045224907341972'\n}\n\nexport function DiscordCTA() {\n\tconst user = useOptionalUser()\n\tconst discordMember = useOptionalDiscordMember()\n\tconst connectDiscordURL = useConnectDiscordURL()\n\tif (!user) {\n\t\treturn (\n\t\t\t<div className=\"flex flex-wrap items-center justify-center gap-2 text-xl\">\n\t\t\t\t<Link to=\"/login\" className=\"inline-flex items-center gap-2 underline\">\n\t\t\t\t\t<Icon name=\"Discord\" size=\"2xl\" />\n\t\t\t\t\tLogin\n\t\t\t\t</Link>{' '}\n\t\t\t\t<span>\n\t\t\t\t\tto get access to the exclusive{' '}\n\t\t\t\t\t<Link to=\"/discord\" className=\"underline\">\n\t\t\t\t\t\tdiscord channel\n\t\t\t\t\t</Link>\n\t\t\t\t\t.\n\t\t\t\t</span>\n\t\t\t</div>\n\t\t)\n\t}\n\tif (!discordMember) {\n\t\treturn (\n\t\t\t<div className=\"flex flex-wrap items-center justify-center gap-2 text-xl\">\n\t\t\t\t<Link\n\t\t\t\t\tto={connectDiscordURL}\n\t\t\t\t\tclassName=\"flex items-center gap-2 underline\"\n\t\t\t\t>\n\t\t\t\t\t<Icon name=\"Discord\" size=\"2xl\" />\n\t\t\t\t\tConnect Discord\n\t\t\t\t</Link>{' '}\n\t\t\t\t<span>\n\t\t\t\t\tto get access to the exclusive{' '}\n\t\t\t\t\t<Link to=\"/discord\" className=\"underline\">\n\t\t\t\t\t\tdiscord channel\n\t\t\t\t\t</Link>\n\t\t\t\t\t.\n\t\t\t\t</span>\n\t\t\t</div>\n\t\t)\n\t}\n\n\treturn (\n\t\t<div className=\"flex items-center justify-center gap-2 text-xl underline\">\n\t\t\t<Link to=\"discord://discord.com/channels/715220730605731931/1161045224907341972\">\n\t\t\t\t<Icon name=\"Discord\" size=\"2xl\" />\n\t\t\t</Link>\n\t\t\t<Link\n\t\t\t\tto=\"https://discord.com/channels/715220730605731931/1161045224907341972\"\n\t\t\t\ttarget=\"_blank\"\n\t\t\t\trel=\"noreferrer noopener\"\n\t\t\t>\n\t\t\t\tOpen Discord\n\t\t\t</Link>\n\t\t</div>\n\t)\n}\n\nexport default function DiscordRoute() {\n\treturn (\n\t\t<div className=\"container flex h-full max-w-3xl flex-col items-center justify-center gap-4 p-12\">\n\t\t\t<DiscordCTA />\n\t\t\t<p>\n\t\t\t\tThe{' '}\n\t\t\t\t<Link\n\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\trel=\"noreferrer noopener\"\n\t\t\t\t\tclassName=\"underline\"\n\t\t\t\t\tto=\"https://kentcdodds.com/discord\"\n\t\t\t\t>\n\t\t\t\t\tEpic Web Community on Discord\n\t\t\t\t</Link>{' '}\n\t\t\t\tis a great place to hang out with other developers who are working\n\t\t\t\tthrough this workshop. You can ask questions, get help, and solidify\n\t\t\t\twhat you're learning by helping others.\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\t<small className=\"text-sm\">\n\t\t\t\t\tIf you've not joined the Epic Web Community on Discord yet, you'll be\n\t\t\t\t\trequired to go through a short onboarding process first. A friendly\n\t\t\t\t\tbot will explain the process when you{' '}\n\t\t\t\t\t<Link\n\t\t\t\t\t\tto=\"https://kcd.im/discord\"\n\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\trel=\"noreferrer noopener\"\n\t\t\t\t\t\tclassName=\"underline\"\n\t\t\t\t\t>\n\t\t\t\t\t\tjoin\n\t\t\t\t\t</Link>\n\t\t\t\t\t.\n\t\t\t\t</small>\n\t\t\t</p>\n\t\t</div>\n\t)\n}\n"],"names":["handle","getSitemapEntries","useConnectDiscordURL","product","host","useWorkshopConfig","useDiscordCTALink","user","useOptionalUser","discordMember","useOptionalDiscordMember","connectDiscordURL","DiscordCTA","jsxs","className","children","jsx","Link","to","Icon","name","size","target","rel","discord","_UNSAFE_withComponentProps"],"mappings":"6OASO,MAAMA,EAAoB,CAChCC,kBAAmBA,IAAM,IAC1B,EAEA,SAASC,GAAuB,CAC/B,KAAM,CACLC,QAAS,CAAEC,KAAAA,CAAK,GACbC,EAAA,EACJ,MAAO,WAAWD,CAAI,UACvB,CAEO,SAASE,GAAoB,CACnC,MAAMC,EAAOC,EAAA,EACPC,EAAgBC,EAAA,EAChBC,EAAoBT,EAAA,EAE1B,OAAKK,EAGAE,EAIE,sEAHCE,EAHA,QAOT,CAEO,SAASC,GAAa,CAC5B,MAAML,EAAOC,EAAA,EACPC,EAAgBC,EAAA,EAChBC,EAAoBT,EAAA,EAC1B,OAAKK,EAiBAE,EAsBJI,EAAAA,KAAC,MAAA,CAAIC,UAAU,2DACdC,SAAA,CAAAC,EAAAA,IAACC,EAAA,CAAKC,GAAG,wEACRH,SAAAC,EAAAA,IAACG,GAAKC,KAAK,UAAUC,KAAK,MAAM,CAAA,CACjC,EACAL,EAAAA,IAACC,EAAA,CACAC,GAAG,sEACHI,OAAO,SACPC,IAAI,sBACJR,SAAA,cAAA,CAED,CAAA,CAAA,CACD,EA/BCF,EAAAA,KAAC,MAAA,CAAIC,UAAU,2DACdC,SAAA,CAAAF,EAAAA,KAACI,EAAA,CACAC,GAAIP,EACJG,UAAU,oCAEVC,SAAA,CAAAC,EAAAA,IAACG,EAAA,CAAKC,KAAK,UAAUC,KAAK,MAAM,EAAE,iBAAA,EAEnC,EAAQ,WACP,OAAA,CAAKN,SAAA,CAAA,iCAC0B,UAC9BE,EAAA,CAAKC,GAAG,WAAWJ,UAAU,YAAYC,SAAA,kBAE1C,EAAO,GAAA,CAAA,CAER,CAAA,CAAA,CACD,EAhCAF,EAAAA,KAAC,MAAA,CAAIC,UAAU,2DACdC,SAAA,CAAAF,EAAAA,KAACI,EAAA,CAAKC,GAAG,SAASJ,UAAU,2CAC3BC,SAAA,CAAAC,EAAAA,IAACG,EAAA,CAAKC,KAAK,UAAUC,KAAK,MAAM,EAAE,OAAA,EAEnC,EAAQ,WACP,OAAA,CAAKN,SAAA,CAAA,iCAC0B,UAC9BE,EAAA,CAAKC,GAAG,WAAWJ,UAAU,YAAYC,SAAA,kBAE1C,EAAO,GAAA,CAAA,CAER,CAAA,CAAA,CACD,CAsCH,CAEA,MAAAS,EAAAC,EAAA,UAAuC,CACtC,OACCZ,EAAAA,KAAC,MAAA,CAAIC,UAAU,kFACdC,SAAA,CAAAC,EAAAA,IAACJ,EAAA,CAAA,CAAW,SACX,IAAA,CAAEG,SAAA,CAAA,MACE,IACJC,EAAAA,IAACC,EAAA,CACAK,OAAO,SACPC,IAAI,sBACJT,UAAU,YACVI,GAAG,iCACHH,SAAA,+BAAA,CAED,EAAQ,IAAI,iLAAA,CAAA,CAIb,EACAC,EAAAA,IAAC,IAAA,CACAD,SAAAF,EAAAA,KAAC,QAAA,CAAMC,UAAU,UAAUC,SAAA,CAAA,kLAGY,IACtCC,EAAAA,IAACC,EAAA,CACAC,GAAG,yBACHI,OAAO,SACPC,IAAI,sBACJT,UAAU,YACVC,SAAA,OAED,EAAO,GAAA,EAER,CAAA,CACD,CAAA,CAAA,CACD,CAEF,CAAA"}
@@ -1,2 +1,2 @@
1
- import{d as f,h}from"./discord-DlU9y5Iz.js";import"./chunk-EPOLDU6W-BCLmut3y.js";import"./index-CqIc3cxq.js";import"./jsx-runtime-C5WNSv3b.js";import"./misc-DVYuZMjW.js";import"./user-BsPobzjB.js";import"./root-loader-BOzEMapJ.js";import"./workshop-config-Zfc8zU0x.js";export{f as default,h as handle};
2
- //# sourceMappingURL=discord-CuxZiU8E.js.map
1
+ import{d as f,h}from"./discord-BJkw0IrB.js";import"./chunk-EPOLDU6W-BCLmut3y.js";import"./index-CqIc3cxq.js";import"./jsx-runtime-C5WNSv3b.js";import"./misc-W4055b-0.js";import"./user-BsPobzjB.js";import"./root-loader-BOzEMapJ.js";import"./workshop-config-Zfc8zU0x.js";export{f as default,h as handle};
2
+ //# sourceMappingURL=discord-r3m19sUM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discord-r3m19sUM.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1,2 +1,2 @@
1
- import{w}from"./chunk-EPOLDU6W-BCLmut3y.js";import{j as m}from"./jsx-runtime-C5WNSv3b.js";import{r as u}from"./index-CqIc3cxq.js";import{E as g,D as h}from"./epic-video-BVcJzJzi.js";import"./use-event-source-BuD4_2SF.js";import"./index-DzdDahau.js";import"./index-vDCSPjrM.js";import"./index-BW8stNyh.js";import"./misc-DVYuZMjW.js";import"./tooltip-Chzzs4KB.js";import"./root-loader-BOzEMapJ.js";import"./pe-CIZUOJMr.js";import"./schemas-Uj5SZtvt.js";import"./online-DiNLkgTC.js";import"./loading-CUydCGD3.js";import"./user-BsPobzjB.js";import"./workshop-config-Zfc8zU0x.js";function l(p,r,i={}){const{schema:s}=i,e=crypto.randomUUID();return new Promise((t,o)=>{if(!window.parent||window.parent===window){console.log("[MCP] No parent frame available. Would have sent message:",{type:p,messageId:e,payload:r}),o(new Error("No parent frame available"));return}window.parent.postMessage({type:p,messageId:e,payload:r},"*");function n(a){if(a.data.type!=="ui-message-response"||a.data.messageId!==e)return;window.removeEventListener("message",n);const{response:d,error:f}=a.data.payload;if(f)return o(f);if(!s)return t(d);const c=s.safeParse(d);return c.success?t(c.data):o(c.error)}window.addEventListener("message",n)})}const D=w(function({loaderData:r}){const i=u.useRef(null);u.useEffect(()=>{r.videoInfos?.finally(()=>{if(window.parent.postMessage({type:"ui-lifecycle-iframe-ready"},"*"),!i.current)return;const e=i.current.clientHeight,t=i.current.clientWidth;window.parent.postMessage({type:"ui-size-change",payload:{height:e,width:t}},"*")})},[r.videoInfos]);async function s(e){const t=e.target;if(!(t instanceof HTMLAnchorElement))return;const o=t.href;if(!o)return;e.preventDefault(),e.stopPropagation();const n=o.startsWith("http")?new URL(o):new URL(o,window.location.origin);n.host===window.location.host&&n.pathname==="/login"&&await l("tool",{toolName:"login",params:{workshopDirectory:ENV.EPICSHOP_CONTEXT_CWD}}),await l("link",{url:n.toString()})}return m.jsx("div",{ref:i,onClickCapture:s,children:m.jsx(g,{epicVideoInfosPromise:r.videoInfos,children:m.jsx(h,{url:r.videoUrl})})})});export{D as default};
2
- //# sourceMappingURL=epic-video-Bx8Ctiez.js.map
1
+ import{w}from"./chunk-EPOLDU6W-BCLmut3y.js";import{j as m}from"./jsx-runtime-C5WNSv3b.js";import{r as u}from"./index-CqIc3cxq.js";import{E as g,D as h}from"./epic-video-D0drHmgC.js";import"./use-event-source-BuD4_2SF.js";import"./index-DzdDahau.js";import"./index-vDCSPjrM.js";import"./index-CdzVFL-Z.js";import"./misc-W4055b-0.js";import"./tooltip-Tlsyx2YO.js";import"./root-loader-BOzEMapJ.js";import"./pe-CIZUOJMr.js";import"./schemas-Uj5SZtvt.js";import"./online-DiNLkgTC.js";import"./loading-CDNzW5oO.js";import"./user-BsPobzjB.js";import"./workshop-config-Zfc8zU0x.js";function l(p,r,i={}){const{schema:s}=i,e=crypto.randomUUID();return new Promise((t,o)=>{if(!window.parent||window.parent===window){console.log("[MCP] No parent frame available. Would have sent message:",{type:p,messageId:e,payload:r}),o(new Error("No parent frame available"));return}window.parent.postMessage({type:p,messageId:e,payload:r},"*");function n(a){if(a.data.type!=="ui-message-response"||a.data.messageId!==e)return;window.removeEventListener("message",n);const{response:d,error:f}=a.data.payload;if(f)return o(f);if(!s)return t(d);const c=s.safeParse(d);return c.success?t(c.data):o(c.error)}window.addEventListener("message",n)})}const D=w(function({loaderData:r}){const i=u.useRef(null);u.useEffect(()=>{r.videoInfos?.finally(()=>{if(window.parent.postMessage({type:"ui-lifecycle-iframe-ready"},"*"),!i.current)return;const e=i.current.clientHeight,t=i.current.clientWidth;window.parent.postMessage({type:"ui-size-change",payload:{height:e,width:t}},"*")})},[r.videoInfos]);async function s(e){const t=e.target;if(!(t instanceof HTMLAnchorElement))return;const o=t.href;if(!o)return;e.preventDefault(),e.stopPropagation();const n=o.startsWith("http")?new URL(o):new URL(o,window.location.origin);n.host===window.location.host&&n.pathname==="/login"&&await l("tool",{toolName:"login",params:{workshopDirectory:ENV.EPICSHOP_CONTEXT_CWD}}),await l("link",{url:n.toString()})}return m.jsx("div",{ref:i,onClickCapture:s,children:m.jsx(g,{epicVideoInfosPromise:r.videoInfos,children:m.jsx(h,{url:r.videoUrl})})})});export{D as default};
2
+ //# sourceMappingURL=epic-video-8Hv_HMMr.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"epic-video-Bx8Ctiez.js","sources":["../../../app/routes/mcp-ui+/__utils.ts","../../../app/routes/mcp-ui+/epic-video.tsx"],"sourcesContent":["import { useEffect } from 'react'\nimport { type z } from 'zod'\n\nexport function useMcpUiInit(rootRef: React.RefObject<HTMLDivElement | null>) {\n\tuseEffect(() => {\n\t\twindow.parent.postMessage({ type: 'ui-lifecycle-iframe-ready' }, '*')\n\t\tif (!rootRef.current) return\n\n\t\tconst height = rootRef.current.clientHeight\n\t\tconst width = rootRef.current.clientWidth\n\n\t\twindow.parent.postMessage(\n\t\t\t{ type: 'ui-size-change', payload: { height, width } },\n\t\t\t'*',\n\t\t)\n\t}, [rootRef])\n}\n\ntype MessageOptions = { schema?: z.ZodSchema }\n\ntype McpMessageReturnType<Options> = Promise<\n\tOptions extends { schema: z.ZodSchema } ? z.infer<Options['schema']> : unknown\n>\n\ntype McpMessageTypes = {\n\ttool: { toolName: string; params: Record<string, unknown> }\n\tprompt: { prompt: string }\n\tlink: { url: string }\n}\n\ntype McpMessageType = keyof McpMessageTypes\n\nfunction sendMcpMessage<Options extends MessageOptions>(\n\ttype: 'tool',\n\tpayload: McpMessageTypes['tool'],\n\toptions?: Options,\n): McpMessageReturnType<Options>\n\nfunction sendMcpMessage<Options extends MessageOptions>(\n\ttype: 'prompt',\n\tpayload: McpMessageTypes['prompt'],\n\toptions?: Options,\n): McpMessageReturnType<Options>\n\nfunction sendMcpMessage<Options extends MessageOptions>(\n\ttype: 'link',\n\tpayload: McpMessageTypes['link'],\n\toptions?: Options,\n): McpMessageReturnType<Options>\n\nfunction sendMcpMessage<Options extends MessageOptions>(\n\ttype: 'link',\n\tpayload: McpMessageTypes['link'],\n\toptions?: Options,\n): McpMessageReturnType<Options>\n\nfunction sendMcpMessage(\n\ttype: McpMessageType,\n\tpayload: McpMessageTypes[McpMessageType],\n\toptions: MessageOptions = {},\n): McpMessageReturnType<typeof options> {\n\tconst { schema } = options\n\tconst messageId = crypto.randomUUID()\n\n\treturn new Promise((resolve, reject) => {\n\t\tif (!window.parent || window.parent === window) {\n\t\t\tconsole.log(`[MCP] No parent frame available. Would have sent message:`, {\n\t\t\t\ttype,\n\t\t\t\tmessageId,\n\t\t\t\tpayload,\n\t\t\t})\n\t\t\treject(new Error('No parent frame available'))\n\t\t\treturn\n\t\t}\n\n\t\twindow.parent.postMessage({ type, messageId, payload }, '*')\n\n\t\tfunction handleMessage(event: MessageEvent) {\n\t\t\tif (event.data.type !== 'ui-message-response') return\n\t\t\tif (event.data.messageId !== messageId) return\n\t\t\twindow.removeEventListener('message', handleMessage)\n\n\t\t\tconst { response, error } = event.data.payload\n\n\t\t\tif (error) return reject(error)\n\t\t\tif (!schema) return resolve(response)\n\n\t\t\tconst parseResult = schema.safeParse(response)\n\t\t\tif (!parseResult.success) return reject(parseResult.error)\n\n\t\t\treturn resolve(parseResult.data)\n\t\t}\n\n\t\twindow.addEventListener('message', handleMessage)\n\t})\n}\n\nexport { sendMcpMessage }\n\nexport function waitForRenderData<RenderData>(\n\tschema: z.ZodSchema<RenderData>,\n): Promise<RenderData> {\n\treturn new Promise((resolve, reject) => {\n\t\twindow.parent.postMessage({ type: 'ui-lifecycle-iframe-ready' }, '*')\n\n\t\tfunction handleMessage(event: MessageEvent) {\n\t\t\tif (event.data?.type !== 'ui-lifecycle-iframe-render-data') return\n\t\t\twindow.removeEventListener('message', handleMessage)\n\n\t\t\tconst { renderData, error } = event.data.payload\n\n\t\t\tif (error) return reject(error)\n\t\t\tif (!schema) return resolve(renderData)\n\n\t\t\tconst parseResult = schema.safeParse(renderData)\n\t\t\tif (!parseResult.success) return reject(parseResult.error)\n\n\t\t\treturn resolve(parseResult.data)\n\t\t}\n\n\t\twindow.addEventListener('message', handleMessage)\n\t})\n}\n","import { invariantResponse } from '@epic-web/invariant'\nimport { getEpicVideoInfos } from '@epic-web/workshop-utils/epic-api.server'\nimport { makeTimings } from '@epic-web/workshop-utils/timing.server'\nimport { useEffect, useRef } from 'react'\nimport { data } from 'react-router'\nimport {\n\tDeferredEpicVideo,\n\tEpicVideoInfoProvider,\n} from '#app/components/epic-video.tsx'\nimport { type Route } from './+types/epic-video.tsx'\nimport { sendMcpMessage } from './__utils.ts'\n\nexport async function loader({ request }: Route.LoaderArgs) {\n\tconst timings = makeTimings('epicVideoLoader')\n\tconst videoUrl = new URL(request.url).searchParams.get('url')\n\tinvariantResponse(videoUrl, 'url param is required')\n\tconst videoInfos = getEpicVideoInfos([videoUrl], {\n\t\trequest,\n\t\ttimings,\n\t})\n\treturn data(\n\t\t{ videoInfos, videoUrl },\n\t\t{\n\t\t\theaders: {\n\t\t\t\t'Server-Timing': timings.toString(),\n\t\t\t},\n\t\t},\n\t)\n}\n\nexport default function EpicVideoEmbedRoute({\n\tloaderData,\n}: Route.ComponentProps) {\n\tconst rootRef = useRef<HTMLDivElement>(null)\n\tuseEffect(() => {\n\t\tvoid loaderData.videoInfos?.finally(() => {\n\t\t\twindow.parent.postMessage({ type: 'ui-lifecycle-iframe-ready' }, '*')\n\t\t\tif (!rootRef.current) return\n\n\t\t\tconst height = rootRef.current.clientHeight\n\t\t\tconst width = rootRef.current.clientWidth\n\n\t\t\twindow.parent.postMessage(\n\t\t\t\t{ type: 'ui-size-change', payload: { height, width } },\n\t\t\t\t'*',\n\t\t\t)\n\t\t})\n\t}, [loaderData.videoInfos])\n\n\tasync function handleLinksClick(event: React.MouseEvent<HTMLElement>) {\n\t\tconst target = event.target\n\t\tif (!(target instanceof HTMLAnchorElement)) return\n\n\t\tconst href = target.href\n\t\tif (!href) return\n\n\t\tevent.preventDefault()\n\t\tevent.stopPropagation()\n\n\t\tconst url = href.startsWith('http')\n\t\t\t? new URL(href)\n\t\t\t: new URL(href, window.location.origin)\n\t\tconst isLocal = url.host === window.location.host\n\n\t\tif (isLocal && url.pathname === '/login') {\n\t\t\tawait sendMcpMessage('tool', {\n\t\t\t\ttoolName: 'login',\n\t\t\t\tparams: { workshopDirectory: ENV.EPICSHOP_CONTEXT_CWD },\n\t\t\t})\n\t\t}\n\n\t\tawait sendMcpMessage('link', { url: url.toString() })\n\t}\n\n\treturn (\n\t\t<div ref={rootRef} onClickCapture={handleLinksClick}>\n\t\t\t<EpicVideoInfoProvider epicVideoInfosPromise={loaderData.videoInfos}>\n\t\t\t\t<DeferredEpicVideo url={loaderData.videoUrl} />\n\t\t\t</EpicVideoInfoProvider>\n\t\t</div>\n\t)\n}\n"],"names":["sendMcpMessage","type","payload","options","schema","messageId","resolve","reject","handleMessage","event","response","error","parseResult","epicVideo","_UNSAFE_withComponentProps","loaderData","rootRef","useRef","useEffect","videoInfos","finally","window","parent","postMessage","current","height","clientHeight","width","clientWidth","handleLinksClick","target","HTMLAnchorElement","href","preventDefault","stopPropagation","url","startsWith","URL","location","origin","host","pathname","toolName","params","workshopDirectory","ENV","EPICSHOP_CONTEXT_CWD","toString","ref","onClickCapture","children","jsx","EpicVideoInfoProvider","epicVideoInfosPromise","DeferredEpicVideo","videoUrl"],"mappings":"+jBAwDA,SAASA,EACRC,EACAC,EACAC,EAA0B,CAAA,EACa,CACvC,KAAM,CAAE,OAAAC,GAAWD,EACbE,EAAY,OAAO,WAAA,EAEzB,OAAO,IAAI,QAAQ,CAACC,EAASC,IAAW,CACvC,GAAI,CAAC,OAAO,QAAU,OAAO,SAAW,OAAQ,CAC/C,QAAQ,IAAI,4DAA6D,CACxE,KAAAN,EACA,UAAAI,EACA,QAAAH,CAAA,CACA,EACDK,EAAO,IAAI,MAAM,2BAA2B,CAAC,EAC7C,MACD,CAEA,OAAO,OAAO,YAAY,CAAE,KAAAN,EAAM,UAAAI,EAAW,QAAAH,CAAA,EAAW,GAAG,EAE3D,SAASM,EAAcC,EAAqB,CAE3C,GADIA,EAAM,KAAK,OAAS,uBACpBA,EAAM,KAAK,YAAcJ,EAAW,OACxC,OAAO,oBAAoB,UAAWG,CAAa,EAEnD,KAAM,CAAE,SAAAE,EAAU,MAAAC,CAAA,EAAUF,EAAM,KAAK,QAEvC,GAAIE,EAAO,OAAOJ,EAAOI,CAAK,EAC9B,GAAI,CAACP,EAAQ,OAAOE,EAAQI,CAAQ,EAEpC,MAAME,EAAcR,EAAO,UAAUM,CAAQ,EAC7C,OAAKE,EAAY,QAEVN,EAAQM,EAAY,IAAI,EAFEL,EAAOK,EAAY,KAAK,CAG1D,CAEA,OAAO,iBAAiB,UAAWJ,CAAa,CACjD,CAAC,CACF,CCjEA,MAAAK,EAAAC,EAAA,SAA4C,CAC3CC,WAAAA,CACD,EAAyB,CACxB,MAAMC,EAAUC,EAAAA,OAAuB,IAAI,EAC3CC,EAAAA,UAAU,IAAM,CACVH,EAAWI,YAAYC,QAAQ,IAAM,CAEzC,GADAC,OAAOC,OAAOC,YAAY,CAAEtB,KAAM,6BAA+B,GAAG,EAChE,CAACe,EAAQQ,QAAS,OAEtB,MAAMC,EAAST,EAAQQ,QAAQE,aACzBC,EAAQX,EAAQQ,QAAQI,YAE9BP,OAAOC,OAAOC,YACb,CAAEtB,KAAM,iBAAkBC,QAAS,CAAEuB,OAAAA,EAAQE,MAAAA,CAAM,GACnD,GACD,CACD,CAAC,CACF,EAAG,CAACZ,EAAWI,UAAU,CAAC,EAE1B,eAAeU,EAAiBpB,EAAsC,CACrE,MAAMqB,EAASrB,EAAMqB,OACrB,GAAI,EAAEA,aAAkBC,mBAAoB,OAE5C,MAAMC,EAAOF,EAAOE,KACpB,GAAI,CAACA,EAAM,OAEXvB,EAAMwB,eAAA,EACNxB,EAAMyB,gBAAA,EAEN,MAAMC,EAAMH,EAAKI,WAAW,MAAM,EAC/B,IAAIC,IAAIL,CAAI,EACZ,IAAIK,IAAIL,EAAMX,OAAOiB,SAASC,MAAM,EACvBJ,EAAIK,OAASnB,OAAOiB,SAASE,MAE9BL,EAAIM,WAAa,UAC/B,MAAMzC,EAAe,OAAQ,CAC5B0C,SAAU,QACVC,OAAQ,CAAEC,kBAAmBC,IAAIC,oBAAqB,CACvD,CAAC,EAGF,MAAM9C,EAAe,OAAQ,CAAEmC,IAAKA,EAAIY,SAAA,CAAW,CAAC,CACrD,CAEA,aACE,MAAA,CAAIC,IAAKhC,EAASiC,eAAgBpB,EAClCqB,SAAAC,EAAAA,IAACC,EAAA,CAAsBC,sBAAuBtC,EAAWI,WACxD+B,SAAAC,EAAAA,IAACG,EAAA,CAAkBnB,IAAKpB,EAAWwC,SAAU,EAC9C,CAAA,CACD,CAEF,CAAA"}
1
+ {"version":3,"file":"epic-video-8Hv_HMMr.js","sources":["../../../app/routes/mcp-ui+/__utils.ts","../../../app/routes/mcp-ui+/epic-video.tsx"],"sourcesContent":["import { useEffect } from 'react'\nimport { type z } from 'zod'\n\nexport function useMcpUiInit(rootRef: React.RefObject<HTMLDivElement | null>) {\n\tuseEffect(() => {\n\t\twindow.parent.postMessage({ type: 'ui-lifecycle-iframe-ready' }, '*')\n\t\tif (!rootRef.current) return\n\n\t\tconst height = rootRef.current.clientHeight\n\t\tconst width = rootRef.current.clientWidth\n\n\t\twindow.parent.postMessage(\n\t\t\t{ type: 'ui-size-change', payload: { height, width } },\n\t\t\t'*',\n\t\t)\n\t}, [rootRef])\n}\n\ntype MessageOptions = { schema?: z.ZodSchema }\n\ntype McpMessageReturnType<Options> = Promise<\n\tOptions extends { schema: z.ZodSchema } ? z.infer<Options['schema']> : unknown\n>\n\ntype McpMessageTypes = {\n\ttool: { toolName: string; params: Record<string, unknown> }\n\tprompt: { prompt: string }\n\tlink: { url: string }\n}\n\ntype McpMessageType = keyof McpMessageTypes\n\nfunction sendMcpMessage<Options extends MessageOptions>(\n\ttype: 'tool',\n\tpayload: McpMessageTypes['tool'],\n\toptions?: Options,\n): McpMessageReturnType<Options>\n\nfunction sendMcpMessage<Options extends MessageOptions>(\n\ttype: 'prompt',\n\tpayload: McpMessageTypes['prompt'],\n\toptions?: Options,\n): McpMessageReturnType<Options>\n\nfunction sendMcpMessage<Options extends MessageOptions>(\n\ttype: 'link',\n\tpayload: McpMessageTypes['link'],\n\toptions?: Options,\n): McpMessageReturnType<Options>\n\nfunction sendMcpMessage<Options extends MessageOptions>(\n\ttype: 'link',\n\tpayload: McpMessageTypes['link'],\n\toptions?: Options,\n): McpMessageReturnType<Options>\n\nfunction sendMcpMessage(\n\ttype: McpMessageType,\n\tpayload: McpMessageTypes[McpMessageType],\n\toptions: MessageOptions = {},\n): McpMessageReturnType<typeof options> {\n\tconst { schema } = options\n\tconst messageId = crypto.randomUUID()\n\n\treturn new Promise((resolve, reject) => {\n\t\tif (!window.parent || window.parent === window) {\n\t\t\tconsole.log(`[MCP] No parent frame available. Would have sent message:`, {\n\t\t\t\ttype,\n\t\t\t\tmessageId,\n\t\t\t\tpayload,\n\t\t\t})\n\t\t\treject(new Error('No parent frame available'))\n\t\t\treturn\n\t\t}\n\n\t\twindow.parent.postMessage({ type, messageId, payload }, '*')\n\n\t\tfunction handleMessage(event: MessageEvent) {\n\t\t\tif (event.data.type !== 'ui-message-response') return\n\t\t\tif (event.data.messageId !== messageId) return\n\t\t\twindow.removeEventListener('message', handleMessage)\n\n\t\t\tconst { response, error } = event.data.payload\n\n\t\t\tif (error) return reject(error)\n\t\t\tif (!schema) return resolve(response)\n\n\t\t\tconst parseResult = schema.safeParse(response)\n\t\t\tif (!parseResult.success) return reject(parseResult.error)\n\n\t\t\treturn resolve(parseResult.data)\n\t\t}\n\n\t\twindow.addEventListener('message', handleMessage)\n\t})\n}\n\nexport { sendMcpMessage }\n\nexport function waitForRenderData<RenderData>(\n\tschema: z.ZodSchema<RenderData>,\n): Promise<RenderData> {\n\treturn new Promise((resolve, reject) => {\n\t\twindow.parent.postMessage({ type: 'ui-lifecycle-iframe-ready' }, '*')\n\n\t\tfunction handleMessage(event: MessageEvent) {\n\t\t\tif (event.data?.type !== 'ui-lifecycle-iframe-render-data') return\n\t\t\twindow.removeEventListener('message', handleMessage)\n\n\t\t\tconst { renderData, error } = event.data.payload\n\n\t\t\tif (error) return reject(error)\n\t\t\tif (!schema) return resolve(renderData)\n\n\t\t\tconst parseResult = schema.safeParse(renderData)\n\t\t\tif (!parseResult.success) return reject(parseResult.error)\n\n\t\t\treturn resolve(parseResult.data)\n\t\t}\n\n\t\twindow.addEventListener('message', handleMessage)\n\t})\n}\n","import { invariantResponse } from '@epic-web/invariant'\nimport { getEpicVideoInfos } from '@epic-web/workshop-utils/epic-api.server'\nimport { makeTimings } from '@epic-web/workshop-utils/timing.server'\nimport { useEffect, useRef } from 'react'\nimport { data } from 'react-router'\nimport {\n\tDeferredEpicVideo,\n\tEpicVideoInfoProvider,\n} from '#app/components/epic-video.tsx'\nimport { type Route } from './+types/epic-video.tsx'\nimport { sendMcpMessage } from './__utils.ts'\n\nexport async function loader({ request }: Route.LoaderArgs) {\n\tconst timings = makeTimings('epicVideoLoader')\n\tconst videoUrl = new URL(request.url).searchParams.get('url')\n\tinvariantResponse(videoUrl, 'url param is required')\n\tconst videoInfos = getEpicVideoInfos([videoUrl], {\n\t\trequest,\n\t\ttimings,\n\t})\n\treturn data(\n\t\t{ videoInfos, videoUrl },\n\t\t{\n\t\t\theaders: {\n\t\t\t\t'Server-Timing': timings.toString(),\n\t\t\t},\n\t\t},\n\t)\n}\n\nexport default function EpicVideoEmbedRoute({\n\tloaderData,\n}: Route.ComponentProps) {\n\tconst rootRef = useRef<HTMLDivElement>(null)\n\tuseEffect(() => {\n\t\tvoid loaderData.videoInfos?.finally(() => {\n\t\t\twindow.parent.postMessage({ type: 'ui-lifecycle-iframe-ready' }, '*')\n\t\t\tif (!rootRef.current) return\n\n\t\t\tconst height = rootRef.current.clientHeight\n\t\t\tconst width = rootRef.current.clientWidth\n\n\t\t\twindow.parent.postMessage(\n\t\t\t\t{ type: 'ui-size-change', payload: { height, width } },\n\t\t\t\t'*',\n\t\t\t)\n\t\t})\n\t}, [loaderData.videoInfos])\n\n\tasync function handleLinksClick(event: React.MouseEvent<HTMLElement>) {\n\t\tconst target = event.target\n\t\tif (!(target instanceof HTMLAnchorElement)) return\n\n\t\tconst href = target.href\n\t\tif (!href) return\n\n\t\tevent.preventDefault()\n\t\tevent.stopPropagation()\n\n\t\tconst url = href.startsWith('http')\n\t\t\t? new URL(href)\n\t\t\t: new URL(href, window.location.origin)\n\t\tconst isLocal = url.host === window.location.host\n\n\t\tif (isLocal && url.pathname === '/login') {\n\t\t\tawait sendMcpMessage('tool', {\n\t\t\t\ttoolName: 'login',\n\t\t\t\tparams: { workshopDirectory: ENV.EPICSHOP_CONTEXT_CWD },\n\t\t\t})\n\t\t}\n\n\t\tawait sendMcpMessage('link', { url: url.toString() })\n\t}\n\n\treturn (\n\t\t<div ref={rootRef} onClickCapture={handleLinksClick}>\n\t\t\t<EpicVideoInfoProvider epicVideoInfosPromise={loaderData.videoInfos}>\n\t\t\t\t<DeferredEpicVideo url={loaderData.videoUrl} />\n\t\t\t</EpicVideoInfoProvider>\n\t\t</div>\n\t)\n}\n"],"names":["sendMcpMessage","type","payload","options","schema","messageId","resolve","reject","handleMessage","event","response","error","parseResult","epicVideo","_UNSAFE_withComponentProps","loaderData","rootRef","useRef","useEffect","videoInfos","finally","window","parent","postMessage","current","height","clientHeight","width","clientWidth","handleLinksClick","target","HTMLAnchorElement","href","preventDefault","stopPropagation","url","startsWith","URL","location","origin","host","pathname","toolName","params","workshopDirectory","ENV","EPICSHOP_CONTEXT_CWD","toString","ref","onClickCapture","children","jsx","EpicVideoInfoProvider","epicVideoInfosPromise","DeferredEpicVideo","videoUrl"],"mappings":"+jBAwDA,SAASA,EACRC,EACAC,EACAC,EAA0B,CAAA,EACa,CACvC,KAAM,CAAE,OAAAC,GAAWD,EACbE,EAAY,OAAO,WAAA,EAEzB,OAAO,IAAI,QAAQ,CAACC,EAASC,IAAW,CACvC,GAAI,CAAC,OAAO,QAAU,OAAO,SAAW,OAAQ,CAC/C,QAAQ,IAAI,4DAA6D,CACxE,KAAAN,EACA,UAAAI,EACA,QAAAH,CAAA,CACA,EACDK,EAAO,IAAI,MAAM,2BAA2B,CAAC,EAC7C,MACD,CAEA,OAAO,OAAO,YAAY,CAAE,KAAAN,EAAM,UAAAI,EAAW,QAAAH,CAAA,EAAW,GAAG,EAE3D,SAASM,EAAcC,EAAqB,CAE3C,GADIA,EAAM,KAAK,OAAS,uBACpBA,EAAM,KAAK,YAAcJ,EAAW,OACxC,OAAO,oBAAoB,UAAWG,CAAa,EAEnD,KAAM,CAAE,SAAAE,EAAU,MAAAC,CAAA,EAAUF,EAAM,KAAK,QAEvC,GAAIE,EAAO,OAAOJ,EAAOI,CAAK,EAC9B,GAAI,CAACP,EAAQ,OAAOE,EAAQI,CAAQ,EAEpC,MAAME,EAAcR,EAAO,UAAUM,CAAQ,EAC7C,OAAKE,EAAY,QAEVN,EAAQM,EAAY,IAAI,EAFEL,EAAOK,EAAY,KAAK,CAG1D,CAEA,OAAO,iBAAiB,UAAWJ,CAAa,CACjD,CAAC,CACF,CCjEA,MAAAK,EAAAC,EAAA,SAA4C,CAC3CC,WAAAA,CACD,EAAyB,CACxB,MAAMC,EAAUC,EAAAA,OAAuB,IAAI,EAC3CC,EAAAA,UAAU,IAAM,CACVH,EAAWI,YAAYC,QAAQ,IAAM,CAEzC,GADAC,OAAOC,OAAOC,YAAY,CAAEtB,KAAM,6BAA+B,GAAG,EAChE,CAACe,EAAQQ,QAAS,OAEtB,MAAMC,EAAST,EAAQQ,QAAQE,aACzBC,EAAQX,EAAQQ,QAAQI,YAE9BP,OAAOC,OAAOC,YACb,CAAEtB,KAAM,iBAAkBC,QAAS,CAAEuB,OAAAA,EAAQE,MAAAA,CAAM,GACnD,GACD,CACD,CAAC,CACF,EAAG,CAACZ,EAAWI,UAAU,CAAC,EAE1B,eAAeU,EAAiBpB,EAAsC,CACrE,MAAMqB,EAASrB,EAAMqB,OACrB,GAAI,EAAEA,aAAkBC,mBAAoB,OAE5C,MAAMC,EAAOF,EAAOE,KACpB,GAAI,CAACA,EAAM,OAEXvB,EAAMwB,eAAA,EACNxB,EAAMyB,gBAAA,EAEN,MAAMC,EAAMH,EAAKI,WAAW,MAAM,EAC/B,IAAIC,IAAIL,CAAI,EACZ,IAAIK,IAAIL,EAAMX,OAAOiB,SAASC,MAAM,EACvBJ,EAAIK,OAASnB,OAAOiB,SAASE,MAE9BL,EAAIM,WAAa,UAC/B,MAAMzC,EAAe,OAAQ,CAC5B0C,SAAU,QACVC,OAAQ,CAAEC,kBAAmBC,IAAIC,oBAAqB,CACvD,CAAC,EAGF,MAAM9C,EAAe,OAAQ,CAAEmC,IAAKA,EAAIY,SAAA,CAAW,CAAC,CACrD,CAEA,aACE,MAAA,CAAIC,IAAKhC,EAASiC,eAAgBpB,EAClCqB,SAAAC,EAAAA,IAACC,EAAA,CAAsBC,sBAAuBtC,EAAWI,WACxD+B,SAAAC,EAAAA,IAACG,EAAA,CAAkBnB,IAAKpB,EAAWwC,SAAU,EAC9C,CAAA,CACD,CAEF,CAAA"}