@epic-web/workshop-app 0.0.0-semantically-released

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 (305) hide show
  1. package/README.md +10 -0
  2. package/bin/epicshop.js +321 -0
  3. package/build/client/app-default.css +39 -0
  4. package/build/client/assets/_-C_7mS1-0.js +2 -0
  5. package/build/client/assets/_-C_7mS1-0.js.map +1 -0
  6. package/build/client/assets/_-l0sNRNKZ.js +2 -0
  7. package/build/client/assets/_-l0sNRNKZ.js.map +1 -0
  8. package/build/client/assets/_basePickBy-DxgDhkrj.js +2 -0
  9. package/build/client/assets/_basePickBy-DxgDhkrj.js.map +1 -0
  10. package/build/client/assets/_baseUniq-Bh4NktJz.js +2 -0
  11. package/build/client/assets/_baseUniq-Bh4NktJz.js.map +1 -0
  12. package/build/client/assets/_exerciseNumber-D3lfJewu.js +2 -0
  13. package/build/client/assets/_exerciseNumber-D3lfJewu.js.map +1 -0
  14. package/build/client/assets/_exerciseNumber_._stepNumber-BNj079sn.js +2 -0
  15. package/build/client/assets/_exerciseNumber_._stepNumber-BNj079sn.js.map +1 -0
  16. package/build/client/assets/_exerciseNumber_._stepNumber.index-l0sNRNKZ.js +2 -0
  17. package/build/client/assets/_exerciseNumber_._stepNumber.index-l0sNRNKZ.js.map +1 -0
  18. package/build/client/assets/_exerciseNumber_.finished-a6jXslNA.js +2 -0
  19. package/build/client/assets/_exerciseNumber_.finished-a6jXslNA.js.map +1 -0
  20. package/build/client/assets/_layout-B3FchrR9.js +2 -0
  21. package/build/client/assets/_layout-B3FchrR9.js.map +1 -0
  22. package/build/client/assets/_layout-B6ARVFTz.js +2 -0
  23. package/build/client/assets/_layout-B6ARVFTz.js.map +1 -0
  24. package/build/client/assets/_layout-CtqVeNw0.js +6 -0
  25. package/build/client/assets/_layout-CtqVeNw0.js.map +1 -0
  26. package/build/client/assets/_layout-dHfVo9gJ.js +2 -0
  27. package/build/client/assets/_layout-dHfVo9gJ.js.map +1 -0
  28. package/build/client/assets/accordion-PSsenYUI.js +2 -0
  29. package/build/client/assets/accordion-PSsenYUI.js.map +1 -0
  30. package/build/client/assets/account-Jl0f1Zst.js +2 -0
  31. package/build/client/assets/account-Jl0f1Zst.js.map +1 -0
  32. package/build/client/assets/api._-l0sNRNKZ.js +2 -0
  33. package/build/client/assets/api._-l0sNRNKZ.js.map +1 -0
  34. package/build/client/assets/app-CpF0K1cW.css +1 -0
  35. package/build/client/assets/app-CzIg9kJh.js +2 -0
  36. package/build/client/assets/app-CzIg9kJh.js.map +1 -0
  37. package/build/client/assets/app.epic_ws_.js_-l0sNRNKZ.js +2 -0
  38. package/build/client/assets/app.epic_ws_.js_-l0sNRNKZ.js.map +1 -0
  39. package/build/client/assets/apps-DP2rzg_V.js +2 -0
  40. package/build/client/assets/apps-DP2rzg_V.js.map +1 -0
  41. package/build/client/assets/apps-l0sNRNKZ.js +2 -0
  42. package/build/client/assets/apps-l0sNRNKZ.js.map +1 -0
  43. package/build/client/assets/arc-B6tHINqs.js +2 -0
  44. package/build/client/assets/arc-B6tHINqs.js.map +1 -0
  45. package/build/client/assets/architectureDiagram-NQ2NVSRB-D_wGZ5nT.js +37 -0
  46. package/build/client/assets/architectureDiagram-NQ2NVSRB-D_wGZ5nT.js.map +1 -0
  47. package/build/client/assets/blockDiagram-PHRCVELO-h_TbDJvl.js +123 -0
  48. package/build/client/assets/blockDiagram-PHRCVELO-h_TbDJvl.js.map +1 -0
  49. package/build/client/assets/button-cFpvwtjC.js +2 -0
  50. package/build/client/assets/button-cFpvwtjC.js.map +1 -0
  51. package/build/client/assets/c4Diagram-6F6E4RAY-BfXjadL9.js +11 -0
  52. package/build/client/assets/c4Diagram-6F6E4RAY-BfXjadL9.js.map +1 -0
  53. package/build/client/assets/cache-l0sNRNKZ.js +2 -0
  54. package/build/client/assets/cache-l0sNRNKZ.js.map +1 -0
  55. package/build/client/assets/channel-ClIoK57K.js +2 -0
  56. package/build/client/assets/channel-ClIoK57K.js.map +1 -0
  57. package/build/client/assets/chunk-353BL4L5-CExuR7H8.js +2 -0
  58. package/build/client/assets/chunk-353BL4L5-CExuR7H8.js.map +1 -0
  59. package/build/client/assets/chunk-67H74DCK-BF9_AOuB.js +2 -0
  60. package/build/client/assets/chunk-67H74DCK-BF9_AOuB.js.map +1 -0
  61. package/build/client/assets/chunk-6OLS64BW-B_GeRv1G.js +221 -0
  62. package/build/client/assets/chunk-6OLS64BW-B_GeRv1G.js.map +1 -0
  63. package/build/client/assets/chunk-AACKK3MU-BcoQc9Ht.js +2 -0
  64. package/build/client/assets/chunk-AACKK3MU-BcoQc9Ht.js.map +1 -0
  65. package/build/client/assets/chunk-BFAMUDN2-DBCLoV1m.js +2 -0
  66. package/build/client/assets/chunk-BFAMUDN2-DBCLoV1m.js.map +1 -0
  67. package/build/client/assets/chunk-E2GYISFI-DvCzOl_M.js +16 -0
  68. package/build/client/assets/chunk-E2GYISFI-DvCzOl_M.js.map +1 -0
  69. package/build/client/assets/chunk-QEP2MXWD-BA02qRA0.js +166 -0
  70. package/build/client/assets/chunk-QEP2MXWD-BA02qRA0.js.map +1 -0
  71. package/build/client/assets/chunk-QMGIS6GS-CG5cA6CX.js +44 -0
  72. package/build/client/assets/chunk-QMGIS6GS-CG5cA6CX.js.map +1 -0
  73. package/build/client/assets/chunk-SKB7J2MH-BG1nHV0M.js +2 -0
  74. package/build/client/assets/chunk-SKB7J2MH-BG1nHV0M.js.map +1 -0
  75. package/build/client/assets/classDiagram-BGRH5UQR-BZY1Xh5a.js +2 -0
  76. package/build/client/assets/classDiagram-BGRH5UQR-BZY1Xh5a.js.map +1 -0
  77. package/build/client/assets/classDiagram-v2-O24JOBDK-BZY1Xh5a.js +2 -0
  78. package/build/client/assets/classDiagram-v2-O24JOBDK-BZY1Xh5a.js.map +1 -0
  79. package/build/client/assets/clone-RGlausHy.js +2 -0
  80. package/build/client/assets/clone-RGlausHy.js.map +1 -0
  81. package/build/client/assets/cytoscape.esm-BBIONMvf.js +332 -0
  82. package/build/client/assets/cytoscape.esm-BBIONMvf.js.map +1 -0
  83. package/build/client/assets/dagre-FFZHY6LT-CGbe3nXJ.js +5 -0
  84. package/build/client/assets/dagre-FFZHY6LT-CGbe3nXJ.js.map +1 -0
  85. package/build/client/assets/defaultLocale-C4B-KCzX.js +2 -0
  86. package/build/client/assets/defaultLocale-C4B-KCzX.js.map +1 -0
  87. package/build/client/assets/diagram-3EMPZRKU-8UM2S96z.js +25 -0
  88. package/build/client/assets/diagram-3EMPZRKU-8UM2S96z.js.map +1 -0
  89. package/build/client/assets/diagram-5UYTHUR4-Bq8b35J7.js +25 -0
  90. package/build/client/assets/diagram-5UYTHUR4-Bq8b35J7.js.map +1 -0
  91. package/build/client/assets/diagram-ZTM2IBQH-DZ0Q3vKL.js +44 -0
  92. package/build/client/assets/diagram-ZTM2IBQH-DZ0Q3vKL.js.map +1 -0
  93. package/build/client/assets/diff-DTFs5rVO.js +2 -0
  94. package/build/client/assets/diff-DTFs5rVO.js.map +1 -0
  95. package/build/client/assets/diff-DpX_9FU6.js +2 -0
  96. package/build/client/assets/diff-DpX_9FU6.js.map +1 -0
  97. package/build/client/assets/discord-C86FbV-j.js +2 -0
  98. package/build/client/assets/discord-C86FbV-j.js.map +1 -0
  99. package/build/client/assets/discord-DOEtvB6W.js +2 -0
  100. package/build/client/assets/discord-DOEtvB6W.js.map +1 -0
  101. package/build/client/assets/entry.client-anc4-dZY.js +35 -0
  102. package/build/client/assets/entry.client-anc4-dZY.js.map +1 -0
  103. package/build/client/assets/epic-video-CCv7QINN.js +3210 -0
  104. package/build/client/assets/epic-video-CCv7QINN.js.map +1 -0
  105. package/build/client/assets/epic-video-D2Xftn6t.css +1 -0
  106. package/build/client/assets/epic_ws_.js_-l0sNRNKZ.js +2 -0
  107. package/build/client/assets/epic_ws_.js_-l0sNRNKZ.js.map +1 -0
  108. package/build/client/assets/erDiagram-R3QVA2FD-Bu6B069U.js +61 -0
  109. package/build/client/assets/erDiagram-R3QVA2FD-Bu6B069U.js.map +1 -0
  110. package/build/client/assets/error-boundary-B8bEOgxp.js +2 -0
  111. package/build/client/assets/error-boundary-B8bEOgxp.js.map +1 -0
  112. package/build/client/assets/exercises-l0sNRNKZ.js +2 -0
  113. package/build/client/assets/exercises-l0sNRNKZ.js.map +1 -0
  114. package/build/client/assets/finished-RnlPhc3t.js +2 -0
  115. package/build/client/assets/finished-RnlPhc3t.js.map +1 -0
  116. package/build/client/assets/flowDiagram-PKI6S5ZS-ie1Nf5_c.js +163 -0
  117. package/build/client/assets/flowDiagram-PKI6S5ZS-ie1Nf5_c.js.map +1 -0
  118. package/build/client/assets/ganttDiagram-EK5VF46D-BjgRWg6k.js +268 -0
  119. package/build/client/assets/ganttDiagram-EK5VF46D-BjgRWg6k.js.map +1 -0
  120. package/build/client/assets/gitGraphDiagram-GW3U2K7C-BmD31KK0.js +66 -0
  121. package/build/client/assets/gitGraphDiagram-GW3U2K7C-BmD31KK0.js.map +1 -0
  122. package/build/client/assets/graph-BBuyk5Ru.js +2 -0
  123. package/build/client/assets/graph-BBuyk5Ru.js.map +1 -0
  124. package/build/client/assets/icons-BM6r7NHK.svg +570 -0
  125. package/build/client/assets/index-7Ba6ptu2.js +42 -0
  126. package/build/client/assets/index-7Ba6ptu2.js.map +1 -0
  127. package/build/client/assets/index-Bp_2FjuO.js +10 -0
  128. package/build/client/assets/index-Bp_2FjuO.js.map +1 -0
  129. package/build/client/assets/index-CNmh2cao.js +2 -0
  130. package/build/client/assets/index-CNmh2cao.js.map +1 -0
  131. package/build/client/assets/index-CZ8q0Nf8.js +2 -0
  132. package/build/client/assets/index-CZ8q0Nf8.js.map +1 -0
  133. package/build/client/assets/index-DP2rzg_V.js +2 -0
  134. package/build/client/assets/index-DP2rzg_V.js.map +1 -0
  135. package/build/client/assets/index-DSMFPAn8.js +2 -0
  136. package/build/client/assets/index-DSMFPAn8.js.map +1 -0
  137. package/build/client/assets/index-DxbpRM0V.js +2 -0
  138. package/build/client/assets/index-DxbpRM0V.js.map +1 -0
  139. package/build/client/assets/index-K6Dvbx-E.js +2 -0
  140. package/build/client/assets/index-K6Dvbx-E.js.map +1 -0
  141. package/build/client/assets/index-LNXI3Vlr.js +2 -0
  142. package/build/client/assets/index-LNXI3Vlr.js.map +1 -0
  143. package/build/client/assets/index-_jNKXw67.js +2 -0
  144. package/build/client/assets/index-_jNKXw67.js.map +1 -0
  145. package/build/client/assets/index-l0sNRNKZ.js +2 -0
  146. package/build/client/assets/index-l0sNRNKZ.js.map +1 -0
  147. package/build/client/assets/index-rknZKmMI.js +36 -0
  148. package/build/client/assets/index-rknZKmMI.js.map +1 -0
  149. package/build/client/assets/infoDiagram-RLU2ROGC-DVoDIRGH.js +3 -0
  150. package/build/client/assets/infoDiagram-RLU2ROGC-DVoDIRGH.js.map +1 -0
  151. package/build/client/assets/init-Gi6I4Gst.js +2 -0
  152. package/build/client/assets/init-Gi6I4Gst.js.map +1 -0
  153. package/build/client/assets/journeyDiagram-EWQZEKCU-C_Lb2L11.js +140 -0
  154. package/build/client/assets/journeyDiagram-EWQZEKCU-C_Lb2L11.js.map +1 -0
  155. package/build/client/assets/jsx-runtime-EKYJJIwR.js +10 -0
  156. package/build/client/assets/jsx-runtime-EKYJJIwR.js.map +1 -0
  157. package/build/client/assets/kanban-definition-ILFWEQ3N-KsekSC1N.js +90 -0
  158. package/build/client/assets/kanban-definition-ILFWEQ3N-KsekSC1N.js.map +1 -0
  159. package/build/client/assets/katex-DsmCZfJr.js +262 -0
  160. package/build/client/assets/katex-DsmCZfJr.js.map +1 -0
  161. package/build/client/assets/l-D9C1VDbZ.js +2 -0
  162. package/build/client/assets/l-D9C1VDbZ.js.map +1 -0
  163. package/build/client/assets/launch-editor-l0sNRNKZ.js +2 -0
  164. package/build/client/assets/launch-editor-l0sNRNKZ.js.map +1 -0
  165. package/build/client/assets/layout-BkH8Qi9T.js +2 -0
  166. package/build/client/assets/layout-BkH8Qi9T.js.map +1 -0
  167. package/build/client/assets/linear-tKBS5mAJ.js +2 -0
  168. package/build/client/assets/linear-tKBS5mAJ.js.map +1 -0
  169. package/build/client/assets/loading-CZYaLyAk.js +2 -0
  170. package/build/client/assets/loading-CZYaLyAk.js.map +1 -0
  171. package/build/client/assets/login-BHKNDLwl.js +2 -0
  172. package/build/client/assets/login-BHKNDLwl.js.map +1 -0
  173. package/build/client/assets/login-sse-l0sNRNKZ.js +2 -0
  174. package/build/client/assets/login-sse-l0sNRNKZ.js.map +1 -0
  175. package/build/client/assets/manifest-b97649b5.js +1 -0
  176. package/build/client/assets/mdx-BEhxx-X4.js +3 -0
  177. package/build/client/assets/mdx-BEhxx-X4.js.map +1 -0
  178. package/build/client/assets/mermaid.core-CqaUvNIK.js +214 -0
  179. package/build/client/assets/mermaid.core-CqaUvNIK.js.map +1 -0
  180. package/build/client/assets/mindmap-definition-CZNETY7S-BGn0gmpB.js +96 -0
  181. package/build/client/assets/mindmap-definition-CZNETY7S-BGn0gmpB.js.map +1 -0
  182. package/build/client/assets/misc-COGqV2fm.js +2 -0
  183. package/build/client/assets/misc-COGqV2fm.js.map +1 -0
  184. package/build/client/assets/nav-chevrons-Cxzx0j13.js +2 -0
  185. package/build/client/assets/nav-chevrons-Cxzx0j13.js.map +1 -0
  186. package/build/client/assets/notifications-l0sNRNKZ.js +2 -0
  187. package/build/client/assets/notifications-l0sNRNKZ.js.map +1 -0
  188. package/build/client/assets/og-l0sNRNKZ.js +2 -0
  189. package/build/client/assets/og-l0sNRNKZ.js.map +1 -0
  190. package/build/client/assets/onboarding-7Vho777l.js +2 -0
  191. package/build/client/assets/onboarding-7Vho777l.js.map +1 -0
  192. package/build/client/assets/online-CwZkKwTv.js +2 -0
  193. package/build/client/assets/online-CwZkKwTv.js.map +1 -0
  194. package/build/client/assets/ordinal-Cboi1Yqb.js +2 -0
  195. package/build/client/assets/ordinal-Cboi1Yqb.js.map +1 -0
  196. package/build/client/assets/pe-DoDyGTeN.js +2 -0
  197. package/build/client/assets/pe-DoDyGTeN.js.map +1 -0
  198. package/build/client/assets/pieDiagram-NIOCPIFQ-TwGmrzCW.js +31 -0
  199. package/build/client/assets/pieDiagram-NIOCPIFQ-TwGmrzCW.js.map +1 -0
  200. package/build/client/assets/preferences-Dx_EUPYj.js +2 -0
  201. package/build/client/assets/preferences-Dx_EUPYj.js.map +1 -0
  202. package/build/client/assets/presence-tDxUeb6L.js +28 -0
  203. package/build/client/assets/presence-tDxUeb6L.js.map +1 -0
  204. package/build/client/assets/preview-COuApZAb.js +2 -0
  205. package/build/client/assets/preview-COuApZAb.js.map +1 -0
  206. package/build/client/assets/processes-l0sNRNKZ.js +2 -0
  207. package/build/client/assets/processes-l0sNRNKZ.js.map +1 -0
  208. package/build/client/assets/product-DNKDVhI_.js +2 -0
  209. package/build/client/assets/product-DNKDVhI_.js.map +1 -0
  210. package/build/client/assets/progress-DKsShYpv.js +2 -0
  211. package/build/client/assets/progress-DKsShYpv.js.map +1 -0
  212. package/build/client/assets/progress-bar-Cww9t8Vn.js +2 -0
  213. package/build/client/assets/progress-bar-Cww9t8Vn.js.map +1 -0
  214. package/build/client/assets/progress-l0sNRNKZ.js +2 -0
  215. package/build/client/assets/progress-l0sNRNKZ.js.map +1 -0
  216. package/build/client/assets/quadrantDiagram-2OG54O6I-C2FaFW77.js +8 -0
  217. package/build/client/assets/quadrantDiagram-2OG54O6I-C2FaFW77.js.map +1 -0
  218. package/build/client/assets/requirementDiagram-SO3GGRV7-BENrmejn.js +65 -0
  219. package/build/client/assets/requirementDiagram-SO3GGRV7-BENrmejn.js.map +1 -0
  220. package/build/client/assets/revalidation-ws-DJwDeSaI.js +2 -0
  221. package/build/client/assets/revalidation-ws-DJwDeSaI.js.map +1 -0
  222. package/build/client/assets/robots_._txt-l0sNRNKZ.js +2 -0
  223. package/build/client/assets/robots_._txt-l0sNRNKZ.js.map +1 -0
  224. package/build/client/assets/root-30K5JoaI.js +2 -0
  225. package/build/client/assets/root-30K5JoaI.js.map +1 -0
  226. package/build/client/assets/sankeyDiagram-4UZDY2LN-DHcxz6y6.js +11 -0
  227. package/build/client/assets/sankeyDiagram-4UZDY2LN-DHcxz6y6.js.map +1 -0
  228. package/build/client/assets/seo-t5J-DRxw.js +2 -0
  229. package/build/client/assets/seo-t5J-DRxw.js.map +1 -0
  230. package/build/client/assets/sequenceDiagram-ZIKVLSP4-wsbYfOcv.js +123 -0
  231. package/build/client/assets/sequenceDiagram-ZIKVLSP4-wsbYfOcv.js.map +1 -0
  232. package/build/client/assets/set-playground-Bx0yIjpY.js +2 -0
  233. package/build/client/assets/set-playground-Bx0yIjpY.js.map +1 -0
  234. package/build/client/assets/set-playground-l0sNRNKZ.js +2 -0
  235. package/build/client/assets/set-playground-l0sNRNKZ.js.map +1 -0
  236. package/build/client/assets/sitemap_._xml-l0sNRNKZ.js +2 -0
  237. package/build/client/assets/sitemap_._xml-l0sNRNKZ.js.map +1 -0
  238. package/build/client/assets/start-l0sNRNKZ.js +2 -0
  239. package/build/client/assets/start-l0sNRNKZ.js.map +1 -0
  240. package/build/client/assets/stateDiagram-XX37X6EN-D8VCWzU7.js +2 -0
  241. package/build/client/assets/stateDiagram-XX37X6EN-D8VCWzU7.js.map +1 -0
  242. package/build/client/assets/stateDiagram-v2-GD6S3NHB-CWoWkzf7.js +2 -0
  243. package/build/client/assets/stateDiagram-v2-GD6S3NHB-CWoWkzf7.js.map +1 -0
  244. package/build/client/assets/support-BnsTkkCH.js +2 -0
  245. package/build/client/assets/support-BnsTkkCH.js.map +1 -0
  246. package/build/client/assets/tailwind-Dqccob1p.css +1 -0
  247. package/build/client/assets/test-B2dwsj84.js +2 -0
  248. package/build/client/assets/test-B2dwsj84.js.map +1 -0
  249. package/build/client/assets/test-l0sNRNKZ.js +2 -0
  250. package/build/client/assets/test-l0sNRNKZ.js.map +1 -0
  251. package/build/client/assets/test._testName-l0sNRNKZ.js +2 -0
  252. package/build/client/assets/test._testName-l0sNRNKZ.js.map +1 -0
  253. package/build/client/assets/test.epic_ws_.js_-l0sNRNKZ.js +2 -0
  254. package/build/client/assets/test.epic_ws_.js_-l0sNRNKZ.js.map +1 -0
  255. package/build/client/assets/tests-DvbNIXBP.js +4 -0
  256. package/build/client/assets/tests-DvbNIXBP.js.map +1 -0
  257. package/build/client/assets/timeline-definition-RI47OAVP-D44Hv-fs.js +62 -0
  258. package/build/client/assets/timeline-definition-RI47OAVP-D44Hv-fs.js.map +1 -0
  259. package/build/client/assets/tooltip-Cm7A1uIP.js +2 -0
  260. package/build/client/assets/tooltip-Cm7A1uIP.js.map +1 -0
  261. package/build/client/assets/treemap-FKARHQ26-COx8AcUM.js +129 -0
  262. package/build/client/assets/treemap-FKARHQ26-COx8AcUM.js.map +1 -0
  263. package/build/client/assets/use-event-source-DDlZtAwc.js +2 -0
  264. package/build/client/assets/use-event-source-DDlZtAwc.js.map +1 -0
  265. package/build/client/assets/user-BQ8D2Fty.js +2 -0
  266. package/build/client/assets/user-BQ8D2Fty.js.map +1 -0
  267. package/build/client/assets/version-CG_ZHfTC.js +2 -0
  268. package/build/client/assets/version-CG_ZHfTC.js.map +1 -0
  269. package/build/client/assets/workshop-config-5VcXxeyp.js +2 -0
  270. package/build/client/assets/workshop-config-5VcXxeyp.js.map +1 -0
  271. package/build/client/assets/xychartDiagram-H2YORKM3-rhbSyPlb.js +8 -0
  272. package/build/client/assets/xychartDiagram-H2YORKM3-rhbSyPlb.js.map +1 -0
  273. package/build/client/favicon.ico +0 -0
  274. package/build/client/favicon.png +0 -0
  275. package/build/client/favicon.svg +13 -0
  276. package/build/client/fonts/neogrotesk/0b8b755c-fee2-4661-9c8b-c5d1fbea901b.woff2 +0 -0
  277. package/build/client/fonts/neogrotesk/146d9d20-3e53-4e5d-beb2-1209bba5ac61.woff2 +0 -0
  278. package/build/client/fonts/neogrotesk/1798ef2b-5ee0-4f39-8b2c-ae3e36f07cd1.woff2 +0 -0
  279. package/build/client/fonts/neogrotesk/1eb2cb40-6822-4654-856c-8cbe652366b6.woff +0 -0
  280. package/build/client/fonts/neogrotesk/3b64793c-0bdb-4e4f-bf0e-cdf2e974d5f2.woff +0 -0
  281. package/build/client/fonts/neogrotesk/3bb44ed4-cf17-469c-8d0d-5946d10fdad1.woff +0 -0
  282. package/build/client/fonts/neogrotesk/4bd29470-1701-41fe-94b6-4a147512160c.woff +0 -0
  283. package/build/client/fonts/neogrotesk/5cdbf070-a094-44c8-b8f1-17a00a19c959.woff2 +0 -0
  284. package/build/client/fonts/neogrotesk/6d439be9-37df-4912-ac09-388ce938fa46.woff2 +0 -0
  285. package/build/client/fonts/neogrotesk/7fc2971f-a9c2-4e09-bd24-bfd4ee6e97b3.woff +0 -0
  286. package/build/client/fonts/neogrotesk/861b65ee-56bd-4057-9af4-3b2903af231e.woff +0 -0
  287. package/build/client/fonts/neogrotesk/8cf836d9-a49e-4387-bcbd-4800766e5d24.woff +0 -0
  288. package/build/client/fonts/neogrotesk/8d61128d-534c-4793-9668-b98bcc2e5969.woff2 +0 -0
  289. package/build/client/fonts/neogrotesk/98423f75-c341-4161-8b92-7cd5c05081e5.woff +0 -0
  290. package/build/client/fonts/neogrotesk/a1456726-ad0d-4f5e-9d8f-ce92e8ce375d.woff2 +0 -0
  291. package/build/client/fonts/neogrotesk/af81e7d2-0bb1-4aa0-bc76-adb78338c568.woff +0 -0
  292. package/build/client/fonts/neogrotesk/d1302ad5-ceee-47cb-a0fa-2da6bd0d4d54.woff2 +0 -0
  293. package/build/client/fonts/neogrotesk/e7e15c31-aad1-4384-abd3-0671ccd03251.woff +0 -0
  294. package/build/client/fonts/neogrotesk/ec6cb127-161b-469c-9816-69489032a234.woff2 +0 -0
  295. package/build/client/fonts/neogrotesk/f480430c-6c50-4ae3-9abb-e92c484f84d6.woff2 +0 -0
  296. package/build/client/img/tiffany.png +0 -0
  297. package/build/client/logo.svg +48 -0
  298. package/build/client/neogrotesk-font.css +100 -0
  299. package/build/client/og/background.png +0 -0
  300. package/build/client/og/logo.svg +1 -0
  301. package/build/server/index.js +11899 -0
  302. package/build/server/index.js.map +1 -0
  303. package/dist/server/index.js +247 -0
  304. package/package.json +1 -0
  305. package/start.js +50 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-CZ8q0Nf8.js","sources":["../../../../../node_modules/@radix-ui/number/dist/index.mjs","../../../../../node_modules/@radix-ui/react-collection/dist/index.mjs","../../../../../node_modules/@radix-ui/react-direction/dist/index.mjs","../../../../../node_modules/@radix-ui/react-use-previous/dist/index.mjs","../../../../../node_modules/@radix-ui/react-select/dist/index.mjs"],"sourcesContent":["// packages/core/number/src/number.ts\nfunction clamp(value, [min, max]) {\n return Math.min(max, Math.max(min, value));\n}\nexport {\n clamp\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/collection-legacy.tsx\nimport React from \"react\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { jsx } from \"react/jsx-runtime\";\nfunction createCollection(name) {\n const PROVIDER_NAME = name + \"CollectionProvider\";\n const [createCollectionContext, createCollectionScope] = createContextScope(PROVIDER_NAME);\n const [CollectionProviderImpl, useCollectionContext] = createCollectionContext(\n PROVIDER_NAME,\n { collectionRef: { current: null }, itemMap: /* @__PURE__ */ new Map() }\n );\n const CollectionProvider = (props) => {\n const { scope, children } = props;\n const ref = React.useRef(null);\n const itemMap = React.useRef(/* @__PURE__ */ new Map()).current;\n return /* @__PURE__ */ jsx(CollectionProviderImpl, { scope, itemMap, collectionRef: ref, children });\n };\n CollectionProvider.displayName = PROVIDER_NAME;\n const COLLECTION_SLOT_NAME = name + \"CollectionSlot\";\n const CollectionSlotImpl = createSlot(COLLECTION_SLOT_NAME);\n const CollectionSlot = React.forwardRef(\n (props, forwardedRef) => {\n const { scope, children } = props;\n const context = useCollectionContext(COLLECTION_SLOT_NAME, scope);\n const composedRefs = useComposedRefs(forwardedRef, context.collectionRef);\n return /* @__PURE__ */ jsx(CollectionSlotImpl, { ref: composedRefs, children });\n }\n );\n CollectionSlot.displayName = COLLECTION_SLOT_NAME;\n const ITEM_SLOT_NAME = name + \"CollectionItemSlot\";\n const ITEM_DATA_ATTR = \"data-radix-collection-item\";\n const CollectionItemSlotImpl = createSlot(ITEM_SLOT_NAME);\n const CollectionItemSlot = React.forwardRef(\n (props, forwardedRef) => {\n const { scope, children, ...itemData } = props;\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const context = useCollectionContext(ITEM_SLOT_NAME, scope);\n React.useEffect(() => {\n context.itemMap.set(ref, { ref, ...itemData });\n return () => void context.itemMap.delete(ref);\n });\n return /* @__PURE__ */ jsx(CollectionItemSlotImpl, { ...{ [ITEM_DATA_ATTR]: \"\" }, ref: composedRefs, children });\n }\n );\n CollectionItemSlot.displayName = ITEM_SLOT_NAME;\n function useCollection(scope) {\n const context = useCollectionContext(name + \"CollectionConsumer\", scope);\n const getItems = React.useCallback(() => {\n const collectionNode = context.collectionRef.current;\n if (!collectionNode) return [];\n const orderedNodes = Array.from(collectionNode.querySelectorAll(`[${ITEM_DATA_ATTR}]`));\n const items = Array.from(context.itemMap.values());\n const orderedItems = items.sort(\n (a, b) => orderedNodes.indexOf(a.ref.current) - orderedNodes.indexOf(b.ref.current)\n );\n return orderedItems;\n }, [context.collectionRef, context.itemMap]);\n return getItems;\n }\n return [\n { Provider: CollectionProvider, Slot: CollectionSlot, ItemSlot: CollectionItemSlot },\n useCollection,\n createCollectionScope\n ];\n}\n\n// src/collection.tsx\nimport React2 from \"react\";\nimport { createContextScope as createContextScope2 } from \"@radix-ui/react-context\";\nimport { useComposedRefs as useComposedRefs2 } from \"@radix-ui/react-compose-refs\";\nimport { createSlot as createSlot2 } from \"@radix-ui/react-slot\";\n\n// src/ordered-dictionary.ts\nvar __instanciated = /* @__PURE__ */ new WeakMap();\nvar OrderedDict = class _OrderedDict extends Map {\n #keys;\n constructor(entries) {\n super(entries);\n this.#keys = [...super.keys()];\n __instanciated.set(this, true);\n }\n set(key, value) {\n if (__instanciated.get(this)) {\n if (this.has(key)) {\n this.#keys[this.#keys.indexOf(key)] = key;\n } else {\n this.#keys.push(key);\n }\n }\n super.set(key, value);\n return this;\n }\n insert(index, key, value) {\n const has = this.has(key);\n const length = this.#keys.length;\n const relativeIndex = toSafeInteger(index);\n let actualIndex = relativeIndex >= 0 ? relativeIndex : length + relativeIndex;\n const safeIndex = actualIndex < 0 || actualIndex >= length ? -1 : actualIndex;\n if (safeIndex === this.size || has && safeIndex === this.size - 1 || safeIndex === -1) {\n this.set(key, value);\n return this;\n }\n const size = this.size + (has ? 0 : 1);\n if (relativeIndex < 0) {\n actualIndex++;\n }\n const keys = [...this.#keys];\n let nextValue;\n let shouldSkip = false;\n for (let i = actualIndex; i < size; i++) {\n if (actualIndex === i) {\n let nextKey = keys[i];\n if (keys[i] === key) {\n nextKey = keys[i + 1];\n }\n if (has) {\n this.delete(key);\n }\n nextValue = this.get(nextKey);\n this.set(key, value);\n } else {\n if (!shouldSkip && keys[i - 1] === key) {\n shouldSkip = true;\n }\n const currentKey = keys[shouldSkip ? i : i - 1];\n const currentValue = nextValue;\n nextValue = this.get(currentKey);\n this.delete(currentKey);\n this.set(currentKey, currentValue);\n }\n }\n return this;\n }\n with(index, key, value) {\n const copy = new _OrderedDict(this);\n copy.insert(index, key, value);\n return copy;\n }\n before(key) {\n const index = this.#keys.indexOf(key) - 1;\n if (index < 0) {\n return void 0;\n }\n return this.entryAt(index);\n }\n /**\n * Sets a new key-value pair at the position before the given key.\n */\n setBefore(key, newKey, value) {\n const index = this.#keys.indexOf(key);\n if (index === -1) {\n return this;\n }\n return this.insert(index, newKey, value);\n }\n after(key) {\n let index = this.#keys.indexOf(key);\n index = index === -1 || index === this.size - 1 ? -1 : index + 1;\n if (index === -1) {\n return void 0;\n }\n return this.entryAt(index);\n }\n /**\n * Sets a new key-value pair at the position after the given key.\n */\n setAfter(key, newKey, value) {\n const index = this.#keys.indexOf(key);\n if (index === -1) {\n return this;\n }\n return this.insert(index + 1, newKey, value);\n }\n first() {\n return this.entryAt(0);\n }\n last() {\n return this.entryAt(-1);\n }\n clear() {\n this.#keys = [];\n return super.clear();\n }\n delete(key) {\n const deleted = super.delete(key);\n if (deleted) {\n this.#keys.splice(this.#keys.indexOf(key), 1);\n }\n return deleted;\n }\n deleteAt(index) {\n const key = this.keyAt(index);\n if (key !== void 0) {\n return this.delete(key);\n }\n return false;\n }\n at(index) {\n const key = at(this.#keys, index);\n if (key !== void 0) {\n return this.get(key);\n }\n }\n entryAt(index) {\n const key = at(this.#keys, index);\n if (key !== void 0) {\n return [key, this.get(key)];\n }\n }\n indexOf(key) {\n return this.#keys.indexOf(key);\n }\n keyAt(index) {\n return at(this.#keys, index);\n }\n from(key, offset) {\n const index = this.indexOf(key);\n if (index === -1) {\n return void 0;\n }\n let dest = index + offset;\n if (dest < 0) dest = 0;\n if (dest >= this.size) dest = this.size - 1;\n return this.at(dest);\n }\n keyFrom(key, offset) {\n const index = this.indexOf(key);\n if (index === -1) {\n return void 0;\n }\n let dest = index + offset;\n if (dest < 0) dest = 0;\n if (dest >= this.size) dest = this.size - 1;\n return this.keyAt(dest);\n }\n find(predicate, thisArg) {\n let index = 0;\n for (const entry of this) {\n if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n return entry;\n }\n index++;\n }\n return void 0;\n }\n findIndex(predicate, thisArg) {\n let index = 0;\n for (const entry of this) {\n if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n return index;\n }\n index++;\n }\n return -1;\n }\n filter(predicate, thisArg) {\n const entries = [];\n let index = 0;\n for (const entry of this) {\n if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n entries.push(entry);\n }\n index++;\n }\n return new _OrderedDict(entries);\n }\n map(callbackfn, thisArg) {\n const entries = [];\n let index = 0;\n for (const entry of this) {\n entries.push([entry[0], Reflect.apply(callbackfn, thisArg, [entry, index, this])]);\n index++;\n }\n return new _OrderedDict(entries);\n }\n reduce(...args) {\n const [callbackfn, initialValue] = args;\n let index = 0;\n let accumulator = initialValue ?? this.at(0);\n for (const entry of this) {\n if (index === 0 && args.length === 1) {\n accumulator = entry;\n } else {\n accumulator = Reflect.apply(callbackfn, this, [accumulator, entry, index, this]);\n }\n index++;\n }\n return accumulator;\n }\n reduceRight(...args) {\n const [callbackfn, initialValue] = args;\n let accumulator = initialValue ?? this.at(-1);\n for (let index = this.size - 1; index >= 0; index--) {\n const entry = this.at(index);\n if (index === this.size - 1 && args.length === 1) {\n accumulator = entry;\n } else {\n accumulator = Reflect.apply(callbackfn, this, [accumulator, entry, index, this]);\n }\n }\n return accumulator;\n }\n toSorted(compareFn) {\n const entries = [...this.entries()].sort(compareFn);\n return new _OrderedDict(entries);\n }\n toReversed() {\n const reversed = new _OrderedDict();\n for (let index = this.size - 1; index >= 0; index--) {\n const key = this.keyAt(index);\n const element = this.get(key);\n reversed.set(key, element);\n }\n return reversed;\n }\n toSpliced(...args) {\n const entries = [...this.entries()];\n entries.splice(...args);\n return new _OrderedDict(entries);\n }\n slice(start, end) {\n const result = new _OrderedDict();\n let stop = this.size - 1;\n if (start === void 0) {\n return result;\n }\n if (start < 0) {\n start = start + this.size;\n }\n if (end !== void 0 && end > 0) {\n stop = end - 1;\n }\n for (let index = start; index <= stop; index++) {\n const key = this.keyAt(index);\n const element = this.get(key);\n result.set(key, element);\n }\n return result;\n }\n every(predicate, thisArg) {\n let index = 0;\n for (const entry of this) {\n if (!Reflect.apply(predicate, thisArg, [entry, index, this])) {\n return false;\n }\n index++;\n }\n return true;\n }\n some(predicate, thisArg) {\n let index = 0;\n for (const entry of this) {\n if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n return true;\n }\n index++;\n }\n return false;\n }\n};\nfunction at(array, index) {\n if (\"at\" in Array.prototype) {\n return Array.prototype.at.call(array, index);\n }\n const actualIndex = toSafeIndex(array, index);\n return actualIndex === -1 ? void 0 : array[actualIndex];\n}\nfunction toSafeIndex(array, index) {\n const length = array.length;\n const relativeIndex = toSafeInteger(index);\n const actualIndex = relativeIndex >= 0 ? relativeIndex : length + relativeIndex;\n return actualIndex < 0 || actualIndex >= length ? -1 : actualIndex;\n}\nfunction toSafeInteger(number) {\n return number !== number || number === 0 ? 0 : Math.trunc(number);\n}\n\n// src/collection.tsx\nimport { jsx as jsx2 } from \"react/jsx-runtime\";\nfunction createCollection2(name) {\n const PROVIDER_NAME = name + \"CollectionProvider\";\n const [createCollectionContext, createCollectionScope] = createContextScope2(PROVIDER_NAME);\n const [CollectionContextProvider, useCollectionContext] = createCollectionContext(\n PROVIDER_NAME,\n {\n collectionElement: null,\n collectionRef: { current: null },\n collectionRefObject: { current: null },\n itemMap: new OrderedDict(),\n setItemMap: () => void 0\n }\n );\n const CollectionProvider = ({ state, ...props }) => {\n return state ? /* @__PURE__ */ jsx2(CollectionProviderImpl, { ...props, state }) : /* @__PURE__ */ jsx2(CollectionInit, { ...props });\n };\n CollectionProvider.displayName = PROVIDER_NAME;\n const CollectionInit = (props) => {\n const state = useInitCollection();\n return /* @__PURE__ */ jsx2(CollectionProviderImpl, { ...props, state });\n };\n CollectionInit.displayName = PROVIDER_NAME + \"Init\";\n const CollectionProviderImpl = (props) => {\n const { scope, children, state } = props;\n const ref = React2.useRef(null);\n const [collectionElement, setCollectionElement] = React2.useState(\n null\n );\n const composeRefs = useComposedRefs2(ref, setCollectionElement);\n const [itemMap, setItemMap] = state;\n React2.useEffect(() => {\n if (!collectionElement) return;\n const observer = getChildListObserver(() => {\n });\n observer.observe(collectionElement, {\n childList: true,\n subtree: true\n });\n return () => {\n observer.disconnect();\n };\n }, [collectionElement]);\n return /* @__PURE__ */ jsx2(\n CollectionContextProvider,\n {\n scope,\n itemMap,\n setItemMap,\n collectionRef: composeRefs,\n collectionRefObject: ref,\n collectionElement,\n children\n }\n );\n };\n CollectionProviderImpl.displayName = PROVIDER_NAME + \"Impl\";\n const COLLECTION_SLOT_NAME = name + \"CollectionSlot\";\n const CollectionSlotImpl = createSlot2(COLLECTION_SLOT_NAME);\n const CollectionSlot = React2.forwardRef(\n (props, forwardedRef) => {\n const { scope, children } = props;\n const context = useCollectionContext(COLLECTION_SLOT_NAME, scope);\n const composedRefs = useComposedRefs2(forwardedRef, context.collectionRef);\n return /* @__PURE__ */ jsx2(CollectionSlotImpl, { ref: composedRefs, children });\n }\n );\n CollectionSlot.displayName = COLLECTION_SLOT_NAME;\n const ITEM_SLOT_NAME = name + \"CollectionItemSlot\";\n const ITEM_DATA_ATTR = \"data-radix-collection-item\";\n const CollectionItemSlotImpl = createSlot2(ITEM_SLOT_NAME);\n const CollectionItemSlot = React2.forwardRef(\n (props, forwardedRef) => {\n const { scope, children, ...itemData } = props;\n const ref = React2.useRef(null);\n const [element, setElement] = React2.useState(null);\n const composedRefs = useComposedRefs2(forwardedRef, ref, setElement);\n const context = useCollectionContext(ITEM_SLOT_NAME, scope);\n const { setItemMap } = context;\n const itemDataRef = React2.useRef(itemData);\n if (!shallowEqual(itemDataRef.current, itemData)) {\n itemDataRef.current = itemData;\n }\n const memoizedItemData = itemDataRef.current;\n React2.useEffect(() => {\n const itemData2 = memoizedItemData;\n setItemMap((map) => {\n if (!element) {\n return map;\n }\n if (!map.has(element)) {\n map.set(element, { ...itemData2, element });\n return map.toSorted(sortByDocumentPosition);\n }\n return map.set(element, { ...itemData2, element }).toSorted(sortByDocumentPosition);\n });\n return () => {\n setItemMap((map) => {\n if (!element || !map.has(element)) {\n return map;\n }\n map.delete(element);\n return new OrderedDict(map);\n });\n };\n }, [element, memoizedItemData, setItemMap]);\n return /* @__PURE__ */ jsx2(CollectionItemSlotImpl, { ...{ [ITEM_DATA_ATTR]: \"\" }, ref: composedRefs, children });\n }\n );\n CollectionItemSlot.displayName = ITEM_SLOT_NAME;\n function useInitCollection() {\n return React2.useState(new OrderedDict());\n }\n function useCollection(scope) {\n const { itemMap } = useCollectionContext(name + \"CollectionConsumer\", scope);\n return itemMap;\n }\n const functions = {\n createCollectionScope,\n useCollection,\n useInitCollection\n };\n return [\n { Provider: CollectionProvider, Slot: CollectionSlot, ItemSlot: CollectionItemSlot },\n functions\n ];\n}\nfunction shallowEqual(a, b) {\n if (a === b) return true;\n if (typeof a !== \"object\" || typeof b !== \"object\") return false;\n if (a == null || b == null) return false;\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n if (keysA.length !== keysB.length) return false;\n for (const key of keysA) {\n if (!Object.prototype.hasOwnProperty.call(b, key)) return false;\n if (a[key] !== b[key]) return false;\n }\n return true;\n}\nfunction isElementPreceding(a, b) {\n return !!(b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_PRECEDING);\n}\nfunction sortByDocumentPosition(a, b) {\n return !a[1].element || !b[1].element ? 0 : isElementPreceding(a[1].element, b[1].element) ? -1 : 1;\n}\nfunction getChildListObserver(callback) {\n const observer = new MutationObserver((mutationsList) => {\n for (const mutation of mutationsList) {\n if (mutation.type === \"childList\") {\n callback();\n return;\n }\n }\n });\n return observer;\n}\nexport {\n createCollection,\n createCollection2 as unstable_createCollection\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/direction/src/direction.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nvar DirectionContext = React.createContext(void 0);\nvar DirectionProvider = (props) => {\n const { dir, children } = props;\n return /* @__PURE__ */ jsx(DirectionContext.Provider, { value: dir, children });\n};\nfunction useDirection(localDir) {\n const globalDir = React.useContext(DirectionContext);\n return localDir || globalDir || \"ltr\";\n}\nvar Provider = DirectionProvider;\nexport {\n DirectionProvider,\n Provider,\n useDirection\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/use-previous/src/use-previous.tsx\nimport * as React from \"react\";\nfunction usePrevious(value) {\n const ref = React.useRef({ value, previous: value });\n return React.useMemo(() => {\n if (ref.current.value !== value) {\n ref.current.previous = ref.current.value;\n ref.current.value = value;\n }\n return ref.current.previous;\n }, [value]);\n}\nexport {\n usePrevious\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/select.tsx\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { clamp } from \"@radix-ui/number\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createCollection } from \"@radix-ui/react-collection\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { DismissableLayer } from \"@radix-ui/react-dismissable-layer\";\nimport { useFocusGuards } from \"@radix-ui/react-focus-guards\";\nimport { FocusScope } from \"@radix-ui/react-focus-scope\";\nimport { useId } from \"@radix-ui/react-id\";\nimport * as PopperPrimitive from \"@radix-ui/react-popper\";\nimport { createPopperScope } from \"@radix-ui/react-popper\";\nimport { Portal as PortalPrimitive } from \"@radix-ui/react-portal\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { usePrevious } from \"@radix-ui/react-use-previous\";\nimport { VISUALLY_HIDDEN_STYLES } from \"@radix-ui/react-visually-hidden\";\nimport { hideOthers } from \"aria-hidden\";\nimport { RemoveScroll } from \"react-remove-scroll\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nvar OPEN_KEYS = [\" \", \"Enter\", \"ArrowUp\", \"ArrowDown\"];\nvar SELECTION_KEYS = [\" \", \"Enter\"];\nvar SELECT_NAME = \"Select\";\nvar [Collection, useCollection, createCollectionScope] = createCollection(SELECT_NAME);\nvar [createSelectContext, createSelectScope] = createContextScope(SELECT_NAME, [\n createCollectionScope,\n createPopperScope\n]);\nvar usePopperScope = createPopperScope();\nvar [SelectProvider, useSelectContext] = createSelectContext(SELECT_NAME);\nvar [SelectNativeOptionsProvider, useSelectNativeOptionsContext] = createSelectContext(SELECT_NAME);\nvar Select = (props) => {\n const {\n __scopeSelect,\n children,\n open: openProp,\n defaultOpen,\n onOpenChange,\n value: valueProp,\n defaultValue,\n onValueChange,\n dir,\n name,\n autoComplete,\n disabled,\n required,\n form\n } = props;\n const popperScope = usePopperScope(__scopeSelect);\n const [trigger, setTrigger] = React.useState(null);\n const [valueNode, setValueNode] = React.useState(null);\n const [valueNodeHasChildren, setValueNodeHasChildren] = React.useState(false);\n const direction = useDirection(dir);\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen ?? false,\n onChange: onOpenChange,\n caller: SELECT_NAME\n });\n const [value, setValue] = useControllableState({\n prop: valueProp,\n defaultProp: defaultValue,\n onChange: onValueChange,\n caller: SELECT_NAME\n });\n const triggerPointerDownPosRef = React.useRef(null);\n const isFormControl = trigger ? form || !!trigger.closest(\"form\") : true;\n const [nativeOptionsSet, setNativeOptionsSet] = React.useState(/* @__PURE__ */ new Set());\n const nativeSelectKey = Array.from(nativeOptionsSet).map((option) => option.props.value).join(\";\");\n return /* @__PURE__ */ jsx(PopperPrimitive.Root, { ...popperScope, children: /* @__PURE__ */ jsxs(\n SelectProvider,\n {\n required,\n scope: __scopeSelect,\n trigger,\n onTriggerChange: setTrigger,\n valueNode,\n onValueNodeChange: setValueNode,\n valueNodeHasChildren,\n onValueNodeHasChildrenChange: setValueNodeHasChildren,\n contentId: useId(),\n value,\n onValueChange: setValue,\n open,\n onOpenChange: setOpen,\n dir: direction,\n triggerPointerDownPosRef,\n disabled,\n children: [\n /* @__PURE__ */ jsx(Collection.Provider, { scope: __scopeSelect, children: /* @__PURE__ */ jsx(\n SelectNativeOptionsProvider,\n {\n scope: props.__scopeSelect,\n onNativeOptionAdd: React.useCallback((option) => {\n setNativeOptionsSet((prev) => new Set(prev).add(option));\n }, []),\n onNativeOptionRemove: React.useCallback((option) => {\n setNativeOptionsSet((prev) => {\n const optionsSet = new Set(prev);\n optionsSet.delete(option);\n return optionsSet;\n });\n }, []),\n children\n }\n ) }),\n isFormControl ? /* @__PURE__ */ jsxs(\n SelectBubbleInput,\n {\n \"aria-hidden\": true,\n required,\n tabIndex: -1,\n name,\n autoComplete,\n value,\n onChange: (event) => setValue(event.target.value),\n disabled,\n form,\n children: [\n value === void 0 ? /* @__PURE__ */ jsx(\"option\", { value: \"\" }) : null,\n Array.from(nativeOptionsSet)\n ]\n },\n nativeSelectKey\n ) : null\n ]\n }\n ) });\n};\nSelect.displayName = SELECT_NAME;\nvar TRIGGER_NAME = \"SelectTrigger\";\nvar SelectTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, disabled = false, ...triggerProps } = props;\n const popperScope = usePopperScope(__scopeSelect);\n const context = useSelectContext(TRIGGER_NAME, __scopeSelect);\n const isDisabled = context.disabled || disabled;\n const composedRefs = useComposedRefs(forwardedRef, context.onTriggerChange);\n const getItems = useCollection(__scopeSelect);\n const pointerTypeRef = React.useRef(\"touch\");\n const [searchRef, handleTypeaheadSearch, resetTypeahead] = useTypeaheadSearch((search) => {\n const enabledItems = getItems().filter((item) => !item.disabled);\n const currentItem = enabledItems.find((item) => item.value === context.value);\n const nextItem = findNextItem(enabledItems, search, currentItem);\n if (nextItem !== void 0) {\n context.onValueChange(nextItem.value);\n }\n });\n const handleOpen = (pointerEvent) => {\n if (!isDisabled) {\n context.onOpenChange(true);\n resetTypeahead();\n }\n if (pointerEvent) {\n context.triggerPointerDownPosRef.current = {\n x: Math.round(pointerEvent.pageX),\n y: Math.round(pointerEvent.pageY)\n };\n }\n };\n return /* @__PURE__ */ jsx(PopperPrimitive.Anchor, { asChild: true, ...popperScope, children: /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n role: \"combobox\",\n \"aria-controls\": context.contentId,\n \"aria-expanded\": context.open,\n \"aria-required\": context.required,\n \"aria-autocomplete\": \"none\",\n dir: context.dir,\n \"data-state\": context.open ? \"open\" : \"closed\",\n disabled: isDisabled,\n \"data-disabled\": isDisabled ? \"\" : void 0,\n \"data-placeholder\": shouldShowPlaceholder(context.value) ? \"\" : void 0,\n ...triggerProps,\n ref: composedRefs,\n onClick: composeEventHandlers(triggerProps.onClick, (event) => {\n event.currentTarget.focus();\n if (pointerTypeRef.current !== \"mouse\") {\n handleOpen(event);\n }\n }),\n onPointerDown: composeEventHandlers(triggerProps.onPointerDown, (event) => {\n pointerTypeRef.current = event.pointerType;\n const target = event.target;\n if (target.hasPointerCapture(event.pointerId)) {\n target.releasePointerCapture(event.pointerId);\n }\n if (event.button === 0 && event.ctrlKey === false && event.pointerType === \"mouse\") {\n handleOpen(event);\n event.preventDefault();\n }\n }),\n onKeyDown: composeEventHandlers(triggerProps.onKeyDown, (event) => {\n const isTypingAhead = searchRef.current !== \"\";\n const isModifierKey = event.ctrlKey || event.altKey || event.metaKey;\n if (!isModifierKey && event.key.length === 1) handleTypeaheadSearch(event.key);\n if (isTypingAhead && event.key === \" \") return;\n if (OPEN_KEYS.includes(event.key)) {\n handleOpen();\n event.preventDefault();\n }\n })\n }\n ) });\n }\n);\nSelectTrigger.displayName = TRIGGER_NAME;\nvar VALUE_NAME = \"SelectValue\";\nvar SelectValue = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, className, style, children, placeholder = \"\", ...valueProps } = props;\n const context = useSelectContext(VALUE_NAME, __scopeSelect);\n const { onValueNodeHasChildrenChange } = context;\n const hasChildren = children !== void 0;\n const composedRefs = useComposedRefs(forwardedRef, context.onValueNodeChange);\n useLayoutEffect(() => {\n onValueNodeHasChildrenChange(hasChildren);\n }, [onValueNodeHasChildrenChange, hasChildren]);\n return /* @__PURE__ */ jsx(\n Primitive.span,\n {\n ...valueProps,\n ref: composedRefs,\n style: { pointerEvents: \"none\" },\n children: shouldShowPlaceholder(context.value) ? /* @__PURE__ */ jsx(Fragment, { children: placeholder }) : children\n }\n );\n }\n);\nSelectValue.displayName = VALUE_NAME;\nvar ICON_NAME = \"SelectIcon\";\nvar SelectIcon = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, children, ...iconProps } = props;\n return /* @__PURE__ */ jsx(Primitive.span, { \"aria-hidden\": true, ...iconProps, ref: forwardedRef, children: children || \"\\u25BC\" });\n }\n);\nSelectIcon.displayName = ICON_NAME;\nvar PORTAL_NAME = \"SelectPortal\";\nvar SelectPortal = (props) => {\n return /* @__PURE__ */ jsx(PortalPrimitive, { asChild: true, ...props });\n};\nSelectPortal.displayName = PORTAL_NAME;\nvar CONTENT_NAME = \"SelectContent\";\nvar SelectContent = React.forwardRef(\n (props, forwardedRef) => {\n const context = useSelectContext(CONTENT_NAME, props.__scopeSelect);\n const [fragment, setFragment] = React.useState();\n useLayoutEffect(() => {\n setFragment(new DocumentFragment());\n }, []);\n if (!context.open) {\n const frag = fragment;\n return frag ? ReactDOM.createPortal(\n /* @__PURE__ */ jsx(SelectContentProvider, { scope: props.__scopeSelect, children: /* @__PURE__ */ jsx(Collection.Slot, { scope: props.__scopeSelect, children: /* @__PURE__ */ jsx(\"div\", { children: props.children }) }) }),\n frag\n ) : null;\n }\n return /* @__PURE__ */ jsx(SelectContentImpl, { ...props, ref: forwardedRef });\n }\n);\nSelectContent.displayName = CONTENT_NAME;\nvar CONTENT_MARGIN = 10;\nvar [SelectContentProvider, useSelectContentContext] = createSelectContext(CONTENT_NAME);\nvar CONTENT_IMPL_NAME = \"SelectContentImpl\";\nvar Slot = createSlot(\"SelectContent.RemoveScroll\");\nvar SelectContentImpl = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeSelect,\n position = \"item-aligned\",\n onCloseAutoFocus,\n onEscapeKeyDown,\n onPointerDownOutside,\n //\n // PopperContent props\n side,\n sideOffset,\n align,\n alignOffset,\n arrowPadding,\n collisionBoundary,\n collisionPadding,\n sticky,\n hideWhenDetached,\n avoidCollisions,\n //\n ...contentProps\n } = props;\n const context = useSelectContext(CONTENT_NAME, __scopeSelect);\n const [content, setContent] = React.useState(null);\n const [viewport, setViewport] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setContent(node));\n const [selectedItem, setSelectedItem] = React.useState(null);\n const [selectedItemText, setSelectedItemText] = React.useState(\n null\n );\n const getItems = useCollection(__scopeSelect);\n const [isPositioned, setIsPositioned] = React.useState(false);\n const firstValidItemFoundRef = React.useRef(false);\n React.useEffect(() => {\n if (content) return hideOthers(content);\n }, [content]);\n useFocusGuards();\n const focusFirst = React.useCallback(\n (candidates) => {\n const [firstItem, ...restItems] = getItems().map((item) => item.ref.current);\n const [lastItem] = restItems.slice(-1);\n const PREVIOUSLY_FOCUSED_ELEMENT = document.activeElement;\n for (const candidate of candidates) {\n if (candidate === PREVIOUSLY_FOCUSED_ELEMENT) return;\n candidate?.scrollIntoView({ block: \"nearest\" });\n if (candidate === firstItem && viewport) viewport.scrollTop = 0;\n if (candidate === lastItem && viewport) viewport.scrollTop = viewport.scrollHeight;\n candidate?.focus();\n if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT) return;\n }\n },\n [getItems, viewport]\n );\n const focusSelectedItem = React.useCallback(\n () => focusFirst([selectedItem, content]),\n [focusFirst, selectedItem, content]\n );\n React.useEffect(() => {\n if (isPositioned) {\n focusSelectedItem();\n }\n }, [isPositioned, focusSelectedItem]);\n const { onOpenChange, triggerPointerDownPosRef } = context;\n React.useEffect(() => {\n if (content) {\n let pointerMoveDelta = { x: 0, y: 0 };\n const handlePointerMove = (event) => {\n pointerMoveDelta = {\n x: Math.abs(Math.round(event.pageX) - (triggerPointerDownPosRef.current?.x ?? 0)),\n y: Math.abs(Math.round(event.pageY) - (triggerPointerDownPosRef.current?.y ?? 0))\n };\n };\n const handlePointerUp = (event) => {\n if (pointerMoveDelta.x <= 10 && pointerMoveDelta.y <= 10) {\n event.preventDefault();\n } else {\n if (!content.contains(event.target)) {\n onOpenChange(false);\n }\n }\n document.removeEventListener(\"pointermove\", handlePointerMove);\n triggerPointerDownPosRef.current = null;\n };\n if (triggerPointerDownPosRef.current !== null) {\n document.addEventListener(\"pointermove\", handlePointerMove);\n document.addEventListener(\"pointerup\", handlePointerUp, { capture: true, once: true });\n }\n return () => {\n document.removeEventListener(\"pointermove\", handlePointerMove);\n document.removeEventListener(\"pointerup\", handlePointerUp, { capture: true });\n };\n }\n }, [content, onOpenChange, triggerPointerDownPosRef]);\n React.useEffect(() => {\n const close = () => onOpenChange(false);\n window.addEventListener(\"blur\", close);\n window.addEventListener(\"resize\", close);\n return () => {\n window.removeEventListener(\"blur\", close);\n window.removeEventListener(\"resize\", close);\n };\n }, [onOpenChange]);\n const [searchRef, handleTypeaheadSearch] = useTypeaheadSearch((search) => {\n const enabledItems = getItems().filter((item) => !item.disabled);\n const currentItem = enabledItems.find((item) => item.ref.current === document.activeElement);\n const nextItem = findNextItem(enabledItems, search, currentItem);\n if (nextItem) {\n setTimeout(() => nextItem.ref.current.focus());\n }\n });\n const itemRefCallback = React.useCallback(\n (node, value, disabled) => {\n const isFirstValidItem = !firstValidItemFoundRef.current && !disabled;\n const isSelectedItem = context.value !== void 0 && context.value === value;\n if (isSelectedItem || isFirstValidItem) {\n setSelectedItem(node);\n if (isFirstValidItem) firstValidItemFoundRef.current = true;\n }\n },\n [context.value]\n );\n const handleItemLeave = React.useCallback(() => content?.focus(), [content]);\n const itemTextRefCallback = React.useCallback(\n (node, value, disabled) => {\n const isFirstValidItem = !firstValidItemFoundRef.current && !disabled;\n const isSelectedItem = context.value !== void 0 && context.value === value;\n if (isSelectedItem || isFirstValidItem) {\n setSelectedItemText(node);\n }\n },\n [context.value]\n );\n const SelectPosition = position === \"popper\" ? SelectPopperPosition : SelectItemAlignedPosition;\n const popperContentProps = SelectPosition === SelectPopperPosition ? {\n side,\n sideOffset,\n align,\n alignOffset,\n arrowPadding,\n collisionBoundary,\n collisionPadding,\n sticky,\n hideWhenDetached,\n avoidCollisions\n } : {};\n return /* @__PURE__ */ jsx(\n SelectContentProvider,\n {\n scope: __scopeSelect,\n content,\n viewport,\n onViewportChange: setViewport,\n itemRefCallback,\n selectedItem,\n onItemLeave: handleItemLeave,\n itemTextRefCallback,\n focusSelectedItem,\n selectedItemText,\n position,\n isPositioned,\n searchRef,\n children: /* @__PURE__ */ jsx(RemoveScroll, { as: Slot, allowPinchZoom: true, children: /* @__PURE__ */ jsx(\n FocusScope,\n {\n asChild: true,\n trapped: context.open,\n onMountAutoFocus: (event) => {\n event.preventDefault();\n },\n onUnmountAutoFocus: composeEventHandlers(onCloseAutoFocus, (event) => {\n context.trigger?.focus({ preventScroll: true });\n event.preventDefault();\n }),\n children: /* @__PURE__ */ jsx(\n DismissableLayer,\n {\n asChild: true,\n disableOutsidePointerEvents: true,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside: (event) => event.preventDefault(),\n onDismiss: () => context.onOpenChange(false),\n children: /* @__PURE__ */ jsx(\n SelectPosition,\n {\n role: \"listbox\",\n id: context.contentId,\n \"data-state\": context.open ? \"open\" : \"closed\",\n dir: context.dir,\n onContextMenu: (event) => event.preventDefault(),\n ...contentProps,\n ...popperContentProps,\n onPlaced: () => setIsPositioned(true),\n ref: composedRefs,\n style: {\n // flex layout so we can place the scroll buttons properly\n display: \"flex\",\n flexDirection: \"column\",\n // reset the outline by default as the content MAY get focused\n outline: \"none\",\n ...contentProps.style\n },\n onKeyDown: composeEventHandlers(contentProps.onKeyDown, (event) => {\n const isModifierKey = event.ctrlKey || event.altKey || event.metaKey;\n if (event.key === \"Tab\") event.preventDefault();\n if (!isModifierKey && event.key.length === 1) handleTypeaheadSearch(event.key);\n if ([\"ArrowUp\", \"ArrowDown\", \"Home\", \"End\"].includes(event.key)) {\n const items = getItems().filter((item) => !item.disabled);\n let candidateNodes = items.map((item) => item.ref.current);\n if ([\"ArrowUp\", \"End\"].includes(event.key)) {\n candidateNodes = candidateNodes.slice().reverse();\n }\n if ([\"ArrowUp\", \"ArrowDown\"].includes(event.key)) {\n const currentElement = event.target;\n const currentIndex = candidateNodes.indexOf(currentElement);\n candidateNodes = candidateNodes.slice(currentIndex + 1);\n }\n setTimeout(() => focusFirst(candidateNodes));\n event.preventDefault();\n }\n })\n }\n )\n }\n )\n }\n ) })\n }\n );\n }\n);\nSelectContentImpl.displayName = CONTENT_IMPL_NAME;\nvar ITEM_ALIGNED_POSITION_NAME = \"SelectItemAlignedPosition\";\nvar SelectItemAlignedPosition = React.forwardRef((props, forwardedRef) => {\n const { __scopeSelect, onPlaced, ...popperProps } = props;\n const context = useSelectContext(CONTENT_NAME, __scopeSelect);\n const contentContext = useSelectContentContext(CONTENT_NAME, __scopeSelect);\n const [contentWrapper, setContentWrapper] = React.useState(null);\n const [content, setContent] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setContent(node));\n const getItems = useCollection(__scopeSelect);\n const shouldExpandOnScrollRef = React.useRef(false);\n const shouldRepositionRef = React.useRef(true);\n const { viewport, selectedItem, selectedItemText, focusSelectedItem } = contentContext;\n const position = React.useCallback(() => {\n if (context.trigger && context.valueNode && contentWrapper && content && viewport && selectedItem && selectedItemText) {\n const triggerRect = context.trigger.getBoundingClientRect();\n const contentRect = content.getBoundingClientRect();\n const valueNodeRect = context.valueNode.getBoundingClientRect();\n const itemTextRect = selectedItemText.getBoundingClientRect();\n if (context.dir !== \"rtl\") {\n const itemTextOffset = itemTextRect.left - contentRect.left;\n const left = valueNodeRect.left - itemTextOffset;\n const leftDelta = triggerRect.left - left;\n const minContentWidth = triggerRect.width + leftDelta;\n const contentWidth = Math.max(minContentWidth, contentRect.width);\n const rightEdge = window.innerWidth - CONTENT_MARGIN;\n const clampedLeft = clamp(left, [\n CONTENT_MARGIN,\n // Prevents the content from going off the starting edge of the\n // viewport. It may still go off the ending edge, but this can be\n // controlled by the user since they may want to manage overflow in a\n // specific way.\n // https://github.com/radix-ui/primitives/issues/2049\n Math.max(CONTENT_MARGIN, rightEdge - contentWidth)\n ]);\n contentWrapper.style.minWidth = minContentWidth + \"px\";\n contentWrapper.style.left = clampedLeft + \"px\";\n } else {\n const itemTextOffset = contentRect.right - itemTextRect.right;\n const right = window.innerWidth - valueNodeRect.right - itemTextOffset;\n const rightDelta = window.innerWidth - triggerRect.right - right;\n const minContentWidth = triggerRect.width + rightDelta;\n const contentWidth = Math.max(minContentWidth, contentRect.width);\n const leftEdge = window.innerWidth - CONTENT_MARGIN;\n const clampedRight = clamp(right, [\n CONTENT_MARGIN,\n Math.max(CONTENT_MARGIN, leftEdge - contentWidth)\n ]);\n contentWrapper.style.minWidth = minContentWidth + \"px\";\n contentWrapper.style.right = clampedRight + \"px\";\n }\n const items = getItems();\n const availableHeight = window.innerHeight - CONTENT_MARGIN * 2;\n const itemsHeight = viewport.scrollHeight;\n const contentStyles = window.getComputedStyle(content);\n const contentBorderTopWidth = parseInt(contentStyles.borderTopWidth, 10);\n const contentPaddingTop = parseInt(contentStyles.paddingTop, 10);\n const contentBorderBottomWidth = parseInt(contentStyles.borderBottomWidth, 10);\n const contentPaddingBottom = parseInt(contentStyles.paddingBottom, 10);\n const fullContentHeight = contentBorderTopWidth + contentPaddingTop + itemsHeight + contentPaddingBottom + contentBorderBottomWidth;\n const minContentHeight = Math.min(selectedItem.offsetHeight * 5, fullContentHeight);\n const viewportStyles = window.getComputedStyle(viewport);\n const viewportPaddingTop = parseInt(viewportStyles.paddingTop, 10);\n const viewportPaddingBottom = parseInt(viewportStyles.paddingBottom, 10);\n const topEdgeToTriggerMiddle = triggerRect.top + triggerRect.height / 2 - CONTENT_MARGIN;\n const triggerMiddleToBottomEdge = availableHeight - topEdgeToTriggerMiddle;\n const selectedItemHalfHeight = selectedItem.offsetHeight / 2;\n const itemOffsetMiddle = selectedItem.offsetTop + selectedItemHalfHeight;\n const contentTopToItemMiddle = contentBorderTopWidth + contentPaddingTop + itemOffsetMiddle;\n const itemMiddleToContentBottom = fullContentHeight - contentTopToItemMiddle;\n const willAlignWithoutTopOverflow = contentTopToItemMiddle <= topEdgeToTriggerMiddle;\n if (willAlignWithoutTopOverflow) {\n const isLastItem = items.length > 0 && selectedItem === items[items.length - 1].ref.current;\n contentWrapper.style.bottom = \"0px\";\n const viewportOffsetBottom = content.clientHeight - viewport.offsetTop - viewport.offsetHeight;\n const clampedTriggerMiddleToBottomEdge = Math.max(\n triggerMiddleToBottomEdge,\n selectedItemHalfHeight + // viewport might have padding bottom, include it to avoid a scrollable viewport\n (isLastItem ? viewportPaddingBottom : 0) + viewportOffsetBottom + contentBorderBottomWidth\n );\n const height = contentTopToItemMiddle + clampedTriggerMiddleToBottomEdge;\n contentWrapper.style.height = height + \"px\";\n } else {\n const isFirstItem = items.length > 0 && selectedItem === items[0].ref.current;\n contentWrapper.style.top = \"0px\";\n const clampedTopEdgeToTriggerMiddle = Math.max(\n topEdgeToTriggerMiddle,\n contentBorderTopWidth + viewport.offsetTop + // viewport might have padding top, include it to avoid a scrollable viewport\n (isFirstItem ? viewportPaddingTop : 0) + selectedItemHalfHeight\n );\n const height = clampedTopEdgeToTriggerMiddle + itemMiddleToContentBottom;\n contentWrapper.style.height = height + \"px\";\n viewport.scrollTop = contentTopToItemMiddle - topEdgeToTriggerMiddle + viewport.offsetTop;\n }\n contentWrapper.style.margin = `${CONTENT_MARGIN}px 0`;\n contentWrapper.style.minHeight = minContentHeight + \"px\";\n contentWrapper.style.maxHeight = availableHeight + \"px\";\n onPlaced?.();\n requestAnimationFrame(() => shouldExpandOnScrollRef.current = true);\n }\n }, [\n getItems,\n context.trigger,\n context.valueNode,\n contentWrapper,\n content,\n viewport,\n selectedItem,\n selectedItemText,\n context.dir,\n onPlaced\n ]);\n useLayoutEffect(() => position(), [position]);\n const [contentZIndex, setContentZIndex] = React.useState();\n useLayoutEffect(() => {\n if (content) setContentZIndex(window.getComputedStyle(content).zIndex);\n }, [content]);\n const handleScrollButtonChange = React.useCallback(\n (node) => {\n if (node && shouldRepositionRef.current === true) {\n position();\n focusSelectedItem?.();\n shouldRepositionRef.current = false;\n }\n },\n [position, focusSelectedItem]\n );\n return /* @__PURE__ */ jsx(\n SelectViewportProvider,\n {\n scope: __scopeSelect,\n contentWrapper,\n shouldExpandOnScrollRef,\n onScrollButtonChange: handleScrollButtonChange,\n children: /* @__PURE__ */ jsx(\n \"div\",\n {\n ref: setContentWrapper,\n style: {\n display: \"flex\",\n flexDirection: \"column\",\n position: \"fixed\",\n zIndex: contentZIndex\n },\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n ...popperProps,\n ref: composedRefs,\n style: {\n // When we get the height of the content, it includes borders. If we were to set\n // the height without having `boxSizing: 'border-box'` it would be too big.\n boxSizing: \"border-box\",\n // We need to ensure the content doesn't get taller than the wrapper\n maxHeight: \"100%\",\n ...popperProps.style\n }\n }\n )\n }\n )\n }\n );\n});\nSelectItemAlignedPosition.displayName = ITEM_ALIGNED_POSITION_NAME;\nvar POPPER_POSITION_NAME = \"SelectPopperPosition\";\nvar SelectPopperPosition = React.forwardRef((props, forwardedRef) => {\n const {\n __scopeSelect,\n align = \"start\",\n collisionPadding = CONTENT_MARGIN,\n ...popperProps\n } = props;\n const popperScope = usePopperScope(__scopeSelect);\n return /* @__PURE__ */ jsx(\n PopperPrimitive.Content,\n {\n ...popperScope,\n ...popperProps,\n ref: forwardedRef,\n align,\n collisionPadding,\n style: {\n // Ensure border-box for floating-ui calculations\n boxSizing: \"border-box\",\n ...popperProps.style,\n // re-namespace exposed content custom properties\n ...{\n \"--radix-select-content-transform-origin\": \"var(--radix-popper-transform-origin)\",\n \"--radix-select-content-available-width\": \"var(--radix-popper-available-width)\",\n \"--radix-select-content-available-height\": \"var(--radix-popper-available-height)\",\n \"--radix-select-trigger-width\": \"var(--radix-popper-anchor-width)\",\n \"--radix-select-trigger-height\": \"var(--radix-popper-anchor-height)\"\n }\n }\n }\n );\n});\nSelectPopperPosition.displayName = POPPER_POSITION_NAME;\nvar [SelectViewportProvider, useSelectViewportContext] = createSelectContext(CONTENT_NAME, {});\nvar VIEWPORT_NAME = \"SelectViewport\";\nvar SelectViewport = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, nonce, ...viewportProps } = props;\n const contentContext = useSelectContentContext(VIEWPORT_NAME, __scopeSelect);\n const viewportContext = useSelectViewportContext(VIEWPORT_NAME, __scopeSelect);\n const composedRefs = useComposedRefs(forwardedRef, contentContext.onViewportChange);\n const prevScrollTopRef = React.useRef(0);\n return /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(\n \"style\",\n {\n dangerouslySetInnerHTML: {\n __html: `[data-radix-select-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-select-viewport]::-webkit-scrollbar{display:none}`\n },\n nonce\n }\n ),\n /* @__PURE__ */ jsx(Collection.Slot, { scope: __scopeSelect, children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-radix-select-viewport\": \"\",\n role: \"presentation\",\n ...viewportProps,\n ref: composedRefs,\n style: {\n // we use position: 'relative' here on the `viewport` so that when we call\n // `selectedItem.offsetTop` in calculations, the offset is relative to the viewport\n // (independent of the scrollUpButton).\n position: \"relative\",\n flex: 1,\n // Viewport should only be scrollable in the vertical direction.\n // This won't work in vertical writing modes, so we'll need to\n // revisit this if/when that is supported\n // https://developer.chrome.com/blog/vertical-form-controls\n overflow: \"hidden auto\",\n ...viewportProps.style\n },\n onScroll: composeEventHandlers(viewportProps.onScroll, (event) => {\n const viewport = event.currentTarget;\n const { contentWrapper, shouldExpandOnScrollRef } = viewportContext;\n if (shouldExpandOnScrollRef?.current && contentWrapper) {\n const scrolledBy = Math.abs(prevScrollTopRef.current - viewport.scrollTop);\n if (scrolledBy > 0) {\n const availableHeight = window.innerHeight - CONTENT_MARGIN * 2;\n const cssMinHeight = parseFloat(contentWrapper.style.minHeight);\n const cssHeight = parseFloat(contentWrapper.style.height);\n const prevHeight = Math.max(cssMinHeight, cssHeight);\n if (prevHeight < availableHeight) {\n const nextHeight = prevHeight + scrolledBy;\n const clampedNextHeight = Math.min(availableHeight, nextHeight);\n const heightDiff = nextHeight - clampedNextHeight;\n contentWrapper.style.height = clampedNextHeight + \"px\";\n if (contentWrapper.style.bottom === \"0px\") {\n viewport.scrollTop = heightDiff > 0 ? heightDiff : 0;\n contentWrapper.style.justifyContent = \"flex-end\";\n }\n }\n }\n }\n prevScrollTopRef.current = viewport.scrollTop;\n })\n }\n ) })\n ] });\n }\n);\nSelectViewport.displayName = VIEWPORT_NAME;\nvar GROUP_NAME = \"SelectGroup\";\nvar [SelectGroupContextProvider, useSelectGroupContext] = createSelectContext(GROUP_NAME);\nvar SelectGroup = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, ...groupProps } = props;\n const groupId = useId();\n return /* @__PURE__ */ jsx(SelectGroupContextProvider, { scope: __scopeSelect, id: groupId, children: /* @__PURE__ */ jsx(Primitive.div, { role: \"group\", \"aria-labelledby\": groupId, ...groupProps, ref: forwardedRef }) });\n }\n);\nSelectGroup.displayName = GROUP_NAME;\nvar LABEL_NAME = \"SelectLabel\";\nvar SelectLabel = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, ...labelProps } = props;\n const groupContext = useSelectGroupContext(LABEL_NAME, __scopeSelect);\n return /* @__PURE__ */ jsx(Primitive.div, { id: groupContext.id, ...labelProps, ref: forwardedRef });\n }\n);\nSelectLabel.displayName = LABEL_NAME;\nvar ITEM_NAME = \"SelectItem\";\nvar [SelectItemContextProvider, useSelectItemContext] = createSelectContext(ITEM_NAME);\nvar SelectItem = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeSelect,\n value,\n disabled = false,\n textValue: textValueProp,\n ...itemProps\n } = props;\n const context = useSelectContext(ITEM_NAME, __scopeSelect);\n const contentContext = useSelectContentContext(ITEM_NAME, __scopeSelect);\n const isSelected = context.value === value;\n const [textValue, setTextValue] = React.useState(textValueProp ?? \"\");\n const [isFocused, setIsFocused] = React.useState(false);\n const composedRefs = useComposedRefs(\n forwardedRef,\n (node) => contentContext.itemRefCallback?.(node, value, disabled)\n );\n const textId = useId();\n const pointerTypeRef = React.useRef(\"touch\");\n const handleSelect = () => {\n if (!disabled) {\n context.onValueChange(value);\n context.onOpenChange(false);\n }\n };\n if (value === \"\") {\n throw new Error(\n \"A <Select.Item /> must have a value prop that is not an empty string. This is because the Select value can be set to an empty string to clear the selection and show the placeholder.\"\n );\n }\n return /* @__PURE__ */ jsx(\n SelectItemContextProvider,\n {\n scope: __scopeSelect,\n value,\n disabled,\n textId,\n isSelected,\n onItemTextChange: React.useCallback((node) => {\n setTextValue((prevTextValue) => prevTextValue || (node?.textContent ?? \"\").trim());\n }, []),\n children: /* @__PURE__ */ jsx(\n Collection.ItemSlot,\n {\n scope: __scopeSelect,\n value,\n disabled,\n textValue,\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n role: \"option\",\n \"aria-labelledby\": textId,\n \"data-highlighted\": isFocused ? \"\" : void 0,\n \"aria-selected\": isSelected && isFocused,\n \"data-state\": isSelected ? \"checked\" : \"unchecked\",\n \"aria-disabled\": disabled || void 0,\n \"data-disabled\": disabled ? \"\" : void 0,\n tabIndex: disabled ? void 0 : -1,\n ...itemProps,\n ref: composedRefs,\n onFocus: composeEventHandlers(itemProps.onFocus, () => setIsFocused(true)),\n onBlur: composeEventHandlers(itemProps.onBlur, () => setIsFocused(false)),\n onClick: composeEventHandlers(itemProps.onClick, () => {\n if (pointerTypeRef.current !== \"mouse\") handleSelect();\n }),\n onPointerUp: composeEventHandlers(itemProps.onPointerUp, () => {\n if (pointerTypeRef.current === \"mouse\") handleSelect();\n }),\n onPointerDown: composeEventHandlers(itemProps.onPointerDown, (event) => {\n pointerTypeRef.current = event.pointerType;\n }),\n onPointerMove: composeEventHandlers(itemProps.onPointerMove, (event) => {\n pointerTypeRef.current = event.pointerType;\n if (disabled) {\n contentContext.onItemLeave?.();\n } else if (pointerTypeRef.current === \"mouse\") {\n event.currentTarget.focus({ preventScroll: true });\n }\n }),\n onPointerLeave: composeEventHandlers(itemProps.onPointerLeave, (event) => {\n if (event.currentTarget === document.activeElement) {\n contentContext.onItemLeave?.();\n }\n }),\n onKeyDown: composeEventHandlers(itemProps.onKeyDown, (event) => {\n const isTypingAhead = contentContext.searchRef?.current !== \"\";\n if (isTypingAhead && event.key === \" \") return;\n if (SELECTION_KEYS.includes(event.key)) handleSelect();\n if (event.key === \" \") event.preventDefault();\n })\n }\n )\n }\n )\n }\n );\n }\n);\nSelectItem.displayName = ITEM_NAME;\nvar ITEM_TEXT_NAME = \"SelectItemText\";\nvar SelectItemText = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, className, style, ...itemTextProps } = props;\n const context = useSelectContext(ITEM_TEXT_NAME, __scopeSelect);\n const contentContext = useSelectContentContext(ITEM_TEXT_NAME, __scopeSelect);\n const itemContext = useSelectItemContext(ITEM_TEXT_NAME, __scopeSelect);\n const nativeOptionsContext = useSelectNativeOptionsContext(ITEM_TEXT_NAME, __scopeSelect);\n const [itemTextNode, setItemTextNode] = React.useState(null);\n const composedRefs = useComposedRefs(\n forwardedRef,\n (node) => setItemTextNode(node),\n itemContext.onItemTextChange,\n (node) => contentContext.itemTextRefCallback?.(node, itemContext.value, itemContext.disabled)\n );\n const textContent = itemTextNode?.textContent;\n const nativeOption = React.useMemo(\n () => /* @__PURE__ */ jsx(\"option\", { value: itemContext.value, disabled: itemContext.disabled, children: textContent }, itemContext.value),\n [itemContext.disabled, itemContext.value, textContent]\n );\n const { onNativeOptionAdd, onNativeOptionRemove } = nativeOptionsContext;\n useLayoutEffect(() => {\n onNativeOptionAdd(nativeOption);\n return () => onNativeOptionRemove(nativeOption);\n }, [onNativeOptionAdd, onNativeOptionRemove, nativeOption]);\n return /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(Primitive.span, { id: itemContext.textId, ...itemTextProps, ref: composedRefs }),\n itemContext.isSelected && context.valueNode && !context.valueNodeHasChildren ? ReactDOM.createPortal(itemTextProps.children, context.valueNode) : null\n ] });\n }\n);\nSelectItemText.displayName = ITEM_TEXT_NAME;\nvar ITEM_INDICATOR_NAME = \"SelectItemIndicator\";\nvar SelectItemIndicator = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, ...itemIndicatorProps } = props;\n const itemContext = useSelectItemContext(ITEM_INDICATOR_NAME, __scopeSelect);\n return itemContext.isSelected ? /* @__PURE__ */ jsx(Primitive.span, { \"aria-hidden\": true, ...itemIndicatorProps, ref: forwardedRef }) : null;\n }\n);\nSelectItemIndicator.displayName = ITEM_INDICATOR_NAME;\nvar SCROLL_UP_BUTTON_NAME = \"SelectScrollUpButton\";\nvar SelectScrollUpButton = React.forwardRef((props, forwardedRef) => {\n const contentContext = useSelectContentContext(SCROLL_UP_BUTTON_NAME, props.__scopeSelect);\n const viewportContext = useSelectViewportContext(SCROLL_UP_BUTTON_NAME, props.__scopeSelect);\n const [canScrollUp, setCanScrollUp] = React.useState(false);\n const composedRefs = useComposedRefs(forwardedRef, viewportContext.onScrollButtonChange);\n useLayoutEffect(() => {\n if (contentContext.viewport && contentContext.isPositioned) {\n let handleScroll2 = function() {\n const canScrollUp2 = viewport.scrollTop > 0;\n setCanScrollUp(canScrollUp2);\n };\n var handleScroll = handleScroll2;\n const viewport = contentContext.viewport;\n handleScroll2();\n viewport.addEventListener(\"scroll\", handleScroll2);\n return () => viewport.removeEventListener(\"scroll\", handleScroll2);\n }\n }, [contentContext.viewport, contentContext.isPositioned]);\n return canScrollUp ? /* @__PURE__ */ jsx(\n SelectScrollButtonImpl,\n {\n ...props,\n ref: composedRefs,\n onAutoScroll: () => {\n const { viewport, selectedItem } = contentContext;\n if (viewport && selectedItem) {\n viewport.scrollTop = viewport.scrollTop - selectedItem.offsetHeight;\n }\n }\n }\n ) : null;\n});\nSelectScrollUpButton.displayName = SCROLL_UP_BUTTON_NAME;\nvar SCROLL_DOWN_BUTTON_NAME = \"SelectScrollDownButton\";\nvar SelectScrollDownButton = React.forwardRef((props, forwardedRef) => {\n const contentContext = useSelectContentContext(SCROLL_DOWN_BUTTON_NAME, props.__scopeSelect);\n const viewportContext = useSelectViewportContext(SCROLL_DOWN_BUTTON_NAME, props.__scopeSelect);\n const [canScrollDown, setCanScrollDown] = React.useState(false);\n const composedRefs = useComposedRefs(forwardedRef, viewportContext.onScrollButtonChange);\n useLayoutEffect(() => {\n if (contentContext.viewport && contentContext.isPositioned) {\n let handleScroll2 = function() {\n const maxScroll = viewport.scrollHeight - viewport.clientHeight;\n const canScrollDown2 = Math.ceil(viewport.scrollTop) < maxScroll;\n setCanScrollDown(canScrollDown2);\n };\n var handleScroll = handleScroll2;\n const viewport = contentContext.viewport;\n handleScroll2();\n viewport.addEventListener(\"scroll\", handleScroll2);\n return () => viewport.removeEventListener(\"scroll\", handleScroll2);\n }\n }, [contentContext.viewport, contentContext.isPositioned]);\n return canScrollDown ? /* @__PURE__ */ jsx(\n SelectScrollButtonImpl,\n {\n ...props,\n ref: composedRefs,\n onAutoScroll: () => {\n const { viewport, selectedItem } = contentContext;\n if (viewport && selectedItem) {\n viewport.scrollTop = viewport.scrollTop + selectedItem.offsetHeight;\n }\n }\n }\n ) : null;\n});\nSelectScrollDownButton.displayName = SCROLL_DOWN_BUTTON_NAME;\nvar SelectScrollButtonImpl = React.forwardRef((props, forwardedRef) => {\n const { __scopeSelect, onAutoScroll, ...scrollIndicatorProps } = props;\n const contentContext = useSelectContentContext(\"SelectScrollButton\", __scopeSelect);\n const autoScrollTimerRef = React.useRef(null);\n const getItems = useCollection(__scopeSelect);\n const clearAutoScrollTimer = React.useCallback(() => {\n if (autoScrollTimerRef.current !== null) {\n window.clearInterval(autoScrollTimerRef.current);\n autoScrollTimerRef.current = null;\n }\n }, []);\n React.useEffect(() => {\n return () => clearAutoScrollTimer();\n }, [clearAutoScrollTimer]);\n useLayoutEffect(() => {\n const activeItem = getItems().find((item) => item.ref.current === document.activeElement);\n activeItem?.ref.current?.scrollIntoView({ block: \"nearest\" });\n }, [getItems]);\n return /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"aria-hidden\": true,\n ...scrollIndicatorProps,\n ref: forwardedRef,\n style: { flexShrink: 0, ...scrollIndicatorProps.style },\n onPointerDown: composeEventHandlers(scrollIndicatorProps.onPointerDown, () => {\n if (autoScrollTimerRef.current === null) {\n autoScrollTimerRef.current = window.setInterval(onAutoScroll, 50);\n }\n }),\n onPointerMove: composeEventHandlers(scrollIndicatorProps.onPointerMove, () => {\n contentContext.onItemLeave?.();\n if (autoScrollTimerRef.current === null) {\n autoScrollTimerRef.current = window.setInterval(onAutoScroll, 50);\n }\n }),\n onPointerLeave: composeEventHandlers(scrollIndicatorProps.onPointerLeave, () => {\n clearAutoScrollTimer();\n })\n }\n );\n});\nvar SEPARATOR_NAME = \"SelectSeparator\";\nvar SelectSeparator = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, ...separatorProps } = props;\n return /* @__PURE__ */ jsx(Primitive.div, { \"aria-hidden\": true, ...separatorProps, ref: forwardedRef });\n }\n);\nSelectSeparator.displayName = SEPARATOR_NAME;\nvar ARROW_NAME = \"SelectArrow\";\nvar SelectArrow = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, ...arrowProps } = props;\n const popperScope = usePopperScope(__scopeSelect);\n const context = useSelectContext(ARROW_NAME, __scopeSelect);\n const contentContext = useSelectContentContext(ARROW_NAME, __scopeSelect);\n return context.open && contentContext.position === \"popper\" ? /* @__PURE__ */ jsx(PopperPrimitive.Arrow, { ...popperScope, ...arrowProps, ref: forwardedRef }) : null;\n }\n);\nSelectArrow.displayName = ARROW_NAME;\nvar BUBBLE_INPUT_NAME = \"SelectBubbleInput\";\nvar SelectBubbleInput = React.forwardRef(\n ({ __scopeSelect, value, ...props }, forwardedRef) => {\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const prevValue = usePrevious(value);\n React.useEffect(() => {\n const select = ref.current;\n if (!select) return;\n const selectProto = window.HTMLSelectElement.prototype;\n const descriptor = Object.getOwnPropertyDescriptor(\n selectProto,\n \"value\"\n );\n const setValue = descriptor.set;\n if (prevValue !== value && setValue) {\n const event = new Event(\"change\", { bubbles: true });\n setValue.call(select, value);\n select.dispatchEvent(event);\n }\n }, [prevValue, value]);\n return /* @__PURE__ */ jsx(\n Primitive.select,\n {\n ...props,\n style: { ...VISUALLY_HIDDEN_STYLES, ...props.style },\n ref: composedRefs,\n defaultValue: value\n }\n );\n }\n);\nSelectBubbleInput.displayName = BUBBLE_INPUT_NAME;\nfunction shouldShowPlaceholder(value) {\n return value === \"\" || value === void 0;\n}\nfunction useTypeaheadSearch(onSearchChange) {\n const handleSearchChange = useCallbackRef(onSearchChange);\n const searchRef = React.useRef(\"\");\n const timerRef = React.useRef(0);\n const handleTypeaheadSearch = React.useCallback(\n (key) => {\n const search = searchRef.current + key;\n handleSearchChange(search);\n (function updateSearch(value) {\n searchRef.current = value;\n window.clearTimeout(timerRef.current);\n if (value !== \"\") timerRef.current = window.setTimeout(() => updateSearch(\"\"), 1e3);\n })(search);\n },\n [handleSearchChange]\n );\n const resetTypeahead = React.useCallback(() => {\n searchRef.current = \"\";\n window.clearTimeout(timerRef.current);\n }, []);\n React.useEffect(() => {\n return () => window.clearTimeout(timerRef.current);\n }, []);\n return [searchRef, handleTypeaheadSearch, resetTypeahead];\n}\nfunction findNextItem(items, search, currentItem) {\n const isRepeated = search.length > 1 && Array.from(search).every((char) => char === search[0]);\n const normalizedSearch = isRepeated ? search[0] : search;\n const currentItemIndex = currentItem ? items.indexOf(currentItem) : -1;\n let wrappedItems = wrapArray(items, Math.max(currentItemIndex, 0));\n const excludeCurrentItem = normalizedSearch.length === 1;\n if (excludeCurrentItem) wrappedItems = wrappedItems.filter((v) => v !== currentItem);\n const nextItem = wrappedItems.find(\n (item) => item.textValue.toLowerCase().startsWith(normalizedSearch.toLowerCase())\n );\n return nextItem !== currentItem ? nextItem : void 0;\n}\nfunction wrapArray(array, startIndex) {\n return array.map((_, index) => array[(startIndex + index) % array.length]);\n}\nvar Root2 = Select;\nvar Trigger = SelectTrigger;\nvar Value = SelectValue;\nvar Icon = SelectIcon;\nvar Portal = SelectPortal;\nvar Content2 = SelectContent;\nvar Viewport = SelectViewport;\nvar Group = SelectGroup;\nvar Label = SelectLabel;\nvar Item = SelectItem;\nvar ItemText = SelectItemText;\nvar ItemIndicator = SelectItemIndicator;\nvar ScrollUpButton = SelectScrollUpButton;\nvar ScrollDownButton = SelectScrollDownButton;\nvar Separator = SelectSeparator;\nvar Arrow2 = SelectArrow;\nexport {\n Arrow2 as Arrow,\n Content2 as Content,\n Group,\n Icon,\n Item,\n ItemIndicator,\n ItemText,\n Label,\n Portal,\n Root2 as Root,\n ScrollDownButton,\n ScrollUpButton,\n Select,\n SelectArrow,\n SelectContent,\n SelectGroup,\n SelectIcon,\n SelectItem,\n SelectItemIndicator,\n SelectItemText,\n SelectLabel,\n SelectPortal,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n SelectViewport,\n Separator,\n Trigger,\n Value,\n Viewport,\n createSelectScope\n};\n//# sourceMappingURL=index.mjs.map\n"],"names":["clamp","value","min","max","createCollection","name","PROVIDER_NAME","createCollectionContext","createCollectionScope","createContextScope","CollectionProviderImpl","useCollectionContext","CollectionProvider","props","scope","children","ref","React","itemMap","jsx","COLLECTION_SLOT_NAME","CollectionSlotImpl","createSlot","CollectionSlot","forwardedRef","context","composedRefs","useComposedRefs","ITEM_SLOT_NAME","ITEM_DATA_ATTR","CollectionItemSlotImpl","CollectionItemSlot","itemData","useCollection","collectionNode","orderedNodes","a","b","DirectionContext","React.createContext","useDirection","localDir","globalDir","React.useContext","usePrevious","React.useRef","React.useMemo","OPEN_KEYS","SELECTION_KEYS","SELECT_NAME","Collection","createSelectContext","createSelectScope","createPopperScope","usePopperScope","SelectProvider","useSelectContext","SelectNativeOptionsProvider","useSelectNativeOptionsContext","Select","__scopeSelect","openProp","defaultOpen","onOpenChange","valueProp","defaultValue","onValueChange","dir","autoComplete","disabled","required","form","popperScope","trigger","setTrigger","React.useState","valueNode","setValueNode","valueNodeHasChildren","setValueNodeHasChildren","direction","open","setOpen","useControllableState","setValue","triggerPointerDownPosRef","isFormControl","nativeOptionsSet","setNativeOptionsSet","nativeSelectKey","option","PopperPrimitive.Root","jsxs","useId","React.useCallback","prev","optionsSet","SelectBubbleInput","event","TRIGGER_NAME","SelectTrigger","React.forwardRef","triggerProps","isDisabled","getItems","pointerTypeRef","searchRef","handleTypeaheadSearch","resetTypeahead","useTypeaheadSearch","search","enabledItems","item","currentItem","nextItem","findNextItem","handleOpen","pointerEvent","PopperPrimitive.Anchor","Primitive","shouldShowPlaceholder","composeEventHandlers","target","isTypingAhead","VALUE_NAME","SelectValue","className","style","placeholder","valueProps","onValueNodeHasChildrenChange","hasChildren","useLayoutEffect","Fragment","ICON_NAME","SelectIcon","iconProps","PORTAL_NAME","SelectPortal","PortalPrimitive","CONTENT_NAME","SelectContent","fragment","setFragment","frag","ReactDOM.createPortal","SelectContentProvider","SelectContentImpl","CONTENT_MARGIN","useSelectContentContext","CONTENT_IMPL_NAME","Slot","position","onCloseAutoFocus","onEscapeKeyDown","onPointerDownOutside","side","sideOffset","align","alignOffset","arrowPadding","collisionBoundary","collisionPadding","sticky","hideWhenDetached","avoidCollisions","contentProps","content","setContent","viewport","setViewport","node","selectedItem","setSelectedItem","selectedItemText","setSelectedItemText","isPositioned","setIsPositioned","firstValidItemFoundRef","React.useEffect","hideOthers","useFocusGuards","focusFirst","candidates","firstItem","restItems","lastItem","PREVIOUSLY_FOCUSED_ELEMENT","candidate","focusSelectedItem","pointerMoveDelta","handlePointerMove","handlePointerUp","close","itemRefCallback","isFirstValidItem","handleItemLeave","itemTextRefCallback","SelectPosition","SelectPopperPosition","SelectItemAlignedPosition","popperContentProps","RemoveScroll","FocusScope","DismissableLayer","isModifierKey","candidateNodes","currentElement","currentIndex","ITEM_ALIGNED_POSITION_NAME","onPlaced","popperProps","contentContext","contentWrapper","setContentWrapper","shouldExpandOnScrollRef","shouldRepositionRef","triggerRect","contentRect","valueNodeRect","itemTextRect","itemTextOffset","left","leftDelta","minContentWidth","contentWidth","rightEdge","clampedLeft","right","rightDelta","leftEdge","clampedRight","items","availableHeight","itemsHeight","contentStyles","contentBorderTopWidth","contentPaddingTop","contentBorderBottomWidth","contentPaddingBottom","fullContentHeight","minContentHeight","viewportStyles","viewportPaddingTop","viewportPaddingBottom","topEdgeToTriggerMiddle","triggerMiddleToBottomEdge","selectedItemHalfHeight","itemOffsetMiddle","contentTopToItemMiddle","itemMiddleToContentBottom","isLastItem","viewportOffsetBottom","clampedTriggerMiddleToBottomEdge","height","isFirstItem","contentZIndex","setContentZIndex","handleScrollButtonChange","SelectViewportProvider","POPPER_POSITION_NAME","PopperPrimitive.Content","useSelectViewportContext","VIEWPORT_NAME","SelectViewport","nonce","viewportProps","viewportContext","prevScrollTopRef","scrolledBy","cssMinHeight","cssHeight","prevHeight","nextHeight","clampedNextHeight","heightDiff","GROUP_NAME","SelectGroupContextProvider","useSelectGroupContext","SelectGroup","groupProps","groupId","LABEL_NAME","SelectLabel","labelProps","groupContext","ITEM_NAME","SelectItemContextProvider","useSelectItemContext","SelectItem","textValueProp","itemProps","isSelected","textValue","setTextValue","isFocused","setIsFocused","textId","handleSelect","prevTextValue","ITEM_TEXT_NAME","SelectItemText","itemTextProps","itemContext","nativeOptionsContext","itemTextNode","setItemTextNode","textContent","nativeOption","onNativeOptionAdd","onNativeOptionRemove","ITEM_INDICATOR_NAME","SelectItemIndicator","itemIndicatorProps","SCROLL_UP_BUTTON_NAME","SelectScrollUpButton","canScrollUp","setCanScrollUp","handleScroll2","canScrollUp2","SelectScrollButtonImpl","SCROLL_DOWN_BUTTON_NAME","SelectScrollDownButton","canScrollDown","setCanScrollDown","maxScroll","canScrollDown2","onAutoScroll","scrollIndicatorProps","autoScrollTimerRef","clearAutoScrollTimer","SEPARATOR_NAME","SelectSeparator","separatorProps","ARROW_NAME","SelectArrow","arrowProps","PopperPrimitive.Arrow","BUBBLE_INPUT_NAME","prevValue","select","selectProto","VISUALLY_HIDDEN_STYLES","onSearchChange","handleSearchChange","useCallbackRef","timerRef","key","updateSearch","normalizedSearch","char","currentItemIndex","wrappedItems","wrapArray","v","array","startIndex","_","index","Root2","Trigger","Value","Icon","Portal","Content2","Viewport","Group","Label","Item","ItemText","ItemIndicator","ScrollUpButton","ScrollDownButton"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4]}
