@epic-web/workshop-app 4.6.5 → 4.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (811) hide show
  1. package/build/client/assets/{_-COWH0sBh.js → _-Bd2gNcck.js} +2 -2
  2. package/build/client/assets/{_-COWH0sBh.js.map → _-Bd2gNcck.js.map} +1 -1
  3. package/build/client/assets/{_exerciseNumber-D5XVFEL6.js → _exerciseNumber-CFOo2dQj.js} +2 -2
  4. package/build/client/assets/{_exerciseNumber-D5XVFEL6.js.map → _exerciseNumber-CFOo2dQj.js.map} +1 -1
  5. package/build/client/assets/{_exerciseNumber_._stepNumber-C37pli7_.js → _exerciseNumber_._stepNumber-DCbWNWpZ.js} +2 -2
  6. package/build/client/assets/{_exerciseNumber_._stepNumber-C37pli7_.js.map → _exerciseNumber_._stepNumber-DCbWNWpZ.js.map} +1 -1
  7. package/build/client/assets/_exerciseNumber_.finished-P7xMAtl1.js +2 -0
  8. package/build/client/assets/_exerciseNumber_.finished-P7xMAtl1.js.map +1 -0
  9. package/build/client/assets/_layout-Bdd3mpVx.js +2 -0
  10. package/build/client/assets/_layout-Bdd3mpVx.js.map +1 -0
  11. package/build/client/assets/_layout-DHBLG7Ti.js +6 -0
  12. package/build/client/assets/_layout-DHBLG7Ti.js.map +1 -0
  13. package/build/client/assets/_layout-DaZNLfOL.js +2 -0
  14. package/build/client/assets/{_layout-BR-Qyofe.js.map → _layout-DaZNLfOL.js.map} +1 -1
  15. package/build/client/assets/{_layout-D0zbQZjf.js → _layout-rEQoj43V.js} +2 -2
  16. package/build/client/assets/{_layout-D0zbQZjf.js.map → _layout-rEQoj43V.js.map} +1 -1
  17. package/build/client/assets/{account-DesvwOeg.js → account-CnLkZd_O.js} +2 -2
  18. package/build/client/assets/{account-DesvwOeg.js.map → account-CnLkZd_O.js.map} +1 -1
  19. package/build/client/assets/{button-BfWwrI9B.js → button-CyZl24U2.js} +2 -2
  20. package/build/client/assets/{button-BfWwrI9B.js.map → button-CyZl24U2.js.map} +1 -1
  21. package/build/client/assets/{client-hints-BKxdo5Js.js → client-hints-BE5mB4r0.js} +2 -2
  22. package/build/client/assets/{client-hints-BKxdo5Js.js.map → client-hints-BE5mB4r0.js.map} +1 -1
  23. package/build/client/assets/components-BMzmvxYw.js +166 -0
  24. package/build/client/assets/components-BMzmvxYw.js.map +1 -0
  25. package/build/client/assets/diff-P5f7-8E4.js +2 -0
  26. package/build/client/assets/diff-P5f7-8E4.js.map +1 -0
  27. package/build/client/assets/diff-PfwTHr6-.js +2 -0
  28. package/build/client/assets/{diff-KDzcgGYL.js.map → diff-PfwTHr6-.js.map} +1 -1
  29. package/build/client/assets/{discord-0kv66Q6F.js → discord-COPE8EOZ.js} +2 -2
  30. package/build/client/assets/{discord-0kv66Q6F.js.map → discord-COPE8EOZ.js.map} +1 -1
  31. package/build/client/assets/discord-DIog7bBO.js +2 -0
  32. package/build/client/assets/discord-DIog7bBO.js.map +1 -0
  33. package/build/client/assets/entry.client-B0vV2fsa.js +43 -0
  34. package/build/client/assets/entry.client-B0vV2fsa.js.map +1 -0
  35. package/build/client/assets/{epic-video-BwtXsHGU.js → epic-video-CYnG2ziQ.js} +128 -128
  36. package/build/client/assets/epic-video-CYnG2ziQ.js.map +1 -0
  37. package/build/client/assets/{error-boundary-Bcric_4t.js → error-boundary-DxfVshQ5.js} +2 -2
  38. package/build/client/assets/{error-boundary-Bcric_4t.js.map → error-boundary-DxfVshQ5.js.map} +1 -1
  39. package/build/client/assets/finished-DP5ynR5u.js +2 -0
  40. package/build/client/assets/finished-DP5ynR5u.js.map +1 -0
  41. package/build/client/assets/index-4E9_Sx3m.js +42 -0
  42. package/build/client/assets/index-4E9_Sx3m.js.map +1 -0
  43. package/build/client/assets/{index-Bg9MMnnf.js → index-90bzTYUX.js} +2 -2
  44. package/build/client/assets/index-90bzTYUX.js.map +1 -0
  45. package/build/client/assets/{index-BQRtqn3g.js → index-BXefr1BB.js} +2 -2
  46. package/build/client/assets/{index-BQRtqn3g.js.map → index-BXefr1BB.js.map} +1 -1
  47. package/build/client/assets/index-Czg1ruVn.js +37 -0
  48. package/build/client/assets/index-Czg1ruVn.js.map +1 -0
  49. package/build/client/assets/{index-9nNr0Zqr.js → index-D6ukHE4T.js} +2 -2
  50. package/build/client/assets/{index-9nNr0Zqr.js.map → index-D6ukHE4T.js.map} +1 -1
  51. package/build/client/assets/index-Doi37489.js +3 -0
  52. package/build/client/assets/index-Doi37489.js.map +1 -0
  53. package/build/client/assets/{loading-C9f_vBoM.js → loading-CNWJVymJ.js} +2 -2
  54. package/build/client/assets/{loading-C9f_vBoM.js.map → loading-CNWJVymJ.js.map} +1 -1
  55. package/build/client/assets/{login-D8zyjBAb.js → login-DxG854vQ.js} +2 -2
  56. package/build/client/assets/{login-D8zyjBAb.js.map → login-DxG854vQ.js.map} +1 -1
  57. package/build/client/assets/manifest-a1fde59b.js +1 -0
  58. package/build/client/assets/mdx-CR7Me1v_.js +2 -0
  59. package/build/client/assets/{mdx-BYvGbvEr.js.map → mdx-CR7Me1v_.js.map} +1 -1
  60. package/build/client/assets/misc-CypjEQkt.js +2 -0
  61. package/build/client/assets/misc-CypjEQkt.js.map +1 -0
  62. package/build/client/assets/{nav-chevrons-DOYtx9XE.js → nav-chevrons-BYKwyIgG.js} +2 -2
  63. package/build/client/assets/{nav-chevrons-DOYtx9XE.js.map → nav-chevrons-BYKwyIgG.js.map} +1 -1
  64. package/build/client/assets/{onboarding-euWyXpCL.js → onboarding-b9lcdh4n.js} +2 -2
  65. package/build/client/assets/{onboarding-euWyXpCL.js.map → onboarding-b9lcdh4n.js.map} +1 -1
  66. package/build/client/assets/{presence-BJPzwbUy.js → presence-DXXVJbaH.js} +2 -2
  67. package/build/client/assets/{presence-BJPzwbUy.js.map → presence-DXXVJbaH.js.map} +1 -1
  68. package/build/client/assets/progress-B_mReZVE.js +2 -0
  69. package/build/client/assets/progress-B_mReZVE.js.map +1 -0
  70. package/build/client/assets/{progress-bar-7LK87ZMh.js → progress-bar-DCrt7X4t.js} +2 -2
  71. package/build/client/assets/{progress-bar-7LK87ZMh.js.map → progress-bar-DCrt7X4t.js.map} +1 -1
  72. package/build/client/assets/{request-info-Dyls4H67.js → request-info-CUT0ULYN.js} +2 -2
  73. package/build/client/assets/{request-info-Dyls4H67.js.map → request-info-CUT0ULYN.js.map} +1 -1
  74. package/build/client/assets/{root-BXq0yevS.js → root-bgHbi7rA.js} +4 -4
  75. package/build/client/assets/root-bgHbi7rA.js.map +1 -0
  76. package/build/client/assets/{seo-CHrqghsC.js → seo-Bu3_n5my.js} +2 -2
  77. package/build/client/assets/{seo-CHrqghsC.js.map → seo-Bu3_n5my.js.map} +1 -1
  78. package/build/client/assets/{support-DUAHYT3r.js → support-DrY-qRGh.js} +2 -2
  79. package/build/client/assets/{support-DUAHYT3r.js.map → support-DrY-qRGh.js.map} +1 -1
  80. package/build/client/assets/tailwind-D2vjZZFL.css +1 -0
  81. package/build/client/assets/tooltip-CfmIzAYi.js +2 -0
  82. package/build/client/assets/tooltip-CfmIzAYi.js.map +1 -0
  83. package/build/client/assets/{use-event-source-aW6X9lN1.js → use-event-source-ySol3hbz.js} +2 -2
  84. package/build/client/assets/{use-event-source-aW6X9lN1.js.map → use-event-source-ySol3hbz.js.map} +1 -1
  85. package/build/client/assets/{user-73ocDYRe.js → user-C4QTtQw5.js} +2 -2
  86. package/build/client/assets/{user-73ocDYRe.js.map → user-C4QTtQw5.js.map} +1 -1
  87. package/build/server/index.js +850 -616
  88. package/build/server/index.js.map +1 -1
  89. package/node_modules/@babel/runtime/helpers/esm/wrapAsyncGenerator.js +65 -3
  90. package/node_modules/@babel/runtime/helpers/wrapAsyncGenerator.js +65 -3
  91. package/node_modules/@babel/runtime/package.json +1 -28
  92. package/node_modules/@conform-to/dom/dom.d.ts +17 -5
  93. package/node_modules/@conform-to/dom/form.d.ts +221 -122
  94. package/node_modules/@conform-to/dom/index.d.ts +24 -2
  95. package/node_modules/@conform-to/dom/intent.d.ts +92 -60
  96. package/node_modules/@conform-to/dom/package.json +1 -1
  97. package/node_modules/@conform-to/dom/parse.d.ts +47 -27
  98. package/node_modules/@conform-to/dom/types.d.ts +17 -14
  99. package/node_modules/@conform-to/dom/util.d.ts +4 -1
  100. package/node_modules/@conform-to/react/context.d.ts +187 -59
  101. package/node_modules/@conform-to/react/context.js +3 -5
  102. package/node_modules/@conform-to/react/context.mjs +4 -6
  103. package/node_modules/@conform-to/react/experimental.d.ts +0 -0
  104. package/node_modules/@conform-to/react/hooks.d.ts +53 -24
  105. package/node_modules/@conform-to/react/index.d.ts +28 -4
  106. package/node_modules/@conform-to/react/integrations.js +14 -1
  107. package/node_modules/@conform-to/react/integrations.mjs +14 -1
  108. package/node_modules/@conform-to/react/package.json +2 -2
  109. package/node_modules/@conform-to/zod/coercion.d.ts +14 -4
  110. package/node_modules/@conform-to/zod/constraint.d.ts +3 -1
  111. package/node_modules/@conform-to/zod/package.json +2 -2
  112. package/node_modules/@conform-to/zod/parse.d.ts +43 -25
  113. package/node_modules/@floating-ui/core/dist/floating-ui.core.browser.min.mjs +1 -1
  114. package/node_modules/@floating-ui/core/dist/floating-ui.core.browser.mjs +14 -3
  115. package/node_modules/@floating-ui/core/dist/floating-ui.core.d.mts +51 -51
  116. package/node_modules/@floating-ui/core/dist/floating-ui.core.d.ts +51 -51
  117. package/node_modules/@floating-ui/core/dist/floating-ui.core.esm.js +14 -3
  118. package/node_modules/@floating-ui/core/dist/floating-ui.core.mjs +14 -3
  119. package/node_modules/@floating-ui/core/dist/floating-ui.core.umd.js +14 -3
  120. package/node_modules/@floating-ui/core/dist/floating-ui.core.umd.min.js +1 -1
  121. package/node_modules/@floating-ui/core/package.json +2 -2
  122. package/node_modules/@floating-ui/dom/dist/floating-ui.dom.browser.min.mjs +1 -1
  123. package/node_modules/@floating-ui/dom/dist/floating-ui.dom.browser.mjs +12 -11
  124. package/node_modules/@floating-ui/dom/dist/floating-ui.dom.d.mts +11 -8
  125. package/node_modules/@floating-ui/dom/dist/floating-ui.dom.d.ts +11 -8
  126. package/node_modules/@floating-ui/dom/dist/floating-ui.dom.esm.js +1 -12
  127. package/node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs +1 -12
  128. package/node_modules/@floating-ui/dom/dist/floating-ui.dom.umd.js +12 -11
  129. package/node_modules/@floating-ui/dom/dist/floating-ui.dom.umd.min.js +1 -1
  130. package/node_modules/@floating-ui/dom/package.json +2 -2
  131. package/node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.d.mts +12 -4
  132. package/node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.d.ts +12 -4
  133. package/node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.esm.js +1 -0
  134. package/node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.mjs +1 -0
  135. package/node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.umd.js +1 -0
  136. package/node_modules/@floating-ui/react-dom/package.json +1 -1
  137. package/node_modules/@floating-ui/utils/dist/floating-ui.utils.d.mts +11 -6
  138. package/node_modules/@floating-ui/utils/dist/floating-ui.utils.d.ts +11 -6
  139. package/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.d.mts +2 -0
  140. package/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.d.ts +2 -0
  141. package/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.esm.js +13 -1
  142. package/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs +13 -1
  143. package/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.umd.js +13 -0
  144. package/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.umd.min.js +1 -1
  145. package/node_modules/@floating-ui/utils/dom/floating-ui.utils.dom.d.ts +2 -0
  146. package/node_modules/@floating-ui/utils/dom/floating-ui.utils.dom.esm.js +13 -1
  147. package/node_modules/@floating-ui/utils/dom/floating-ui.utils.dom.umd.js +13 -0
  148. package/node_modules/@floating-ui/utils/package.json +1 -1
  149. package/node_modules/@radix-ui/number/dist/index.d.mts +2 -2
  150. package/node_modules/@radix-ui/number/dist/index.d.ts +2 -2
  151. package/node_modules/@radix-ui/number/dist/index.js +28 -10
  152. package/node_modules/@radix-ui/number/dist/index.js.map +7 -1
  153. package/node_modules/@radix-ui/number/dist/index.mjs +6 -7
  154. package/node_modules/@radix-ui/number/dist/index.mjs.map +7 -1
  155. package/node_modules/@radix-ui/number/package.json +1 -4
  156. package/node_modules/@radix-ui/primitive/dist/index.d.mts +2 -2
  157. package/node_modules/@radix-ui/primitive/dist/index.d.ts +2 -2
  158. package/node_modules/@radix-ui/primitive/dist/index.js +33 -13
  159. package/node_modules/@radix-ui/primitive/dist/index.js.map +7 -1
  160. package/node_modules/@radix-ui/primitive/dist/index.mjs +11 -10
  161. package/node_modules/@radix-ui/primitive/dist/index.mjs.map +7 -1
  162. package/node_modules/@radix-ui/primitive/package.json +1 -4
  163. package/node_modules/@radix-ui/react-accordion/dist/index.d.mts +40 -28
  164. package/node_modules/@radix-ui/react-accordion/dist/index.d.ts +40 -28
  165. package/node_modules/@radix-ui/react-accordion/dist/index.js +324 -316
  166. package/node_modules/@radix-ui/react-accordion/dist/index.js.map +7 -1
  167. package/node_modules/@radix-ui/react-accordion/dist/index.mjs +293 -300
  168. package/node_modules/@radix-ui/react-accordion/dist/index.mjs.map +7 -1
  169. package/node_modules/@radix-ui/react-accordion/package.json +12 -13
  170. package/node_modules/@radix-ui/react-arrow/dist/index.d.mts +8 -8
  171. package/node_modules/@radix-ui/react-arrow/dist/index.d.ts +8 -8
  172. package/node_modules/@radix-ui/react-arrow/dist/index.js +57 -37
  173. package/node_modules/@radix-ui/react-arrow/dist/index.js.map +7 -1
  174. package/node_modules/@radix-ui/react-arrow/dist/index.mjs +25 -30
  175. package/node_modules/@radix-ui/react-arrow/dist/index.mjs.map +7 -1
  176. package/node_modules/@radix-ui/react-arrow/package.json +4 -5
  177. package/node_modules/@radix-ui/react-collapsible/dist/index.d.mts +27 -16
  178. package/node_modules/@radix-ui/react-collapsible/dist/index.d.ts +27 -16
  179. package/node_modules/@radix-ui/react-collapsible/dist/index.js +176 -167
  180. package/node_modules/@radix-ui/react-collapsible/dist/index.js.map +7 -1
  181. package/node_modules/@radix-ui/react-collapsible/dist/index.mjs +143 -153
  182. package/node_modules/@radix-ui/react-collapsible/dist/index.mjs.map +7 -1
  183. package/node_modules/@radix-ui/react-collapsible/package.json +11 -12
  184. package/node_modules/@radix-ui/react-collection/dist/index.d.mts +27 -15
  185. package/node_modules/@radix-ui/react-collection/dist/index.d.ts +27 -15
  186. package/node_modules/@radix-ui/react-collection/dist/index.js +99 -112
  187. package/node_modules/@radix-ui/react-collection/dist/index.js.map +7 -1
  188. package/node_modules/@radix-ui/react-collection/dist/index.mjs +68 -106
  189. package/node_modules/@radix-ui/react-collection/dist/index.mjs.map +7 -1
  190. package/node_modules/@radix-ui/react-collection/package.json +7 -8
  191. package/node_modules/@radix-ui/react-compose-refs/dist/index.d.mts +5 -4
  192. package/node_modules/@radix-ui/react-compose-refs/dist/index.d.ts +5 -4
  193. package/node_modules/@radix-ui/react-compose-refs/dist/index.js +47 -30
  194. package/node_modules/@radix-ui/react-compose-refs/dist/index.js.map +7 -1
  195. package/node_modules/@radix-ui/react-compose-refs/dist/index.mjs +16 -27
  196. package/node_modules/@radix-ui/react-compose-refs/dist/index.mjs.map +7 -1
  197. package/node_modules/@radix-ui/react-compose-refs/package.json +2 -5
  198. package/node_modules/@radix-ui/react-context/dist/index.d.mts +10 -8
  199. package/node_modules/@radix-ui/react-context/dist/index.d.ts +10 -8
  200. package/node_modules/@radix-ui/react-context/dist/index.js +104 -123
  201. package/node_modules/@radix-ui/react-context/dist/index.js.map +7 -1
  202. package/node_modules/@radix-ui/react-context/dist/index.mjs +73 -120
  203. package/node_modules/@radix-ui/react-context/dist/index.mjs.map +7 -1
  204. package/node_modules/@radix-ui/react-context/package.json +2 -5
  205. package/node_modules/@radix-ui/react-direction/dist/index.d.mts +6 -5
  206. package/node_modules/@radix-ui/react-direction/dist/index.d.ts +6 -5
  207. package/node_modules/@radix-ui/react-direction/dist/index.js +47 -24
  208. package/node_modules/@radix-ui/react-direction/dist/index.js.map +7 -1
  209. package/node_modules/@radix-ui/react-direction/dist/index.mjs +16 -20
  210. package/node_modules/@radix-ui/react-direction/dist/index.mjs.map +7 -1
  211. package/node_modules/@radix-ui/react-direction/package.json +2 -5
  212. package/node_modules/@radix-ui/react-dismissable-layer/dist/index.d.mts +10 -10
  213. package/node_modules/@radix-ui/react-dismissable-layer/dist/index.d.ts +10 -10
  214. package/node_modules/@radix-ui/react-dismissable-layer/dist/index.js +230 -270
  215. package/node_modules/@radix-ui/react-dismissable-layer/dist/index.js.map +7 -1
  216. package/node_modules/@radix-ui/react-dismissable-layer/dist/index.mjs +199 -261
  217. package/node_modules/@radix-ui/react-dismissable-layer/dist/index.mjs.map +7 -1
  218. package/node_modules/@radix-ui/react-dismissable-layer/package.json +9 -10
  219. package/node_modules/@radix-ui/react-focus-guards/dist/index.d.mts +4 -4
  220. package/node_modules/@radix-ui/react-focus-guards/dist/index.d.ts +4 -4
  221. package/node_modules/@radix-ui/react-focus-guards/dist/index.js +63 -39
  222. package/node_modules/@radix-ui/react-focus-guards/dist/index.js.map +7 -1
  223. package/node_modules/@radix-ui/react-focus-guards/dist/index.mjs +32 -34
  224. package/node_modules/@radix-ui/react-focus-guards/dist/index.mjs.map +7 -1
  225. package/node_modules/@radix-ui/react-focus-guards/package.json +2 -5
  226. package/node_modules/@radix-ui/react-focus-scope/dist/index.d.mts +8 -8
  227. package/node_modules/@radix-ui/react-focus-scope/dist/index.d.ts +8 -8
  228. package/node_modules/@radix-ui/react-focus-scope/dist/index.js +228 -282
  229. package/node_modules/@radix-ui/react-focus-scope/dist/index.js.map +7 -1
  230. package/node_modules/@radix-ui/react-focus-scope/dist/index.mjs +197 -275
  231. package/node_modules/@radix-ui/react-focus-scope/dist/index.mjs.map +7 -1
  232. package/node_modules/@radix-ui/react-focus-scope/package.json +6 -7
  233. package/node_modules/@radix-ui/react-id/dist/index.d.mts +2 -2
  234. package/node_modules/@radix-ui/react-id/dist/index.d.ts +2 -2
  235. package/node_modules/@radix-ui/react-id/dist/index.js +47 -26
  236. package/node_modules/@radix-ui/react-id/dist/index.js.map +7 -1
  237. package/node_modules/@radix-ui/react-id/dist/index.mjs +14 -22
  238. package/node_modules/@radix-ui/react-id/dist/index.mjs.map +7 -1
  239. package/node_modules/@radix-ui/react-id/package.json +3 -4
  240. package/node_modules/@radix-ui/react-popover/dist/index.d.mts +48 -37
  241. package/node_modules/@radix-ui/react-popover/dist/index.d.ts +48 -37
  242. package/node_modules/@radix-ui/react-popover/dist/index.js +319 -311
  243. package/node_modules/@radix-ui/react-popover/dist/index.js.map +7 -1
  244. package/node_modules/@radix-ui/react-popover/dist/index.mjs +288 -291
  245. package/node_modules/@radix-ui/react-popover/dist/index.mjs.map +7 -1
  246. package/node_modules/@radix-ui/react-popover/package.json +17 -18
  247. package/node_modules/@radix-ui/react-popper/dist/index.d.mts +36 -25
  248. package/node_modules/@radix-ui/react-popper/dist/index.d.ts +36 -25
  249. package/node_modules/@radix-ui/react-popper/dist/index.js +305 -321
  250. package/node_modules/@radix-ui/react-popper/dist/index.js.map +7 -1
  251. package/node_modules/@radix-ui/react-popper/dist/index.mjs +284 -305
  252. package/node_modules/@radix-ui/react-popper/dist/index.mjs.map +7 -1
  253. package/node_modules/@radix-ui/react-popper/package.json +12 -13
  254. package/node_modules/@radix-ui/react-portal/dist/index.d.mts +9 -9
  255. package/node_modules/@radix-ui/react-portal/dist/index.d.ts +9 -9
  256. package/node_modules/@radix-ui/react-portal/dist/index.js +52 -34
  257. package/node_modules/@radix-ui/react-portal/dist/index.js.map +7 -1
  258. package/node_modules/@radix-ui/react-portal/dist/index.mjs +21 -27
  259. package/node_modules/@radix-ui/react-portal/dist/index.mjs.map +7 -1
  260. package/node_modules/@radix-ui/react-portal/package.json +5 -5
  261. package/node_modules/@radix-ui/react-presence/dist/index.d.mts +5 -4
  262. package/node_modules/@radix-ui/react-presence/dist/index.d.ts +5 -4
  263. package/node_modules/@radix-ui/react-presence/dist/index.js +147 -132
  264. package/node_modules/@radix-ui/react-presence/dist/index.js.map +7 -1
  265. package/node_modules/@radix-ui/react-presence/dist/index.mjs +116 -129
  266. package/node_modules/@radix-ui/react-presence/dist/index.mjs.map +7 -1
  267. package/node_modules/@radix-ui/react-presence/package.json +5 -6
  268. package/node_modules/@radix-ui/react-primitive/dist/index.d.mts +8 -9
  269. package/node_modules/@radix-ui/react-primitive/dist/index.d.ts +8 -9
  270. package/node_modules/@radix-ui/react-primitive/dist/index.js +73 -100
  271. package/node_modules/@radix-ui/react-primitive/dist/index.js.map +7 -1
  272. package/node_modules/@radix-ui/react-primitive/dist/index.mjs +42 -93
  273. package/node_modules/@radix-ui/react-primitive/dist/index.mjs.map +7 -1
  274. package/node_modules/@radix-ui/react-primitive/package.json +4 -5
  275. package/node_modules/@radix-ui/react-roving-focus/dist/index.d.mts +25 -13
  276. package/node_modules/@radix-ui/react-roving-focus/dist/index.d.ts +25 -13
  277. package/node_modules/@radix-ui/react-roving-focus/dist/index.js +239 -247
  278. package/node_modules/@radix-ui/react-roving-focus/dist/index.js.map +7 -1
  279. package/node_modules/@radix-ui/react-roving-focus/dist/index.mjs +209 -238
  280. package/node_modules/@radix-ui/react-roving-focus/dist/index.mjs.map +7 -1
  281. package/node_modules/@radix-ui/react-roving-focus/package.json +12 -13
  282. package/node_modules/@radix-ui/react-select/dist/index.d.mts +77 -65
  283. package/node_modules/@radix-ui/react-select/dist/index.d.ts +77 -65
  284. package/node_modules/@radix-ui/react-select/dist/index.js +1107 -1235
  285. package/node_modules/@radix-ui/react-select/dist/index.js.map +7 -1
  286. package/node_modules/@radix-ui/react-select/dist/index.mjs +1076 -1197
  287. package/node_modules/@radix-ui/react-select/dist/index.mjs.map +7 -1
  288. package/node_modules/@radix-ui/react-select/package.json +23 -24
  289. package/node_modules/@radix-ui/react-slot/dist/index.d.mts +9 -7
  290. package/node_modules/@radix-ui/react-slot/dist/index.d.ts +9 -7
  291. package/node_modules/@radix-ui/react-slot/dist/index.js +107 -87
  292. package/node_modules/@radix-ui/react-slot/dist/index.js.map +7 -1
  293. package/node_modules/@radix-ui/react-slot/dist/index.mjs +76 -80
  294. package/node_modules/@radix-ui/react-slot/dist/index.mjs.map +7 -1
  295. package/node_modules/@radix-ui/react-slot/package.json +3 -4
  296. package/node_modules/@radix-ui/react-tabs/dist/index.d.mts +32 -21
  297. package/node_modules/@radix-ui/react-tabs/dist/index.d.ts +32 -21
  298. package/node_modules/@radix-ui/react-tabs/dist/index.js +217 -184
  299. package/node_modules/@radix-ui/react-tabs/dist/index.js.map +7 -1
  300. package/node_modules/@radix-ui/react-tabs/dist/index.mjs +185 -169
  301. package/node_modules/@radix-ui/react-tabs/dist/index.mjs.map +7 -1
  302. package/node_modules/@radix-ui/react-tabs/package.json +11 -12
  303. package/node_modules/@radix-ui/react-toast/dist/index.d.mts +43 -32
  304. package/node_modules/@radix-ui/react-toast/dist/index.d.ts +43 -32
  305. package/node_modules/@radix-ui/react-toast/dist/index.js +645 -715
  306. package/node_modules/@radix-ui/react-toast/dist/index.js.map +7 -1
  307. package/node_modules/@radix-ui/react-toast/dist/index.mjs +614 -695
  308. package/node_modules/@radix-ui/react-toast/dist/index.mjs.map +7 -1
  309. package/node_modules/@radix-ui/react-toast/package.json +15 -16
  310. package/node_modules/@radix-ui/react-use-callback-ref/dist/index.d.mts +2 -2
  311. package/node_modules/@radix-ui/react-use-callback-ref/dist/index.d.ts +2 -2
  312. package/node_modules/@radix-ui/react-use-callback-ref/dist/index.js +42 -23
  313. package/node_modules/@radix-ui/react-use-callback-ref/dist/index.js.map +7 -1
  314. package/node_modules/@radix-ui/react-use-callback-ref/dist/index.mjs +11 -21
  315. package/node_modules/@radix-ui/react-use-callback-ref/dist/index.mjs.map +7 -1
  316. package/node_modules/@radix-ui/react-use-callback-ref/package.json +2 -5
  317. package/node_modules/@radix-ui/react-use-controllable-state/dist/index.d.mts +4 -3
  318. package/node_modules/@radix-ui/react-use-controllable-state/dist/index.d.ts +4 -3
  319. package/node_modules/@radix-ui/react-use-controllable-state/dist/index.js +75 -52
  320. package/node_modules/@radix-ui/react-use-controllable-state/dist/index.js.map +7 -1
  321. package/node_modules/@radix-ui/react-use-controllable-state/dist/index.mjs +44 -50
  322. package/node_modules/@radix-ui/react-use-controllable-state/dist/index.mjs.map +7 -1
  323. package/node_modules/@radix-ui/react-use-controllable-state/package.json +3 -4
  324. package/node_modules/@radix-ui/react-use-escape-keydown/dist/index.d.mts +2 -2
  325. package/node_modules/@radix-ui/react-use-escape-keydown/dist/index.d.ts +2 -2
  326. package/node_modules/@radix-ui/react-use-escape-keydown/dist/index.js +50 -29
  327. package/node_modules/@radix-ui/react-use-escape-keydown/dist/index.js.map +7 -1
  328. package/node_modules/@radix-ui/react-use-escape-keydown/dist/index.mjs +17 -25
  329. package/node_modules/@radix-ui/react-use-escape-keydown/dist/index.mjs.map +7 -1
  330. package/node_modules/@radix-ui/react-use-escape-keydown/package.json +3 -4
  331. package/node_modules/@radix-ui/react-use-layout-effect/dist/index.d.mts +4 -3
  332. package/node_modules/@radix-ui/react-use-layout-effect/dist/index.d.ts +4 -3
  333. package/node_modules/@radix-ui/react-use-layout-effect/dist/index.js +38 -17
  334. package/node_modules/@radix-ui/react-use-layout-effect/dist/index.js.map +7 -1
  335. package/node_modules/@radix-ui/react-use-layout-effect/dist/index.mjs +7 -15
  336. package/node_modules/@radix-ui/react-use-layout-effect/dist/index.mjs.map +7 -1
  337. package/node_modules/@radix-ui/react-use-layout-effect/package.json +2 -5
  338. package/node_modules/@radix-ui/react-use-previous/dist/index.d.mts +2 -2
  339. package/node_modules/@radix-ui/react-use-previous/dist/index.d.ts +2 -2
  340. package/node_modules/@radix-ui/react-use-previous/dist/index.js +45 -26
  341. package/node_modules/@radix-ui/react-use-previous/dist/index.js.map +7 -1
  342. package/node_modules/@radix-ui/react-use-previous/dist/index.mjs +14 -24
  343. package/node_modules/@radix-ui/react-use-previous/dist/index.mjs.map +7 -1
  344. package/node_modules/@radix-ui/react-use-previous/package.json +2 -5
  345. package/node_modules/@radix-ui/react-use-rect/dist/index.d.mts +4 -3
  346. package/node_modules/@radix-ui/react-use-rect/dist/index.d.ts +4 -3
  347. package/node_modules/@radix-ui/react-use-rect/dist/index.js +52 -32
  348. package/node_modules/@radix-ui/react-use-rect/dist/index.js.map +7 -1
  349. package/node_modules/@radix-ui/react-use-rect/dist/index.mjs +19 -28
  350. package/node_modules/@radix-ui/react-use-rect/dist/index.mjs.map +7 -1
  351. package/node_modules/@radix-ui/react-use-rect/package.json +3 -4
  352. package/node_modules/@radix-ui/react-use-size/dist/index.d.mts +2 -2
  353. package/node_modules/@radix-ui/react-use-size/dist/index.d.ts +2 -2
  354. package/node_modules/@radix-ui/react-use-size/dist/index.js +70 -57
  355. package/node_modules/@radix-ui/react-use-size/dist/index.js.map +7 -1
  356. package/node_modules/@radix-ui/react-use-size/dist/index.mjs +39 -55
  357. package/node_modules/@radix-ui/react-use-size/dist/index.mjs.map +7 -1
  358. package/node_modules/@radix-ui/react-use-size/package.json +3 -4
  359. package/node_modules/@radix-ui/react-visually-hidden/dist/index.d.mts +8 -8
  360. package/node_modules/@radix-ui/react-visually-hidden/dist/index.d.ts +8 -8
  361. package/node_modules/@radix-ui/react-visually-hidden/dist/index.js +64 -41
  362. package/node_modules/@radix-ui/react-visually-hidden/dist/index.js.map +7 -1
  363. package/node_modules/@radix-ui/react-visually-hidden/dist/index.mjs +33 -35
  364. package/node_modules/@radix-ui/react-visually-hidden/dist/index.mjs.map +7 -1
  365. package/node_modules/@radix-ui/react-visually-hidden/package.json +4 -5
  366. package/node_modules/@radix-ui/rect/dist/index.d.mts +3 -3
  367. package/node_modules/@radix-ui/rect/dist/index.d.ts +3 -3
  368. package/node_modules/@radix-ui/rect/dist/index.js +69 -66
  369. package/node_modules/@radix-ui/rect/dist/index.js.map +7 -1
  370. package/node_modules/@radix-ui/rect/dist/index.mjs +47 -63
  371. package/node_modules/@radix-ui/rect/dist/index.mjs.map +7 -1
  372. package/node_modules/@radix-ui/rect/package.json +1 -4
  373. package/node_modules/@remix-run/react/CHANGELOG.md +18 -0
  374. package/node_modules/@remix-run/react/dist/_virtual/_rollupPluginBabelHelpers.js +1 -1
  375. package/node_modules/@remix-run/react/dist/browser.js +14 -3
  376. package/node_modules/@remix-run/react/dist/components.d.ts +9 -0
  377. package/node_modules/@remix-run/react/dist/components.js +23 -19
  378. package/node_modules/@remix-run/react/dist/data.js +1 -1
  379. package/node_modules/@remix-run/react/dist/entry.d.ts +1 -0
  380. package/node_modules/@remix-run/react/dist/errorBoundaries.d.ts +5 -2
  381. package/node_modules/@remix-run/react/dist/errorBoundaries.js +26 -5
  382. package/node_modules/@remix-run/react/dist/errors.js +1 -1
  383. package/node_modules/@remix-run/react/dist/esm/_virtual/_rollupPluginBabelHelpers.js +1 -1
  384. package/node_modules/@remix-run/react/dist/esm/browser.js +14 -3
  385. package/node_modules/@remix-run/react/dist/esm/components.js +24 -20
  386. package/node_modules/@remix-run/react/dist/esm/data.js +1 -1
  387. package/node_modules/@remix-run/react/dist/esm/errorBoundaries.js +26 -5
  388. package/node_modules/@remix-run/react/dist/esm/errors.js +1 -1
  389. package/node_modules/@remix-run/react/dist/esm/fallback.js +1 -1
  390. package/node_modules/@remix-run/react/dist/esm/fog-of-war.js +226 -0
  391. package/node_modules/@remix-run/react/dist/esm/index.js +1 -1
  392. package/node_modules/@remix-run/react/dist/esm/invariant.js +1 -1
  393. package/node_modules/@remix-run/react/dist/esm/links.js +2 -2
  394. package/node_modules/@remix-run/react/dist/esm/markup.js +1 -1
  395. package/node_modules/@remix-run/react/dist/esm/routeModules.js +1 -1
  396. package/node_modules/@remix-run/react/dist/esm/routes.js +1 -1
  397. package/node_modules/@remix-run/react/dist/esm/scroll-restoration.js +1 -1
  398. package/node_modules/@remix-run/react/dist/esm/server.js +1 -1
  399. package/node_modules/@remix-run/react/dist/esm/single-fetch.js +1 -1
  400. package/node_modules/@remix-run/react/dist/fallback.js +1 -1
  401. package/node_modules/@remix-run/react/dist/fog-of-war.d.ts +37 -0
  402. package/node_modules/@remix-run/react/dist/fog-of-war.js +254 -0
  403. package/node_modules/@remix-run/react/dist/index.js +1 -1
  404. package/node_modules/@remix-run/react/dist/invariant.js +1 -1
  405. package/node_modules/@remix-run/react/dist/links.js +2 -2
  406. package/node_modules/@remix-run/react/dist/markup.js +1 -1
  407. package/node_modules/@remix-run/react/dist/routeModules.js +1 -1
  408. package/node_modules/@remix-run/react/dist/routes.d.ts +1 -1
  409. package/node_modules/@remix-run/react/dist/routes.js +1 -1
  410. package/node_modules/@remix-run/react/dist/scroll-restoration.js +1 -1
  411. package/node_modules/@remix-run/react/dist/server.js +1 -1
  412. package/node_modules/@remix-run/react/dist/single-fetch.js +1 -1
  413. package/node_modules/@remix-run/react/package.json +8 -8
  414. package/node_modules/@remix-run/router/CHANGELOG.md +9 -0
  415. package/node_modules/@remix-run/router/dist/index.d.ts +1 -1
  416. package/node_modules/@remix-run/router/dist/router.cjs.js +467 -80
  417. package/node_modules/@remix-run/router/dist/router.cjs.js.map +1 -1
  418. package/node_modules/@remix-run/router/dist/router.d.ts +11 -1
  419. package/node_modules/@remix-run/router/dist/router.js +457 -76
  420. package/node_modules/@remix-run/router/dist/router.js.map +1 -1
  421. package/node_modules/@remix-run/router/dist/router.umd.js +467 -80
  422. package/node_modules/@remix-run/router/dist/router.umd.js.map +1 -1
  423. package/node_modules/@remix-run/router/dist/router.umd.min.js +2 -2
  424. package/node_modules/@remix-run/router/dist/router.umd.min.js.map +1 -1
  425. package/node_modules/@remix-run/router/dist/utils.d.ts +9 -1
  426. package/node_modules/@remix-run/router/index.ts +1 -0
  427. package/node_modules/@remix-run/router/package.json +1 -1
  428. package/node_modules/@remix-run/router/router.ts +586 -73
  429. package/node_modules/@remix-run/router/utils.ts +51 -8
  430. package/node_modules/@remix-run/server-runtime/CHANGELOG.md +17 -0
  431. package/node_modules/@remix-run/server-runtime/dist/cookies.js +1 -1
  432. package/node_modules/@remix-run/server-runtime/dist/data.js +1 -1
  433. package/node_modules/@remix-run/server-runtime/dist/deprecations.js +1 -1
  434. package/node_modules/@remix-run/server-runtime/dist/dev.js +1 -1
  435. package/node_modules/@remix-run/server-runtime/dist/entry.d.ts +1 -0
  436. package/node_modules/@remix-run/server-runtime/dist/entry.js +1 -1
  437. package/node_modules/@remix-run/server-runtime/dist/errors.js +1 -1
  438. package/node_modules/@remix-run/server-runtime/dist/esm/cookies.js +1 -1
  439. package/node_modules/@remix-run/server-runtime/dist/esm/data.js +1 -1
  440. package/node_modules/@remix-run/server-runtime/dist/esm/deprecations.js +1 -1
  441. package/node_modules/@remix-run/server-runtime/dist/esm/dev.js +1 -1
  442. package/node_modules/@remix-run/server-runtime/dist/esm/entry.js +1 -1
  443. package/node_modules/@remix-run/server-runtime/dist/esm/errors.js +1 -1
  444. package/node_modules/@remix-run/server-runtime/dist/esm/formData.js +1 -1
  445. package/node_modules/@remix-run/server-runtime/dist/esm/headers.js +1 -1
  446. package/node_modules/@remix-run/server-runtime/dist/esm/index.js +1 -1
  447. package/node_modules/@remix-run/server-runtime/dist/esm/invariant.js +1 -1
  448. package/node_modules/@remix-run/server-runtime/dist/esm/markup.js +1 -1
  449. package/node_modules/@remix-run/server-runtime/dist/esm/mode.js +1 -1
  450. package/node_modules/@remix-run/server-runtime/dist/esm/responses.js +1 -1
  451. package/node_modules/@remix-run/server-runtime/dist/esm/routeMatching.js +1 -1
  452. package/node_modules/@remix-run/server-runtime/dist/esm/routes.js +1 -1
  453. package/node_modules/@remix-run/server-runtime/dist/esm/server.js +76 -11
  454. package/node_modules/@remix-run/server-runtime/dist/esm/serverHandoff.js +1 -1
  455. package/node_modules/@remix-run/server-runtime/dist/esm/sessions/cookieStorage.js +1 -1
  456. package/node_modules/@remix-run/server-runtime/dist/esm/sessions/memoryStorage.js +1 -1
  457. package/node_modules/@remix-run/server-runtime/dist/esm/sessions.js +1 -1
  458. package/node_modules/@remix-run/server-runtime/dist/esm/single-fetch.js +17 -8
  459. package/node_modules/@remix-run/server-runtime/dist/esm/upload/errors.js +1 -1
  460. package/node_modules/@remix-run/server-runtime/dist/esm/upload/memoryUploadHandler.js +1 -1
  461. package/node_modules/@remix-run/server-runtime/dist/esm/warnings.js +1 -1
  462. package/node_modules/@remix-run/server-runtime/dist/formData.js +1 -1
  463. package/node_modules/@remix-run/server-runtime/dist/headers.js +1 -1
  464. package/node_modules/@remix-run/server-runtime/dist/index.js +1 -1
  465. package/node_modules/@remix-run/server-runtime/dist/invariant.js +1 -1
  466. package/node_modules/@remix-run/server-runtime/dist/markup.js +1 -1
  467. package/node_modules/@remix-run/server-runtime/dist/mode.js +1 -1
  468. package/node_modules/@remix-run/server-runtime/dist/responses.js +1 -1
  469. package/node_modules/@remix-run/server-runtime/dist/routeMatching.js +1 -1
  470. package/node_modules/@remix-run/server-runtime/dist/routes.js +1 -1
  471. package/node_modules/@remix-run/server-runtime/dist/server.js +70 -5
  472. package/node_modules/@remix-run/server-runtime/dist/serverHandoff.js +1 -1
  473. package/node_modules/@remix-run/server-runtime/dist/sessions/cookieStorage.js +1 -1
  474. package/node_modules/@remix-run/server-runtime/dist/sessions/memoryStorage.js +1 -1
  475. package/node_modules/@remix-run/server-runtime/dist/sessions.js +1 -1
  476. package/node_modules/@remix-run/server-runtime/dist/single-fetch.d.ts +3 -0
  477. package/node_modules/@remix-run/server-runtime/dist/single-fetch.js +18 -7
  478. package/node_modules/@remix-run/server-runtime/dist/upload/errors.js +1 -1
  479. package/node_modules/@remix-run/server-runtime/dist/upload/memoryUploadHandler.js +1 -1
  480. package/node_modules/@remix-run/server-runtime/dist/warnings.js +1 -1
  481. package/node_modules/@remix-run/server-runtime/package.json +3 -3
  482. package/node_modules/deep-eql/index.js +10 -5
  483. package/node_modules/deep-eql/package.json +1 -1
  484. package/node_modules/framer-motion/dist/cjs/{dom-entry-DSxBucW4.js → dom-entry-GDJJhIpT.js} +59 -106
  485. package/node_modules/framer-motion/dist/cjs/dom-entry.js +1 -1
  486. package/node_modules/framer-motion/dist/cjs/index.js +123 -36
  487. package/node_modules/framer-motion/dist/dom.js +1 -1
  488. package/node_modules/framer-motion/dist/es/gestures/drag/VisualElementDragControls.mjs +3 -3
  489. package/node_modules/framer-motion/dist/es/motion/features/animation/index.mjs +6 -3
  490. package/node_modules/framer-motion/dist/es/motion/index.mjs +33 -13
  491. package/node_modules/framer-motion/dist/es/motion/utils/use-motion-ref.mjs +6 -3
  492. package/node_modules/framer-motion/dist/es/motion/utils/use-visual-element.mjs +54 -3
  493. package/node_modules/framer-motion/dist/es/projection/node/create-projection-node.mjs +5 -2
  494. package/node_modules/framer-motion/dist/es/projection-entry.mjs +11 -0
  495. package/node_modules/framer-motion/dist/es/render/VisualElement.mjs +30 -78
  496. package/node_modules/framer-motion/dist/es/render/utils/animation-state.mjs +5 -1
  497. package/node_modules/framer-motion/dist/es/render/utils/motion-values.mjs +1 -1
  498. package/node_modules/framer-motion/dist/es/utils/mix/color.mjs +8 -2
  499. package/node_modules/framer-motion/dist/es/utils/mix/complex.mjs +1 -3
  500. package/node_modules/framer-motion/dist/es/utils/mix/immediate.mjs +5 -0
  501. package/node_modules/framer-motion/dist/es/value/index.mjs +1 -1
  502. package/node_modules/framer-motion/dist/es/value/types/color/rgba.mjs +1 -1
  503. package/node_modules/framer-motion/dist/framer-motion.dev.js +175 -134
  504. package/node_modules/framer-motion/dist/framer-motion.js +1 -1
  505. package/node_modules/framer-motion/dist/index.d.ts +78 -78
  506. package/node_modules/framer-motion/dist/three-entry.d.ts +59 -72
  507. package/node_modules/framer-motion/package.json +14 -28
  508. package/node_modules/react-remove-scroll/dist/es2015/SideEffect.js +15 -4
  509. package/node_modules/react-remove-scroll/dist/es2015/UI.js +2 -2
  510. package/node_modules/react-remove-scroll/dist/es2015/handleScroll.js +12 -4
  511. package/node_modules/react-remove-scroll/dist/es2015/types.d.ts +10 -2
  512. package/node_modules/react-remove-scroll/dist/es2019/SideEffect.js +15 -4
  513. package/node_modules/react-remove-scroll/dist/es2019/UI.js +2 -2
  514. package/node_modules/react-remove-scroll/dist/es2019/handleScroll.js +12 -4
  515. package/node_modules/react-remove-scroll/dist/es2019/types.d.ts +10 -2
  516. package/node_modules/react-remove-scroll/dist/es5/SideEffect.js +15 -4
  517. package/node_modules/react-remove-scroll/dist/es5/UI.js +2 -2
  518. package/node_modules/react-remove-scroll/dist/es5/handleScroll.js +12 -4
  519. package/node_modules/react-remove-scroll/dist/es5/types.d.ts +10 -2
  520. package/node_modules/react-remove-scroll/dist/index.js +93 -0
  521. package/node_modules/react-remove-scroll/package.json +4 -3
  522. package/node_modules/react-router/CHANGELOG.md +14 -0
  523. package/node_modules/react-router/dist/index.d.ts +4 -1
  524. package/node_modules/react-router/dist/index.js +3 -2
  525. package/node_modules/react-router/dist/index.js.map +1 -1
  526. package/node_modules/react-router/dist/main.js +1 -1
  527. package/node_modules/react-router/dist/react-router.development.js +3 -2
  528. package/node_modules/react-router/dist/react-router.development.js.map +1 -1
  529. package/node_modules/react-router/dist/react-router.production.min.js +2 -2
  530. package/node_modules/react-router/dist/react-router.production.min.js.map +1 -1
  531. package/node_modules/react-router/dist/umd/react-router.development.js +3 -2
  532. package/node_modules/react-router/dist/umd/react-router.development.js.map +1 -1
  533. package/node_modules/react-router/dist/umd/react-router.production.min.js +2 -2
  534. package/node_modules/react-router/dist/umd/react-router.production.min.js.map +1 -1
  535. package/node_modules/react-router/package.json +3 -3
  536. package/node_modules/react-router-dom/CHANGELOG.md +17 -0
  537. package/node_modules/react-router-dom/dist/dom.d.ts +29 -16
  538. package/node_modules/react-router-dom/dist/index.d.ts +18 -6
  539. package/node_modules/react-router-dom/dist/index.js +3 -1
  540. package/node_modules/react-router-dom/dist/index.js.map +1 -1
  541. package/node_modules/react-router-dom/dist/main.js +1 -1
  542. package/node_modules/react-router-dom/dist/react-router-dom.development.js +29 -1
  543. package/node_modules/react-router-dom/dist/react-router-dom.development.js.map +1 -1
  544. package/node_modules/react-router-dom/dist/react-router-dom.production.min.js +2 -2
  545. package/node_modules/react-router-dom/dist/react-router-dom.production.min.js.map +1 -1
  546. package/node_modules/react-router-dom/dist/server.js +4 -1
  547. package/node_modules/react-router-dom/dist/server.mjs +4 -1
  548. package/node_modules/react-router-dom/dist/umd/react-router-dom.development.js +29 -1
  549. package/node_modules/react-router-dom/dist/umd/react-router-dom.development.js.map +1 -1
  550. package/node_modules/react-router-dom/dist/umd/react-router-dom.production.min.js +2 -2
  551. package/node_modules/react-router-dom/dist/umd/react-router-dom.production.min.js.map +1 -1
  552. package/node_modules/react-router-dom/package.json +3 -3
  553. package/node_modules/react-router-dom/server.js +4 -1
  554. package/node_modules/react-router-dom/server.mjs +4 -1
  555. package/node_modules/{@remix-run/server-runtime/node_modules/source-map → source-map}/README.md +32 -112
  556. package/node_modules/source-map/dist/source-map.debug.js +3234 -0
  557. package/node_modules/source-map/dist/source-map.js +3233 -0
  558. package/node_modules/source-map/dist/source-map.min.js +2 -0
  559. package/node_modules/source-map/dist/source-map.min.js.map +1 -0
  560. package/node_modules/source-map/lib/array-set.js +121 -0
  561. package/node_modules/{@remix-run/server-runtime/node_modules/source-map → source-map}/lib/base64-vlq.js +40 -11
  562. package/node_modules/source-map/lib/base64.js +67 -0
  563. package/node_modules/{@remix-run/server-runtime/node_modules/source-map → source-map}/lib/binary-search.js +19 -15
  564. package/node_modules/source-map/lib/mapping-list.js +79 -0
  565. package/node_modules/source-map/lib/quick-sort.js +114 -0
  566. package/node_modules/source-map/lib/source-map-consumer.js +1145 -0
  567. package/node_modules/{@remix-run/server-runtime/node_modules/source-map → source-map}/lib/source-map-generator.js +169 -157
  568. package/node_modules/source-map/lib/source-node.js +413 -0
  569. package/node_modules/{@remix-run/server-runtime/node_modules/source-map → source-map}/lib/util.js +51 -109
  570. package/node_modules/{@remix-run/server-runtime/node_modules/source-map → source-map}/package.json +9 -27
  571. package/node_modules/source-map/source-map.d.ts +98 -0
  572. package/node_modules/source-map/source-map.js +8 -0
  573. package/node_modules/turbo-stream/dist/flatten.d.ts +1 -1
  574. package/node_modules/turbo-stream/dist/flatten.js +44 -9
  575. package/node_modules/turbo-stream/dist/turbo-stream.js +11 -2
  576. package/node_modules/turbo-stream/dist/turbo-stream.mjs +58 -7
  577. package/node_modules/turbo-stream/dist/unflatten.js +2 -0
  578. package/node_modules/turbo-stream/dist/utils.d.ts +1 -0
  579. package/node_modules/turbo-stream/dist/utils.js +2 -1
  580. package/node_modules/turbo-stream/package.json +1 -1
  581. package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/index.d.ts +1 -0
  582. package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/package.json +2 -1
  583. package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/readme.md +1 -0
  584. package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/is-literal.d.ts +6 -4
  585. package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/merge-deep.d.ts +8 -9
  586. package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/omit-deep.d.ts +3 -3
  587. package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/paths.d.ts +14 -8
  588. package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/schema.d.ts +12 -12
  589. package/node_modules/type-fest/source/simplify-deep.d.ts +115 -0
  590. package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/simplify.d.ts +1 -1
  591. package/package.json +4 -4
  592. package/build/client/assets/_exerciseNumber_.finished-B7SgnqdS.js +0 -2
  593. package/build/client/assets/_exerciseNumber_.finished-B7SgnqdS.js.map +0 -1
  594. package/build/client/assets/_layout-BG1Jwh7V.js +0 -2
  595. package/build/client/assets/_layout-BG1Jwh7V.js.map +0 -1
  596. package/build/client/assets/_layout-BR-Qyofe.js +0 -2
  597. package/build/client/assets/_layout-CNgYirUN.js +0 -2
  598. package/build/client/assets/_layout-CNgYirUN.js.map +0 -1
  599. package/build/client/assets/components-C5xBZAiL.js +0 -119
  600. package/build/client/assets/components-C5xBZAiL.js.map +0 -1
  601. package/build/client/assets/diff-BKsbFB6w.js +0 -42
  602. package/build/client/assets/diff-BKsbFB6w.js.map +0 -1
  603. package/build/client/assets/diff-KDzcgGYL.js +0 -2
  604. package/build/client/assets/discord-Xp0X4-Fl.js +0 -2
  605. package/build/client/assets/discord-Xp0X4-Fl.js.map +0 -1
  606. package/build/client/assets/entry.client-0j1eoieD.js +0 -80
  607. package/build/client/assets/entry.client-0j1eoieD.js.map +0 -1
  608. package/build/client/assets/epic-video-BwtXsHGU.js.map +0 -1
  609. package/build/client/assets/finished-BI2-0Ykt.js +0 -2
  610. package/build/client/assets/finished-BI2-0Ykt.js.map +0 -1
  611. package/build/client/assets/index-Bg9MMnnf.js.map +0 -1
  612. package/build/client/assets/index-D6ygCrVn.js +0 -37
  613. package/build/client/assets/index-D6ygCrVn.js.map +0 -1
  614. package/build/client/assets/index-r90CY6Wk.js +0 -8
  615. package/build/client/assets/index-r90CY6Wk.js.map +0 -1
  616. package/build/client/assets/manifest-f472ec85.js +0 -1
  617. package/build/client/assets/mdx-BYvGbvEr.js +0 -2
  618. package/build/client/assets/misc-DNgC2Frq.js +0 -2
  619. package/build/client/assets/misc-DNgC2Frq.js.map +0 -1
  620. package/build/client/assets/progress-CF9Xwfxf.js +0 -2
  621. package/build/client/assets/progress-CF9Xwfxf.js.map +0 -1
  622. package/build/client/assets/root-BXq0yevS.js.map +0 -1
  623. package/build/client/assets/tailwind-Ck4g-nq0.css +0 -1
  624. package/build/client/assets/tooltip-Kw0lYWBI.js +0 -2
  625. package/build/client/assets/tooltip-Kw0lYWBI.js.map +0 -1
  626. package/node_modules/@babel/runtime/helpers/AsyncGenerator.js +0 -64
  627. package/node_modules/@babel/runtime/helpers/esm/AsyncGenerator.js +0 -64
  628. package/node_modules/@babel/runtime/helpers/esm/iterableToArrayLimitLoose.js +0 -10
  629. package/node_modules/@babel/runtime/helpers/esm/slicedToArrayLoose.js +0 -8
  630. package/node_modules/@babel/runtime/helpers/iterableToArrayLimitLoose.js +0 -10
  631. package/node_modules/@babel/runtime/helpers/slicedToArrayLoose.js +0 -8
  632. package/node_modules/@conform-to/dom/rollup.config.js +0 -100
  633. package/node_modules/@conform-to/react/rollup.config.js +0 -102
  634. package/node_modules/@conform-to/zod/rollup.config.js +0 -100
  635. package/node_modules/@radix-ui/number/dist/index.d.ts.map +0 -1
  636. package/node_modules/@radix-ui/primitive/dist/index.d.ts.map +0 -1
  637. package/node_modules/@radix-ui/react-accordion/dist/index.d.ts.map +0 -1
  638. package/node_modules/@radix-ui/react-arrow/dist/index.d.ts.map +0 -1
  639. package/node_modules/@radix-ui/react-collapsible/dist/index.d.ts.map +0 -1
  640. package/node_modules/@radix-ui/react-collection/dist/index.d.ts.map +0 -1
  641. package/node_modules/@radix-ui/react-compose-refs/dist/index.d.ts.map +0 -1
  642. package/node_modules/@radix-ui/react-context/dist/index.d.ts.map +0 -1
  643. package/node_modules/@radix-ui/react-direction/dist/index.d.ts.map +0 -1
  644. package/node_modules/@radix-ui/react-dismissable-layer/dist/index.d.ts.map +0 -1
  645. package/node_modules/@radix-ui/react-focus-guards/dist/index.d.ts.map +0 -1
  646. package/node_modules/@radix-ui/react-focus-scope/dist/index.d.ts.map +0 -1
  647. package/node_modules/@radix-ui/react-id/dist/index.d.ts.map +0 -1
  648. package/node_modules/@radix-ui/react-popover/dist/index.d.ts.map +0 -1
  649. package/node_modules/@radix-ui/react-popper/dist/index.d.ts.map +0 -1
  650. package/node_modules/@radix-ui/react-portal/dist/index.d.ts.map +0 -1
  651. package/node_modules/@radix-ui/react-presence/dist/index.d.ts.map +0 -1
  652. package/node_modules/@radix-ui/react-primitive/dist/index.d.ts.map +0 -1
  653. package/node_modules/@radix-ui/react-roving-focus/dist/index.d.ts.map +0 -1
  654. package/node_modules/@radix-ui/react-select/dist/index.d.ts.map +0 -1
  655. package/node_modules/@radix-ui/react-slot/dist/index.d.ts.map +0 -1
  656. package/node_modules/@radix-ui/react-tabs/dist/index.d.ts.map +0 -1
  657. package/node_modules/@radix-ui/react-toast/dist/index.d.ts.map +0 -1
  658. package/node_modules/@radix-ui/react-use-callback-ref/dist/index.d.ts.map +0 -1
  659. package/node_modules/@radix-ui/react-use-controllable-state/dist/index.d.ts.map +0 -1
  660. package/node_modules/@radix-ui/react-use-escape-keydown/dist/index.d.ts.map +0 -1
  661. package/node_modules/@radix-ui/react-use-layout-effect/dist/index.d.ts.map +0 -1
  662. package/node_modules/@radix-ui/react-use-previous/dist/index.d.ts.map +0 -1
  663. package/node_modules/@radix-ui/react-use-rect/dist/index.d.ts.map +0 -1
  664. package/node_modules/@radix-ui/react-use-size/dist/index.d.ts.map +0 -1
  665. package/node_modules/@radix-ui/react-visually-hidden/dist/index.d.ts.map +0 -1
  666. package/node_modules/@radix-ui/rect/dist/index.d.ts.map +0 -1
  667. package/node_modules/@remix-run/server-runtime/node_modules/source-map/dist/source-map.js +0 -1
  668. package/node_modules/@remix-run/server-runtime/node_modules/source-map/lib/array-set.js +0 -100
  669. package/node_modules/@remix-run/server-runtime/node_modules/source-map/lib/base64.js +0 -18
  670. package/node_modules/@remix-run/server-runtime/node_modules/source-map/lib/mapping-list.js +0 -80
  671. package/node_modules/@remix-run/server-runtime/node_modules/source-map/lib/source-map-consumer.js +0 -1237
  672. package/node_modules/@remix-run/server-runtime/node_modules/source-map/lib/source-node.js +0 -404
  673. package/node_modules/@remix-run/server-runtime/node_modules/source-map/source-map.d.ts +0 -369
  674. package/node_modules/@remix-run/server-runtime/node_modules/source-map/source-map.js +0 -8
  675. package/node_modules/framer-motion/dist/projection.dev.js +0 -6659
  676. /package/node_modules/{@remix-run/server-runtime/node_modules/source-map → source-map}/LICENSE +0 -0
  677. /package/node_modules/{@remix-run/server-runtime/node_modules/source-map → source-map}/lib/mappings.wasm +0 -0
  678. /package/node_modules/{@remix-run/server-runtime/node_modules/source-map → source-map}/lib/read-wasm.js +0 -0
  679. /package/node_modules/{@remix-run/server-runtime/node_modules/source-map → source-map}/lib/wasm.js +0 -0
  680. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/and.d.ts +0 -0
  681. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/array-indices.d.ts +0 -0
  682. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/array-slice.d.ts +0 -0
  683. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/array-splice.d.ts +0 -0
  684. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/array-values.d.ts +0 -0
  685. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/async-return-type.d.ts +0 -0
  686. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/asyncify.d.ts +0 -0
  687. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/basic.d.ts +0 -0
  688. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/camel-case.d.ts +0 -0
  689. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/camel-cased-properties-deep.d.ts +0 -0
  690. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/camel-cased-properties.d.ts +0 -0
  691. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/conditional-except.d.ts +0 -0
  692. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/conditional-keys.d.ts +0 -0
  693. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/conditional-pick-deep.d.ts +0 -0
  694. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/conditional-pick.d.ts +0 -0
  695. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/conditional-simplify.d.ts +0 -0
  696. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/delimiter-case.d.ts +0 -0
  697. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/delimiter-cased-properties-deep.d.ts +0 -0
  698. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/delimiter-cased-properties.d.ts +0 -0
  699. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/distributed-omit.d.ts +0 -0
  700. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/distributed-pick.d.ts +0 -0
  701. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/empty-object.d.ts +0 -0
  702. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/enforce-optional.d.ts +0 -0
  703. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/entries.d.ts +0 -0
  704. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/entry.d.ts +0 -0
  705. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/exact.d.ts +0 -0
  706. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/except.d.ts +0 -0
  707. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/fixed-length-array.d.ts +0 -0
  708. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/get.d.ts +0 -0
  709. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/global-this.d.ts +0 -0
  710. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/greater-than-or-equal.d.ts +0 -0
  711. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/greater-than.d.ts +0 -0
  712. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/has-optional-keys.d.ts +0 -0
  713. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/has-readonly-keys.d.ts +0 -0
  714. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/has-required-keys.d.ts +0 -0
  715. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/has-writable-keys.d.ts +0 -0
  716. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/if-any.d.ts +0 -0
  717. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/if-empty-object.d.ts +0 -0
  718. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/if-never.d.ts +0 -0
  719. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/if-null.d.ts +0 -0
  720. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/if-unknown.d.ts +0 -0
  721. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/includes.d.ts +0 -0
  722. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/int-range.d.ts +0 -0
  723. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/internal.d.ts +0 -0
  724. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/invariant-of.d.ts +0 -0
  725. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/is-any.d.ts +0 -0
  726. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/is-equal.d.ts +0 -0
  727. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/is-float.d.ts +0 -0
  728. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/is-integer.d.ts +0 -0
  729. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/is-never.d.ts +0 -0
  730. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/is-null.d.ts +0 -0
  731. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/is-unknown.d.ts +0 -0
  732. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/iterable-element.d.ts +0 -0
  733. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/join.d.ts +0 -0
  734. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/jsonifiable.d.ts +0 -0
  735. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/jsonify.d.ts +0 -0
  736. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/kebab-case.d.ts +0 -0
  737. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/kebab-cased-properties-deep.d.ts +0 -0
  738. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/kebab-cased-properties.d.ts +0 -0
  739. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/keys-of-union.d.ts +0 -0
  740. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/last-array-element.d.ts +0 -0
  741. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/less-than-or-equal.d.ts +0 -0
  742. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/less-than.d.ts +0 -0
  743. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/literal-to-primitive-deep.d.ts +0 -0
  744. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/literal-to-primitive.d.ts +0 -0
  745. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/literal-union.d.ts +0 -0
  746. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/merge-exclusive.d.ts +0 -0
  747. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/merge.d.ts +0 -0
  748. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/multidimensional-array.d.ts +0 -0
  749. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/multidimensional-readonly-array.d.ts +0 -0
  750. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/non-empty-object.d.ts +0 -0
  751. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/numeric.d.ts +0 -0
  752. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/observable-like.d.ts +0 -0
  753. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/omit-index-signature.d.ts +0 -0
  754. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/opaque.d.ts +0 -0
  755. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/optional-keys-of.d.ts +0 -0
  756. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/or.d.ts +0 -0
  757. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/override-properties.d.ts +0 -0
  758. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/package-json.d.ts +0 -0
  759. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/partial-deep.d.ts +0 -0
  760. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/partial-on-undefined-deep.d.ts +0 -0
  761. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/pascal-case.d.ts +0 -0
  762. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/pascal-cased-properties-deep.d.ts +0 -0
  763. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/pascal-cased-properties.d.ts +0 -0
  764. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/pick-deep.d.ts +0 -0
  765. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/pick-index-signature.d.ts +0 -0
  766. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/primitive.d.ts +0 -0
  767. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/promisable.d.ts +0 -0
  768. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/readonly-deep.d.ts +0 -0
  769. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/readonly-keys-of.d.ts +0 -0
  770. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/readonly-tuple.d.ts +0 -0
  771. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/replace.d.ts +0 -0
  772. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/require-all-or-none.d.ts +0 -0
  773. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/require-at-least-one.d.ts +0 -0
  774. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/require-exactly-one.d.ts +0 -0
  775. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/require-one-or-none.d.ts +0 -0
  776. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/required-deep.d.ts +0 -0
  777. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/required-keys-of.d.ts +0 -0
  778. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/screaming-snake-case.d.ts +0 -0
  779. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/set-field-type.d.ts +0 -0
  780. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/set-non-nullable.d.ts +0 -0
  781. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/set-optional.d.ts +0 -0
  782. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/set-parameter-type.d.ts +0 -0
  783. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/set-readonly.d.ts +0 -0
  784. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/set-required.d.ts +0 -0
  785. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/set-return-type.d.ts +0 -0
  786. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/shared-union-fields-deep.d.ts +0 -0
  787. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/single-key-object.d.ts +0 -0
  788. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/snake-case.d.ts +0 -0
  789. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/snake-cased-properties-deep.d.ts +0 -0
  790. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/snake-cased-properties.d.ts +0 -0
  791. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/split-words.d.ts +0 -0
  792. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/split.d.ts +0 -0
  793. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/spread.d.ts +0 -0
  794. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/string-key-of.d.ts +0 -0
  795. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/string-slice.d.ts +0 -0
  796. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/stringified.d.ts +0 -0
  797. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/subtract.d.ts +0 -0
  798. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/sum.d.ts +0 -0
  799. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/tagged-union.d.ts +0 -0
  800. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/trim.d.ts +0 -0
  801. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/tsconfig-json.d.ts +0 -0
  802. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/tuple-to-union.d.ts +0 -0
  803. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/typed-array.d.ts +0 -0
  804. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/undefined-on-partial-deep.d.ts +0 -0
  805. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/union-to-intersection.d.ts +0 -0
  806. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/unknown-array.d.ts +0 -0
  807. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/unknown-record.d.ts +0 -0
  808. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/value-of.d.ts +0 -0
  809. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/writable-deep.d.ts +0 -0
  810. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/writable-keys-of.d.ts +0 -0
  811. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/writable.d.ts +0 -0
@@ -1,2 +1,2 @@
1
- import{j as e,u as a}from"./index-D6ygCrVn.js";import{G as o}from"./error-boundary-Bcric_4t.js";import{I as s}from"./misc-DNgC2Frq.js";import{L as t}from"./components-C5xBZAiL.js";import"./clsx-B-dksMZM.js";function x(){return e.jsx(n,{})}function n(){const r=a();return e.jsx(o,{statusHandlers:{404:()=>e.jsxs("div",{className:"flex flex-col gap-6",children:[e.jsxs("div",{className:"flex flex-col gap-3",children:[e.jsx("h1",{children:"We can't find this page:"}),e.jsx("pre",{className:"whitespace-pre-wrap break-all text-body-lg",children:r.pathname})]}),e.jsx(t,{to:"/",className:"text-body-md underline",children:e.jsx(s,{name:"ArrowLeft",children:"Back to home"})})]})}})}export{n as ErrorBoundary,x as default};
2
- //# sourceMappingURL=_-COWH0sBh.js.map
1
+ import{j as e,u as a}from"./index-Czg1ruVn.js";import{G as o}from"./error-boundary-DxfVshQ5.js";import{I as s}from"./misc-CypjEQkt.js";import{L as t}from"./components-BMzmvxYw.js";import"./clsx-B-dksMZM.js";function x(){return e.jsx(n,{})}function n(){const r=a();return e.jsx(o,{statusHandlers:{404:()=>e.jsxs("div",{className:"flex flex-col gap-6",children:[e.jsxs("div",{className:"flex flex-col gap-3",children:[e.jsx("h1",{children:"We can't find this page:"}),e.jsx("pre",{className:"whitespace-pre-wrap break-all text-body-lg",children:r.pathname})]}),e.jsx(t,{to:"/",className:"text-body-md underline",children:e.jsx(s,{name:"ArrowLeft",children:"Back to home"})})]})}})}export{n as ErrorBoundary,x as default};
2
+ //# sourceMappingURL=_-Bd2gNcck.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"_-COWH0sBh.js","sources":["../../../app/routes/$.tsx"],"sourcesContent":["// This is called a \"splat route\" and as it's in the root `/app/routes/`\n// directory, it's a catchall. If no other routes match, this one will and we\n// can know that the user is hitting a URL that doesn't exist. By throwing a\n// 404 from the loader, we can force the error boundary to render which will\n// ensure the user gets the right status code and we can display a nicer error\n// message for them than the Remix and/or browser default.\n\nimport { Link, useLocation } from '@remix-run/react'\nimport { GeneralErrorBoundary } from '#app/components/error-boundary.tsx'\nimport { Icon } from '#app/components/icons.tsx'\n\nexport async function loader() {\n\tthrow new Response('Not found', { status: 404 })\n}\n\nexport default function NotFound() {\n\t// due to the loader, this component will never be rendered, but we'll return\n\t// the error boundary just in case.\n\treturn <ErrorBoundary />\n}\n\nexport function ErrorBoundary() {\n\tconst location = useLocation()\n\treturn (\n\t\t<GeneralErrorBoundary\n\t\t\tstatusHandlers={{\n\t\t\t\t404: () => (\n\t\t\t\t\t<div className=\"flex flex-col gap-6\">\n\t\t\t\t\t\t<div className=\"flex flex-col gap-3\">\n\t\t\t\t\t\t\t<h1>We can't find this page:</h1>\n\t\t\t\t\t\t\t<pre className=\"whitespace-pre-wrap break-all text-body-lg\">\n\t\t\t\t\t\t\t\t{location.pathname}\n\t\t\t\t\t\t\t</pre>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<Link to=\"/\" className=\"text-body-md underline\">\n\t\t\t\t\t\t\t<Icon name=\"ArrowLeft\">Back to home</Icon>\n\t\t\t\t\t\t</Link>\n\t\t\t\t\t</div>\n\t\t\t\t),\n\t\t\t}}\n\t\t/>\n\t)\n}\n"],"names":["NotFound","ErrorBoundary","location","useLocation","jsx","GeneralErrorBoundary","statusHandlers","jsxs","className","children","pathname","Link","to","Icon","name"],"mappings":"+MAeA,SAAwBA,GAAW,CAGlC,aAAQC,EAAc,CAAA,CAAA,CACvB,CAEO,SAASA,GAAgB,CAC/B,MAAMC,EAAWC,IAEhB,OAAAC,EAAAA,IAACC,EAAA,CACAC,eAAgB,CACf,IAAK,IACHC,EAAA,KAAA,MAAA,CAAIC,UAAU,sBACdC,SAAA,CAACF,EAAA,KAAA,MAAA,CAAIC,UAAU,sBACdC,SAAA,CAAAL,EAAA,IAAC,MAAGK,SAAwB,0BAAA,CAAA,EAC3BL,EAAA,IAAA,MAAA,CAAII,UAAU,6CACbC,WAASC,QACX,CAAA,CAAA,CACD,CAAA,EACAN,EAAA,IAACO,EAAK,CAAAC,GAAG,IAAIJ,UAAU,yBACtBC,SAAAL,EAAA,IAACS,EAAK,CAAAC,KAAK,YAAYL,SAAA,eAAY,CACpC,CAAA,CAAA,EACD,CAEF,CAAA,CACD,CAEF"}
1
+ {"version":3,"file":"_-Bd2gNcck.js","sources":["../../../app/routes/$.tsx"],"sourcesContent":["// This is called a \"splat route\" and as it's in the root `/app/routes/`\n// directory, it's a catchall. If no other routes match, this one will and we\n// can know that the user is hitting a URL that doesn't exist. By throwing a\n// 404 from the loader, we can force the error boundary to render which will\n// ensure the user gets the right status code and we can display a nicer error\n// message for them than the Remix and/or browser default.\n\nimport { Link, useLocation } from '@remix-run/react'\nimport { GeneralErrorBoundary } from '#app/components/error-boundary.tsx'\nimport { Icon } from '#app/components/icons.tsx'\n\nexport async function loader() {\n\tthrow new Response('Not found', { status: 404 })\n}\n\nexport default function NotFound() {\n\t// due to the loader, this component will never be rendered, but we'll return\n\t// the error boundary just in case.\n\treturn <ErrorBoundary />\n}\n\nexport function ErrorBoundary() {\n\tconst location = useLocation()\n\treturn (\n\t\t<GeneralErrorBoundary\n\t\t\tstatusHandlers={{\n\t\t\t\t404: () => (\n\t\t\t\t\t<div className=\"flex flex-col gap-6\">\n\t\t\t\t\t\t<div className=\"flex flex-col gap-3\">\n\t\t\t\t\t\t\t<h1>We can't find this page:</h1>\n\t\t\t\t\t\t\t<pre className=\"whitespace-pre-wrap break-all text-body-lg\">\n\t\t\t\t\t\t\t\t{location.pathname}\n\t\t\t\t\t\t\t</pre>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<Link to=\"/\" className=\"text-body-md underline\">\n\t\t\t\t\t\t\t<Icon name=\"ArrowLeft\">Back to home</Icon>\n\t\t\t\t\t\t</Link>\n\t\t\t\t\t</div>\n\t\t\t\t),\n\t\t\t}}\n\t\t/>\n\t)\n}\n"],"names":["NotFound","ErrorBoundary","location","useLocation","jsx","GeneralErrorBoundary","statusHandlers","jsxs","className","children","pathname","Link","to","Icon","name"],"mappings":"+MAeA,SAAwBA,GAAW,CAGlC,aAAQC,EAAc,CAAA,CAAA,CACvB,CAEO,SAASA,GAAgB,CAC/B,MAAMC,EAAWC,IAEhB,OAAAC,EAAAA,IAACC,EAAA,CACAC,eAAgB,CACf,IAAK,IACHC,EAAA,KAAA,MAAA,CAAIC,UAAU,sBACdC,SAAA,CAACF,EAAA,KAAA,MAAA,CAAIC,UAAU,sBACdC,SAAA,CAAAL,EAAA,IAAC,MAAGK,SAAwB,0BAAA,CAAA,EAC3BL,EAAA,IAAA,MAAA,CAAII,UAAU,6CACbC,WAASC,QACX,CAAA,CAAA,CACD,CAAA,EACAN,EAAA,IAACO,EAAK,CAAAC,GAAG,IAAIJ,UAAU,yBACtBC,SAAAL,EAAA,IAACS,EAAK,CAAAC,KAAK,YAAYL,SAAA,eAAY,CACpC,CAAA,CAAA,EACD,CAEF,CAAA,CACD,CAEF"}
@@ -1,2 +1,2 @@
1
- import{j as r,a as l,i as c}from"./index-D6ygCrVn.js";import{E as m}from"./index-9nNr0Zqr.js";import{E as a}from"./epic-video-BwtXsHGU.js";import{M as d,E as p}from"./mdx-BYvGbvEr.js";import{P as x}from"./progress-CF9Xwfxf.js";import{g as u}from"./misc-DNgC2Frq.js";import{g as f}from"./seo-CHrqghsC.js";import{u as b,L as h}from"./components-C5xBZAiL.js";import"./index-Bg9MMnnf.js";import"./request-info-Dyls4H67.js";import"./tooltip-Kw0lYWBI.js";import"./client-hints-BKxdo5Js.js";import"./loading-C9f_vBoM.js";import"./clsx-B-dksMZM.js";import"./progress-bar-7LK87ZMh.js";const C=({data:e,matches:o})=>{var i;const s=e==null?void 0:e.exercise.exerciseNumber.toString().padStart(2,"0"),t=(i=o.find(n=>n.id==="root"))==null?void 0:i.data;return!e||!t?[{title:"🦉 | Error"}]:f({title:`📝 | ${s}. ${e.exercise.title} | ${t==null?void 0:t.workshopTitle}`,description:`Introduction for ${s}. ${e.exercise.title}`,ogTitle:e.exercise.title,ogDescription:`Introduction for exercise ${Number(s)}`,instructor:t.instructor,requestInfo:t.requestInfo})},j={h1:()=>null};function V(){var t;const e=b(),s=`${String(((t=e.firstStep)==null?void 0:t.stepNumber)??"01").padStart(2,"0")}/${e.firstType}`;return r.jsxs("main",{className:"relative flex h-full w-full max-w-5xl flex-col justify-between border-r md:w-3/4 xl:w-2/3",children:[r.jsxs("article",{id:e.articleId,className:"shadow-on-scrollbox flex w-full flex-1 flex-col gap-12 overflow-y-scroll px-3 py-4 pt-6 scrollbar-thin scrollbar-thumb-scrollbar md:px-10 md:py-12 md:pt-16",children:[r.jsx("div",{children:r.jsx("h1",{className:"text-[clamp(3rem,6vw,8.5rem)] font-extrabold leading-none",children:e.exercise.title})}),r.jsx("div",{children:e.exercise.instructionsCode?r.jsx(a,{epicVideoInfosPromise:e.epicVideoInfosPromise,children:r.jsx("div",{className:"prose dark:prose-invert sm:prose-lg",children:r.jsx(d,{code:e.exercise.instructionsCode,components:j})})}):"No instructions yet..."})]},e.articleId),r.jsx(m,{elementQuery:`#${e.articleId}`},`scroll-${e.articleId}`),r.jsx(x,{type:"instructions",exerciseNumber:e.exerciseNumber,className:"h-14 border-t px-6"}),r.jsxs("div",{className:"flex h-16 justify-between border-b-4 border-t lg:border-b-0",children:[r.jsx("div",{}),r.jsx(p,{file:e.exerciseReadme.file,relativePath:e.exerciseReadme.relativePath}),r.jsx(h,{to:s,prefetch:"intent",className:"flex h-full items-center justify-center bg-foreground px-7 text-background",children:"Start Learning"})]})]})}function q(){const e=l();return typeof document<"u"&&console.error(e),c(e)?e.status===404?r.jsx("p",{children:"Sorry, we couldn't find that step."}):r.jsxs("p",{children:[e.status," ",e.data]}):r.jsx("p",{children:u(e)})}export{q as ErrorBoundary,V as default,C as meta};
2
- //# sourceMappingURL=_exerciseNumber-D5XVFEL6.js.map
1
+ import{j as r,a as l,i as c}from"./index-Czg1ruVn.js";import{E as m}from"./index-D6ukHE4T.js";import{E as a}from"./epic-video-CYnG2ziQ.js";import{M as d,E as p}from"./mdx-CR7Me1v_.js";import{P as x}from"./progress-B_mReZVE.js";import{g as u}from"./misc-CypjEQkt.js";import{g as f}from"./seo-Bu3_n5my.js";import{u as b,L as h}from"./components-BMzmvxYw.js";import"./index-90bzTYUX.js";import"./request-info-CUT0ULYN.js";import"./tooltip-CfmIzAYi.js";import"./client-hints-BE5mB4r0.js";import"./loading-CNWJVymJ.js";import"./clsx-B-dksMZM.js";import"./progress-bar-DCrt7X4t.js";const C=({data:e,matches:o})=>{var i;const s=e==null?void 0:e.exercise.exerciseNumber.toString().padStart(2,"0"),t=(i=o.find(n=>n.id==="root"))==null?void 0:i.data;return!e||!t?[{title:"🦉 | Error"}]:f({title:`📝 | ${s}. ${e.exercise.title} | ${t==null?void 0:t.workshopTitle}`,description:`Introduction for ${s}. ${e.exercise.title}`,ogTitle:e.exercise.title,ogDescription:`Introduction for exercise ${Number(s)}`,instructor:t.instructor,requestInfo:t.requestInfo})},j={h1:()=>null};function V(){var t;const e=b(),s=`${String(((t=e.firstStep)==null?void 0:t.stepNumber)??"01").padStart(2,"0")}/${e.firstType}`;return r.jsxs("main",{className:"relative flex h-full w-full max-w-5xl flex-col justify-between border-r md:w-3/4 xl:w-2/3",children:[r.jsxs("article",{id:e.articleId,className:"shadow-on-scrollbox flex w-full flex-1 flex-col gap-12 overflow-y-scroll px-3 py-4 pt-6 scrollbar-thin scrollbar-thumb-scrollbar md:px-10 md:py-12 md:pt-16",children:[r.jsx("div",{children:r.jsx("h1",{className:"text-[clamp(3rem,6vw,8.5rem)] font-extrabold leading-none",children:e.exercise.title})}),r.jsx("div",{children:e.exercise.instructionsCode?r.jsx(a,{epicVideoInfosPromise:e.epicVideoInfosPromise,children:r.jsx("div",{className:"prose dark:prose-invert sm:prose-lg",children:r.jsx(d,{code:e.exercise.instructionsCode,components:j})})}):"No instructions yet..."})]},e.articleId),r.jsx(m,{elementQuery:`#${e.articleId}`},`scroll-${e.articleId}`),r.jsx(x,{type:"instructions",exerciseNumber:e.exerciseNumber,className:"h-14 border-t px-6"}),r.jsxs("div",{className:"flex h-16 justify-between border-b-4 border-t lg:border-b-0",children:[r.jsx("div",{}),r.jsx(p,{file:e.exerciseReadme.file,relativePath:e.exerciseReadme.relativePath}),r.jsx(h,{to:s,prefetch:"intent",className:"flex h-full items-center justify-center bg-foreground px-7 text-background",children:"Start Learning"})]})]})}function q(){const e=l();return typeof document<"u"&&console.error(e),c(e)?e.status===404?r.jsx("p",{children:"Sorry, we couldn't find that step."}):r.jsxs("p",{children:[e.status," ",e.data]}):r.jsx("p",{children:u(e)})}export{q as ErrorBoundary,V as default,C as meta};
2
+ //# sourceMappingURL=_exerciseNumber-CFOo2dQj.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"_exerciseNumber-D5XVFEL6.js","sources":["../../../app/routes/_app+/_exercises+/$exerciseNumber.tsx"],"sourcesContent":["import path from 'path'\nimport { invariantResponse } from '@epic-web/invariant'\nimport { ElementScrollRestoration } from '@epic-web/restore-scroll'\nimport {\n\tgetExercises,\n\tgetWorkshopRoot,\n\tgetWorkshopTitle,\n} from '@epic-web/workshop-utils/apps.server'\nimport {\n\tcombineServerTimings,\n\tgetServerTimeHeader,\n\tmakeTimings,\n\ttime,\n} from '@epic-web/workshop-utils/timing.server'\nimport {\n\tdefer,\n\ttype HeadersFunction,\n\ttype LoaderFunctionArgs,\n\ttype MetaFunction,\n} from '@remix-run/node'\nimport {\n\tLink,\n\tisRouteErrorResponse,\n\tuseLoaderData,\n\tuseRouteError,\n} from '@remix-run/react'\nimport slugify from '@sindresorhus/slugify'\nimport { EpicVideoInfoProvider } from '#app/components/epic-video.tsx'\nimport { type loader as rootLoader } from '#app/root.tsx'\nimport { EditFileOnGitHub } from '#app/routes/launch-editor.tsx'\nimport { ProgressToggle } from '#app/routes/progress.tsx'\nimport { getEpicVideoInfos } from '#app/utils/epic-api.ts'\nimport { Mdx } from '#app/utils/mdx.tsx'\nimport { getErrorMessage } from '#app/utils/misc.tsx'\nimport { getSeoMetaTags } from '#app/utils/seo.js'\n\nexport const meta: MetaFunction<typeof loader, { root: typeof rootLoader }> = ({\n\tdata,\n\tmatches,\n}) => {\n\tconst number = data?.exercise.exerciseNumber.toString().padStart(2, '0')\n\n\tconst rootData = matches.find((m) => m.id === 'root')?.data\n\tif (!data || !rootData) return [{ title: '🦉 | Error' }]\n\n\treturn getSeoMetaTags({\n\t\ttitle: `📝 | ${number}. ${data.exercise.title} | ${rootData?.workshopTitle}`,\n\t\tdescription: `Introduction for ${number}. ${data.exercise.title}`,\n\t\togTitle: data.exercise.title,\n\t\togDescription: `Introduction for exercise ${Number(number)}`,\n\t\tinstructor: rootData.instructor,\n\t\trequestInfo: rootData.requestInfo,\n\t})\n}\n\nexport async function loader({ request, params }: LoaderFunctionArgs) {\n\tconst timings = makeTimings('exerciseNumberLoader')\n\tinvariantResponse(params.exerciseNumber, 'exerciseNumber is required')\n\tconst [exercises, workshopTitle] = await Promise.all([\n\t\ttime(() => getExercises({ request, timings }), {\n\t\t\ttimings,\n\t\t\ttype: 'getExercises',\n\t\t\tdesc: 'getExercises in $exerciseNumber.tsx',\n\t\t}),\n\t\ttime(() => getWorkshopTitle(), {\n\t\t\ttimings,\n\t\t\ttype: 'getWorkshopTitle',\n\t\t\tdesc: 'getWorkshopTitle in $exerciseNumber.tsx',\n\t\t}),\n\t])\n\tconst exercise = exercises.find(\n\t\t(e) => e.exerciseNumber === Number(params.exerciseNumber),\n\t)\n\tif (!exercise) {\n\t\tthrow new Response('Not found', { status: 404 })\n\t}\n\n\tconst readmeFilepath = path.join(\n\t\tgetWorkshopRoot(),\n\t\t'exercises',\n\t\texercise.dirName,\n\t\t'README.mdx',\n\t)\n\n\tconst firstStep = exercise.steps.find(Boolean)\n\n\tconst articleId = `workshop-${slugify(workshopTitle)}-${\n\t\texercise.exerciseNumber\n\t}-instructions`\n\n\treturn defer(\n\t\t{\n\t\t\tarticleId,\n\t\t\texercise,\n\t\t\texerciseNumber: exercise.exerciseNumber,\n\t\t\texerciseReadme: {\n\t\t\t\tfile: readmeFilepath,\n\t\t\t\trelativePath: `exercises/${exercise.dirName}`,\n\t\t\t},\n\t\t\texerciseTitle: exercise.title,\n\t\t\tfirstStep,\n\t\t\tfirstType: firstStep?.problem ? 'problem' : 'solution',\n\t\t\ttitle: workshopTitle,\n\t\t\tepicVideoInfosPromise: getEpicVideoInfos(\n\t\t\t\texercise.instructionsEpicVideoEmbeds,\n\t\t\t\t{ request },\n\t\t\t),\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 const headers: HeadersFunction = ({ loaderHeaders, parentHeaders }) => {\n\tconst headers = {\n\t\t'Cache-Control': loaderHeaders.get('Cache-Control') ?? '',\n\t\t'Server-Timing': combineServerTimings(loaderHeaders, parentHeaders),\n\t}\n\treturn headers\n}\n\nconst mdxComponents = { h1: () => null }\nexport default function ExerciseNumberRoute() {\n\tconst data = useLoaderData<typeof loader>()\n\n\tconst firstStepNumber = String(data.firstStep?.stepNumber ?? '01')\n\tconst firstStepPath = `${firstStepNumber.padStart(2, '0')}/${data.firstType}`\n\treturn (\n\t\t<main className=\"relative flex h-full w-full max-w-5xl flex-col justify-between border-r md:w-3/4 xl:w-2/3\">\n\t\t\t<article\n\t\t\t\tid={data.articleId}\n\t\t\t\tkey={data.articleId}\n\t\t\t\tclassName=\"shadow-on-scrollbox flex w-full flex-1 flex-col gap-12 overflow-y-scroll px-3 py-4 pt-6 scrollbar-thin scrollbar-thumb-scrollbar md:px-10 md:py-12 md:pt-16\"\n\t\t\t>\n\t\t\t\t<div>\n\t\t\t\t\t<h1 className=\"text-[clamp(3rem,6vw,8.5rem)] font-extrabold leading-none\">\n\t\t\t\t\t\t{data.exercise.title}\n\t\t\t\t\t</h1>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t{data.exercise.instructionsCode ? (\n\t\t\t\t\t\t<EpicVideoInfoProvider\n\t\t\t\t\t\t\tepicVideoInfosPromise={data.epicVideoInfosPromise}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div className=\"prose dark:prose-invert sm:prose-lg\">\n\t\t\t\t\t\t\t\t<Mdx\n\t\t\t\t\t\t\t\t\tcode={data.exercise.instructionsCode}\n\t\t\t\t\t\t\t\t\tcomponents={mdxComponents}\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</EpicVideoInfoProvider>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t'No instructions yet...'\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</article>\n\t\t\t<ElementScrollRestoration\n\t\t\t\telementQuery={`#${data.articleId}`}\n\t\t\t\tkey={`scroll-${data.articleId}`}\n\t\t\t/>\n\t\t\t<ProgressToggle\n\t\t\t\ttype=\"instructions\"\n\t\t\t\texerciseNumber={data.exerciseNumber}\n\t\t\t\tclassName=\"h-14 border-t px-6\"\n\t\t\t/>\n\t\t\t<div className=\"flex h-16 justify-between border-b-4 border-t lg:border-b-0\">\n\t\t\t\t<div />\n\t\t\t\t<EditFileOnGitHub\n\t\t\t\t\tfile={data.exerciseReadme.file}\n\t\t\t\t\trelativePath={data.exerciseReadme.relativePath}\n\t\t\t\t/>\n\t\t\t\t<Link\n\t\t\t\t\tto={firstStepPath}\n\t\t\t\t\tprefetch=\"intent\"\n\t\t\t\t\tclassName=\"flex h-full items-center justify-center bg-foreground px-7 text-background\"\n\t\t\t\t>\n\t\t\t\t\tStart Learning\n\t\t\t\t</Link>\n\t\t\t</div>\n\t\t</main>\n\t)\n}\n\nexport function ErrorBoundary() {\n\tconst error = useRouteError()\n\n\tif (typeof document !== 'undefined') {\n\t\tconsole.error(error)\n\t}\n\n\treturn isRouteErrorResponse(error) ? (\n\t\terror.status === 404 ? (\n\t\t\t<p>Sorry, we couldn't find that step.</p>\n\t\t) : (\n\t\t\t<p>\n\t\t\t\t{error.status} {error.data}\n\t\t\t</p>\n\t\t)\n\t) : (\n\t\t<p>{getErrorMessage(error)}</p>\n\t)\n}\n"],"names":["meta","data","matches","number","exercise","exerciseNumber","toString","padStart","rootData","find","m","id","title","getSeoMetaTags","workshopTitle","description","ogTitle","ogDescription","Number","instructor","requestInfo","mdxComponents","h1","ExerciseNumberRoute","useLoaderData","firstStepPath","String","firstStep","stepNumber","firstType","jsxs","className","children","articleId","jsx","instructionsCode","EpicVideoInfoProvider","epicVideoInfosPromise","Mdx","code","components","ElementScrollRestoration","elementQuery","ProgressToggle","type","EditFileOnGitHub","file","exerciseReadme","relativePath","Link","to","prefetch","ErrorBoundary","error","useRouteError","document","console","isRouteErrorResponse","status","getErrorMessage"],"mappings":"gkBAoCO,MAAMA,EAAiEA,CAAC,CAC9EC,KAAAA,EACAC,QAAAA,CACD,IAAM,OACC,MAAAC,EAASF,GAAAA,YAAAA,EAAMG,SAASC,eAAeC,WAAWC,SAAS,EAAG,KAE9DC,GAAWN,EAAAA,EAAQO,KAAMC,GAAMA,EAAEC,KAAO,MAAM,IAAnCT,YAAAA,EAAsCD,KACnD,MAAA,CAACA,GAAQ,CAACO,EAAiB,CAAC,CAAEI,MAAO,YAAa,CAAC,EAEhDC,EAAe,CACrBD,MAAO,QAAQT,CAAM,KAAKF,EAAKG,SAASQ,KAAK,MAAMJ,GAAAA,YAAAA,EAAUM,aAAa,GAC1EC,YAAa,oBAAoBZ,CAAM,KAAKF,EAAKG,SAASQ,KAAK,GAC/DI,QAASf,EAAKG,SAASQ,MACvBK,cAAe,6BAA6BC,OAAOf,CAAM,CAAC,GAC1DgB,WAAYX,EAASW,WACrBC,YAAaZ,EAASY,WACvB,CAAC,CACF,EAuEMC,EAAgB,CAAEC,GAAIA,IAAM,IAAK,EACvC,SAAwBC,GAAsB,OAC7C,MAAMtB,EAAOuB,IAGPC,EAAgB,GADEC,SAAOzB,EAAAA,EAAK0B,YAAL1B,YAAAA,EAAgB2B,aAAc,IAAI,EACxBrB,SAAS,EAAG,GAAG,CAAC,IAAIN,EAAK4B,SAAS,GAE1E,OAAAC,EAAAA,KAAC,OAAK,CAAAC,UAAU,4FACfC,SAAA,CAAAF,EAAA,KAAC,UAAA,CACAnB,GAAIV,EAAKgC,UAETF,UAAU,8JAEVC,SAAA,CAACE,EAAA,IAAA,MAAA,CACAF,eAAC,KAAG,CAAAD,UAAU,4DACZC,SAAK/B,EAAAG,SAASQ,MAChB,CACD,CAAA,EACCsB,EAAA,IAAA,MAAA,CACCF,SAAK/B,EAAAG,SAAS+B,iBACdD,EAAAA,IAACE,EAAA,CACAC,sBAAuBpC,EAAKoC,sBAE5BL,SAAAE,EAAA,IAAC,MAAI,CAAAH,UAAU,sCACdC,SAAAE,EAAA,IAACI,EAAA,CACAC,KAAMtC,EAAKG,SAAS+B,iBACpBK,WAAYnB,EACb,EACD,CACD,CAAA,EAEA,wBAEF,CAAA,CAAA,CAAA,EAvBKpB,EAAKgC,SAwBX,EACAC,EAAAA,IAACO,EAAA,CACAC,aAAc,IAAIzC,EAAKgC,SAAS,EAAA,EAC3B,UAAUhC,EAAKgC,SAAS,EAC9B,EACAC,EAAA,IAACS,EAAA,CACAC,KAAK,eACLvC,eAAgBJ,EAAKI,eACrB0B,UAAU,oBAAA,CACX,EACAD,EAAA,KAAC,MAAI,CAAAC,UAAU,8DACdC,SAAA,CAAAE,EAAAA,IAAC,MAAI,CAAA,CAAA,EACLA,EAAA,IAACW,EAAA,CACAC,KAAM7C,EAAK8C,eAAeD,KAC1BE,aAAc/C,EAAK8C,eAAeC,YAAA,CACnC,EACAd,EAAA,IAACe,EAAA,CACAC,GAAIzB,EACJ0B,SAAS,SACTpB,UAAU,6EACVC,SAAA,gBAAA,CAED,CAAA,CACD,CAAA,CAAA,CACD,CAAA,CAEF,CAEO,SAASoB,GAAgB,CAC/B,MAAMC,EAAQC,IAEV,OAAA,OAAOC,SAAa,KACvBC,QAAQH,MAAMA,CAAK,EAGbI,EAAqBJ,CAAK,EAChCA,EAAMK,SAAW,IAChBxB,EAAA,IAAC,IAAE,CAAAF,SAAA,oCAAA,CAAkC,EAErCF,EAAA,KAAC,IACC,CAAAE,SAAA,CAAMqB,EAAAK,OAAO,IAAEL,EAAMpD,IAAA,CAAA,CACvB,EAGDiC,EAAA,IAAC,IAAG,CAAAF,SAAA2B,EAAgBN,CAAK,CAAE,CAAA,CAE7B"}
1
+ {"version":3,"file":"_exerciseNumber-CFOo2dQj.js","sources":["../../../app/routes/_app+/_exercises+/$exerciseNumber.tsx"],"sourcesContent":["import path from 'path'\nimport { invariantResponse } from '@epic-web/invariant'\nimport { ElementScrollRestoration } from '@epic-web/restore-scroll'\nimport {\n\tgetExercises,\n\tgetWorkshopRoot,\n\tgetWorkshopTitle,\n} from '@epic-web/workshop-utils/apps.server'\nimport {\n\tcombineServerTimings,\n\tgetServerTimeHeader,\n\tmakeTimings,\n\ttime,\n} from '@epic-web/workshop-utils/timing.server'\nimport {\n\tdefer,\n\ttype HeadersFunction,\n\ttype LoaderFunctionArgs,\n\ttype MetaFunction,\n} from '@remix-run/node'\nimport {\n\tLink,\n\tisRouteErrorResponse,\n\tuseLoaderData,\n\tuseRouteError,\n} from '@remix-run/react'\nimport slugify from '@sindresorhus/slugify'\nimport { EpicVideoInfoProvider } from '#app/components/epic-video.tsx'\nimport { type loader as rootLoader } from '#app/root.tsx'\nimport { EditFileOnGitHub } from '#app/routes/launch-editor.tsx'\nimport { ProgressToggle } from '#app/routes/progress.tsx'\nimport { getEpicVideoInfos } from '#app/utils/epic-api.ts'\nimport { Mdx } from '#app/utils/mdx.tsx'\nimport { getErrorMessage } from '#app/utils/misc.tsx'\nimport { getSeoMetaTags } from '#app/utils/seo.js'\n\nexport const meta: MetaFunction<typeof loader, { root: typeof rootLoader }> = ({\n\tdata,\n\tmatches,\n}) => {\n\tconst number = data?.exercise.exerciseNumber.toString().padStart(2, '0')\n\n\tconst rootData = matches.find((m) => m.id === 'root')?.data\n\tif (!data || !rootData) return [{ title: '🦉 | Error' }]\n\n\treturn getSeoMetaTags({\n\t\ttitle: `📝 | ${number}. ${data.exercise.title} | ${rootData?.workshopTitle}`,\n\t\tdescription: `Introduction for ${number}. ${data.exercise.title}`,\n\t\togTitle: data.exercise.title,\n\t\togDescription: `Introduction for exercise ${Number(number)}`,\n\t\tinstructor: rootData.instructor,\n\t\trequestInfo: rootData.requestInfo,\n\t})\n}\n\nexport async function loader({ request, params }: LoaderFunctionArgs) {\n\tconst timings = makeTimings('exerciseNumberLoader')\n\tinvariantResponse(params.exerciseNumber, 'exerciseNumber is required')\n\tconst [exercises, workshopTitle] = await Promise.all([\n\t\ttime(() => getExercises({ request, timings }), {\n\t\t\ttimings,\n\t\t\ttype: 'getExercises',\n\t\t\tdesc: 'getExercises in $exerciseNumber.tsx',\n\t\t}),\n\t\ttime(() => getWorkshopTitle(), {\n\t\t\ttimings,\n\t\t\ttype: 'getWorkshopTitle',\n\t\t\tdesc: 'getWorkshopTitle in $exerciseNumber.tsx',\n\t\t}),\n\t])\n\tconst exercise = exercises.find(\n\t\t(e) => e.exerciseNumber === Number(params.exerciseNumber),\n\t)\n\tif (!exercise) {\n\t\tthrow new Response('Not found', { status: 404 })\n\t}\n\n\tconst readmeFilepath = path.join(\n\t\tgetWorkshopRoot(),\n\t\t'exercises',\n\t\texercise.dirName,\n\t\t'README.mdx',\n\t)\n\n\tconst firstStep = exercise.steps.find(Boolean)\n\n\tconst articleId = `workshop-${slugify(workshopTitle)}-${\n\t\texercise.exerciseNumber\n\t}-instructions`\n\n\treturn defer(\n\t\t{\n\t\t\tarticleId,\n\t\t\texercise,\n\t\t\texerciseNumber: exercise.exerciseNumber,\n\t\t\texerciseReadme: {\n\t\t\t\tfile: readmeFilepath,\n\t\t\t\trelativePath: `exercises/${exercise.dirName}`,\n\t\t\t},\n\t\t\texerciseTitle: exercise.title,\n\t\t\tfirstStep,\n\t\t\tfirstType: firstStep?.problem ? 'problem' : 'solution',\n\t\t\ttitle: workshopTitle,\n\t\t\tepicVideoInfosPromise: getEpicVideoInfos(\n\t\t\t\texercise.instructionsEpicVideoEmbeds,\n\t\t\t\t{ request },\n\t\t\t),\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 const headers: HeadersFunction = ({ loaderHeaders, parentHeaders }) => {\n\tconst headers = {\n\t\t'Cache-Control': loaderHeaders.get('Cache-Control') ?? '',\n\t\t'Server-Timing': combineServerTimings(loaderHeaders, parentHeaders),\n\t}\n\treturn headers\n}\n\nconst mdxComponents = { h1: () => null }\nexport default function ExerciseNumberRoute() {\n\tconst data = useLoaderData<typeof loader>()\n\n\tconst firstStepNumber = String(data.firstStep?.stepNumber ?? '01')\n\tconst firstStepPath = `${firstStepNumber.padStart(2, '0')}/${data.firstType}`\n\treturn (\n\t\t<main className=\"relative flex h-full w-full max-w-5xl flex-col justify-between border-r md:w-3/4 xl:w-2/3\">\n\t\t\t<article\n\t\t\t\tid={data.articleId}\n\t\t\t\tkey={data.articleId}\n\t\t\t\tclassName=\"shadow-on-scrollbox flex w-full flex-1 flex-col gap-12 overflow-y-scroll px-3 py-4 pt-6 scrollbar-thin scrollbar-thumb-scrollbar md:px-10 md:py-12 md:pt-16\"\n\t\t\t>\n\t\t\t\t<div>\n\t\t\t\t\t<h1 className=\"text-[clamp(3rem,6vw,8.5rem)] font-extrabold leading-none\">\n\t\t\t\t\t\t{data.exercise.title}\n\t\t\t\t\t</h1>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t{data.exercise.instructionsCode ? (\n\t\t\t\t\t\t<EpicVideoInfoProvider\n\t\t\t\t\t\t\tepicVideoInfosPromise={data.epicVideoInfosPromise}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div className=\"prose dark:prose-invert sm:prose-lg\">\n\t\t\t\t\t\t\t\t<Mdx\n\t\t\t\t\t\t\t\t\tcode={data.exercise.instructionsCode}\n\t\t\t\t\t\t\t\t\tcomponents={mdxComponents}\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</EpicVideoInfoProvider>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t'No instructions yet...'\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</article>\n\t\t\t<ElementScrollRestoration\n\t\t\t\telementQuery={`#${data.articleId}`}\n\t\t\t\tkey={`scroll-${data.articleId}`}\n\t\t\t/>\n\t\t\t<ProgressToggle\n\t\t\t\ttype=\"instructions\"\n\t\t\t\texerciseNumber={data.exerciseNumber}\n\t\t\t\tclassName=\"h-14 border-t px-6\"\n\t\t\t/>\n\t\t\t<div className=\"flex h-16 justify-between border-b-4 border-t lg:border-b-0\">\n\t\t\t\t<div />\n\t\t\t\t<EditFileOnGitHub\n\t\t\t\t\tfile={data.exerciseReadme.file}\n\t\t\t\t\trelativePath={data.exerciseReadme.relativePath}\n\t\t\t\t/>\n\t\t\t\t<Link\n\t\t\t\t\tto={firstStepPath}\n\t\t\t\t\tprefetch=\"intent\"\n\t\t\t\t\tclassName=\"flex h-full items-center justify-center bg-foreground px-7 text-background\"\n\t\t\t\t>\n\t\t\t\t\tStart Learning\n\t\t\t\t</Link>\n\t\t\t</div>\n\t\t</main>\n\t)\n}\n\nexport function ErrorBoundary() {\n\tconst error = useRouteError()\n\n\tif (typeof document !== 'undefined') {\n\t\tconsole.error(error)\n\t}\n\n\treturn isRouteErrorResponse(error) ? (\n\t\terror.status === 404 ? (\n\t\t\t<p>Sorry, we couldn't find that step.</p>\n\t\t) : (\n\t\t\t<p>\n\t\t\t\t{error.status} {error.data}\n\t\t\t</p>\n\t\t)\n\t) : (\n\t\t<p>{getErrorMessage(error)}</p>\n\t)\n}\n"],"names":["meta","data","matches","number","exercise","exerciseNumber","toString","padStart","rootData","find","m","id","title","getSeoMetaTags","workshopTitle","description","ogTitle","ogDescription","Number","instructor","requestInfo","mdxComponents","h1","ExerciseNumberRoute","useLoaderData","firstStepPath","String","firstStep","stepNumber","firstType","jsxs","className","children","articleId","jsx","instructionsCode","EpicVideoInfoProvider","epicVideoInfosPromise","Mdx","code","components","ElementScrollRestoration","elementQuery","ProgressToggle","type","EditFileOnGitHub","file","exerciseReadme","relativePath","Link","to","prefetch","ErrorBoundary","error","useRouteError","document","console","isRouteErrorResponse","status","getErrorMessage"],"mappings":"gkBAoCO,MAAMA,EAAiEA,CAAC,CAC9EC,KAAAA,EACAC,QAAAA,CACD,IAAM,OACC,MAAAC,EAASF,GAAAA,YAAAA,EAAMG,SAASC,eAAeC,WAAWC,SAAS,EAAG,KAE9DC,GAAWN,EAAAA,EAAQO,KAAMC,GAAMA,EAAEC,KAAO,MAAM,IAAnCT,YAAAA,EAAsCD,KACnD,MAAA,CAACA,GAAQ,CAACO,EAAiB,CAAC,CAAEI,MAAO,YAAa,CAAC,EAEhDC,EAAe,CACrBD,MAAO,QAAQT,CAAM,KAAKF,EAAKG,SAASQ,KAAK,MAAMJ,GAAAA,YAAAA,EAAUM,aAAa,GAC1EC,YAAa,oBAAoBZ,CAAM,KAAKF,EAAKG,SAASQ,KAAK,GAC/DI,QAASf,EAAKG,SAASQ,MACvBK,cAAe,6BAA6BC,OAAOf,CAAM,CAAC,GAC1DgB,WAAYX,EAASW,WACrBC,YAAaZ,EAASY,WACvB,CAAC,CACF,EAuEMC,EAAgB,CAAEC,GAAIA,IAAM,IAAK,EACvC,SAAwBC,GAAsB,OAC7C,MAAMtB,EAAOuB,IAGPC,EAAgB,GADEC,SAAOzB,EAAAA,EAAK0B,YAAL1B,YAAAA,EAAgB2B,aAAc,IAAI,EACxBrB,SAAS,EAAG,GAAG,CAAC,IAAIN,EAAK4B,SAAS,GAE1E,OAAAC,EAAAA,KAAC,OAAK,CAAAC,UAAU,4FACfC,SAAA,CAAAF,EAAA,KAAC,UAAA,CACAnB,GAAIV,EAAKgC,UAETF,UAAU,8JAEVC,SAAA,CAACE,EAAA,IAAA,MAAA,CACAF,eAAC,KAAG,CAAAD,UAAU,4DACZC,SAAK/B,EAAAG,SAASQ,MAChB,CACD,CAAA,EACCsB,EAAA,IAAA,MAAA,CACCF,SAAK/B,EAAAG,SAAS+B,iBACdD,EAAAA,IAACE,EAAA,CACAC,sBAAuBpC,EAAKoC,sBAE5BL,SAAAE,EAAA,IAAC,MAAI,CAAAH,UAAU,sCACdC,SAAAE,EAAA,IAACI,EAAA,CACAC,KAAMtC,EAAKG,SAAS+B,iBACpBK,WAAYnB,EACb,EACD,CACD,CAAA,EAEA,wBAEF,CAAA,CAAA,CAAA,EAvBKpB,EAAKgC,SAwBX,EACAC,EAAAA,IAACO,EAAA,CACAC,aAAc,IAAIzC,EAAKgC,SAAS,EAAA,EAC3B,UAAUhC,EAAKgC,SAAS,EAC9B,EACAC,EAAA,IAACS,EAAA,CACAC,KAAK,eACLvC,eAAgBJ,EAAKI,eACrB0B,UAAU,oBAAA,CACX,EACAD,EAAA,KAAC,MAAI,CAAAC,UAAU,8DACdC,SAAA,CAAAE,EAAAA,IAAC,MAAI,CAAA,CAAA,EACLA,EAAA,IAACW,EAAA,CACAC,KAAM7C,EAAK8C,eAAeD,KAC1BE,aAAc/C,EAAK8C,eAAeC,YAAA,CACnC,EACAd,EAAA,IAACe,EAAA,CACAC,GAAIzB,EACJ0B,SAAS,SACTpB,UAAU,6EACVC,SAAA,gBAAA,CAED,CAAA,CACD,CAAA,CAAA,CACD,CAAA,CAEF,CAEO,SAASoB,GAAgB,CAC/B,MAAMC,EAAQC,IAEV,OAAA,OAAOC,SAAa,KACvBC,QAAQH,MAAMA,CAAK,EAGbI,EAAqBJ,CAAK,EAChCA,EAAMK,SAAW,IAChBxB,EAAA,IAAC,IAAE,CAAAF,SAAA,oCAAA,CAAkC,EAErCF,EAAA,KAAC,IACC,CAAAE,SAAA,CAAMqB,EAAAK,OAAO,IAAEL,EAAMpD,IAAA,CAAA,CACvB,EAGDiC,EAAA,IAAC,IAAG,CAAAF,SAAA2B,EAAgBN,CAAK,CAAE,CAAA,CAE7B"}
@@ -1,2 +1,2 @@
1
- import{j as t,O as e,a as o,i as s}from"./index-D6ygCrVn.js";import{g as n}from"./misc-DNgC2Frq.js";import"./clsx-B-dksMZM.js";import"./components-C5xBZAiL.js";function d(){return t.jsx(e,{})}function c(){const r=o();return typeof document<"u"&&console.error(r),s(r)?r.status===404?t.jsx("p",{children:"Sorry, we couldn't find that step."}):t.jsxs("p",{children:[r.status," ",r.data]}):t.jsx("p",{children:n(r)})}export{c as ErrorBoundary,d as default};
2
- //# sourceMappingURL=_exerciseNumber_._stepNumber-C37pli7_.js.map
1
+ import{j as t,O as e,a as o,i as s}from"./index-Czg1ruVn.js";import{g as n}from"./misc-CypjEQkt.js";import"./clsx-B-dksMZM.js";import"./components-BMzmvxYw.js";function d(){return t.jsx(e,{})}function c(){const r=o();return typeof document<"u"&&console.error(r),s(r)?r.status===404?t.jsx("p",{children:"Sorry, we couldn't find that step."}):t.jsxs("p",{children:[r.status," ",r.data]}):t.jsx("p",{children:n(r)})}export{c as ErrorBoundary,d as default};
2
+ //# sourceMappingURL=_exerciseNumber_._stepNumber-DCbWNWpZ.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"_exerciseNumber_._stepNumber-C37pli7_.js","sources":["../../../app/routes/_app+/_exercises+/$exerciseNumber_.$stepNumber.tsx"],"sourcesContent":["import { invariantResponse } from '@epic-web/invariant'\nimport {\n\tgetExercises,\n\tgetWorkshopTitle,\n} from '@epic-web/workshop-utils/apps.server'\nimport {\n\tcombineServerTimings,\n\tgetServerTimeHeader,\n\tmakeTimings,\n} from '@epic-web/workshop-utils/timing.server'\nimport {\n\tjson,\n\ttype HeadersFunction,\n\ttype LoaderFunctionArgs,\n} from '@remix-run/node'\nimport { Outlet, isRouteErrorResponse, useRouteError } from '@remix-run/react'\nimport { getErrorMessage } from '#app/utils/misc.tsx'\n\nexport async function loader({ request, params }: LoaderFunctionArgs) {\n\tconst timings = makeTimings('stepLoader')\n\tinvariantResponse(params.exerciseNumber, 'exerciseNumber is required')\n\tconst [exercises, workshopTitle] = await Promise.all([\n\t\tgetExercises({ request, timings }),\n\t\tgetWorkshopTitle(),\n\t])\n\tconst exercise = exercises.find(\n\t\t(e) => e.exerciseNumber === Number(params.exerciseNumber),\n\t)\n\tif (!exercise) {\n\t\tthrow new Response('Not found', { status: 404 })\n\t}\n\n\tconst result = json(\n\t\t{\n\t\t\texerciseNumber: exercise.exerciseNumber,\n\t\t\texerciseTitle: exercise.title,\n\t\t\ttitle: workshopTitle,\n\t\t\texercises: exercises.map((e) => ({\n\t\t\t\texerciseNumber: e.exerciseNumber,\n\t\t\t\ttitle: e.title,\n\t\t\t})),\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\treturn result\n}\n\nexport const headers: HeadersFunction = ({ loaderHeaders, parentHeaders }) => {\n\tconst headers = {\n\t\t'Cache-Control': loaderHeaders.get('Cache-Control') ?? '',\n\t\t'Server-Timing': combineServerTimings(loaderHeaders, parentHeaders),\n\t}\n\treturn headers\n}\n\nexport default function StepRoute() {\n\treturn <Outlet />\n}\n\nexport function ErrorBoundary() {\n\tconst error = useRouteError()\n\n\tif (typeof document !== 'undefined') {\n\t\tconsole.error(error)\n\t}\n\n\treturn isRouteErrorResponse(error) ? (\n\t\terror.status === 404 ? (\n\t\t\t<p>Sorry, we couldn't find that step.</p>\n\t\t) : (\n\t\t\t<p>\n\t\t\t\t{error.status} {error.data}\n\t\t\t</p>\n\t\t)\n\t) : (\n\t\t<p>{getErrorMessage(error)}</p>\n\t)\n}\n"],"names":["StepRoute","Outlet","ErrorBoundary","error","useRouteError","document","console","isRouteErrorResponse","status","jsx","children","jsxs","data","getErrorMessage"],"mappings":"gKA2DA,SAAwBA,GAAY,CACnC,aAAQC,EAAO,CAAA,CAAA,CAChB,CAEO,SAASC,GAAgB,CAC/B,MAAMC,EAAQC,IAEV,OAAA,OAAOC,SAAa,KACvBC,QAAQH,MAAMA,CAAK,EAGbI,EAAqBJ,CAAK,EAChCA,EAAMK,SAAW,IAChBC,EAAA,IAAC,IAAE,CAAAC,SAAA,oCAAA,CAAkC,EAErCC,EAAA,KAAC,IACC,CAAAD,SAAA,CAAMP,EAAAK,OAAO,IAAEL,EAAMS,IAAA,CAAA,CACvB,EAGDH,EAAA,IAAC,IAAG,CAAAC,SAAAG,EAAgBV,CAAK,CAAE,CAAA,CAE7B"}
1
+ {"version":3,"file":"_exerciseNumber_._stepNumber-DCbWNWpZ.js","sources":["../../../app/routes/_app+/_exercises+/$exerciseNumber_.$stepNumber.tsx"],"sourcesContent":["import { invariantResponse } from '@epic-web/invariant'\nimport {\n\tgetExercises,\n\tgetWorkshopTitle,\n} from '@epic-web/workshop-utils/apps.server'\nimport {\n\tcombineServerTimings,\n\tgetServerTimeHeader,\n\tmakeTimings,\n} from '@epic-web/workshop-utils/timing.server'\nimport {\n\tjson,\n\ttype HeadersFunction,\n\ttype LoaderFunctionArgs,\n} from '@remix-run/node'\nimport { Outlet, isRouteErrorResponse, useRouteError } from '@remix-run/react'\nimport { getErrorMessage } from '#app/utils/misc.tsx'\n\nexport async function loader({ request, params }: LoaderFunctionArgs) {\n\tconst timings = makeTimings('stepLoader')\n\tinvariantResponse(params.exerciseNumber, 'exerciseNumber is required')\n\tconst [exercises, workshopTitle] = await Promise.all([\n\t\tgetExercises({ request, timings }),\n\t\tgetWorkshopTitle(),\n\t])\n\tconst exercise = exercises.find(\n\t\t(e) => e.exerciseNumber === Number(params.exerciseNumber),\n\t)\n\tif (!exercise) {\n\t\tthrow new Response('Not found', { status: 404 })\n\t}\n\n\tconst result = json(\n\t\t{\n\t\t\texerciseNumber: exercise.exerciseNumber,\n\t\t\texerciseTitle: exercise.title,\n\t\t\ttitle: workshopTitle,\n\t\t\texercises: exercises.map((e) => ({\n\t\t\t\texerciseNumber: e.exerciseNumber,\n\t\t\t\ttitle: e.title,\n\t\t\t})),\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\treturn result\n}\n\nexport const headers: HeadersFunction = ({ loaderHeaders, parentHeaders }) => {\n\tconst headers = {\n\t\t'Cache-Control': loaderHeaders.get('Cache-Control') ?? '',\n\t\t'Server-Timing': combineServerTimings(loaderHeaders, parentHeaders),\n\t}\n\treturn headers\n}\n\nexport default function StepRoute() {\n\treturn <Outlet />\n}\n\nexport function ErrorBoundary() {\n\tconst error = useRouteError()\n\n\tif (typeof document !== 'undefined') {\n\t\tconsole.error(error)\n\t}\n\n\treturn isRouteErrorResponse(error) ? (\n\t\terror.status === 404 ? (\n\t\t\t<p>Sorry, we couldn't find that step.</p>\n\t\t) : (\n\t\t\t<p>\n\t\t\t\t{error.status} {error.data}\n\t\t\t</p>\n\t\t)\n\t) : (\n\t\t<p>{getErrorMessage(error)}</p>\n\t)\n}\n"],"names":["StepRoute","Outlet","ErrorBoundary","error","useRouteError","document","console","isRouteErrorResponse","status","jsx","children","jsxs","data","getErrorMessage"],"mappings":"gKA2DA,SAAwBA,GAAY,CACnC,aAAQC,EAAO,CAAA,CAAA,CAChB,CAEO,SAASC,GAAgB,CAC/B,MAAMC,EAAQC,IAEV,OAAA,OAAOC,SAAa,KACvBC,QAAQH,MAAMA,CAAK,EAGbI,EAAqBJ,CAAK,EAChCA,EAAMK,SAAW,IAChBC,EAAA,IAAC,IAAE,CAAAC,SAAA,oCAAA,CAAkC,EAErCC,EAAA,KAAC,IACC,CAAAD,SAAA,CAAMP,EAAAK,OAAO,IAAEL,EAAMS,IAAA,CAAA,CACvB,EAGDH,EAAA,IAAC,IAAG,CAAAC,SAAAG,EAAgBV,CAAK,CAAE,CAAA,CAE7B"}
@@ -0,0 +1,2 @@
1
+ import{j as r,r as n}from"./index-Czg1ruVn.js";import{E as c}from"./index-D6ukHE4T.js";import{E as a}from"./epic-video-CYnG2ziQ.js";import{L as m}from"./loading-CNWJVymJ.js";import{N as x}from"./nav-chevrons-BYKwyIgG.js";import{M as d,E as f}from"./mdx-CR7Me1v_.js";import{P as p}from"./progress-B_mReZVE.js";import{c as u}from"./misc-CypjEQkt.js";import{g as h}from"./seo-Bu3_n5my.js";import{u as b,L as j}from"./components-BMzmvxYw.js";import"./index-90bzTYUX.js";import"./request-info-CUT0ULYN.js";import"./tooltip-CfmIzAYi.js";import"./client-hints-BE5mB4r0.js";import"./clsx-B-dksMZM.js";import"./progress-bar-DCrt7X4t.js";const R=({data:e,matches:i})=>{var o;const t=e==null?void 0:e.exercise.exerciseNumber.toString().padStart(2,"0"),s=(o=i.find(l=>l.id==="root"))==null?void 0:o.data;return!e||!s?[{title:"🦉 | Error"}]:h({title:`🦉 | ${t}. ${e.exercise.title} | ${s==null?void 0:s.workshopTitle}`,description:`Elaboration for ${t}. ${e.exercise.title}`,ogTitle:`Finished: ${e.exercise.title}`,ogDescription:`Elaboration for exercise ${Number(t)}`,instructor:s.instructor,requestInfo:s.requestInfo})},g={h1:()=>null};function U(){const e=b(),i=e.exercise.exerciseNumber.toString().padStart(2,"0");return r.jsx("div",{className:"flex max-w-full flex-grow flex-col",children:r.jsxs("main",{className:"flex flex-grow flex-col sm:grid sm:h-full sm:min-h-[800px] sm:grid-cols-1 sm:grid-rows-2 md:min-h-[unset] lg:grid-cols-2 lg:grid-rows-1",children:[r.jsxs("div",{className:"relative flex flex-col sm:col-span-1 sm:row-span-1 sm:h-full lg:border-r",children:[r.jsx("h1",{className:"h-14 border-b pl-10 pr-5 text-sm font-medium leading-tight",children:r.jsx("div",{className:"flex h-14 flex-wrap items-center justify-between gap-x-2 py-2",children:r.jsxs("div",{className:"flex items-center justify-start gap-x-2",children:[r.jsx(j,{to:`/${i}`,className:"hover:underline",children:`${i}. ${e.exercise.title}`}),r.jsx("span",{children:"/"}),r.jsx("span",{children:"Elaboration"})]})})}),r.jsx("article",{className:"shadow-on-scrollbox h-full w-full max-w-none flex-1 scroll-pt-6 space-y-6 overflow-y-auto p-2 scrollbar-thin scrollbar-thumb-scrollbar sm:p-10 sm:pt-8",id:e.articleId,children:e.exercise.finishedCode?r.jsx(a,{epicVideoInfosPromise:e.epicVideoInfosPromise,children:r.jsx("div",{className:"prose dark:prose-invert sm:prose-lg",children:r.jsx(d,{code:e.exercise.finishedCode,components:g})})}):"No finished instructions yet..."}),r.jsx(c,{elementQuery:`#${e.articleId}`}),r.jsx(p,{type:"finished",exerciseNumber:e.exercise.exerciseNumber,className:"h-14 border-t px-6"}),r.jsxs("div",{className:"flex h-16 justify-between border-b-4 border-t lg:border-b-0",children:[r.jsx("div",{}),e.exerciseFinished?r.jsx(f,{file:e.exerciseFinished.file,relativePath:e.exerciseFinished.relativePath}):null,r.jsx(x,{prev:e.prevStepLink,next:e.nextStepLink})]})]}),r.jsx(N,{exerciseFormEmbedUrl:e.exerciseFormEmbedUrl,exerciseTitle:e.exercise.title})]})})}function N({exerciseFormEmbedUrl:e,exerciseTitle:i}){const[t,s]=n.useState(!1);return r.jsxs("div",{className:"relative min-h-full sm:min-h-[unset] sm:flex-shrink-0",children:[t?null:r.jsx("div",{className:"absolute inset-0 z-10 flex items-center justify-center",children:r.jsx(m,{children:r.jsxs("span",{children:["Loading ",i," Elaboration form"]})})}),r.jsx("iframe",{onLoad:()=>s(!0),title:"Elaboration",src:e,className:u("absolute inset-0 flex h-full w-full transition-opacity duration-300",t?"opacity-100":"opacity-0")})]})}export{U as default,R as meta};
2
+ //# sourceMappingURL=_exerciseNumber_.finished-P7xMAtl1.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_exerciseNumber_.finished-P7xMAtl1.js","sources":["../../../app/routes/_app+/_exercises+/$exerciseNumber_.finished.tsx"],"sourcesContent":["import path from 'path'\nimport { invariantResponse } from '@epic-web/invariant'\nimport { ElementScrollRestoration } from '@epic-web/restore-scroll'\nimport {\n\tgetAppPageRoute,\n\tgetApps,\n\tgetExercise,\n\tgetWorkshopRoot,\n\tgetWorkshopTitle,\n\tisExerciseStepApp,\n} from '@epic-web/workshop-utils/apps.server'\nimport {\n\tcombineServerTimings,\n\tgetServerTimeHeader,\n\tmakeTimings,\n} from '@epic-web/workshop-utils/timing.server'\nimport { getPkgProp } from '@epic-web/workshop-utils/utils.server'\nimport {\n\tdefer,\n\ttype HeadersFunction,\n\ttype LoaderFunctionArgs,\n\ttype MetaFunction,\n} from '@remix-run/node'\nimport { Link, useLoaderData } from '@remix-run/react'\nimport slugify from '@sindresorhus/slugify'\nimport * as React from 'react'\nimport { EpicVideoInfoProvider } from '#app/components/epic-video.tsx'\nimport { Loading } from '#app/components/loading.tsx'\nimport { NavChevrons } from '#app/components/nav-chevrons.tsx'\nimport { type loader as rootLoader } from '#app/root.tsx'\nimport { EditFileOnGitHub } from '#app/routes/launch-editor.tsx'\nimport { ProgressToggle } from '#app/routes/progress.tsx'\nimport { getEpicVideoInfos } from '#app/utils/epic-api.ts'\nimport { Mdx } from '#app/utils/mdx.tsx'\nimport { cn } from '#app/utils/misc.tsx'\nimport { getSeoMetaTags } from '#app/utils/seo.js'\n\nexport const meta: MetaFunction<typeof loader, { root: typeof rootLoader }> = ({\n\tdata,\n\tmatches,\n}) => {\n\tconst number = data?.exercise.exerciseNumber.toString().padStart(2, '0')\n\n\tconst rootData = matches.find((m) => m.id === 'root')?.data\n\tif (!data || !rootData) return [{ title: '🦉 | Error' }]\n\n\treturn getSeoMetaTags({\n\t\ttitle: `🦉 | ${number}. ${data.exercise.title} | ${rootData?.workshopTitle}`,\n\t\tdescription: `Elaboration for ${number}. ${data.exercise.title}`,\n\t\togTitle: `Finished: ${data.exercise.title}`,\n\t\togDescription: `Elaboration for exercise ${Number(number)}`,\n\t\tinstructor: rootData.instructor,\n\t\trequestInfo: rootData.requestInfo,\n\t})\n}\n\nexport async function loader({ request, params }: LoaderFunctionArgs) {\n\tconst timings = makeTimings('exerciseFinishedLoader')\n\tinvariantResponse(params.exerciseNumber, 'exerciseNumber is required')\n\tconst exercise = await getExercise(params.exerciseNumber, {\n\t\ttimings,\n\t\trequest,\n\t})\n\tif (!exercise) {\n\t\tthrow new Response('Not found', { status: 404 })\n\t}\n\tconst workshopTitle = await getWorkshopTitle()\n\tconst workshopRoot = getWorkshopRoot()\n\tconst exerciseFormTemplate = await getPkgProp(\n\t\tworkshopRoot,\n\t\t'epicshop.forms.exercise',\n\t\t`https://docs.google.com/forms/d/e/1FAIpQLSf3o9xyjQepTlOTH5Z7ZwkeSTdXh6YWI_RGc9KiyD3oUN0p6w/viewform?hl=en&embedded=true&entry.1836176234={workshopTitle}&entry.428900931={exerciseTitle}`,\n\t)\n\tconst exerciseFormEmbedUrl = exerciseFormTemplate\n\t\t.replace('{workshopTitle}', encodeURIComponent(workshopTitle))\n\t\t.replace('{exerciseTitle}', encodeURIComponent(exercise.title))\n\tconst nextExercise = await getExercise(exercise.exerciseNumber + 1, {\n\t\ttimings,\n\t\trequest,\n\t})\n\n\tconst finishedFilepath = path.join(\n\t\tgetWorkshopRoot(),\n\t\t'exercises',\n\t\texercise.dirName,\n\t\t'FINISHED.mdx',\n\t)\n\n\tconst apps = await getApps({ request, timings })\n\tconst exerciseApps = apps\n\t\t.filter(isExerciseStepApp)\n\t\t.filter((app) => app.exerciseNumber === exercise.exerciseNumber)\n\tconst prevApp = exerciseApps[exerciseApps.length - 1]\n\n\tconst articleId = `workshop-${slugify(workshopTitle)}-${\n\t\texercise.exerciseNumber\n\t}-finished`\n\n\treturn defer(\n\t\t{\n\t\t\tarticleId,\n\t\t\tworkshopTitle,\n\t\t\texercise,\n\t\t\texerciseFormEmbedUrl,\n\t\t\tepicVideoInfosPromise: getEpicVideoInfos(\n\t\t\t\texercise.finishedEpicVideoEmbeds,\n\t\t\t\t{ request },\n\t\t\t),\n\t\t\texerciseFinished: exercise.finishedCode\n\t\t\t\t? {\n\t\t\t\t\t\tfile: finishedFilepath,\n\t\t\t\t\t\trelativePath: `exercises/${exercise.dirName}/FINISHED.mdx`,\n\t\t\t\t\t}\n\t\t\t\t: null,\n\t\t\tprevStepLink: prevApp\n\t\t\t\t? {\n\t\t\t\t\t\tto: getAppPageRoute(prevApp),\n\t\t\t\t\t\t'aria-label': `${prevApp.title} (${prevApp.type})`,\n\t\t\t\t\t}\n\t\t\t\t: null,\n\t\t\tnextStepLink: nextExercise\n\t\t\t\t? {\n\t\t\t\t\t\tto: `/${nextExercise.exerciseNumber.toString().padStart(2, '0')}`,\n\t\t\t\t\t\t'aria-label': `${nextExercise.title}`,\n\t\t\t\t\t}\n\t\t\t\t: {\n\t\t\t\t\t\tto: '/finished',\n\t\t\t\t\t\t'aria-label': 'Finished! 🎉',\n\t\t\t\t\t},\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 const headers: HeadersFunction = ({ loaderHeaders, parentHeaders }) => {\n\tconst headers = {\n\t\t'Cache-Control': loaderHeaders.get('Cache-Control') ?? '',\n\t\t'Server-Timing': combineServerTimings(loaderHeaders, parentHeaders),\n\t}\n\treturn headers\n}\n\nconst mdxComponents = { h1: () => null }\nexport default function ExerciseFinished() {\n\tconst data = useLoaderData<typeof loader>()\n\tconst exerciseNumber = data.exercise.exerciseNumber\n\t\t.toString()\n\t\t.padStart(2, '0')\n\n\treturn (\n\t\t<div className=\"flex max-w-full flex-grow flex-col\">\n\t\t\t<main className=\"flex flex-grow flex-col sm:grid sm:h-full sm:min-h-[800px] sm:grid-cols-1 sm:grid-rows-2 md:min-h-[unset] lg:grid-cols-2 lg:grid-rows-1\">\n\t\t\t\t<div className=\"relative flex flex-col sm:col-span-1 sm:row-span-1 sm:h-full lg:border-r\">\n\t\t\t\t\t<h1 className=\"h-14 border-b pl-10 pr-5 text-sm font-medium leading-tight\">\n\t\t\t\t\t\t<div className=\"flex h-14 flex-wrap items-center justify-between gap-x-2 py-2\">\n\t\t\t\t\t\t\t<div className=\"flex items-center justify-start gap-x-2\">\n\t\t\t\t\t\t\t\t<Link to={`/${exerciseNumber}`} className=\"hover:underline\">\n\t\t\t\t\t\t\t\t\t{`${exerciseNumber}. ${data.exercise.title}`}\n\t\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t\t\t<span>/</span>\n\t\t\t\t\t\t\t\t<span>Elaboration</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</h1>\n\n\t\t\t\t\t<article\n\t\t\t\t\t\tclassName=\"shadow-on-scrollbox h-full w-full max-w-none flex-1 scroll-pt-6 space-y-6 overflow-y-auto p-2 scrollbar-thin scrollbar-thumb-scrollbar sm:p-10 sm:pt-8\"\n\t\t\t\t\t\tid={data.articleId}\n\t\t\t\t\t>\n\t\t\t\t\t\t{data.exercise.finishedCode ? (\n\t\t\t\t\t\t\t<EpicVideoInfoProvider\n\t\t\t\t\t\t\t\tepicVideoInfosPromise={data.epicVideoInfosPromise}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<div className=\"prose dark:prose-invert sm:prose-lg\">\n\t\t\t\t\t\t\t\t\t<Mdx\n\t\t\t\t\t\t\t\t\t\tcode={data.exercise.finishedCode}\n\t\t\t\t\t\t\t\t\t\tcomponents={mdxComponents}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</EpicVideoInfoProvider>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t// TODO: render a random dad joke...\n\t\t\t\t\t\t\t'No finished instructions yet...'\n\t\t\t\t\t\t)}\n\t\t\t\t\t</article>\n\t\t\t\t\t<ElementScrollRestoration elementQuery={`#${data.articleId}`} />\n\t\t\t\t\t<ProgressToggle\n\t\t\t\t\t\ttype=\"finished\"\n\t\t\t\t\t\texerciseNumber={data.exercise.exerciseNumber}\n\t\t\t\t\t\tclassName=\"h-14 border-t px-6\"\n\t\t\t\t\t/>\n\t\t\t\t\t<div className=\"flex h-16 justify-between border-b-4 border-t lg:border-b-0\">\n\t\t\t\t\t\t<div />\n\t\t\t\t\t\t{data.exerciseFinished ? (\n\t\t\t\t\t\t\t<EditFileOnGitHub\n\t\t\t\t\t\t\t\tfile={data.exerciseFinished.file}\n\t\t\t\t\t\t\t\trelativePath={data.exerciseFinished.relativePath}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t<NavChevrons prev={data.prevStepLink} next={data.nextStepLink} />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<Survey\n\t\t\t\t\texerciseFormEmbedUrl={data.exerciseFormEmbedUrl}\n\t\t\t\t\texerciseTitle={data.exercise.title}\n\t\t\t\t/>\n\t\t\t</main>\n\t\t</div>\n\t)\n}\n\nfunction Survey({\n\texerciseFormEmbedUrl,\n\texerciseTitle,\n}: {\n\texerciseFormEmbedUrl: string\n\texerciseTitle: string\n}) {\n\tconst [iframeLoaded, setIframeLoaded] = React.useState(false)\n\treturn (\n\t\t<div className=\"relative min-h-full sm:min-h-[unset] sm:flex-shrink-0\">\n\t\t\t{!iframeLoaded ? (\n\t\t\t\t<div className=\"absolute inset-0 z-10 flex items-center justify-center\">\n\t\t\t\t\t<Loading>\n\t\t\t\t\t\t<span>Loading {exerciseTitle} Elaboration form</span>\n\t\t\t\t\t</Loading>\n\t\t\t\t</div>\n\t\t\t) : null}\n\t\t\t<iframe\n\t\t\t\tonLoad={() => setIframeLoaded(true)}\n\t\t\t\ttitle=\"Elaboration\"\n\t\t\t\tsrc={exerciseFormEmbedUrl}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'absolute inset-0 flex h-full w-full transition-opacity duration-300',\n\t\t\t\t\tiframeLoaded ? 'opacity-100' : 'opacity-0',\n\t\t\t\t)}\n\t\t\t/>\n\t\t</div>\n\t)\n}\n"],"names":["meta","data","matches","number","exercise","exerciseNumber","toString","padStart","rootData","find","m","id","title","getSeoMetaTags","workshopTitle","description","ogTitle","ogDescription","Number","instructor","requestInfo","mdxComponents","h1","ExerciseFinished","useLoaderData","className","children","jsxs","jsx","Link","to","articleId","finishedCode","EpicVideoInfoProvider","epicVideoInfosPromise","Mdx","code","components","ElementScrollRestoration","elementQuery","ProgressToggle","type","exerciseFinished","EditFileOnGitHub","file","relativePath","NavChevrons","prev","prevStepLink","next","nextStepLink","Survey","exerciseFormEmbedUrl","exerciseTitle","iframeLoaded","setIframeLoaded","React","Loading","onLoad","src","cn"],"mappings":"onBAqCO,MAAMA,EAAiEA,CAAC,CAC9EC,KAAAA,EACAC,QAAAA,CACD,IAAM,OACC,MAAAC,EAASF,GAAAA,YAAAA,EAAMG,SAASC,eAAeC,WAAWC,SAAS,EAAG,KAE9DC,GAAWN,EAAAA,EAAQO,KAAMC,GAAMA,EAAEC,KAAO,MAAM,IAAnCT,YAAAA,EAAsCD,KACnD,MAAA,CAACA,GAAQ,CAACO,EAAiB,CAAC,CAAEI,MAAO,YAAa,CAAC,EAEhDC,EAAe,CACrBD,MAAO,QAAQT,CAAM,KAAKF,EAAKG,SAASQ,KAAK,MAAMJ,GAAAA,YAAAA,EAAUM,aAAa,GAC1EC,YAAa,mBAAmBZ,CAAM,KAAKF,EAAKG,SAASQ,KAAK,GAC9DI,QAAS,aAAaf,EAAKG,SAASQ,KAAK,GACzCK,cAAe,4BAA4BC,OAAOf,CAAM,CAAC,GACzDgB,WAAYX,EAASW,WACrBC,YAAaZ,EAASY,WACvB,CAAC,CACF,EA4FMC,EAAgB,CAAEC,GAAIA,IAAM,IAAK,EACvC,SAAwBC,GAAmB,CAC1C,MAAMtB,EAAOuB,IACPnB,EAAiBJ,EAAKG,SAASC,eACnCC,WACAC,SAAS,EAAG,GAAG,EAEjB,aACE,MAAI,CAAAkB,UAAU,qCACdC,SAACC,EAAA,KAAA,OAAA,CAAKF,UAAU,0IACfC,SAAA,CAACC,EAAA,KAAA,MAAA,CAAIF,UAAU,2EACdC,SAAA,CAACE,EAAA,IAAA,KAAA,CAAGH,UAAU,6DACbC,SAACE,EAAA,IAAA,MAAA,CAAIH,UAAU,gEACdC,SAAAC,EAAA,KAAC,MAAI,CAAAF,UAAU,0CACdC,SAAA,CAAAE,EAAA,IAACC,EAAK,CAAAC,GAAI,IAAIzB,CAAc,GAAIoB,UAAU,kBACxCC,SAAA,GAAGrB,CAAc,KAAKJ,EAAKG,SAASQ,KAAK,EAC3C,CAAA,EACAgB,EAAA,IAAC,QAAKF,SAAC,GAAA,CAAA,EACPE,EAAA,IAAC,QAAKF,SAAW,aAAA,CAAA,CAAA,EAClB,EACD,CACD,CAAA,EAEAE,EAAA,IAAC,UAAA,CACAH,UAAU,yJACVd,GAAIV,EAAK8B,UAERL,SAAAzB,EAAKG,SAAS4B,aACdJ,EAAAA,IAACK,EAAA,CACAC,sBAAuBjC,EAAKiC,sBAE5BR,SAAAE,EAAA,IAAC,MAAI,CAAAH,UAAU,sCACdC,SAAAE,EAAA,IAACO,EAAA,CACAC,KAAMnC,EAAKG,SAAS4B,aACpBK,WAAYhB,EACb,EACD,CAAA,CACD,EAGA,iCAAA,CAEF,QACCiB,EAAyB,CAAAC,aAAc,IAAItC,EAAK8B,SAAS,EAAI,CAAA,EAC9DH,EAAA,IAACY,EAAA,CACAC,KAAK,WACLpC,eAAgBJ,EAAKG,SAASC,eAC9BoB,UAAU,oBAAA,CACX,EACAE,EAAA,KAAC,MAAI,CAAAF,UAAU,8DACdC,SAAA,CAAAE,EAAA,IAAC,MAAI,CAAA,CAAA,EACJ3B,EAAKyC,iBACLd,EAAA,IAACe,EAAA,CACAC,KAAM3C,EAAKyC,iBAAiBE,KAC5BC,aAAc5C,EAAKyC,iBAAiBG,aACrC,EACG,WACHC,EAAY,CAAAC,KAAM9C,EAAK+C,aAAcC,KAAMhD,EAAKiD,YAAc,CAAA,CAAA,CAChE,CAAA,CAAA,CACD,CAAA,EACAtB,EAAA,IAACuB,EAAA,CACAC,qBAAsBnD,EAAKmD,qBAC3BC,cAAepD,EAAKG,SAASQ,KAAA,CAC9B,CAAA,EACD,CACD,CAAA,CAEF,CAEA,SAASuC,EAAO,CACfC,qBAAAA,EACAC,cAAAA,CACD,EAGG,CACF,KAAM,CAACC,EAAcC,CAAe,EAAIC,WAAe,EAAK,EAE3D,OAAA7B,EAAAA,KAAC,MAAI,CAAAF,UAAU,wDACbC,SAAA,CAAC4B,EAME,WALF,MAAI,CAAA7B,UAAU,yDACdC,SAACE,EAAA,IAAA6B,EAAA,CACA/B,gBAAC,OAAK,CAAAA,SAAA,CAAA,WAAS2B,EAAc,mBAAA,EAAiB,EAC/C,EACD,EAEDzB,EAAA,IAAC,SAAA,CACA8B,OAAQA,IAAMH,EAAgB,EAAI,EAClC3C,MAAM,cACN+C,IAAKP,EACL3B,UAAWmC,EACV,sEACAN,EAAe,cAAgB,WAChC,CAAA,CACD,CAAA,CACD,CAAA,CAEF"}
@@ -0,0 +1,2 @@
1
+ import{r as x,j as e,n as pe,k as xe,d as Rt}from"./index-Czg1ruVn.js";import{E as kt}from"./index-D6ukHE4T.js";import{c as Pe,u as $e,f as Ce,n as Ot,P as J,a as V,g as Te,b as De,S as G,T as It,h as fe,i as he,j as me,l as Ve,A as ze,d as Mt,D as _t,C as Ft,m as At,R as Lt}from"./tooltip-CfmIzAYi.js";import{c as Ut,u as Ge,R as Ht,T as Yt,V as Bt,I as Vt,P as zt,C as Gt,S as Kt,a as Wt,G as qt,L as Zt,b as Jt,d as Qt,e as Xt,f as er,g as tr,A as rr,D as nr}from"./diff-P5f7-8E4.js";import{c as re}from"./clsx-B-dksMZM.js";import{G as sr}from"./error-boundary-DxfVshQ5.js";import{N as ar}from"./nav-chevrons-BYKwyIgG.js";import{M as or,L as ce,E as ir}from"./mdx-CR7Me1v_.js";import{P as lr}from"./progress-B_mReZVE.js";import{I as O,u as Ee,a as Re,c as be,b as ke}from"./misc-CypjEQkt.js";import{s as Oe}from"./progress-bar-DCrt7X4t.js";import{a as K,u as W,A as Ke,L as ae,c as Ie,F as cr}from"./components-BMzmvxYw.js";import{g as ur}from"./seo-Bu3_n5my.js";import{L as We}from"./loading-CNWJVymJ.js";import{u as dr}from"./client-hints-BE5mB4r0.js";import{D as fr,u as hr}from"./discord-COPE8EOZ.js";import{J as mr}from"./index-Doi37489.js";import{z as h,u as Me}from"./request-info-CUT0ULYN.js";import{B as qe}from"./button-CyZl24U2.js";import{E as pr}from"./epic-video-CYnG2ziQ.js";import{u as xr}from"./use-event-source-ySol3hbz.js";import{h as gr,R as vr,u as jr,F as br,P as wr}from"./index-4E9_Sx3m.js";import"./user-C4QTtQw5.js";import"./index-90bzTYUX.js";var je="rovingFocusGroup.onEntryFocus",yr={bubbles:!1,cancelable:!0},ge="RovingFocusGroup",[we,Ze,Nr]=Ut(ge),[Sr,Je]=Pe(ge,[Nr]),[Pr,$r]=Sr(ge),Qe=x.forwardRef((t,s)=>e.jsx(we.Provider,{scope:t.__scopeRovingFocusGroup,children:e.jsx(we.Slot,{scope:t.__scopeRovingFocusGroup,children:e.jsx(Cr,{...t,ref:s})})}));Qe.displayName=ge;var Cr=x.forwardRef((t,s)=>{const{__scopeRovingFocusGroup:n,orientation:r,loop:a=!1,dir:o,currentTabStopId:i,defaultCurrentTabStopId:c,onCurrentTabStopIdChange:l,onEntryFocus:m,preventScrollOnEntryFocus:u=!1,...p}=t,g=x.useRef(null),y=$e(s,g),S=Ge(o),[d=null,$]=Ce({prop:i,defaultProp:c,onChange:l}),[T,j]=x.useState(!1),E=Ot(m),L=Ze(n),R=x.useRef(!1),[F,U]=x.useState(0);return x.useEffect(()=>{const k=g.current;if(k)return k.addEventListener(je,E),()=>k.removeEventListener(je,E)},[E]),e.jsx(Pr,{scope:n,orientation:r,dir:S,loop:a,currentTabStopId:d,onItemFocus:x.useCallback(k=>$(k),[$]),onItemShiftTab:x.useCallback(()=>j(!0),[]),onFocusableItemAdd:x.useCallback(()=>U(k=>k+1),[]),onFocusableItemRemove:x.useCallback(()=>U(k=>k-1),[]),children:e.jsx(J.div,{tabIndex:T||F===0?-1:0,"data-orientation":r,...p,ref:y,style:{outline:"none",...t.style},onMouseDown:V(t.onMouseDown,()=>{R.current=!0}),onFocus:V(t.onFocus,k=>{const Y=!R.current;if(k.target===k.currentTarget&&Y&&!T){const M=new CustomEvent(je,yr);if(k.currentTarget.dispatchEvent(M),!M.defaultPrevented){const D=L().filter(f=>f.focusable),q=D.find(f=>f.active),X=D.find(f=>f.id===d),v=[q,X,...D].filter(Boolean).map(f=>f.ref.current);tt(v,u)}}R.current=!1}),onBlur:V(t.onBlur,()=>j(!1))})})}),Xe="RovingFocusGroupItem",et=x.forwardRef((t,s)=>{const{__scopeRovingFocusGroup:n,focusable:r=!0,active:a=!1,tabStopId:o,...i}=t,c=Te(),l=o||c,m=$r(Xe,n),u=m.currentTabStopId===l,p=Ze(n),{onFocusableItemAdd:g,onFocusableItemRemove:y}=m;return x.useEffect(()=>{if(r)return g(),()=>y()},[r,g,y]),e.jsx(we.ItemSlot,{scope:n,id:l,focusable:r,active:a,children:e.jsx(J.span,{tabIndex:u?0:-1,"data-orientation":m.orientation,...i,ref:s,onMouseDown:V(t.onMouseDown,S=>{r?m.onItemFocus(l):S.preventDefault()}),onFocus:V(t.onFocus,()=>m.onItemFocus(l)),onKeyDown:V(t.onKeyDown,S=>{if(S.key==="Tab"&&S.shiftKey){m.onItemShiftTab();return}if(S.target!==S.currentTarget)return;const d=Er(S,m.orientation,m.dir);if(d!==void 0){if(S.metaKey||S.ctrlKey||S.altKey||S.shiftKey)return;S.preventDefault();let T=p().filter(j=>j.focusable).map(j=>j.ref.current);if(d==="last")T.reverse();else if(d==="prev"||d==="next"){d==="prev"&&T.reverse();const j=T.indexOf(S.currentTarget);T=m.loop?Rr(T,j+1):T.slice(j+1)}setTimeout(()=>tt(T))}})})})});et.displayName=Xe;var Tr={ArrowLeft:"prev",ArrowUp:"prev",ArrowRight:"next",ArrowDown:"next",PageUp:"first",Home:"first",PageDown:"last",End:"last"};function Dr(t,s){return s!=="rtl"?t:t==="ArrowLeft"?"ArrowRight":t==="ArrowRight"?"ArrowLeft":t}function Er(t,s,n){const r=Dr(t.key,n);if(!(s==="vertical"&&["ArrowLeft","ArrowRight"].includes(r))&&!(s==="horizontal"&&["ArrowUp","ArrowDown"].includes(r)))return Tr[r]}function tt(t,s=!1){const n=document.activeElement;for(const r of t)if(r===n||(r.focus({preventScroll:s}),document.activeElement!==n))return}function Rr(t,s){return t.map((n,r)=>t[(s+r)%t.length])}var kr=Qe,Or=et,_e="Tabs",[Ir,vs]=Pe(_e,[Je]),rt=Je(),[Mr,Fe]=Ir(_e),nt=x.forwardRef((t,s)=>{const{__scopeTabs:n,value:r,onValueChange:a,defaultValue:o,orientation:i="horizontal",dir:c,activationMode:l="automatic",...m}=t,u=Ge(c),[p,g]=Ce({prop:r,onChange:a,defaultProp:o});return e.jsx(Mr,{scope:n,baseId:Te(),value:p,onValueChange:g,orientation:i,dir:u,activationMode:l,children:e.jsx(J.div,{dir:u,"data-orientation":i,...m,ref:s})})});nt.displayName=_e;var st="TabsList",at=x.forwardRef((t,s)=>{const{__scopeTabs:n,loop:r=!0,...a}=t,o=Fe(st,n),i=rt(n);return e.jsx(kr,{asChild:!0,...i,orientation:o.orientation,dir:o.dir,loop:r,children:e.jsx(J.div,{role:"tablist","aria-orientation":o.orientation,...a,ref:s})})});at.displayName=st;var ot="TabsTrigger",it=x.forwardRef((t,s)=>{const{__scopeTabs:n,value:r,disabled:a=!1,...o}=t,i=Fe(ot,n),c=rt(n),l=ut(i.baseId,r),m=dt(i.baseId,r),u=r===i.value;return e.jsx(Or,{asChild:!0,...c,focusable:!a,active:u,children:e.jsx(J.button,{type:"button",role:"tab","aria-selected":u,"aria-controls":m,"data-state":u?"active":"inactive","data-disabled":a?"":void 0,disabled:a,id:l,...o,ref:s,onMouseDown:V(t.onMouseDown,p=>{!a&&p.button===0&&p.ctrlKey===!1?i.onValueChange(r):p.preventDefault()}),onKeyDown:V(t.onKeyDown,p=>{[" ","Enter"].includes(p.key)&&i.onValueChange(r)}),onFocus:V(t.onFocus,()=>{const p=i.activationMode!=="manual";!u&&!a&&p&&i.onValueChange(r)})})})});it.displayName=ot;var lt="TabsContent",ct=x.forwardRef((t,s)=>{const{__scopeTabs:n,value:r,forceMount:a,children:o,...i}=t,c=Fe(lt,n),l=ut(c.baseId,r),m=dt(c.baseId,r),u=r===c.value,p=x.useRef(u);return x.useEffect(()=>{const g=requestAnimationFrame(()=>p.current=!1);return()=>cancelAnimationFrame(g)},[]),e.jsx(De,{present:a||u,children:({present:g})=>e.jsx(J.div,{"data-state":u?"active":"inactive","data-orientation":c.orientation,role:"tabpanel","aria-labelledby":l,hidden:!g,id:m,tabIndex:0,...i,ref:s,style:{...t.style,animationDuration:p.current?"0s":void 0},children:g&&o})})});ct.displayName=lt;function ut(t,s){return`${t}-trigger-${s}`}function dt(t,s){return`${t}-content-${s}`}var _r=nt,Fr=at,Ar=it,se=ct;function ye({appName:t,reset:s=!1,tooltipText:n,...r}){var i;const a=K(),o=e.jsx("button",{type:"submit",...r,className:re(r.className,a.state!=="idle"?"cursor-progress":null,((i=a.data)==null?void 0:i.status)==="error"?"cursor-not-allowed":null)});return e.jsxs(a.Form,{action:"/set-playground",method:"POST",className:"inline-flex items-center justify-center",children:[e.jsx("input",{type:"hidden",name:"appName",value:t}),s?e.jsx("input",{type:"hidden",name:"reset",value:"true"}):null,Oe,n?e.jsx(G,{content:n,children:o}):o]})}function Lr({playgroundAppName:t,allApps:s}){var r;const n=K();return e.jsxs(Ht,{name:"appName",value:t,onValueChange:a=>{n.submit({appName:a},{method:"POST",action:"/set-playground"})},children:[e.jsxs(Yt,{"aria-label":"Select app for playground",className:re("flex h-full w-full items-center justify-between text-left radix-placeholder:text-gray-500 focus-visible:outline-none",n.state!=="idle"?"cursor-progress":null,((r=n.data)==null?void 0:r.status)==="error"?"cursor-not-allowed":null),children:[e.jsx("span",{className:"w-80 flex-1 overflow-hidden text-ellipsis whitespace-nowrap scrollbar-thin scrollbar-thumb-scrollbar",children:e.jsx(Bt,{placeholder:"Select current app",className:"inline-block w-40 text-ellipsis"})}),e.jsx(Vt,{children:e.jsx(O,{name:"TriangleDownSmall"})})]}),e.jsx(zt,{children:e.jsxs(Gt,{position:"popper",align:"start",className:"z-20 max-h-[50vh] bg-black text-white lg:max-h-[70vh]",children:[e.jsx(Kt,{className:"flex h-5 cursor-default items-center justify-center ",children:e.jsx(O,{name:"ChevronUp"})}),e.jsx(Wt,{className:"p-3",children:e.jsxs(qt,{children:[e.jsx(Zt,{className:"px-5 pb-3 font-mono uppercase",children:"App"}),s.filter(a=>a.name!=="playground").map(a=>e.jsx(Ur,{value:a.name,children:a.displayName},a.name))]})}),e.jsx(Jt,{className:"flex h-5 cursor-default items-center justify-center ",children:e.jsx(O,{name:"ChevronDown"})})]})})]})}function Ur({value:t,children:s}){return e.jsxs(Qt,{value:t,className:"relative flex cursor-pointer select-none items-center rounded px-10 py-2 leading-none opacity-80 radix-disabled:text-red-500 radix-highlighted:opacity-100 radix-highlighted:outline-none radix-state-checked:opacity-100",children:[e.jsx(Xt,{children:s}),e.jsx(er,{className:"absolute left-0 inline-flex w-[25px] items-center justify-center",children:e.jsx(O,{name:"CheckSmall"})})]})}function Ae({appName:t}){return ENV.EPICSHOP_DEPLOYED?null:e.jsx(ye,{appName:t,tooltipText:"Playground is not set to the right app. Click to set Playground.",children:e.jsxs("span",{className:"flex items-center justify-center gap-1 text-foreground-danger hover:underline",children:[e.jsx(O,{name:"Unlinked",className:"animate-ping"})," ",e.jsx("span",{className:"uppercase",children:"Set to Playground"})]})})}var ft={exports:{}};(function(t,s){(function(n,r){t.exports=r()})(xe,function(){var n=1e3,r=6e4,a=36e5,o="millisecond",i="second",c="minute",l="hour",m="day",u="week",p="month",g="quarter",y="year",S="date",d="Invalid Date",$=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,T=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,j={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(N){var v=["th","st","nd","rd"],f=N%100;return"["+N+(v[(f-20)%10]||v[f]||v[0])+"]"}},E=function(N,v,f){var P=String(N);return!P||P.length>=v?N:""+Array(v+1-P.length).join(f)+N},L={s:E,z:function(N){var v=-N.utcOffset(),f=Math.abs(v),P=Math.floor(f/60),b=f%60;return(v<=0?"+":"-")+E(P,2,"0")+":"+E(b,2,"0")},m:function N(v,f){if(v.date()<f.date())return-N(f,v);var P=12*(f.year()-v.year())+(f.month()-v.month()),b=v.clone().add(P,p),C=f-b<0,w=v.clone().add(P+(C?-1:1),p);return+(-(P+(f-b)/(C?b-w:w-b))||0)},a:function(N){return N<0?Math.ceil(N)||0:Math.floor(N)},p:function(N){return{M:p,y,w:u,d:m,D:S,h:l,m:c,s:i,ms:o,Q:g}[N]||String(N||"").toLowerCase().replace(/s$/,"")},u:function(N){return N===void 0}},R="en",F={};F[R]=j;var U="$isDayjsObject",k=function(N){return N instanceof q||!(!N||!N[U])},Y=function N(v,f,P){var b;if(!v)return R;if(typeof v=="string"){var C=v.toLowerCase();F[C]&&(b=C),f&&(F[C]=f,b=C);var w=v.split("-");if(!b&&w.length>1)return N(w[0])}else{var I=v.name;F[I]=v,b=I}return!P&&b&&(R=b),b||!P&&R},M=function(N,v){if(k(N))return N.clone();var f=typeof v=="object"?v:{};return f.date=N,f.args=arguments,new q(f)},D=L;D.l=Y,D.i=k,D.w=function(N,v){return M(N,{locale:v.$L,utc:v.$u,x:v.$x,$offset:v.$offset})};var q=function(){function N(f){this.$L=Y(f.locale,null,!0),this.parse(f),this.$x=this.$x||f.x||{},this[U]=!0}var v=N.prototype;return v.parse=function(f){this.$d=function(P){var b=P.date,C=P.utc;if(b===null)return new Date(NaN);if(D.u(b))return new Date;if(b instanceof Date)return new Date(b);if(typeof b=="string"&&!/Z$/i.test(b)){var w=b.match($);if(w){var I=w[2]-1||0,A=(w[7]||"0").substring(0,3);return C?new Date(Date.UTC(w[1],I,w[3]||1,w[4]||0,w[5]||0,w[6]||0,A)):new Date(w[1],I,w[3]||1,w[4]||0,w[5]||0,w[6]||0,A)}}return new Date(b)}(f),this.init()},v.init=function(){var f=this.$d;this.$y=f.getFullYear(),this.$M=f.getMonth(),this.$D=f.getDate(),this.$W=f.getDay(),this.$H=f.getHours(),this.$m=f.getMinutes(),this.$s=f.getSeconds(),this.$ms=f.getMilliseconds()},v.$utils=function(){return D},v.isValid=function(){return this.$d.toString()!==d},v.isSame=function(f,P){var b=M(f);return this.startOf(P)<=b&&b<=this.endOf(P)},v.isAfter=function(f,P){return M(f)<this.startOf(P)},v.isBefore=function(f,P){return this.endOf(P)<M(f)},v.$g=function(f,P,b){return D.u(f)?this[P]:this.set(b,f)},v.unix=function(){return Math.floor(this.valueOf()/1e3)},v.valueOf=function(){return this.$d.getTime()},v.startOf=function(f,P){var b=this,C=!!D.u(P)||P,w=D.p(f),I=function(te,B){var Z=D.w(b.$u?Date.UTC(b.$y,B,te):new Date(b.$y,B,te),b);return C?Z:Z.endOf(m)},A=function(te,B){return D.w(b.toDate()[te].apply(b.toDate("s"),(C?[0,0,0,0]:[23,59,59,999]).slice(B)),b)},_=this.$W,H=this.$M,z=this.$D,ne="set"+(this.$u?"UTC":"");switch(w){case y:return C?I(1,0):I(31,11);case p:return C?I(1,H):I(0,H+1);case u:var ee=this.$locale().weekStart||0,ie=(_<ee?_+7:_)-ee;return I(C?z-ie:z+(6-ie),H);case m:case S:return A(ne+"Hours",0);case l:return A(ne+"Minutes",1);case c:return A(ne+"Seconds",2);case i:return A(ne+"Milliseconds",3);default:return this.clone()}},v.endOf=function(f){return this.startOf(f,!1)},v.$set=function(f,P){var b,C=D.p(f),w="set"+(this.$u?"UTC":""),I=(b={},b[m]=w+"Date",b[S]=w+"Date",b[p]=w+"Month",b[y]=w+"FullYear",b[l]=w+"Hours",b[c]=w+"Minutes",b[i]=w+"Seconds",b[o]=w+"Milliseconds",b)[C],A=C===m?this.$D+(P-this.$W):P;if(C===p||C===y){var _=this.clone().set(S,1);_.$d[I](A),_.init(),this.$d=_.set(S,Math.min(this.$D,_.daysInMonth())).$d}else I&&this.$d[I](A);return this.init(),this},v.set=function(f,P){return this.clone().$set(f,P)},v.get=function(f){return this[D.p(f)]()},v.add=function(f,P){var b,C=this;f=Number(f);var w=D.p(P),I=function(H){var z=M(C);return D.w(z.date(z.date()+Math.round(H*f)),C)};if(w===p)return this.set(p,this.$M+f);if(w===y)return this.set(y,this.$y+f);if(w===m)return I(1);if(w===u)return I(7);var A=(b={},b[c]=r,b[l]=a,b[i]=n,b)[w]||1,_=this.$d.getTime()+f*A;return D.w(_,this)},v.subtract=function(f,P){return this.add(-1*f,P)},v.format=function(f){var P=this,b=this.$locale();if(!this.isValid())return b.invalidDate||d;var C=f||"YYYY-MM-DDTHH:mm:ssZ",w=D.z(this),I=this.$H,A=this.$m,_=this.$M,H=b.weekdays,z=b.months,ne=b.meridiem,ee=function(B,Z,le,de){return B&&(B[Z]||B(P,C))||le[Z].slice(0,de)},ie=function(B){return D.s(I%12||12,B,"0")},te=ne||function(B,Z,le){var de=B<12?"AM":"PM";return le?de.toLowerCase():de};return C.replace(T,function(B,Z){return Z||function(le){switch(le){case"YY":return String(P.$y).slice(-2);case"YYYY":return D.s(P.$y,4,"0");case"M":return _+1;case"MM":return D.s(_+1,2,"0");case"MMM":return ee(b.monthsShort,_,z,3);case"MMMM":return ee(z,_);case"D":return P.$D;case"DD":return D.s(P.$D,2,"0");case"d":return String(P.$W);case"dd":return ee(b.weekdaysMin,P.$W,H,2);case"ddd":return ee(b.weekdaysShort,P.$W,H,3);case"dddd":return H[P.$W];case"H":return String(I);case"HH":return D.s(I,2,"0");case"h":return ie(1);case"hh":return ie(2);case"a":return te(I,A,!0);case"A":return te(I,A,!1);case"m":return String(A);case"mm":return D.s(A,2,"0");case"s":return String(P.$s);case"ss":return D.s(P.$s,2,"0");case"SSS":return D.s(P.$ms,3,"0");case"Z":return w}return null}(B)||w.replace(":","")})},v.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},v.diff=function(f,P,b){var C,w=this,I=D.p(P),A=M(f),_=(A.utcOffset()-this.utcOffset())*r,H=this-A,z=function(){return D.m(w,A)};switch(I){case y:C=z()/12;break;case p:C=z();break;case g:C=z()/3;break;case u:C=(H-_)/6048e5;break;case m:C=(H-_)/864e5;break;case l:C=H/a;break;case c:C=H/r;break;case i:C=H/n;break;default:C=H}return b?C:D.a(C)},v.daysInMonth=function(){return this.endOf(p).$D},v.$locale=function(){return F[this.$L]},v.locale=function(f,P){if(!f)return this.$L;var b=this.clone(),C=Y(f,P,!0);return C&&(b.$L=C),b},v.clone=function(){return D.w(this.$d,this)},v.toDate=function(){return new Date(this.valueOf())},v.toJSON=function(){return this.isValid()?this.toISOString():null},v.toISOString=function(){return this.$d.toISOString()},v.toString=function(){return this.$d.toUTCString()},N}(),X=q.prototype;return M.prototype=X,[["$ms",o],["$s",i],["$m",c],["$H",l],["$W",m],["$M",p],["$y",y],["$D",S]].forEach(function(N){X[N[1]]=function(v){return this.$g(v,N[0],N[1])}}),M.extend=function(N,v){return N.$i||(N(v,q,M),N.$i=!0),M},M.locale=Y,M.isDayjs=k,M.unix=function(N){return M(1e3*N)},M.en=F[R],M.Ls=F,M.p={},M})})(ft);var Hr=ft.exports;const ve=pe(Hr);var ht={exports:{}};(function(t,s){(function(n,r){t.exports=r()})(xe,function(){return function(n,r,a){n=n||{};var o=r.prototype,i={future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"};function c(m,u,p,g){return o.fromToBase(m,u,p,g)}a.en.relativeTime=i,o.fromToBase=function(m,u,p,g,y){for(var S,d,$,T=p.$locale().relativeTime||i,j=n.thresholds||[{l:"s",r:44,d:"second"},{l:"m",r:89},{l:"mm",r:44,d:"minute"},{l:"h",r:89},{l:"hh",r:21,d:"hour"},{l:"d",r:35},{l:"dd",r:25,d:"day"},{l:"M",r:45},{l:"MM",r:10,d:"month"},{l:"y",r:17},{l:"yy",d:"year"}],E=j.length,L=0;L<E;L+=1){var R=j[L];R.d&&(S=g?a(m).diff(p,R.d,!0):p.diff(m,R.d,!0));var F=(n.rounding||Math.round)(Math.abs(S));if($=S>0,F<=R.r||!R.r){F<=1&&L>0&&(R=j[L-1]);var U=T[R.l];y&&(F=y(""+F)),d=typeof U=="string"?U.replace("%d",F):U(F,u,R.l,$);break}}if(u)return d;var k=$?T.future:T.past;return typeof k=="function"?k(d):k.replace("%s",d)},o.to=function(m,u){return c(m,u,this,!0)},o.from=function(m,u){return c(m,u,this)};var l=function(m){return m.$u?a.utc():a()};o.toNow=function(m){return this.to(l(this),m)},o.fromNow=function(m){return this.from(l(this),m)}}})})(ht);var Yr=ht.exports;const Br=pe(Yr);var mt={exports:{}};(function(t,s){(function(n,r){t.exports=r()})(xe,function(){var n={year:0,month:1,day:2,hour:3,minute:4,second:5},r={};return function(a,o,i){var c,l=function(g,y,S){S===void 0&&(S={});var d=new Date(g),$=function(T,j){j===void 0&&(j={});var E=j.timeZoneName||"short",L=T+"|"+E,R=r[L];return R||(R=new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:T,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",timeZoneName:E}),r[L]=R),R}(y,S);return $.formatToParts(d)},m=function(g,y){for(var S=l(g,y),d=[],$=0;$<S.length;$+=1){var T=S[$],j=T.type,E=T.value,L=n[j];L>=0&&(d[L]=parseInt(E,10))}var R=d[3],F=R===24?0:R,U=d[0]+"-"+d[1]+"-"+d[2]+" "+F+":"+d[4]+":"+d[5]+":000",k=+g;return(i.utc(U).valueOf()-(k-=k%1e3))/6e4},u=o.prototype;u.tz=function(g,y){g===void 0&&(g=c);var S=this.utcOffset(),d=this.toDate(),$=d.toLocaleString("en-US",{timeZone:g}),T=Math.round((d-new Date($))/1e3/60),j=i($,{locale:this.$L}).$set("millisecond",this.$ms).utcOffset(15*-Math.round(d.getTimezoneOffset()/15)-T,!0);if(y){var E=j.utcOffset();j=j.add(S-E,"minute")}return j.$x.$timezone=g,j},u.offsetName=function(g){var y=this.$x.$timezone||i.tz.guess(),S=l(this.valueOf(),y,{timeZoneName:g}).find(function(d){return d.type.toLowerCase()==="timezonename"});return S&&S.value};var p=u.startOf;u.startOf=function(g,y){if(!this.$x||!this.$x.$timezone)return p.call(this,g,y);var S=i(this.format("YYYY-MM-DD HH:mm:ss:SSS"),{locale:this.$L});return p.call(S,g,y).tz(this.$x.$timezone,!0)},i.tz=function(g,y,S){var d=S&&y,$=S||y||c,T=m(+i(),$);if(typeof g!="string")return i(g).tz($);var j=function(F,U,k){var Y=F-60*U*1e3,M=m(Y,k);if(U===M)return[Y,U];var D=m(Y-=60*(M-U)*1e3,k);return M===D?[Y,M]:[F-60*Math.min(M,D)*1e3,Math.max(M,D)]}(i.utc(g,d).valueOf(),T,$),E=j[0],L=j[1],R=i(E).utcOffset(L);return R.$x.$timezone=$,R},i.tz.guess=function(){return Intl.DateTimeFormat().resolvedOptions().timeZone},i.tz.setDefault=function(g){c=g}}})})(mt);var Vr=mt.exports;const zr=pe(Vr);var pt={exports:{}};(function(t,s){(function(n,r){t.exports=r()})(xe,function(){var n="minute",r=/[+-]\d\d(?::?\d\d)?/g,a=/([+-]|\d\d)/g;return function(o,i,c){var l=i.prototype;c.utc=function(d){var $={date:d,utc:!0,args:arguments};return new i($)},l.utc=function(d){var $=c(this.toDate(),{locale:this.$L,utc:!0});return d?$.add(this.utcOffset(),n):$},l.local=function(){return c(this.toDate(),{locale:this.$L,utc:!1})};var m=l.parse;l.parse=function(d){d.utc&&(this.$u=!0),this.$utils().u(d.$offset)||(this.$offset=d.$offset),m.call(this,d)};var u=l.init;l.init=function(){if(this.$u){var d=this.$d;this.$y=d.getUTCFullYear(),this.$M=d.getUTCMonth(),this.$D=d.getUTCDate(),this.$W=d.getUTCDay(),this.$H=d.getUTCHours(),this.$m=d.getUTCMinutes(),this.$s=d.getUTCSeconds(),this.$ms=d.getUTCMilliseconds()}else u.call(this)};var p=l.utcOffset;l.utcOffset=function(d,$){var T=this.$utils().u;if(T(d))return this.$u?0:T(this.$offset)?p.call(this):this.$offset;if(typeof d=="string"&&(d=function(R){R===void 0&&(R="");var F=R.match(r);if(!F)return null;var U=(""+F[0]).match(a)||["-",0,0],k=U[0],Y=60*+U[1]+ +U[2];return Y===0?0:k==="+"?Y:-Y}(d),d===null))return this;var j=Math.abs(d)<=16?60*d:d,E=this;if($)return E.$offset=j,E.$u=d===0,E;if(d!==0){var L=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();(E=this.local().add(j+L,n)).$offset=j,E.$x.$localOffset=L}else E=this.utc();return E};var g=l.format;l.format=function(d){var $=d||(this.$u?"YYYY-MM-DDTHH:mm:ss[Z]":"");return g.call(this,$)},l.valueOf=function(){var d=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||this.$d.getTimezoneOffset());return this.$d.valueOf()-6e4*d},l.isUTC=function(){return!!this.$u},l.toISOString=function(){return this.toDate().toISOString()},l.toString=function(){return this.toDate().toUTCString()};var y=l.toDate;l.toDate=function(d){return d==="s"&&this.$offset?c(this.format("YYYY-MM-DD HH:mm:ss:SSS")).toDate():y.call(this)};var S=l.diff;l.diff=function(d,$,T){if(d&&this.$u===d.$u)return S.call(this,d,$,T);var j=this.local(),E=c(d).local();return S.call(j,E,$,T)}}})})(pt);var Gr=pt.exports;const Kr=pe(Gr);ve.extend(Kr);ve.extend(zr);ve.extend(Br);function Wr(){const t=W();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(fr,{discordAuthUrl:t.discordAuthUrl})}),e.jsx("div",{className:"flex-1 overflow-y-scroll bg-accent pb-4 scrollbar-thin scrollbar-thumb-scrollbar",children:e.jsx(qr,{})})]})}function qr(){const t=W(),s=hr({discordAuthUrl:t.discordAuthUrl}),n=Ee();return e.jsxs("div",{className:"flex h-full flex-col items-center justify-between",children:[e.jsx(x.Suspense,{fallback:e.jsx("div",{className:"flex h-full w-full flex-col items-center justify-center",children:e.jsx(We,{children:"Loading Discord Posts"})}),children:e.jsx(Ke,{resolve:t.discordPostsPromise,errorElement:e.jsx("div",{className:"text-red-500",children:"There was a problem loading the discord posts"}),children:r=>e.jsx("ul",{className:"flex w-full flex-col gap-4 p-3 xl:p-12",children:r.map(a=>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(Zr,{thread:a})},a.id))})})}),e.jsx("div",{children:e.jsxs(ae,{to:n&&!s.includes("oauth")?s.replace(/^https/,"discord"):s,target:s.includes("oauth")?void 0:"_blank",rel:"noreferrer noopener",onClick:n?r=>{r.preventDefault(),window.open(r.currentTarget.href,"_blank","noreferrer noopener")}:void 0,className:"flex items-center gap-2 p-2 text-xl hover:underline",children:["Create Post ",e.jsx(O,{name:"ExternalLink"})]})})]})}function Zr({thread:t}){const s=t.reactions.filter(r=>r.count),n=dr();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(r=>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(Ye,{name:r.emojiName,url:r.emojiUrl})}),e.jsx("span",{children:r.name})]},r.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:s.length?e.jsx("ul",{className:"flex items-center gap-2",children:s.map((r,a)=>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(Ye,{name:r.emojiName,url:r.emojiUrl})}),e.jsx("span",{children:r.count})]},a))}):null}),e.jsxs("span",{className:"flex items-center gap-1",children:[e.jsxs("span",{className:"inline-flex items-center gap-1",children:[e.jsx(O,{name:"Chat"})," ",t.messageCount]}),` · ${ve(t.lastUpdated).tz(n.timeZone).fromNow()}`]})]}),e.jsxs("span",{className:"flex items-center gap-4",children:[e.jsx("a",{href:t.link.replace(/^https/,"discord"),children:e.jsx(O,{name:"Discord"})}),e.jsx("a",{href:t.link,target:"_blank",rel:"noreferrer noopener",children:e.jsx(O,{name:"ExternalLink"})})]})]})]})})}function Ye({name:t,url:s}){return s?e.jsx("img",{src:s,alt:t,className:"h-full w-full"}):t||null}function xt({playgroundAppName:t,problemAppName:s,isUpToDate:n,allApps:r,children:a}){const o=t===s,i=o&&n?e.jsx(O,{size:"xl",name:"Linked"}):e.jsx(O,{size:"xl",name:"Unlinked",className:"animate-pulse text-foreground-danger"});let c="Click to reset Playground.";return n||(c="Playground is out of date. Click to reset Playground."),o||(c="Playground is not set to the right app. Click to set Playground."),e.jsxs("div",{className:"flex h-full w-full flex-col justify-between",children:[e.jsxs("div",{className:"flex h-14 flex-shrink-0 items-center justify-start gap-2 border-b px-3",children:[e.jsx("div",{className:"display-alt-up",children:s?e.jsx(ye,{appName:s,tooltipText:c,children:i}):e.jsx(G,{content:"No problem app available for this step",children:e.jsx("div",{children:e.jsx(O,{name:"Question"})})})}),e.jsx("div",{className:"display-alt-down",children:t?e.jsx(ye,{appName:t,reset:!0,tooltipText:"Reset Playground",children:e.jsx("div",{className:"flex h-7 w-7 items-center justify-center",children:e.jsx(O,{name:"Refresh"})})}):e.jsx("div",{className:"h-7 w-7"})}),e.jsx(Lr,{allApps:r,playgroundAppName:t})]}),e.jsx("div",{className:"flex h-full flex-1 flex-grow items-center justify-center",children:a})]})}function Jr({name:t}){var o;const s=K(),n=(o=s.formData)==null?void 0:o.get("intent"),r=n==="stop"?"Stopping App":n==="restart"?"Restarting App":null,a=Ee();return e.jsxs(s.Form,{method:"POST",action:"/start",children:[Oe,e.jsx("input",{type:"hidden",name:"name",value:t}),e.jsx("button",{type:"submit",name:"intent",value:a?"restart":"stop",className:"h-full border-r px-3 py-4 font-mono text-xs uppercase leading-none",children:r||(a?"Restart App":"Stop App")})]})}function gt({port:t}){const s=K();return e.jsxs(s.Form,{method:"POST",action:"/start",children:[e.jsx("input",{type:"hidden",name:"port",value:t}),e.jsx(qe,{varient:"mono",type:"submit",name:"intent",value:"stop-port",children:s.state==="idle"?"Stop Port":"Stopping Port"})]})}function Qr({name:t}){var n;const s=K();return((n=s.data)==null?void 0:n.status)==="app-not-started"?s.data.error==="port-unavailable"?e.jsxs("div",{children:["The port is unavailable. Would you like to stop whatever is running on that port and try again?",e.jsx(gt,{port:s.data.port})]}):e.jsx("div",{children:"An unknown error has happened."}):e.jsxs(s.Form,{method:"POST",action:"/start",children:[e.jsx("input",{type:"hidden",name:"name",value:t}),s.state==="idle"?e.jsx(qe,{type:"submit",name:"intent",value:"start",varient:"mono",children:"Start App"}):e.jsx("div",{children:e.jsx(We,{children:"Starting App"})})]})}const Xr=h.intersection(h.object({type:h.literal("epicshop:history-call")}),h.union([h.object({method:h.literal("pushState"),args:h.union([h.tuple([h.object({}).passthrough(),h.unknown()]),h.tuple([h.object({}).passthrough(),h.unknown(),h.string()])])}),h.object({method:h.literal("replaceState"),args:h.union([h.tuple([h.object({}).passthrough(),h.unknown()]),h.tuple([h.object({}).passthrough(),h.unknown(),h.string()])])}),h.object({method:h.literal("go"),args:h.tuple([h.number().optional()])}),h.object({method:h.literal("forward"),args:h.tuple([])}),h.object({method:h.literal("back"),args:h.tuple([])}),h.object({method:h.literal("popstate"),pathname:h.string(),delta:h.number()})])),en=h.object({type:h.literal("epicshop:loaded"),url:h.string()}),tn=h.union([Xr,en]);function Be(t,s,n){return Math.min(Math.max(t+s,0),n)}const rn=x.forwardRef(nn);function nn({name:t,port:s,portIsAvailable:n,isRunning:r,baseUrl:a,id:o,initialRoute:i},c){const l=Me();return r?e.jsx(sn,{baseUrl:a,id:o,name:t,ref:c,initialRoute:i}):n===!1?e.jsxs("div",{className:"flex flex-col items-center justify-center",children:[e.jsxs("p",{className:"max-w-xs pb-5 text-center",role:"status",children:["The port for this app is unavailable. It could be that you're running it ",e.jsx("a",{href:Re({domain:l.domain,port:s}),className:"underline",children:"elsewhere"}),"?"]}),e.jsx(gt,{port:s})]}):e.jsx(Qr,{name:t})}const sn=x.forwardRef(an);function an({baseUrl:t,id:s,name:n,initialRoute:r},a){const[o,i]=Ie(),c=o.get("pathname")??r,[l,m]=x.useState(0),u=s+l,p=x.useRef("new"),g=x.useRef(null),[y,S]=x.useState({history:[c],index:0}),[d,$]=x.useState(c),T=x.useRef(null),j=new URL(c,t),E=x.useRef(j);x.useEffect(()=>{E.current=j});const[L,R]=x.useState(j),F=x.useRef(s);F.current!==s&&(F.current=s,R(E.current)),x.useEffect(()=>{F.current=s}),x.useEffect(()=>{function N(v){var C;if(v.source!==((C=T.current)==null?void 0:C.contentWindow))return;const f=tn.safeParse(v.data,{path:["messageEvent","data"]});if(!f.success)return;const{data:P}=f;if(P.type==="epicshop:loaded"){S(w=>{const I=A=>Be(w.index,A,w.history.length-1);if(p.current==="back")return{...w,index:I(-1)};if(p.current==="forward")return{...w,index:I(1)};if(p.current==="new"){const A=w.history[w.index],_=new URL(P.url).pathname;if(A===_)return w;const H=[...w.history.slice(0,w.index+1),_];return{history:H,index:H.length-1}}else throw new Error("Unexpected lastDirectionRef value")});return}const{method:b}=P;S(w=>{const I=_=>Be(w.index,_,w.history.length-1),A=w.history[w.index];switch(b){case"popstate":return{...w,index:I(P.delta)};case"forward":return{...w,index:I(1)};case"back":return{...w,index:I(-1)};case"pushState":{const _=P.args[2]??A,H=[...w.history.slice(0,w.index+1),_].filter(Boolean);return{...w,history:H,index:H.length-1}}case"replaceState":{const _=P.args[2]??A;return{...w,history:[...w.history.slice(0,w.index),_,...w.history.slice(w.index+1)].filter(Boolean)}}case"go":{const[_=0]=P.args;return{...w,index:I(_)}}}})}return window.addEventListener("message",N),()=>{window.removeEventListener("message",N)}},[]);const U=x.useRef(i);x.useEffect(()=>{U.current=i},[i]);const k=y.history[y.index];x.useEffect(()=>{if(!k)return;$(k);const N=new URLSearchParams(window.location.search);k==="/"?N.delete("pathname"):N.set("pathname",k),`?${N.toString()}`!==window.location.search&&U.current(N,{replace:!0})},[k]);const Y=(...N)=>{var f,P;const v=N[0];typeof v=="number"?p.current=v>0?"forward":"back":p.current="new",g.current&&clearTimeout(g.current),g.current=setTimeout(()=>{p.current="new"},100),(P=(f=T.current)==null?void 0:f.contentWindow)==null||P.postMessage({type:"epicshop:navigate-call",params:N},"*")};function M(N=d){$(N);const v=y.history[y.index];Y(N,{replace:v===N})}x.useImperativeHandle(a,()=>({handleExtrnalNavigation:M}));const D=y.index===y.history.length-1,q=y.index<=0,X=[];for(const[N,v]of o.entries())N!=="pathname"&&X.push(e.jsx("input",{type:"hidden",name:N,value:v},N));return e.jsx(It,{children:e.jsxs("div",{className:"flex h-full flex-grow flex-col",children:[e.jsxs("div",{className:"flex items-center justify-between border-b pl-1.5",children:[e.jsxs("div",{className:"mr-2 flex items-center justify-center gap-2 px-1",children:[e.jsxs(fe,{children:[e.jsx(he,{asChild:!0,children:e.jsx("button",{type:"button",className:"hidden aspect-square h-full w-full items-center justify-center p-1 transition disabled:opacity-40 sm:flex",disabled:q,onClick:()=>Y(-1),children:e.jsx(O,{name:"ArrowLeft","aria-hidden":"true"})})}),e.jsx(me,{children:"Go back"})]}),e.jsxs(fe,{children:[e.jsx(he,{asChild:!0,children:e.jsx("button",{type:"button",className:"hidden aspect-square h-full w-full items-center justify-center p-1 transition disabled:opacity-40 sm:flex",disabled:D,onClick:()=>Y(1),children:e.jsx(O,{name:"ArrowRight","aria-hidden":"true"})})}),e.jsx(me,{children:"Go forward"})]}),e.jsxs(fe,{children:[e.jsx(he,{asChild:!0,children:e.jsx("button",{type:"button",className:"flex aspect-square h-full w-full items-center justify-center p-1 transition disabled:opacity-40",onClick:()=>{R(j),m(l+1),S({history:[j.pathname],index:0})},children:e.jsx(O,{name:"Refresh","aria-hidden":"true"})})}),e.jsx(me,{children:"Refresh"})]})]}),e.jsxs(cr,{method:"get",replace:!0,className:"flex flex-1 gap-2",onSubmit:()=>M(),children:[X,e.jsxs("div",{className:"flex flex-1 items-center border-x bg-background p-3 leading-none text-foreground",children:[e.jsx("a",{href:j.toString(),target:"_blank",rel:"noreferrer",children:L.host}),e.jsx("input",{"aria-label":"pathname",className:"w-full flex-1 bg-background focus-visible:outline-none",value:d,name:"pathname",onChange:N=>$(N.currentTarget.value)})]})]}),e.jsx(Jr,{name:n}),e.jsxs(fe,{children:[e.jsx(he,{asChild:!0,children:e.jsx("a",{href:j.toString(),target:"_blank",rel:"noreferrer",className:re("flex aspect-square items-center justify-center px-3.5"),children:e.jsx(O,{name:"ExternalLink"})})}),e.jsx(me,{children:"Open in new tab"})]})]}),e.jsx("div",{className:"flex h-full w-full flex-grow dark:bg-white",children:e.jsx("iframe",{title:n,ref:T,src:L.toString(),className:"h-full w-full flex-grow bg-white"},u)})]})})}function Ne({id:t,appInfo:s,inBrowserBrowserRef:n}){const r=Me();if(!s)return e.jsx("p",{children:"No app here. Sorry."});const{isRunning:a,dev:o,name:i,portIsAvailable:c,title:l}=s;if(o.type==="script"){const m=Re({domain:r.domain,port:o.portNumber});return e.jsx(rn,{ref:n,isRunning:a,id:t??i,name:i,portIsAvailable:c,port:o.portNumber,baseUrl:m,initialRoute:o.initialRoute})}else return o.type==="browser"?e.jsxs("div",{className:"relative h-full flex-grow overflow-y-auto scrollbar-thin scrollbar-thumb-scrollbar",children:[e.jsxs("a",{href:o.pathname,target:"_blank",rel:"noreferrer",className:be("absolute bottom-5 right-5 flex items-center justify-center rounded-full bg-gray-100 p-2.5 transition hover:bg-gray-200 dark:bg-gray-800 hover:dark:bg-gray-600"),children:[e.jsx(O,{name:"ExternalLink","aria-hidden":"true"}),e.jsx("span",{className:"sr-only",children:"Open in New Window"})]}),e.jsx("iframe",{title:l,src:o.pathname,className:"h-full w-full flex-grow bg-white"})]}):e.jsxs("p",{children:["Preview for dev type of ",e.jsx("code",{children:o.type})," not supported."]})}function on({appInfo:t,inBrowserBrowserRef:s,problemAppName:n,allApps:r,isUpToDate:a}){return e.jsx(xt,{playgroundAppName:t==null?void 0:t.appName,problemAppName:n,allApps:r,isUpToDate:a,children:(t==null?void 0: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(G,{content:t.fullPath,children:e.jsx("span",{className:"underline",onClick:()=>{navigator.clipboard.writeText(t.fullPath),mr.success("Copied playground path to clipboard")},children:"the playground directory"})})," ","in your editor and terminal to work on this exercise!"]})})]}):t?e.jsx(Ne,{id:t.appName,appInfo:t,inBrowserBrowserRef:s}):e.jsxs("div",{className:"flex flex-col justify-center gap-2",children:[e.jsx("p",{children:"Please set the playground first"}),n?e.jsx(Ae,{appName:n}):null]})})}function ln({handleClick:t,cacheLocation:s,embeddedKey:n,appFullPath:r}){const a=K();return e.jsxs(a.Form,{action:"/update-mdx-cache",method:"POST",children:[Oe,e.jsx("input",{type:"hidden",name:"cacheLocation",value:s}),e.jsx("input",{type:"hidden",name:"embeddedKey",value:n}),e.jsx("input",{type:"hidden",name:"appFullPath",value:r}),e.jsx("button",{type:"submit",onClick:t,className:re("launch_button",a.state==="idle"?null:"cursor-progress"),children:"Cancel Warning"})]})}const vt=x.createContext(null);function cn(){const t=x.useContext(vt);if(!t)throw new Error("useStepContext must be used within a StepContext.Provider");return t}function un({children:t,inBrowserBrowserRef:s}){return e.jsx(vt.Provider,{value:{inBrowserBrowserRef:s},children:t})}const dn={CodeFile:pn,CodeFileNotification:xn,DiffLink:Le,PrevDiffLink:mn,NextDiffLink:hn,InlineFile:gn,LinkToApp:jn};function fn({inBrowserBrowserRef:t}){const s=W();return s.exerciseStepApp.instructionsCode?e.jsx(un,{inBrowserBrowserRef:t,children:e.jsx(pr,{epicVideoInfosPromise:s.epicVideoInfosPromise,children:e.jsx("div",{className:"prose dark:prose-invert sm:prose-lg",children:e.jsx(or,{code:s.exerciseStepApp.instructionsCode,components:dn})})})}):null}function jt(t,s,n){const r=new URLSearchParams(t);return n===null?r.delete(s):r.set(s,n),r}function hn({app:t=0,fullPage:s=!1,children:n}){return e.jsx(Le,{app1:t,app2:t+1,fullPage:s,children:n})}function mn({app:t=-1,fullPage:s=!1,children:n}){return e.jsx(Le,{app1:t,app2:t+1,fullPage:s,children:n})}function Le({app1:t=0,app2:s=1,children:n,fullPage:r=!1,to:a}){const o=W();if(!a&&!t&&!s)return e.jsx("callout-danger",{className:"notification",children:e.jsx("div",{className:"title",children:"DiffLink Error: invalid input"})});function i(u){var p;if(typeof u=="number"){const g=o.exerciseIndex+u;return(p=o.allApps[g])==null?void 0:p.name}if(!u)return null;for(const{name:g,stepName:y}of o.allApps)if(u===g||u===y)return g;return null}if(a){const u=new URLSearchParams(a);t=u.get("app1"),s=u.get("app2")}const c=i(t),l=i(s);if(!c||!l)return e.jsxs("callout-danger",{className:"notification",children:[e.jsx("div",{className:"title",children:"DiffLink Error: invalid input"}),!c&&e.jsxs("div",{children:['app1: "',t,'" is not a valid app name']}),!l&&e.jsxs("div",{children:['app2: "',s,'" is not a valid app name']})]});a||(a=`app1=${c}&app2=${l}`);const m=r?`/diff?${a}`:`?${decodeURIComponent(jt(new URLSearchParams,"preview",`diff&${a}`).toString())}`;return n||(n=e.jsxs("span",{children:["Go to Diff ",r?"":"Preview"," from: ",e.jsx("code",{children:c})," to:"," ",e.jsx("code",{children:l})]})),e.jsx(ae,{to:m,children:n})}function pn({file:t}){return e.jsxs("div",{className:"border-4 border-[#ff4545] bg-[#ff454519] p-4 text-lg",children:["Something went wrong compiling ",e.jsx("b",{children:"CodeFile"})," for file: ",e.jsx("u",{children:t})," to markdown"]})}function xn({file:t,type:s="problem",children:n,variant:r,cacheLocation:a,embeddedKey:o,...i}){const[c,l]=x.useState("visible"),u=W()[s],p=()=>{c==="visible"&&(l("collapse"),setTimeout(()=>{l("none")},400))},g=re("rounded px-4 py-1 font-mono text-sm font-semibold outline-none transition duration-300 ease-in-out",{"bg-amber-300/70 hover:bg-amber-300/40 active:bg-amber-300/50":r==="warning","bg-red-300/70 hover:bg-red-300/40 active:bg-red-300/50":r==="error"});return e.jsxs("div",{className:re("notification important h-15 relative",{"duration-400 !my-0 !h-0 !py-0 !opacity-0 transition-all ease-out":c!=="visible",hidden:c==="none"}),children:[e.jsxs("div",{className:"absolute right-3 top-3 z-50 flex gap-4",children:[u?e.jsx("div",{className:g,title:`Edit ${t}`,children:e.jsx(ce,{appFile:t,appName:u.name,...i,children:"Edit this File"})}):null,u&&r==="warning"?e.jsx("div",{className:g,title:`Remove the warning from here and from ${t} cache file`,children:e.jsx(ln,{handleClick:p,cacheLocation:a,embeddedKey:o,appFullPath:u.fullPath})}):null]}),n]})}function gn({file:t,type:s="playground",children:n=e.jsx("code",{children:t}),...r}){const a=W(),o=a[s]||a[a.type],i=e.jsxs("div",{className:"launch-editor-button-wrapper flex underline underline-offset-4",children:[n," ",e.jsx("svg",{height:24,width:24,children:e.jsx("use",{href:"/icons.svg#keyboard"})})]});return ENV.EPICSHOP_DEPLOYED&&o?e.jsx("div",{className:"inline-block grow",children:e.jsx(ce,{appFile:t,appName:o.name,...r,children:i})}):o?e.jsx("div",{className:"inline-block grow",children:e.jsx(ce,{appFile:t,appName:o.name,...r,children:i})}):s==="playground"?e.jsx(G,{content:"You must 'Set to Playground' before opening a file",children:e.jsx("div",{className:"inline-block grow cursor-not-allowed",children:i})}):e.jsx(e.Fragment,{children:"children"})}function vn(t){return t==="problem"?"problem":t==="solution"?"solution":"playground"}function jn({to:t,children:s=e.jsx("code",{children:t.toString()}),...n}){var g;const[r]=Ie(),a=`?${jt(r,"pathname",t.toString()).toString()}`,o=W(),i=vn(r.get("preview")),c=Me(),l=o[i],m=(l==null?void 0:l.dev.type)==="script"?Re({domain:c.domain,port:l.dev.portNumber}):((g=o.playground)==null?void 0:g.dev.type)==="browser"?o.playground.dev.pathname:null,{inBrowserBrowserRef:u}=cn(),p=m?m.slice(0,-1)+t.toString():null;return e.jsxs("div",{className:"inline-flex items-center justify-between gap-1",children:[e.jsx(ae,{to:a,...n,className:be(n.className,{"cursor-not-allowed":ENV.EPICSHOP_DEPLOYED}),title:ENV.EPICSHOP_DEPLOYED?"Cannot link to app in deployed version":void 0,onClick:y=>{var S,d;ENV.EPICSHOP_DEPLOYED&&y.preventDefault(),(S=n.onClick)==null||S.call(n,y),(d=u.current)==null||d.handleExtrnalNavigation(t.toString())},children:s}),p?e.jsx(G,{content:"Open in new tab",children:e.jsx("a",{href:p,target:"_blank",rel:"noreferrer",className:be("flex aspect-square items-center justify-center",{"cursor-not-allowed":ENV.EPICSHOP_DEPLOYED}),title:ENV.EPICSHOP_DEPLOYED?"Cannot link to app in deployed version":"Open in new tab",onClick:y=>{ENV.EPICSHOP_DEPLOYED&&y.preventDefault()},children:e.jsx(O,{name:"ExternalLink"})})}):null]})}const bn=h.intersection(h.object({type:h.literal("epicshop:test-status-update"),timestamp:h.number()}),h.union([h.object({status:h.literal("pending")}),h.object({status:h.literal("pass")}),h.object({status:h.literal("fail"),error:h.string()})])),wn=h.object({type:h.literal("epicshop:test-step-update"),status:h.literal("pass"),title:h.string(),timestamp:h.number()}),yn=h.union([wn,bn]);function Nn({pathname:t,testFile:s}){const n=x.useRef(null),[r,a]=x.useState(null),[o,i]=x.useState([]);x.useEffect(()=>{function u(p){var S;if(p.source!==((S=n.current)==null?void 0:S.contentWindow)||"request"in p.data)return;const g=yn.safeParse(p.data,{path:["messageEvent","data"]});if(!g.success){console.error("Invalid message from test iframe",p.data,g.error);return}const{data:y}=g;y.type==="epicshop:test-status-update"&&(y.status==="pending"&&i([]),a(y)),y.type==="epicshop:test-step-update"&&i(d=>[...d,y])}return window.addEventListener("message",u),()=>{window.removeEventListener("message",u)}},[]);const c={pending:e.jsx(ke,{"aria-label":"Pending"}),pass:e.jsx(O,{name:"CheckSmall","aria-label":"Passed",className:"text-emerald-700"}),fail:e.jsx(O,{name:"Remove","aria-label":"Failed",className:"text-foreground-danger"}),unknown:e.jsx(O,{name:"Question","aria-label":"Unknown",className:"animate-pulse"})}[(r==null?void 0:r.status)??"unknown"],l=o.sort((u,p)=>u.timestamp-p.timestamp),m={pass:e.jsx(O,{name:"CheckSmall","aria-label":"Passed"}),fail:e.jsx(O,{name:"Remove","aria-label":"Failed"}),unknown:e.jsx(O,{name:"Question","aria-label":"Unknown",className:"animate-pulse"})};return e.jsx(e.Fragment,{children:e.jsx(tr,{className:"w-full",type:"multiple",children:e.jsx(rr,{icon:c,title:s,forceMount:!0,children:e.jsxs("div",{className:"not-prose",children:[e.jsxs("div",{className:"p-5 pt-3",children:[e.jsx("ul",{className:"",children:l.map(u=>e.jsx("li",{children:e.jsxs("div",{className:"flex items-baseline gap-2 text-emerald-700",children:[e.jsx("span",{children:m[u.status]}),e.jsx("pre",{className:"whitespace-pre-wrap",children:u.title})]})},u.timestamp+u.title))}),(r==null?void 0:r.status)==="fail"?e.jsxs("div",{className:"flex items-baseline gap-2 text-foreground-danger",children:[e.jsx("span",{children:m.fail}),e.jsx("pre",{className:"max-h-48 overflow-y-auto text-foreground-danger scrollbar-thin scrollbar-thumb-scrollbar",children:r.error})]}):null,e.jsx("iframe",{ref:n,title:s,src:t+s,className:"mt-5 min-h-[420px] w-full border bg-white"})]}),e.jsxs("div",{className:"flex border-y",children:[e.jsx("button",{onClick:()=>{var u,p;return(p=(u=n.current)==null?void 0:u.contentWindow)==null?void 0:p.location.reload()},className:"border-r p-3",children:e.jsx(O,{name:"Refresh","aria-label":"Rerun Tests"})}),e.jsx("a",{href:t+s,target:"_blank",rel:"noreferrer",className:"border-r p-3",children:e.jsx(O,{name:"ExternalLink","aria-label":"Open in New Window"})})]})]})})})})}const Sn=h.union([h.object({type:h.literal("init"),exitCode:h.number().nullable().optional(),isRunning:h.boolean(),output:h.array(h.object({type:h.union([h.literal("stdout"),h.literal("stderr")]),html:h.string(),timestamp:h.number()}))}),h.object({type:h.union([h.literal("stdout"),h.literal("stderr")]),data:h.string(),timestamp:h.number()}),h.object({type:h.literal("exit"),isRunning:h.literal(!1),code:h.number().nullable()})]),Pn=h.array(Sn);function $n(t,s){return s(t)}function Cn({name:t}){const[s,n]=x.useReducer($n,{version:0,isRunning:!1,exitCode:void 0,lines:[]}),{version:r,isRunning:a,exitCode:o,lines:i}=s,c=xr(`/test?${new URLSearchParams({name:t})}&v=${r}`);return x.useEffect(()=>{if(!c)return;const l=JSON.parse(c),m=Pn.safeParse(l);if(!m.success){console.error(m.error.flatten());return}for(const u of m.data)switch(u.type){case"exit":{const{isRunning:p,code:g}=u;n(y=>({...y,isRunning:p,exitCode:g}));break}case"init":{const{output:p,exitCode:g,isRunning:y}=u;n(S=>({...S,lines:p,exitCode:g,isRunning:y}));break}case"stderr":case"stdout":{const{type:p,data:g,timestamp:y}=u;n(S=>({...S,lines:[...S.lines,{type:p,html:g,timestamp:y}].sort((d,$)=>d.timestamp-$.timestamp),isRunning:!0}));break}}},[c]),e.jsxs("div",{className:"relative flex h-full w-full flex-col",children:[e.jsxs("div",{className:"flex h-12 w-full flex-shrink-0 items-center justify-between border-b",children:[e.jsxs("div",{className:"flex h-full items-center",children:[!a&&e.jsx(Tn,{name:t,onRun:()=>{n(l=>({...l,exitCode:void 0,lines:[],version:l.version+1}))}}),a?e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"flex h-full flex-grow items-center justify-center border-r px-3.5",children:e.jsx(ke,{role:"status","aria-label":"Running Tests"})}),e.jsx(En,{name:t})]}):null]}),!a&&o!==void 0&&e.jsx("p",{className:"pr-3.5 leading-none",children:o===0?"Tests passed":`Test failed (exit code ${String(o)})`}),!a&&o!==void 0&&e.jsx(Dn,{name:t,onClear:()=>{n(l=>({...l,exitCode:void 0,lines:[]}))}})]}),e.jsxs("div",{className:"flex h-full flex-col gap-5 p-5",children:[e.jsx("p",{className:"font-mono text-sm font-medium uppercase",children:"Test Output"}),e.jsx("pre",{className:"shadow-on-scrollbox flex-1 overflow-y-scroll scrollbar-thin scrollbar-thumb-scrollbar",children:i.map(l=>e.jsx("code",{"data-type":l.type,dangerouslySetInnerHTML:{__html:l.html}},l.timestamp))})]})]})}function Tn({name:t,onRun:s}){const n=K(),r=x.useRef(s);return x.useEffect(()=>{r.current=s},[s]),x.useEffect(()=>{var a,o;(a=n.data)!=null&&a.success&&((o=r.current)==null||o.call(r))},[n.data]),e.jsxs(n.Form,{method:"POST",action:"/test",className:"h-full",children:[e.jsx("input",{type:"hidden",name:"name",value:t}),e.jsx(G,{content:n.state==="idle"?"Run Tests":"Running Tests...",children:e.jsx("button",{type:"submit",name:"intent",value:"run",className:"flex h-full flex-grow items-center justify-center border-r px-3.5",children:n.state==="idle"?e.jsx(O,{name:"TriangleSmall"}):e.jsx(ke,{role:"status"})})})]})}function Dn({name:t,onClear:s}){const n=K(),r=x.useRef(s);return x.useEffect(()=>{r.current=s},[s]),x.useEffect(()=>{var a,o;(a=n.data)!=null&&a.success&&((o=r.current)==null||o.call(r))},[n.data]),e.jsxs(n.Form,{method:"POST",action:"/test",className:"h-full",children:[e.jsx("input",{type:"hidden",name:"name",value:t}),e.jsx(G,{content:n.state==="idle"?"Clear Tests":"Clearing Tests...",children:e.jsx("button",{type:"submit",name:"intent",value:"clear",className:"flex h-full flex-grow items-center justify-center border-l px-3.5",children:n.state==="idle"?e.jsx(O,{name:"Clear"}):e.jsx(O,{name:"Clear",className:"animate-pulse",role:"status"})})})]})}function En({name:t,onStop:s}){const n=K(),r=x.useRef(s);return x.useEffect(()=>{r.current=s},[s]),x.useEffect(()=>{var a,o;(a=n.data)!=null&&a.success&&((o=r.current)==null||o.call(r))},[n.data]),e.jsxs(n.Form,{method:"POST",action:"/test",className:"h-full",children:[e.jsx("input",{type:"hidden",name:"name",value:t}),e.jsx(G,{content:n.state==="idle"?"Stop Tests":"Stopping Tests...",children:e.jsx("button",{type:"submit",name:"intent",value:"stop",className:"flex h-full flex-grow items-center justify-center border-r px-3.5",children:n.state==="idle"?e.jsx(O,{name:"Stop"}):e.jsx(O,{name:"Stop",className:"animate-pulse",role:"status"})})})]})}function Rn({appInfo:t,problemAppName:s,allApps:n,isUpToDate:r}){const[a,o]=x.useState(0);let i=e.jsx("p",{children:"No tests here. Sorry."});if((t==null?void 0:t.test.type)==="script"&&(i=e.jsx(Cn,{name:t.name})),(t==null?void 0:t.test.type)==="browser"){const{pathname:c}=t.test;i=e.jsxs("div",{className:"flex h-full w-full flex-grow flex-col",children:[t.test.testFiles.map(l=>e.jsx("div",{children:e.jsx(Nn,{pathname:c,testFile:l})},l)),e.jsx("div",{className:"px-3 py-[21px]",children:e.jsxs("button",{onClick:()=>o(l=>l+1),className:"flex items-center gap-2 font-mono text-sm uppercase leading-none",children:[e.jsx(O,{name:"Refresh","aria-hidden":!0})," Rerun All Tests"]})})]},a)}return e.jsx(xt,{playgroundAppName:t==null?void 0:t.appName,problemAppName:s,allApps:n,isUpToDate:r,children:i})}var Ue="Popover",[bt,js]=Pe(Ue,[Ve]),ue=Ve(),[kn,Q]=bt(Ue),wt=t=>{const{__scopePopover:s,children:n,open:r,defaultOpen:a,onOpenChange:o,modal:i=!1}=t,c=ue(s),l=x.useRef(null),[m,u]=x.useState(!1),[p=!1,g]=Ce({prop:r,defaultProp:a,onChange:o});return e.jsx(Lt,{...c,children:e.jsx(kn,{scope:s,contentId:Te(),triggerRef:l,open:p,onOpenChange:g,onOpenToggle:x.useCallback(()=>g(y=>!y),[g]),hasCustomAnchor:m,onCustomAnchorAdd:x.useCallback(()=>u(!0),[]),onCustomAnchorRemove:x.useCallback(()=>u(!1),[]),modal:i,children:n})})};wt.displayName=Ue;var yt="PopoverAnchor",On=x.forwardRef((t,s)=>{const{__scopePopover:n,...r}=t,a=Q(yt,n),o=ue(n),{onCustomAnchorAdd:i,onCustomAnchorRemove:c}=a;return x.useEffect(()=>(i(),()=>c()),[i,c]),e.jsx(ze,{...o,...r,ref:s})});On.displayName=yt;var Nt="PopoverTrigger",St=x.forwardRef((t,s)=>{const{__scopePopover:n,...r}=t,a=Q(Nt,n),o=ue(n),i=$e(s,a.triggerRef),c=e.jsx(J.button,{type:"button","aria-haspopup":"dialog","aria-expanded":a.open,"aria-controls":a.contentId,"data-state":Dt(a.open),...r,ref:i,onClick:V(t.onClick,a.onOpenToggle)});return a.hasCustomAnchor?c:e.jsx(ze,{asChild:!0,...o,children:c})});St.displayName=Nt;var He="PopoverPortal",[In,Mn]=bt(He,{forceMount:void 0}),Pt=t=>{const{__scopePopover:s,forceMount:n,children:r,container:a}=t,o=Q(He,s);return e.jsx(In,{scope:s,forceMount:n,children:e.jsx(De,{present:n||o.open,children:e.jsx(wr,{asChild:!0,container:a,children:r})})})};Pt.displayName=He;var oe="PopoverContent",$t=x.forwardRef((t,s)=>{const n=Mn(oe,t.__scopePopover),{forceMount:r=n.forceMount,...a}=t,o=Q(oe,t.__scopePopover);return e.jsx(De,{present:r||o.open,children:o.modal?e.jsx(_n,{...a,ref:s}):e.jsx(Fn,{...a,ref:s})})});$t.displayName=oe;var _n=x.forwardRef((t,s)=>{const n=Q(oe,t.__scopePopover),r=x.useRef(null),a=$e(s,r),o=x.useRef(!1);return x.useEffect(()=>{const i=r.current;if(i)return gr(i)},[]),e.jsx(vr,{as:Mt,allowPinchZoom:!0,children:e.jsx(Ct,{...t,ref:a,trapFocus:n.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:V(t.onCloseAutoFocus,i=>{var c;i.preventDefault(),o.current||(c=n.triggerRef.current)==null||c.focus()}),onPointerDownOutside:V(t.onPointerDownOutside,i=>{const c=i.detail.originalEvent,l=c.button===0&&c.ctrlKey===!0,m=c.button===2||l;o.current=m},{checkForDefaultPrevented:!1}),onFocusOutside:V(t.onFocusOutside,i=>i.preventDefault(),{checkForDefaultPrevented:!1})})})}),Fn=x.forwardRef((t,s)=>{const n=Q(oe,t.__scopePopover),r=x.useRef(!1),a=x.useRef(!1);return e.jsx(Ct,{...t,ref:s,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:o=>{var i,c;(i=t.onCloseAutoFocus)==null||i.call(t,o),o.defaultPrevented||(r.current||(c=n.triggerRef.current)==null||c.focus(),o.preventDefault()),r.current=!1,a.current=!1},onInteractOutside:o=>{var l,m;(l=t.onInteractOutside)==null||l.call(t,o),o.defaultPrevented||(r.current=!0,o.detail.originalEvent.type==="pointerdown"&&(a.current=!0));const i=o.target;((m=n.triggerRef.current)==null?void 0:m.contains(i))&&o.preventDefault(),o.detail.originalEvent.type==="focusin"&&a.current&&o.preventDefault()}})}),Ct=x.forwardRef((t,s)=>{const{__scopePopover:n,trapFocus:r,onOpenAutoFocus:a,onCloseAutoFocus:o,disableOutsidePointerEvents:i,onEscapeKeyDown:c,onPointerDownOutside:l,onFocusOutside:m,onInteractOutside:u,...p}=t,g=Q(oe,n),y=ue(n);return jr(),e.jsx(br,{asChild:!0,loop:!0,trapped:r,onMountAutoFocus:a,onUnmountAutoFocus:o,children:e.jsx(_t,{asChild:!0,disableOutsidePointerEvents:i,onInteractOutside:u,onEscapeKeyDown:c,onPointerDownOutside:l,onFocusOutside:m,onDismiss:()=>g.onOpenChange(!1),children:e.jsx(Ft,{"data-state":Dt(g.open),role:"dialog",id:g.contentId,...y,...p,ref:s,style:{...p.style,"--radix-popover-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-popover-content-available-width":"var(--radix-popper-available-width)","--radix-popover-content-available-height":"var(--radix-popper-available-height)","--radix-popover-trigger-width":"var(--radix-popper-anchor-width)","--radix-popover-trigger-height":"var(--radix-popper-anchor-height)"}})})})}),Tt="PopoverClose",An=x.forwardRef((t,s)=>{const{__scopePopover:n,...r}=t,a=Q(Tt,n);return e.jsx(J.button,{type:"button",...r,ref:s,onClick:V(t.onClick,()=>a.onOpenChange(!1))})});An.displayName=Tt;var Ln="PopoverArrow",Un=x.forwardRef((t,s)=>{const{__scopePopover:n,...r}=t,a=ue(n);return e.jsx(At,{...a,...r,ref:s})});Un.displayName=Ln;function Dt(t){return t?"open":"closed"}var Hn=wt,Yn=St,Bn=Pt,Vn=$t;function zn(){var i,c;const t=W(),[s,n]=x.useState(!1),r=x.useRef(null);function a(){n(!1)}const o=(i=t.playground)==null?void 0:i.appName;return e.jsx(e.Fragment,{children:e.jsxs(Hn,{open:s,onOpenChange:n,children:[e.jsx(Yn,{asChild:!0,children:e.jsxs("button",{className:"flex h-full items-center gap-1 border-r px-6 py-3 font-mono text-sm uppercase","aria-label":"Relevant Files",children:[e.jsx(O,{name:"Files"}),"Files"]})}),e.jsx(Bn,{children:e.jsx(Vn,{ref:r,className:"slideRightContent lg:slideUpContent invert-theme z-10 select-none rounded bg-background px-9 py-8 text-foreground",align:"start",sideOffset:5,children:e.jsxs("div",{className:"launch-editor-wrapper",children:[e.jsx("strong",{className:"inline-block px-2 pb-4 font-semibold uppercase",children:"Relevant Files"}),t.problem&&((c=t.playground)==null?void 0:c.appName)!==t.problem.name?e.jsx("div",{className:"mb-2 rounded p-1 font-mono font-medium",children:e.jsx(Ae,{appName:t.problem.name})}):null,e.jsx("div",{id:"files",children:e.jsx(x.Suspense,{fallback:e.jsx(G,{content:"Loading diff",children:e.jsx("div",{className:"flex justify-center",children:e.jsx(O,{name:"Refresh",className:"h-8 w-8 animate-spin"})})}),children:e.jsx(Ke,{resolve:t.diff,errorElement:e.jsx("div",{className:"text-foreground-danger",children:"Something went wrong."}),children:({diffFiles:l})=>{if(!l)return e.jsx("p",{className:"text-foreground-danger",children:"Unable to determine diff"});if(typeof l=="string")return e.jsx("p",{className:"text-foreground-danger",children:l});if(!l.length)return e.jsx("p",{children:"No files changed"});const m=o||ENV.EPICSHOP_GITHUB_ROOT?{}:{title:"You must 'Set to Playground' before opening a file",className:"not-allowed"};return e.jsxs("ul",{...m,children:[l.length>1&&!ENV.EPICSHOP_DEPLOYED?e.jsx("div",{className:"mb-2 border-b border-b-gray-50 border-opacity-50 pb-2 font-sans",children:e.jsx(ce,{appFile:l.map(u=>`${u.path},${u.line},1`),appName:"playground",onUpdate:a,children:e.jsx("p",{children:"Open All Files"})})}):null,l.map(u=>{var p;return e.jsx("li",{"data-state":u.status,children:e.jsx(ce,{appFile:`${u.path},${u.line},1`,appName:ENV.EPICSHOP_DEPLOYED?((p=t.problem)==null?void 0:p.name)??"playground":"playground",onUpdate:a,children:e.jsx("code",{children:u.path})})},u.path)})]})}})})})]})})})]})})}function Et(t,s){var i;const n=(t==null?void 0:t.exerciseStepApp.exerciseNumber.toString().padStart(2,"0"))??"00",r=(t==null?void 0:t.exerciseStepApp.stepNumber.toString().padStart(2,"0"))??"00",a={problem:"💪",solution:"🏁"}[(t==null?void 0:t.type)??"problem"],o=((i=t==null?void 0:t[t.type])==null?void 0:i.title)??"N/A";return{emoji:a,stepNumber:r,title:o,exerciseNumber:n,exerciseTitle:(t==null?void 0:t.exerciseTitle)??"Unknown exercise",workshopTitle:s,type:(t==null?void 0:t.type)??"problem"}}const bs=({data:t,matches:s,params:n})=>{var m;const r=(m=s.find(u=>u.id==="root"))==null?void 0:m.data;if(!t||!r)return[{title:"🦉 | Error"}];const{emoji:a,stepNumber:o,title:i,exerciseNumber:c,exerciseTitle:l}=Et(t);return ur({title:`${a} | ${o}. ${i} | ${c}. ${l} | ${r.workshopTitle}`,description:`${n.type} step for exercise ${c}. ${l}`,ogTitle:i,ogDescription:`${l} step ${Number(o)} ${n.type}`,instructor:r.instructor,requestInfo:r.requestInfo})},Se=["playground","problem","solution","tests","diff","chat"],Gn=t=>!!(t&&Se.includes(t));function Kn(t,s,n){const r=new URLSearchParams(t);return n===null?r.delete(s):r.set(s,n),r}function ws(){var p,g,y,S,d,$,T;const t=W(),[s]=Ie(),n=s.get("preview"),r=x.useRef(null),a=Et(t),o=Ee(),i=Rt();function c(j){var E,L;if(j==="tests")return ENV.EPICSHOP_DEPLOYED||!t.playground||t.playground.test.type==="none";if(j==="problem"||j==="solution"){if(((E=t[j])==null?void 0:E.dev.type)==="none")return!0;if(ENV.EPICSHOP_DEPLOYED)return((L=t[j])==null?void 0:L.dev.type)!=="browser"}return!!(j==="playground"&&ENV.EPICSHOP_DEPLOYED)}const l=Gn(n)?n:Se.find(j=>!c(j)),m=`/diff?${new URLSearchParams({app1:((p=t.problem)==null?void 0:p.name)??"",app2:((g=t.solution)==null?void 0:g.name)??""})}`;function u(j){j.altKey&&!j.ctrlKey&&!j.shiftKey&&!j.metaKey&&(j.preventDefault(),i(m))}return e.jsx("div",{className:"flex max-w-full flex-grow flex-col",children:e.jsxs("main",{className:"flex flex-grow flex-col sm:grid sm:h-full sm:min-h-[800px] sm:grid-cols-1 sm:grid-rows-2 md:min-h-[unset] lg:grid-cols-2 lg:grid-rows-1",children:[e.jsxs("div",{className:"relative flex flex-col sm:col-span-1 sm:row-span-1 sm:h-full lg:border-r",children:[e.jsx("h1",{className:"h-14 border-b pl-10 pr-5 text-sm font-medium leading-tight",children:e.jsxs("div",{className:"flex h-14 flex-wrap items-center justify-between gap-x-2 py-2",children:[e.jsxs("div",{className:"flex items-center justify-start gap-x-2 uppercase",children:[e.jsxs(ae,{to:`/${a.exerciseNumber}`,className:"hover:underline",children:[a.exerciseNumber,". ",a.exerciseTitle]}),"/",e.jsxs(ae,{to:".",className:"hover:underline",children:[a.stepNumber,". ",a.title," (",a.emoji," ",a.type,")"]})]}),t.problem&&((y=t.playground)==null?void 0:y.appName)!==t.problem.name?e.jsx("div",{className:"hidden md:block",children:e.jsx(Ae,{appName:t.problem.name})}):null]})}),e.jsx("article",{id:t.articleId,className:"shadow-on-scrollbox h-full w-full max-w-none flex-1 scroll-pt-6 space-y-6 overflow-y-auto p-2 scrollbar-thin scrollbar-thumb-scrollbar sm:p-10 sm:pt-8",children:t.exerciseStepApp.instructionsCode?e.jsx(fn,{inBrowserBrowserRef:r}):e.jsx("p",{children:"No instructions yet..."})},t.articleId),e.jsx(kt,{elementQuery:`#${t.articleId}`},`scroll-${t.articleId}`),t.type==="solution"?e.jsx(lr,{type:"step",exerciseNumber:t.exerciseStepApp.exerciseNumber,stepNumber:t.exerciseStepApp.stepNumber,className:"h-14 border-t px-6"}):null,e.jsxs("div",{className:"flex h-16 justify-between border-b-4 border-t lg:border-b-0",children:[e.jsx("div",{children:e.jsx("div",{className:"h-full",children:e.jsx(zn,{})})}),e.jsx(ir,{appName:t.exerciseStepApp.name,relativePath:t.exerciseStepApp.relativePath}),e.jsx(ar,{prev:t.prevStepLink?{to:t.prevStepLink.to,"aria-label":"Previous Step"}:null,next:t.nextStepLink?{to:t.nextStepLink.to,"aria-label":"Next Step"}:null})]})]}),e.jsxs(_r,{className:"relative flex flex-col overflow-y-auto sm:col-span-1 sm:row-span-1",value:l,children:[e.jsx(Fr,{className:"h-14 min-h-14 overflow-x-hidden border-b scrollbar-thin scrollbar-thumb-scrollbar",children:Se.map(j=>{const E=c(j);return e.jsx(Ar,{value:j,hidden:E,asChild:!0,children:e.jsx(ae,{id:`${j}-tab`,className:re("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",E?"hidden":"inline-block"),preventScrollReset:!0,prefetch:"intent",onClick:u,to:j==="diff"&&o?m:`?${Kn(s,"preview",j==="playground"?null:j)}`,children:j})},j)})}),e.jsxs("div",{className:"relative z-10 flex min-h-96 flex-grow flex-col overflow-y-auto",children:[e.jsx(se,{value:"playground",className:"flex w-full flex-grow items-center justify-center self-start radix-state-inactive:hidden",children:e.jsx(on,{appInfo:t.playground,problemAppName:(S=t.problem)==null?void 0:S.name,inBrowserBrowserRef:r,allApps:t.allApps,isUpToDate:((d=t.playground)==null?void 0:d.isUpToDate)??!1})}),e.jsx(se,{value:"problem",className:"flex w-full flex-grow items-center justify-center self-start radix-state-inactive:hidden",children:e.jsx(Ne,{appInfo:t.problem,inBrowserBrowserRef:r})}),e.jsx(se,{value:"solution",className:"flex w-full flex-grow items-center justify-center self-start radix-state-inactive:hidden",children:e.jsx(Ne,{appInfo:t.solution,inBrowserBrowserRef:r})}),e.jsx(se,{value:"tests",className:"flex w-full flex-grow items-start justify-center self-start overflow-hidden radix-state-inactive:hidden",children:e.jsx(Rn,{appInfo:t.playground,problemAppName:($=t.problem)==null?void 0:$.name,allApps:t.allApps,isUpToDate:((T=t.playground)==null?void 0:T.isUpToDate)??!1})}),e.jsx(se,{value:"diff",className:"flex h-full w-full flex-grow items-start justify-center self-start radix-state-inactive:hidden",children:e.jsx(nr,{diff:t.diff,allApps:t.allApps})}),e.jsx(se,{value:"chat",className:"flex h-full w-full flex-grow items-start justify-center self-start radix-state-inactive:hidden",children:e.jsx(Wr,{})})]})]})]})})}function ys(){return e.jsx(sr,{statusHandlers:{404:()=>e.jsx("p",{children:"Sorry, we couldn't find an app here."})}})}export{ys as ErrorBoundary,ws as default,bs as meta};
2
+ //# sourceMappingURL=_layout-Bdd3mpVx.js.map