@@ -0,0 +1,2 @@
1
+
2
+ //# sourceMappingURL=index-DP2rzg_V.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-DP2rzg_V.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ import{r as c,c as K,A as xe,L as B,w as he,a as ve,l as ge,m as je}from"./chunk-QMGIS6GS-CG5cA6CX.js";import{j as e}from"./jsx-runtime-EKYJJIwR.js";import{d as V,e as H,P as N,f as g,h as be,u as $,m as we,g as ye,S as Ne}from"./tooltip-Cm7A1uIP.js";import{f as Te,u as z}from"./index-CZ8q0Nf8.js";import{u as Y,I as T,c as Ie}from"./misc-COGqV2fm.js";import{D as Ce}from"./diff-DpX_9FU6.js";import{G as Ee}from"./error-boundary-B8bEOgxp.js";import{L as Pe}from"./loading-CZYaLyAk.js";import{D as De,u as Re}from"./discord-DOEtvB6W.js";import{u as Se}from"./online-CwZkKwTv.js";import{t as Fe}from"./index-LNXI3Vlr.js";import{S as Ae}from"./set-playground-Bx0yIjpY.js";import{P as _e,a as ke}from"./tests-DvbNIXBP.js";import{P as _}from"./preview-COuApZAb.js";import"./index-Bp_2FjuO.js";import"./index-7Ba6ptu2.js";import"./accordion-PSsenYUI.js";import"./mdx-BEhxx-X4.js";import"./epic-video-CCv7QINN.js";import"./index-rknZKmMI.js";import"./pe-DoDyGTeN.js";import"./user-BQ8D2Fty.js";import"./workshop-config-5VcXxeyp.js";import"./progress-bar-Cww9t8Vn.js";import"./revalidation-ws-DJwDeSaI.js";import"./use-event-source-DDlZtAwc.js";import"./button-cFpvwtjC.js";var A="rovingFocusGroup.onEntryFocus",Le={bubbles:!1,cancelable:!0},I="RovingFocusGroup",[k,W,Ue]=Te(I),[Me,q]=V(I,[Ue]),[Oe,Ge]=Me(I),J=c.forwardRef((t,r)=>e.jsx(k.Provider,{scope:t.__scopeRovingFocusGroup,children:e.jsx(k.Slot,{scope:t.__scopeRovingFocusGroup,children:e.jsx(Ke,{...t,ref:r})})}));J.displayName=I;var Ke=c.forwardRef((t,r)=>{const{__scopeRovingFocusGroup:s,orientation:o,loop:a=!1,dir:u,currentTabStopId:l,defaultCurrentTabStopId:f,onCurrentTabStopIdChange:h,onEntryFocus:m,preventScrollOnEntryFocus:i=!1,...n}=t,p=c.useRef(null),C=be(r,p),E=z(u),[P,d]=$({prop:l,defaultProp:f??null,onChange:h,caller:I}),[j,R]=c.useState(!1),v=we(m),b=W(s),S=c.useRef(!1),[ue,M]=c.useState(0);return c.useEffect(()=>{const x=p.current;if(x)return x.addEventListener(A,v),()=>x.removeEventListener(A,v)},[v]),e.jsx(Oe,{scope:s,orientation:o,dir:E,loop:a,currentTabStopId:P,onItemFocus:c.useCallback(x=>d(x),[d]),onItemShiftTab:c.useCallback(()=>R(!0),[]),onFocusableItemAdd:c.useCallback(()=>M(x=>x+1),[]),onFocusableItemRemove:c.useCallback(()=>M(x=>x-1),[]),children:e.jsx(N.div,{tabIndex:j||ue===0?-1:0,"data-orientation":o,...n,ref:C,style:{outline:"none",...t.style},onMouseDown:g(t.onMouseDown,()=>{S.current=!0}),onFocus:g(t.onFocus,x=>{const de=!S.current;if(x.target===x.currentTarget&&de&&!j){const O=new CustomEvent(A,Le);if(x.currentTarget.dispatchEvent(O),!O.defaultPrevented){const F=b().filter(w=>w.focusable),fe=F.find(w=>w.active),me=F.find(w=>w.id===P),pe=[fe,me,...F].filter(Boolean).map(w=>w.ref.current);Z(pe,i)}}S.current=!1}),onBlur:g(t.onBlur,()=>R(!1))})})}),Q="RovingFocusGroupItem",X=c.forwardRef((t,r)=>{const{__scopeRovingFocusGroup:s,focusable:o=!0,active:a=!1,tabStopId:u,children:l,...f}=t,h=H(),m=u||h,i=Ge(Q,s),n=i.currentTabStopId===m,p=W(s),{onFocusableItemAdd:C,onFocusableItemRemove:E,currentTabStopId:P}=i;return c.useEffect(()=>{if(o)return C(),()=>E()},[o,C,E]),e.jsx(k.ItemSlot,{scope:s,id:m,focusable:o,active:a,children:e.jsx(N.span,{tabIndex:n?0:-1,"data-orientation":i.orientation,...f,ref:r,onMouseDown:g(t.onMouseDown,d=>{o?i.onItemFocus(m):d.preventDefault()}),onFocus:g(t.onFocus,()=>i.onItemFocus(m)),onKeyDown:g(t.onKeyDown,d=>{if(d.key==="Tab"&&d.shiftKey){i.onItemShiftTab();return}if(d.target!==d.currentTarget)return;const j=He(d,i.orientation,i.dir);if(j!==void 0){if(d.metaKey||d.ctrlKey||d.altKey||d.shiftKey)return;d.preventDefault();let v=p().filter(b=>b.focusable).map(b=>b.ref.current);if(j==="last")v.reverse();else if(j==="prev"||j==="next"){j==="prev"&&v.reverse();const b=v.indexOf(d.currentTarget);v=i.loop?$e(v,b+1):v.slice(b+1)}setTimeout(()=>Z(v))}}),children:typeof l=="function"?l({isCurrentTabStop:n,hasTabStop:P!=null}):l})})});X.displayName=Q;var Be={ArrowLeft:"prev",ArrowUp:"prev",ArrowRight:"next",ArrowDown:"next",PageUp:"first",Home:"first",PageDown:"last",End:"last"};function Ve(t,r){return r!=="rtl"?t:t==="ArrowLeft"?"ArrowRight":t==="ArrowRight"?"ArrowLeft":t}function He(t,r,s){const o=Ve(t.key,s);if(!(r==="vertical"&&["ArrowLeft","ArrowRight"].includes(o))&&!(r==="horizontal"&&["ArrowUp","ArrowDown"].includes(o)))return Be[o]}function Z(t,r=!1){const s=document.activeElement;for(const o of t)if(o===s||(o.focus({preventScroll:r}),document.activeElement!==s))return}function $e(t,r){return t.map((s,o)=>t[(r+o)%t.length])}var ze=J,Ye=X,D="Tabs",[We,At]=V(D,[q]),ee=q(),[qe,U]=We(D),te=c.forwardRef((t,r)=>{const{__scopeTabs:s,value:o,onValueChange:a,defaultValue:u,orientation:l="horizontal",dir:f,activationMode:h="automatic",...m}=t,i=z(f),[n,p]=$({prop:o,onChange:a,defaultProp:u??"",caller:D});return e.jsx(qe,{scope:s,baseId:H(),value:n,onValueChange:p,orientation:l,dir:i,activationMode:h,children:e.jsx(N.div,{dir:i,"data-orientation":l,...m,ref:r})})});te.displayName=D;var re="TabsList",se=c.forwardRef((t,r)=>{const{__scopeTabs:s,loop:o=!0,...a}=t,u=U(re,s),l=ee(s);return e.jsx(ze,{asChild:!0,...l,orientation:u.orientation,dir:u.dir,loop:o,children:e.jsx(N.div,{role:"tablist","aria-orientation":u.orientation,...a,ref:r})})});se.displayName=re;var oe="TabsTrigger",ne=c.forwardRef((t,r)=>{const{__scopeTabs:s,value:o,disabled:a=!1,...u}=t,l=U(oe,s),f=ee(s),h=le(l.baseId,o),m=ce(l.baseId,o),i=o===l.value;return e.jsx(Ye,{asChild:!0,...f,focusable:!a,active:i,children:e.jsx(N.button,{type:"button",role:"tab","aria-selected":i,"aria-controls":m,"data-state":i?"active":"inactive","data-disabled":a?"":void 0,disabled:a,id:h,...u,ref:r,onMouseDown:g(t.onMouseDown,n=>{!a&&n.button===0&&n.ctrlKey===!1?l.onValueChange(o):n.preventDefault()}),onKeyDown:g(t.onKeyDown,n=>{[" ","Enter"].includes(n.key)&&l.onValueChange(o)}),onFocus:g(t.onFocus,()=>{const n=l.activationMode!=="manual";!i&&!a&&n&&l.onValueChange(o)})})})});ne.displayName=oe;var ae="TabsContent",ie=c.forwardRef((t,r)=>{const{__scopeTabs:s,value:o,forceMount:a,children:u,...l}=t,f=U(ae,s),h=le(f.baseId,o),m=ce(f.baseId,o),i=o===f.value,n=c.useRef(i);return c.useEffect(()=>{const p=requestAnimationFrame(()=>n.current=!1);return()=>cancelAnimationFrame(p)},[]),e.jsx(ye,{present:a||i,children:({present:p})=>e.jsx(N.div,{"data-state":i?"active":"inactive","data-orientation":f.orientation,role:"tabpanel","aria-labelledby":h,hidden:!p,id:m,tabIndex:0,...l,ref:r,style:{...t.style,animationDuration:n.current?"0s":void 0},children:p&&u})})});ie.displayName=ae;function le(t,r){return`${t}-trigger-${r}`}function ce(t,r){return`${t}-content-${r}`}var Je=te,Qe=se,Xe=ne,y=ie;function Ze(){return e.jsxs("div",{className:"flex h-full w-full flex-col gap-4 pt-4",children:[e.jsx("div",{className:"text-center",children:e.jsx(De,{})}),e.jsx("div",{className:"flex-1 overflow-y-scroll bg-accent pb-4 scrollbar-thin scrollbar-thumb-scrollbar",children:e.jsx(et,{})})]})}function et(){const t=K(),r=Re(),s=Y();return Se()?e.jsxs("div",{className:"flex h-full flex-col items-center justify-between",children:[e.jsx(c.Suspense,{fallback:e.jsx("div",{className:"flex h-full w-full flex-col items-center justify-center",children:e.jsx(Pe,{children:"Loading Discord Posts"})}),children:e.jsx(xe,{resolve:t.discordPostsPromise,errorElement:e.jsx("div",{className:"text-red-500",children:"There was a problem loading the discord posts"}),children:a=>e.jsx("ul",{className:"flex w-full flex-col gap-4 p-3 xl:p-12",children:a.map(u=>e.jsx("li",{className:"rounded-xl border bg-background transition-all duration-200 focus-within:-translate-y-1 focus-within:shadow-lg hover:-translate-y-1 hover:shadow-lg",children:e.jsx(tt,{thread:u})},u.id))})})}),e.jsx("div",{children:e.jsxs(B,{to:s&&!r.includes("oauth")?r.replace(/^https/,"discord"):r,target:r.includes("oauth")?void 0:"_blank",rel:"noreferrer noopener",onClick:s?a=>{a.preventDefault(),window.open(a.currentTarget.href,"_blank","noreferrer noopener")}:void 0,className:"flex items-center gap-2 p-2 text-xl hover:underline",children:["Create Post ",e.jsx(T,{name:"ExternalLink"})]})})]}):e.jsx("div",{className:"flex h-full flex-col items-center justify-between",children:e.jsx("div",{className:"flex h-full w-full flex-col items-center justify-center text-foreground-destructive",children:e.jsx(T,{name:"WifiNoConnection",size:"xl",children:"Unable to load discord messages when offline"})})})}function tt({thread:t}){const r=t.reactions.filter(s=>s.count);return e.jsx("div",{children:e.jsxs("div",{className:"flex flex-col gap-2 p-4",children:[e.jsxs("div",{className:"flex gap-4",children:[e.jsxs("div",{className:"flex flex-col gap-1",children:[t.tags.length?e.jsx("div",{className:"flex gap-2",children:t.tags.map(s=>e.jsxs("div",{className:"flex items-center justify-center gap-1 rounded-full bg-accent px-2 py-1 text-sm",children:[e.jsx("span",{className:"h-3 w-3 leading-3",children:e.jsx(G,{name:s.emojiName,url:s.emojiUrl})}),e.jsx("span",{children:s.name})]},s.name))}):null,e.jsx("strong",{className:"text-xl font-bold",children:t.name}),e.jsxs("div",{className:"flex items-start gap-1",children:[e.jsxs("div",{className:"flex items-center gap-1",children:[t.authorAvatarUrl?e.jsx("img",{src:t.authorAvatarUrl,alt:"",className:"h-6 w-6 rounded-full"}):null,e.jsxs("span",{children:[e.jsx("span",{className:"font-bold",style:t.authorHexAccentColor?{color:t.authorHexAccentColor}:{},children:t.authorDisplayName}),":"," "]})]}),e.jsx("span",{className:"flex-1 overflow-ellipsis text-muted-foreground",children:t.messagePreview})]})]}),t.previewImageUrl?e.jsx("img",{src:t.previewImageUrl,alt:"",className:"h-28 w-28 rounded-lg object-cover"}):null]}),e.jsxs("div",{className:"flex justify-between",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("span",{children:r.length?e.jsx("ul",{className:"flex items-center gap-2",children:r.map((s,o)=>e.jsxs("li",{className:"flex items-center gap-1 rounded-md border border-blue-600 bg-blue-500/20 px-[5px] py-[0.5px] text-sm",children:[e.jsx("span",{className:"h-3 w-3 leading-3",children:e.jsx(G,{name:s.emojiName,url:s.emojiUrl})}),e.jsx("span",{children:s.count})]},o))}):null}),e.jsxs("span",{className:"flex items-center gap-1",children:[e.jsxs("span",{className:"inline-flex items-center gap-1",children:[e.jsx(T,{name:"Chat"})," ",t.messageCount]}),` · ${t.lastUpdatedDisplay}`]})]}),e.jsxs("span",{className:"flex items-center gap-4",children:[e.jsx("a",{href:t.link.replace(/^https/,"discord"),children:e.jsx(T,{name:"Discord"})}),e.jsx("a",{href:t.link,target:"_blank",rel:"noreferrer noopener",children:e.jsx(T,{name:"ExternalLink"})})]})]})]})})}function G({name:t,url:r}){return r?e.jsx("img",{src:r,alt:t,className:"h-full w-full"}):t||null}function rt({appInfo:t,inBrowserBrowserRef:r,problemAppName:s,allApps:o,isUpToDate:a}){return e.jsx(_e,{playgroundAppName:t?.appName,problemAppName:s,allApps:o,isUpToDate:a,children:t?.dev.type==="none"?e.jsxs("div",{children:[e.jsx("div",{className:"text-foreground-secondary flex h-full items-center justify-center text-2xl",children:"Non-UI playground"}),e.jsx("div",{children:e.jsxs("div",{className:"text-foreground-secondary flex flex-wrap gap-1 text-center",children:["Navigate to"," ",e.jsx(Ne,{content:t.fullPath,children:e.jsx("span",{className:"underline",onClick:()=>{navigator.clipboard.writeText(t.fullPath),Fe.success("Copied playground path to clipboard")},children:"the playground directory"})})," ","in your editor and terminal to work on this exercise!"]})})]}):t?e.jsx(_,{id:t.appName,appInfo:t,inBrowserBrowserRef:r}):e.jsxs("div",{className:"flex flex-col justify-center gap-2",children:[e.jsx("p",{children:"Please set the playground first"}),s?e.jsx(Ae,{appName:s}):null]})})}const L=["playground","problem","solution","tests","diff","chat"],st=t=>!!(t&&L.includes(t));function ot(t,r,s){const o=new URLSearchParams(t);return s===null?o.delete(r):o.set(r,s),o}const _t=he(function(){const r=K(),[s]=ge(),o=s.get("preview"),a=c.useRef(null),u=Y(),l=je();function f(n){if(n==="tests")return ENV.EPICSHOP_DEPLOYED||!r.playground||r.playground.test.type==="none";if(n==="problem"||n==="solution"){if(r[n]?.dev.type==="none")return!0;if(ENV.EPICSHOP_DEPLOYED)return r[n]?.dev.type!=="browser"&&!r[n]?.stackBlitzUrl}return!!(n==="playground"&&ENV.EPICSHOP_DEPLOYED)}const h=st(o)?o:L.find(n=>!f(n)),m=`/diff?${new URLSearchParams({app1:r.problem?.name??"",app2:r.solution?.name??""})}`;function i(n){n.altKey&&!n.ctrlKey&&!n.shiftKey&&!n.metaKey&&(n.preventDefault(),l(m))}return e.jsxs(Je,{className:"relative flex flex-col overflow-y-auto sm:col-span-1 sm:row-span-1",value:h,children:[e.jsx(Qe,{className:"h-14 min-h-14 overflow-x-hidden border-b scrollbar-thin scrollbar-thumb-scrollbar",children:L.map(n=>{const p=f(n);return e.jsx(Xe,{value:n,hidden:p,asChild:!0,children:e.jsx(B,{id:`${n}-tab`,className:Ie("clip-path-button relative h-full px-6 py-4 font-mono text-sm uppercase outline-none radix-state-active:z-10 radix-state-active:bg-foreground radix-state-active:text-background radix-state-active:hover:bg-foreground/80 radix-state-active:hover:text-background/80 radix-state-inactive:hover:bg-foreground/20 radix-state-inactive:hover:text-foreground/80 focus:bg-foreground/80 focus:text-background/80",p?"hidden":"inline-block"),preventScrollReset:!0,prefetch:"intent",onClick:i,to:n==="diff"&&u?m:`?${ot(s,"preview",n==="playground"?null:n)}`,children:n})},n)})}),e.jsxs("div",{className:"relative z-10 flex min-h-96 flex-grow flex-col overflow-y-auto",children:[e.jsx(y,{value:"playground",className:"flex w-full flex-grow items-center justify-center self-start radix-state-inactive:hidden",forceMount:!0,children:e.jsx(rt,{appInfo:r.playground,problemAppName:r.problem?.name,inBrowserBrowserRef:a,allApps:r.allApps,isUpToDate:r.playground?.isUpToDate??!1})}),e.jsx(y,{value:"problem",className:"flex w-full flex-grow items-center justify-center self-start radix-state-inactive:hidden",forceMount:!0,children:e.jsx(_,{appInfo:r.problem,inBrowserBrowserRef:a})}),e.jsx(y,{value:"solution",className:"flex w-full flex-grow items-center justify-center self-start radix-state-inactive:hidden",forceMount:!0,children:e.jsx(_,{appInfo:r.solution,inBrowserBrowserRef:a})}),e.jsx(y,{value:"tests",className:"flex w-full flex-grow items-start justify-center self-start overflow-hidden radix-state-inactive:hidden",children:e.jsx(ke,{appInfo:r.playground,problemAppName:r.problem?.name,allApps:r.allApps,isUpToDate:r.playground?.isUpToDate??!1})}),e.jsx(y,{value:"diff",className:"flex h-full w-full flex-grow items-start justify-center self-start radix-state-inactive:hidden",children:e.jsx(Ce,{diff:r.diff,allApps:r.allApps})}),e.jsx(y,{value:"chat",className:"flex h-full w-full flex-grow items-start justify-center self-start radix-state-inactive:hidden",children:e.jsx(Ze,{})})]})]})}),kt=ve(function(){return e.jsx(Ee,{statusHandlers:{404:()=>e.jsx("p",{children:"Sorry, we couldn't find an app here."})}})});export{kt as ErrorBoundary,_t as default};
2
+ //# sourceMappingURL=index-DSMFPAn8.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-DSMFPAn8.js","sources":["../../../../../node_modules/@radix-ui/react-roving-focus/dist/index.mjs","../../../../../node_modules/@radix-ui/react-tabs/dist/index.mjs","../../../app/routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/__shared/discord.tsx","../../../app/routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/__shared/playground.tsx","../../../app/routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/index.tsx"],"sourcesContent":["\"use client\";\n\n// src/roving-focus-group.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createCollection } from \"@radix-ui/react-collection\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { jsx } from \"react/jsx-runtime\";\nvar ENTRY_FOCUS = \"rovingFocusGroup.onEntryFocus\";\nvar EVENT_OPTIONS = { bubbles: false, cancelable: true };\nvar GROUP_NAME = \"RovingFocusGroup\";\nvar [Collection, useCollection, createCollectionScope] = createCollection(GROUP_NAME);\nvar [createRovingFocusGroupContext, createRovingFocusGroupScope] = createContextScope(\n GROUP_NAME,\n [createCollectionScope]\n);\nvar [RovingFocusProvider, useRovingFocusContext] = createRovingFocusGroupContext(GROUP_NAME);\nvar RovingFocusGroup = React.forwardRef(\n (props, forwardedRef) => {\n return /* @__PURE__ */ jsx(Collection.Provider, { scope: props.__scopeRovingFocusGroup, children: /* @__PURE__ */ jsx(Collection.Slot, { scope: props.__scopeRovingFocusGroup, children: /* @__PURE__ */ jsx(RovingFocusGroupImpl, { ...props, ref: forwardedRef }) }) });\n }\n);\nRovingFocusGroup.displayName = GROUP_NAME;\nvar RovingFocusGroupImpl = React.forwardRef((props, forwardedRef) => {\n const {\n __scopeRovingFocusGroup,\n orientation,\n loop = false,\n dir,\n currentTabStopId: currentTabStopIdProp,\n defaultCurrentTabStopId,\n onCurrentTabStopIdChange,\n onEntryFocus,\n preventScrollOnEntryFocus = false,\n ...groupProps\n } = props;\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const direction = useDirection(dir);\n const [currentTabStopId, setCurrentTabStopId] = useControllableState({\n prop: currentTabStopIdProp,\n defaultProp: defaultCurrentTabStopId ?? null,\n onChange: onCurrentTabStopIdChange,\n caller: GROUP_NAME\n });\n const [isTabbingBackOut, setIsTabbingBackOut] = React.useState(false);\n const handleEntryFocus = useCallbackRef(onEntryFocus);\n const getItems = useCollection(__scopeRovingFocusGroup);\n const isClickFocusRef = React.useRef(false);\n const [focusableItemsCount, setFocusableItemsCount] = React.useState(0);\n React.useEffect(() => {\n const node = ref.current;\n if (node) {\n node.addEventListener(ENTRY_FOCUS, handleEntryFocus);\n return () => node.removeEventListener(ENTRY_FOCUS, handleEntryFocus);\n }\n }, [handleEntryFocus]);\n return /* @__PURE__ */ jsx(\n RovingFocusProvider,\n {\n scope: __scopeRovingFocusGroup,\n orientation,\n dir: direction,\n loop,\n currentTabStopId,\n onItemFocus: React.useCallback(\n (tabStopId) => setCurrentTabStopId(tabStopId),\n [setCurrentTabStopId]\n ),\n onItemShiftTab: React.useCallback(() => setIsTabbingBackOut(true), []),\n onFocusableItemAdd: React.useCallback(\n () => setFocusableItemsCount((prevCount) => prevCount + 1),\n []\n ),\n onFocusableItemRemove: React.useCallback(\n () => setFocusableItemsCount((prevCount) => prevCount - 1),\n []\n ),\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n tabIndex: isTabbingBackOut || focusableItemsCount === 0 ? -1 : 0,\n \"data-orientation\": orientation,\n ...groupProps,\n ref: composedRefs,\n style: { outline: \"none\", ...props.style },\n onMouseDown: composeEventHandlers(props.onMouseDown, () => {\n isClickFocusRef.current = true;\n }),\n onFocus: composeEventHandlers(props.onFocus, (event) => {\n const isKeyboardFocus = !isClickFocusRef.current;\n if (event.target === event.currentTarget && isKeyboardFocus && !isTabbingBackOut) {\n const entryFocusEvent = new CustomEvent(ENTRY_FOCUS, EVENT_OPTIONS);\n event.currentTarget.dispatchEvent(entryFocusEvent);\n if (!entryFocusEvent.defaultPrevented) {\n const items = getItems().filter((item) => item.focusable);\n const activeItem = items.find((item) => item.active);\n const currentItem = items.find((item) => item.id === currentTabStopId);\n const candidateItems = [activeItem, currentItem, ...items].filter(\n Boolean\n );\n const candidateNodes = candidateItems.map((item) => item.ref.current);\n focusFirst(candidateNodes, preventScrollOnEntryFocus);\n }\n }\n isClickFocusRef.current = false;\n }),\n onBlur: composeEventHandlers(props.onBlur, () => setIsTabbingBackOut(false))\n }\n )\n }\n );\n});\nvar ITEM_NAME = \"RovingFocusGroupItem\";\nvar RovingFocusGroupItem = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeRovingFocusGroup,\n focusable = true,\n active = false,\n tabStopId,\n children,\n ...itemProps\n } = props;\n const autoId = useId();\n const id = tabStopId || autoId;\n const context = useRovingFocusContext(ITEM_NAME, __scopeRovingFocusGroup);\n const isCurrentTabStop = context.currentTabStopId === id;\n const getItems = useCollection(__scopeRovingFocusGroup);\n const { onFocusableItemAdd, onFocusableItemRemove, currentTabStopId } = context;\n React.useEffect(() => {\n if (focusable) {\n onFocusableItemAdd();\n return () => onFocusableItemRemove();\n }\n }, [focusable, onFocusableItemAdd, onFocusableItemRemove]);\n return /* @__PURE__ */ jsx(\n Collection.ItemSlot,\n {\n scope: __scopeRovingFocusGroup,\n id,\n focusable,\n active,\n children: /* @__PURE__ */ jsx(\n Primitive.span,\n {\n tabIndex: isCurrentTabStop ? 0 : -1,\n \"data-orientation\": context.orientation,\n ...itemProps,\n ref: forwardedRef,\n onMouseDown: composeEventHandlers(props.onMouseDown, (event) => {\n if (!focusable) event.preventDefault();\n else context.onItemFocus(id);\n }),\n onFocus: composeEventHandlers(props.onFocus, () => context.onItemFocus(id)),\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n if (event.key === \"Tab\" && event.shiftKey) {\n context.onItemShiftTab();\n return;\n }\n if (event.target !== event.currentTarget) return;\n const focusIntent = getFocusIntent(event, context.orientation, context.dir);\n if (focusIntent !== void 0) {\n if (event.metaKey || event.ctrlKey || event.altKey || event.shiftKey) return;\n event.preventDefault();\n const items = getItems().filter((item) => item.focusable);\n let candidateNodes = items.map((item) => item.ref.current);\n if (focusIntent === \"last\") candidateNodes.reverse();\n else if (focusIntent === \"prev\" || focusIntent === \"next\") {\n if (focusIntent === \"prev\") candidateNodes.reverse();\n const currentIndex = candidateNodes.indexOf(event.currentTarget);\n candidateNodes = context.loop ? wrapArray(candidateNodes, currentIndex + 1) : candidateNodes.slice(currentIndex + 1);\n }\n setTimeout(() => focusFirst(candidateNodes));\n }\n }),\n children: typeof children === \"function\" ? children({ isCurrentTabStop, hasTabStop: currentTabStopId != null }) : children\n }\n )\n }\n );\n }\n);\nRovingFocusGroupItem.displayName = ITEM_NAME;\nvar MAP_KEY_TO_FOCUS_INTENT = {\n ArrowLeft: \"prev\",\n ArrowUp: \"prev\",\n ArrowRight: \"next\",\n ArrowDown: \"next\",\n PageUp: \"first\",\n Home: \"first\",\n PageDown: \"last\",\n End: \"last\"\n};\nfunction getDirectionAwareKey(key, dir) {\n if (dir !== \"rtl\") return key;\n return key === \"ArrowLeft\" ? \"ArrowRight\" : key === \"ArrowRight\" ? \"ArrowLeft\" : key;\n}\nfunction getFocusIntent(event, orientation, dir) {\n const key = getDirectionAwareKey(event.key, dir);\n if (orientation === \"vertical\" && [\"ArrowLeft\", \"ArrowRight\"].includes(key)) return void 0;\n if (orientation === \"horizontal\" && [\"ArrowUp\", \"ArrowDown\"].includes(key)) return void 0;\n return MAP_KEY_TO_FOCUS_INTENT[key];\n}\nfunction focusFirst(candidates, preventScroll = false) {\n const PREVIOUSLY_FOCUSED_ELEMENT = document.activeElement;\n for (const candidate of candidates) {\n if (candidate === PREVIOUSLY_FOCUSED_ELEMENT) return;\n candidate.focus({ preventScroll });\n if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT) return;\n }\n}\nfunction wrapArray(array, startIndex) {\n return array.map((_, index) => array[(startIndex + index) % array.length]);\n}\nvar Root = RovingFocusGroup;\nvar Item = RovingFocusGroupItem;\nexport {\n Item,\n Root,\n RovingFocusGroup,\n RovingFocusGroupItem,\n createRovingFocusGroupScope\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/tabs.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { createRovingFocusGroupScope } from \"@radix-ui/react-roving-focus\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport * as RovingFocusGroup from \"@radix-ui/react-roving-focus\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { jsx } from \"react/jsx-runtime\";\nvar TABS_NAME = \"Tabs\";\nvar [createTabsContext, createTabsScope] = createContextScope(TABS_NAME, [\n createRovingFocusGroupScope\n]);\nvar useRovingFocusGroupScope = createRovingFocusGroupScope();\nvar [TabsProvider, useTabsContext] = createTabsContext(TABS_NAME);\nvar Tabs = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeTabs,\n value: valueProp,\n onValueChange,\n defaultValue,\n orientation = \"horizontal\",\n dir,\n activationMode = \"automatic\",\n ...tabsProps\n } = props;\n const direction = useDirection(dir);\n const [value, setValue] = useControllableState({\n prop: valueProp,\n onChange: onValueChange,\n defaultProp: defaultValue ?? \"\",\n caller: TABS_NAME\n });\n return /* @__PURE__ */ jsx(\n TabsProvider,\n {\n scope: __scopeTabs,\n baseId: useId(),\n value,\n onValueChange: setValue,\n orientation,\n dir: direction,\n activationMode,\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n dir: direction,\n \"data-orientation\": orientation,\n ...tabsProps,\n ref: forwardedRef\n }\n )\n }\n );\n }\n);\nTabs.displayName = TABS_NAME;\nvar TAB_LIST_NAME = \"TabsList\";\nvar TabsList = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeTabs, loop = true, ...listProps } = props;\n const context = useTabsContext(TAB_LIST_NAME, __scopeTabs);\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeTabs);\n return /* @__PURE__ */ jsx(\n RovingFocusGroup.Root,\n {\n asChild: true,\n ...rovingFocusGroupScope,\n orientation: context.orientation,\n dir: context.dir,\n loop,\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n role: \"tablist\",\n \"aria-orientation\": context.orientation,\n ...listProps,\n ref: forwardedRef\n }\n )\n }\n );\n }\n);\nTabsList.displayName = TAB_LIST_NAME;\nvar TRIGGER_NAME = \"TabsTrigger\";\nvar TabsTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeTabs, value, disabled = false, ...triggerProps } = props;\n const context = useTabsContext(TRIGGER_NAME, __scopeTabs);\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeTabs);\n const triggerId = makeTriggerId(context.baseId, value);\n const contentId = makeContentId(context.baseId, value);\n const isSelected = value === context.value;\n return /* @__PURE__ */ jsx(\n RovingFocusGroup.Item,\n {\n asChild: true,\n ...rovingFocusGroupScope,\n focusable: !disabled,\n active: isSelected,\n children: /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n role: \"tab\",\n \"aria-selected\": isSelected,\n \"aria-controls\": contentId,\n \"data-state\": isSelected ? \"active\" : \"inactive\",\n \"data-disabled\": disabled ? \"\" : void 0,\n disabled,\n id: triggerId,\n ...triggerProps,\n ref: forwardedRef,\n onMouseDown: composeEventHandlers(props.onMouseDown, (event) => {\n if (!disabled && event.button === 0 && event.ctrlKey === false) {\n context.onValueChange(value);\n } else {\n event.preventDefault();\n }\n }),\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n if ([\" \", \"Enter\"].includes(event.key)) context.onValueChange(value);\n }),\n onFocus: composeEventHandlers(props.onFocus, () => {\n const isAutomaticActivation = context.activationMode !== \"manual\";\n if (!isSelected && !disabled && isAutomaticActivation) {\n context.onValueChange(value);\n }\n })\n }\n )\n }\n );\n }\n);\nTabsTrigger.displayName = TRIGGER_NAME;\nvar CONTENT_NAME = \"TabsContent\";\nvar TabsContent = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeTabs, value, forceMount, children, ...contentProps } = props;\n const context = useTabsContext(CONTENT_NAME, __scopeTabs);\n const triggerId = makeTriggerId(context.baseId, value);\n const contentId = makeContentId(context.baseId, value);\n const isSelected = value === context.value;\n const isMountAnimationPreventedRef = React.useRef(isSelected);\n React.useEffect(() => {\n const rAF = requestAnimationFrame(() => isMountAnimationPreventedRef.current = false);\n return () => cancelAnimationFrame(rAF);\n }, []);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || isSelected, children: ({ present }) => /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-state\": isSelected ? \"active\" : \"inactive\",\n \"data-orientation\": context.orientation,\n role: \"tabpanel\",\n \"aria-labelledby\": triggerId,\n hidden: !present,\n id: contentId,\n tabIndex: 0,\n ...contentProps,\n ref: forwardedRef,\n style: {\n ...props.style,\n animationDuration: isMountAnimationPreventedRef.current ? \"0s\" : void 0\n },\n children: present && children\n }\n ) });\n }\n);\nTabsContent.displayName = CONTENT_NAME;\nfunction makeTriggerId(baseId, value) {\n return `${baseId}-trigger-${value}`;\n}\nfunction makeContentId(baseId, value) {\n return `${baseId}-content-${value}`;\n}\nvar Root2 = Tabs;\nvar List = TabsList;\nvar Trigger = TabsTrigger;\nvar Content = TabsContent;\nexport {\n Content,\n List,\n Root2 as Root,\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n Trigger,\n createTabsScope\n};\n//# sourceMappingURL=index.mjs.map\n","import * as React from 'react'\nimport { Await, Link, useLoaderData } from 'react-router'\nimport { Icon } from '#app/components/icons.tsx'\nimport { Loading } from '#app/components/loading.tsx'\nimport { DiscordCTA, useDiscordCTALink } from '#app/routes/_app+/discord.tsx'\nimport { useAltDown } from '#app/utils/misc.tsx'\nimport { useIsOnline } from '#app/utils/online.ts'\nimport { type Route } from '../+types/index.tsx'\n\nexport function DiscordChat() {\n\treturn (\n\t\t<div className=\"flex h-full w-full flex-col gap-4 pt-4\">\n\t\t\t<div className=\"text-center\">\n\t\t\t\t<DiscordCTA />\n\t\t\t</div>\n\t\t\t<div className=\"flex-1 overflow-y-scroll bg-accent pb-4 scrollbar-thin scrollbar-thumb-scrollbar\">\n\t\t\t\t<DiscordPosts />\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n\nfunction DiscordPosts() {\n\tconst data = useLoaderData<Route.ComponentProps['loaderData']>()\n\tconst ctaLink = useDiscordCTALink()\n\tconst altDown = useAltDown()\n\tconst isOnline = useIsOnline()\n\tif (!isOnline) {\n\t\treturn (\n\t\t\t<div className=\"flex h-full flex-col items-center justify-between\">\n\t\t\t\t<div className=\"flex h-full w-full flex-col items-center justify-center text-foreground-destructive\">\n\t\t\t\t\t<Icon name=\"WifiNoConnection\" size=\"xl\">\n\t\t\t\t\t\tUnable to load discord messages when offline\n\t\t\t\t\t</Icon>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t)\n\t}\n\treturn (\n\t\t<div className=\"flex h-full flex-col items-center justify-between\">\n\t\t\t<React.Suspense\n\t\t\t\tfallback={\n\t\t\t\t\t<div className=\"flex h-full w-full flex-col items-center justify-center\">\n\t\t\t\t\t\t<Loading>Loading Discord Posts</Loading>\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t>\n\t\t\t\t<Await\n\t\t\t\t\tresolve={data.discordPostsPromise}\n\t\t\t\t\terrorElement={\n\t\t\t\t\t\t<div className=\"text-red-500\">\n\t\t\t\t\t\t\tThere was a problem loading the discord posts\n\t\t\t\t\t\t</div>\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t\t{(posts) => (\n\t\t\t\t\t\t<ul className=\"flex w-full flex-col gap-4 p-3 xl:p-12\">\n\t\t\t\t\t\t\t{posts.map((post) => (\n\t\t\t\t\t\t\t\t<li\n\t\t\t\t\t\t\t\t\tkey={post.id}\n\t\t\t\t\t\t\t\t\tclassName=\"rounded-xl border bg-background transition-all duration-200 focus-within:-translate-y-1 focus-within:shadow-lg hover:-translate-y-1 hover:shadow-lg\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<DiscordPost thread={post} />\n\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t)}\n\t\t\t\t</Await>\n\t\t\t</React.Suspense>\n\t\t\t<div>\n\t\t\t\t<Link\n\t\t\t\t\tto={\n\t\t\t\t\t\taltDown && !ctaLink.includes('oauth')\n\t\t\t\t\t\t\t? ctaLink.replace(/^https/, 'discord')\n\t\t\t\t\t\t\t: ctaLink\n\t\t\t\t\t}\n\t\t\t\t\ttarget={ctaLink.includes('oauth') ? undefined : '_blank'}\n\t\t\t\t\trel=\"noreferrer noopener\"\n\t\t\t\t\tonClick={\n\t\t\t\t\t\taltDown\n\t\t\t\t\t\t\t? (e) => {\n\t\t\t\t\t\t\t\t\te.preventDefault()\n\t\t\t\t\t\t\t\t\twindow.open(\n\t\t\t\t\t\t\t\t\t\te.currentTarget.href,\n\t\t\t\t\t\t\t\t\t\t'_blank',\n\t\t\t\t\t\t\t\t\t\t'noreferrer noopener',\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t}\n\t\t\t\t\tclassName=\"flex items-center gap-2 p-2 text-xl hover:underline\"\n\t\t\t\t>\n\t\t\t\t\tCreate Post <Icon name=\"ExternalLink\" />\n\t\t\t\t</Link>\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n\nfunction DiscordPost({\n\tthread,\n}: {\n\tthread: Awaited<\n\t\tRoute.ComponentProps['loaderData']['discordPostsPromise']\n\t>[number]\n}) {\n\tconst reactionsWithCounts = thread.reactions.filter((r) => r.count)\n\n\treturn (\n\t\t<div>\n\t\t\t<div className=\"flex flex-col gap-2 p-4\">\n\t\t\t\t<div className=\"flex gap-4\">\n\t\t\t\t\t<div className=\"flex flex-col gap-1\">\n\t\t\t\t\t\t{thread.tags.length ? (\n\t\t\t\t\t\t\t<div className=\"flex gap-2\">\n\t\t\t\t\t\t\t\t{thread.tags.map((t) => (\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tkey={t.name}\n\t\t\t\t\t\t\t\t\t\tclassName=\"flex items-center justify-center gap-1 rounded-full bg-accent px-2 py-1 text-sm\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<span className=\"h-3 w-3 leading-3\">\n\t\t\t\t\t\t\t\t\t\t\t<Emoji name={t.emojiName} url={t.emojiUrl} />\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t<span>{t.name}</span>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t<strong className=\"text-xl font-bold\">{thread.name}</strong>\n\t\t\t\t\t\t<div className=\"flex items-start gap-1\">\n\t\t\t\t\t\t\t<div className=\"flex items-center gap-1\">\n\t\t\t\t\t\t\t\t{thread.authorAvatarUrl ? (\n\t\t\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t\t\t\tsrc={thread.authorAvatarUrl}\n\t\t\t\t\t\t\t\t\t\talt=\"\"\n\t\t\t\t\t\t\t\t\t\tclassName=\"h-6 w-6 rounded-full\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\tclassName=\"font-bold\"\n\t\t\t\t\t\t\t\t\t\tstyle={\n\t\t\t\t\t\t\t\t\t\t\tthread.authorHexAccentColor\n\t\t\t\t\t\t\t\t\t\t\t\t? { color: thread.authorHexAccentColor }\n\t\t\t\t\t\t\t\t\t\t\t\t: {}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{thread.authorDisplayName}\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t:{' '}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<span className=\"flex-1 overflow-ellipsis text-muted-foreground\">\n\t\t\t\t\t\t\t\t{thread.messagePreview}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t{thread.previewImageUrl ? (\n\t\t\t\t\t\t<img\n\t\t\t\t\t\t\tsrc={thread.previewImageUrl}\n\t\t\t\t\t\t\talt=\"\"\n\t\t\t\t\t\t\tclassName=\"h-28 w-28 rounded-lg object-cover\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t) : null}\n\t\t\t\t</div>\n\n\t\t\t\t<div className=\"flex justify-between\">\n\t\t\t\t\t<div className=\"flex items-center gap-3\">\n\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t{reactionsWithCounts.length ? (\n\t\t\t\t\t\t\t\t<ul className=\"flex items-center gap-2\">\n\t\t\t\t\t\t\t\t\t{reactionsWithCounts.map((r, i) => (\n\t\t\t\t\t\t\t\t\t\t<li\n\t\t\t\t\t\t\t\t\t\t\tkey={i}\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"flex items-center gap-1 rounded-md border border-blue-600 bg-blue-500/20 px-[5px] py-[0.5px] text-sm\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"h-3 w-3 leading-3\">\n\t\t\t\t\t\t\t\t\t\t\t\t<Emoji name={r.emojiName} url={r.emojiUrl} />\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t<span>{r.count}</span>\n\t\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t\t<span className=\"flex items-center gap-1\">\n\t\t\t\t\t\t\t<span className=\"inline-flex items-center gap-1\">\n\t\t\t\t\t\t\t\t<Icon name=\"Chat\" /> {thread.messageCount}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t{` · ${thread.lastUpdatedDisplay}`}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</div>\n\t\t\t\t\t<span className=\"flex items-center gap-4\">\n\t\t\t\t\t\t<a href={thread.link.replace(/^https/, 'discord')}>\n\t\t\t\t\t\t\t<Icon name=\"Discord\" />\n\t\t\t\t\t\t</a>\n\t\t\t\t\t\t<a href={thread.link} target=\"_blank\" rel=\"noreferrer noopener\">\n\t\t\t\t\t\t\t<Icon name=\"ExternalLink\" />\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n\nfunction Emoji({ name, url }: { name?: string; url?: string }) {\n\treturn url ? (\n\t\t<img src={url} alt={name} className=\"h-full w-full\" />\n\t) : name ? (\n\t\tname\n\t) : null\n}\n","import { toast as showToast } from 'sonner'\nimport { type InBrowserBrowserRef } from '#app/components/in-browser-browser'\nimport { SimpleTooltip } from '#app/components/ui/tooltip'\nimport { SetAppToPlayground } from '#app/routes/set-playground'\nimport { PlaygroundWindow } from './playground-window'\nimport { Preview } from './preview'\n\nexport function Playground({\n\tappInfo: playgroundAppInfo,\n\tinBrowserBrowserRef,\n\tproblemAppName,\n\tallApps,\n\tisUpToDate,\n}: {\n\tappInfo: Parameters<typeof Preview>['0']['appInfo'] | null\n\tinBrowserBrowserRef: React.RefObject<InBrowserBrowserRef | null>\n\tproblemAppName?: string\n\tallApps: Array<{ name: string; displayName: string }>\n\tisUpToDate: boolean\n}) {\n\treturn (\n\t\t<PlaygroundWindow\n\t\t\tplaygroundAppName={playgroundAppInfo?.appName}\n\t\t\tproblemAppName={problemAppName}\n\t\t\tallApps={allApps}\n\t\t\tisUpToDate={isUpToDate}\n\t\t>\n\t\t\t{playgroundAppInfo?.dev.type === 'none' ? (\n\t\t\t\t<div>\n\t\t\t\t\t<div className=\"text-foreground-secondary flex h-full items-center justify-center text-2xl\">\n\t\t\t\t\t\tNon-UI playground\n\t\t\t\t\t</div>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<div className=\"text-foreground-secondary flex flex-wrap gap-1 text-center\">\n\t\t\t\t\t\t\tNavigate to{' '}\n\t\t\t\t\t\t\t<SimpleTooltip content={playgroundAppInfo.fullPath}>\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\tclassName=\"underline\"\n\t\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\t\tvoid navigator.clipboard.writeText(\n\t\t\t\t\t\t\t\t\t\t\tplaygroundAppInfo.fullPath,\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\tshowToast.success('Copied playground path to clipboard')\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\tthe playground directory\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</SimpleTooltip>{' '}\n\t\t\t\t\t\t\tin your editor and terminal to work on this exercise!\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t) : playgroundAppInfo ? (\n\t\t\t\t<Preview\n\t\t\t\t\tid={playgroundAppInfo.appName}\n\t\t\t\t\tappInfo={playgroundAppInfo}\n\t\t\t\t\tinBrowserBrowserRef={inBrowserBrowserRef}\n\t\t\t\t/>\n\t\t\t) : (\n\t\t\t\t<div className=\"flex flex-col justify-center gap-2\">\n\t\t\t\t\t<p>Please set the playground first</p>\n\t\t\t\t\t{problemAppName ? (\n\t\t\t\t\t\t<SetAppToPlayground appName={problemAppName} />\n\t\t\t\t\t) : null}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</PlaygroundWindow>\n\t)\n}\n","import {\n\tgetAppByName,\n\tgetAppDisplayName,\n\tgetApps,\n\tgetExerciseApp,\n\tisExerciseStepApp,\n\tisPlaygroundApp,\n\trequireExerciseApp,\n\ttype App,\n\ttype ExerciseStepApp,\n} from '@epic-web/workshop-utils/apps.server'\nimport { compileMarkdownString } from '@epic-web/workshop-utils/compile-mdx.server'\nimport { getDiffCode } from '@epic-web/workshop-utils/diff.server'\nimport { userHasAccessToWorkshop } from '@epic-web/workshop-utils/epic-api.server'\nimport {\n\tcombineServerTimings,\n\tgetServerTimeHeader,\n\tmakeTimings,\n} from '@epic-web/workshop-utils/timing.server'\nimport * as Tabs from '@radix-ui/react-tabs'\nimport { clsx } from 'clsx'\nimport * as React from 'react'\nimport { useRef } from 'react'\nimport {\n\tLink,\n\tuseLoaderData,\n\tuseNavigate,\n\tuseSearchParams,\n\tdata,\n\tredirect,\n\ttype HeadersFunction,\n\ttype LoaderFunctionArgs,\n} from 'react-router'\nimport { Diff } from '#app/components/diff.tsx'\nimport { GeneralErrorBoundary } from '#app/components/error-boundary.tsx'\nimport { type InBrowserBrowserRef } from '#app/components/in-browser-browser.tsx'\nimport { useAltDown } from '#app/utils/misc.tsx'\nimport { fetchDiscordPosts } from './__shared/discord.server.ts'\nimport { DiscordChat } from './__shared/discord.tsx'\nimport { Playground } from './__shared/playground.tsx'\nimport { Preview } from './__shared/preview.tsx'\nimport { Tests } from './__shared/tests.tsx'\nimport { getAppRunningState } from './__shared/utils.tsx'\n\nexport async function loader({ request, params }: LoaderFunctionArgs) {\n\tconst timings = makeTimings('exerciseStepTypeIndexLoader')\n\tconst userHasAccess = await userHasAccessToWorkshop({\n\t\trequest,\n\t\ttimings,\n\t})\n\tconst searchParams = new URL(request.url).searchParams\n\tconst cacheOptions = { request, timings }\n\tconst exerciseStepApp = await requireExerciseApp(params, cacheOptions)\n\tconst reqUrl = new URL(request.url)\n\n\tconst pathnameParam = reqUrl.searchParams.get('pathname')\n\tif (pathnameParam === '' || pathnameParam === '/') {\n\t\treqUrl.searchParams.delete('pathname')\n\t\tthrow redirect(reqUrl.toString())\n\t}\n\n\tconst problemApp = await getExerciseApp(\n\t\t{ ...params, type: 'problem' },\n\t\tcacheOptions,\n\t)\n\tconst solutionApp = await getExerciseApp(\n\t\t{ ...params, type: 'solution' },\n\t\tcacheOptions,\n\t)\n\n\tif (!problemApp && !solutionApp) {\n\t\tthrow new Response('Not found', { status: 404 })\n\t}\n\n\tconst allAppsFull = await getApps(cacheOptions)\n\tconst playgroundApp = allAppsFull.find(isPlaygroundApp)\n\n\tconst app1Name = reqUrl.searchParams.get('app1')\n\tconst app2Name = reqUrl.searchParams.get('app2')\n\tconst app1 = app1Name\n\t\t? await getAppByName(app1Name)\n\t\t: playgroundApp || problemApp\n\tconst app2 = app2Name ? await getAppByName(app2Name) : solutionApp\n\n\tfunction getStepId(a: ExerciseStepApp) {\n\t\treturn (\n\t\t\ta.exerciseNumber * 1000 +\n\t\t\ta.stepNumber * 10 +\n\t\t\t(a.type === 'problem' ? 0 : 1)\n\t\t)\n\t}\n\n\tfunction getStepNameAndId(a: App) {\n\t\tif (isExerciseStepApp(a)) {\n\t\t\tconst exerciseNumberStr = String(a.exerciseNumber).padStart(2, '0')\n\t\t\tconst stepNumberStr = String(a.stepNumber).padStart(2, '0')\n\n\t\t\treturn {\n\t\t\t\tstepName: `${exerciseNumberStr}/${stepNumberStr}.${a.type}`,\n\t\t\t\tstepId: getStepId(a),\n\t\t\t}\n\t\t}\n\t\treturn { stepName: '', stepId: -1 }\n\t}\n\n\tconst allApps = allAppsFull\n\t\t.filter((a, i, ar) => ar.findIndex((b) => a.name === b.name) === i)\n\t\t.map((a) => ({\n\t\t\tdisplayName: getAppDisplayName(a, allAppsFull),\n\t\t\tname: a.name,\n\t\t\ttitle: a.title,\n\t\t\ttype: a.type,\n\t\t\t...getStepNameAndId(a),\n\t\t}))\n\n\tallApps.sort((a, b) => {\n\t\t// order them by their stepId\n\t\tif (a.stepId > 0 && b.stepId > 0) return a.stepId - b.stepId\n\n\t\t// non-step apps should come after step apps\n\t\tif (a.stepId > 0) return -1\n\t\tif (b.stepId > 0) return 1\n\n\t\treturn 0\n\t})\n\n\tasync function getDiffProp() {\n\t\tif (!app1 || !app2) {\n\t\t\treturn {\n\t\t\t\tapp1: app1?.name,\n\t\t\t\tapp2: app2?.name,\n\t\t\t\tdiffCode: null,\n\t\t\t}\n\t\t}\n\t\tif (!userHasAccess) {\n\t\t\treturn {\n\t\t\t\tapp1: app1?.name,\n\t\t\t\tapp2: app2?.name,\n\t\t\t\tdiffCode: await compileMarkdownString(\n\t\t\t\t\t`<h1>Access Denied</h1><p>You must login or register for the workshop to view the diff</p>`,\n\t\t\t\t),\n\t\t\t}\n\t\t}\n\t\tconst diffCode = await getDiffCode(app1, app2, {\n\t\t\t...cacheOptions,\n\t\t\tforceFresh: searchParams.get('forceFresh') === 'diff',\n\t\t}).catch((e) => {\n\t\t\tconsole.error(e)\n\t\t\treturn null\n\t\t})\n\t\treturn {\n\t\t\tapp1: app1.name,\n\t\t\tapp2: app2.name,\n\t\t\tdiffCode,\n\t\t}\n\t}\n\n\treturn data(\n\t\t{\n\t\t\ttype: params.type as 'problem' | 'solution',\n\t\t\texerciseStepApp,\n\t\t\tallApps,\n\t\t\t// defer this promise so that we don't block the response from being sent\n\t\t\tdiscordPostsPromise: fetchDiscordPosts({ request }),\n\t\t\tplayground: playgroundApp\n\t\t\t\t? ({\n\t\t\t\t\t\ttype: 'playground',\n\t\t\t\t\t\tfullPath: playgroundApp.fullPath,\n\t\t\t\t\t\tdev: playgroundApp.dev,\n\t\t\t\t\t\ttest: playgroundApp.test,\n\t\t\t\t\t\ttitle: playgroundApp.title,\n\t\t\t\t\t\tname: playgroundApp.name,\n\t\t\t\t\t\tappName: playgroundApp.appName,\n\t\t\t\t\t\tisUpToDate: playgroundApp.isUpToDate,\n\t\t\t\t\t\tstackBlitzUrl: playgroundApp.stackBlitzUrl,\n\t\t\t\t\t\t...(await getAppRunningState(playgroundApp)),\n\t\t\t\t\t} as const)\n\t\t\t\t: null,\n\t\t\tproblem: problemApp\n\t\t\t\t? ({\n\t\t\t\t\t\ttype: 'problem',\n\t\t\t\t\t\tfullPath: problemApp.fullPath,\n\t\t\t\t\t\tdev: problemApp.dev,\n\t\t\t\t\t\ttest: problemApp.test,\n\t\t\t\t\t\ttitle: problemApp.title,\n\t\t\t\t\t\tname: problemApp.name,\n\t\t\t\t\t\tstackBlitzUrl: problemApp.stackBlitzUrl,\n\t\t\t\t\t\t...(await getAppRunningState(problemApp)),\n\t\t\t\t\t} as const)\n\t\t\t\t: null,\n\t\t\tsolution: solutionApp\n\t\t\t\t? ({\n\t\t\t\t\t\ttype: 'solution',\n\t\t\t\t\t\tfullPath: solutionApp.fullPath,\n\t\t\t\t\t\tdev: solutionApp.dev,\n\t\t\t\t\t\ttest: solutionApp.test,\n\t\t\t\t\t\ttitle: solutionApp.title,\n\t\t\t\t\t\tname: solutionApp.name,\n\t\t\t\t\t\tstackBlitzUrl: solutionApp.stackBlitzUrl,\n\t\t\t\t\t\t...(await getAppRunningState(solutionApp)),\n\t\t\t\t\t} as const)\n\t\t\t\t: null,\n\t\t\tdiff: getDiffProp(),\n\t\t} as const,\n\t\t{\n\t\t\theaders: {\n\t\t\t\t'Server-Timing': getServerTimeHeader(timings),\n\t\t\t},\n\t\t},\n\t)\n}\n\nexport const headers: HeadersFunction = ({ loaderHeaders, parentHeaders }) => {\n\tconst headers = {\n\t\t'Server-Timing': combineServerTimings(loaderHeaders, parentHeaders),\n\t}\n\treturn headers\n}\n\nconst tabs = [\n\t'playground',\n\t'problem',\n\t'solution',\n\t'tests',\n\t'diff',\n\t'chat',\n] as const\nconst isValidPreview = (s: string | null): s is (typeof tabs)[number] =>\n\tBoolean(s && tabs.includes(s as (typeof tabs)[number]))\n\nfunction withParam(\n\tsearchParams: URLSearchParams,\n\tkey: string,\n\tvalue: string | null,\n) {\n\tconst newSearchParams = new URLSearchParams(searchParams)\n\tif (value === null) {\n\t\tnewSearchParams.delete(key)\n\t} else {\n\t\tnewSearchParams.set(key, value)\n\t}\n\treturn newSearchParams\n}\n\nexport default function ExercisePartRoute() {\n\tconst data = useLoaderData<typeof loader>()\n\tconst [searchParams] = useSearchParams()\n\n\tconst preview = searchParams.get('preview')\n\tconst inBrowserBrowserRef = useRef<InBrowserBrowserRef>(null)\n\n\tconst altDown = useAltDown()\n\tconst navigate = useNavigate()\n\n\tfunction shouldHideTab(tab: (typeof tabs)[number]) {\n\t\tif (tab === 'tests') {\n\t\t\treturn (\n\t\t\t\tENV.EPICSHOP_DEPLOYED ||\n\t\t\t\t!data.playground ||\n\t\t\t\tdata.playground.test.type === 'none'\n\t\t\t)\n\t\t}\n\t\tif (tab === 'problem' || tab === 'solution') {\n\t\t\tif (data[tab]?.dev.type === 'none') return true\n\t\t\tif (ENV.EPICSHOP_DEPLOYED) {\n\t\t\t\treturn data[tab]?.dev.type !== 'browser' && !data[tab]?.stackBlitzUrl\n\t\t\t}\n\t\t}\n\t\tif (tab === 'playground' && ENV.EPICSHOP_DEPLOYED) return true\n\t\treturn false\n\t}\n\n\tconst activeTab = isValidPreview(preview)\n\t\t? preview\n\t\t: tabs.find((t) => !shouldHideTab(t))\n\n\t// when alt is held down, the diff tab should open to the full-page diff view\n\t// between the problem and solution (this is more for the instructor than the student)\n\tconst altDiffUrl = `/diff?${new URLSearchParams({\n\t\tapp1: data.problem?.name ?? '',\n\t\tapp2: data.solution?.name ?? '',\n\t})}`\n\n\tfunction handleDiffTabClick(event: React.MouseEvent<HTMLAnchorElement>) {\n\t\tif (event.altKey && !event.ctrlKey && !event.shiftKey && !event.metaKey) {\n\t\t\tevent.preventDefault()\n\t\t\tvoid navigate(altDiffUrl)\n\t\t}\n\t}\n\n\treturn (\n\t\t<Tabs.Root\n\t\t\tclassName=\"relative flex flex-col overflow-y-auto sm:col-span-1 sm:row-span-1\"\n\t\t\tvalue={activeTab}\n\t\t\t// intentionally no onValueChange here because the Link will trigger the\n\t\t\t// change.\n\t\t>\n\t\t\t<Tabs.List className=\"h-14 min-h-14 overflow-x-hidden border-b scrollbar-thin scrollbar-thumb-scrollbar\">\n\t\t\t\t{tabs.map((tab) => {\n\t\t\t\t\tconst hidden = shouldHideTab(tab)\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<Tabs.Trigger key={tab} value={tab} hidden={hidden} asChild>\n\t\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\t\tid={`${tab}-tab`}\n\t\t\t\t\t\t\t\tclassName={clsx(\n\t\t\t\t\t\t\t\t\t'clip-path-button relative h-full px-6 py-4 font-mono text-sm uppercase outline-none radix-state-active:z-10 radix-state-active:bg-foreground radix-state-active:text-background radix-state-active:hover:bg-foreground/80 radix-state-active:hover:text-background/80 radix-state-inactive:hover:bg-foreground/20 radix-state-inactive:hover:text-foreground/80 focus:bg-foreground/80 focus:text-background/80',\n\t\t\t\t\t\t\t\t\thidden ? 'hidden' : 'inline-block',\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\tpreventScrollReset\n\t\t\t\t\t\t\t\tprefetch=\"intent\"\n\t\t\t\t\t\t\t\tonClick={handleDiffTabClick}\n\t\t\t\t\t\t\t\tto={\n\t\t\t\t\t\t\t\t\ttab === 'diff' && altDown\n\t\t\t\t\t\t\t\t\t\t? altDiffUrl\n\t\t\t\t\t\t\t\t\t\t: `?${withParam(\n\t\t\t\t\t\t\t\t\t\t\t\tsearchParams,\n\t\t\t\t\t\t\t\t\t\t\t\t'preview',\n\t\t\t\t\t\t\t\t\t\t\t\ttab === 'playground' ? null : tab,\n\t\t\t\t\t\t\t\t\t\t\t)}`\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{tab}\n\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t</Tabs.Trigger>\n\t\t\t\t\t)\n\t\t\t\t})}\n\t\t\t</Tabs.List>\n\t\t\t<div className=\"relative z-10 flex min-h-96 flex-grow flex-col overflow-y-auto\">\n\t\t\t\t<Tabs.Content\n\t\t\t\t\tvalue=\"playground\"\n\t\t\t\t\tclassName=\"flex w-full flex-grow items-center justify-center self-start radix-state-inactive:hidden\"\n\t\t\t\t\tforceMount\n\t\t\t\t>\n\t\t\t\t\t<Playground\n\t\t\t\t\t\tappInfo={data.playground}\n\t\t\t\t\t\tproblemAppName={data.problem?.name}\n\t\t\t\t\t\tinBrowserBrowserRef={inBrowserBrowserRef}\n\t\t\t\t\t\tallApps={data.allApps}\n\t\t\t\t\t\tisUpToDate={data.playground?.isUpToDate ?? false}\n\t\t\t\t\t/>\n\t\t\t\t</Tabs.Content>\n\t\t\t\t<Tabs.Content\n\t\t\t\t\tvalue=\"problem\"\n\t\t\t\t\tclassName=\"flex w-full flex-grow items-center justify-center self-start radix-state-inactive:hidden\"\n\t\t\t\t\tforceMount\n\t\t\t\t>\n\t\t\t\t\t<Preview\n\t\t\t\t\t\tappInfo={data.problem}\n\t\t\t\t\t\tinBrowserBrowserRef={inBrowserBrowserRef}\n\t\t\t\t\t/>\n\t\t\t\t</Tabs.Content>\n\t\t\t\t<Tabs.Content\n\t\t\t\t\tvalue=\"solution\"\n\t\t\t\t\tclassName=\"flex w-full flex-grow items-center justify-center self-start radix-state-inactive:hidden\"\n\t\t\t\t\tforceMount\n\t\t\t\t>\n\t\t\t\t\t<Preview\n\t\t\t\t\t\tappInfo={data.solution}\n\t\t\t\t\t\tinBrowserBrowserRef={inBrowserBrowserRef}\n\t\t\t\t\t/>\n\t\t\t\t</Tabs.Content>\n\t\t\t\t<Tabs.Content\n\t\t\t\t\tvalue=\"tests\"\n\t\t\t\t\tclassName=\"flex w-full flex-grow items-start justify-center self-start overflow-hidden radix-state-inactive:hidden\"\n\t\t\t\t>\n\t\t\t\t\t<Tests\n\t\t\t\t\t\tappInfo={data.playground}\n\t\t\t\t\t\tproblemAppName={data.problem?.name}\n\t\t\t\t\t\tallApps={data.allApps}\n\t\t\t\t\t\tisUpToDate={data.playground?.isUpToDate ?? false}\n\t\t\t\t\t/>\n\t\t\t\t</Tabs.Content>\n\t\t\t\t<Tabs.Content\n\t\t\t\t\tvalue=\"diff\"\n\t\t\t\t\tclassName=\"flex h-full w-full flex-grow items-start justify-center self-start radix-state-inactive:hidden\"\n\t\t\t\t>\n\t\t\t\t\t<Diff diff={data.diff} allApps={data.allApps} />\n\t\t\t\t</Tabs.Content>\n\t\t\t\t<Tabs.Content\n\t\t\t\t\tvalue=\"chat\"\n\t\t\t\t\tclassName=\"flex h-full w-full flex-grow items-start justify-center self-start radix-state-inactive:hidden\"\n\t\t\t\t>\n\t\t\t\t\t<DiscordChat />\n\t\t\t\t</Tabs.Content>\n\t\t\t</div>\n\t\t</Tabs.Root>\n\t)\n}\n\nexport function ErrorBoundary() {\n\treturn (\n\t\t<GeneralErrorBoundary\n\t\t\tstatusHandlers={{\n\t\t\t\t404: () => <p>Sorry, we couldn't find an app here.</p>,\n\t\t\t}}\n\t\t/>\n\t)\n}\n"],"names":["ENTRY_FOCUS","EVENT_OPTIONS","GROUP_NAME","Collection","useCollection","createCollectionScope","createCollection","createRovingFocusGroupContext","createRovingFocusGroupScope","createContextScope","RovingFocusProvider","useRovingFocusContext","RovingFocusGroup","React.forwardRef","props","forwardedRef","jsx","RovingFocusGroupImpl","__scopeRovingFocusGroup","orientation","loop","dir","currentTabStopIdProp","defaultCurrentTabStopId","onCurrentTabStopIdChange","onEntryFocus","preventScrollOnEntryFocus","groupProps","ref","React.useRef","composedRefs","useComposedRefs","direction","useDirection","currentTabStopId","setCurrentTabStopId","useControllableState","isTabbingBackOut","setIsTabbingBackOut","React.useState","handleEntryFocus","useCallbackRef","getItems","isClickFocusRef","focusableItemsCount","setFocusableItemsCount","React.useEffect","node","React.useCallback","tabStopId","prevCount","Primitive","composeEventHandlers","event","isKeyboardFocus","entryFocusEvent","items","item","activeItem","currentItem","candidateNodes","focusFirst","ITEM_NAME","RovingFocusGroupItem","focusable","active","children","itemProps","autoId","useId","id","context","isCurrentTabStop","onFocusableItemAdd","onFocusableItemRemove","focusIntent","getFocusIntent","currentIndex","wrapArray","MAP_KEY_TO_FOCUS_INTENT","getDirectionAwareKey","key","candidates","preventScroll","PREVIOUSLY_FOCUSED_ELEMENT","candidate","array","startIndex","_","index","Root","Item","TABS_NAME","createTabsContext","createTabsScope","useRovingFocusGroupScope","TabsProvider","useTabsContext","Tabs","__scopeTabs","valueProp","onValueChange","defaultValue","activationMode","tabsProps","value","setValue","TAB_LIST_NAME","TabsList","listProps","rovingFocusGroupScope","RovingFocusGroup.Root","TRIGGER_NAME","TabsTrigger","disabled","triggerProps","triggerId","makeTriggerId","contentId","makeContentId","isSelected","RovingFocusGroup.Item","isAutomaticActivation","CONTENT_NAME","TabsContent","forceMount","contentProps","isMountAnimationPreventedRef","rAF","Presence","present","baseId","Root2","List","Trigger","Content","DiscordChat","jsxs","DiscordCTA","DiscordPosts","data","useLoaderData","ctaLink","useDiscordCTALink","altDown","useAltDown","useIsOnline","React.Suspense","Loading","Await","posts","post","DiscordPost","Link","e","Icon","thread","reactionsWithCounts","r","t","Emoji","i","name","url","Playground","playgroundAppInfo","inBrowserBrowserRef","problemAppName","allApps","isUpToDate","PlaygroundWindow","SimpleTooltip","showToast","Preview","SetAppToPlayground","tabs","isValidPreview","s","Boolean","includes","withParam","searchParams","newSearchParams","URLSearchParams","delete","set","_UNSAFE_withComponentProps","useSearchParams","preview","get","useRef","navigate","useNavigate","shouldHideTab","tab","ENV","EPICSHOP_DEPLOYED","playground","test","type","dev","stackBlitzUrl","activeTab","find","altDiffUrl","app1","problem","app2","solution","handleDiffTabClick","altKey","ctrlKey","shiftKey","metaKey","preventDefault","className","map","hidden","asChild","clsx","preventScrollReset","prefetch","onClick","to","appInfo","Tests","Diff","diff","ErrorBoundary","_UNSAFE_withErrorBoundaryProps","GeneralErrorBoundary","statusHandlers"],"mappings":"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","x_google_ignoreList":[0,1]}
@@ -0,0 +1,2 @@
1
+ import{w as u,f as b,L as a,F as i}from"./chunk-QMGIS6GS-CG5cA6CX.js";import{j as e}from"./jsx-runtime-EKYJJIwR.js";import{I as d}from"./misc-COGqV2fm.js";import{S as j}from"./tooltip-Cm7A1uIP.js";import{a as f}from"./progress-DKsShYpv.js";import"./index-Bp_2FjuO.js";import"./pe-DoDyGTeN.js";const $={getSitemapEntries:()=>null},T=({matches:n})=>[{title:`👷 | ${n.find(r=>r?.id==="root")?.data?.workshopTitle}`}];function g(n,t){return n.type==="unknown"&&t.type==="unknown"?0:n.type==="unknown"?-1:t.type==="unknown"?1:0}function N(n){switch(n.type){case"workshop-instructions":return"/";case"workshop-finished":return"/finished";case"instructions":return`/${n.exerciseNumber.toString().padStart(2,"0")}`;case"step":return`/${n.exerciseNumber.toString().padStart(2,"0")}/${n.stepNumber.toString().padStart(2,"0")}`;case"finished":return`/${n.exerciseNumber.toString().padStart(2,"0")}/finished`;default:return""}}const D=u(function({loaderData:t}){const r=b(),o=f(),h=r.formData?.get("intent")==="inspect",m=r.formData?.get("intent")==="stop-inspect",x={completed:"bg-blue-500",incomplete:"bg-yellow-500"};return e.jsxs("div",{className:"flex flex-col gap-4",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-lg font-bold",children:"Progress"}),o?e.jsx("ul",{className:"flex max-h-72 flex-col gap-2 overflow-y-scroll border-2 p-8 scrollbar-thin scrollbar-thumb-scrollbar",children:o.sort(g).map(s=>{const l=s.epicCompletedAt?"completed":"incomplete",c=[s.epicLessonSlug,s.epicCompletedAt?`(${s.epicCompletedAt})`:null].filter(Boolean).join(" ");return e.jsxs("li",{className:"flex items-center gap-2",children:[e.jsx("span",{className:`h-3 w-3 rounded-full ${x[l]}`,title:l}),s.type==="unknown"?e.jsxs("span",{className:"flex items-center gap-1",children:[c,e.jsx("span",{className:"text-red-500",children:e.jsx(j,{content:"This video is in the workshop on EpicWeb.dev, but not in the local workshop.",children:e.jsx(d,{name:"Close"})})})]}):e.jsx(a,{to:N(s),children:c}),e.jsx(a,{to:s.epicLessonUrl,children:e.jsx(d,{name:"ExternalLink"})})]},s.epicLessonSlug)})}):e.jsx("p",{children:"No progress data"})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-lg font-bold",children:"Commands"}),e.jsxs("ul",{className:"max-h-48 overflow-y-scroll border-2 p-8 scrollbar-thin scrollbar-thumb-scrollbar",children:[e.jsx("li",{children:e.jsx(i,{method:"POST",children:e.jsx("button",{name:"intent",value:"clear-caches",children:"Clear local caches"})})}),e.jsx("li",{children:e.jsx(i,{method:"POST",children:e.jsx("button",{name:"intent",value:"clear-data",children:"Clear all local data (including auth data)"})})}),e.jsx("li",{children:t.inspectorRunning?e.jsx(i,{method:"POST",children:e.jsx("button",{name:"intent",value:"stop-inspect",children:h?"Stopping inspector...":"Stop inspector"})}):e.jsx(i,{method:"POST",children:e.jsx("button",{name:"intent",value:"inspect",children:m?"Starting inspector...":"Start inspector"})})})]})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-lg font-bold",children:"Apps"}),e.jsx("ul",{className:"max-h-48 list-none overflow-y-scroll border-2 p-8 scrollbar-thin scrollbar-thumb-scrollbar",children:t.apps.map(s=>e.jsxs("li",{className:"flex items-center gap-2 py-1",children:[t.processes[s.name]?e.jsx(p,{status:"running"}):e.jsx(p,{status:"stopped"}),s.name]},s.name))})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-lg font-bold",children:"Processes"}),e.jsx("ul",{className:"overflow-y-scroll border-2 p-8 scrollbar-thin scrollbar-thumb-scrollbar",children:Object.entries(t.processes).map(([s,l])=>e.jsx("li",{children:e.jsxs("span",{children:[s," - Port: ",l.port," - PID ",l.pid," -"," ",l.color]})},s))})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-lg font-bold",children:"Test Processes"}),e.jsx("ul",{className:"overflow-y-scroll border-2 p-8 scrollbar-thin scrollbar-thumb-scrollbar",children:Object.entries(t.testProcesses).map(([s,l])=>e.jsx("li",{children:e.jsxs("span",{children:[s," - PID ",l.pid," - Exit code: ",l.exitCode]})},s))})]})]})});function p({status:n}){const t={running:{pinger:"bg-green-400",circle:"bg-green-500"},starting:{pinger:"bg-sky-400",circle:"bg-sky-500"},stopped:{circle:"bg-gray-500"},taken:{pinger:"bg-red-400",circle:"bg-red-500"}}[n];return e.jsxs("span",{className:"relative flex h-3 w-3",children:[t.pinger?e.jsx("span",{className:`absolute inline-flex h-full w-full animate-ping rounded-full ${t.pinger} opacity-75`}):null,e.jsx("span",{className:`relative inline-flex h-3 w-3 rounded-full ${t.circle}`})]})}export{D as default,$ as handle,T as meta};
2
+ //# sourceMappingURL=index-DxbpRM0V.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-DxbpRM0V.js","sources":["../../../app/routes/admin+/index.tsx"],"sourcesContent":["import { getApps } from '@epic-web/workshop-utils/apps.server'\nimport { getProcesses } from '@epic-web/workshop-utils/process-manager.server'\nimport {\n\tgetServerTimeHeader,\n\tmakeTimings,\n} from '@epic-web/workshop-utils/timing.server'\nimport { type SEOHandle } from '@nasa-gcn/remix-seo'\nimport { data, Form, Link, useNavigation } from 'react-router'\nimport { Icon } from '#app/components/icons.tsx'\nimport { SimpleTooltip } from '#app/components/ui/tooltip.tsx'\nimport { type RootLoaderData } from '#app/root.tsx'\nimport {\n\tuseEpicProgress,\n\ttype SerializedProgress,\n} from '#app/routes/progress.tsx'\nimport { ensureUndeployed } from '#app/utils/misc.tsx'\nimport { type Route } from './+types/index.tsx'\nimport {\n\tclearCaches,\n\tclearData,\n\tstartInspector,\n\tstopInspector,\n} from './admin-utils.server.tsx'\n\ndeclare global {\n\tvar __inspector_open__: boolean | undefined\n}\n\nexport const handle: SEOHandle = {\n\tgetSitemapEntries: () => null,\n}\n\nexport const meta: Route.MetaFunction = ({ matches }) => {\n\tconst rootData = matches.find((m) => m?.id === 'root')?.data as RootLoaderData\n\treturn [{ title: `👷 | ${rootData?.workshopTitle}` }]\n}\n\nexport async function loader({ request }: Route.LoaderArgs) {\n\tensureUndeployed()\n\tconst timings = makeTimings('adminLoader')\n\tconst apps = (await getApps({ request, timings })).filter(\n\t\t(a, i, ar) => ar.findIndex((b) => a.name === b.name) === i,\n\t)\n\tconst processes: Record<\n\t\tstring,\n\t\t{ port: number; pid?: number; color: string }\n\t> = {}\n\tconst testProcesses: Record<\n\t\tstring,\n\t\t{ pid?: number; exitCode?: number | null }\n\t> = {}\n\tfor (const [\n\t\tname,\n\t\t{ port, process, color },\n\t] of getProcesses().devProcesses.entries()) {\n\t\tprocesses[name] = { port, pid: process.pid, color }\n\t}\n\n\tfor (const [\n\t\tname,\n\t\t{ process, exitCode },\n\t] of getProcesses().testProcesses.entries()) {\n\t\ttestProcesses[name] = { pid: process?.pid, exitCode }\n\t}\n\treturn data(\n\t\t{\n\t\t\tapps,\n\t\t\tprocesses,\n\t\t\ttestProcesses,\n\t\t\tinspectorRunning: global.__inspector_open__,\n\t\t},\n\t\t{\n\t\t\theaders: {\n\t\t\t\t'Server-Timing': getServerTimeHeader(timings),\n\t\t\t},\n\t\t},\n\t)\n}\n\nexport async function action({ request }: Route.ActionArgs) {\n\tensureUndeployed()\n\tconst formData = await request.formData()\n\tconst intent = formData.get('intent')\n\tswitch (intent) {\n\t\tcase 'clear-data': {\n\t\t\tawait clearData()\n\t\t\treturn { success: true }\n\t\t}\n\t\tcase 'clear-caches': {\n\t\t\tawait clearCaches()\n\t\t\treturn { success: true }\n\t\t}\n\t\tcase 'inspect': {\n\t\t\tawait startInspector()\n\t\t\treturn { success: true }\n\t\t}\n\t\tcase 'stop-inspect': {\n\t\t\tawait stopInspector()\n\t\t\treturn { success: true }\n\t\t}\n\t\tdefault: {\n\t\t\tthrow new Error(`Unknown intent: ${intent}`)\n\t\t}\n\t}\n}\n\nfunction sortProgress(a: SerializedProgress, b: SerializedProgress) {\n\treturn a.type === 'unknown' && b.type === 'unknown'\n\t\t? 0\n\t\t: a.type === 'unknown'\n\t\t\t? -1\n\t\t\t: b.type === 'unknown'\n\t\t\t\t? 1\n\t\t\t\t: 0\n}\n\nfunction linkProgress(progress: SerializedProgress) {\n\tswitch (progress.type) {\n\t\tcase 'workshop-instructions':\n\t\t\treturn '/'\n\t\tcase 'workshop-finished':\n\t\t\treturn '/finished'\n\t\tcase 'instructions':\n\t\t\treturn `/${progress.exerciseNumber.toString().padStart(2, '0')}`\n\t\tcase 'step':\n\t\t\treturn `/${progress.exerciseNumber\n\t\t\t\t.toString()\n\t\t\t\t.padStart(2, '0')}/${progress.stepNumber.toString().padStart(2, '0')}`\n\t\tcase 'finished':\n\t\t\treturn `/${progress.exerciseNumber.toString().padStart(2, '0')}/finished`\n\t\tdefault:\n\t\t\treturn ''\n\t}\n}\n\nexport default function AdminLayout({\n\tloaderData: data,\n}: Route.ComponentProps) {\n\tconst navigation = useNavigation()\n\tconst epicProgress = useEpicProgress()\n\n\tconst isStartingInspector = navigation.formData?.get('intent') === 'inspect'\n\tconst isStoppingInspector =\n\t\tnavigation.formData?.get('intent') === 'stop-inspect'\n\n\tconst progressStatus = {\n\t\tcompleted: 'bg-blue-500',\n\t\tincomplete: 'bg-yellow-500',\n\t}\n\n\treturn (\n\t\t<div className=\"flex flex-col gap-4\">\n\t\t\t<div>\n\t\t\t\t<h2 className=\"text-lg font-bold\">Progress</h2>\n\t\t\t\t{epicProgress ? (\n\t\t\t\t\t<ul className=\"flex max-h-72 flex-col gap-2 overflow-y-scroll border-2 p-8 scrollbar-thin scrollbar-thumb-scrollbar\">\n\t\t\t\t\t\t{epicProgress.sort(sortProgress).map((progress) => {\n\t\t\t\t\t\t\tconst status = progress.epicCompletedAt\n\t\t\t\t\t\t\t\t? 'completed'\n\t\t\t\t\t\t\t\t: 'incomplete'\n\t\t\t\t\t\t\tconst label = [\n\t\t\t\t\t\t\t\tprogress.epicLessonSlug,\n\t\t\t\t\t\t\t\tprogress.epicCompletedAt\n\t\t\t\t\t\t\t\t\t? `(${progress.epicCompletedAt})`\n\t\t\t\t\t\t\t\t\t: null,\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t\t\t\t.join(' ')\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<li\n\t\t\t\t\t\t\t\t\tkey={progress.epicLessonSlug}\n\t\t\t\t\t\t\t\t\tclassName=\"flex items-center gap-2\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\tclassName={`h-3 w-3 rounded-full ${progressStatus[status]}`}\n\t\t\t\t\t\t\t\t\t\ttitle={status}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t{progress.type === 'unknown' ? (\n\t\t\t\t\t\t\t\t\t\t<span className=\"flex items-center gap-1\">\n\t\t\t\t\t\t\t\t\t\t\t{label}\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-red-500\">\n\t\t\t\t\t\t\t\t\t\t\t\t<SimpleTooltip content=\"This video is in the workshop on EpicWeb.dev, but not in the local workshop.\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Icon name=\"Close\" />\n\t\t\t\t\t\t\t\t\t\t\t\t</SimpleTooltip>\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t<Link to={linkProgress(progress)}>{label}</Link>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t<Link to={progress.epicLessonUrl}>\n\t\t\t\t\t\t\t\t\t\t<Icon name=\"ExternalLink\"></Icon>\n\t\t\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t})}\n\t\t\t\t\t</ul>\n\t\t\t\t) : (\n\t\t\t\t\t<p>No progress data</p>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\t<h2 className=\"text-lg font-bold\">Commands</h2>\n\t\t\t\t<ul className=\"max-h-48 overflow-y-scroll border-2 p-8 scrollbar-thin scrollbar-thumb-scrollbar\">\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<Form method=\"POST\">\n\t\t\t\t\t\t\t<button name=\"intent\" value=\"clear-caches\">\n\t\t\t\t\t\t\t\tClear local caches\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</Form>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<Form method=\"POST\">\n\t\t\t\t\t\t\t<button name=\"intent\" value=\"clear-data\">\n\t\t\t\t\t\t\t\tClear all local data (including auth data)\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</Form>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t{data.inspectorRunning ? (\n\t\t\t\t\t\t\t<Form method=\"POST\">\n\t\t\t\t\t\t\t\t<button name=\"intent\" value=\"stop-inspect\">\n\t\t\t\t\t\t\t\t\t{isStartingInspector\n\t\t\t\t\t\t\t\t\t\t? 'Stopping inspector...'\n\t\t\t\t\t\t\t\t\t\t: 'Stop inspector'}\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t</Form>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<Form method=\"POST\">\n\t\t\t\t\t\t\t\t<button name=\"intent\" value=\"inspect\">\n\t\t\t\t\t\t\t\t\t{isStoppingInspector\n\t\t\t\t\t\t\t\t\t\t? 'Starting inspector...'\n\t\t\t\t\t\t\t\t\t\t: 'Start inspector'}\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t</Form>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\t<h2 className=\"text-lg font-bold\">Apps</h2>\n\t\t\t\t<ul className=\"max-h-48 list-none overflow-y-scroll border-2 p-8 scrollbar-thin scrollbar-thumb-scrollbar\">\n\t\t\t\t\t{data.apps.map((app) => (\n\t\t\t\t\t\t<li key={app.name} className=\"flex items-center gap-2 py-1\">\n\t\t\t\t\t\t\t{data.processes[app.name] ? (\n\t\t\t\t\t\t\t\t<Pinger status=\"running\" />\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<Pinger status=\"stopped\" />\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{app.name}\n\t\t\t\t\t\t</li>\n\t\t\t\t\t))}\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\t<h2 className=\"text-lg font-bold\">Processes</h2>\n\t\t\t\t<ul className=\"overflow-y-scroll border-2 p-8 scrollbar-thin scrollbar-thumb-scrollbar\">\n\t\t\t\t\t{Object.entries(data.processes).map(([key, process]) => (\n\t\t\t\t\t\t<li key={key}>\n\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t{key} - Port: {process.port} - PID {process.pid} -{' '}\n\t\t\t\t\t\t\t\t{process.color}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t))}\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\t<h2 className=\"text-lg font-bold\">Test Processes</h2>\n\t\t\t\t<ul className=\"overflow-y-scroll border-2 p-8 scrollbar-thin scrollbar-thumb-scrollbar\">\n\t\t\t\t\t{Object.entries(data.testProcesses).map(([key, process]) => (\n\t\t\t\t\t\t<li key={key}>\n\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t{key} - PID {process.pid} - Exit code: {process.exitCode}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t))}\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n\nfunction Pinger({\n\tstatus,\n}: {\n\tstatus: 'running' | 'starting' | 'stopped' | 'taken'\n}) {\n\tconst colors = {\n\t\trunning: {\n\t\t\tpinger: 'bg-green-400',\n\t\t\tcircle: 'bg-green-500',\n\t\t},\n\t\tstarting: {\n\t\t\tpinger: 'bg-sky-400',\n\t\t\tcircle: 'bg-sky-500',\n\t\t},\n\t\tstopped: {\n\t\t\tcircle: 'bg-gray-500',\n\t\t},\n\t\ttaken: {\n\t\t\tpinger: 'bg-red-400',\n\t\t\tcircle: 'bg-red-500',\n\t\t},\n\t}[status]\n\treturn (\n\t\t<span className=\"relative flex h-3 w-3\">\n\t\t\t{colors.pinger ? (\n\t\t\t\t<span\n\t\t\t\t\tclassName={`absolute inline-flex h-full w-full animate-ping rounded-full ${colors.pinger} opacity-75`}\n\t\t\t\t/>\n\t\t\t) : null}\n\t\t\t<span\n\t\t\t\tclassName={`relative inline-flex h-3 w-3 rounded-full ${colors.circle}`}\n\t\t\t/>\n\t\t</span>\n\t)\n}\n"],"names":["handle","getSitemapEntries","meta","matches","title","find","m","id","data","workshopTitle","sortProgress","a","b","type","linkProgress","progress","exerciseNumber","toString","padStart","stepNumber","index","_UNSAFE_withComponentProps","loaderData","navigation","useNavigation","epicProgress","useEpicProgress","isStartingInspector","formData","get","isStoppingInspector","progressStatus","completed","incomplete","jsxs","className","children","jsx","sort","map","status","epicCompletedAt","label","epicLessonSlug","filter","Boolean","join","SimpleTooltip","content","Icon","name","Link","to","epicLessonUrl","Form","method","value","inspectorRunning","apps","app","processes","Pinger","Object","entries","key","process","port","pid","color","testProcesses","exitCode","colors","running","pinger","circle","starting","stopped","taken"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+
2
+ //# sourceMappingURL=index-K6Dvbx-E.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-K6Dvbx-E.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}